aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancois Romieu <romieu@fr.zoreil.com>2005-07-30 07:13:03 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-07-30 18:21:00 -0400
commit8b5641d4f1f7376257783b79f121a19ccd86b56b (patch)
treeff22ed47573d826d8744effd78edefd30100c8fe
parent830fb7d23217ae748df0b16d4d419110810036b7 (diff)
[PATCH] sis190: the size of the Rx buffer is constrained
Add a restriction to the size of the Rx buffer SiS driver forces the size of any Rx buffer to be a multiple of 64 bit. I would not be surprized that it goes along with some alignment issues which have been experienced before. So far it does not make much of a difference (both drivers use 1536 bytes buffer). Signed-off-by: Francois Romieu <romieu@fr.zoreil.com> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
-rw-r--r--drivers/net/sis190.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/sis190.c b/drivers/net/sis190.c
index 1e8e7111c261..2229698debbd 100644
--- a/drivers/net/sis190.c
+++ b/drivers/net/sis190.c
@@ -69,6 +69,7 @@
69#define TX_RING_BYTES (NUM_TX_DESC * sizeof(struct TxDesc)) 69#define TX_RING_BYTES (NUM_TX_DESC * sizeof(struct TxDesc))
70#define RX_RING_BYTES (NUM_RX_DESC * sizeof(struct RxDesc)) 70#define RX_RING_BYTES (NUM_RX_DESC * sizeof(struct RxDesc))
71#define RX_BUF_SIZE 1536 71#define RX_BUF_SIZE 1536
72#define RX_BUF_MASK 0xfff8
72 73
73#define SIS190_REGS_SIZE 0x80 74#define SIS190_REGS_SIZE 0x80
74#define SIS190_TX_TIMEOUT (6*HZ) 75#define SIS190_TX_TIMEOUT (6*HZ)
@@ -400,7 +401,7 @@ static inline void sis190_give_to_asic(struct RxDesc *desc, u32 rx_buf_sz)
400 u32 eor = le32_to_cpu(desc->size) & RingEnd; 401 u32 eor = le32_to_cpu(desc->size) & RingEnd;
401 402
402 desc->PSize = 0x0; 403 desc->PSize = 0x0;
403 desc->size = cpu_to_le32(rx_buf_sz | eor); 404 desc->size = cpu_to_le32((rx_buf_sz & RX_BUF_MASK) | eor);
404 wmb(); 405 wmb();
405 desc->status = cpu_to_le32(OWNbit | INTbit); 406 desc->status = cpu_to_le32(OWNbit | INTbit);
406} 407}
@@ -924,6 +925,11 @@ static void sis190_set_rxbufsize(struct sis190_private *tp,
924 unsigned int mtu = dev->mtu; 925 unsigned int mtu = dev->mtu;
925 926
926 tp->rx_buf_sz = (mtu > RX_BUF_SIZE) ? mtu + ETH_HLEN + 8 : RX_BUF_SIZE; 927 tp->rx_buf_sz = (mtu > RX_BUF_SIZE) ? mtu + ETH_HLEN + 8 : RX_BUF_SIZE;
928 /* RxDesc->size has a licence to kill the lower bits */
929 if (tp->rx_buf_sz & 0x07) {
930 tp->rx_buf_sz += 8;
931 tp->rx_buf_sz &= RX_BUF_MASK;
932 }
927} 933}
928 934
929static int sis190_open(struct net_device *dev) 935static int sis190_open(struct net_device *dev)