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