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