linux-bk/drivers/char/ip2/i2os.h
<<
>>
Prefs
   1/*******************************************************************************
   2*
   3*   (c) 1999 by Computone Corporation
   4*
   5********************************************************************************
   6*
   7*
   8*   PACKAGE:     Linux tty Device Driver for IntelliPort II family of multiport
   9*                serial I/O controllers.
  10*
  11*   DESCRIPTION: Defines, definitions and includes which are heavily dependant
  12*                on O/S, host, compiler, etc. This file is tailored for:
  13*                 Linux v2.0.0 and later
  14*                 Gnu gcc c2.7.2
  15*                 80x86 architecture
  16*
  17*******************************************************************************/
  18
  19#ifndef I2OS_H    /* To prevent multiple includes */
  20#define I2OS_H 1
  21
  22#define VERSION(ver,rel,seq) (((ver)<<16) | ((rel)<<8) | (seq))
  23
  24//-------------------------------------------------
  25// Required Includes
  26//-------------------------------------------------
  27
  28#include "ip2types.h"
  29#include <asm/io.h>  /* For inb, etc */
  30#include <linux/version.h>
  31
  32//------------------------------------
  33// Defines for I/O instructions:
  34//------------------------------------
  35
  36#define INB(port)                inb(port)
  37#define OUTB(port,value)         outb((value),(port))
  38#define INW(port)                inw(port)
  39#define OUTW(port,value)         outw((value),(port))
  40#define OUTSW(port,addr,count)   outsw((port),(addr),(((count)+1)/2))
  41#define OUTSB(port,addr,count)   outsb((port),(addr),(((count)+1))&-2)
  42#define INSW(port,addr,count)    insw((port),(addr),(((count)+1)/2))
  43#define INSB(port,addr,count)    insb((port),(addr),(((count)+1))&-2)
  44
  45//--------------------------------------------
  46// Interrupt control
  47//--------------------------------------------
  48
  49#if LINUX_VERSION_CODE < 0x00020100
  50typedef int spinlock_t;
  51#define spin_lock_init() 
  52#define spin_lock(a)
  53#define spin_unlock(a)
  54#define spin_lock_irqsave(a,b)                  {save_flags((b));cli();}
  55#define spin_unlock_irqrestore(a,b)             {restore_flags((b));}
  56#define write_lock_irqsave(a,b)                 spin_lock_irqsave(a,b)
  57#define write_unlock_irqrestore(a,b)    spin_unlock_irqrestore(a,b)
  58#define read_lock_irqsave(a,b)                  spin_lock_irqsave(a,b)
  59#define read_unlock_irqrestore(a,b)             spin_unlock_irqrestore(a,b)
  60#endif
  61
  62//#define SAVE_AND_DISABLE_INTS(a,b)    spin_lock_irqsave(a,b)
  63//#define RESTORE_INTS(a,b)             spin_unlock_irqrestore(a,b)
  64
  65#define LOCK_INIT(a)    rwlock_init(a)
  66
  67#define SAVE_AND_DISABLE_INTS(a,b) { \
  68        /* printk("get_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
  69        spin_lock_irqsave(a,b); \
  70}
  71
  72#define RESTORE_INTS(a,b) { \
  73        /* printk("rel_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
  74        spin_unlock_irqrestore(a,b); \
  75}
  76
  77#define READ_LOCK_IRQSAVE(a,b) { \
  78        /* printk("get_read_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
  79        read_lock_irqsave(a,b); \
  80}
  81
  82#define READ_UNLOCK_IRQRESTORE(a,b) { \
  83        /* printk("rel_read_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
  84        read_unlock_irqrestore(a,b); \
  85}
  86
  87#define WRITE_LOCK_IRQSAVE(a,b) { \
  88        /* printk("get_write_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
  89        write_lock_irqsave(a,b); \
  90}
  91
  92#define WRITE_UNLOCK_IRQRESTORE(a,b) { \
  93        /* printk("rel_write_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
  94        write_unlock_irqrestore(a,b); \
  95}
  96
  97
  98//------------------------------------------------------------------------------
  99// Hardware-delay loop
 100//
 101// Probably used in only one place (see i2ellis.c) but this helps keep things
 102// together. Note we have unwound the IN instructions. On machines with a
 103// reasonable cache, the eight instructions (1 byte each) should fit in cache
 104// nicely, and on un-cached machines, the code-fetch would tend not to dominate.
 105// Note that cx is shifted so that "count" still reflects the total number of
 106// iterations assuming no unwinding.
 107//------------------------------------------------------------------------------
 108
 109//#define  DELAY1MS(port,count,label)
 110
 111//------------------------------------------------------------------------------
 112// Macros to switch to a new stack, saving stack pointers, and to restore the
 113// old stack (Used, for example, in i2lib.c) "heap" is the address of some
 114// buffer which will become the new stack (working down from highest address).
 115// The two words at the two lowest addresses in this stack are for storing the
 116// SS and SP.
 117//------------------------------------------------------------------------------
 118
 119//#define  TO_NEW_STACK(heap,size)
 120//#define  TO_OLD_STACK(heap)
 121
 122//------------------------------------------------------------------------------
 123// Macros to save the original IRQ vectors and masks, and to patch in new ones.
 124//------------------------------------------------------------------------------
 125
 126//#define  SAVE_IRQ_MASKS(dest)
 127//#define  WRITE_IRQ_MASKS(src)
 128//#define  SAVE_IRQ_VECTOR(value,dest)
 129//#define  WRITE_IRQ_VECTOR(value,src)
 130
 131//------------------------------------------------------------------------------
 132// Macro to copy data from one far pointer to another.
 133//------------------------------------------------------------------------------
 134
 135#define  I2_MOVE_DATA(fpSource,fpDest,count) memmove(fpDest,fpSource,count);
 136
 137//------------------------------------------------------------------------------
 138// Macros to issue eoi's to host interrupt control (IBM AT 8259-style).
 139//------------------------------------------------------------------------------
 140
 141//#define MASTER_EOI
 142//#define SLAVE_EOI
 143
 144#endif   /* I2OS_H */
 145
 146
 147
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.