1 /* 2 * Main internal include file for Diva Server driver 3 * 4 * Copyright (C) Eicon Technology Corporation, 2000. 5 * 6 * Eicon File Revision : 1.7 7 * 8 * This software may be used and distributed according to the terms 9 * of the GNU General Public License, incorporated herein by reference. 10 * 11 */ 12 13 #if !defined(ADAPTER_H) 14 #define ADAPTER_H 15 16 #include "sys.h" 17 #include "idi.h" 18 #include "divas.h" 19 #undef ID_MASK 20 #include "pc.h" 21 22 #define XMOREC 0x1f 23 #define XMOREF 0x20 24 #define XBUSY 0x40 25 #define RMORE 0x80 26 27 /* structure for all information we have to keep on a per */ 28 /* adapater basis */ 29 30 typedef struct adapter_s ADAPTER; 31 32 struct adapter_s { 33 void * io; 34 35 byte IdTable[256]; 36 byte ReadyInt; 37 38 byte (* ram_in)(ADAPTER * a, void * adr); 39 word (* ram_inw)(ADAPTER * a, void * adr); 40 void (* ram_in_buffer)(ADAPTER * a, void * adr, void * P, word length); 41 void (* ram_look_ahead)(ADAPTER * a, PBUFFER * RBuffer, ENTITY * e); 42 43 void (* ram_out)(ADAPTER * a, void * adr, byte data); 44 void (* ram_outw)(ADAPTER * a, void * adr, word data); 45 void (* ram_out_buffer)(ADAPTER * a, void * adr, void * P, word length); 46 47 void (* ram_inc)(ADAPTER * a, void * adr); 48 }; 49 50 typedef struct card card_t; 51 52 typedef int card_load_fn_t(card_t *card, dia_load_t *load); 53 typedef int card_config_fn_t(card_t *card, dia_config_t *config); 54 typedef int card_start_fn_t(card_t *card, byte *channels); 55 typedef int card_reset_fn_t(card_t *card); 56 typedef int card_mem_get_fn_t(card_t *card, mem_block_t *mem_block); 57 58 #define MAX_PENTITIES 256 /* Number of entities primary adapter */ 59 #define MAX_ENTITIES 16 /* Number of entities standard adapter */ 60 61 typedef struct e_info_s E_INFO; 62 63 struct e_info_s 64 { 65 ENTITY *e; /* entity pointer */ 66 byte next; /* chaining index */ 67 word assign_ref; /* assign reference */ 68 }; 69 70 /* DIVA card info (details hidden from user) */ 71 72 typedef struct ux_diva_card_s ux_diva_card_t; 73 74 /* card info */ 75 76 struct card 77 { 78 ADAPTER a; /* per-adapter information */ 79 dia_card_t cfg; /* card configuration */ 80 int state; /* State of the adapter */ 81 dword serial_no; /* serial number */ 82 int test_int_pend; /* set for interrupt testing */ 83 ux_diva_card_t *hw; /* O/S-specific handle */ 84 card_reset_fn_t *card_reset; /* call this to reset card */ 85 card_load_fn_t *card_load; /* call this to load card */ 86 card_config_fn_t *card_config; /* call this to config card */ 87 card_start_fn_t *card_start; /* call this to start card */ 88 card_mem_get_fn_t *card_mem_get; /* call this to get card memory */ 89 E_INFO *e_tbl; /* table of ENTITY pointers */ 90 byte e_head; /* list of active ENTITIES */ 91 byte e_tail; /* list of active ENTITIES */ 92 int e_count; /* # of active ENTITIES */ 93 int e_max; /* total # of ENTITIES */ 94 byte assign; /* assign queue entry */ 95 PBUFFER RBuffer; /* Copy of receive lookahead buffer */ 96 int log_types; /* bit-mask of active logs */ 97 word xlog_offset; /* offset to XLOG buffer on card */ 98 void (*out)(ADAPTER *a); 99 byte (*dpc)(ADAPTER * a); 100 byte (*test_int)(ADAPTER * a); 101 void (*clear_int)(ADAPTER * a); 102 void (*reset_int)(card_t *c); 103 int is_live; 104 105 int (*card_isr)(card_t *card); 106 107 int int_pend; /* interrupt pending */ 108 long interrupt_reentered; 109 long dpc_reentered; 110 int set_xlog_request; 111 112 } ; 113 114 /* card information */ 115 116 #define MAX_CARDS 20 /* max number of cards on a system */ 117 118 extern 119 card_t DivasCards[]; 120 121 extern 122 int DivasCardNext; 123 124 extern 125 dia_config_t DivasCardConfigs[]; 126 127 extern 128 byte DivasFlavourConfig[]; 129 130 /*------------------------------------------------------------------*/ 131 /* public functions of IDI common code */ 132 /*------------------------------------------------------------------*/ 133 134 void DivasOut(ADAPTER * a); 135 byte DivasDpc(ADAPTER * a); 136 byte DivasTestInt(ADAPTER * a); 137 void DivasClearInt(ADAPTER * a); 138 139 /*------------------------------------------------------------------*/ 140 /* public functions of configuration platform-specific code */ 141 /*------------------------------------------------------------------*/ 142 143 int DivasConfigGet(dia_card_t *card); 144 145 /*------------------------------------------------------------------*/ 146 /* public functions of LOG related code */ 147 /*------------------------------------------------------------------*/ 148 149 void DivasXlogReq(int card_num); 150 int DivasXlogRetrieve(card_t *card); 151 void DivasLog(dia_log_t *log); 152 void DivasLogIdi(card_t *card, ENTITY *e, int request); 153 154 /*------------------------------------------------------------------*/ 155 /* public functions to initialise cards for each type supported */ 156 /*------------------------------------------------------------------*/ 157 158 int DivasPriInit(card_t *card, dia_card_t *cfg); 159 160 int DivasBriInit(card_t *card, dia_card_t *cfg); 161 int Divas4BriInit(card_t *card, dia_card_t *cfg); 162 void DivasBriPatch(card_t *card); 163 164 /*------------------------------------------------------------------*/ 165 /* public functions of log common code */ 166 /*------------------------------------------------------------------*/ 167 168 extern char *DivasLogFifoRead(void); 169 extern void DivasLogFifoWrite(char *entry, int length); 170 extern int DivasLogFifoEmpty(void); 171 extern int DivasLogFifoFull(void); 172 extern void DivasLogAdd(void *buffer, int length); 173 174 /*------------------------------------------------------------------*/ 175 /* public functions of misc. platform-specific code */ 176 /*------------------------------------------------------------------*/ 177 178 int DivasDpcSchedule(void); 179 void DivasDoDpc(void *); 180 void DivasDoRequestDpc(void *pData); 181 int DivasScheduleRequestDpc(void); 182 183 /* table of IDI request functions */ 184 185 extern 186 IDI_CALL DivasIdiRequest[]; 187 188 /* 189 * intialisation entry point 190 */ 191 192 int DivasInit(void); 193 194 /* 195 * Get information on the number and type of cards present 196 */ 197 198 extern 199 int DivasCardsDiscover(void); 200 201 /* 202 * initialise a new card 203 */ 204 205 int DivasCardNew(dia_card_t *card); 206 207 /* 208 * configure specified card 209 */ 210 211 int DivasCardConfig(dia_config_t *config); 212 213 /* 214 * load specified binary code onto card 215 */ 216 217 int DivasCardLoad(dia_load_t *load); 218 219 /* 220 * start specified card running 221 */ 222 223 int DivasCardStart(int card_id); 224 225 /* 226 * ISR for card 227 * Returns 0 if specified card was interrupting 228 */ 229 230 int DivasIsr(void *arg); 231 232 /* 233 * Get number of active cards 234 */ 235 236 int DivasGetNum(void); 237 238 /* 239 * Get list of active cards 240 */ 241 242 int DivasGetList(dia_card_list_t *card_list); 243 244 /* definitions common to several card types */ 245 246 #define DIVAS_SHARED_OFFSET (0x1000) 247 248 #endif /* ADAPTER_H */ 249