Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 achievment */ |
| 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__ */ |