4 Copyright (c) Eicon Networks, 2002.
6 This source file is supplied for the use with
7 Eicon Networks range of DIVA Server Adapters.
9 Eicon File Revision : 2.1
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)
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.
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.
26 #ifndef __DIVA_XDI_COMMON_IO_H_INC__ /* { */
27 #define __DIVA_XDI_COMMON_IO_H_INC__
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 -------------------------------------------------------------------------- */
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
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 {
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 */
65 int RegisteredWithDidd;
66 int Unavailable; /* callback function possible? */
68 int PnpBiosConfigUsed;
71 char ProtocolIdString[80];
73 remember mapped memory areas
75 ADAPTER_MEMORY MappedMemory[MAX_MAPPED_ENTRIES];
76 CARD_PROPERTIES Properties;
78 dword protocol_id; /* configured protocol identifier */
79 char protocol_name[8]; /* readable name of protocol */
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;
89 diva_os_adapter_irq_info_t irq_info;
90 dword volatile IrqCount;
92 dword DspCodeBaseAddr;
95 dword DspCodeBaseAddrTable[4]; /* add. for MultiMaster */
96 dword MaxDspCodeSizeTable[4]; /* add. for MultiMaster */
97 dword downloadAddrTable[4]; /* add. for MultiMaster */
100 byte __iomem *Address;
101 byte __iomem *Config;
102 byte __iomem *Control;
108 byte __iomem *ctlReg;
109 struct pc_maint *pcm;
110 diva_os_dependent_devica_name_t os_name;
114 dword ArchiveType; /* ARCHIVE_TYPE_NONE ..._SINGLE ..._USGEN ..._MULTI */
115 char *ProtocolSuffix; /* internal protocolfile table */
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];
126 byte BriLayer2LinkCount; /* amount of TEI's that adapter will support in P2MP mode */
133 dword BChMask; /* B channel mask for unchannelized modes */
137 dword ForceLaw; /* VoiceCoding - default:0, a-law: 1, my-law: 2 */
143 dword L1TristateOrQsig; /* enable Layer 1 Tristate (bit 2)Or Qsig params (bit 0,1)*/
144 dword InitialDspInfo;
145 dword ModemGuardTone;
150 dword ModemNegotiationMode;
151 dword ModemModulationsMask;
152 dword ModemTransmitLevel;
155 dword Part68LevelLimiter;
156 dword UsEktsNumCallApp;
157 byte UsEktsFeatAddConf;
158 byte UsEktsFeatRemoveConf;
159 byte UsEktsFeatCallTransfer;
160 byte UsEktsFeatMsgWaiting;
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 */
171 dword GenerateRingtone;
172 dword SupplementaryServicesFeatures;
176 dword DisabledDspMask;
177 dword AdapterTestMask;
178 dword DspImageLength;
179 word AlertToIn20mSecTicks;
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 */
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 */
217 volatile int pcm_pending;
218 volatile void *pcm_data;
219 diva_xdi_capi_cfg_t capi_cfg;
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;
228 /* ---------------------------------------------------------------------
230 --------------------------------------------------------------------- */
233 byte next; /* chaining index */
234 word assign_ref; /* assign reference */
236 /* ---------------------------------------------------------------------
237 S-cards shared ram structure for loading
238 --------------------------------------------------------------------- */
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,
296 extern void request(PISDN_ADAPTER, ENTITY *);
297 /* ---------------------------------------------------------------------
298 trapFn helpers, used to recover debug trace from dead card
299 --------------------------------------------------------------------- */
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__ */