tx.c revision 6c4c45346289ec1c8a6a204e2c81325a4cf96924
1/* 2 * This file is part of wl1271 3 * 4 * Copyright (C) 2009 Nokia Corporation 5 * 6 * Contact: Luciano Coelho <luciano.coelho@nokia.com> 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License 10 * version 2 as published by the Free Software Foundation. 11 * 12 * This program is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 20 * 02110-1301 USA 21 * 22 */ 23 24#include <linux/kernel.h> 25#include <linux/module.h> 26#include <linux/etherdevice.h> 27 28#include "wlcore.h" 29#include "debug.h" 30#include "io.h" 31#include "ps.h" 32#include "tx.h" 33#include "event.h" 34#include "hw_ops.h" 35 36/* 37 * TODO: this is here just for now, it must be removed when the data 38 * operations are in place. 39 */ 40#include "../wl12xx/reg.h" 41 42static int wl1271_set_default_wep_key(struct wl1271 *wl, 43 struct wl12xx_vif *wlvif, u8 id) 44{ 45 int ret; 46 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS); 47 48 if (is_ap) 49 ret = wl12xx_cmd_set_default_wep_key(wl, id, 50 wlvif->ap.bcast_hlid); 51 else 52 ret = wl12xx_cmd_set_default_wep_key(wl, id, wlvif->sta.hlid); 53 54 if (ret < 0) 55 return ret; 56 57 wl1271_debug(DEBUG_CRYPT, "default wep key idx: %d", (int)id); 58 return 0; 59} 60 61static int wl1271_alloc_tx_id(struct wl1271 *wl, struct sk_buff *skb) 62{ 63 int id; 64 65 id = find_first_zero_bit(wl->tx_frames_map, wl->num_tx_desc); 66 if (id >= wl->num_tx_desc) 67 return -EBUSY; 68 69 __set_bit(id, wl->tx_frames_map); 70 wl->tx_frames[id] = skb; 71 wl->tx_frames_cnt++; 72 return id; 73} 74 75void wl1271_free_tx_id(struct wl1271 *wl, int id) 76{ 77 if (__test_and_clear_bit(id, wl->tx_frames_map)) { 78 if (unlikely(wl->tx_frames_cnt == wl->num_tx_desc)) 79 clear_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags); 80 81 wl->tx_frames[id] = NULL; 82 wl->tx_frames_cnt--; 83 } 84} 85EXPORT_SYMBOL(wl1271_free_tx_id); 86 87static void wl1271_tx_ap_update_inconnection_sta(struct wl1271 *wl, 88 struct sk_buff *skb) 89{ 90 struct ieee80211_hdr *hdr; 91 92 /* 93 * add the station to the known list before transmitting the 94 * authentication response. this way it won't get de-authed by FW 95 * when transmitting too soon. 96 */ 97 hdr = (struct ieee80211_hdr *)(skb->data + 98 sizeof(struct wl1271_tx_hw_descr)); 99 if (ieee80211_is_auth(hdr->frame_control)) 100 wl1271_acx_set_inconnection_sta(wl, hdr->addr1); 101} 102 103static void wl1271_tx_regulate_link(struct wl1271 *wl, 104 struct wl12xx_vif *wlvif, 105 u8 hlid) 106{ 107 bool fw_ps, single_sta; 108 u8 tx_pkts; 109 110 if (WARN_ON(!test_bit(hlid, wlvif->links_map))) 111 return; 112 113 fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map); 114 tx_pkts = wl->links[hlid].allocated_pkts; 115 single_sta = (wl->active_sta_count == 1); 116 117 /* 118 * if in FW PS and there is enough data in FW we can put the link 119 * into high-level PS and clean out its TX queues. 120 * Make an exception if this is the only connected station. In this 121 * case FW-memory congestion is not a problem. 122 */ 123 if (!single_sta && fw_ps && tx_pkts >= WL1271_PS_STA_MAX_PACKETS) 124 wl12xx_ps_link_start(wl, wlvif, hlid, true); 125} 126 127bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb) 128{ 129 return wl->dummy_packet == skb; 130} 131EXPORT_SYMBOL(wl12xx_is_dummy_packet); 132 133static u8 wl12xx_tx_get_hlid_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif, 134 struct sk_buff *skb, struct ieee80211_sta *sta) 135{ 136 if (sta) { 137 struct wl1271_station *wl_sta; 138 139 wl_sta = (struct wl1271_station *)sta->drv_priv; 140 return wl_sta->hlid; 141 } else { 142 struct ieee80211_hdr *hdr; 143 144 if (!test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags)) 145 return wl->system_hlid; 146 147 hdr = (struct ieee80211_hdr *)skb->data; 148 if (is_multicast_ether_addr(ieee80211_get_DA(hdr))) 149 return wlvif->ap.bcast_hlid; 150 else 151 return wlvif->ap.global_hlid; 152 } 153} 154 155u8 wl12xx_tx_get_hlid(struct wl1271 *wl, struct wl12xx_vif *wlvif, 156 struct sk_buff *skb, struct ieee80211_sta *sta) 157{ 158 struct ieee80211_tx_info *control; 159 160 if (!wlvif || wl12xx_is_dummy_packet(wl, skb)) 161 return wl->system_hlid; 162 163 if (wlvif->bss_type == BSS_TYPE_AP_BSS) 164 return wl12xx_tx_get_hlid_ap(wl, wlvif, skb, sta); 165 166 control = IEEE80211_SKB_CB(skb); 167 if (control->flags & IEEE80211_TX_CTL_TX_OFFCHAN) { 168 wl1271_debug(DEBUG_TX, "tx offchannel"); 169 return wlvif->dev_hlid; 170 } 171 172 return wlvif->sta.hlid; 173} 174 175unsigned int wlcore_calc_packet_alignment(struct wl1271 *wl, 176 unsigned int packet_length) 177{ 178 if ((wl->quirks & WLCORE_QUIRK_TX_PAD_LAST_FRAME) || 179 !(wl->quirks & WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN)) 180 return ALIGN(packet_length, WL1271_TX_ALIGN_TO); 181 else 182 return ALIGN(packet_length, WL12XX_BUS_BLOCK_SIZE); 183} 184EXPORT_SYMBOL(wlcore_calc_packet_alignment); 185 186static int wl1271_tx_allocate(struct wl1271 *wl, struct wl12xx_vif *wlvif, 187 struct sk_buff *skb, u32 extra, u32 buf_offset, 188 u8 hlid, bool is_gem) 189{ 190 struct wl1271_tx_hw_descr *desc; 191 u32 total_len = skb->len + sizeof(struct wl1271_tx_hw_descr) + extra; 192 u32 total_blocks; 193 int id, ret = -EBUSY, ac; 194 u32 spare_blocks; 195 196 if (buf_offset + total_len > wl->aggr_buf_size) 197 return -EAGAIN; 198 199 spare_blocks = wlcore_hw_get_spare_blocks(wl, is_gem); 200 201 /* allocate free identifier for the packet */ 202 id = wl1271_alloc_tx_id(wl, skb); 203 if (id < 0) 204 return id; 205 206 total_blocks = wlcore_hw_calc_tx_blocks(wl, total_len, spare_blocks); 207 208 if (total_blocks <= wl->tx_blocks_available) { 209 desc = (struct wl1271_tx_hw_descr *)skb_push( 210 skb, total_len - skb->len); 211 212 wlcore_hw_set_tx_desc_blocks(wl, desc, total_blocks, 213 spare_blocks); 214 215 desc->id = id; 216 217 wl->tx_blocks_available -= total_blocks; 218 wl->tx_allocated_blocks += total_blocks; 219 220 /* If the FW was empty before, arm the Tx watchdog */ 221 if (wl->tx_allocated_blocks == total_blocks) 222 wl12xx_rearm_tx_watchdog_locked(wl); 223 224 ac = wl1271_tx_get_queue(skb_get_queue_mapping(skb)); 225 wl->tx_allocated_pkts[ac]++; 226 227 if (!wl12xx_is_dummy_packet(wl, skb) && wlvif && 228 wlvif->bss_type == BSS_TYPE_AP_BSS && 229 test_bit(hlid, wlvif->ap.sta_hlid_map)) 230 wl->links[hlid].allocated_pkts++; 231 232 ret = 0; 233 234 wl1271_debug(DEBUG_TX, 235 "tx_allocate: size: %d, blocks: %d, id: %d", 236 total_len, total_blocks, id); 237 } else { 238 wl1271_free_tx_id(wl, id); 239 } 240 241 return ret; 242} 243 244static void wl1271_tx_fill_hdr(struct wl1271 *wl, struct wl12xx_vif *wlvif, 245 struct sk_buff *skb, u32 extra, 246 struct ieee80211_tx_info *control, u8 hlid) 247{ 248 struct timespec ts; 249 struct wl1271_tx_hw_descr *desc; 250 int ac, rate_idx; 251 s64 hosttime; 252 u16 tx_attr = 0; 253 __le16 frame_control; 254 struct ieee80211_hdr *hdr; 255 u8 *frame_start; 256 bool is_dummy; 257 258 desc = (struct wl1271_tx_hw_descr *) skb->data; 259 frame_start = (u8 *)(desc + 1); 260 hdr = (struct ieee80211_hdr *)(frame_start + extra); 261 frame_control = hdr->frame_control; 262 263 /* relocate space for security header */ 264 if (extra) { 265 int hdrlen = ieee80211_hdrlen(frame_control); 266 memmove(frame_start, hdr, hdrlen); 267 skb_set_network_header(skb, skb_network_offset(skb) + extra); 268 } 269 270 /* configure packet life time */ 271 getnstimeofday(&ts); 272 hosttime = (timespec_to_ns(&ts) >> 10); 273 desc->start_time = cpu_to_le32(hosttime - wl->time_offset); 274 275 is_dummy = wl12xx_is_dummy_packet(wl, skb); 276 if (is_dummy || !wlvif || wlvif->bss_type != BSS_TYPE_AP_BSS) 277 desc->life_time = cpu_to_le16(TX_HW_MGMT_PKT_LIFETIME_TU); 278 else 279 desc->life_time = cpu_to_le16(TX_HW_AP_MODE_PKT_LIFETIME_TU); 280 281 /* queue */ 282 ac = wl1271_tx_get_queue(skb_get_queue_mapping(skb)); 283 desc->tid = skb->priority; 284 285 if (is_dummy) { 286 /* 287 * FW expects the dummy packet to have an invalid session id - 288 * any session id that is different than the one set in the join 289 */ 290 tx_attr = (SESSION_COUNTER_INVALID << 291 TX_HW_ATTR_OFST_SESSION_COUNTER) & 292 TX_HW_ATTR_SESSION_COUNTER; 293 294 tx_attr |= TX_HW_ATTR_TX_DUMMY_REQ; 295 } else if (wlvif) { 296 u8 session_id = wl->session_ids[hlid]; 297 298 if ((wl->quirks & WLCORE_QUIRK_AP_ZERO_SESSION_ID) && 299 (wlvif->bss_type == BSS_TYPE_AP_BSS)) 300 session_id = 0; 301 302 /* configure the tx attributes */ 303 tx_attr = session_id << TX_HW_ATTR_OFST_SESSION_COUNTER; 304 } 305 306 desc->hlid = hlid; 307 if (is_dummy || !wlvif) 308 rate_idx = 0; 309 else if (wlvif->bss_type != BSS_TYPE_AP_BSS) { 310 /* 311 * if the packets are data packets 312 * send them with AP rate policies (EAPOLs are an exception), 313 * otherwise use default basic rates 314 */ 315 if (skb->protocol == cpu_to_be16(ETH_P_PAE)) 316 rate_idx = wlvif->sta.basic_rate_idx; 317 else if (control->flags & IEEE80211_TX_CTL_NO_CCK_RATE) 318 rate_idx = wlvif->sta.p2p_rate_idx; 319 else if (ieee80211_is_data(frame_control)) 320 rate_idx = wlvif->sta.ap_rate_idx; 321 else 322 rate_idx = wlvif->sta.basic_rate_idx; 323 } else { 324 if (hlid == wlvif->ap.global_hlid) 325 rate_idx = wlvif->ap.mgmt_rate_idx; 326 else if (hlid == wlvif->ap.bcast_hlid || 327 skb->protocol == cpu_to_be16(ETH_P_PAE) || 328 !ieee80211_is_data(frame_control)) 329 /* 330 * send non-data, bcast and EAPOLs using the 331 * min basic rate 332 */ 333 rate_idx = wlvif->ap.bcast_rate_idx; 334 else 335 rate_idx = wlvif->ap.ucast_rate_idx[ac]; 336 } 337 338 tx_attr |= rate_idx << TX_HW_ATTR_OFST_RATE_POLICY; 339 340 /* for WEP shared auth - no fw encryption is needed */ 341 if (ieee80211_is_auth(frame_control) && 342 ieee80211_has_protected(frame_control)) 343 tx_attr |= TX_HW_ATTR_HOST_ENCRYPT; 344 345 desc->tx_attr = cpu_to_le16(tx_attr); 346 347 wlcore_hw_set_tx_desc_csum(wl, desc, skb); 348 wlcore_hw_set_tx_desc_data_len(wl, desc, skb); 349} 350 351/* caller must hold wl->mutex */ 352static int wl1271_prepare_tx_frame(struct wl1271 *wl, struct wl12xx_vif *wlvif, 353 struct sk_buff *skb, u32 buf_offset, u8 hlid) 354{ 355 struct ieee80211_tx_info *info; 356 u32 extra = 0; 357 int ret = 0; 358 u32 total_len; 359 bool is_dummy; 360 bool is_gem = false; 361 362 if (!skb) { 363 wl1271_error("discarding null skb"); 364 return -EINVAL; 365 } 366 367 if (hlid == WL12XX_INVALID_LINK_ID) { 368 wl1271_error("invalid hlid. dropping skb 0x%p", skb); 369 return -EINVAL; 370 } 371 372 info = IEEE80211_SKB_CB(skb); 373 374 is_dummy = wl12xx_is_dummy_packet(wl, skb); 375 376 if ((wl->quirks & WLCORE_QUIRK_TKIP_HEADER_SPACE) && 377 info->control.hw_key && 378 info->control.hw_key->cipher == WLAN_CIPHER_SUITE_TKIP) 379 extra = WL1271_EXTRA_SPACE_TKIP; 380 381 if (info->control.hw_key) { 382 bool is_wep; 383 u8 idx = info->control.hw_key->hw_key_idx; 384 u32 cipher = info->control.hw_key->cipher; 385 386 is_wep = (cipher == WLAN_CIPHER_SUITE_WEP40) || 387 (cipher == WLAN_CIPHER_SUITE_WEP104); 388 389 if (unlikely(is_wep && wlvif->default_key != idx)) { 390 ret = wl1271_set_default_wep_key(wl, wlvif, idx); 391 if (ret < 0) 392 return ret; 393 wlvif->default_key = idx; 394 } 395 396 is_gem = (cipher == WL1271_CIPHER_SUITE_GEM); 397 } 398 399 ret = wl1271_tx_allocate(wl, wlvif, skb, extra, buf_offset, hlid, 400 is_gem); 401 if (ret < 0) 402 return ret; 403 404 wl1271_tx_fill_hdr(wl, wlvif, skb, extra, info, hlid); 405 406 if (!is_dummy && wlvif && wlvif->bss_type == BSS_TYPE_AP_BSS) { 407 wl1271_tx_ap_update_inconnection_sta(wl, skb); 408 wl1271_tx_regulate_link(wl, wlvif, hlid); 409 } 410 411 /* 412 * The length of each packet is stored in terms of 413 * words. Thus, we must pad the skb data to make sure its 414 * length is aligned. The number of padding bytes is computed 415 * and set in wl1271_tx_fill_hdr. 416 * In special cases, we want to align to a specific block size 417 * (eg. for wl128x with SDIO we align to 256). 418 */ 419 total_len = wlcore_calc_packet_alignment(wl, skb->len); 420 421 memcpy(wl->aggr_buf + buf_offset, skb->data, skb->len); 422 memset(wl->aggr_buf + buf_offset + skb->len, 0, total_len - skb->len); 423 424 /* Revert side effects in the dummy packet skb, so it can be reused */ 425 if (is_dummy) 426 skb_pull(skb, sizeof(struct wl1271_tx_hw_descr)); 427 428 return total_len; 429} 430 431u32 wl1271_tx_enabled_rates_get(struct wl1271 *wl, u32 rate_set, 432 enum ieee80211_band rate_band) 433{ 434 struct ieee80211_supported_band *band; 435 u32 enabled_rates = 0; 436 int bit; 437 438 band = wl->hw->wiphy->bands[rate_band]; 439 for (bit = 0; bit < band->n_bitrates; bit++) { 440 if (rate_set & 0x1) 441 enabled_rates |= band->bitrates[bit].hw_value; 442 rate_set >>= 1; 443 } 444 445 /* MCS rates indication are on bits 16 - 31 */ 446 rate_set >>= HW_HT_RATES_OFFSET - band->n_bitrates; 447 448 for (bit = 0; bit < 16; bit++) { 449 if (rate_set & 0x1) 450 enabled_rates |= (CONF_HW_BIT_RATE_MCS_0 << bit); 451 rate_set >>= 1; 452 } 453 454 return enabled_rates; 455} 456 457void wl1271_handle_tx_low_watermark(struct wl1271 *wl) 458{ 459 int i; 460 461 for (i = 0; i < NUM_TX_QUEUES; i++) { 462 if (wlcore_is_queue_stopped_by_reason(wl, i, 463 WLCORE_QUEUE_STOP_REASON_WATERMARK) && 464 wl->tx_queue_count[i] <= WL1271_TX_QUEUE_LOW_WATERMARK) { 465 /* firmware buffer has space, restart queues */ 466 wlcore_wake_queue(wl, i, 467 WLCORE_QUEUE_STOP_REASON_WATERMARK); 468 } 469 } 470} 471 472static struct sk_buff_head *wl1271_select_queue(struct wl1271 *wl, 473 struct sk_buff_head *queues) 474{ 475 int i, q = -1, ac; 476 u32 min_pkts = 0xffffffff; 477 478 /* 479 * Find a non-empty ac where: 480 * 1. There are packets to transmit 481 * 2. The FW has the least allocated blocks 482 * 483 * We prioritize the ACs according to VO>VI>BE>BK 484 */ 485 for (i = 0; i < NUM_TX_QUEUES; i++) { 486 ac = wl1271_tx_get_queue(i); 487 if (!skb_queue_empty(&queues[ac]) && 488 (wl->tx_allocated_pkts[ac] < min_pkts)) { 489 q = ac; 490 min_pkts = wl->tx_allocated_pkts[q]; 491 } 492 } 493 494 if (q == -1) 495 return NULL; 496 497 return &queues[q]; 498} 499 500static struct sk_buff *wl12xx_lnk_skb_dequeue(struct wl1271 *wl, 501 struct wl1271_link *lnk) 502{ 503 struct sk_buff *skb; 504 unsigned long flags; 505 struct sk_buff_head *queue; 506 507 queue = wl1271_select_queue(wl, lnk->tx_queue); 508 if (!queue) 509 return NULL; 510 511 skb = skb_dequeue(queue); 512 if (skb) { 513 int q = wl1271_tx_get_queue(skb_get_queue_mapping(skb)); 514 spin_lock_irqsave(&wl->wl_lock, flags); 515 WARN_ON_ONCE(wl->tx_queue_count[q] <= 0); 516 wl->tx_queue_count[q]--; 517 spin_unlock_irqrestore(&wl->wl_lock, flags); 518 } 519 520 return skb; 521} 522 523static struct sk_buff *wl12xx_vif_skb_dequeue(struct wl1271 *wl, 524 struct wl12xx_vif *wlvif, 525 u8 *hlid) 526{ 527 struct sk_buff *skb = NULL; 528 int i, h, start_hlid; 529 530 /* start from the link after the last one */ 531 start_hlid = (wlvif->last_tx_hlid + 1) % WL12XX_MAX_LINKS; 532 533 /* dequeue according to AC, round robin on each link */ 534 for (i = 0; i < WL12XX_MAX_LINKS; i++) { 535 h = (start_hlid + i) % WL12XX_MAX_LINKS; 536 537 /* only consider connected stations */ 538 if (!test_bit(h, wlvif->links_map)) 539 continue; 540 541 skb = wl12xx_lnk_skb_dequeue(wl, &wl->links[h]); 542 if (!skb) 543 continue; 544 545 wlvif->last_tx_hlid = h; 546 break; 547 } 548 549 if (!skb) 550 wlvif->last_tx_hlid = 0; 551 552 *hlid = wlvif->last_tx_hlid; 553 return skb; 554} 555 556static struct sk_buff *wl1271_skb_dequeue(struct wl1271 *wl, u8 *hlid) 557{ 558 unsigned long flags; 559 struct wl12xx_vif *wlvif = wl->last_wlvif; 560 struct sk_buff *skb = NULL; 561 562 /* continue from last wlvif (round robin) */ 563 if (wlvif) { 564 wl12xx_for_each_wlvif_continue(wl, wlvif) { 565 skb = wl12xx_vif_skb_dequeue(wl, wlvif, hlid); 566 if (skb) { 567 wl->last_wlvif = wlvif; 568 break; 569 } 570 } 571 } 572 573 /* dequeue from the system HLID before the restarting wlvif list */ 574 if (!skb) { 575 skb = wl12xx_lnk_skb_dequeue(wl, &wl->links[wl->system_hlid]); 576 *hlid = wl->system_hlid; 577 } 578 579 /* do a new pass over the wlvif list */ 580 if (!skb) { 581 wl12xx_for_each_wlvif(wl, wlvif) { 582 skb = wl12xx_vif_skb_dequeue(wl, wlvif, hlid); 583 if (skb) { 584 wl->last_wlvif = wlvif; 585 break; 586 } 587 588 /* 589 * No need to continue after last_wlvif. The previous 590 * pass should have found it. 591 */ 592 if (wlvif == wl->last_wlvif) 593 break; 594 } 595 } 596 597 if (!skb && 598 test_and_clear_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags)) { 599 int q; 600 601 skb = wl->dummy_packet; 602 *hlid = wl->system_hlid; 603 q = wl1271_tx_get_queue(skb_get_queue_mapping(skb)); 604 spin_lock_irqsave(&wl->wl_lock, flags); 605 WARN_ON_ONCE(wl->tx_queue_count[q] <= 0); 606 wl->tx_queue_count[q]--; 607 spin_unlock_irqrestore(&wl->wl_lock, flags); 608 } 609 610 return skb; 611} 612 613static void wl1271_skb_queue_head(struct wl1271 *wl, struct wl12xx_vif *wlvif, 614 struct sk_buff *skb, u8 hlid) 615{ 616 unsigned long flags; 617 int q = wl1271_tx_get_queue(skb_get_queue_mapping(skb)); 618 619 if (wl12xx_is_dummy_packet(wl, skb)) { 620 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags); 621 } else { 622 skb_queue_head(&wl->links[hlid].tx_queue[q], skb); 623 624 /* make sure we dequeue the same packet next time */ 625 wlvif->last_tx_hlid = (hlid + WL12XX_MAX_LINKS - 1) % 626 WL12XX_MAX_LINKS; 627 } 628 629 spin_lock_irqsave(&wl->wl_lock, flags); 630 wl->tx_queue_count[q]++; 631 spin_unlock_irqrestore(&wl->wl_lock, flags); 632} 633 634static bool wl1271_tx_is_data_present(struct sk_buff *skb) 635{ 636 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)(skb->data); 637 638 return ieee80211_is_data_present(hdr->frame_control); 639} 640 641void wl12xx_rearm_rx_streaming(struct wl1271 *wl, unsigned long *active_hlids) 642{ 643 struct wl12xx_vif *wlvif; 644 u32 timeout; 645 u8 hlid; 646 647 if (!wl->conf.rx_streaming.interval) 648 return; 649 650 if (!wl->conf.rx_streaming.always && 651 !test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags)) 652 return; 653 654 timeout = wl->conf.rx_streaming.duration; 655 wl12xx_for_each_wlvif_sta(wl, wlvif) { 656 bool found = false; 657 for_each_set_bit(hlid, active_hlids, WL12XX_MAX_LINKS) { 658 if (test_bit(hlid, wlvif->links_map)) { 659 found = true; 660 break; 661 } 662 } 663 664 if (!found) 665 continue; 666 667 /* enable rx streaming */ 668 if (!test_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags)) 669 ieee80211_queue_work(wl->hw, 670 &wlvif->rx_streaming_enable_work); 671 672 mod_timer(&wlvif->rx_streaming_timer, 673 jiffies + msecs_to_jiffies(timeout)); 674 } 675} 676 677/* 678 * Returns failure values only in case of failed bus ops within this function. 679 * wl1271_prepare_tx_frame retvals won't be returned in order to avoid 680 * triggering recovery by higher layers when not necessary. 681 * In case a FW command fails within wl1271_prepare_tx_frame fails a recovery 682 * will be queued in wl1271_cmd_send. -EAGAIN/-EBUSY from prepare_tx_frame 683 * can occur and are legitimate so don't propagate. -EINVAL will emit a WARNING 684 * within prepare_tx_frame code but there's nothing we should do about those 685 * as well. 686 */ 687int wlcore_tx_work_locked(struct wl1271 *wl) 688{ 689 struct wl12xx_vif *wlvif; 690 struct sk_buff *skb; 691 struct wl1271_tx_hw_descr *desc; 692 u32 buf_offset = 0, last_len = 0; 693 bool sent_packets = false; 694 unsigned long active_hlids[BITS_TO_LONGS(WL12XX_MAX_LINKS)] = {0}; 695 int ret = 0; 696 int bus_ret = 0; 697 u8 hlid; 698 699 if (unlikely(wl->state != WLCORE_STATE_ON)) 700 return 0; 701 702 while ((skb = wl1271_skb_dequeue(wl, &hlid))) { 703 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 704 bool has_data = false; 705 706 wlvif = NULL; 707 if (!wl12xx_is_dummy_packet(wl, skb) && info->control.vif) 708 wlvif = wl12xx_vif_to_data(info->control.vif); 709 else 710 hlid = wl->system_hlid; 711 712 has_data = wlvif && wl1271_tx_is_data_present(skb); 713 ret = wl1271_prepare_tx_frame(wl, wlvif, skb, buf_offset, 714 hlid); 715 if (ret == -EAGAIN) { 716 /* 717 * Aggregation buffer is full. 718 * Flush buffer and try again. 719 */ 720 wl1271_skb_queue_head(wl, wlvif, skb, hlid); 721 722 buf_offset = wlcore_hw_pre_pkt_send(wl, buf_offset, 723 last_len); 724 bus_ret = wlcore_write_data(wl, REG_SLV_MEM_DATA, 725 wl->aggr_buf, buf_offset, true); 726 if (bus_ret < 0) 727 goto out; 728 729 sent_packets = true; 730 buf_offset = 0; 731 continue; 732 } else if (ret == -EBUSY) { 733 /* 734 * Firmware buffer is full. 735 * Queue back last skb, and stop aggregating. 736 */ 737 wl1271_skb_queue_head(wl, wlvif, skb, hlid); 738 /* No work left, avoid scheduling redundant tx work */ 739 set_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags); 740 goto out_ack; 741 } else if (ret < 0) { 742 if (wl12xx_is_dummy_packet(wl, skb)) 743 /* 744 * fw still expects dummy packet, 745 * so re-enqueue it 746 */ 747 wl1271_skb_queue_head(wl, wlvif, skb, hlid); 748 else 749 ieee80211_free_txskb(wl->hw, skb); 750 goto out_ack; 751 } 752 last_len = ret; 753 buf_offset += last_len; 754 wl->tx_packets_count++; 755 if (has_data) { 756 desc = (struct wl1271_tx_hw_descr *) skb->data; 757 __set_bit(desc->hlid, active_hlids); 758 } 759 } 760 761out_ack: 762 if (buf_offset) { 763 buf_offset = wlcore_hw_pre_pkt_send(wl, buf_offset, last_len); 764 bus_ret = wlcore_write_data(wl, REG_SLV_MEM_DATA, wl->aggr_buf, 765 buf_offset, true); 766 if (bus_ret < 0) 767 goto out; 768 769 sent_packets = true; 770 } 771 if (sent_packets) { 772 /* 773 * Interrupt the firmware with the new packets. This is only 774 * required for older hardware revisions 775 */ 776 if (wl->quirks & WLCORE_QUIRK_END_OF_TRANSACTION) { 777 bus_ret = wlcore_write32(wl, WL12XX_HOST_WR_ACCESS, 778 wl->tx_packets_count); 779 if (bus_ret < 0) 780 goto out; 781 } 782 783 wl1271_handle_tx_low_watermark(wl); 784 } 785 wl12xx_rearm_rx_streaming(wl, active_hlids); 786 787out: 788 return bus_ret; 789} 790 791void wl1271_tx_work(struct work_struct *work) 792{ 793 struct wl1271 *wl = container_of(work, struct wl1271, tx_work); 794 int ret; 795 796 mutex_lock(&wl->mutex); 797 ret = wl1271_ps_elp_wakeup(wl); 798 if (ret < 0) 799 goto out; 800 801 ret = wlcore_tx_work_locked(wl); 802 if (ret < 0) { 803 wl12xx_queue_recovery_work(wl); 804 goto out; 805 } 806 807 wl1271_ps_elp_sleep(wl); 808out: 809 mutex_unlock(&wl->mutex); 810} 811 812static u8 wl1271_tx_get_rate_flags(u8 rate_class_index) 813{ 814 u8 flags = 0; 815 816 /* 817 * TODO: use wl12xx constants when this code is moved to wl12xx, as 818 * only it uses Tx-completion. 819 */ 820 if (rate_class_index <= 8) 821 flags |= IEEE80211_TX_RC_MCS; 822 823 /* 824 * TODO: use wl12xx constants when this code is moved to wl12xx, as 825 * only it uses Tx-completion. 826 */ 827 if (rate_class_index == 0) 828 flags |= IEEE80211_TX_RC_SHORT_GI; 829 830 return flags; 831} 832 833static void wl1271_tx_complete_packet(struct wl1271 *wl, 834 struct wl1271_tx_hw_res_descr *result) 835{ 836 struct ieee80211_tx_info *info; 837 struct ieee80211_vif *vif; 838 struct wl12xx_vif *wlvif; 839 struct sk_buff *skb; 840 int id = result->id; 841 int rate = -1; 842 u8 rate_flags = 0; 843 u8 retries = 0; 844 845 /* check for id legality */ 846 if (unlikely(id >= wl->num_tx_desc || wl->tx_frames[id] == NULL)) { 847 wl1271_warning("TX result illegal id: %d", id); 848 return; 849 } 850 851 skb = wl->tx_frames[id]; 852 info = IEEE80211_SKB_CB(skb); 853 854 if (wl12xx_is_dummy_packet(wl, skb)) { 855 wl1271_free_tx_id(wl, id); 856 return; 857 } 858 859 /* info->control is valid as long as we don't update info->status */ 860 vif = info->control.vif; 861 wlvif = wl12xx_vif_to_data(vif); 862 863 /* update the TX status info */ 864 if (result->status == TX_SUCCESS) { 865 if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) 866 info->flags |= IEEE80211_TX_STAT_ACK; 867 rate = wlcore_rate_to_idx(wl, result->rate_class_index, 868 wlvif->band); 869 rate_flags = wl1271_tx_get_rate_flags(result->rate_class_index); 870 retries = result->ack_failures; 871 } else if (result->status == TX_RETRY_EXCEEDED) { 872 wl->stats.excessive_retries++; 873 retries = result->ack_failures; 874 } 875 876 info->status.rates[0].idx = rate; 877 info->status.rates[0].count = retries; 878 info->status.rates[0].flags = rate_flags; 879 info->status.ack_signal = -1; 880 881 wl->stats.retry_count += result->ack_failures; 882 883 /* 884 * update sequence number only when relevant, i.e. only in 885 * sessions of TKIP, AES and GEM (not in open or WEP sessions) 886 */ 887 if (info->control.hw_key && 888 (info->control.hw_key->cipher == WLAN_CIPHER_SUITE_TKIP || 889 info->control.hw_key->cipher == WLAN_CIPHER_SUITE_CCMP || 890 info->control.hw_key->cipher == WL1271_CIPHER_SUITE_GEM)) { 891 u8 fw_lsb = result->tx_security_sequence_number_lsb; 892 u8 cur_lsb = wlvif->tx_security_last_seq_lsb; 893 894 /* 895 * update security sequence number, taking care of potential 896 * wrap-around 897 */ 898 wlvif->tx_security_seq += (fw_lsb - cur_lsb) & 0xff; 899 wlvif->tx_security_last_seq_lsb = fw_lsb; 900 } 901 902 /* remove private header from packet */ 903 skb_pull(skb, sizeof(struct wl1271_tx_hw_descr)); 904 905 /* remove TKIP header space if present */ 906 if ((wl->quirks & WLCORE_QUIRK_TKIP_HEADER_SPACE) && 907 info->control.hw_key && 908 info->control.hw_key->cipher == WLAN_CIPHER_SUITE_TKIP) { 909 int hdrlen = ieee80211_get_hdrlen_from_skb(skb); 910 memmove(skb->data + WL1271_EXTRA_SPACE_TKIP, skb->data, 911 hdrlen); 912 skb_pull(skb, WL1271_EXTRA_SPACE_TKIP); 913 } 914 915 wl1271_debug(DEBUG_TX, "tx status id %u skb 0x%p failures %u rate 0x%x" 916 " status 0x%x", 917 result->id, skb, result->ack_failures, 918 result->rate_class_index, result->status); 919 920 /* return the packet to the stack */ 921 skb_queue_tail(&wl->deferred_tx_queue, skb); 922 queue_work(wl->freezable_wq, &wl->netstack_work); 923 wl1271_free_tx_id(wl, result->id); 924} 925 926/* Called upon reception of a TX complete interrupt */ 927int wlcore_tx_complete(struct wl1271 *wl) 928{ 929 struct wl1271_acx_mem_map *memmap = wl->target_mem_map; 930 u32 count, fw_counter; 931 u32 i; 932 int ret; 933 934 /* read the tx results from the chipset */ 935 ret = wlcore_read(wl, le32_to_cpu(memmap->tx_result), 936 wl->tx_res_if, sizeof(*wl->tx_res_if), false); 937 if (ret < 0) 938 goto out; 939 940 fw_counter = le32_to_cpu(wl->tx_res_if->tx_result_fw_counter); 941 942 /* write host counter to chipset (to ack) */ 943 ret = wlcore_write32(wl, le32_to_cpu(memmap->tx_result) + 944 offsetof(struct wl1271_tx_hw_res_if, 945 tx_result_host_counter), fw_counter); 946 if (ret < 0) 947 goto out; 948 949 count = fw_counter - wl->tx_results_count; 950 wl1271_debug(DEBUG_TX, "tx_complete received, packets: %d", count); 951 952 /* verify that the result buffer is not getting overrun */ 953 if (unlikely(count > TX_HW_RESULT_QUEUE_LEN)) 954 wl1271_warning("TX result overflow from chipset: %d", count); 955 956 /* process the results */ 957 for (i = 0; i < count; i++) { 958 struct wl1271_tx_hw_res_descr *result; 959 u8 offset = wl->tx_results_count & TX_HW_RESULT_QUEUE_LEN_MASK; 960 961 /* process the packet */ 962 result = &(wl->tx_res_if->tx_results_queue[offset]); 963 wl1271_tx_complete_packet(wl, result); 964 965 wl->tx_results_count++; 966 } 967 968out: 969 return ret; 970} 971EXPORT_SYMBOL(wlcore_tx_complete); 972 973void wl1271_tx_reset_link_queues(struct wl1271 *wl, u8 hlid) 974{ 975 struct sk_buff *skb; 976 int i; 977 unsigned long flags; 978 struct ieee80211_tx_info *info; 979 int total[NUM_TX_QUEUES]; 980 981 for (i = 0; i < NUM_TX_QUEUES; i++) { 982 total[i] = 0; 983 while ((skb = skb_dequeue(&wl->links[hlid].tx_queue[i]))) { 984 wl1271_debug(DEBUG_TX, "link freeing skb 0x%p", skb); 985 986 if (!wl12xx_is_dummy_packet(wl, skb)) { 987 info = IEEE80211_SKB_CB(skb); 988 info->status.rates[0].idx = -1; 989 info->status.rates[0].count = 0; 990 ieee80211_tx_status_ni(wl->hw, skb); 991 } 992 993 total[i]++; 994 } 995 } 996 997 spin_lock_irqsave(&wl->wl_lock, flags); 998 for (i = 0; i < NUM_TX_QUEUES; i++) 999 wl->tx_queue_count[i] -= total[i]; 1000 spin_unlock_irqrestore(&wl->wl_lock, flags); 1001 1002 wl1271_handle_tx_low_watermark(wl); 1003} 1004 1005/* caller must hold wl->mutex and TX must be stopped */ 1006void wl12xx_tx_reset_wlvif(struct wl1271 *wl, struct wl12xx_vif *wlvif) 1007{ 1008 int i; 1009 1010 /* TX failure */ 1011 for_each_set_bit(i, wlvif->links_map, WL12XX_MAX_LINKS) { 1012 if (wlvif->bss_type == BSS_TYPE_AP_BSS) { 1013 /* this calls wl12xx_free_link */ 1014 wl1271_free_sta(wl, wlvif, i); 1015 } else { 1016 u8 hlid = i; 1017 wlvif->sta.ba_rx_bitmap = 0; 1018 wl12xx_free_link(wl, wlvif, &hlid); 1019 } 1020 } 1021 wlvif->last_tx_hlid = 0; 1022 1023} 1024/* caller must hold wl->mutex and TX must be stopped */ 1025void wl12xx_tx_reset(struct wl1271 *wl) 1026{ 1027 int i; 1028 struct sk_buff *skb; 1029 struct ieee80211_tx_info *info; 1030 1031 /* only reset the queues if something bad happened */ 1032 if (wl1271_tx_total_queue_count(wl) != 0) { 1033 for (i = 0; i < WL12XX_MAX_LINKS; i++) 1034 wl1271_tx_reset_link_queues(wl, i); 1035 1036 for (i = 0; i < NUM_TX_QUEUES; i++) 1037 wl->tx_queue_count[i] = 0; 1038 } 1039 1040 /* 1041 * Make sure the driver is at a consistent state, in case this 1042 * function is called from a context other than interface removal. 1043 * This call will always wake the TX queues. 1044 */ 1045 wl1271_handle_tx_low_watermark(wl); 1046 1047 for (i = 0; i < wl->num_tx_desc; i++) { 1048 if (wl->tx_frames[i] == NULL) 1049 continue; 1050 1051 skb = wl->tx_frames[i]; 1052 wl1271_free_tx_id(wl, i); 1053 wl1271_debug(DEBUG_TX, "freeing skb 0x%p", skb); 1054 1055 if (!wl12xx_is_dummy_packet(wl, skb)) { 1056 /* 1057 * Remove private headers before passing the skb to 1058 * mac80211 1059 */ 1060 info = IEEE80211_SKB_CB(skb); 1061 skb_pull(skb, sizeof(struct wl1271_tx_hw_descr)); 1062 if ((wl->quirks & WLCORE_QUIRK_TKIP_HEADER_SPACE) && 1063 info->control.hw_key && 1064 info->control.hw_key->cipher == 1065 WLAN_CIPHER_SUITE_TKIP) { 1066 int hdrlen = ieee80211_get_hdrlen_from_skb(skb); 1067 memmove(skb->data + WL1271_EXTRA_SPACE_TKIP, 1068 skb->data, hdrlen); 1069 skb_pull(skb, WL1271_EXTRA_SPACE_TKIP); 1070 } 1071 1072 info->status.rates[0].idx = -1; 1073 info->status.rates[0].count = 0; 1074 1075 ieee80211_tx_status_ni(wl->hw, skb); 1076 } 1077 } 1078} 1079 1080#define WL1271_TX_FLUSH_TIMEOUT 500000 1081 1082/* caller must *NOT* hold wl->mutex */ 1083void wl1271_tx_flush(struct wl1271 *wl) 1084{ 1085 unsigned long timeout, start_time; 1086 int i; 1087 start_time = jiffies; 1088 timeout = start_time + usecs_to_jiffies(WL1271_TX_FLUSH_TIMEOUT); 1089 1090 /* only one flush should be in progress, for consistent queue state */ 1091 mutex_lock(&wl->flush_mutex); 1092 1093 mutex_lock(&wl->mutex); 1094 if (wl->tx_frames_cnt == 0 && wl1271_tx_total_queue_count(wl) == 0) { 1095 mutex_unlock(&wl->mutex); 1096 goto out; 1097 } 1098 1099 wlcore_stop_queues(wl, WLCORE_QUEUE_STOP_REASON_FLUSH); 1100 1101 while (!time_after(jiffies, timeout)) { 1102 wl1271_debug(DEBUG_MAC80211, "flushing tx buffer: %d %d", 1103 wl->tx_frames_cnt, 1104 wl1271_tx_total_queue_count(wl)); 1105 1106 /* force Tx and give the driver some time to flush data */ 1107 mutex_unlock(&wl->mutex); 1108 if (wl1271_tx_total_queue_count(wl)) 1109 wl1271_tx_work(&wl->tx_work); 1110 msleep(20); 1111 mutex_lock(&wl->mutex); 1112 1113 if ((wl->tx_frames_cnt == 0) && 1114 (wl1271_tx_total_queue_count(wl) == 0)) { 1115 wl1271_debug(DEBUG_MAC80211, "tx flush took %d ms", 1116 jiffies_to_msecs(jiffies - start_time)); 1117 goto out_wake; 1118 } 1119 } 1120 1121 wl1271_warning("Unable to flush all TX buffers, " 1122 "timed out (timeout %d ms", 1123 WL1271_TX_FLUSH_TIMEOUT / 1000); 1124 1125 /* forcibly flush all Tx buffers on our queues */ 1126 for (i = 0; i < WL12XX_MAX_LINKS; i++) 1127 wl1271_tx_reset_link_queues(wl, i); 1128 1129out_wake: 1130 wlcore_wake_queues(wl, WLCORE_QUEUE_STOP_REASON_FLUSH); 1131 mutex_unlock(&wl->mutex); 1132out: 1133 mutex_unlock(&wl->flush_mutex); 1134} 1135EXPORT_SYMBOL_GPL(wl1271_tx_flush); 1136 1137u32 wl1271_tx_min_rate_get(struct wl1271 *wl, u32 rate_set) 1138{ 1139 if (WARN_ON(!rate_set)) 1140 return 0; 1141 1142 return BIT(__ffs(rate_set)); 1143} 1144EXPORT_SYMBOL_GPL(wl1271_tx_min_rate_get); 1145 1146void wlcore_stop_queue_locked(struct wl1271 *wl, u8 queue, 1147 enum wlcore_queue_stop_reason reason) 1148{ 1149 bool stopped = !!wl->queue_stop_reasons[queue]; 1150 1151 /* queue should not be stopped for this reason */ 1152 WARN_ON(test_and_set_bit(reason, &wl->queue_stop_reasons[queue])); 1153 1154 if (stopped) 1155 return; 1156 1157 ieee80211_stop_queue(wl->hw, wl1271_tx_get_mac80211_queue(queue)); 1158} 1159 1160void wlcore_stop_queue(struct wl1271 *wl, u8 queue, 1161 enum wlcore_queue_stop_reason reason) 1162{ 1163 unsigned long flags; 1164 1165 spin_lock_irqsave(&wl->wl_lock, flags); 1166 wlcore_stop_queue_locked(wl, queue, reason); 1167 spin_unlock_irqrestore(&wl->wl_lock, flags); 1168} 1169 1170void wlcore_wake_queue(struct wl1271 *wl, u8 queue, 1171 enum wlcore_queue_stop_reason reason) 1172{ 1173 unsigned long flags; 1174 1175 spin_lock_irqsave(&wl->wl_lock, flags); 1176 1177 /* queue should not be clear for this reason */ 1178 WARN_ON(!test_and_clear_bit(reason, &wl->queue_stop_reasons[queue])); 1179 1180 if (wl->queue_stop_reasons[queue]) 1181 goto out; 1182 1183 ieee80211_wake_queue(wl->hw, wl1271_tx_get_mac80211_queue(queue)); 1184 1185out: 1186 spin_unlock_irqrestore(&wl->wl_lock, flags); 1187} 1188 1189void wlcore_stop_queues(struct wl1271 *wl, 1190 enum wlcore_queue_stop_reason reason) 1191{ 1192 int i; 1193 1194 for (i = 0; i < NUM_TX_QUEUES; i++) 1195 wlcore_stop_queue(wl, i, reason); 1196} 1197EXPORT_SYMBOL_GPL(wlcore_stop_queues); 1198 1199void wlcore_wake_queues(struct wl1271 *wl, 1200 enum wlcore_queue_stop_reason reason) 1201{ 1202 int i; 1203 1204 for (i = 0; i < NUM_TX_QUEUES; i++) 1205 wlcore_wake_queue(wl, i, reason); 1206} 1207EXPORT_SYMBOL_GPL(wlcore_wake_queues); 1208 1209void wlcore_reset_stopped_queues(struct wl1271 *wl) 1210{ 1211 int i; 1212 unsigned long flags; 1213 1214 spin_lock_irqsave(&wl->wl_lock, flags); 1215 1216 for (i = 0; i < NUM_TX_QUEUES; i++) { 1217 if (!wl->queue_stop_reasons[i]) 1218 continue; 1219 1220 wl->queue_stop_reasons[i] = 0; 1221 ieee80211_wake_queue(wl->hw, 1222 wl1271_tx_get_mac80211_queue(i)); 1223 } 1224 1225 spin_unlock_irqrestore(&wl->wl_lock, flags); 1226} 1227 1228bool wlcore_is_queue_stopped_by_reason(struct wl1271 *wl, u8 queue, 1229 enum wlcore_queue_stop_reason reason) 1230{ 1231 return test_bit(reason, &wl->queue_stop_reasons[queue]); 1232} 1233 1234bool wlcore_is_queue_stopped(struct wl1271 *wl, u8 queue) 1235{ 1236 return !!wl->queue_stop_reasons[queue]; 1237} 1238