diff options
author | Dai Haruki <dai.haruki@freescale.com> | 2008-12-16 18:34:50 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-12-16 18:34:50 -0500 |
commit | 5a5efed4817ef931f648b118aeb9222e53122d2b (patch) | |
tree | 592f3dbe3bf47035e8738b1c4bbe48fc3be973fc /drivers/net/gianfar.h | |
parent | 31de198b4d2732028f4c5bff04b0103b1d8c1d8c (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.h | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h index 1ebf7ac27a3..9c8974dc8dd 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 | ||
375 | struct txbd8 | 377 | struct 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 | ||
391 | struct rxbd8 | 398 | struct 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 | ||