/* * 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__ */