aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/gianfar.h
diff options
context:
space:
mode:
authorDai Haruki <dai.haruki@freescale.com>2008-12-16 18:34:50 -0500
committerDavid S. Miller <davem@davemloft.net>2008-12-16 18:34:50 -0500
commit5a5efed4817ef931f648b118aeb9222e53122d2b (patch)
tree592f3dbe3bf47035e8738b1c4bbe48fc3be973fc /drivers/net/gianfar.h
parent31de198b4d2732028f4c5bff04b0103b1d8c1d8c (diff)
gianfar: Make all BD status writes 32-bit
Whenever we want to update the status field in a BD, we usually want to update the length field, too. By combining them into one 32-bit field, we reduce the number of stores to memory shared with the controller, and we eliminate the need for order-enforcement, as the length and "READY" bit are now updated atomically at the same time. Signed-off-by: Dai Haruki <Dai.Haruki@freescale.com> Signed-off-by: Andy Fleming <afleming@freescale.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/gianfar.h')
-rw-r--r--drivers/net/gianfar.h20
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h
index 1ebf7ac27a3d..9c8974dc8dd5 100644
--- a/drivers/net/gianfar.h
+++ b/drivers/net/gianfar.h
@@ -311,6 +311,8 @@ extern const char gfar_driver_version[];
311#define ATTRELI_EI_MASK 0x00003fff 311#define ATTRELI_EI_MASK 0x00003fff
312#define ATTRELI_EI(x) (x) 312#define ATTRELI_EI(x) (x)
313 313
314#define BD_LFLAG(flags) ((flags) << 16)
315#define BD_LENGTH_MASK 0x00ff
314 316
315/* TxBD status field bits */ 317/* TxBD status field bits */
316#define TXBD_READY 0x8000 318#define TXBD_READY 0x8000
@@ -374,8 +376,13 @@ extern const char gfar_driver_version[];
374 376
375struct txbd8 377struct txbd8
376{ 378{
377 u16 status; /* Status Fields */ 379 union {
378 u16 length; /* Buffer length */ 380 struct {
381 u16 status; /* Status Fields */
382 u16 length; /* Buffer length */
383 };
384 u32 lstatus;
385 };
379 u32 bufPtr; /* Buffer Pointer */ 386 u32 bufPtr; /* Buffer Pointer */
380}; 387};
381 388
@@ -390,8 +397,13 @@ struct txfcb {
390 397
391struct rxbd8 398struct rxbd8
392{ 399{
393 u16 status; /* Status Fields */ 400 union {
394 u16 length; /* Buffer Length */ 401 struct {
402 u16 status; /* Status Fields */
403 u16 length; /* Buffer Length */
404 };
405 u32 lstatus;
406 };
395 u32 bufPtr; /* Buffer Pointer */ 407 u32 bufPtr; /* Buffer Pointer */
396}; 408};
397 409