io.h 10.8 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3

/*
 *
4
 Copyright (c) Eicon Networks, 2002.
L
Linus Torvalds 已提交
5
 *
6 7
 This source file is supplied for the use with
 Eicon Networks range of DIVA Server Adapters.
L
Linus Torvalds 已提交
8
 *
9
 Eicon File Revision :    2.1
L
Linus Torvalds 已提交
10
 *
11 12 13 14
 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.
L
Linus Torvalds 已提交
15
 *
16 17 18 19
 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.
L
Linus Torvalds 已提交
20
 *
21 22 23
 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.
L
Linus Torvalds 已提交
24 25 26 27 28
 *
 */
#ifndef __DIVA_XDI_COMMON_IO_H_INC__ /* { */
#define __DIVA_XDI_COMMON_IO_H_INC__
/*
29 30
  maximum = 16 adapters
*/
L
Linus Torvalds 已提交
31 32 33
#define DI_MAX_LINKS    MAX_ADAPTER
#define ISDN_MAX_NUM_LEN 60
/* --------------------------------------------------------------------------
34 35 36
   structure for quadro card management (obsolete for
   systems that do provide per card load event)
   -------------------------------------------------------------------------- */
L
Linus Torvalds 已提交
37
typedef struct {
38 39 40 41
	dword         Num;
	DEVICE_NAME   DeviceName[4];
	PISDN_ADAPTER QuadroAdapter[4];
} ADAPTER_LIST_ENTRY, *PADAPTER_LIST_ENTRY;
L
Linus Torvalds 已提交
42
/* --------------------------------------------------------------------------
43 44
   Special OS memory support structures
   -------------------------------------------------------------------------- */
L
Linus Torvalds 已提交
45 46
#define MAX_MAPPED_ENTRIES 8
typedef struct {
47 48 49
	void *Address;
	dword    Length;
} ADAPTER_MEMORY;
L
Linus Torvalds 已提交
50
/* --------------------------------------------------------------------------
51 52
   Configuration of XDI clients carried by XDI
   -------------------------------------------------------------------------- */
L
Linus Torvalds 已提交
53 54 55
#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 {
56
	byte cfg_1;
L
Linus Torvalds 已提交
57 58
} diva_xdi_capi_cfg_t;
/* --------------------------------------------------------------------------
59 60
   Main data structure kept per adapter
   -------------------------------------------------------------------------- */
L
Linus Torvalds 已提交
61
struct _ISDN_ADAPTER {
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
	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;
L
Linus Torvalds 已提交
227 228
};
/* ---------------------------------------------------------------------
229
   Entity table
L
Linus Torvalds 已提交
230 231
   --------------------------------------------------------------------- */
struct e_info_s {
232 233 234
	ENTITY *e;
	byte          next;                   /* chaining index           */
	word          assign_ref;             /* assign reference         */
L
Linus Torvalds 已提交
235 236
};
/* ---------------------------------------------------------------------
237
   S-cards shared ram structure for loading
L
Linus Torvalds 已提交
238 239
   --------------------------------------------------------------------- */
struct s_load {
240 241 242 243 244 245 246 247 248 249 250
	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];
L
Linus Torvalds 已提交
251 252 253 254
};
#define PR_RAM  ((struct pr_ram *)0)
#define RAM ((struct dual *)0)
/* ---------------------------------------------------------------------
255
   platform specific conversions
L
Linus Torvalds 已提交
256
   --------------------------------------------------------------------- */
257 258 259 260 261
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);
L
Linus Torvalds 已提交
262
/* ---------------------------------------------------------------------
263
   ram access functions for io mapped cards
L
Linus Torvalds 已提交
264
   --------------------------------------------------------------------- */
265 266 267 268 269 270 271 272 273 274 275 276
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);
L
Linus Torvalds 已提交
277
/* ---------------------------------------------------------------------
278
   ram access functions for memory mapped cards
L
Linus Torvalds 已提交
279
   --------------------------------------------------------------------- */
280 281 282 283 284 285 286 287 288 289
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);
L
Linus Torvalds 已提交
290
/* ---------------------------------------------------------------------
291
   functions exported by io.c
L
Linus Torvalds 已提交
292
   --------------------------------------------------------------------- */
293 294 295 296
extern IDI_CALL Requests[MAX_ADAPTER];
extern void     DIDpcRoutine(struct _diva_os_soft_isr *psoft_isr,
			     void *context);
extern void     request(PISDN_ADAPTER, ENTITY *);
L
Linus Torvalds 已提交
297
/* ---------------------------------------------------------------------
298
   trapFn helpers, used to recover debug trace from dead card
L
Linus Torvalds 已提交
299 300
   --------------------------------------------------------------------- */
typedef struct {
301 302 303 304 305 306
	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);
L
Linus Torvalds 已提交
307 308
/* --------------------------------------------------------------------- */
#endif  /* } __DIVA_XDI_COMMON_IO_H_INC__ */