Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.4-rc2 1274 lines 38 kB view raw
1/* 2 Copyright (C) 2009 - 2010 Ivo van Doorn <IvDoorn@gmail.com> 3 Copyright (C) 2009 Alban Browaeys <prahal@yahoo.com> 4 Copyright (C) 2009 Felix Fietkau <nbd@openwrt.org> 5 Copyright (C) 2009 Luis Correia <luis.f.correia@gmail.com> 6 Copyright (C) 2009 Mattias Nissler <mattias.nissler@gmx.de> 7 Copyright (C) 2009 Mark Asselstine <asselsm@gmail.com> 8 Copyright (C) 2009 Xose Vazquez Perez <xose.vazquez@gmail.com> 9 Copyright (C) 2009 Bart Zolnierkiewicz <bzolnier@gmail.com> 10 <http://rt2x00.serialmonkey.com> 11 12 This program is free software; you can redistribute it and/or modify 13 it under the terms of the GNU General Public License as published by 14 the Free Software Foundation; either version 2 of the License, or 15 (at your option) any later version. 16 17 This program is distributed in the hope that it will be useful, 18 but WITHOUT ANY WARRANTY; without even the implied warranty of 19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 GNU General Public License for more details. 21 22 You should have received a copy of the GNU General Public License 23 along with this program; if not, write to the 24 Free Software Foundation, Inc., 25 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 26 */ 27 28/* 29 Module: rt2800pci 30 Abstract: rt2800pci device specific routines. 31 Supported chipsets: RT2800E & RT2800ED. 32 */ 33 34#include <linux/delay.h> 35#include <linux/etherdevice.h> 36#include <linux/init.h> 37#include <linux/kernel.h> 38#include <linux/module.h> 39#include <linux/pci.h> 40#include <linux/platform_device.h> 41#include <linux/eeprom_93cx6.h> 42 43#include "rt2x00.h" 44#include "rt2x00pci.h" 45#include "rt2x00soc.h" 46#include "rt2800lib.h" 47#include "rt2800.h" 48#include "rt2800pci.h" 49 50/* 51 * Allow hardware encryption to be disabled. 52 */ 53static bool modparam_nohwcrypt = false; 54module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO); 55MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption."); 56 57static void rt2800pci_mcu_status(struct rt2x00_dev *rt2x00dev, const u8 token) 58{ 59 unsigned int i; 60 u32 reg; 61 62 /* 63 * SOC devices don't support MCU requests. 64 */ 65 if (rt2x00_is_soc(rt2x00dev)) 66 return; 67 68 for (i = 0; i < 200; i++) { 69 rt2x00pci_register_read(rt2x00dev, H2M_MAILBOX_CID, &reg); 70 71 if ((rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD0) == token) || 72 (rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD1) == token) || 73 (rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD2) == token) || 74 (rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD3) == token)) 75 break; 76 77 udelay(REGISTER_BUSY_DELAY); 78 } 79 80 if (i == 200) 81 ERROR(rt2x00dev, "MCU request failed, no response from hardware\n"); 82 83 rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0); 84 rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); 85} 86 87#if defined(CONFIG_RALINK_RT288X) || defined(CONFIG_RALINK_RT305X) 88static void rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev) 89{ 90 void __iomem *base_addr = ioremap(0x1F040000, EEPROM_SIZE); 91 92 memcpy_fromio(rt2x00dev->eeprom, base_addr, EEPROM_SIZE); 93 94 iounmap(base_addr); 95} 96#else 97static inline void rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev) 98{ 99} 100#endif /* CONFIG_RALINK_RT288X || CONFIG_RALINK_RT305X */ 101 102#ifdef CONFIG_PCI 103static void rt2800pci_eepromregister_read(struct eeprom_93cx6 *eeprom) 104{ 105 struct rt2x00_dev *rt2x00dev = eeprom->data; 106 u32 reg; 107 108 rt2x00pci_register_read(rt2x00dev, E2PROM_CSR, &reg); 109 110 eeprom->reg_data_in = !!rt2x00_get_field32(reg, E2PROM_CSR_DATA_IN); 111 eeprom->reg_data_out = !!rt2x00_get_field32(reg, E2PROM_CSR_DATA_OUT); 112 eeprom->reg_data_clock = 113 !!rt2x00_get_field32(reg, E2PROM_CSR_DATA_CLOCK); 114 eeprom->reg_chip_select = 115 !!rt2x00_get_field32(reg, E2PROM_CSR_CHIP_SELECT); 116} 117 118static void rt2800pci_eepromregister_write(struct eeprom_93cx6 *eeprom) 119{ 120 struct rt2x00_dev *rt2x00dev = eeprom->data; 121 u32 reg = 0; 122 123 rt2x00_set_field32(&reg, E2PROM_CSR_DATA_IN, !!eeprom->reg_data_in); 124 rt2x00_set_field32(&reg, E2PROM_CSR_DATA_OUT, !!eeprom->reg_data_out); 125 rt2x00_set_field32(&reg, E2PROM_CSR_DATA_CLOCK, 126 !!eeprom->reg_data_clock); 127 rt2x00_set_field32(&reg, E2PROM_CSR_CHIP_SELECT, 128 !!eeprom->reg_chip_select); 129 130 rt2x00pci_register_write(rt2x00dev, E2PROM_CSR, reg); 131} 132 133static void rt2800pci_read_eeprom_pci(struct rt2x00_dev *rt2x00dev) 134{ 135 struct eeprom_93cx6 eeprom; 136 u32 reg; 137 138 rt2x00pci_register_read(rt2x00dev, E2PROM_CSR, &reg); 139 140 eeprom.data = rt2x00dev; 141 eeprom.register_read = rt2800pci_eepromregister_read; 142 eeprom.register_write = rt2800pci_eepromregister_write; 143 switch (rt2x00_get_field32(reg, E2PROM_CSR_TYPE)) 144 { 145 case 0: 146 eeprom.width = PCI_EEPROM_WIDTH_93C46; 147 break; 148 case 1: 149 eeprom.width = PCI_EEPROM_WIDTH_93C66; 150 break; 151 default: 152 eeprom.width = PCI_EEPROM_WIDTH_93C86; 153 break; 154 } 155 eeprom.reg_data_in = 0; 156 eeprom.reg_data_out = 0; 157 eeprom.reg_data_clock = 0; 158 eeprom.reg_chip_select = 0; 159 160 eeprom_93cx6_multiread(&eeprom, EEPROM_BASE, rt2x00dev->eeprom, 161 EEPROM_SIZE / sizeof(u16)); 162} 163 164static int rt2800pci_efuse_detect(struct rt2x00_dev *rt2x00dev) 165{ 166 return rt2800_efuse_detect(rt2x00dev); 167} 168 169static inline void rt2800pci_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev) 170{ 171 rt2800_read_eeprom_efuse(rt2x00dev); 172} 173#else 174static inline void rt2800pci_read_eeprom_pci(struct rt2x00_dev *rt2x00dev) 175{ 176} 177 178static inline int rt2800pci_efuse_detect(struct rt2x00_dev *rt2x00dev) 179{ 180 return 0; 181} 182 183static inline void rt2800pci_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev) 184{ 185} 186#endif /* CONFIG_PCI */ 187 188/* 189 * Queue handlers. 190 */ 191static void rt2800pci_start_queue(struct data_queue *queue) 192{ 193 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; 194 u32 reg; 195 196 switch (queue->qid) { 197 case QID_RX: 198 rt2x00pci_register_read(rt2x00dev, MAC_SYS_CTRL, &reg); 199 rt2x00_set_field32(&reg, MAC_SYS_CTRL_ENABLE_RX, 1); 200 rt2x00pci_register_write(rt2x00dev, MAC_SYS_CTRL, reg); 201 break; 202 case QID_BEACON: 203 rt2x00pci_register_read(rt2x00dev, BCN_TIME_CFG, &reg); 204 rt2x00_set_field32(&reg, BCN_TIME_CFG_TSF_TICKING, 1); 205 rt2x00_set_field32(&reg, BCN_TIME_CFG_TBTT_ENABLE, 1); 206 rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_GEN, 1); 207 rt2x00pci_register_write(rt2x00dev, BCN_TIME_CFG, reg); 208 209 rt2x00pci_register_read(rt2x00dev, INT_TIMER_EN, &reg); 210 rt2x00_set_field32(&reg, INT_TIMER_EN_PRE_TBTT_TIMER, 1); 211 rt2x00pci_register_write(rt2x00dev, INT_TIMER_EN, reg); 212 break; 213 default: 214 break; 215 } 216} 217 218static void rt2800pci_kick_queue(struct data_queue *queue) 219{ 220 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; 221 struct queue_entry *entry; 222 223 switch (queue->qid) { 224 case QID_AC_VO: 225 case QID_AC_VI: 226 case QID_AC_BE: 227 case QID_AC_BK: 228 entry = rt2x00queue_get_entry(queue, Q_INDEX); 229 rt2x00pci_register_write(rt2x00dev, TX_CTX_IDX(queue->qid), 230 entry->entry_idx); 231 break; 232 case QID_MGMT: 233 entry = rt2x00queue_get_entry(queue, Q_INDEX); 234 rt2x00pci_register_write(rt2x00dev, TX_CTX_IDX(5), 235 entry->entry_idx); 236 break; 237 default: 238 break; 239 } 240} 241 242static void rt2800pci_stop_queue(struct data_queue *queue) 243{ 244 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; 245 u32 reg; 246 247 switch (queue->qid) { 248 case QID_RX: 249 rt2x00pci_register_read(rt2x00dev, MAC_SYS_CTRL, &reg); 250 rt2x00_set_field32(&reg, MAC_SYS_CTRL_ENABLE_RX, 0); 251 rt2x00pci_register_write(rt2x00dev, MAC_SYS_CTRL, reg); 252 break; 253 case QID_BEACON: 254 rt2x00pci_register_read(rt2x00dev, BCN_TIME_CFG, &reg); 255 rt2x00_set_field32(&reg, BCN_TIME_CFG_TSF_TICKING, 0); 256 rt2x00_set_field32(&reg, BCN_TIME_CFG_TBTT_ENABLE, 0); 257 rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_GEN, 0); 258 rt2x00pci_register_write(rt2x00dev, BCN_TIME_CFG, reg); 259 260 rt2x00pci_register_read(rt2x00dev, INT_TIMER_EN, &reg); 261 rt2x00_set_field32(&reg, INT_TIMER_EN_PRE_TBTT_TIMER, 0); 262 rt2x00pci_register_write(rt2x00dev, INT_TIMER_EN, reg); 263 264 /* 265 * Wait for current invocation to finish. The tasklet 266 * won't be scheduled anymore afterwards since we disabled 267 * the TBTT and PRE TBTT timer. 268 */ 269 tasklet_kill(&rt2x00dev->tbtt_tasklet); 270 tasklet_kill(&rt2x00dev->pretbtt_tasklet); 271 272 break; 273 default: 274 break; 275 } 276} 277 278/* 279 * Firmware functions 280 */ 281static char *rt2800pci_get_firmware_name(struct rt2x00_dev *rt2x00dev) 282{ 283 return FIRMWARE_RT2860; 284} 285 286static int rt2800pci_write_firmware(struct rt2x00_dev *rt2x00dev, 287 const u8 *data, const size_t len) 288{ 289 u32 reg; 290 291 /* 292 * enable Host program ram write selection 293 */ 294 reg = 0; 295 rt2x00_set_field32(&reg, PBF_SYS_CTRL_HOST_RAM_WRITE, 1); 296 rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, reg); 297 298 /* 299 * Write firmware to device. 300 */ 301 rt2x00pci_register_multiwrite(rt2x00dev, FIRMWARE_IMAGE_BASE, 302 data, len); 303 304 rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000); 305 rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00001); 306 307 rt2x00pci_register_write(rt2x00dev, H2M_BBP_AGENT, 0); 308 rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0); 309 310 return 0; 311} 312 313/* 314 * Initialization functions. 315 */ 316static bool rt2800pci_get_entry_state(struct queue_entry *entry) 317{ 318 struct queue_entry_priv_pci *entry_priv = entry->priv_data; 319 u32 word; 320 321 if (entry->queue->qid == QID_RX) { 322 rt2x00_desc_read(entry_priv->desc, 1, &word); 323 324 return (!rt2x00_get_field32(word, RXD_W1_DMA_DONE)); 325 } else { 326 rt2x00_desc_read(entry_priv->desc, 1, &word); 327 328 return (!rt2x00_get_field32(word, TXD_W1_DMA_DONE)); 329 } 330} 331 332static void rt2800pci_clear_entry(struct queue_entry *entry) 333{ 334 struct queue_entry_priv_pci *entry_priv = entry->priv_data; 335 struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb); 336 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; 337 u32 word; 338 339 if (entry->queue->qid == QID_RX) { 340 rt2x00_desc_read(entry_priv->desc, 0, &word); 341 rt2x00_set_field32(&word, RXD_W0_SDP0, skbdesc->skb_dma); 342 rt2x00_desc_write(entry_priv->desc, 0, word); 343 344 rt2x00_desc_read(entry_priv->desc, 1, &word); 345 rt2x00_set_field32(&word, RXD_W1_DMA_DONE, 0); 346 rt2x00_desc_write(entry_priv->desc, 1, word); 347 348 /* 349 * Set RX IDX in register to inform hardware that we have 350 * handled this entry and it is available for reuse again. 351 */ 352 rt2x00pci_register_write(rt2x00dev, RX_CRX_IDX, 353 entry->entry_idx); 354 } else { 355 rt2x00_desc_read(entry_priv->desc, 1, &word); 356 rt2x00_set_field32(&word, TXD_W1_DMA_DONE, 1); 357 rt2x00_desc_write(entry_priv->desc, 1, word); 358 } 359} 360 361static int rt2800pci_init_queues(struct rt2x00_dev *rt2x00dev) 362{ 363 struct queue_entry_priv_pci *entry_priv; 364 u32 reg; 365 366 /* 367 * Initialize registers. 368 */ 369 entry_priv = rt2x00dev->tx[0].entries[0].priv_data; 370 rt2x00pci_register_write(rt2x00dev, TX_BASE_PTR0, entry_priv->desc_dma); 371 rt2x00pci_register_write(rt2x00dev, TX_MAX_CNT0, 372 rt2x00dev->tx[0].limit); 373 rt2x00pci_register_write(rt2x00dev, TX_CTX_IDX0, 0); 374 rt2x00pci_register_write(rt2x00dev, TX_DTX_IDX0, 0); 375 376 entry_priv = rt2x00dev->tx[1].entries[0].priv_data; 377 rt2x00pci_register_write(rt2x00dev, TX_BASE_PTR1, entry_priv->desc_dma); 378 rt2x00pci_register_write(rt2x00dev, TX_MAX_CNT1, 379 rt2x00dev->tx[1].limit); 380 rt2x00pci_register_write(rt2x00dev, TX_CTX_IDX1, 0); 381 rt2x00pci_register_write(rt2x00dev, TX_DTX_IDX1, 0); 382 383 entry_priv = rt2x00dev->tx[2].entries[0].priv_data; 384 rt2x00pci_register_write(rt2x00dev, TX_BASE_PTR2, entry_priv->desc_dma); 385 rt2x00pci_register_write(rt2x00dev, TX_MAX_CNT2, 386 rt2x00dev->tx[2].limit); 387 rt2x00pci_register_write(rt2x00dev, TX_CTX_IDX2, 0); 388 rt2x00pci_register_write(rt2x00dev, TX_DTX_IDX2, 0); 389 390 entry_priv = rt2x00dev->tx[3].entries[0].priv_data; 391 rt2x00pci_register_write(rt2x00dev, TX_BASE_PTR3, entry_priv->desc_dma); 392 rt2x00pci_register_write(rt2x00dev, TX_MAX_CNT3, 393 rt2x00dev->tx[3].limit); 394 rt2x00pci_register_write(rt2x00dev, TX_CTX_IDX3, 0); 395 rt2x00pci_register_write(rt2x00dev, TX_DTX_IDX3, 0); 396 397 entry_priv = rt2x00dev->rx->entries[0].priv_data; 398 rt2x00pci_register_write(rt2x00dev, RX_BASE_PTR, entry_priv->desc_dma); 399 rt2x00pci_register_write(rt2x00dev, RX_MAX_CNT, 400 rt2x00dev->rx[0].limit); 401 rt2x00pci_register_write(rt2x00dev, RX_CRX_IDX, 402 rt2x00dev->rx[0].limit - 1); 403 rt2x00pci_register_write(rt2x00dev, RX_DRX_IDX, 0); 404 405 /* 406 * Enable global DMA configuration 407 */ 408 rt2x00pci_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg); 409 rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0); 410 rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0); 411 rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1); 412 rt2x00pci_register_write(rt2x00dev, WPDMA_GLO_CFG, reg); 413 414 rt2x00pci_register_write(rt2x00dev, DELAY_INT_CFG, 0); 415 416 return 0; 417} 418 419/* 420 * Device state switch handlers. 421 */ 422static void rt2800pci_toggle_irq(struct rt2x00_dev *rt2x00dev, 423 enum dev_state state) 424{ 425 u32 reg; 426 unsigned long flags; 427 428 /* 429 * When interrupts are being enabled, the interrupt registers 430 * should clear the register to assure a clean state. 431 */ 432 if (state == STATE_RADIO_IRQ_ON) { 433 rt2x00pci_register_read(rt2x00dev, INT_SOURCE_CSR, &reg); 434 rt2x00pci_register_write(rt2x00dev, INT_SOURCE_CSR, reg); 435 } 436 437 spin_lock_irqsave(&rt2x00dev->irqmask_lock, flags); 438 reg = 0; 439 if (state == STATE_RADIO_IRQ_ON) { 440 rt2x00_set_field32(&reg, INT_MASK_CSR_RX_DONE, 1); 441 rt2x00_set_field32(&reg, INT_MASK_CSR_TBTT, 1); 442 rt2x00_set_field32(&reg, INT_MASK_CSR_PRE_TBTT, 1); 443 rt2x00_set_field32(&reg, INT_MASK_CSR_TX_FIFO_STATUS, 1); 444 rt2x00_set_field32(&reg, INT_MASK_CSR_AUTO_WAKEUP, 1); 445 } 446 rt2x00pci_register_write(rt2x00dev, INT_MASK_CSR, reg); 447 spin_unlock_irqrestore(&rt2x00dev->irqmask_lock, flags); 448 449 if (state == STATE_RADIO_IRQ_OFF) { 450 /* 451 * Wait for possibly running tasklets to finish. 452 */ 453 tasklet_kill(&rt2x00dev->txstatus_tasklet); 454 tasklet_kill(&rt2x00dev->rxdone_tasklet); 455 tasklet_kill(&rt2x00dev->autowake_tasklet); 456 tasklet_kill(&rt2x00dev->tbtt_tasklet); 457 tasklet_kill(&rt2x00dev->pretbtt_tasklet); 458 } 459} 460 461static int rt2800pci_init_registers(struct rt2x00_dev *rt2x00dev) 462{ 463 u32 reg; 464 465 /* 466 * Reset DMA indexes 467 */ 468 rt2x00pci_register_read(rt2x00dev, WPDMA_RST_IDX, &reg); 469 rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX0, 1); 470 rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX1, 1); 471 rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX2, 1); 472 rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX3, 1); 473 rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX4, 1); 474 rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX5, 1); 475 rt2x00_set_field32(&reg, WPDMA_RST_IDX_DRX_IDX0, 1); 476 rt2x00pci_register_write(rt2x00dev, WPDMA_RST_IDX, reg); 477 478 rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e1f); 479 rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00); 480 481 if (rt2x00_is_pcie(rt2x00dev) && 482 (rt2x00_rt(rt2x00dev, RT3572) || 483 rt2x00_rt(rt2x00dev, RT5390) || 484 rt2x00_rt(rt2x00dev, RT5392))) { 485 rt2x00pci_register_read(rt2x00dev, AUX_CTRL, &reg); 486 rt2x00_set_field32(&reg, AUX_CTRL_FORCE_PCIE_CLK, 1); 487 rt2x00_set_field32(&reg, AUX_CTRL_WAKE_PCIE_EN, 1); 488 rt2x00pci_register_write(rt2x00dev, AUX_CTRL, reg); 489 } 490 491 rt2x00pci_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000003); 492 493 reg = 0; 494 rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_CSR, 1); 495 rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_BBP, 1); 496 rt2x00pci_register_write(rt2x00dev, MAC_SYS_CTRL, reg); 497 498 rt2x00pci_register_write(rt2x00dev, MAC_SYS_CTRL, 0x00000000); 499 500 return 0; 501} 502 503static int rt2800pci_enable_radio(struct rt2x00_dev *rt2x00dev) 504{ 505 int retval; 506 507 if (unlikely(rt2800_wait_wpdma_ready(rt2x00dev) || 508 rt2800pci_init_queues(rt2x00dev))) 509 return -EIO; 510 511 retval = rt2800_enable_radio(rt2x00dev); 512 if (retval) 513 return retval; 514 515 /* After resume MCU_BOOT_SIGNAL will trash these. */ 516 rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0); 517 rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); 518 519 rt2800_mcu_request(rt2x00dev, MCU_SLEEP, TOKEN_RADIO_OFF, 0xff, 0x02); 520 rt2800pci_mcu_status(rt2x00dev, TOKEN_RADIO_OFF); 521 522 rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKEUP, 0, 0); 523 rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKEUP); 524 525 return retval; 526} 527 528static void rt2800pci_disable_radio(struct rt2x00_dev *rt2x00dev) 529{ 530 if (rt2x00_is_soc(rt2x00dev)) { 531 rt2800_disable_radio(rt2x00dev); 532 rt2x00pci_register_write(rt2x00dev, PWR_PIN_CFG, 0); 533 rt2x00pci_register_write(rt2x00dev, TX_PIN_CFG, 0); 534 } 535} 536 537static int rt2800pci_set_state(struct rt2x00_dev *rt2x00dev, 538 enum dev_state state) 539{ 540 if (state == STATE_AWAKE) { 541 rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKEUP, 542 0, 0x02); 543 rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKEUP); 544 } else if (state == STATE_SLEEP) { 545 rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_STATUS, 546 0xffffffff); 547 rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, 548 0xffffffff); 549 rt2800_mcu_request(rt2x00dev, MCU_SLEEP, TOKEN_SLEEP, 550 0xff, 0x01); 551 } 552 553 return 0; 554} 555 556static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev, 557 enum dev_state state) 558{ 559 int retval = 0; 560 561 switch (state) { 562 case STATE_RADIO_ON: 563 retval = rt2800pci_enable_radio(rt2x00dev); 564 break; 565 case STATE_RADIO_OFF: 566 /* 567 * After the radio has been disabled, the device should 568 * be put to sleep for powersaving. 569 */ 570 rt2800pci_disable_radio(rt2x00dev); 571 rt2800pci_set_state(rt2x00dev, STATE_SLEEP); 572 break; 573 case STATE_RADIO_IRQ_ON: 574 case STATE_RADIO_IRQ_OFF: 575 rt2800pci_toggle_irq(rt2x00dev, state); 576 break; 577 case STATE_DEEP_SLEEP: 578 case STATE_SLEEP: 579 case STATE_STANDBY: 580 case STATE_AWAKE: 581 retval = rt2800pci_set_state(rt2x00dev, state); 582 break; 583 default: 584 retval = -ENOTSUPP; 585 break; 586 } 587 588 if (unlikely(retval)) 589 ERROR(rt2x00dev, "Device failed to enter state %d (%d).\n", 590 state, retval); 591 592 return retval; 593} 594 595/* 596 * TX descriptor initialization 597 */ 598static __le32 *rt2800pci_get_txwi(struct queue_entry *entry) 599{ 600 return (__le32 *) entry->skb->data; 601} 602 603static void rt2800pci_write_tx_desc(struct queue_entry *entry, 604 struct txentry_desc *txdesc) 605{ 606 struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb); 607 struct queue_entry_priv_pci *entry_priv = entry->priv_data; 608 __le32 *txd = entry_priv->desc; 609 u32 word; 610 611 /* 612 * The buffers pointed by SD_PTR0/SD_LEN0 and SD_PTR1/SD_LEN1 613 * must contains a TXWI structure + 802.11 header + padding + 802.11 614 * data. We choose to have SD_PTR0/SD_LEN0 only contains TXWI and 615 * SD_PTR1/SD_LEN1 contains 802.11 header + padding + 802.11 616 * data. It means that LAST_SEC0 is always 0. 617 */ 618 619 /* 620 * Initialize TX descriptor 621 */ 622 word = 0; 623 rt2x00_set_field32(&word, TXD_W0_SD_PTR0, skbdesc->skb_dma); 624 rt2x00_desc_write(txd, 0, word); 625 626 word = 0; 627 rt2x00_set_field32(&word, TXD_W1_SD_LEN1, entry->skb->len); 628 rt2x00_set_field32(&word, TXD_W1_LAST_SEC1, 629 !test_bit(ENTRY_TXD_MORE_FRAG, &txdesc->flags)); 630 rt2x00_set_field32(&word, TXD_W1_BURST, 631 test_bit(ENTRY_TXD_BURST, &txdesc->flags)); 632 rt2x00_set_field32(&word, TXD_W1_SD_LEN0, TXWI_DESC_SIZE); 633 rt2x00_set_field32(&word, TXD_W1_LAST_SEC0, 0); 634 rt2x00_set_field32(&word, TXD_W1_DMA_DONE, 0); 635 rt2x00_desc_write(txd, 1, word); 636 637 word = 0; 638 rt2x00_set_field32(&word, TXD_W2_SD_PTR1, 639 skbdesc->skb_dma + TXWI_DESC_SIZE); 640 rt2x00_desc_write(txd, 2, word); 641 642 word = 0; 643 rt2x00_set_field32(&word, TXD_W3_WIV, 644 !test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc->flags)); 645 rt2x00_set_field32(&word, TXD_W3_QSEL, 2); 646 rt2x00_desc_write(txd, 3, word); 647 648 /* 649 * Register descriptor details in skb frame descriptor. 650 */ 651 skbdesc->desc = txd; 652 skbdesc->desc_len = TXD_DESC_SIZE; 653} 654 655/* 656 * RX control handlers 657 */ 658static void rt2800pci_fill_rxdone(struct queue_entry *entry, 659 struct rxdone_entry_desc *rxdesc) 660{ 661 struct queue_entry_priv_pci *entry_priv = entry->priv_data; 662 __le32 *rxd = entry_priv->desc; 663 u32 word; 664 665 rt2x00_desc_read(rxd, 3, &word); 666 667 if (rt2x00_get_field32(word, RXD_W3_CRC_ERROR)) 668 rxdesc->flags |= RX_FLAG_FAILED_FCS_CRC; 669 670 /* 671 * Unfortunately we don't know the cipher type used during 672 * decryption. This prevents us from correct providing 673 * correct statistics through debugfs. 674 */ 675 rxdesc->cipher_status = rt2x00_get_field32(word, RXD_W3_CIPHER_ERROR); 676 677 if (rt2x00_get_field32(word, RXD_W3_DECRYPTED)) { 678 /* 679 * Hardware has stripped IV/EIV data from 802.11 frame during 680 * decryption. Unfortunately the descriptor doesn't contain 681 * any fields with the EIV/IV data either, so they can't 682 * be restored by rt2x00lib. 683 */ 684 rxdesc->flags |= RX_FLAG_IV_STRIPPED; 685 686 /* 687 * The hardware has already checked the Michael Mic and has 688 * stripped it from the frame. Signal this to mac80211. 689 */ 690 rxdesc->flags |= RX_FLAG_MMIC_STRIPPED; 691 692 if (rxdesc->cipher_status == RX_CRYPTO_SUCCESS) 693 rxdesc->flags |= RX_FLAG_DECRYPTED; 694 else if (rxdesc->cipher_status == RX_CRYPTO_FAIL_MIC) 695 rxdesc->flags |= RX_FLAG_MMIC_ERROR; 696 } 697 698 if (rt2x00_get_field32(word, RXD_W3_MY_BSS)) 699 rxdesc->dev_flags |= RXDONE_MY_BSS; 700 701 if (rt2x00_get_field32(word, RXD_W3_L2PAD)) 702 rxdesc->dev_flags |= RXDONE_L2PAD; 703 704 /* 705 * Process the RXWI structure that is at the start of the buffer. 706 */ 707 rt2800_process_rxwi(entry, rxdesc); 708} 709 710/* 711 * Interrupt functions. 712 */ 713static void rt2800pci_wakeup(struct rt2x00_dev *rt2x00dev) 714{ 715 struct ieee80211_conf conf = { .flags = 0 }; 716 struct rt2x00lib_conf libconf = { .conf = &conf }; 717 718 rt2800_config(rt2x00dev, &libconf, IEEE80211_CONF_CHANGE_PS); 719} 720 721static bool rt2800pci_txdone(struct rt2x00_dev *rt2x00dev) 722{ 723 struct data_queue *queue; 724 struct queue_entry *entry; 725 u32 status; 726 u8 qid; 727 int max_tx_done = 16; 728 729 while (kfifo_get(&rt2x00dev->txstatus_fifo, &status)) { 730 qid = rt2x00_get_field32(status, TX_STA_FIFO_PID_QUEUE); 731 if (unlikely(qid >= QID_RX)) { 732 /* 733 * Unknown queue, this shouldn't happen. Just drop 734 * this tx status. 735 */ 736 WARNING(rt2x00dev, "Got TX status report with " 737 "unexpected pid %u, dropping\n", qid); 738 break; 739 } 740 741 queue = rt2x00queue_get_tx_queue(rt2x00dev, qid); 742 if (unlikely(queue == NULL)) { 743 /* 744 * The queue is NULL, this shouldn't happen. Stop 745 * processing here and drop the tx status 746 */ 747 WARNING(rt2x00dev, "Got TX status for an unavailable " 748 "queue %u, dropping\n", qid); 749 break; 750 } 751 752 if (unlikely(rt2x00queue_empty(queue))) { 753 /* 754 * The queue is empty. Stop processing here 755 * and drop the tx status. 756 */ 757 WARNING(rt2x00dev, "Got TX status for an empty " 758 "queue %u, dropping\n", qid); 759 break; 760 } 761 762 entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE); 763 rt2800_txdone_entry(entry, status, rt2800pci_get_txwi(entry)); 764 765 if (--max_tx_done == 0) 766 break; 767 } 768 769 return !max_tx_done; 770} 771 772static inline void rt2800pci_enable_interrupt(struct rt2x00_dev *rt2x00dev, 773 struct rt2x00_field32 irq_field) 774{ 775 u32 reg; 776 777 /* 778 * Enable a single interrupt. The interrupt mask register 779 * access needs locking. 780 */ 781 spin_lock_irq(&rt2x00dev->irqmask_lock); 782 rt2x00pci_register_read(rt2x00dev, INT_MASK_CSR, &reg); 783 rt2x00_set_field32(&reg, irq_field, 1); 784 rt2x00pci_register_write(rt2x00dev, INT_MASK_CSR, reg); 785 spin_unlock_irq(&rt2x00dev->irqmask_lock); 786} 787 788static void rt2800pci_txstatus_tasklet(unsigned long data) 789{ 790 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; 791 if (rt2800pci_txdone(rt2x00dev)) 792 tasklet_schedule(&rt2x00dev->txstatus_tasklet); 793 794 /* 795 * No need to enable the tx status interrupt here as we always 796 * leave it enabled to minimize the possibility of a tx status 797 * register overflow. See comment in interrupt handler. 798 */ 799} 800 801static void rt2800pci_pretbtt_tasklet(unsigned long data) 802{ 803 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; 804 rt2x00lib_pretbtt(rt2x00dev); 805 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) 806 rt2800pci_enable_interrupt(rt2x00dev, INT_MASK_CSR_PRE_TBTT); 807} 808 809static void rt2800pci_tbtt_tasklet(unsigned long data) 810{ 811 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; 812 struct rt2800_drv_data *drv_data = rt2x00dev->drv_data; 813 u32 reg; 814 815 rt2x00lib_beacondone(rt2x00dev); 816 817 if (rt2x00dev->intf_ap_count) { 818 /* 819 * The rt2800pci hardware tbtt timer is off by 1us per tbtt 820 * causing beacon skew and as a result causing problems with 821 * some powersaving clients over time. Shorten the beacon 822 * interval every 64 beacons by 64us to mitigate this effect. 823 */ 824 if (drv_data->tbtt_tick == (BCN_TBTT_OFFSET - 2)) { 825 rt2x00pci_register_read(rt2x00dev, BCN_TIME_CFG, &reg); 826 rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_INTERVAL, 827 (rt2x00dev->beacon_int * 16) - 1); 828 rt2x00pci_register_write(rt2x00dev, BCN_TIME_CFG, reg); 829 } else if (drv_data->tbtt_tick == (BCN_TBTT_OFFSET - 1)) { 830 rt2x00pci_register_read(rt2x00dev, BCN_TIME_CFG, &reg); 831 rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_INTERVAL, 832 (rt2x00dev->beacon_int * 16)); 833 rt2x00pci_register_write(rt2x00dev, BCN_TIME_CFG, reg); 834 } 835 drv_data->tbtt_tick++; 836 drv_data->tbtt_tick %= BCN_TBTT_OFFSET; 837 } 838 839 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) 840 rt2800pci_enable_interrupt(rt2x00dev, INT_MASK_CSR_TBTT); 841} 842 843static void rt2800pci_rxdone_tasklet(unsigned long data) 844{ 845 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; 846 if (rt2x00pci_rxdone(rt2x00dev)) 847 tasklet_schedule(&rt2x00dev->rxdone_tasklet); 848 else if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) 849 rt2800pci_enable_interrupt(rt2x00dev, INT_MASK_CSR_RX_DONE); 850} 851 852static void rt2800pci_autowake_tasklet(unsigned long data) 853{ 854 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; 855 rt2800pci_wakeup(rt2x00dev); 856 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) 857 rt2800pci_enable_interrupt(rt2x00dev, INT_MASK_CSR_AUTO_WAKEUP); 858} 859 860static void rt2800pci_txstatus_interrupt(struct rt2x00_dev *rt2x00dev) 861{ 862 u32 status; 863 int i; 864 865 /* 866 * The TX_FIFO_STATUS interrupt needs special care. We should 867 * read TX_STA_FIFO but we should do it immediately as otherwise 868 * the register can overflow and we would lose status reports. 869 * 870 * Hence, read the TX_STA_FIFO register and copy all tx status 871 * reports into a kernel FIFO which is handled in the txstatus 872 * tasklet. We use a tasklet to process the tx status reports 873 * because we can schedule the tasklet multiple times (when the 874 * interrupt fires again during tx status processing). 875 * 876 * Furthermore we don't disable the TX_FIFO_STATUS 877 * interrupt here but leave it enabled so that the TX_STA_FIFO 878 * can also be read while the tx status tasklet gets executed. 879 * 880 * Since we have only one producer and one consumer we don't 881 * need to lock the kfifo. 882 */ 883 for (i = 0; i < rt2x00dev->ops->tx->entry_num; i++) { 884 rt2x00pci_register_read(rt2x00dev, TX_STA_FIFO, &status); 885 886 if (!rt2x00_get_field32(status, TX_STA_FIFO_VALID)) 887 break; 888 889 if (!kfifo_put(&rt2x00dev->txstatus_fifo, &status)) { 890 WARNING(rt2x00dev, "TX status FIFO overrun," 891 "drop tx status report.\n"); 892 break; 893 } 894 } 895 896 /* Schedule the tasklet for processing the tx status. */ 897 tasklet_schedule(&rt2x00dev->txstatus_tasklet); 898} 899 900static irqreturn_t rt2800pci_interrupt(int irq, void *dev_instance) 901{ 902 struct rt2x00_dev *rt2x00dev = dev_instance; 903 u32 reg, mask; 904 905 /* Read status and ACK all interrupts */ 906 rt2x00pci_register_read(rt2x00dev, INT_SOURCE_CSR, &reg); 907 rt2x00pci_register_write(rt2x00dev, INT_SOURCE_CSR, reg); 908 909 if (!reg) 910 return IRQ_NONE; 911 912 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) 913 return IRQ_HANDLED; 914 915 /* 916 * Since INT_MASK_CSR and INT_SOURCE_CSR use the same bits 917 * for interrupts and interrupt masks we can just use the value of 918 * INT_SOURCE_CSR to create the interrupt mask. 919 */ 920 mask = ~reg; 921 922 if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TX_FIFO_STATUS)) { 923 rt2800pci_txstatus_interrupt(rt2x00dev); 924 /* 925 * Never disable the TX_FIFO_STATUS interrupt. 926 */ 927 rt2x00_set_field32(&mask, INT_MASK_CSR_TX_FIFO_STATUS, 1); 928 } 929 930 if (rt2x00_get_field32(reg, INT_SOURCE_CSR_PRE_TBTT)) 931 tasklet_hi_schedule(&rt2x00dev->pretbtt_tasklet); 932 933 if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TBTT)) 934 tasklet_hi_schedule(&rt2x00dev->tbtt_tasklet); 935 936 if (rt2x00_get_field32(reg, INT_SOURCE_CSR_RX_DONE)) 937 tasklet_schedule(&rt2x00dev->rxdone_tasklet); 938 939 if (rt2x00_get_field32(reg, INT_SOURCE_CSR_AUTO_WAKEUP)) 940 tasklet_schedule(&rt2x00dev->autowake_tasklet); 941 942 /* 943 * Disable all interrupts for which a tasklet was scheduled right now, 944 * the tasklet will reenable the appropriate interrupts. 945 */ 946 spin_lock(&rt2x00dev->irqmask_lock); 947 rt2x00pci_register_read(rt2x00dev, INT_MASK_CSR, &reg); 948 reg &= mask; 949 rt2x00pci_register_write(rt2x00dev, INT_MASK_CSR, reg); 950 spin_unlock(&rt2x00dev->irqmask_lock); 951 952 return IRQ_HANDLED; 953} 954 955/* 956 * Device probe functions. 957 */ 958static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev) 959{ 960 /* 961 * Read EEPROM into buffer 962 */ 963 if (rt2x00_is_soc(rt2x00dev)) 964 rt2800pci_read_eeprom_soc(rt2x00dev); 965 else if (rt2800pci_efuse_detect(rt2x00dev)) 966 rt2800pci_read_eeprom_efuse(rt2x00dev); 967 else 968 rt2800pci_read_eeprom_pci(rt2x00dev); 969 970 return rt2800_validate_eeprom(rt2x00dev); 971} 972 973static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev) 974{ 975 int retval; 976 977 /* 978 * Allocate eeprom data. 979 */ 980 retval = rt2800pci_validate_eeprom(rt2x00dev); 981 if (retval) 982 return retval; 983 984 retval = rt2800_init_eeprom(rt2x00dev); 985 if (retval) 986 return retval; 987 988 /* 989 * Initialize hw specifications. 990 */ 991 retval = rt2800_probe_hw_mode(rt2x00dev); 992 if (retval) 993 return retval; 994 995 /* 996 * This device has multiple filters for control frames 997 * and has a separate filter for PS Poll frames. 998 */ 999 __set_bit(CAPABILITY_CONTROL_FILTERS, &rt2x00dev->cap_flags); 1000 __set_bit(CAPABILITY_CONTROL_FILTER_PSPOLL, &rt2x00dev->cap_flags); 1001 1002 /* 1003 * This device has a pre tbtt interrupt and thus fetches 1004 * a new beacon directly prior to transmission. 1005 */ 1006 __set_bit(CAPABILITY_PRE_TBTT_INTERRUPT, &rt2x00dev->cap_flags); 1007 1008 /* 1009 * This device requires firmware. 1010 */ 1011 if (!rt2x00_is_soc(rt2x00dev)) 1012 __set_bit(REQUIRE_FIRMWARE, &rt2x00dev->cap_flags); 1013 __set_bit(REQUIRE_DMA, &rt2x00dev->cap_flags); 1014 __set_bit(REQUIRE_L2PAD, &rt2x00dev->cap_flags); 1015 __set_bit(REQUIRE_TXSTATUS_FIFO, &rt2x00dev->cap_flags); 1016 __set_bit(REQUIRE_TASKLET_CONTEXT, &rt2x00dev->cap_flags); 1017 if (!modparam_nohwcrypt) 1018 __set_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags); 1019 __set_bit(CAPABILITY_LINK_TUNING, &rt2x00dev->cap_flags); 1020 __set_bit(REQUIRE_HT_TX_DESC, &rt2x00dev->cap_flags); 1021 1022 /* 1023 * Set the rssi offset. 1024 */ 1025 rt2x00dev->rssi_offset = DEFAULT_RSSI_OFFSET; 1026 1027 return 0; 1028} 1029 1030static const struct ieee80211_ops rt2800pci_mac80211_ops = { 1031 .tx = rt2x00mac_tx, 1032 .start = rt2x00mac_start, 1033 .stop = rt2x00mac_stop, 1034 .add_interface = rt2x00mac_add_interface, 1035 .remove_interface = rt2x00mac_remove_interface, 1036 .config = rt2x00mac_config, 1037 .configure_filter = rt2x00mac_configure_filter, 1038 .set_key = rt2x00mac_set_key, 1039 .sw_scan_start = rt2x00mac_sw_scan_start, 1040 .sw_scan_complete = rt2x00mac_sw_scan_complete, 1041 .get_stats = rt2x00mac_get_stats, 1042 .get_tkip_seq = rt2800_get_tkip_seq, 1043 .set_rts_threshold = rt2800_set_rts_threshold, 1044 .sta_add = rt2x00mac_sta_add, 1045 .sta_remove = rt2x00mac_sta_remove, 1046 .bss_info_changed = rt2x00mac_bss_info_changed, 1047 .conf_tx = rt2800_conf_tx, 1048 .get_tsf = rt2800_get_tsf, 1049 .rfkill_poll = rt2x00mac_rfkill_poll, 1050 .ampdu_action = rt2800_ampdu_action, 1051 .flush = rt2x00mac_flush, 1052 .get_survey = rt2800_get_survey, 1053 .get_ringparam = rt2x00mac_get_ringparam, 1054 .tx_frames_pending = rt2x00mac_tx_frames_pending, 1055}; 1056 1057static const struct rt2800_ops rt2800pci_rt2800_ops = { 1058 .register_read = rt2x00pci_register_read, 1059 .register_read_lock = rt2x00pci_register_read, /* same for PCI */ 1060 .register_write = rt2x00pci_register_write, 1061 .register_write_lock = rt2x00pci_register_write, /* same for PCI */ 1062 .register_multiread = rt2x00pci_register_multiread, 1063 .register_multiwrite = rt2x00pci_register_multiwrite, 1064 .regbusy_read = rt2x00pci_regbusy_read, 1065 .drv_write_firmware = rt2800pci_write_firmware, 1066 .drv_init_registers = rt2800pci_init_registers, 1067 .drv_get_txwi = rt2800pci_get_txwi, 1068}; 1069 1070static const struct rt2x00lib_ops rt2800pci_rt2x00_ops = { 1071 .irq_handler = rt2800pci_interrupt, 1072 .txstatus_tasklet = rt2800pci_txstatus_tasklet, 1073 .pretbtt_tasklet = rt2800pci_pretbtt_tasklet, 1074 .tbtt_tasklet = rt2800pci_tbtt_tasklet, 1075 .rxdone_tasklet = rt2800pci_rxdone_tasklet, 1076 .autowake_tasklet = rt2800pci_autowake_tasklet, 1077 .probe_hw = rt2800pci_probe_hw, 1078 .get_firmware_name = rt2800pci_get_firmware_name, 1079 .check_firmware = rt2800_check_firmware, 1080 .load_firmware = rt2800_load_firmware, 1081 .initialize = rt2x00pci_initialize, 1082 .uninitialize = rt2x00pci_uninitialize, 1083 .get_entry_state = rt2800pci_get_entry_state, 1084 .clear_entry = rt2800pci_clear_entry, 1085 .set_device_state = rt2800pci_set_device_state, 1086 .rfkill_poll = rt2800_rfkill_poll, 1087 .link_stats = rt2800_link_stats, 1088 .reset_tuner = rt2800_reset_tuner, 1089 .link_tuner = rt2800_link_tuner, 1090 .gain_calibration = rt2800_gain_calibration, 1091 .vco_calibration = rt2800_vco_calibration, 1092 .start_queue = rt2800pci_start_queue, 1093 .kick_queue = rt2800pci_kick_queue, 1094 .stop_queue = rt2800pci_stop_queue, 1095 .flush_queue = rt2x00pci_flush_queue, 1096 .write_tx_desc = rt2800pci_write_tx_desc, 1097 .write_tx_data = rt2800_write_tx_data, 1098 .write_beacon = rt2800_write_beacon, 1099 .clear_beacon = rt2800_clear_beacon, 1100 .fill_rxdone = rt2800pci_fill_rxdone, 1101 .config_shared_key = rt2800_config_shared_key, 1102 .config_pairwise_key = rt2800_config_pairwise_key, 1103 .config_filter = rt2800_config_filter, 1104 .config_intf = rt2800_config_intf, 1105 .config_erp = rt2800_config_erp, 1106 .config_ant = rt2800_config_ant, 1107 .config = rt2800_config, 1108 .sta_add = rt2800_sta_add, 1109 .sta_remove = rt2800_sta_remove, 1110}; 1111 1112static const struct data_queue_desc rt2800pci_queue_rx = { 1113 .entry_num = 128, 1114 .data_size = AGGREGATION_SIZE, 1115 .desc_size = RXD_DESC_SIZE, 1116 .priv_size = sizeof(struct queue_entry_priv_pci), 1117}; 1118 1119static const struct data_queue_desc rt2800pci_queue_tx = { 1120 .entry_num = 64, 1121 .data_size = AGGREGATION_SIZE, 1122 .desc_size = TXD_DESC_SIZE, 1123 .priv_size = sizeof(struct queue_entry_priv_pci), 1124}; 1125 1126static const struct data_queue_desc rt2800pci_queue_bcn = { 1127 .entry_num = 8, 1128 .data_size = 0, /* No DMA required for beacons */ 1129 .desc_size = TXWI_DESC_SIZE, 1130 .priv_size = sizeof(struct queue_entry_priv_pci), 1131}; 1132 1133static const struct rt2x00_ops rt2800pci_ops = { 1134 .name = KBUILD_MODNAME, 1135 .drv_data_size = sizeof(struct rt2800_drv_data), 1136 .max_sta_intf = 1, 1137 .max_ap_intf = 8, 1138 .eeprom_size = EEPROM_SIZE, 1139 .rf_size = RF_SIZE, 1140 .tx_queues = NUM_TX_QUEUES, 1141 .extra_tx_headroom = TXWI_DESC_SIZE, 1142 .rx = &rt2800pci_queue_rx, 1143 .tx = &rt2800pci_queue_tx, 1144 .bcn = &rt2800pci_queue_bcn, 1145 .lib = &rt2800pci_rt2x00_ops, 1146 .drv = &rt2800pci_rt2800_ops, 1147 .hw = &rt2800pci_mac80211_ops, 1148#ifdef CONFIG_RT2X00_LIB_DEBUGFS 1149 .debugfs = &rt2800_rt2x00debug, 1150#endif /* CONFIG_RT2X00_LIB_DEBUGFS */ 1151}; 1152 1153/* 1154 * RT2800pci module information. 1155 */ 1156#ifdef CONFIG_PCI 1157static DEFINE_PCI_DEVICE_TABLE(rt2800pci_device_table) = { 1158 { PCI_DEVICE(0x1814, 0x0601) }, 1159 { PCI_DEVICE(0x1814, 0x0681) }, 1160 { PCI_DEVICE(0x1814, 0x0701) }, 1161 { PCI_DEVICE(0x1814, 0x0781) }, 1162 { PCI_DEVICE(0x1814, 0x3090) }, 1163 { PCI_DEVICE(0x1814, 0x3091) }, 1164 { PCI_DEVICE(0x1814, 0x3092) }, 1165 { PCI_DEVICE(0x1432, 0x7708) }, 1166 { PCI_DEVICE(0x1432, 0x7727) }, 1167 { PCI_DEVICE(0x1432, 0x7728) }, 1168 { PCI_DEVICE(0x1432, 0x7738) }, 1169 { PCI_DEVICE(0x1432, 0x7748) }, 1170 { PCI_DEVICE(0x1432, 0x7758) }, 1171 { PCI_DEVICE(0x1432, 0x7768) }, 1172 { PCI_DEVICE(0x1462, 0x891a) }, 1173 { PCI_DEVICE(0x1a3b, 0x1059) }, 1174#ifdef CONFIG_RT2800PCI_RT33XX 1175 { PCI_DEVICE(0x1814, 0x3390) }, 1176#endif 1177#ifdef CONFIG_RT2800PCI_RT35XX 1178 { PCI_DEVICE(0x1432, 0x7711) }, 1179 { PCI_DEVICE(0x1432, 0x7722) }, 1180 { PCI_DEVICE(0x1814, 0x3060) }, 1181 { PCI_DEVICE(0x1814, 0x3062) }, 1182 { PCI_DEVICE(0x1814, 0x3562) }, 1183 { PCI_DEVICE(0x1814, 0x3592) }, 1184 { PCI_DEVICE(0x1814, 0x3593) }, 1185#endif 1186#ifdef CONFIG_RT2800PCI_RT53XX 1187 { PCI_DEVICE(0x1814, 0x5390) }, 1188 { PCI_DEVICE(0x1814, 0x539a) }, 1189 { PCI_DEVICE(0x1814, 0x539f) }, 1190#endif 1191 { 0, } 1192}; 1193#endif /* CONFIG_PCI */ 1194 1195MODULE_AUTHOR(DRV_PROJECT); 1196MODULE_VERSION(DRV_VERSION); 1197MODULE_DESCRIPTION("Ralink RT2800 PCI & PCMCIA Wireless LAN driver."); 1198MODULE_SUPPORTED_DEVICE("Ralink RT2860 PCI & PCMCIA chipset based cards"); 1199#ifdef CONFIG_PCI 1200MODULE_FIRMWARE(FIRMWARE_RT2860); 1201MODULE_DEVICE_TABLE(pci, rt2800pci_device_table); 1202#endif /* CONFIG_PCI */ 1203MODULE_LICENSE("GPL"); 1204 1205#if defined(CONFIG_RALINK_RT288X) || defined(CONFIG_RALINK_RT305X) 1206static int rt2800soc_probe(struct platform_device *pdev) 1207{ 1208 return rt2x00soc_probe(pdev, &rt2800pci_ops); 1209} 1210 1211static struct platform_driver rt2800soc_driver = { 1212 .driver = { 1213 .name = "rt2800_wmac", 1214 .owner = THIS_MODULE, 1215 .mod_name = KBUILD_MODNAME, 1216 }, 1217 .probe = rt2800soc_probe, 1218 .remove = __devexit_p(rt2x00soc_remove), 1219 .suspend = rt2x00soc_suspend, 1220 .resume = rt2x00soc_resume, 1221}; 1222#endif /* CONFIG_RALINK_RT288X || CONFIG_RALINK_RT305X */ 1223 1224#ifdef CONFIG_PCI 1225static int rt2800pci_probe(struct pci_dev *pci_dev, 1226 const struct pci_device_id *id) 1227{ 1228 return rt2x00pci_probe(pci_dev, &rt2800pci_ops); 1229} 1230 1231static struct pci_driver rt2800pci_driver = { 1232 .name = KBUILD_MODNAME, 1233 .id_table = rt2800pci_device_table, 1234 .probe = rt2800pci_probe, 1235 .remove = __devexit_p(rt2x00pci_remove), 1236 .suspend = rt2x00pci_suspend, 1237 .resume = rt2x00pci_resume, 1238}; 1239#endif /* CONFIG_PCI */ 1240 1241static int __init rt2800pci_init(void) 1242{ 1243 int ret = 0; 1244 1245#if defined(CONFIG_RALINK_RT288X) || defined(CONFIG_RALINK_RT305X) 1246 ret = platform_driver_register(&rt2800soc_driver); 1247 if (ret) 1248 return ret; 1249#endif 1250#ifdef CONFIG_PCI 1251 ret = pci_register_driver(&rt2800pci_driver); 1252 if (ret) { 1253#if defined(CONFIG_RALINK_RT288X) || defined(CONFIG_RALINK_RT305X) 1254 platform_driver_unregister(&rt2800soc_driver); 1255#endif 1256 return ret; 1257 } 1258#endif 1259 1260 return ret; 1261} 1262 1263static void __exit rt2800pci_exit(void) 1264{ 1265#ifdef CONFIG_PCI 1266 pci_unregister_driver(&rt2800pci_driver); 1267#endif 1268#if defined(CONFIG_RALINK_RT288X) || defined(CONFIG_RALINK_RT305X) 1269 platform_driver_unregister(&rt2800soc_driver); 1270#endif 1271} 1272 1273module_init(rt2800pci_init); 1274module_exit(rt2800pci_exit);