diff options
author | Al Viro <viro@ftp.linux.org.uk> | 2007-12-16 18:30:08 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 18:07:09 -0500 |
commit | f3ec33e587df02e25963755989cc473e3f07bf0d (patch) | |
tree | 5f176f664af9b9b8ad76ca5fdfd8fd68de6a1fe5 /drivers/net/sunhme.h | |
parent | b710b43c306650261c01ad08100791afec78a7db (diff) |
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 <viro@zeniv.linux.org.uk>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/sunhme.h')
-rw-r--r-- | drivers/net/sunhme.h | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/net/sunhme.h b/drivers/net/sunhme.h index 90f446db9ba2..4da5539fac7b 100644 --- a/drivers/net/sunhme.h +++ b/drivers/net/sunhme.h | |||
@@ -302,9 +302,11 @@ | |||
302 | * Always write the address first before setting the ownership | 302 | * Always write the address first before setting the ownership |
303 | * bits to avoid races with the hardware scanning the ring. | 303 | * bits to avoid races with the hardware scanning the ring. |
304 | */ | 304 | */ |
305 | typedef u32 __bitwise__ hme32; | ||
306 | |||
305 | struct happy_meal_rxd { | 307 | struct happy_meal_rxd { |
306 | u32 rx_flags; | 308 | hme32 rx_flags; |
307 | u32 rx_addr; | 309 | hme32 rx_addr; |
308 | }; | 310 | }; |
309 | 311 | ||
310 | #define RXFLAG_OWN 0x80000000 /* 1 = hardware, 0 = software */ | 312 | #define RXFLAG_OWN 0x80000000 /* 1 = hardware, 0 = software */ |
@@ -313,8 +315,8 @@ struct happy_meal_rxd { | |||
313 | #define RXFLAG_CSUM 0x0000ffff /* HW computed checksum */ | 315 | #define RXFLAG_CSUM 0x0000ffff /* HW computed checksum */ |
314 | 316 | ||
315 | struct happy_meal_txd { | 317 | struct happy_meal_txd { |
316 | u32 tx_flags; | 318 | hme32 tx_flags; |
317 | u32 tx_addr; | 319 | hme32 tx_addr; |
318 | }; | 320 | }; |
319 | 321 | ||
320 | #define TXFLAG_OWN 0x80000000 /* 1 = hardware, 0 = software */ | 322 | #define TXFLAG_OWN 0x80000000 /* 1 = hardware, 0 = software */ |
@@ -400,7 +402,7 @@ struct happy_meal { | |||
400 | struct hmeal_init_block *happy_block; /* RX and TX descriptors (CPU addr) */ | 402 | struct hmeal_init_block *happy_block; /* RX and TX descriptors (CPU addr) */ |
401 | 403 | ||
402 | #if defined(CONFIG_SBUS) && defined(CONFIG_PCI) | 404 | #if defined(CONFIG_SBUS) && defined(CONFIG_PCI) |
403 | u32 (*read_desc32)(u32 *); | 405 | u32 (*read_desc32)(hme32 *); |
404 | void (*write_txd)(struct happy_meal_txd *, u32, u32); | 406 | void (*write_txd)(struct happy_meal_txd *, u32, u32); |
405 | void (*write_rxd)(struct happy_meal_rxd *, u32, u32); | 407 | void (*write_rxd)(struct happy_meal_rxd *, u32, u32); |
406 | u32 (*dma_map)(void *, void *, long, int); | 408 | u32 (*dma_map)(void *, void *, long, int); |