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