| |
| /* |
| * |
| Copyright (c) Eicon Networks, 2002. |
| * |
| This source file is supplied for the use with |
| Eicon Networks range of DIVA Server Adapters. |
| * |
| Eicon File Revision : 2.1 |
| * |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| * |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY |
| implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| See the GNU General Public License for more details. |
| * |
| You should have received a copy of the GNU General Public License |
| along with this program; if not, write to the Free Software |
| Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| * |
| */ |
| /* |
| * some macros for detailed trace management |
| */ |
| #include "di_dbg.h" |
| /*****************************************************************************/ |
| #define XMOREC 0x1f |
| #define XMOREF 0x20 |
| #define XBUSY 0x40 |
| #define RMORE 0x80 |
| #define DIVA_MISC_FLAGS_REMOVE_PENDING 0x01 |
| #define DIVA_MISC_FLAGS_NO_RC_CANCELLING 0x02 |
| #define DIVA_MISC_FLAGS_RX_DMA 0x04 |
| /* structure for all information we have to keep on a per */ |
| /* adapater basis */ |
| typedef struct adapter_s ADAPTER; |
| struct adapter_s { |
| void *io; |
| byte IdTable[256]; |
| byte IdTypeTable[256]; |
| byte FlowControlIdTable[256]; |
| byte FlowControlSkipTable[256]; |
| byte ReadyInt; |
| byte RcExtensionSupported; |
| byte misc_flags_table[256]; |
| dword protocol_capabilities; |
| byte (*ram_in)(ADAPTER *a, void *adr); |
| word (*ram_inw)(ADAPTER *a, void *adr); |
| void (*ram_in_buffer)(ADAPTER *a, void *adr, void *P, word length); |
| void (*ram_look_ahead)(ADAPTER *a, PBUFFER *RBuffer, ENTITY *e); |
| void (*ram_out)(ADAPTER *a, void *adr, byte data); |
| void (*ram_outw)(ADAPTER *a, void *adr, word data); |
| void (*ram_out_buffer)(ADAPTER *a, void *adr, void *P, word length); |
| void (*ram_inc)(ADAPTER *a, void *adr); |
| #if defined(DIVA_ISTREAM) |
| dword rx_stream[256]; |
| dword tx_stream[256]; |
| word tx_pos[256]; |
| word rx_pos[256]; |
| byte stream_buffer[2512]; |
| dword (*ram_offset)(ADAPTER *a); |
| void (*ram_out_dw)(ADAPTER *a, |
| void *addr, |
| const dword *data, |
| int dwords); |
| void (*ram_in_dw)(ADAPTER *a, |
| void *addr, |
| dword *data, |
| int dwords); |
| void (*istream_wakeup)(ADAPTER *a); |
| #else |
| byte stream_buffer[4]; |
| #endif |
| }; |
| /*------------------------------------------------------------------*/ |
| /* public functions of IDI common code */ |
| /*------------------------------------------------------------------*/ |
| void pr_out(ADAPTER *a); |
| byte pr_dpc(ADAPTER *a); |
| byte scom_test_int(ADAPTER *a); |
| void scom_clear_int(ADAPTER *a); |
| /*------------------------------------------------------------------*/ |
| /* OS specific functions used by IDI common code */ |
| /*------------------------------------------------------------------*/ |
| void free_entity(ADAPTER *a, byte e_no); |
| void assign_queue(ADAPTER *a, byte e_no, word ref); |
| byte get_assign(ADAPTER *a, word ref); |
| void req_queue(ADAPTER *a, byte e_no); |
| byte look_req(ADAPTER *a); |
| void next_req(ADAPTER *a); |
| ENTITY *entity_ptr(ADAPTER *a, byte e_no); |
| #if defined(DIVA_ISTREAM) |
| struct _diva_xdi_stream_interface; |
| void diva_xdi_provide_istream_info(ADAPTER *a, |
| struct _diva_xdi_stream_interface *pI); |
| void pr_stream(ADAPTER *a); |
| int diva_istream_write(void *context, |
| int Id, |
| void *data, |
| int length, |
| int final, |
| byte usr1, |
| byte usr2); |
| int diva_istream_read(void *context, |
| int Id, |
| void *data, |
| int max_length, |
| int *final, |
| byte *usr1, |
| byte *usr2); |
| #if defined(DIVA_IDI_RX_DMA) |
| #include "diva_dma.h" |
| #endif |
| #endif |