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   -------------------------------------------------------------------------- */
37typedef 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
46typedef 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
55typedef struct _diva_xdi_capi_cfg {
56	byte cfg_1;
57} diva_xdi_capi_cfg_t;
58/* --------------------------------------------------------------------------
59   Main data structure kept per adapter
60   -------------------------------------------------------------------------- */
61struct _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   --------------------------------------------------------------------- */
231struct 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   --------------------------------------------------------------------- */
239struct 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   --------------------------------------------------------------------- */
257extern void *PTR_P(ADAPTER *a, ENTITY *e, void *P);
258extern void *PTR_X(ADAPTER *a, ENTITY *e);
259extern void *PTR_R(ADAPTER *a, ENTITY *e);
260extern void CALLBACK(ADAPTER *a, ENTITY *e);
261extern void set_ram(void **adr_ptr);
262/* ---------------------------------------------------------------------
263   ram access functions for io mapped cards
264   --------------------------------------------------------------------- */
265byte io_in(ADAPTER *a, void *adr);
266word io_inw(ADAPTER *a, void *adr);
267void io_in_buffer(ADAPTER *a, void *adr, void *P, word length);
268void io_look_ahead(ADAPTER *a, PBUFFER *RBuffer, ENTITY *e);
269void io_out(ADAPTER *a, void *adr, byte data);
270void io_outw(ADAPTER *a, void *adr, word data);
271void io_out_buffer(ADAPTER *a, void *adr, void *P, word length);
272void io_inc(ADAPTER *a, void *adr);
273void bri_in_buffer(PISDN_ADAPTER IoAdapter, dword Pos,
274		   void *Buf, dword Len);
275int 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   --------------------------------------------------------------------- */
280byte mem_in(ADAPTER *a, void *adr);
281word mem_inw(ADAPTER *a, void *adr);
282void mem_in_buffer(ADAPTER *a, void *adr, void *P, word length);
283void mem_look_ahead(ADAPTER *a, PBUFFER *RBuffer, ENTITY *e);
284void mem_out(ADAPTER *a, void *adr, byte data);
285void mem_outw(ADAPTER *a, void *adr, word data);
286void mem_out_buffer(ADAPTER *a, void *adr, void *P, word length);
287void mem_inc(ADAPTER *a, void *adr);
288void mem_in_dw(ADAPTER *a, void *addr, dword *data, int dwords);
289void mem_out_dw(ADAPTER *a, void *addr, const dword *data, int dwords);
290/* ---------------------------------------------------------------------
291   functions exported by io.c
292   --------------------------------------------------------------------- */
293extern IDI_CALL Requests[MAX_ADAPTER];
294extern void     DIDpcRoutine(struct _diva_os_soft_isr *psoft_isr,
295			     void *context);
296extern void     request(PISDN_ADAPTER, ENTITY *);
297/* ---------------------------------------------------------------------
298   trapFn helpers, used to recover debug trace from dead card
299   --------------------------------------------------------------------- */
300typedef struct {
301	word *buf;
302	word  cnt;
303	word  out;
304} Xdesc;
305extern void dump_trap_frame(PISDN_ADAPTER IoAdapter, byte __iomem *exception);
306extern void dump_xlog_buffer(PISDN_ADAPTER IoAdapter, Xdesc *xlogDesc);
307/* --------------------------------------------------------------------- */
308#endif  /* } __DIVA_XDI_COMMON_IO_H_INC__ */
309