119 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						|
/*
 | 
						|
 *
 | 
						|
 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
 |