aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt2800usb.c
diff options
context:
space:
mode:
authorIvo van Doorn <IvDoorn@gmail.com>2011-04-18 09:34:22 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-04-19 15:40:02 -0400
commit8d0a2dcfb6f965781cde6d9dfbd4540ab22a0eb9 (patch)
treec42b1ace43934b189214970622513558e7231443 /drivers/net/wireless/rt2x00/rt2800usb.c
parent9a8199961b22e61221a6114b8bbbc26ddcc243f7 (diff)
rt2x00: Optimize register access in rt2800usb
All register reads/writes in rt2800usb were previously done with rt2800_register_read/rt2800_register_write. These however indirectly call rt2x00usb_register_read/rt2x00usb_register_write which adds an additional overhead of at least one call and several move instructions to each register access. Replacing the calls to rt2800_register_read/rt2800_register_write with direct calls to rt2x00usb_register_read/rt2x00usb_register_write gets rid of quite a number of instructions in the drivers hotpaths (IRQ handling and txdone handling). For consistency replace all references to rt2800_register_read/write with the rt2x00usb_register_read/write variants. Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2800usb.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt2800usb.c56
1 files changed, 28 insertions, 28 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index fd8aa997fd2a..44ead759e20f 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -59,16 +59,16 @@ static void rt2800usb_start_queue(struct data_queue *queue)
59 59
60 switch (queue->qid) { 60 switch (queue->qid) {
61 case QID_RX: 61 case QID_RX:
62 rt2800_register_read(rt2x00dev, MAC_SYS_CTRL, &reg); 62 rt2x00usb_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
63 rt2x00_set_field32(&reg, MAC_SYS_CTRL_ENABLE_RX, 1); 63 rt2x00_set_field32(&reg, MAC_SYS_CTRL_ENABLE_RX, 1);
64 rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, reg); 64 rt2x00usb_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
65 break; 65 break;
66 case QID_BEACON: 66 case QID_BEACON:
67 rt2800_register_read(rt2x00dev, BCN_TIME_CFG, &reg); 67 rt2x00usb_register_read(rt2x00dev, BCN_TIME_CFG, &reg);
68 rt2x00_set_field32(&reg, BCN_TIME_CFG_TSF_TICKING, 1); 68 rt2x00_set_field32(&reg, BCN_TIME_CFG_TSF_TICKING, 1);
69 rt2x00_set_field32(&reg, BCN_TIME_CFG_TBTT_ENABLE, 1); 69 rt2x00_set_field32(&reg, BCN_TIME_CFG_TBTT_ENABLE, 1);
70 rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_GEN, 1); 70 rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_GEN, 1);
71 rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg); 71 rt2x00usb_register_write(rt2x00dev, BCN_TIME_CFG, reg);
72 break; 72 break;
73 default: 73 default:
74 break; 74 break;
@@ -82,16 +82,16 @@ static void rt2800usb_stop_queue(struct data_queue *queue)
82 82
83 switch (queue->qid) { 83 switch (queue->qid) {
84 case QID_RX: 84 case QID_RX:
85 rt2800_register_read(rt2x00dev, MAC_SYS_CTRL, &reg); 85 rt2x00usb_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
86 rt2x00_set_field32(&reg, MAC_SYS_CTRL_ENABLE_RX, 0); 86 rt2x00_set_field32(&reg, MAC_SYS_CTRL_ENABLE_RX, 0);
87 rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, reg); 87 rt2x00usb_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
88 break; 88 break;
89 case QID_BEACON: 89 case QID_BEACON:
90 rt2800_register_read(rt2x00dev, BCN_TIME_CFG, &reg); 90 rt2x00usb_register_read(rt2x00dev, BCN_TIME_CFG, &reg);
91 rt2x00_set_field32(&reg, BCN_TIME_CFG_TSF_TICKING, 0); 91 rt2x00_set_field32(&reg, BCN_TIME_CFG_TSF_TICKING, 0);
92 rt2x00_set_field32(&reg, BCN_TIME_CFG_TBTT_ENABLE, 0); 92 rt2x00_set_field32(&reg, BCN_TIME_CFG_TBTT_ENABLE, 0);
93 rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_GEN, 0); 93 rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_GEN, 0);
94 rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg); 94 rt2x00usb_register_write(rt2x00dev, BCN_TIME_CFG, reg);
95 break; 95 break;
96 default: 96 default:
97 break; 97 break;
@@ -185,11 +185,11 @@ static int rt2800usb_write_firmware(struct rt2x00_dev *rt2x00dev,
185 /* 185 /*
186 * Write firmware to device. 186 * Write firmware to device.
187 */ 187 */
188 rt2800_register_multiwrite(rt2x00dev, FIRMWARE_IMAGE_BASE, 188 rt2x00usb_register_multiwrite(rt2x00dev, FIRMWARE_IMAGE_BASE,
189 data + offset, length); 189 data + offset, length);
190 190
191 rt2800_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); 191 rt2x00usb_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0);
192 rt2800_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0); 192 rt2x00usb_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0);
193 193
194 /* 194 /*
195 * Send firmware request to device to load firmware, 195 * Send firmware request to device to load firmware,
@@ -204,7 +204,7 @@ static int rt2800usb_write_firmware(struct rt2x00_dev *rt2x00dev,
204 } 204 }
205 205
206 msleep(10); 206 msleep(10);
207 rt2800_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0); 207 rt2x00usb_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0);
208 208
209 return 0; 209 return 0;
210} 210}
@@ -222,22 +222,22 @@ static int rt2800usb_init_registers(struct rt2x00_dev *rt2x00dev)
222 if (rt2800_wait_csr_ready(rt2x00dev)) 222 if (rt2800_wait_csr_ready(rt2x00dev))
223 return -EBUSY; 223 return -EBUSY;
224 224
225 rt2800_register_read(rt2x00dev, PBF_SYS_CTRL, &reg); 225 rt2x00usb_register_read(rt2x00dev, PBF_SYS_CTRL, &reg);
226 rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, reg & ~0x00002000); 226 rt2x00usb_register_write(rt2x00dev, PBF_SYS_CTRL, reg & ~0x00002000);
227 227
228 rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000003); 228 rt2x00usb_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000003);
229 229
230 rt2800_register_read(rt2x00dev, MAC_SYS_CTRL, &reg); 230 rt2x00usb_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
231 rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_CSR, 1); 231 rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_CSR, 1);
232 rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_BBP, 1); 232 rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_BBP, 1);
233 rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, reg); 233 rt2x00usb_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
234 234
235 rt2800_register_write(rt2x00dev, USB_DMA_CFG, 0x00000000); 235 rt2x00usb_register_write(rt2x00dev, USB_DMA_CFG, 0x00000000);
236 236
237 rt2x00usb_vendor_request_sw(rt2x00dev, USB_DEVICE_MODE, 0, 237 rt2x00usb_vendor_request_sw(rt2x00dev, USB_DEVICE_MODE, 0,
238 USB_MODE_RESET, REGISTER_TIMEOUT); 238 USB_MODE_RESET, REGISTER_TIMEOUT);
239 239
240 rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, 0x00000000); 240 rt2x00usb_register_write(rt2x00dev, MAC_SYS_CTRL, 0x00000000);
241 241
242 return 0; 242 return 0;
243} 243}
@@ -249,7 +249,7 @@ static int rt2800usb_enable_radio(struct rt2x00_dev *rt2x00dev)
249 if (unlikely(rt2800_wait_wpdma_ready(rt2x00dev))) 249 if (unlikely(rt2800_wait_wpdma_ready(rt2x00dev)))
250 return -EIO; 250 return -EIO;
251 251
252 rt2800_register_read(rt2x00dev, USB_DMA_CFG, &reg); 252 rt2x00usb_register_read(rt2x00dev, USB_DMA_CFG, &reg);
253 rt2x00_set_field32(&reg, USB_DMA_CFG_PHY_CLEAR, 0); 253 rt2x00_set_field32(&reg, USB_DMA_CFG_PHY_CLEAR, 0);
254 rt2x00_set_field32(&reg, USB_DMA_CFG_RX_BULK_AGG_EN, 0); 254 rt2x00_set_field32(&reg, USB_DMA_CFG_RX_BULK_AGG_EN, 0);
255 rt2x00_set_field32(&reg, USB_DMA_CFG_RX_BULK_AGG_TIMEOUT, 128); 255 rt2x00_set_field32(&reg, USB_DMA_CFG_RX_BULK_AGG_TIMEOUT, 128);
@@ -262,7 +262,7 @@ static int rt2800usb_enable_radio(struct rt2x00_dev *rt2x00dev)
262 / 1024) - 3); 262 / 1024) - 3);
263 rt2x00_set_field32(&reg, USB_DMA_CFG_RX_BULK_EN, 1); 263 rt2x00_set_field32(&reg, USB_DMA_CFG_RX_BULK_EN, 1);
264 rt2x00_set_field32(&reg, USB_DMA_CFG_TX_BULK_EN, 1); 264 rt2x00_set_field32(&reg, USB_DMA_CFG_TX_BULK_EN, 1);
265 rt2800_register_write(rt2x00dev, USB_DMA_CFG, reg); 265 rt2x00usb_register_write(rt2x00dev, USB_DMA_CFG, reg);
266 266
267 return rt2800_enable_radio(rt2x00dev); 267 return rt2800_enable_radio(rt2x00dev);
268} 268}
@@ -338,12 +338,12 @@ static void rt2800usb_watchdog(struct rt2x00_dev *rt2x00dev)
338 unsigned int i; 338 unsigned int i;
339 u32 reg; 339 u32 reg;
340 340
341 rt2800_register_read(rt2x00dev, TXRXQ_PCNT, &reg); 341 rt2x00usb_register_read(rt2x00dev, TXRXQ_PCNT, &reg);
342 if (rt2x00_get_field32(reg, TXRXQ_PCNT_TX0Q)) { 342 if (rt2x00_get_field32(reg, TXRXQ_PCNT_TX0Q)) {
343 WARNING(rt2x00dev, "TX HW queue 0 timed out," 343 WARNING(rt2x00dev, "TX HW queue 0 timed out,"
344 " invoke forced kick\n"); 344 " invoke forced kick\n");
345 345
346 rt2800_register_write(rt2x00dev, PBF_CFG, 0xf40012); 346 rt2x00usb_register_write(rt2x00dev, PBF_CFG, 0xf40012);
347 347
348 for (i = 0; i < 10; i++) { 348 for (i = 0; i < 10; i++) {
349 udelay(10); 349 udelay(10);
@@ -351,15 +351,15 @@ static void rt2800usb_watchdog(struct rt2x00_dev *rt2x00dev)
351 break; 351 break;
352 } 352 }
353 353
354 rt2800_register_write(rt2x00dev, PBF_CFG, 0xf40006); 354 rt2x00usb_register_write(rt2x00dev, PBF_CFG, 0xf40006);
355 } 355 }
356 356
357 rt2800_register_read(rt2x00dev, TXRXQ_PCNT, &reg); 357 rt2x00usb_register_read(rt2x00dev, TXRXQ_PCNT, &reg);
358 if (rt2x00_get_field32(reg, TXRXQ_PCNT_TX1Q)) { 358 if (rt2x00_get_field32(reg, TXRXQ_PCNT_TX1Q)) {
359 WARNING(rt2x00dev, "TX HW queue 1 timed out," 359 WARNING(rt2x00dev, "TX HW queue 1 timed out,"
360 " invoke forced kick\n"); 360 " invoke forced kick\n");
361 361
362 rt2800_register_write(rt2x00dev, PBF_CFG, 0xf4000a); 362 rt2x00usb_register_write(rt2x00dev, PBF_CFG, 0xf4000a);
363 363
364 for (i = 0; i < 10; i++) { 364 for (i = 0; i < 10; i++) {
365 udelay(10); 365 udelay(10);
@@ -367,7 +367,7 @@ static void rt2800usb_watchdog(struct rt2x00_dev *rt2x00dev)
367 break; 367 break;
368 } 368 }
369 369
370 rt2800_register_write(rt2x00dev, PBF_CFG, 0xf40006); 370 rt2x00usb_register_write(rt2x00dev, PBF_CFG, 0xf40006);
371 } 371 }
372 372
373 rt2x00usb_watchdog(rt2x00dev); 373 rt2x00usb_watchdog(rt2x00dev);