309 lines
11 KiB
C
309 lines
11 KiB
C
|
|
||
|
/*
|
||
|
*
|
||
|
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__ */
|