aboutsummaryrefslogtreecommitdiff
path: root/drivers/isdn/hardware/eicon/io.h
blob: 01deced18ab83634aa761e748b02ee31cab9482a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308

/*
 *
 Copyright (c) Eicon Networks, 2002.
 *
 This source file is supplied for the use with
 Eicon Networks range of DIVA Server Adapters.
 *
 Eicon File Revision :    2.1
 *
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2, or (at your option)
 any later version.
 *
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY
 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 See the GNU General Public License for more details.
 *
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */
#ifndef __DIVA_XDI_COMMON_IO_H_INC__ /* { */
#define __DIVA_XDI_COMMON_IO_H_INC__
/*
  maximum = 16 adapters
*/
#define DI_MAX_LINKS    MAX_ADAPTER
#define ISDN_MAX_NUM_LEN 60
/* --------------------------------------------------------------------------
   structure for quadro card management (obsolete for
   systems that do provide per card load event)
   -------------------------------------------------------------------------- */
typedef struct {
	dword         Num;
	DEVICE_NAME   DeviceName[4];
	PISDN_ADAPTER QuadroAdapter[4];
} ADAPTER_LIST_ENTRY, *PADAPTER_LIST_ENTRY;
/* --------------------------------------------------------------------------
   Special OS memory support structures
   -------------------------------------------------------------------------- */
#define MAX_MAPPED_ENTRIES 8
typedef struct {
	void *Address;
	dword    Length;
} ADAPTER_MEMORY;
/* --------------------------------------------------------------------------
   Configuration of XDI clients carried by XDI
   -------------------------------------------------------------------------- */
#define DIVA_XDI_CAPI_CFG_1_DYNAMIC_L1_ON      0x01
#define DIVA_XDI_CAPI_CFG_1_GROUP_POPTIMIZATION_ON 0x02
typedef struct _diva_xdi_capi_cfg {
	byte cfg_1;
} diva_xdi_capi_cfg_t;
/* --------------------------------------------------------------------------
   Main data structure kept per adapter
   -------------------------------------------------------------------------- */
struct _ISDN_ADAPTER {
	void (*DIRequest)(PISDN_ADAPTER, ENTITY *);
	int State; /* from NT4 1.srv, a good idea, but  a poor achievement */
	int Initialized;
	int RegisteredWithDidd;
	int Unavailable;  /* callback function possible? */
	int ResourcesClaimed;
	int PnpBiosConfigUsed;
	dword Logging;
	dword features;
	char ProtocolIdString[80];
	/*
	  remember mapped memory areas
	*/
	ADAPTER_MEMORY MappedMemory[MAX_MAPPED_ENTRIES];
	CARD_PROPERTIES Properties;
	dword cardType;
	dword protocol_id;       /* configured protocol identifier */
	char protocol_name[8];  /* readable name of protocol */
	dword BusType;
	dword BusNumber;
	dword slotNumber;
	dword slotId;
	dword ControllerNumber;  /* for QUADRO cards only */
	PISDN_ADAPTER MultiMaster;       /* for 4-BRI card only - use MultiMaster or QuadroList */
	PADAPTER_LIST_ENTRY QuadroList;        /* for QUADRO card  only */
	PDEVICE_OBJECT DeviceObject;
	dword DeviceId;
	diva_os_adapter_irq_info_t irq_info;
	dword volatile IrqCount;
	int trapped;
	dword DspCodeBaseAddr;
	dword MaxDspCodeSize;
	dword downloadAddr;
	dword DspCodeBaseAddrTable[4]; /* add. for MultiMaster */
	dword MaxDspCodeSizeTable[4]; /* add. for MultiMaster */
	dword downloadAddrTable[4]; /* add. for MultiMaster */
	dword MemoryBase;
	dword MemorySize;
	byte __iomem *Address;
	byte __iomem *Config;
	byte __iomem *Control;
	byte __iomem *reset;
	byte __iomem *port;
	byte __iomem *ram;
	byte __iomem *cfg;
	byte __iomem *prom;
	byte __iomem *ctlReg;
	struct pc_maint  *pcm;
	diva_os_dependent_devica_name_t os_name;
	byte Name[32];
	dword serialNo;
	dword ANum;
	dword ArchiveType; /* ARCHIVE_TYPE_NONE ..._SINGLE ..._USGEN ..._MULTI */
	char *ProtocolSuffix; /* internal protocolfile table */
	char Archive[32];
	char Protocol[32];
	char AddDownload[32]; /* Dsp- or other additional download files */
	char Oad1[ISDN_MAX_NUM_LEN];
	char Osa1[ISDN_MAX_NUM_LEN];
	char Oad2[ISDN_MAX_NUM_LEN];
	char Osa2[ISDN_MAX_NUM_LEN];
	char Spid1[ISDN_MAX_NUM_LEN];
	char Spid2[ISDN_MAX_NUM_LEN];
	byte nosig;
	byte BriLayer2LinkCount; /* amount of TEI's that adapter will support in P2MP mode */
	dword Channels;
	dword tei;
	dword nt2;
	dword TerminalCount;
	dword WatchDog;
	dword Permanent;
	dword BChMask; /* B channel mask for unchannelized modes */
	dword StableL2;
	dword DidLen;
	dword NoOrderCheck;
	dword ForceLaw; /* VoiceCoding - default:0, a-law: 1, my-law: 2 */
	dword SigFlags;
	dword LowChannel;
	dword NoHscx30;
	dword ProtVersion;
	dword crc4;
	dword L1TristateOrQsig; /* enable Layer 1 Tristate (bit 2)Or Qsig params (bit 0,1)*/
	dword InitialDspInfo;
	dword ModemGuardTone;
	dword ModemMinSpeed;
	dword ModemMaxSpeed;
	dword ModemOptions;
	dword ModemOptions2;
	dword ModemNegotiationMode;
	dword ModemModulationsMask;
	dword ModemTransmitLevel;
	dword FaxOptions;
	dword FaxMaxSpeed;
	dword Part68LevelLimiter;
	dword UsEktsNumCallApp;
	byte UsEktsFeatAddConf;
	byte UsEktsFeatRemoveConf;
	byte UsEktsFeatCallTransfer;
	byte UsEktsFeatMsgWaiting;
	byte QsigDialect;
	byte ForceVoiceMailAlert;
	byte DisableAutoSpid;
	byte ModemCarrierWaitTimeSec;
	byte ModemCarrierLossWaitTimeTenthSec;
	byte PiafsLinkTurnaroundInFrames;
	byte DiscAfterProgress;
	byte AniDniLimiter[3];
	byte TxAttenuation;  /* PRI/E1 only: attenuate TX signal */
	word QsigFeatures;
	dword GenerateRingtone;
	dword SupplementaryServicesFeatures;
	dword R2Dialect;
	dword R2CasOptions;
	dword FaxV34Options;
	dword DisabledDspMask;
	dword AdapterTestMask;
	dword DspImageLength;
	word AlertToIn20mSecTicks;
	word ModemEyeSetup;
	byte R2CtryLength;
	byte CCBSRelTimer;
	byte *PcCfgBufferFile;/* flexible parameter via file */
	byte *PcCfgBuffer; /* flexible parameter via multistring */
	diva_os_dump_file_t dump_file; /* dump memory to file at lowest irq level */
	diva_os_board_trace_t board_trace; /* traces from the board */
	diva_os_spin_lock_t isr_spin_lock;
	diva_os_spin_lock_t data_spin_lock;
	diva_os_soft_isr_t req_soft_isr;
	diva_os_soft_isr_t isr_soft_isr;
	diva_os_atomic_t  in_dpc;
	PBUFFER RBuffer;        /* Copy of receive lookahead buffer */
	word e_max;
	word e_count;
	E_INFO *e_tbl;
	word assign;         /* list of pending ASSIGNs  */
	word head;           /* head of request queue    */
	word tail;           /* tail of request queue    */
	ADAPTER a;             /* not a separate structure */
	void (*out)(ADAPTER *a);
	byte (*dpc)(ADAPTER *a);
	byte (*tst_irq)(ADAPTER *a);
	void (*clr_irq)(ADAPTER *a);
	int (*load)(PISDN_ADAPTER);
	int (*mapmem)(PISDN_ADAPTER);
	int (*chkIrq)(PISDN_ADAPTER);
	void (*disIrq)(PISDN_ADAPTER);
	void (*start)(PISDN_ADAPTER);
	void (*stop)(PISDN_ADAPTER);
	void (*rstFnc)(PISDN_ADAPTER);
	void (*trapFnc)(PISDN_ADAPTER);
	dword (*DetectDsps)(PISDN_ADAPTER);
	void (*os_trap_nfy_Fnc)(PISDN_ADAPTER, dword);
	diva_os_isr_callback_t diva_isr_handler;
	dword sdram_bar;  /* must be 32 bit */
	dword fpga_features;
	volatile int pcm_pending;
	volatile void *pcm_data;
	diva_xdi_capi_cfg_t capi_cfg;
	dword tasks;
	void *dma_map;
	int (*DivaAdapterTestProc)(PISDN_ADAPTER);
	void *AdapterTestMemoryStart;
	dword AdapterTestMemoryLength;
	const byte *cfg_lib_memory_init;
	dword cfg_lib_memory_init_length;
};
/* ---------------------------------------------------------------------
   Entity table
   --------------------------------------------------------------------- */
struct e_info_s {
	ENTITY *e;
	byte          next;                   /* chaining index           */
	word          assign_ref;             /* assign reference         */
};
/* ---------------------------------------------------------------------
   S-cards shared ram structure for loading
   --------------------------------------------------------------------- */
struct s_load {
	byte ctrl;
	byte card;
	byte msize;
	byte fill0;
	word ebit;
	word elocl;
	word eloch;
	byte reserved[20];
	word signature;
	byte fill[224];
	byte b[256];
};
#define PR_RAM  ((struct pr_ram *)0)
#define RAM ((struct dual *)0)
/* ---------------------------------------------------------------------
   platform specific conversions
   --------------------------------------------------------------------- */
extern void *PTR_P(ADAPTER *a, ENTITY *e, void *P);
extern void *PTR_X(ADAPTER *a, ENTITY *e);
extern void *PTR_R(ADAPTER *a, ENTITY *e);
extern void CALLBACK(ADAPTER *a, ENTITY *e);
extern void set_ram(void **adr_ptr);
/* ---------------------------------------------------------------------
   ram access functions for io mapped cards
   --------------------------------------------------------------------- */
byte io_in(ADAPTER *a, void *adr);
word io_inw(ADAPTER *a, void *adr);
void io_in_buffer(ADAPTER *a, void *adr, void *P, word length);
void io_look_ahead(ADAPTER *a, PBUFFER *RBuffer, ENTITY *e);
void io_out(ADAPTER *a, void *adr, byte data);
void io_outw(ADAPTER *a, void *adr, word data);
void io_out_buffer(ADAPTER *a, void *adr, void *P, word length);
void io_inc(ADAPTER *a, void *adr);
void bri_in_buffer(PISDN_ADAPTER IoAdapter, dword Pos,
		   void *Buf, dword Len);
int bri_out_buffer(PISDN_ADAPTER IoAdapter, dword Pos,
		   void *Buf, dword Len, int Verify);
/* ---------------------------------------------------------------------
   ram access functions for memory mapped cards
   --------------------------------------------------------------------- */
byte mem_in(ADAPTER *a, void *adr);
word mem_inw(ADAPTER *a, void *adr);
void mem_in_buffer(ADAPTER *a, void *adr, void *P, word length);
void mem_look_ahead(ADAPTER *a, PBUFFER *RBuffer, ENTITY *e);
void mem_out(ADAPTER *a, void *adr, byte data);
void mem_outw(ADAPTER *a, void *adr, word data);
void mem_out_buffer(ADAPTER *a, void *adr, void *P, word length);
void mem_inc(ADAPTER *a, void *adr);
void mem_in_dw(ADAPTER *a, void *addr, dword *data, int dwords);
void mem_out_dw(ADAPTER *a, void *addr, const dword *data, int dwords);
/* ---------------------------------------------------------------------
   functions exported by io.c
   --------------------------------------------------------------------- */
extern IDI_CALL Requests[MAX_ADAPTER];
extern void     DIDpcRoutine(struct _diva_os_soft_isr *psoft_isr,
			     void *context);
extern void     request(PISDN_ADAPTER, ENTITY *);
/* ---------------------------------------------------------------------
   trapFn helpers, used to recover debug trace from dead card
   --------------------------------------------------------------------- */
typedef struct {
	word *buf;
	word  cnt;
	word  out;
} Xdesc;
extern void dump_trap_frame(PISDN_ADAPTER IoAdapter, byte __iomem *exception);
extern void dump_xlog_buffer(PISDN_ADAPTER IoAdapter, Xdesc *xlogDesc);
/* --------------------------------------------------------------------- */
#endif  /* } __DIVA_XDI_COMMON_IO_H_INC__ */