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