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