309 lines
		
	
	
	
		
			13 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			309 lines
		
	
	
	
		
			13 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | 
 | ||
|  | /*
 | ||
|  |  * | ||
|  |   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__ */
 |