Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 | /* * 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. * */ #ifndef __DIVA_XDI_COMMON_IO_H_INC__ /* { */ #define __DIVA_XDI_COMMON_IO_H_INC__ /* maximum = 16 adapters */ #define DI_MAX_LINKS MAX_ADAPTER #define ISDN_MAX_NUM_LEN 60 /* -------------------------------------------------------------------------- structure for quadro card management (obsolete for systems that do provide per card load event) -------------------------------------------------------------------------- */ typedef struct { dword Num ; DEVICE_NAME DeviceName[4] ; PISDN_ADAPTER QuadroAdapter[4] ; } ADAPTER_LIST_ENTRY, *PADAPTER_LIST_ENTRY ; /* -------------------------------------------------------------------------- Special OS memory support structures -------------------------------------------------------------------------- */ #define MAX_MAPPED_ENTRIES 8 typedef struct { void * Address; dword Length; } ADAPTER_MEMORY ; /* -------------------------------------------------------------------------- Configuration of XDI clients carried by XDI -------------------------------------------------------------------------- */ #define DIVA_XDI_CAPI_CFG_1_DYNAMIC_L1_ON 0x01 #define DIVA_XDI_CAPI_CFG_1_GROUP_POPTIMIZATION_ON 0x02 typedef struct _diva_xdi_capi_cfg { byte cfg_1; } diva_xdi_capi_cfg_t; /* -------------------------------------------------------------------------- Main data structure kept per adapter -------------------------------------------------------------------------- */ struct _ISDN_ADAPTER { void (* DIRequest)(PISDN_ADAPTER, ENTITY *) ; int Initialized ; int RegisteredWithDidd ; int Unavailable ; /* callback function possible? */ int ResourcesClaimed ; int PnpBiosConfigUsed ; dword Logging ; dword features ; char ProtocolIdString[80] ; /* remember mapped memory areas */ ADAPTER_MEMORY MappedMemory[MAX_MAPPED_ENTRIES] ; CARD_PROPERTIES Properties ; dword cardType ; dword protocol_id ; /* configured protocol identifier */ char protocol_name[8] ; /* readable name of protocol */ dword BusType ; dword BusNumber ; dword slotNumber ; dword slotId ; dword ControllerNumber ; /* for QUADRO cards only */ PISDN_ADAPTER MultiMaster ; /* for 4-BRI card only - use MultiMaster or QuadroList */ PADAPTER_LIST_ENTRY QuadroList ; /* for QUADRO card only */ PDEVICE_OBJECT DeviceObject ; dword DeviceId ; diva_os_adapter_irq_info_t irq_info; dword volatile IrqCount ; int trapped ; dword DspCodeBaseAddr ; dword MaxDspCodeSize ; dword downloadAddr ; dword DspCodeBaseAddrTable[4] ; /* add. for MultiMaster */ dword MaxDspCodeSizeTable[4] ; /* add. for MultiMaster */ dword downloadAddrTable[4] ; /* add. for MultiMaster */ dword MemoryBase ; dword MemorySize ; byte *Address ; byte *reset ; byte *port ; byte *ram ; byte *cfg ; byte *prom ; byte *ctlReg ; struct pc_maint *pcm ; diva_os_dependent_devica_name_t os_name; byte Name[32] ; dword serialNo ; dword ANum ; dword ArchiveType ; /* ARCHIVE_TYPE_NONE ..._SINGLE ..._USGEN ..._MULTI */ char *ProtocolSuffix ; /* internal protocolfile table */ char Archive[32] ; char Protocol[32] ; char Oad1[ISDN_MAX_NUM_LEN] ; char Osa1[ISDN_MAX_NUM_LEN] ; char Oad2[ISDN_MAX_NUM_LEN] ; char Osa2[ISDN_MAX_NUM_LEN] ; char Spid1[ISDN_MAX_NUM_LEN] ; char Spid2[ISDN_MAX_NUM_LEN] ; byte nosig ; byte BriLayer2LinkCount ; /* amount of TEI's that adapter will support in P2MP mode */ dword Channels ; dword tei ; dword nt2 ; dword TerminalCount ; dword WatchDog ; dword Permanent ; dword BChMask ; /* B channel mask for unchannelized modes */ dword StableL2 ; dword DidLen ; dword NoOrderCheck ; dword ForceLaw; /* VoiceCoding - default:0, a-law: 1, my-law: 2 */ dword SigFlags ; dword LowChannel ; dword NoHscx30 ; dword ProtVersion ; dword crc4 ; dword L1TristateOrQsig ; /* enable Layer 1 Tristate (bit 2)Or Qsig params (bit 0,1)*/ dword InitialDspInfo ; dword ModemGuardTone ; dword ModemMinSpeed ; dword ModemMaxSpeed ; dword ModemOptions ; dword ModemOptions2 ; dword ModemNegotiationMode ; dword ModemModulationsMask ; dword ModemTransmitLevel ; dword FaxOptions ; dword FaxMaxSpeed ; dword Part68LevelLimiter ; dword UsEktsNumCallApp ; byte UsEktsFeatAddConf ; byte UsEktsFeatRemoveConf ; byte UsEktsFeatCallTransfer ; byte UsEktsFeatMsgWaiting ; byte QsigDialect; byte ForceVoiceMailAlert; byte DisableAutoSpid; byte ModemCarrierWaitTimeSec; byte ModemCarrierLossWaitTimeTenthSec; byte PiafsLinkTurnaroundInFrames; word QsigFeatures; dword GenerateRingtone ; diva_os_spin_lock_t isr_spin_lock; diva_os_spin_lock_t data_spin_lock; diva_os_soft_isr_t req_soft_isr; diva_os_soft_isr_t isr_soft_isr; diva_os_atomic_t in_dpc; PBUFFER RBuffer; /* Copy of receive lookahead buffer */ word e_max; word e_count; E_INFO *e_tbl; word assign; /* list of pending ASSIGNs */ word head; /* head of request queue */ word tail; /* tail of request queue */ ADAPTER a ; /* not a separate structure */ void (* out)(ADAPTER * a) ; byte (* dpc)(ADAPTER * a) ; byte (* tst_irq)(ADAPTER * a) ; void (* clr_irq)(ADAPTER * a) ; int (* load)(PISDN_ADAPTER) ; int (* mapmem)(PISDN_ADAPTER) ; int (* chkIrq)(PISDN_ADAPTER) ; void (* disIrq)(PISDN_ADAPTER) ; void (* start)(PISDN_ADAPTER) ; void (* stop)(PISDN_ADAPTER) ; void (* rstFnc)(PISDN_ADAPTER) ; void (* trapFnc)(PISDN_ADAPTER) ; void (* os_trap_nfy_Fnc)(PISDN_ADAPTER, dword) ; diva_os_isr_callback_t diva_isr_handler; dword sdram_bar; dword fpga_features; volatile int pcm_pending; volatile unsigned long pcm_data; diva_xdi_capi_cfg_t capi_cfg; dword tasks; void* dma_map; }; /* --------------------------------------------------------------------- Entity table --------------------------------------------------------------------- */ struct e_info_s { ENTITY * e; byte next; /* chaining index */ word assign_ref; /* assign reference */ }; /* --------------------------------------------------------------------- S-cards shared ram structure for loading --------------------------------------------------------------------- */ struct s_load { byte ctrl; byte card; byte msize; byte fill0; word ebit; word elocl; word eloch; byte reserved[20]; word signature; byte fill[224]; byte b[256]; }; #define PR_RAM ((struct pr_ram *)0) #define RAM ((struct dual *)0) /* --------------------------------------------------------------------- Functions for port io --------------------------------------------------------------------- */ void outp_words_from_buffer (word* adr, byte* P, word len); void inp_words_to_buffer (word* adr, byte* P, word len); /* --------------------------------------------------------------------- platform specific conversions --------------------------------------------------------------------- */ extern void * PTR_P(ADAPTER * a, ENTITY * e, void * P); extern void * PTR_X(ADAPTER * a, ENTITY * e); extern void * PTR_R(ADAPTER * a, ENTITY * e); extern void CALLBACK(ADAPTER * a, ENTITY * e); extern void set_ram(void * * adr_ptr); /* --------------------------------------------------------------------- ram access functions for io mapped cards --------------------------------------------------------------------- */ byte io_in(ADAPTER * a, void * adr); word io_inw(ADAPTER * a, void * adr); void io_in_buffer(ADAPTER * a, void * adr, void * P, word length); void io_look_ahead(ADAPTER * a, PBUFFER * RBuffer, ENTITY * e); void io_out(ADAPTER * a, void * adr, byte data); void io_outw(ADAPTER * a, void * adr, word data); void io_out_buffer(ADAPTER * a, void * adr, void * P, word length); void io_inc(ADAPTER * a, void * adr); /* --------------------------------------------------------------------- ram access functions for memory mapped cards --------------------------------------------------------------------- */ byte mem_in(ADAPTER * a, void * adr); word mem_inw(ADAPTER * a, void * adr); void mem_in_buffer(ADAPTER * a, void * adr, void * P, word length); void mem_look_ahead(ADAPTER * a, PBUFFER * RBuffer, ENTITY * e); void mem_out(ADAPTER * a, void * adr, byte data); void mem_outw(ADAPTER * a, void * adr, word data); void mem_out_buffer(ADAPTER * a, void * adr, void * P, word length); void mem_inc(ADAPTER * a, void * adr); void mem_in_dw (ADAPTER *a, void *addr, dword* data, int dwords); void mem_out_dw (ADAPTER *a, void *addr, const dword* data, int dwords); /* --------------------------------------------------------------------- functions exported by io.c --------------------------------------------------------------------- */ extern IDI_CALL Requests[MAX_ADAPTER] ; extern void DIDpcRoutine (struct _diva_os_soft_isr* psoft_isr, void* context); extern void request (PISDN_ADAPTER, ENTITY *) ; /* --------------------------------------------------------------------- trapFn helpers, used to recover debug trace from dead card --------------------------------------------------------------------- */ typedef struct { word *buf ; word cnt ; word out ; } Xdesc ; extern void dump_trap_frame (PISDN_ADAPTER IoAdapter, byte *exception) ; extern void dump_xlog_buffer (PISDN_ADAPTER IoAdapter, Xdesc *xlogDesc) ; /* --------------------------------------------------------------------- */ #endif /* } __DIVA_XDI_COMMON_IO_H_INC__ */ |