1 2 /* 3 * 4 Copyright (c) Eicon Networks, 2002. 5 * 6 This source file is supplied for the use with 7 Eicon Networks range of DIVA Server Adapters. 8 * 9 Eicon File Revision : 2.1 10 * 11 This program is free software; you can redistribute it and/or modify 12 it under the terms of the GNU General Public License as published by 13 the Free Software Foundation; either version 2, or (at your option) 14 any later version. 15 * 16 This program is distributed in the hope that it will be useful, 17 but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY 18 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 19 See the GNU General Public License for more details. 20 * 21 You should have received a copy of the GNU General Public License 22 along with this program; if not, write to the Free Software 23 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * 25 */ 26 #ifndef __DIVA_XDI_COMMON_IO_H_INC__ /* { */ 27 #define __DIVA_XDI_COMMON_IO_H_INC__ 28 /* 29 maximum = 16 adapters 30 */ 31 #define DI_MAX_LINKS MAX_ADAPTER 32 #define ISDN_MAX_NUM_LEN 60 33 /* -------------------------------------------------------------------------- 34 structure for quadro card management (obsolete for 35 systems that do provide per card load event) 36 -------------------------------------------------------------------------- */ 37 typedef struct { 38 dword Num; 39 DEVICE_NAME DeviceName[4]; 40 PISDN_ADAPTER QuadroAdapter[4]; 41 } ADAPTER_LIST_ENTRY, *PADAPTER_LIST_ENTRY; 42 /* -------------------------------------------------------------------------- 43 Special OS memory support structures 44 -------------------------------------------------------------------------- */ 45 #define MAX_MAPPED_ENTRIES 8 46 typedef struct { 47 void *Address; 48 dword Length; 49 } ADAPTER_MEMORY; 50 /* -------------------------------------------------------------------------- 51 Configuration of XDI clients carried by XDI 52 -------------------------------------------------------------------------- */ 53 #define DIVA_XDI_CAPI_CFG_1_DYNAMIC_L1_ON 0x01 54 #define DIVA_XDI_CAPI_CFG_1_GROUP_POPTIMIZATION_ON 0x02 55 typedef struct _diva_xdi_capi_cfg { 56 byte cfg_1; 57 } diva_xdi_capi_cfg_t; 58 /* -------------------------------------------------------------------------- 59 Main data structure kept per adapter 60 -------------------------------------------------------------------------- */ 61 struct _ISDN_ADAPTER { 62 void (*DIRequest)(PISDN_ADAPTER, ENTITY *); 63 int State; /* from NT4 1.srv, a good idea, but a poor achievement */ 64 int Initialized; 65 int RegisteredWithDidd; 66 int Unavailable; /* callback function possible? */ 67 int ResourcesClaimed; 68 int PnpBiosConfigUsed; 69 dword Logging; 70 dword features; 71 char ProtocolIdString[80]; 72 /* 73 remember mapped memory areas 74 */ 75 ADAPTER_MEMORY MappedMemory[MAX_MAPPED_ENTRIES]; 76 CARD_PROPERTIES Properties; 77 dword cardType; 78 dword protocol_id; /* configured protocol identifier */ 79 char protocol_name[8]; /* readable name of protocol */ 80 dword BusType; 81 dword BusNumber; 82 dword slotNumber; 83 dword slotId; 84 dword ControllerNumber; /* for QUADRO cards only */ 85 PISDN_ADAPTER MultiMaster; /* for 4-BRI card only - use MultiMaster or QuadroList */ 86 PADAPTER_LIST_ENTRY QuadroList; /* for QUADRO card only */ 87 PDEVICE_OBJECT DeviceObject; 88 dword DeviceId; 89 diva_os_adapter_irq_info_t irq_info; 90 dword volatile IrqCount; 91 int trapped; 92 dword DspCodeBaseAddr; 93 dword MaxDspCodeSize; 94 dword downloadAddr; 95 dword DspCodeBaseAddrTable[4]; /* add. for MultiMaster */ 96 dword MaxDspCodeSizeTable[4]; /* add. for MultiMaster */ 97 dword downloadAddrTable[4]; /* add. for MultiMaster */ 98 dword MemoryBase; 99 dword MemorySize; 100 byte __iomem *Address; 101 byte __iomem *Config; 102 byte __iomem *Control; 103 byte __iomem *reset; 104 byte __iomem *port; 105 byte __iomem *ram; 106 byte __iomem *cfg; 107 byte __iomem *prom; 108 byte __iomem *ctlReg; 109 struct pc_maint *pcm; 110 diva_os_dependent_devica_name_t os_name; 111 byte Name[32]; 112 dword serialNo; 113 dword ANum; 114 dword ArchiveType; /* ARCHIVE_TYPE_NONE ..._SINGLE ..._USGEN ..._MULTI */ 115 char *ProtocolSuffix; /* internal protocolfile table */ 116 char Archive[32]; 117 char Protocol[32]; 118 char AddDownload[32]; /* Dsp- or other additional download files */ 119 char Oad1[ISDN_MAX_NUM_LEN]; 120 char Osa1[ISDN_MAX_NUM_LEN]; 121 char Oad2[ISDN_MAX_NUM_LEN]; 122 char Osa2[ISDN_MAX_NUM_LEN]; 123 char Spid1[ISDN_MAX_NUM_LEN]; 124 char Spid2[ISDN_MAX_NUM_LEN]; 125 byte nosig; 126 byte BriLayer2LinkCount; /* amount of TEI's that adapter will support in P2MP mode */ 127 dword Channels; 128 dword tei; 129 dword nt2; 130 dword TerminalCount; 131 dword WatchDog; 132 dword Permanent; 133 dword BChMask; /* B channel mask for unchannelized modes */ 134 dword StableL2; 135 dword DidLen; 136 dword NoOrderCheck; 137 dword ForceLaw; /* VoiceCoding - default:0, a-law: 1, my-law: 2 */ 138 dword SigFlags; 139 dword LowChannel; 140 dword NoHscx30; 141 dword ProtVersion; 142 dword crc4; 143 dword L1TristateOrQsig; /* enable Layer 1 Tristate (bit 2)Or Qsig params (bit 0,1)*/ 144 dword InitialDspInfo; 145 dword ModemGuardTone; 146 dword ModemMinSpeed; 147 dword ModemMaxSpeed; 148 dword ModemOptions; 149 dword ModemOptions2; 150 dword ModemNegotiationMode; 151 dword ModemModulationsMask; 152 dword ModemTransmitLevel; 153 dword FaxOptions; 154 dword FaxMaxSpeed; 155 dword Part68LevelLimiter; 156 dword UsEktsNumCallApp; 157 byte UsEktsFeatAddConf; 158 byte UsEktsFeatRemoveConf; 159 byte UsEktsFeatCallTransfer; 160 byte UsEktsFeatMsgWaiting; 161 byte QsigDialect; 162 byte ForceVoiceMailAlert; 163 byte DisableAutoSpid; 164 byte ModemCarrierWaitTimeSec; 165 byte ModemCarrierLossWaitTimeTenthSec; 166 byte PiafsLinkTurnaroundInFrames; 167 byte DiscAfterProgress; 168 byte AniDniLimiter[3]; 169 byte TxAttenuation; /* PRI/E1 only: attenuate TX signal */ 170 word QsigFeatures; 171 dword GenerateRingtone; 172 dword SupplementaryServicesFeatures; 173 dword R2Dialect; 174 dword R2CasOptions; 175 dword FaxV34Options; 176 dword DisabledDspMask; 177 dword AdapterTestMask; 178 dword DspImageLength; 179 word AlertToIn20mSecTicks; 180 word ModemEyeSetup; 181 byte R2CtryLength; 182 byte CCBSRelTimer; 183 byte *PcCfgBufferFile;/* flexible parameter via file */ 184 byte *PcCfgBuffer; /* flexible parameter via multistring */ 185 diva_os_dump_file_t dump_file; /* dump memory to file at lowest irq level */ 186 diva_os_board_trace_t board_trace; /* traces from the board */ 187 diva_os_spin_lock_t isr_spin_lock; 188 diva_os_spin_lock_t data_spin_lock; 189 diva_os_soft_isr_t req_soft_isr; 190 diva_os_soft_isr_t isr_soft_isr; 191 diva_os_atomic_t in_dpc; 192 PBUFFER RBuffer; /* Copy of receive lookahead buffer */ 193 word e_max; 194 word e_count; 195 E_INFO *e_tbl; 196 word assign; /* list of pending ASSIGNs */ 197 word head; /* head of request queue */ 198 word tail; /* tail of request queue */ 199 ADAPTER a; /* not a separate structure */ 200 void (*out)(ADAPTER *a); 201 byte (*dpc)(ADAPTER *a); 202 byte (*tst_irq)(ADAPTER *a); 203 void (*clr_irq)(ADAPTER *a); 204 int (*load)(PISDN_ADAPTER); 205 int (*mapmem)(PISDN_ADAPTER); 206 int (*chkIrq)(PISDN_ADAPTER); 207 void (*disIrq)(PISDN_ADAPTER); 208 void (*start)(PISDN_ADAPTER); 209 void (*stop)(PISDN_ADAPTER); 210 void (*rstFnc)(PISDN_ADAPTER); 211 void (*trapFnc)(PISDN_ADAPTER); 212 dword (*DetectDsps)(PISDN_ADAPTER); 213 void (*os_trap_nfy_Fnc)(PISDN_ADAPTER, dword); 214 diva_os_isr_callback_t diva_isr_handler; 215 dword sdram_bar; /* must be 32 bit */ 216 dword fpga_features; 217 volatile int pcm_pending; 218 volatile void *pcm_data; 219 diva_xdi_capi_cfg_t capi_cfg; 220 dword tasks; 221 void *dma_map; 222 int (*DivaAdapterTestProc)(PISDN_ADAPTER); 223 void *AdapterTestMemoryStart; 224 dword AdapterTestMemoryLength; 225 const byte *cfg_lib_memory_init; 226 dword cfg_lib_memory_init_length; 227 }; 228 /* --------------------------------------------------------------------- 229 Entity table 230 --------------------------------------------------------------------- */ 231 struct e_info_s { 232 ENTITY *e; 233 byte next; /* chaining index */ 234 word assign_ref; /* assign reference */ 235 }; 236 /* --------------------------------------------------------------------- 237 S-cards shared ram structure for loading 238 --------------------------------------------------------------------- */ 239 struct s_load { 240 byte ctrl; 241 byte card; 242 byte msize; 243 byte fill0; 244 word ebit; 245 word elocl; 246 word eloch; 247 byte reserved[20]; 248 word signature; 249 byte fill[224]; 250 byte b[256]; 251 }; 252 #define PR_RAM ((struct pr_ram *)0) 253 #define RAM ((struct dual *)0) 254 /* --------------------------------------------------------------------- 255 platform specific conversions 256 --------------------------------------------------------------------- */ 257 extern void *PTR_P(ADAPTER *a, ENTITY *e, void *P); 258 extern void *PTR_X(ADAPTER *a, ENTITY *e); 259 extern void *PTR_R(ADAPTER *a, ENTITY *e); 260 extern void CALLBACK(ADAPTER *a, ENTITY *e); 261 extern void set_ram(void **adr_ptr); 262 /* --------------------------------------------------------------------- 263 ram access functions for io mapped cards 264 --------------------------------------------------------------------- */ 265 byte io_in(ADAPTER *a, void *adr); 266 word io_inw(ADAPTER *a, void *adr); 267 void io_in_buffer(ADAPTER *a, void *adr, void *P, word length); 268 void io_look_ahead(ADAPTER *a, PBUFFER *RBuffer, ENTITY *e); 269 void io_out(ADAPTER *a, void *adr, byte data); 270 void io_outw(ADAPTER *a, void *adr, word data); 271 void io_out_buffer(ADAPTER *a, void *adr, void *P, word length); 272 void io_inc(ADAPTER *a, void *adr); 273 void bri_in_buffer(PISDN_ADAPTER IoAdapter, dword Pos, 274 void *Buf, dword Len); 275 int bri_out_buffer(PISDN_ADAPTER IoAdapter, dword Pos, 276 void *Buf, dword Len, int Verify); 277 /* --------------------------------------------------------------------- 278 ram access functions for memory mapped cards 279 --------------------------------------------------------------------- */ 280 byte mem_in(ADAPTER *a, void *adr); 281 word mem_inw(ADAPTER *a, void *adr); 282 void mem_in_buffer(ADAPTER *a, void *adr, void *P, word length); 283 void mem_look_ahead(ADAPTER *a, PBUFFER *RBuffer, ENTITY *e); 284 void mem_out(ADAPTER *a, void *adr, byte data); 285 void mem_outw(ADAPTER *a, void *adr, word data); 286 void mem_out_buffer(ADAPTER *a, void *adr, void *P, word length); 287 void mem_inc(ADAPTER *a, void *adr); 288 void mem_in_dw(ADAPTER *a, void *addr, dword *data, int dwords); 289 void mem_out_dw(ADAPTER *a, void *addr, const dword *data, int dwords); 290 /* --------------------------------------------------------------------- 291 functions exported by io.c 292 --------------------------------------------------------------------- */ 293 extern IDI_CALL Requests[MAX_ADAPTER]; 294 extern void DIDpcRoutine(struct _diva_os_soft_isr *psoft_isr, 295 void *context); 296 extern void request(PISDN_ADAPTER, ENTITY *); 297 /* --------------------------------------------------------------------- 298 trapFn helpers, used to recover debug trace from dead card 299 --------------------------------------------------------------------- */ 300 typedef struct { 301 word *buf; 302 word cnt; 303 word out; 304 } Xdesc; 305 extern void dump_trap_frame(PISDN_ADAPTER IoAdapter, byte __iomem *exception); 306 extern void dump_xlog_buffer(PISDN_ADAPTER IoAdapter, Xdesc *xlogDesc); 307 /* --------------------------------------------------------------------- */ 308 #endif /* } __DIVA_XDI_COMMON_IO_H_INC__ */ 309