linux/drivers/isdn/hardware/eicon/platform.h
<<
>>
Prefs
   1/* $Id: platform.h,v 1.37.4.6 2005/01/31 12:22:20 armin Exp $
   2 *
   3 * platform.h
   4 * 
   5 *
   6 * Copyright 2000-2003  by Armin Schindler (mac@melware.de)
   7 * Copyright 2000  Eicon Networks 
   8 *
   9 * This software may be used and distributed according to the terms
  10 * of the GNU General Public License, incorporated herein by reference.
  11 */
  12
  13
  14#ifndef __PLATFORM_H__
  15#define __PLATFORM_H__
  16
  17#if !defined(DIVA_BUILD)
  18#define DIVA_BUILD "local"
  19#endif
  20
  21#include <linux/module.h>
  22#include <linux/init.h>
  23#include <linux/kernel.h>
  24#include <linux/sched.h>
  25#include <linux/skbuff.h>
  26#include <linux/vmalloc.h>
  27#include <linux/proc_fs.h>
  28#include <linux/interrupt.h>
  29#include <linux/delay.h>
  30#include <linux/list.h>
  31#include <asm/types.h>
  32#include <asm/io.h>
  33
  34#include "cardtype.h"
  35
  36/* activate debuglib for modules only */
  37#ifndef MODULE
  38#define DIVA_NO_DEBUGLIB
  39#endif
  40
  41#define DIVA_INIT_FUNCTION  __init
  42#define DIVA_EXIT_FUNCTION  __exit
  43
  44#define DIVA_USER_MODE_CARD_CONFIG 1
  45#define USE_EXTENDED_DEBUGS 1
  46
  47#define MAX_ADAPTER     32
  48
  49#define DIVA_ISTREAM 1
  50
  51#define MEMORY_SPACE_TYPE  0
  52#define PORT_SPACE_TYPE    1
  53
  54
  55#include <linux/string.h>
  56
  57#ifndef byte
  58#define byte   u8
  59#endif
  60
  61#ifndef word
  62#define word   u16
  63#endif
  64
  65#ifndef dword
  66#define dword  u32
  67#endif
  68
  69#ifndef qword
  70#define qword  u64
  71#endif
  72
  73#ifndef NULL
  74#define NULL    ((void *) 0)
  75#endif
  76
  77#ifndef far
  78#define far
  79#endif
  80
  81#ifndef _pascal
  82#define _pascal
  83#endif
  84
  85#ifndef _loadds
  86#define _loadds
  87#endif
  88
  89#ifndef _cdecl
  90#define _cdecl
  91#endif
  92
  93#define MEM_TYPE_RAM            0
  94#define MEM_TYPE_PORT           1
  95#define MEM_TYPE_PROM           2
  96#define MEM_TYPE_CTLREG         3
  97#define MEM_TYPE_RESET          4
  98#define MEM_TYPE_CFG            5
  99#define MEM_TYPE_ADDRESS        6
 100#define MEM_TYPE_CONFIG         7
 101#define MEM_TYPE_CONTROL        8
 102
 103#define MAX_MEM_TYPE            10
 104
 105#define DIVA_OS_MEM_ATTACH_RAM(a)       ((a)->ram)
 106#define DIVA_OS_MEM_ATTACH_PORT(a)      ((a)->port)
 107#define DIVA_OS_MEM_ATTACH_PROM(a)      ((a)->prom)
 108#define DIVA_OS_MEM_ATTACH_CTLREG(a)    ((a)->ctlReg)
 109#define DIVA_OS_MEM_ATTACH_RESET(a)     ((a)->reset)
 110#define DIVA_OS_MEM_ATTACH_CFG(a)       ((a)->cfg)
 111#define DIVA_OS_MEM_ATTACH_ADDRESS(a)   ((a)->Address)
 112#define DIVA_OS_MEM_ATTACH_CONFIG(a)    ((a)->Config)
 113#define DIVA_OS_MEM_ATTACH_CONTROL(a)   ((a)->Control)
 114
 115#define DIVA_OS_MEM_DETACH_RAM(a, x)    do { } while(0)
 116#define DIVA_OS_MEM_DETACH_PORT(a, x)   do { } while(0)
 117#define DIVA_OS_MEM_DETACH_PROM(a, x)   do { } while(0)
 118#define DIVA_OS_MEM_DETACH_CTLREG(a, x) do { } while(0)
 119#define DIVA_OS_MEM_DETACH_RESET(a, x)  do { } while(0)
 120#define DIVA_OS_MEM_DETACH_CFG(a, x)    do { } while(0)
 121#define DIVA_OS_MEM_DETACH_ADDRESS(a, x)        do { } while(0)
 122#define DIVA_OS_MEM_DETACH_CONFIG(a, x) do { } while(0)
 123#define DIVA_OS_MEM_DETACH_CONTROL(a, x)        do { } while(0)
 124
 125#define DIVA_INVALID_FILE_HANDLE  ((dword)(-1))
 126
 127#define DIVAS_CONTAINING_RECORD(address, type, field) \
 128        ((type *)((char*)(address) - (char*)(&((type *)0)->field)))
 129
 130extern int sprintf(char *, const char*, ...);
 131
 132typedef void* LIST_ENTRY;
 133
 134typedef char    DEVICE_NAME[64];
 135typedef struct _ISDN_ADAPTER   ISDN_ADAPTER;
 136typedef struct _ISDN_ADAPTER* PISDN_ADAPTER;
 137
 138typedef void (* DIVA_DI_PRINTF) (unsigned char *, ...);
 139#include "debuglib.h"
 140
 141#define dtrc(p) DBG_PRV0(p)
 142#define dbug(a,p) DBG_PRV1(p)
 143
 144
 145typedef struct e_info_s E_INFO ;
 146
 147typedef char diva_os_dependent_devica_name_t[64];
 148typedef void* PDEVICE_OBJECT;
 149
 150struct _diva_os_soft_isr;
 151struct _diva_os_timer;
 152struct _ISDN_ADAPTER;
 153
 154void diva_log_info(unsigned char *, ...);
 155
 156/*
 157**  XDI DIDD Interface
 158*/
 159void diva_xdi_didd_register_adapter (int card);
 160void diva_xdi_didd_remove_adapter (int card);
 161
 162/*
 163** memory allocation
 164*/
 165static __inline__ void* diva_os_malloc (unsigned long flags, unsigned long size)
 166{
 167        void *ret = NULL;
 168
 169        if (size) {
 170                ret = (void *) vmalloc((unsigned int) size);
 171        }
 172        return (ret);
 173}
 174static __inline__ void  diva_os_free   (unsigned long flags, void* ptr)
 175{
 176        vfree(ptr);
 177}
 178
 179/*
 180** use skbuffs for message buffer
 181*/
 182typedef struct sk_buff diva_os_message_buffer_s;
 183diva_os_message_buffer_s *diva_os_alloc_message_buffer(unsigned long size, void **data_buf);
 184void diva_os_free_message_buffer(diva_os_message_buffer_s *dmb);
 185#define DIVA_MESSAGE_BUFFER_LEN(x) x->len
 186#define DIVA_MESSAGE_BUFFER_DATA(x) x->data
 187
 188/*
 189** mSeconds waiting
 190*/
 191static __inline__ void diva_os_sleep(dword mSec)
 192{
 193        msleep(mSec);
 194}
 195static __inline__ void diva_os_wait(dword mSec)
 196{
 197        mdelay(mSec);
 198}
 199
 200/*
 201**  PCI Configuration space access
 202*/
 203void PCIwrite (byte bus, byte func, int offset, void* data, int length, void* pci_dev_handle);
 204void PCIread (byte bus, byte func, int offset, void* data, int length, void* pci_dev_handle);
 205
 206/*
 207**  I/O Port utilities
 208*/
 209int diva_os_register_io_port (void *adapter, int register, unsigned long port,
 210                                unsigned long length, const char* name, int id);
 211/*
 212**  I/O port access abstraction
 213*/
 214byte inpp (void __iomem *);
 215word inppw (void __iomem *);
 216void inppw_buffer (void __iomem *, void*, int);
 217void outppw (void __iomem *, word);
 218void outppw_buffer (void __iomem * , void*, int);
 219void outpp (void __iomem *, word);
 220
 221/*
 222**  IRQ 
 223*/
 224typedef struct _diva_os_adapter_irq_info {
 225        byte irq_nr;
 226        int  registered;
 227        char irq_name[24];
 228} diva_os_adapter_irq_info_t;
 229int diva_os_register_irq (void* context, byte irq, const char* name);
 230void diva_os_remove_irq (void* context, byte irq);
 231
 232#define diva_os_in_irq() in_irq()
 233
 234/*
 235**  Spin Lock framework
 236*/
 237typedef long diva_os_spin_lock_magic_t;
 238typedef spinlock_t diva_os_spin_lock_t;
 239static __inline__ int diva_os_initialize_spin_lock (spinlock_t *lock, void * unused) { \
 240  spin_lock_init (lock); return(0); }
 241static __inline__ void diva_os_enter_spin_lock (diva_os_spin_lock_t* a, \
 242                              diva_os_spin_lock_magic_t* old_irql, \
 243                              void* dbg) { spin_lock_bh(a); }
 244static __inline__ void diva_os_leave_spin_lock (diva_os_spin_lock_t* a, \
 245                              diva_os_spin_lock_magic_t* old_irql, \
 246                              void* dbg) { spin_unlock_bh(a); }
 247
 248#define diva_os_destroy_spin_lock(a,b) do { } while(0)
 249
 250/*
 251**  Deffered processing framework
 252*/
 253typedef int (*diva_os_isr_callback_t)(struct _ISDN_ADAPTER*);
 254typedef void (*diva_os_soft_isr_callback_t)(struct _diva_os_soft_isr* psoft_isr, void* context);
 255
 256typedef struct _diva_os_soft_isr {
 257  void* object;
 258  diva_os_soft_isr_callback_t callback;
 259  void* callback_context;
 260  char dpc_thread_name[24];
 261} diva_os_soft_isr_t;
 262
 263int diva_os_initialize_soft_isr (diva_os_soft_isr_t* psoft_isr, diva_os_soft_isr_callback_t callback, void*   callback_context);
 264int diva_os_schedule_soft_isr (diva_os_soft_isr_t* psoft_isr);
 265int diva_os_cancel_soft_isr (diva_os_soft_isr_t* psoft_isr);
 266void diva_os_remove_soft_isr (diva_os_soft_isr_t* psoft_isr);
 267
 268/*
 269  Get time service
 270  */
 271void diva_os_get_time (dword* sec, dword* usec);
 272
 273/*
 274**  atomic operation, fake because we use threads
 275*/
 276typedef int diva_os_atomic_t;
 277static diva_os_atomic_t __inline__
 278diva_os_atomic_increment(diva_os_atomic_t* pv)
 279{
 280  *pv += 1;
 281  return (*pv);
 282}
 283static diva_os_atomic_t __inline__
 284diva_os_atomic_decrement(diva_os_atomic_t* pv)
 285{
 286  *pv -= 1;
 287  return (*pv);
 288}
 289
 290/* 
 291**  CAPI SECTION
 292*/
 293#define NO_CORNETN
 294#define IMPLEMENT_DTMF 1
 295#define IMPLEMENT_ECHO_CANCELLER 1
 296#define IMPLEMENT_RTP 1
 297#define IMPLEMENT_T38 1
 298#define IMPLEMENT_FAX_SUB_SEP_PWD 1
 299#define IMPLEMENT_V18 1
 300#define IMPLEMENT_DTMF_TONE 1
 301#define IMPLEMENT_PIAFS 1
 302#define IMPLEMENT_FAX_PAPER_FORMATS 1
 303#define IMPLEMENT_VOWN 1
 304#define IMPLEMENT_CAPIDTMF 1
 305#define IMPLEMENT_FAX_NONSTANDARD 1
 306#define VSWITCH_SUPPORT 1
 307
 308#define IMPLEMENT_MARKED_OK_AFTER_FC 1
 309
 310#define DIVA_IDI_RX_DMA 1
 311
 312/*
 313** endian macros
 314**
 315** If only...  In some cases we did use them for endianness conversion;
 316** unfortunately, other uses were real iomem accesses.
 317*/
 318#define READ_BYTE(addr)   readb(addr)
 319#define READ_WORD(addr)   readw(addr)
 320#define READ_DWORD(addr)  readl(addr)
 321
 322#define WRITE_BYTE(addr,v)  writeb(v,addr)
 323#define WRITE_WORD(addr,v)  writew(v,addr)
 324#define WRITE_DWORD(addr,v) writel(v,addr)
 325
 326static inline __u16 GET_WORD(void *addr)
 327{
 328        return le16_to_cpu(*(__le16 *)addr);
 329}
 330static inline __u32 GET_DWORD(void *addr)
 331{
 332        return le32_to_cpu(*(__le32 *)addr);
 333}
 334static inline void PUT_WORD(void *addr, __u16 v)
 335{
 336        *(__le16 *)addr = cpu_to_le16(v);
 337}
 338static inline void PUT_DWORD(void *addr, __u32 v)
 339{
 340        *(__le32 *)addr = cpu_to_le32(v);
 341}
 342
 343/*
 344** 32/64 bit macors
 345*/
 346#ifdef BITS_PER_LONG
 347 #if BITS_PER_LONG > 32 
 348  #define PLATFORM_GT_32BIT
 349  #define ULongToPtr(x) (void *)(unsigned long)(x)
 350 #endif
 351#endif
 352
 353/*
 354** undef os definitions of macros we use
 355*/
 356#undef ID_MASK
 357#undef N_DATA
 358#undef ADDR
 359
 360/*
 361** dump file
 362*/
 363#define diva_os_dump_file_t char
 364#define diva_os_board_trace_t char
 365#define diva_os_dump_file(__x__) do { } while(0)
 366
 367/*
 368** size of internal arrays
 369*/
 370#define MAX_DESCRIPTORS 64
 371
 372#endif  /* __PLATFORM_H__ */
 373