1f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho/* 2f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * This file is part of wl1271 3f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * 4f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * Copyright (C) 1998-2009 Texas Instruments. All rights reserved. 5f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * Copyright (C) 2009 Nokia Corporation 6f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * 7f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * Contact: Luciano Coelho <luciano.coelho@nokia.com> 8f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * 9f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * This program is free software; you can redistribute it and/or 10f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * modify it under the terms of the GNU General Public License 11f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * version 2 as published by the Free Software Foundation. 12f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * 13f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * This program is distributed in the hope that it will be useful, but 14f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * WITHOUT ANY WARRANTY; without even the implied warranty of 15f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * General Public License for more details. 17f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * 18f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * You should have received a copy of the GNU General Public License 19f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * along with this program; if not, write to the Free Software 20f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 21f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * 02110-1301 USA 22f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho * 23f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho */ 24f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 2500d201001bd4e8a46e3d03c970abcb72256c368bShahar Levi#ifndef __TX_H__ 2600d201001bd4e8a46e3d03c970abcb72256c368bShahar Levi#define __TX_H__ 27f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 28e9eb8cbe77139470651c858b8b7a3d20d332cf47Guy Eilam#define TX_HW_BLOCK_SPARE_DEFAULT 1 295c9417f1656b0f415f4be5a7cd7195ecadd7dd1aJuuso Oikarinen#define TX_HW_BLOCK_SIZE 252 30f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 31f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_MGMT_PKT_LIFETIME_TU 2000 32beb6c880720073c233633c45792a4bb5d5fedbd5Arik Nemtsov#define TX_HW_AP_MODE_PKT_LIFETIME_TU 8000 33f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 34f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_SAVE_RETRIES BIT(0) 35f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_HEADER_PAD BIT(1) 36f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_SESSION_COUNTER (BIT(2) | BIT(3) | BIT(4)) 37f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_RATE_POLICY (BIT(5) | BIT(6) | BIT(7) | \ 38f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho BIT(8) | BIT(9)) 39f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_LAST_WORD_PAD (BIT(10) | BIT(11)) 40f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_TX_CMPLT_REQ BIT(12) 41ae47c45fd02fdf88d57adc370e78e7a01e2bfcbcShahar Levi#define TX_HW_ATTR_TX_DUMMY_REQ BIT(13) 42f4f57943f265d80fe5f0fedf6964f8056e753cf3Eliad Peller#define TX_HW_ATTR_HOST_ENCRYPT BIT(14) 43ae47c45fd02fdf88d57adc370e78e7a01e2bfcbcShahar Levi 44f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_OFST_SAVE_RETRIES 0 45f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_OFST_HEADER_PAD 1 46f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_OFST_SESSION_COUNTER 2 47f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_OFST_RATE_POLICY 5 48f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_OFST_LAST_WORD_PAD 10 49f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_ATTR_OFST_TX_CMPLT_REQ 12 50f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 51f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_RESULT_QUEUE_LEN 16 52f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define TX_HW_RESULT_QUEUE_LEN_MASK 0xf 53f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 54f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#define WL1271_TX_ALIGN_TO 4 555ec8a448e0e978103bc5ca7136084b5e2b36989eEliad Peller#define WL1271_EXTRA_SPACE_TKIP 4 565ec8a448e0e978103bc5ca7136084b5e2b36989eEliad Peller#define WL1271_EXTRA_SPACE_AES 8 575ec8a448e0e978103bc5ca7136084b5e2b36989eEliad Peller#define WL1271_EXTRA_SPACE_MAX 8 58f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 59ae47c45fd02fdf88d57adc370e78e7a01e2bfcbcShahar Levi/* Used for management frames and dummy packets */ 60ae47c45fd02fdf88d57adc370e78e7a01e2bfcbcShahar Levi#define WL1271_TID_MGMT 7 61ae47c45fd02fdf88d57adc370e78e7a01e2bfcbcShahar Levi 6248a61477bdc04896bd96d259388a0c42a7019943Shahar Levistruct wl127x_tx_mem { 6348a61477bdc04896bd96d259388a0c42a7019943Shahar Levi /* 6448a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * Number of extra memory blocks to allocate for this packet 6548a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * in addition to the number of blocks derived from the packet 6648a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * length. 6748a61477bdc04896bd96d259388a0c42a7019943Shahar Levi */ 6848a61477bdc04896bd96d259388a0c42a7019943Shahar Levi u8 extra_blocks; 6948a61477bdc04896bd96d259388a0c42a7019943Shahar Levi /* 7048a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * Total number of memory blocks allocated by the host for 7148a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * this packet. Must be equal or greater than the actual 7248a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * blocks number allocated by HW. 7348a61477bdc04896bd96d259388a0c42a7019943Shahar Levi */ 7448a61477bdc04896bd96d259388a0c42a7019943Shahar Levi u8 total_mem_blocks; 7548a61477bdc04896bd96d259388a0c42a7019943Shahar Levi} __packed; 7648a61477bdc04896bd96d259388a0c42a7019943Shahar Levi 7748a61477bdc04896bd96d259388a0c42a7019943Shahar Levistruct wl128x_tx_mem { 7848a61477bdc04896bd96d259388a0c42a7019943Shahar Levi /* 7948a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * Total number of memory blocks allocated by the host for 8048a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * this packet. 8148a61477bdc04896bd96d259388a0c42a7019943Shahar Levi */ 8248a61477bdc04896bd96d259388a0c42a7019943Shahar Levi u8 total_mem_blocks; 8348a61477bdc04896bd96d259388a0c42a7019943Shahar Levi /* 8448a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * Number of extra bytes, at the end of the frame. the host 8548a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * uses this padding to complete each frame to integer number 8648a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * of SDIO blocks. 8748a61477bdc04896bd96d259388a0c42a7019943Shahar Levi */ 8848a61477bdc04896bd96d259388a0c42a7019943Shahar Levi u8 extra_bytes; 8948a61477bdc04896bd96d259388a0c42a7019943Shahar Levi} __packed; 9048a61477bdc04896bd96d259388a0c42a7019943Shahar Levi 910da13da767cd568c1fe2a7b5b936e86e521b5ae7Ido Yariv/* 920da13da767cd568c1fe2a7b5b936e86e521b5ae7Ido Yariv * On wl128x based devices, when TX packets are aggregated, each packet 930da13da767cd568c1fe2a7b5b936e86e521b5ae7Ido Yariv * size must be aligned to the SDIO block size. The maximum block size 940da13da767cd568c1fe2a7b5b936e86e521b5ae7Ido Yariv * is bounded by the type of the padded bytes field that is sent to the 950da13da767cd568c1fe2a7b5b936e86e521b5ae7Ido Yariv * FW. Currently the type is u8, so the maximum block size is 256 bytes. 960da13da767cd568c1fe2a7b5b936e86e521b5ae7Ido Yariv */ 970da13da767cd568c1fe2a7b5b936e86e521b5ae7Ido Yariv#define WL12XX_BUS_BLOCK_SIZE min(512u, \ 980da13da767cd568c1fe2a7b5b936e86e521b5ae7Ido Yariv (1u << (8 * sizeof(((struct wl128x_tx_mem *) 0)->extra_bytes)))) 990da13da767cd568c1fe2a7b5b936e86e521b5ae7Ido Yariv 100f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelhostruct wl1271_tx_hw_descr { 101f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* Length of packet in words, including descriptor+header+data */ 102d0f63b202146f3281800ee44823740c8bbf38f11Luciano Coelho __le16 length; 10348a61477bdc04896bd96d259388a0c42a7019943Shahar Levi union { 10448a61477bdc04896bd96d259388a0c42a7019943Shahar Levi struct wl127x_tx_mem wl127x_mem; 10548a61477bdc04896bd96d259388a0c42a7019943Shahar Levi struct wl128x_tx_mem wl128x_mem; 10648a61477bdc04896bd96d259388a0c42a7019943Shahar Levi } __packed; 107f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* Device time (in us) when the packet arrived to the driver */ 108d0f63b202146f3281800ee44823740c8bbf38f11Luciano Coelho __le32 start_time; 10948a61477bdc04896bd96d259388a0c42a7019943Shahar Levi /* 11048a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * Max delay in TUs until transmission. The last device time the 11148a61477bdc04896bd96d259388a0c42a7019943Shahar Levi * packet can be transmitted is: start_time + (1024 * life_time) 11248a61477bdc04896bd96d259388a0c42a7019943Shahar Levi */ 113d0f63b202146f3281800ee44823740c8bbf38f11Luciano Coelho __le16 life_time; 114f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* Bitwise fields - see TX_ATTR... definitions above. */ 115d0f63b202146f3281800ee44823740c8bbf38f11Luciano Coelho __le16 tx_attr; 116f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* Packet identifier used also in the Tx-Result. */ 117f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho u8 id; 118f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* The packet TID value (as User-Priority) */ 119f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho u8 tid; 12079b122dc51797b650201f21360481a0450e9b7e4Eliad Peller /* host link ID (HLID) */ 12179b122dc51797b650201f21360481a0450e9b7e4Eliad Peller u8 hlid; 122f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho u8 reserved; 123ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 124f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 125f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelhoenum wl1271_tx_hw_res_status { 126f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho TX_SUCCESS = 0, 127f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho TX_HW_ERROR = 1, 128f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho TX_DISABLED = 2, 129f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho TX_RETRY_EXCEEDED = 3, 130f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho TX_TIMEOUT = 4, 131f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho TX_KEY_NOT_FOUND = 5, 132f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho TX_PEER_NOT_FOUND = 6, 13379b122dc51797b650201f21360481a0450e9b7e4Eliad Peller TX_SESSION_MISMATCH = 7, 13479b122dc51797b650201f21360481a0450e9b7e4Eliad Peller TX_LINK_NOT_VALID = 8, 135f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho}; 136f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 137f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelhostruct wl1271_tx_hw_res_descr { 138f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* Packet Identifier - same value used in the Tx descriptor.*/ 139f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho u8 id; 140f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* The status of the transmission, indicating success or one of 141f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho several possible reasons for failure. */ 142f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho u8 status; 143f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* Total air access duration including all retrys and overheads.*/ 144d0f63b202146f3281800ee44823740c8bbf38f11Luciano Coelho __le16 medium_usage; 145f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* The time passed from host xfer to Tx-complete.*/ 146d0f63b202146f3281800ee44823740c8bbf38f11Luciano Coelho __le32 fw_handling_time; 147f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* Total media delay 148f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho (from 1st EDCA AIFS counter until TX Complete). */ 149d0f63b202146f3281800ee44823740c8bbf38f11Luciano Coelho __le32 medium_delay; 150f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* LS-byte of last TKIP seq-num (saved per AC for recovery). */ 151b992c68228a3ccdf73ea4f57519e1663839a9cbeOz Krakowski u8 tx_security_sequence_number_lsb; 152f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* Retry count - number of transmissions without successful ACK.*/ 153f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho u8 ack_failures; 154f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* The rate that succeeded getting ACK 155f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho (Valid only if status=SUCCESS). */ 156f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho u8 rate_class_index; 157f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho /* for 4-byte alignment. */ 158f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho u8 spare; 159ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 160f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 161f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelhostruct wl1271_tx_hw_res_if { 162d0f63b202146f3281800ee44823740c8bbf38f11Luciano Coelho __le32 tx_result_fw_counter; 163d0f63b202146f3281800ee44823740c8bbf38f11Luciano Coelho __le32 tx_result_host_counter; 164f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho struct wl1271_tx_hw_res_descr tx_results_queue[TX_HW_RESULT_QUEUE_LEN]; 165ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 166f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 167c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valostatic inline int wl1271_tx_get_queue(int queue) 168c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo{ 169c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo switch (queue) { 170c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo case 0: 171c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo return CONF_TX_AC_VO; 172c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo case 1: 173c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo return CONF_TX_AC_VI; 174c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo case 2: 175c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo return CONF_TX_AC_BE; 176c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo case 3: 177c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo return CONF_TX_AC_BK; 178c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo default: 179c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo return CONF_TX_AC_BE; 180c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo } 181c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo} 182c6999d831ab9ae5e368b20f3bc11b0ca9c17a7ecKalle Valo 183708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsovstatic inline int wl1271_tx_get_mac80211_queue(int queue) 184708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov{ 185708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov switch (queue) { 186708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov case CONF_TX_AC_VO: 187708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov return 0; 188708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov case CONF_TX_AC_VI: 189708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov return 1; 190708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov case CONF_TX_AC_BE: 191708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov return 2; 192708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov case CONF_TX_AC_BK: 193708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov return 3; 194708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov default: 195708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov return 2; 196708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov } 197708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov} 198708bb3cf58a9bc90f3171ba64f30601f690e5aaaArik Nemtsov 199f1a46384ad568f72c11edbe2a3ec284bf32f2dbdArik Nemtsovstatic inline int wl1271_tx_total_queue_count(struct wl1271 *wl) 200f1a46384ad568f72c11edbe2a3ec284bf32f2dbdArik Nemtsov{ 201f1a46384ad568f72c11edbe2a3ec284bf32f2dbdArik Nemtsov int i, count = 0; 202f1a46384ad568f72c11edbe2a3ec284bf32f2dbdArik Nemtsov 203f1a46384ad568f72c11edbe2a3ec284bf32f2dbdArik Nemtsov for (i = 0; i < NUM_TX_QUEUES; i++) 204f1a46384ad568f72c11edbe2a3ec284bf32f2dbdArik Nemtsov count += wl->tx_queue_count[i]; 205f1a46384ad568f72c11edbe2a3ec284bf32f2dbdArik Nemtsov 206f1a46384ad568f72c11edbe2a3ec284bf32f2dbdArik Nemtsov return count; 207f1a46384ad568f72c11edbe2a3ec284bf32f2dbdArik Nemtsov} 208f1a46384ad568f72c11edbe2a3ec284bf32f2dbdArik Nemtsov 209f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelhovoid wl1271_tx_work(struct work_struct *work); 210a32d0cdfcb7e5d41f210e13cbc78dc86a5a85a08Eliad Pellervoid wl1271_tx_work_locked(struct wl1271 *wl); 211ffb591cd0e32d817bdbd359dead3baa770b999f8Juuso Oikarinenvoid wl1271_tx_complete(struct wl1271 *wl); 212d6a3cc2ef962ad4392a2401cae513a18a6d35099Eliad Pellervoid wl12xx_tx_reset_wlvif(struct wl1271 *wl, struct wl12xx_vif *wlvif); 213d6a3cc2ef962ad4392a2401cae513a18a6d35099Eliad Pellervoid wl12xx_tx_reset(struct wl1271 *wl, bool reset_tx_queues); 214f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelhovoid wl1271_tx_flush(struct wl1271 *wl); 2156a2de93b2553c2e9a72997370534993c85c1eee6Teemu Paasikiviu8 wl1271_rate_to_idx(int rate, enum ieee80211_band band); 216af7fbb28efff0c0d8fc0852ad6622e5437a7611eEliad Pelleru32 wl1271_tx_enabled_rates_get(struct wl1271 *wl, u32 rate_set, 217af7fbb28efff0c0d8fc0852ad6622e5437a7611eEliad Peller enum ieee80211_band rate_band); 218af7fbb28efff0c0d8fc0852ad6622e5437a7611eEliad Pelleru32 wl1271_tx_min_rate_get(struct wl1271 *wl, u32 rate_set); 219a8ab39a4b588e8523be2fa75671bdc9612d3467aEliad Pelleru8 wl12xx_tx_get_hlid_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif, 220a8ab39a4b588e8523be2fa75671bdc9612d3467aEliad Peller struct sk_buff *skb); 221d6a3cc2ef962ad4392a2401cae513a18a6d35099Eliad Pelleru8 wl12xx_tx_get_hlid(struct wl1271 *wl, struct wl12xx_vif *wlvif, 222d6a3cc2ef962ad4392a2401cae513a18a6d35099Eliad Peller struct sk_buff *skb); 223a8c0ddb5ba2889e1e11a033ccbadfc600f236a91Arik Nemtsovvoid wl1271_tx_reset_link_queues(struct wl1271 *wl, u8 hlid); 224a8c0ddb5ba2889e1e11a033ccbadfc600f236a91Arik Nemtsovvoid wl1271_handle_tx_low_watermark(struct wl1271 *wl); 225f8e0af6b8732b47c2531a280753d29a4ca2d114bArik Nemtsovbool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb); 2269eb599e9c62dcfd4efece1936c385381b366b684Eliad Pellervoid wl12xx_rearm_rx_streaming(struct wl1271 *wl, unsigned long *active_hlids); 227f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho 228f1acea9a9d48174f982e14a7a488b208d39d825fArik Nemtsov/* from main.c */ 229c7ffb902cca655e4d6bdda4156407008573bb214Eliad Pellervoid wl1271_free_sta(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 hlid); 23055df5afb13718cda49128fa5985556df91d07765Arik Nemtsovvoid wl12xx_rearm_tx_watchdog_locked(struct wl1271 *wl); 231f1acea9a9d48174f982e14a7a488b208d39d825fArik Nemtsov 232f5fc0f86b02afef1119b523623b4cde41475bc8cLuciano Coelho#endif 233