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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/fs/ufs/swab.h
  3.  *
  4.  * Copyright (C) 1997, 1998 Francois-Rene Rideau <fare@tunes.org>
  5.  * Copyright (C) 1998 Jakub Jelinek <jj@ultra.linux.cz>
  6.  * Copyright (C) 2001 Christoph Hellwig <hch@infradead.org>
  7.  */
  8. #ifndef _UFS_SWAB_H
  9. #define _UFS_SWAB_H
  10. /*
  11.  * Notes:
  12.  *    HERE WE ASSUME EITHER BIG OR LITTLE ENDIAN UFSes
  13.  *    in case there are ufs implementations that have strange bytesexes,
  14.  *    you'll need to modify code here as well as in ufs_super.c and ufs_fs.h
  15.  *    to support them.
  16.  */
  17. enum {
  18. BYTESEX_LE,
  19. BYTESEX_BE
  20. };
  21. static __inline u64
  22. fs64_to_cpu(struct super_block *sbp, u64 n)
  23. {
  24. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  25. return le64_to_cpu(n);
  26. else
  27. return be64_to_cpu(n);
  28. }
  29. static __inline u64
  30. cpu_to_fs64(struct super_block *sbp, u64 n)
  31. {
  32. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  33. return cpu_to_le64(n);
  34. else
  35. return cpu_to_be64(n);
  36. }
  37. static __inline u32
  38. fs64_add(struct super_block *sbp, u32 *n, int d)
  39. {
  40. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  41. return *n = cpu_to_le64(le64_to_cpu(*n)+d);
  42. else
  43. return *n = cpu_to_be64(be64_to_cpu(*n)+d);
  44. }
  45. static __inline u32
  46. fs64_sub(struct super_block *sbp, u32 *n, int d)
  47. {
  48. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  49. return *n = cpu_to_le64(le64_to_cpu(*n)-d);
  50. else
  51. return *n = cpu_to_be64(be64_to_cpu(*n)-d);
  52. }
  53. static __inline u32
  54. fs32_to_cpu(struct super_block *sbp, u32 n)
  55. {
  56. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  57. return le32_to_cpu(n);
  58. else
  59. return be32_to_cpu(n);
  60. }
  61. static __inline u32
  62. cpu_to_fs32(struct super_block *sbp, u32 n)
  63. {
  64. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  65. return cpu_to_le32(n);
  66. else
  67. return cpu_to_be32(n);
  68. }
  69. static __inline u32
  70. fs32_add(struct super_block *sbp, u32 *n, int d)
  71. {
  72. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  73. return *n = cpu_to_le32(le32_to_cpu(*n)+d);
  74. else
  75. return *n = cpu_to_be32(be32_to_cpu(*n)+d);
  76. }
  77. static __inline u32
  78. fs32_sub(struct super_block *sbp, u32 *n, int d)
  79. {
  80. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  81. return *n = cpu_to_le32(le32_to_cpu(*n)-d);
  82. else
  83. return *n = cpu_to_be32(be32_to_cpu(*n)-d);
  84. }
  85. static __inline u16
  86. fs16_to_cpu(struct super_block *sbp, u16 n)
  87. {
  88. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  89. return le16_to_cpu(n);
  90. else
  91. return be16_to_cpu(n);
  92. }
  93. static __inline u16
  94. cpu_to_fs16(struct super_block *sbp, u16 n)
  95. {
  96. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  97. return cpu_to_le16(n);
  98. else
  99. return cpu_to_be16(n);
  100. }
  101. static __inline u16
  102. fs16_add(struct super_block *sbp, u16 *n, int d)
  103. {
  104. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  105. return *n = cpu_to_le16(le16_to_cpu(*n)+d);
  106. else
  107. return *n = cpu_to_be16(be16_to_cpu(*n)+d);
  108. }
  109. static __inline u16
  110. fs16_sub(struct super_block *sbp, u16 *n, int d)
  111. {
  112. if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
  113. return *n = cpu_to_le16(le16_to_cpu(*n)-d);
  114. else
  115. return *n = cpu_to_be16(be16_to_cpu(*n)-d);
  116. }
  117. #endif /* _UFS_SWAB_H */