From f3ec33e587df02e25963755989cc473e3f07bf0d Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sun, 16 Dec 2007 23:30:08 +0000 Subject: sunhme endianness annotations This one is interesting - SBUS and PCI variants have opposite endianness in descriptors (SBUS is sparc-only, so there host-endian == big-endian). Solution: declare a bitwise type (hme32) and in accessor helpers do typechecking and force-casts (once we know that the type is right). Signed-off-by: Al Viro Signed-off-by: Jeff Garzik --- drivers/net/sunhme.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'drivers/net/sunhme.h') diff --git a/drivers/net/sunhme.h b/drivers/net/sunhme.h index 90f446db9ba..4da5539fac7 100644 --- a/drivers/net/sunhme.h +++ b/drivers/net/sunhme.h @@ -302,9 +302,11 @@ * Always write the address first before setting the ownership * bits to avoid races with the hardware scanning the ring. */ +typedef u32 __bitwise__ hme32; + struct happy_meal_rxd { - u32 rx_flags; - u32 rx_addr; + hme32 rx_flags; + hme32 rx_addr; }; #define RXFLAG_OWN 0x80000000 /* 1 = hardware, 0 = software */ @@ -313,8 +315,8 @@ struct happy_meal_rxd { #define RXFLAG_CSUM 0x0000ffff /* HW computed checksum */ struct happy_meal_txd { - u32 tx_flags; - u32 tx_addr; + hme32 tx_flags; + hme32 tx_addr; }; #define TXFLAG_OWN 0x80000000 /* 1 = hardware, 0 = software */ @@ -400,7 +402,7 @@ struct happy_meal { struct hmeal_init_block *happy_block; /* RX and TX descriptors (CPU addr) */ #if defined(CONFIG_SBUS) && defined(CONFIG_PCI) - u32 (*read_desc32)(u32 *); + u32 (*read_desc32)(hme32 *); void (*write_txd)(struct happy_meal_txd *, u32, u32); void (*write_rxd)(struct happy_meal_rxd *, u32, u32); u32 (*dma_map)(void *, void *, long, int); -- cgit v1.2.3