| 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__ */ |