i2os.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:5k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  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. #ifndef I2OS_H    /* To prevent multiple includes */
  19. #define I2OS_H 1
  20. #define VERSION(ver,rel,seq) (((ver)<<16) | ((rel)<<8) | (seq))
  21. //-------------------------------------------------
  22. // Required Includes
  23. //-------------------------------------------------
  24. #include "ip2types.h"
  25. #include <asm/io.h>  /* For inb, etc */
  26. #include <linux/version.h>
  27. //------------------------------------
  28. // Defines for I/O instructions:
  29. //------------------------------------
  30. #define INB(port)                inb(port)
  31. #define OUTB(port,value)         outb((value),(port))
  32. #define INW(port)                inw(port)
  33. #define OUTW(port,value)         outw((value),(port))
  34. #define OUTSW(port,addr,count)   outsw((port),(addr),(((count)+1)/2))
  35. #define OUTSB(port,addr,count)   outsb((port),(addr),(((count)+1))&-2)
  36. #define INSW(port,addr,count)    insw((port),(addr),(((count)+1)/2))
  37. #define INSB(port,addr,count)    insb((port),(addr),(((count)+1))&-2)
  38. //--------------------------------------------
  39. // Interrupt control
  40. //--------------------------------------------
  41. #if LINUX_VERSION_CODE < 0x00020100
  42. typedef int spinlock_t;
  43. #define spin_lock_init() 
  44. #define spin_lock(a)
  45. #define spin_unlock(a)
  46. #define spin_lock_irqsave(a,b) {save_flags((b));cli();}
  47. #define spin_unlock_irqrestore(a,b) {restore_flags((b));}
  48. #define write_lock_irqsave(a,b) spin_lock_irqsave(a,b)
  49. #define write_unlock_irqrestore(a,b) spin_unlock_irqrestore(a,b)
  50. #define read_lock_irqsave(a,b) spin_lock_irqsave(a,b)
  51. #define read_unlock_irqrestore(a,b) spin_unlock_irqrestore(a,b)
  52. #endif
  53. //#define SAVE_AND_DISABLE_INTS(a,b) spin_lock_irqsave(a,b)
  54. //#define RESTORE_INTS(a,b)          spin_unlock_irqrestore(a,b)
  55. #define LOCK_INIT(a) rwlock_init(a)
  56. #define SAVE_AND_DISABLE_INTS(a,b) { 
  57. /* printk("get_lock: 0x%x,%4d,%sn",(int)a,__LINE__,__FILE__);*/ 
  58. spin_lock_irqsave(a,b); 
  59. }
  60. #define RESTORE_INTS(a,b) { 
  61. /* printk("rel_lock: 0x%x,%4d,%sn",(int)a,__LINE__,__FILE__);*/ 
  62. spin_unlock_irqrestore(a,b); 
  63. }
  64. #define READ_LOCK_IRQSAVE(a,b) { 
  65. /* printk("get_read_lock: 0x%x,%4d,%sn",(int)a,__LINE__,__FILE__);*/ 
  66. read_lock_irqsave(a,b); 
  67. }
  68. #define READ_UNLOCK_IRQRESTORE(a,b) { 
  69. /* printk("rel_read_lock: 0x%x,%4d,%sn",(int)a,__LINE__,__FILE__);*/ 
  70. read_unlock_irqrestore(a,b); 
  71. }
  72. #define WRITE_LOCK_IRQSAVE(a,b) { 
  73. /* printk("get_write_lock: 0x%x,%4d,%sn",(int)a,__LINE__,__FILE__);*/ 
  74. write_lock_irqsave(a,b); 
  75. }
  76. #define WRITE_UNLOCK_IRQRESTORE(a,b) { 
  77. /* printk("rel_write_lock: 0x%x,%4d,%sn",(int)a,__LINE__,__FILE__);*/ 
  78. write_unlock_irqrestore(a,b); 
  79. }
  80. //------------------------------------------------------------------------------
  81. // Hardware-delay loop
  82. //
  83. // Probably used in only one place (see i2ellis.c) but this helps keep things
  84. // together. Note we have unwound the IN instructions. On machines with a
  85. // reasonable cache, the eight instructions (1 byte each) should fit in cache
  86. // nicely, and on un-cached machines, the code-fetch would tend not to dominate.
  87. // Note that cx is shifted so that "count" still reflects the total number of
  88. // iterations assuming no unwinding.
  89. //------------------------------------------------------------------------------
  90. //#define  DELAY1MS(port,count,label)
  91. //------------------------------------------------------------------------------
  92. // Macros to switch to a new stack, saving stack pointers, and to restore the
  93. // old stack (Used, for example, in i2lib.c) "heap" is the address of some
  94. // buffer which will become the new stack (working down from highest address).
  95. // The two words at the two lowest addresses in this stack are for storing the
  96. // SS and SP.
  97. //------------------------------------------------------------------------------
  98. //#define  TO_NEW_STACK(heap,size)
  99. //#define  TO_OLD_STACK(heap)
  100. //------------------------------------------------------------------------------
  101. // Macros to save the original IRQ vectors and masks, and to patch in new ones.
  102. //------------------------------------------------------------------------------
  103. //#define  SAVE_IRQ_MASKS(dest)
  104. //#define  WRITE_IRQ_MASKS(src)
  105. //#define  SAVE_IRQ_VECTOR(value,dest)
  106. //#define  WRITE_IRQ_VECTOR(value,src)
  107. //------------------------------------------------------------------------------
  108. // Macro to copy data from one far pointer to another.
  109. //------------------------------------------------------------------------------
  110. #define  I2_MOVE_DATA(fpSource,fpDest,count) memmove(fpDest,fpSource,count);
  111. //------------------------------------------------------------------------------
  112. // Macros to issue eoi's to host interrupt control (IBM AT 8259-style).
  113. //------------------------------------------------------------------------------
  114. //#define MASTER_EOI
  115. //#define SLAVE_EOI
  116. #endif   /* I2OS_H */