
/*
 *
  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 pr_test_int(ADAPTER * a);
void pr_clear_int(ADAPTER * a);
void scom_out(ADAPTER * a);
byte scom_dpc(ADAPTER * a);
byte scom_test_int(ADAPTER * a);
void scom_clear_int(ADAPTER * a);
void quadro_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
