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