jfs: get rid of homegrown endianness helpers
[cascardo/linux.git] / fs / jfs / jfs_types.h
index 43ea371..8f602dc 100644 (file)
@@ -30,8 +30,6 @@
 #include <linux/types.h>
 #include <linux/nls.h>
 
-#include "endian24.h"
-
 /*
  * transaction and lock id's
  *
@@ -59,26 +57,42 @@ struct timestruc_t {
 
 /*
  *     physical xd (pxd)
+ *
+ *     The leftmost 24 bits of len_addr are the extent length.
+ *     The rightmost 8 bits of len_addr are the most signficant bits of
+ *     the extent address
  */
 typedef struct {
-       unsigned len:24;
-       unsigned addr1:8;
+       __le32 len_addr;
        __le32 addr2;
 } pxd_t;
 
 /* xd_t field construction */
 
-#define        PXDlength(pxd, length32)        ((pxd)->len = __cpu_to_le24(length32))
-#define        PXDaddress(pxd, address64)\
-{\
-       (pxd)->addr1 = ((s64)address64) >> 32;\
-       (pxd)->addr2 = __cpu_to_le32((address64) & 0xffffffff);\
+static inline void PXDlength(pxd_t *pxd, __u32 len)
+{
+       pxd->len_addr = (pxd->len_addr & cpu_to_le32(~0xffffff)) |
+                       cpu_to_le32(len & 0xffffff);
+}
+
+static inline void PXDaddress(pxd_t *pxd, __u64 addr)
+{
+       pxd->len_addr = (pxd->len_addr & cpu_to_le32(0xffffff)) |
+                       cpu_to_le32((addr >> 32)<<24);
+       pxd->addr2 = cpu_to_le32(addr & 0xffffffff);
 }
 
 /* xd_t field extraction */
-#define        lengthPXD(pxd)  __le24_to_cpu((pxd)->len)
-#define        addressPXD(pxd)\
-       ( ((s64)((pxd)->addr1)) << 32 | __le32_to_cpu((pxd)->addr2))
+static inline __u32 lengthPXD(pxd_t *pxd)
+{
+       return le32_to_cpu((pxd)->len_addr) & 0xffffff;
+}
+
+static inline __u64 addressPXD(pxd_t *pxd)
+{
+       __u64 n = le32_to_cpu(pxd->len_addr) & ~0xffffff;
+       return (n << 8) + le32_to_cpu(pxd->addr2);
+}
 
 #define MAXTREEHEIGHT 8
 /* pxd list */
@@ -93,12 +107,10 @@ struct pxdlist {
  *     data extent descriptor (dxd)
  */
 typedef struct {
-       unsigned flag:8;        /* 1: flags */
-       unsigned rsrvd:24;
+       __u8 flag;      /* 1: flags */
+       __u8 rsrvd[3];
        __le32 size;            /* 4: size in byte */
-       unsigned len:24;        /* 3: length in unit of fsblksize */
-       unsigned addr1:8;       /* 1: address in unit of fsblksize */
-       __le32 addr2;           /* 4: address in unit of fsblksize */
+       pxd_t loc;              /* 8: address and length in unit of fsblksize */
 } dxd_t;                       /* - 16 - */
 
 /* dxd_t flags */
@@ -109,12 +121,11 @@ typedef struct {
 #define DXD_CORRUPT    0x08    /* Inconsistency detected */
 
 /* dxd_t field construction
- *     Conveniently, the PXD macros work for DXD
  */
-#define        DXDlength       PXDlength
-#define        DXDaddress      PXDaddress
-#define        lengthDXD       lengthPXD
-#define        addressDXD      addressPXD
+#define        DXDlength(dxd, len)     PXDlength(&(dxd)->loc, len)
+#define        DXDaddress(dxd, addr)   PXDaddress(&(dxd)->loc, addr)
+#define        lengthDXD(dxd)  lengthPXD(&(dxd)->loc)
+#define        addressDXD(dxd) addressPXD(&(dxd)->loc)
 #define DXDsize(dxd, size32) ((dxd)->size = cpu_to_le32(size32))
 #define sizeDXD(dxd)   le32_to_cpu((dxd)->size)