sysdep-2.1.h
上传用户:wudi5211
上传日期:2010-01-21
资源大小:607k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * sysdep-2.1.h -- a trial to centralize changes between 2.0 and 2.1.43
  3.  *
  4.  * export rules changed in 2.1.18
  5.  * poll.h is there
  6.  * cpu_to_le15 etc. appeared in 2.1.10
  7.  * they "p" and "s" forms appeared in 2.1.43
  8.  */
  9. #ifndef _SYSDEP_21_H_
  10. #define _SYSDEP_21_H_
  11. #ifndef LINUX_VERSION_CODE
  12. #  include <linux/version.h>
  13. #endif
  14. #ifndef VERSION_CODE
  15. #  define VERSION_CODE(vers,rel,seq) ( ((vers)<<16) | ((rel)<<8) | (seq) )
  16. #endif
  17. /* only allow 2.0.x and 2.1.y */
  18. #if LINUX_VERSION_CODE < VERSION_CODE(2,0,0)
  19. #  error "This kernel is too old: not supported by this file"
  20. #endif
  21. #if LINUX_VERSION_CODE < VERSION_CODE(2,1,0)
  22. #  define LINUX_20
  23. #else
  24. #  define LINUX_21
  25. #endif
  26. #include <linux/types.h> /* used later in this header */
  27. /* Modularization issues */
  28. #if LINUX_VERSION_CODE < VERSION_CODE(2,1,18)
  29. #  define __USE_OLD_SYMTAB__
  30. #  define EXPORT_NO_SYMBOLS register_symtab(NULL);
  31. #  define REGISTER_SYMTAB(tab) register_symtab(tab)
  32. #else
  33. #  define REGISTER_SYMTAB(tab) /* nothing */
  34. #endif
  35. #ifdef __USE_OLD_SYMTAB__
  36. #  define __MODULE_STRING(s)         /* nothing */
  37. #  define MODULE_PARM(v,t)           /* nothing */
  38. #  define MODULE_PARM_DESC(v,t)      /* nothing */
  39. #  define MODULE_AUTHOR(n)           /* nothing */
  40. #  define MODULE_DESCRIPTION(d)      /* nothing */
  41. #  define MODULE_SUPPORTED_DEVICE(n) /* nothing */
  42. #endif
  43. /*
  44.  * "select" changed in 2.1.23. The implementation is twin, but this
  45.  * header is new
  46.  */
  47. #if LINUX_VERSION_CODE > VERSION_CODE(2,1,22)
  48. #  include <linux/poll.h>
  49. #else
  50. #  define __USE_OLD_SELECT__
  51. #endif
  52. /* Other change in the fops are solved using pseudo-types */
  53. #ifdef LINUX_21
  54. #  define lseek_t      long long
  55. #  define lseek_off_t  long long
  56. #else
  57. #  define lseek_t      int
  58. #  define lseek_off_t  off_t
  59. #endif
  60. /* changed the prototype of read/write */
  61. #if defined(LINUX_21) || defined(__alpha__)
  62. # define count_t unsigned long
  63. # define read_write_t long
  64. #else
  65. # define count_t int
  66. # define read_write_t int
  67. #endif
  68. #if LINUX_VERSION_CODE < VERSION_CODE(2,1,31)
  69. # define release_t void
  70. #  define release_return(x) return
  71. #else
  72. #  define release_t int
  73. #  define release_return(x) return (x)
  74. #endif
  75. /*
  76.  * access to user space: use the 2.1 functions,
  77.  * and implement them as macros for 2.0
  78.  */
  79. #ifdef LINUX_20
  80. #  include <asm/segment.h>
  81. #  define access_ok(t,a,sz)           (verify_area((t),(a),(sz)) ? 0 : 1)
  82. #  define verify_area_20              verify_area
  83. #  define copy_to_user(t,f,n)         (memcpy_tofs(t,f,n), 0)
  84. #  define __copy_to_user(t,f,n)       copy_to_user((t),(f),(n))
  85. #  define copy_to_user_ret(t,f,n,r)   copy_to_user((t),(f),(n))
  86. #  define copy_from_user(t,f,n)       (memcpy_fromfs((t),(f),(n)), 0)
  87. #  define __copy_from_user(t,f,n)     copy_from_user((t),(f),(n))
  88. #  define copy_from_user_ret(t,f,n,r) copy_from_user((t),(f),(n))
  89. #  define PUT_USER(val,add)           (put_user((val),(add)), 0)
  90. #  define __PUT_USER(val,add)         PUT_USER((val),(add))
  91. #  define PUT_USER_RET(val,add,ret)   PUT_USER((val),(add))
  92. #  define GET_USER(dest,add)          ((dest)=get_user((add)), 0)
  93. #  define __GET_USER(dest,add)        GET_USER((dest),(add))
  94. #  define GET_USER_RET(dest,add,ret)  GET_USER((dest),(add))
  95. #else
  96. #  include <asm/uaccess.h>
  97. #  include <asm/io.h>
  98. #  define verify_area_20(t,a,sz) (0) /* == success */
  99. #  define PUT_USER put_user
  100. #  define __PUT_USER __put_user
  101. #  define PUT_USER_RET put_user_ret
  102. #  define GET_USER get_user
  103. #  define __GET_USER __get_user
  104. #  define GET_USER_RET get_user_ret
  105. #endif
  106. /* ioremap */
  107. #ifdef LINUX_20
  108. # define ioremap vremap
  109. # define iounmap vfree
  110. #endif
  111. /* The use_count of exec_domain and binfmt changed in 2.1.23 */
  112. #ifdef LINUX_20
  113. #  define INCRCOUNT(p)  ((p)->module ? __MOD_INC_USE_COUNT((p)->module) : 0)
  114. #  define CURRCOUNT(p)  ((p)->module && (p)->module->usecount)
  115. #  define DECRCOUNT(p)  ((p)->module ? __MOD_DEC_USE_COUNT((p)->module) : 0)
  116. #else
  117. #  define INCRCOUNT(p)  ((p)->use_count++)
  118. #  define CURRCOUNT(p)  ((p)->use_count)
  119. #  define DECRCOUNT(p)  ((p)->use_count--)
  120. #endif
  121. /* register_dynamic no more existent -- just have 0 as inum */
  122. #if LINUX_VERSION_CODE >= VERSION_CODE(2,1,29)
  123. #  define proc_register_dynamic proc_register
  124. #endif
  125. #if LINUX_VERSION_CODE < VERSION_CODE(2,1,37)
  126. #  define test_and_set_bit(nr,addr)  test_bit((nr),(addr))
  127. #  define test_and_clear_bit(nr,addr) clear_bit((nr),(addr))
  128. #  define test_and_change_bit(nr,addr) change_bit((nr),(addr))
  129. #endif
  130. /* 2.1.30 removed these functions. Let's define them, just in case */
  131. #if LINUX_VERSION_CODE > VERSION_CODE(2,1,29)
  132. #  define queue_task_irq      queue_task
  133. #  define queue_task_irq_off  queue_task
  134. #endif
  135. /* 2.1.10 and 2.1.43 introduced new functions. They are worth using */
  136. #if LINUX_VERSION_CODE < VERSION_CODE(2,1,10)
  137. #  include <asm/byteorder.h>
  138. #  ifdef __LITTLE_ENDIAN
  139. #    define cpu_to_le16(x) (x)
  140. #    define cpu_to_le32(x) (x)
  141. #    define cpu_to_be16(x) htons((x))
  142. #    define cpu_to_be32(x) htonl((x))
  143. #  else
  144. #    define cpu_to_be16(x) (x)
  145. #    define cpu_to_be32(x) (x)
  146.      extern inline __u16 cpu_to_le16(__u16 x) { return (x<<8) | (x>>8);}
  147.      extern inline __u32 cpu_to_le32(__u32 x) { return((x>>24) |
  148.              ((x>>8)&0xff00) | ((x<<8)&0xff0000) | (x<<24));}
  149. #  endif
  150. #  define le16_to_cpu(x)  cpu_to_le16(x)
  151. #  define le32_to_cpu(x)  cpu_to_le32(x)
  152. #  define be16_to_cpu(x)  cpu_to_be16(x)
  153. #  define be32_to_cpu(x)  cpu_to_be32(x)
  154. #endif
  155. #if LINUX_VERSION_CODE < VERSION_CODE(2,1,43)
  156. #  define cpu_to_le16p(addr) (cpu_to_le16(*(addr)))
  157. #  define cpu_to_le32p(addr) (cpu_to_le32(*(addr)))
  158. #  define cpu_to_be16p(addr) (cpu_to_be16(*(addr)))
  159. #  define cpu_to_be32p(addr) (cpu_to_be32(*(addr)))
  160.    extern inline void cpu_to_le16s(__u16 *a) {*a = cpu_to_le16(*a);}
  161.    extern inline void cpu_to_le32s(__u16 *a) {*a = cpu_to_le32(*a);}
  162.    extern inline void cpu_to_be16s(__u16 *a) {*a = cpu_to_be16(*a);}
  163.    extern inline void cpu_to_be32s(__u16 *a) {*a = cpu_to_be32(*a);}
  164. #  define le16_to_cpup(x) cpu_to_le16p(x)
  165. #  define le32_to_cpup(x) cpu_to_le32p(x)
  166. #  define be16_to_cpup(x) cpu_to_be16p(x)
  167. #  define be32_to_cpup(x) cpu_to_be32p(x)
  168. #  define le16_to_cpus(x) cpu_to_le16s(x)
  169. #  define le32_to_cpus(x) cpu_to_le32s(x)
  170. #  define be16_to_cpus(x) cpu_to_be16s(x)
  171. #  define be32_to_cpus(x) cpu_to_be32s(x)
  172. #endif
  173. #if LINUX_VERSION_CODE < VERSION_CODE(2,1,15)
  174. #  define __USE_OLD_REBUILD_HEADER__
  175. #endif
  176. #if LINUX_VERSION_CODE < VERSION_CODE(2,1,30)
  177. #  define in_interrupt() (intr_count!=0)
  178. #endif
  179. #endif /* _SYSDEP_21_H_ */