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>
This commit is contained in:
committed by
David S. Miller
parent
31de198b4d
commit
5a5efed481
@@ -311,6 +311,8 @@ extern const char gfar_driver_version[];
|
||||
#define ATTRELI_EI_MASK 0x00003fff
|
||||
#define ATTRELI_EI(x) (x)
|
||||
|
||||
#define BD_LFLAG(flags) ((flags) << 16)
|
||||
#define BD_LENGTH_MASK 0x00ff
|
||||
|
||||
/* TxBD status field bits */
|
||||
#define TXBD_READY 0x8000
|
||||
@@ -374,8 +376,13 @@ extern const char gfar_driver_version[];
|
||||
|
||||
struct txbd8
|
||||
{
|
||||
u16 status; /* Status Fields */
|
||||
u16 length; /* Buffer length */
|
||||
union {
|
||||
struct {
|
||||
u16 status; /* Status Fields */
|
||||
u16 length; /* Buffer length */
|
||||
};
|
||||
u32 lstatus;
|
||||
};
|
||||
u32 bufPtr; /* Buffer Pointer */
|
||||
};
|
||||
|
||||
@@ -390,8 +397,13 @@ struct txfcb {
|
||||
|
||||
struct rxbd8
|
||||
{
|
||||
u16 status; /* Status Fields */
|
||||
u16 length; /* Buffer Length */
|
||||
union {
|
||||
struct {
|
||||
u16 status; /* Status Fields */
|
||||
u16 length; /* Buffer Length */
|
||||
};
|
||||
u32 lstatus;
|
||||
};
|
||||
u32 bufPtr; /* Buffer Pointer */
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user