diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/smsc911x.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/net/smsc911x.c b/drivers/net/smsc911x.c index eb7db032a780..5113b26fc2d9 100644 --- a/drivers/net/smsc911x.c +++ b/drivers/net/smsc911x.c | |||
@@ -47,6 +47,7 @@ | |||
47 | #include <linux/bitops.h> | 47 | #include <linux/bitops.h> |
48 | #include <linux/irq.h> | 48 | #include <linux/irq.h> |
49 | #include <linux/io.h> | 49 | #include <linux/io.h> |
50 | #include <linux/swab.h> | ||
50 | #include <linux/phy.h> | 51 | #include <linux/phy.h> |
51 | #include <linux/smsc911x.h> | 52 | #include <linux/smsc911x.h> |
52 | #include "smsc911x.h" | 53 | #include "smsc911x.h" |
@@ -175,6 +176,12 @@ static inline void | |||
175 | smsc911x_tx_writefifo(struct smsc911x_data *pdata, unsigned int *buf, | 176 | smsc911x_tx_writefifo(struct smsc911x_data *pdata, unsigned int *buf, |
176 | unsigned int wordcount) | 177 | unsigned int wordcount) |
177 | { | 178 | { |
179 | if (pdata->config.flags & SMSC911X_SWAP_FIFO) { | ||
180 | while (wordcount--) | ||
181 | smsc911x_reg_write(pdata, TX_DATA_FIFO, swab32(*buf++)); | ||
182 | return; | ||
183 | } | ||
184 | |||
178 | if (pdata->config.flags & SMSC911X_USE_32BIT) { | 185 | if (pdata->config.flags & SMSC911X_USE_32BIT) { |
179 | writesl(pdata->ioaddr + TX_DATA_FIFO, buf, wordcount); | 186 | writesl(pdata->ioaddr + TX_DATA_FIFO, buf, wordcount); |
180 | return; | 187 | return; |
@@ -194,6 +201,12 @@ static inline void | |||
194 | smsc911x_rx_readfifo(struct smsc911x_data *pdata, unsigned int *buf, | 201 | smsc911x_rx_readfifo(struct smsc911x_data *pdata, unsigned int *buf, |
195 | unsigned int wordcount) | 202 | unsigned int wordcount) |
196 | { | 203 | { |
204 | if (pdata->config.flags & SMSC911X_SWAP_FIFO) { | ||
205 | while (wordcount--) | ||
206 | *buf++ = swab32(smsc911x_reg_read(pdata, RX_DATA_FIFO)); | ||
207 | return; | ||
208 | } | ||
209 | |||
197 | if (pdata->config.flags & SMSC911X_USE_32BIT) { | 210 | if (pdata->config.flags & SMSC911X_USE_32BIT) { |
198 | readsl(pdata->ioaddr + RX_DATA_FIFO, buf, wordcount); | 211 | readsl(pdata->ioaddr + RX_DATA_FIFO, buf, wordcount); |
199 | return; | 212 | return; |