linux/drivers/isdn/hardware/eicon/io.h
<<
>>
Prefs
   1
   2/*
   3 *
   4 Copyright (c) Eicon Networks, 2002.
   5 *
   6 This source file is supplied for the use with
   7 Eicon Networks range of DIVA Server Adapters.
   8 *
   9 Eicon File Revision :    2.1
  10 *
  11 This program is free software; you can redistribute it and/or modify
  12 it under the terms of the GNU General Public License as published by
  13 the Free Software Foundation; either version 2, or (at your option)
  14 any later version.
  15 *
  16 This program is distributed in the hope that it will be useful,
  17 but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY
  18 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  19 See the GNU General Public License for more details.
  20 *
  21 You should have received a copy of the GNU General Public License
  22 along with this program; if not, write to the Free Software
  23 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  24 *
  25 */
  26#ifndef __DIVA_XDI_COMMON_IO_H_INC__ /* { */
  27#define __DIVA_XDI_COMMON_IO_H_INC__
  28/*
  29  maximum = 16 adapters
  30*/
  31#define DI_MAX_LINKS    MAX_ADAPTER
  32#define ISDN_MAX_NUM_LEN 60
  33/* --------------------------------------------------------------------------
  34   structure for quadro card management (obsolete for
  35   systems that do provide per card load event)
  36   -------------------------------------------------------------------------- */
  37typedef struct {
  38        dword         Num;
  39        DEVICE_NAME   DeviceName[4];
  40        PISDN_ADAPTER QuadroAdapter[4];
  41} ADAPTER_LIST_ENTRY, *PADAPTER_LIST_ENTRY;
  42/* --------------------------------------------------------------------------
  43   Special OS memory support structures
  44   -------------------------------------------------------------------------- */
  45#define MAX_MAPPED_ENTRIES 8
  46typedef struct {
  47        void *Address;
  48        dword    Length;
  49} ADAPTER_MEMORY;
  50/* --------------------------------------------------------------------------
  51   Configuration of XDI clients carried by XDI
  52   -------------------------------------------------------------------------- */
  53#define DIVA_XDI_CAPI_CFG_1_DYNAMIC_L1_ON      0x01
  54#define DIVA_XDI_CAPI_CFG_1_GROUP_POPTIMIZATION_ON 0x02
  55typedef struct _diva_xdi_capi_cfg {
  56        byte cfg_1;
  57} diva_xdi_capi_cfg_t;
  58/* --------------------------------------------------------------------------
  59   Main data structure kept per adapter
  60   -------------------------------------------------------------------------- */
  61struct _ISDN_ADAPTER {
  62        void (*DIRequest)(PISDN_ADAPTER, ENTITY *);
  63        int State; /* from NT4 1.srv, a good idea, but  a poor achievement */
  64        int Initialized;
  65        int RegisteredWithDidd;
  66        int Unavailable;  /* callback function possible? */
  67        int ResourcesClaimed;
  68        int PnpBiosConfigUsed;
  69        dword Logging;
  70        dword features;
  71        char ProtocolIdString[80];
  72        /*
  73          remember mapped memory areas
  74        */
  75        ADAPTER_MEMORY MappedMemory[MAX_MAPPED_ENTRIES];
  76        CARD_PROPERTIES Properties;
  77        dword cardType;
  78        dword protocol_id;       /* configured protocol identifier */
  79        char protocol_name[8];  /* readable name of protocol */
  80        dword BusType;
  81        dword BusNumber;
  82        dword slotNumber;
  83        dword slotId;
  84        dword ControllerNumber;  /* for QUADRO cards only */
  85        PISDN_ADAPTER MultiMaster;       /* for 4-BRI card only - use MultiMaster or QuadroList */
  86        PADAPTER_LIST_ENTRY QuadroList;        /* for QUADRO card  only */
  87        PDEVICE_OBJECT DeviceObject;
  88        dword DeviceId;
  89        diva_os_adapter_irq_info_t irq_info;
  90        dword volatile IrqCount;
  91        int trapped;
  92        dword DspCodeBaseAddr;
  93        dword MaxDspCodeSize;
  94        dword downloadAddr;
  95        dword DspCodeBaseAddrTable[4]; /* add. for MultiMaster */
  96        dword MaxDspCodeSizeTable[4]; /* add. for MultiMaster */
  97        dword downloadAddrTable[4]; /* add. for MultiMaster */
  98        dword MemoryBase;
  99        dword MemorySize;
 100        byte __iomem *Address;
 101        byte __iomem *Config;
 102        byte __iomem *Control;
 103        byte __iomem *reset;
 104        byte __iomem *port;
 105        byte __iomem *ram;
 106        byte __iomem *cfg;
 107        byte __iomem *prom;
 108        byte __iomem *ctlReg;
 109        struct pc_maint  *pcm;
 110        diva_os_dependent_devica_name_t os_name;
 111        byte Name[32];
 112        dword serialNo;
 113        dword ANum;
 114        dword ArchiveType; /* ARCHIVE_TYPE_NONE ..._SINGLE ..._USGEN ..._MULTI */
 115        char *ProtocolSuffix; /* internal protocolfile table */
 116        char Archive[32];
 117        char Protocol[32];
 118        char AddDownload[32]; /* Dsp- or other additional download files */
 119        char Oad1[ISDN_MAX_NUM_LEN];
 120        char Osa1[ISDN_MAX_NUM_LEN];
 121        char Oad2[ISDN_MAX_NUM_LEN];
 122        char Osa2[ISDN_MAX_NUM_LEN];
 123        char Spid1[ISDN_MAX_NUM_LEN];
 124        char Spid2[ISDN_MAX_NUM_LEN];
 125        byte nosig;
 126        byte BriLayer2LinkCount; /* amount of TEI's that adapter will support in P2MP mode */
 127        dword Channels;
 128        dword tei;
 129        dword nt2;
 130        dword TerminalCount;
 131        dword WatchDog;
 132        dword Permanent;
 133        dword BChMask; /* B channel mask for unchannelized modes */
 134        dword StableL2;
 135        dword DidLen;
 136        dword NoOrderCheck;
 137        dword ForceLaw; /* VoiceCoding - default:0, a-law: 1, my-law: 2 */
 138        dword SigFlags;
 139        dword LowChannel;
 140        dword NoHscx30;
 141        dword ProtVersion;
 142        dword crc4;
 143        dword L1TristateOrQsig; /* enable Layer 1 Tristate (bit 2)Or Qsig params (bit 0,1)*/
 144        dword InitialDspInfo;
 145        dword ModemGuardTone;
 146        dword ModemMinSpeed;
 147        dword ModemMaxSpeed;
 148        dword ModemOptions;
 149        dword ModemOptions2;
 150        dword ModemNegotiationMode;
 151        dword ModemModulationsMask;
 152        dword ModemTransmitLevel;
 153        dword FaxOptions;
 154        dword FaxMaxSpeed;
 155        dword Part68LevelLimiter;
 156        dword UsEktsNumCallApp;
 157        byte UsEktsFeatAddConf;
 158        byte UsEktsFeatRemoveConf;
 159        byte UsEktsFeatCallTransfer;
 160        byte UsEktsFeatMsgWaiting;
 161        byte QsigDialect;
 162        byte ForceVoiceMailAlert;
 163        byte DisableAutoSpid;
 164        byte ModemCarrierWaitTimeSec;
 165        byte ModemCarrierLossWaitTimeTenthSec;
 166        byte PiafsLinkTurnaroundInFrames;
 167        byte DiscAfterProgress;
 168        byte AniDniLimiter[3];
 169        byte TxAttenuation;  /* PRI/E1 only: attenuate TX signal */
 170        word QsigFeatures;
 171        dword GenerateRingtone;
 172        dword SupplementaryServicesFeatures;
 173        dword R2Dialect;
 174        dword R2CasOptions;
 175        dword FaxV34Options;
 176        dword DisabledDspMask;
 177        dword AdapterTestMask;
 178        dword DspImageLength;
 179        word AlertToIn20mSecTicks;
 180        word ModemEyeSetup;
 181        byte R2CtryLength;
 182        byte CCBSRelTimer;
 183        byte *PcCfgBufferFile;/* flexible parameter via file */
 184        byte *PcCfgBuffer; /* flexible parameter via multistring */
 185        diva_os_dump_file_t dump_file; /* dump memory to file at lowest irq level */
 186        diva_os_board_trace_t board_trace; /* traces from the board */
 187        diva_os_spin_lock_t isr_spin_lock;
 188        diva_os_spin_lock_t data_spin_lock;
 189        diva_os_soft_isr_t req_soft_isr;
 190        diva_os_soft_isr_t isr_soft_isr;
 191        diva_os_atomic_t  in_dpc;
 192        PBUFFER RBuffer;        /* Copy of receive lookahead buffer */
 193        word e_max;
 194        word e_count;
 195        E_INFO *e_tbl;
 196        word assign;         /* list of pending ASSIGNs  */
 197        word head;           /* head of request queue    */
 198        word tail;           /* tail of request queue    */
 199        ADAPTER a;             /* not a separate structure */
 200        void (*out)(ADAPTER *a);
 201        byte (*dpc)(ADAPTER *a);
 202        byte (*tst_irq)(ADAPTER *a);
 203        void (*clr_irq)(ADAPTER *a);
 204        int (*load)(PISDN_ADAPTER);
 205        int (*mapmem)(PISDN_ADAPTER);
 206        int (*chkIrq)(PISDN_ADAPTER);
 207        void (*disIrq)(PISDN_ADAPTER);
 208        void (*start)(PISDN_ADAPTER);
 209        void (*stop)(PISDN_ADAPTER);
 210        void (*rstFnc)(PISDN_ADAPTER);
 211        void (*trapFnc)(PISDN_ADAPTER);
 212        dword (*DetectDsps)(PISDN_ADAPTER);
 213        void (*os_trap_nfy_Fnc)(PISDN_ADAPTER, dword);
 214        diva_os_isr_callback_t diva_isr_handler;
 215        dword sdram_bar;  /* must be 32 bit */
 216        dword fpga_features;
 217        volatile int pcm_pending;
 218        volatile void *pcm_data;
 219        diva_xdi_capi_cfg_t capi_cfg;
 220        dword tasks;
 221        void *dma_map;
 222        int (*DivaAdapterTestProc)(PISDN_ADAPTER);
 223        void *AdapterTestMemoryStart;
 224        dword AdapterTestMemoryLength;
 225        const byte *cfg_lib_memory_init;
 226        dword cfg_lib_memory_init_length;
 227};
 228/* ---------------------------------------------------------------------
 229   Entity table
 230   --------------------------------------------------------------------- */
 231struct e_info_s {
 232        ENTITY *e;
 233        byte          next;                   /* chaining index           */
 234        word          assign_ref;             /* assign reference         */
 235};
 236/* ---------------------------------------------------------------------
 237   S-cards shared ram structure for loading
 238   --------------------------------------------------------------------- */
 239struct s_load {
 240        byte ctrl;
 241        byte card;
 242        byte msize;
 243        byte fill0;
 244        word ebit;
 245        word elocl;
 246        word eloch;
 247        byte reserved[20];
 248        word signature;
 249        byte fill[224];
 250        byte b[256];
 251};
 252#define PR_RAM  ((struct pr_ram *)0)
 253#define RAM ((struct dual *)0)
 254/* ---------------------------------------------------------------------
 255   platform specific conversions
 256   --------------------------------------------------------------------- */
 257extern void *PTR_P(ADAPTER *a, ENTITY *e, void *P);
 258extern void *PTR_X(ADAPTER *a, ENTITY *e);
 259extern void *PTR_R(ADAPTER *a, ENTITY *e);
 260extern void CALLBACK(ADAPTER *a, ENTITY *e);
 261extern void set_ram(void **adr_ptr);
 262/* ---------------------------------------------------------------------
 263   ram access functions for io mapped cards
 264   --------------------------------------------------------------------- */
 265byte io_in(ADAPTER *a, void *adr);
 266word io_inw(ADAPTER *a, void *adr);
 267void io_in_buffer(ADAPTER *a, void *adr, void *P, word length);
 268void io_look_ahead(ADAPTER *a, PBUFFER *RBuffer, ENTITY *e);
 269void io_out(ADAPTER *a, void *adr, byte data);
 270void io_outw(ADAPTER *a, void *adr, word data);
 271void io_out_buffer(ADAPTER *a, void *adr, void *P, word length);
 272void io_inc(ADAPTER *a, void *adr);
 273void bri_in_buffer(PISDN_ADAPTER IoAdapter, dword Pos,
 274                   void *Buf, dword Len);
 275int bri_out_buffer(PISDN_ADAPTER IoAdapter, dword Pos,
 276                   void *Buf, dword Len, int Verify);
 277/* ---------------------------------------------------------------------
 278   ram access functions for memory mapped cards
 279   --------------------------------------------------------------------- */
 280byte mem_in(ADAPTER *a, void *adr);
 281word mem_inw(ADAPTER *a, void *adr);
 282void mem_in_buffer(ADAPTER *a, void *adr, void *P, word length);
 283void mem_look_ahead(ADAPTER *a, PBUFFER *RBuffer, ENTITY *e);
 284void mem_out(ADAPTER *a, void *adr, byte data);
 285void mem_outw(ADAPTER *a, void *adr, word data);
 286void mem_out_buffer(ADAPTER *a, void *adr, void *P, word length);
 287void mem_inc(ADAPTER *a, void *adr);
 288void mem_in_dw(ADAPTER *a, void *addr, dword *data, int dwords);
 289void mem_out_dw(ADAPTER *a, void *addr, const dword *data, int dwords);
 290/* ---------------------------------------------------------------------
 291   functions exported by io.c
 292   --------------------------------------------------------------------- */
 293extern IDI_CALL Requests[MAX_ADAPTER];
 294extern void     DIDpcRoutine(struct _diva_os_soft_isr *psoft_isr,
 295                             void *context);
 296extern void     request(PISDN_ADAPTER, ENTITY *);
 297/* ---------------------------------------------------------------------
 298   trapFn helpers, used to recover debug trace from dead card
 299   --------------------------------------------------------------------- */
 300typedef struct {
 301        word *buf;
 302        word  cnt;
 303        word  out;
 304} Xdesc;
 305extern void dump_trap_frame(PISDN_ADAPTER IoAdapter, byte __iomem *exception);
 306extern void dump_xlog_buffer(PISDN_ADAPTER IoAdapter, Xdesc *xlogDesc);
 307/* --------------------------------------------------------------------- */
 308#endif  /* } __DIVA_XDI_COMMON_IO_H_INC__ */
 309