1 /* 2 * This file is part of wl1271 3 * 4 * Copyright (C) 1998-2009 Texas Instruments. All rights reserved. 5 * Copyright (C) 2008-2009 Nokia Corporation 6 * 7 * Contact: Luciano Coelho <luciano.coelho@nokia.com> 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License 11 * version 2 as published by the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 21 * 02110-1301 USA 22 * 23 */ 24 25 #ifndef __WL12XX_H__ 26 #define __WL12XX_H__ 27 28 #include <linux/mutex.h> 29 #include <linux/completion.h> 30 #include <linux/spinlock.h> 31 #include <linux/list.h> 32 #include <linux/bitops.h> 33 #include <net/mac80211.h> 34 35 #include "conf.h" 36 #include "ini.h" 37 38 #define DRIVER_NAME "wl1271" 39 #define DRIVER_PREFIX DRIVER_NAME ": " 40 41 /* 42 * FW versions support BA 11n 43 * versions marks x.x.x.50-60.x 44 */ 45 #define WL12XX_BA_SUPPORT_FW_COST_VER2_START 50 46 #define WL12XX_BA_SUPPORT_FW_COST_VER2_END 60 47 48 enum { 49 DEBUG_NONE = 0, 50 DEBUG_IRQ = BIT(0), 51 DEBUG_SPI = BIT(1), 52 DEBUG_BOOT = BIT(2), 53 DEBUG_MAILBOX = BIT(3), 54 DEBUG_TESTMODE = BIT(4), 55 DEBUG_EVENT = BIT(5), 56 DEBUG_TX = BIT(6), 57 DEBUG_RX = BIT(7), 58 DEBUG_SCAN = BIT(8), 59 DEBUG_CRYPT = BIT(9), 60 DEBUG_PSM = BIT(10), 61 DEBUG_MAC80211 = BIT(11), 62 DEBUG_CMD = BIT(12), 63 DEBUG_ACX = BIT(13), 64 DEBUG_SDIO = BIT(14), 65 DEBUG_FILTERS = BIT(15), 66 DEBUG_ADHOC = BIT(16), 67 DEBUG_AP = BIT(17), 68 DEBUG_MASTER = (DEBUG_ADHOC | DEBUG_AP), 69 DEBUG_ALL = ~0, 70 }; 71 72 extern u32 wl12xx_debug_level; 73 74 #define DEBUG_DUMP_LIMIT 1024 75 76 #define wl1271_error(fmt, arg...) \ 77 pr_err(DRIVER_PREFIX "ERROR " fmt "\n", ##arg) 78 79 #define wl1271_warning(fmt, arg...) \ 80 pr_warning(DRIVER_PREFIX "WARNING " fmt "\n", ##arg) 81 82 #define wl1271_notice(fmt, arg...) \ 83 pr_info(DRIVER_PREFIX fmt "\n", ##arg) 84 85 #define wl1271_info(fmt, arg...) \ 86 pr_info(DRIVER_PREFIX fmt "\n", ##arg) 87 88 #define wl1271_debug(level, fmt, arg...) \ 89 do { \ 90 if (level & wl12xx_debug_level) \ 91 pr_debug(DRIVER_PREFIX fmt "\n", ##arg); \ 92 } while (0) 93 94 /* TODO: use pr_debug_hex_dump when it will be available */ 95 #define wl1271_dump(level, prefix, buf, len) \ 96 do { \ 97 if (level & wl12xx_debug_level) \ 98 print_hex_dump(KERN_DEBUG, DRIVER_PREFIX prefix, \ 99 DUMP_PREFIX_OFFSET, 16, 1, \ 100 buf, \ 101 min_t(size_t, len, DEBUG_DUMP_LIMIT), \ 102 0); \ 103 } while (0) 104 105 #define wl1271_dump_ascii(level, prefix, buf, len) \ 106 do { \ 107 if (level & wl12xx_debug_level) \ 108 print_hex_dump(KERN_DEBUG, DRIVER_PREFIX prefix, \ 109 DUMP_PREFIX_OFFSET, 16, 1, \ 110 buf, \ 111 min_t(size_t, len, DEBUG_DUMP_LIMIT), \ 112 true); \ 113 } while (0) 114 115 #define WL1271_DEFAULT_STA_RX_CONFIG (CFG_UNI_FILTER_EN | \ 116 CFG_BSSID_FILTER_EN | \ 117 CFG_MC_FILTER_EN) 118 119 #define WL1271_DEFAULT_STA_RX_FILTER (CFG_RX_RCTS_ACK | CFG_RX_PRSP_EN | \ 120 CFG_RX_MGMT_EN | CFG_RX_DATA_EN | \ 121 CFG_RX_CTL_EN | CFG_RX_BCN_EN | \ 122 CFG_RX_AUTH_EN | CFG_RX_ASSOC_EN) 123 124 #define WL1271_DEFAULT_AP_RX_CONFIG 0 125 126 #define WL1271_DEFAULT_AP_RX_FILTER (CFG_RX_RCTS_ACK | CFG_RX_PREQ_EN | \ 127 CFG_RX_MGMT_EN | CFG_RX_DATA_EN | \ 128 CFG_RX_CTL_EN | CFG_RX_AUTH_EN | \ 129 CFG_RX_ASSOC_EN) 130 131 132 133 #define WL1271_FW_NAME "ti-connectivity/wl1271-fw-2.bin" 134 #define WL1271_AP_FW_NAME "ti-connectivity/wl1271-fw-ap.bin" 135 136 #define WL1271_NVS_NAME "ti-connectivity/wl1271-nvs.bin" 137 138 #define WL1271_TX_SECURITY_LO16(s) ((u16)((s) & 0xffff)) 139 #define WL1271_TX_SECURITY_HI32(s) ((u32)(((s) >> 16) & 0xffffffff)) 140 141 #define WL1271_CIPHER_SUITE_GEM 0x00147201 142 143 #define WL1271_BUSY_WORD_CNT 1 144 #define WL1271_BUSY_WORD_LEN (WL1271_BUSY_WORD_CNT * sizeof(u32)) 145 146 #define WL1271_ELP_HW_STATE_ASLEEP 0 147 #define WL1271_ELP_HW_STATE_IRQ 1 148 149 #define WL1271_DEFAULT_BEACON_INT 100 150 #define WL1271_DEFAULT_DTIM_PERIOD 1 151 152 #define WL1271_AP_GLOBAL_HLID 0 153 #define WL1271_AP_BROADCAST_HLID 1 154 #define WL1271_AP_STA_HLID_START 2 155 156 /* 157 * When in AP-mode, we allow (at least) this number of mem-blocks 158 * to be transmitted to FW for a STA in PS-mode. Only when packets are 159 * present in the FW buffers it will wake the sleeping STA. We want to put 160 * enough packets for the driver to transmit all of its buffered data before 161 * the STA goes to sleep again. But we don't want to take too much mem-blocks 162 * as it might hurt the throughput of active STAs. 163 * The number of blocks (18) is enough for 2 large packets. 164 */ 165 #define WL1271_PS_STA_MAX_BLOCKS (2 * 9) 166 167 #define WL1271_AP_BSS_INDEX 0 168 #define WL1271_AP_DEF_INACTIV_SEC 300 169 #define WL1271_AP_DEF_BEACON_EXP 20 170 171 #define ACX_TX_DESCRIPTORS 32 172 173 #define WL1271_AGGR_BUFFER_SIZE (4 * PAGE_SIZE) 174 175 enum wl1271_state { 176 WL1271_STATE_OFF, 177 WL1271_STATE_ON, 178 WL1271_STATE_PLT, 179 }; 180 181 enum wl1271_partition_type { 182 PART_DOWN, 183 PART_WORK, 184 PART_DRPW, 185 186 PART_TABLE_LEN 187 }; 188 189 struct wl1271_partition { 190 u32 size; 191 u32 start; 192 }; 193 194 struct wl1271_partition_set { 195 struct wl1271_partition mem; 196 struct wl1271_partition reg; 197 struct wl1271_partition mem2; 198 struct wl1271_partition mem3; 199 }; 200 201 struct wl1271; 202 203 #define WL12XX_NUM_FW_VER 5 204 205 /* FIXME: I'm not sure about this structure name */ 206 struct wl1271_chip { 207 u32 id; 208 char fw_ver_str[ETHTOOL_BUSINFO_LEN]; 209 unsigned int fw_ver[WL12XX_NUM_FW_VER]; 210 }; 211 212 struct wl1271_stats { 213 struct acx_statistics *fw_stats; 214 unsigned long fw_stats_update; 215 216 unsigned int retry_count; 217 unsigned int excessive_retries; 218 }; 219 220 #define NUM_TX_QUEUES 4 221 #define NUM_RX_PKT_DESC 8 222 223 #define AP_MAX_STATIONS 5 224 225 /* Broadcast and Global links + links to stations */ 226 #define AP_MAX_LINKS (AP_MAX_STATIONS + 2) 227 228 /* FW status registers common for AP/STA */ 229 struct wl1271_fw_common_status { 230 __le32 intr; 231 u8 fw_rx_counter; 232 u8 drv_rx_counter; 233 u8 reserved; 234 u8 tx_results_counter; 235 __le32 rx_pkt_descs[NUM_RX_PKT_DESC]; 236 __le32 tx_released_blks[NUM_TX_QUEUES]; 237 __le32 fw_localtime; 238 } __packed; 239 240 /* FW status registers for AP */ 241 struct wl1271_fw_ap_status { 242 struct wl1271_fw_common_status common; 243 244 /* Next fields valid only in AP FW */ 245 246 /* 247 * A bitmap (where each bit represents a single HLID) 248 * to indicate if the station is in PS mode. 249 */ 250 __le32 link_ps_bitmap; 251 252 /* Number of freed MBs per HLID */ 253 u8 tx_lnk_free_blks[AP_MAX_LINKS]; 254 u8 padding_1[1]; 255 } __packed; 256 257 /* FW status registers for STA */ 258 struct wl1271_fw_sta_status { 259 struct wl1271_fw_common_status common; 260 261 u8 tx_total; 262 u8 reserved1; 263 __le16 reserved2; 264 } __packed; 265 266 struct wl1271_fw_full_status { 267 union { 268 struct wl1271_fw_common_status common; 269 struct wl1271_fw_sta_status sta; 270 struct wl1271_fw_ap_status ap; 271 }; 272 } __packed; 273 274 275 struct wl1271_rx_mem_pool_addr { 276 u32 addr; 277 u32 addr_extra; 278 }; 279 280 struct wl1271_scan { 281 struct cfg80211_scan_request *req; 282 bool *scanned_ch; 283 bool failed; 284 u8 state; 285 u8 ssid[IW_ESSID_MAX_SIZE+1]; 286 size_t ssid_len; 287 }; 288 289 struct wl1271_if_operations { 290 void (*read)(struct wl1271 *wl, int addr, void *buf, size_t len, 291 bool fixed); 292 void (*write)(struct wl1271 *wl, int addr, void *buf, size_t len, 293 bool fixed); 294 void (*reset)(struct wl1271 *wl); 295 void (*init)(struct wl1271 *wl); 296 int (*power)(struct wl1271 *wl, bool enable); 297 struct device* (*dev)(struct wl1271 *wl); 298 void (*enable_irq)(struct wl1271 *wl); 299 void (*disable_irq)(struct wl1271 *wl); 300 }; 301 302 #define MAX_NUM_KEYS 14 303 #define MAX_KEY_SIZE 32 304 305 struct wl1271_ap_key { 306 u8 id; 307 u8 key_type; 308 u8 key_size; 309 u8 key[MAX_KEY_SIZE]; 310 u8 hlid; 311 u32 tx_seq_32; 312 u16 tx_seq_16; 313 }; 314 315 enum wl12xx_flags { 316 WL1271_FLAG_STA_ASSOCIATED, 317 WL1271_FLAG_JOINED, 318 WL1271_FLAG_GPIO_POWER, 319 WL1271_FLAG_TX_QUEUE_STOPPED, 320 WL1271_FLAG_TX_PENDING, 321 WL1271_FLAG_IN_ELP, 322 WL1271_FLAG_PSM, 323 WL1271_FLAG_PSM_REQUESTED, 324 WL1271_FLAG_IRQ_RUNNING, 325 WL1271_FLAG_IDLE, 326 WL1271_FLAG_IDLE_REQUESTED, 327 WL1271_FLAG_PSPOLL_FAILURE, 328 WL1271_FLAG_STA_STATE_SENT, 329 WL1271_FLAG_FW_TX_BUSY, 330 WL1271_FLAG_AP_STARTED 331 }; 332 333 struct wl1271_link { 334 /* AP-mode - TX queue per AC in link */ 335 struct sk_buff_head tx_queue[NUM_TX_QUEUES]; 336 337 /* accounting for allocated / available TX blocks in FW */ 338 u8 allocated_blks; 339 u8 prev_freed_blks; 340 341 u8 addr[ETH_ALEN]; 342 }; 343 344 struct wl1271 { 345 struct platform_device *plat_dev; 346 struct ieee80211_hw *hw; 347 bool mac80211_registered; 348 349 void *if_priv; 350 351 struct wl1271_if_operations *if_ops; 352 353 void (*set_power)(bool enable); 354 int irq; 355 int ref_clock; 356 357 spinlock_t wl_lock; 358 359 enum wl1271_state state; 360 struct mutex mutex; 361 362 unsigned long flags; 363 364 struct wl1271_partition_set part; 365 366 struct wl1271_chip chip; 367 368 int cmd_box_addr; 369 int event_box_addr; 370 371 u8 *fw; 372 size_t fw_len; 373 u8 fw_bss_type; 374 struct wl1271_nvs_file *nvs; 375 size_t nvs_len; 376 377 s8 hw_pg_ver; 378 379 u8 bssid[ETH_ALEN]; 380 u8 mac_addr[ETH_ALEN]; 381 u8 bss_type; 382 u8 set_bss_type; 383 u8 ssid[IW_ESSID_MAX_SIZE + 1]; 384 u8 ssid_len; 385 int channel; 386 387 struct wl1271_acx_mem_map *target_mem_map; 388 389 /* Accounting for allocated / available TX blocks on HW */ 390 u32 tx_blocks_freed[NUM_TX_QUEUES]; 391 u32 tx_blocks_available; 392 u32 tx_results_count; 393 394 /* Transmitted TX packets counter for chipset interface */ 395 u32 tx_packets_count; 396 397 /* Time-offset between host and chipset clocks */ 398 s64 time_offset; 399 400 /* Session counter for the chipset */ 401 int session_counter; 402 403 /* Frames scheduled for transmission, not handled yet */ 404 struct sk_buff_head tx_queue[NUM_TX_QUEUES]; 405 int tx_queue_count; 406 407 /* Frames received, not handled yet by mac80211 */ 408 struct sk_buff_head deferred_rx_queue; 409 410 /* Frames sent, not returned yet to mac80211 */ 411 struct sk_buff_head deferred_tx_queue; 412 413 struct work_struct tx_work; 414 415 /* Pending TX frames */ 416 unsigned long tx_frames_map[BITS_TO_LONGS(ACX_TX_DESCRIPTORS)]; 417 struct sk_buff *tx_frames[ACX_TX_DESCRIPTORS]; 418 int tx_frames_cnt; 419 420 /* Security sequence number counters */ 421 u8 tx_security_last_seq; 422 s64 tx_security_seq; 423 424 /* FW Rx counter */ 425 u32 rx_counter; 426 427 /* Rx memory pool address */ 428 struct wl1271_rx_mem_pool_addr rx_mem_pool_addr; 429 430 /* Intermediate buffer, used for packet aggregation */ 431 u8 *aggr_buf; 432 433 /* Network stack work */ 434 struct work_struct netstack_work; 435 436 /* Hardware recovery work */ 437 struct work_struct recovery_work; 438 439 /* The mbox event mask */ 440 u32 event_mask; 441 442 /* Mailbox pointers */ 443 u32 mbox_ptr[2]; 444 445 /* Are we currently scanning */ 446 struct wl1271_scan scan; 447 struct delayed_work scan_complete_work; 448 449 /* probe-req template for the current AP */ 450 struct sk_buff *probereq; 451 452 /* Our association ID */ 453 u16 aid; 454 455 /* 456 * currently configured rate set: 457 * bits 0-15 - 802.11abg rates 458 * bits 16-23 - 802.11n MCS index mask 459 * support only 1 stream, thus only 8 bits for the MCS rates (0-7). 460 */ 461 u32 basic_rate_set; 462 u32 basic_rate; 463 u32 rate_set; 464 465 /* The current band */ 466 enum ieee80211_band band; 467 468 /* Beaconing interval (needed for ad-hoc) */ 469 u32 beacon_int; 470 471 /* Default key (for WEP) */ 472 u32 default_key; 473 474 unsigned int filters; 475 unsigned int rx_config; 476 unsigned int rx_filter; 477 478 struct completion *elp_compl; 479 struct delayed_work elp_work; 480 struct delayed_work pspoll_work; 481 482 /* counter for ps-poll delivery failures */ 483 int ps_poll_failures; 484 485 /* retry counter for PSM entries */ 486 u8 psm_entry_retry; 487 488 /* in dBm */ 489 int power_level; 490 491 int rssi_thold; 492 int last_rssi_event; 493 494 struct wl1271_stats stats; 495 496 __le32 buffer_32; 497 u32 buffer_cmd; 498 u32 buffer_busyword[WL1271_BUSY_WORD_CNT]; 499 500 struct wl1271_fw_full_status *fw_status; 501 struct wl1271_tx_hw_res_if *tx_res_if; 502 503 struct ieee80211_vif *vif; 504 505 /* Current chipset configuration */ 506 struct conf_drv_settings conf; 507 508 bool sg_enabled; 509 510 bool enable_11a; 511 512 struct list_head list; 513 514 /* Most recently reported noise in dBm */ 515 s8 noise; 516 517 /* map for HLIDs of associated stations - when operating in AP mode */ 518 unsigned long ap_hlid_map[BITS_TO_LONGS(AP_MAX_STATIONS)]; 519 520 /* recoreded keys for AP-mode - set here before AP startup */ 521 struct wl1271_ap_key *recorded_ap_keys[MAX_NUM_KEYS]; 522 523 /* bands supported by this instance of wl12xx */ 524 struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS]; 525 526 /* RX BA constraint value */ 527 bool ba_support; 528 u8 ba_rx_bitmap; 529 530 /* 531 * AP-mode - links indexed by HLID. The global and broadcast links 532 * are always active. 533 */ 534 struct wl1271_link links[AP_MAX_LINKS]; 535 536 /* the hlid of the link where the last transmitted skb came from */ 537 int last_tx_hlid; 538 539 /* AP-mode - a bitmap of links currently in PS mode according to FW */ 540 u32 ap_fw_ps_map; 541 542 /* AP-mode - a bitmap of links currently in PS mode in mac80211 */ 543 unsigned long ap_ps_map; 544 545 /* Quirks of specific hardware revisions */ 546 unsigned int quirks; 547 }; 548 549 struct wl1271_station { 550 u8 hlid; 551 }; 552 553 int wl1271_plt_start(struct wl1271 *wl); 554 int wl1271_plt_stop(struct wl1271 *wl); 555 556 #define JOIN_TIMEOUT 5000 /* 5000 milliseconds to join */ 557 558 #define SESSION_COUNTER_MAX 7 /* maximum value for the session counter */ 559 560 #define WL1271_DEFAULT_POWER_LEVEL 0 561 562 #define WL1271_TX_QUEUE_LOW_WATERMARK 10 563 #define WL1271_TX_QUEUE_HIGH_WATERMARK 25 564 565 #define WL1271_DEFERRED_QUEUE_LIMIT 64 566 567 /* WL1271 needs a 200ms sleep after power on, and a 20ms sleep before power 568 on in case is has been shut down shortly before */ 569 #define WL1271_PRE_POWER_ON_SLEEP 20 /* in milliseconds */ 570 #define WL1271_POWER_ON_SLEEP 200 /* in milliseconds */ 571 572 /* Macros to handle wl1271.sta_rate_set */ 573 #define HW_BG_RATES_MASK 0xffff 574 #define HW_HT_RATES_OFFSET 16 575 576 /* Quirks */ 577 578 /* Each RX/TX transaction requires an end-of-transaction transfer */ 579 #define WL12XX_QUIRK_END_OF_TRANSACTION BIT(0) 580 581 #endif 582