.. | .. |
---|
592 | 592 | __u8 seq_num; |
---|
593 | 593 | __u8 macid; |
---|
594 | 594 | __le16 result; |
---|
595 | | - char payload[0]; |
---|
| 595 | + char payload[]; |
---|
596 | 596 | } __packed; |
---|
597 | 597 | |
---|
598 | 598 | /* |
---|
.. | .. |
---|
806 | 806 | struct mwl8k_dma_data { |
---|
807 | 807 | __le16 fwlen; |
---|
808 | 808 | struct ieee80211_hdr wh; |
---|
809 | | - char data[0]; |
---|
| 809 | + char data[]; |
---|
810 | 810 | } __packed; |
---|
811 | 811 | |
---|
812 | 812 | /* Routines to add/remove DMA header from skb. */ |
---|
.. | .. |
---|
2240 | 2240 | dma_size = le16_to_cpu(cmd->length); |
---|
2241 | 2241 | dma_addr = pci_map_single(priv->pdev, cmd, dma_size, |
---|
2242 | 2242 | PCI_DMA_BIDIRECTIONAL); |
---|
2243 | | - if (pci_dma_mapping_error(priv->pdev, dma_addr)) |
---|
2244 | | - return -ENOMEM; |
---|
| 2243 | + if (pci_dma_mapping_error(priv->pdev, dma_addr)) { |
---|
| 2244 | + rc = -ENOMEM; |
---|
| 2245 | + goto exit; |
---|
| 2246 | + } |
---|
2245 | 2247 | |
---|
2246 | 2248 | priv->hostcmd_wait = &cmd_wait; |
---|
2247 | 2249 | iowrite32(dma_addr, regs + MWL8K_HIU_GEN_PTR); |
---|
.. | .. |
---|
2281 | 2283 | ms); |
---|
2282 | 2284 | } |
---|
2283 | 2285 | |
---|
| 2286 | +exit: |
---|
2284 | 2287 | if (bitmap) |
---|
2285 | 2288 | mwl8k_enable_bsses(hw, true, bitmap); |
---|
2286 | 2289 | |
---|
.. | .. |
---|
2666 | 2669 | struct mwl8k_cmd_pkt header; |
---|
2667 | 2670 | __le16 action; |
---|
2668 | 2671 | __le16 numaddr; |
---|
2669 | | - __u8 addr[0][ETH_ALEN]; |
---|
| 2672 | + __u8 addr[][ETH_ALEN]; |
---|
2670 | 2673 | }; |
---|
2671 | 2674 | |
---|
2672 | 2675 | #define MWL8K_ENABLE_RX_DIRECTED 0x0001 |
---|
.. | .. |
---|
2953 | 2956 | struct mwl8k_cmd_set_beacon { |
---|
2954 | 2957 | struct mwl8k_cmd_pkt header; |
---|
2955 | 2958 | __le16 beacon_len; |
---|
2956 | | - __u8 beacon[0]; |
---|
| 2959 | + __u8 beacon[]; |
---|
2957 | 2960 | }; |
---|
2958 | 2961 | |
---|
2959 | 2962 | static int mwl8k_cmd_set_beacon(struct ieee80211_hw *hw, |
---|
.. | .. |
---|
4628 | 4631 | return IRQ_HANDLED; |
---|
4629 | 4632 | } |
---|
4630 | 4633 | |
---|
4631 | | -static void mwl8k_tx_poll(unsigned long data) |
---|
| 4634 | +static void mwl8k_tx_poll(struct tasklet_struct *t) |
---|
4632 | 4635 | { |
---|
4633 | | - struct ieee80211_hw *hw = (struct ieee80211_hw *)data; |
---|
4634 | | - struct mwl8k_priv *priv = hw->priv; |
---|
| 4636 | + struct mwl8k_priv *priv = from_tasklet(priv, t, poll_tx_task); |
---|
| 4637 | + struct ieee80211_hw *hw = pci_get_drvdata(priv->pdev); |
---|
4635 | 4638 | int limit; |
---|
4636 | 4639 | int i; |
---|
4637 | 4640 | |
---|
4638 | 4641 | limit = 32; |
---|
4639 | 4642 | |
---|
4640 | | - spin_lock_bh(&priv->tx_lock); |
---|
| 4643 | + spin_lock(&priv->tx_lock); |
---|
4641 | 4644 | |
---|
4642 | 4645 | for (i = 0; i < mwl8k_tx_queues(priv); i++) |
---|
4643 | 4646 | limit -= mwl8k_txq_reclaim(hw, i, limit, 0); |
---|
.. | .. |
---|
4647 | 4650 | priv->tx_wait = NULL; |
---|
4648 | 4651 | } |
---|
4649 | 4652 | |
---|
4650 | | - spin_unlock_bh(&priv->tx_lock); |
---|
| 4653 | + spin_unlock(&priv->tx_lock); |
---|
4651 | 4654 | |
---|
4652 | 4655 | if (limit) { |
---|
4653 | 4656 | writel(~MWL8K_A2H_INT_TX_DONE, |
---|
.. | .. |
---|
4657 | 4660 | } |
---|
4658 | 4661 | } |
---|
4659 | 4662 | |
---|
4660 | | -static void mwl8k_rx_poll(unsigned long data) |
---|
| 4663 | +static void mwl8k_rx_poll(struct tasklet_struct *t) |
---|
4661 | 4664 | { |
---|
4662 | | - struct ieee80211_hw *hw = (struct ieee80211_hw *)data; |
---|
4663 | | - struct mwl8k_priv *priv = hw->priv; |
---|
| 4665 | + struct mwl8k_priv *priv = from_tasklet(priv, t, poll_rx_task); |
---|
| 4666 | + struct ieee80211_hw *hw = pci_get_drvdata(priv->pdev); |
---|
4664 | 4667 | int limit; |
---|
4665 | 4668 | |
---|
4666 | 4669 | limit = 32; |
---|
.. | .. |
---|
5518 | 5521 | rc = -EBUSY; |
---|
5519 | 5522 | break; |
---|
5520 | 5523 | } |
---|
5521 | | - ieee80211_start_tx_ba_cb_irqsafe(vif, addr, tid); |
---|
| 5524 | + rc = IEEE80211_AMPDU_TX_START_IMMEDIATE; |
---|
5522 | 5525 | break; |
---|
5523 | 5526 | case IEEE80211_AMPDU_TX_STOP_CONT: |
---|
5524 | 5527 | case IEEE80211_AMPDU_TX_STOP_FLUSH: |
---|
.. | .. |
---|
6118 | 6121 | INIT_WORK(&priv->fw_reload, mwl8k_hw_restart_work); |
---|
6119 | 6122 | |
---|
6120 | 6123 | /* TX reclaim and RX tasklets. */ |
---|
6121 | | - tasklet_init(&priv->poll_tx_task, mwl8k_tx_poll, (unsigned long)hw); |
---|
| 6124 | + tasklet_setup(&priv->poll_tx_task, mwl8k_tx_poll); |
---|
6122 | 6125 | tasklet_disable(&priv->poll_tx_task); |
---|
6123 | | - tasklet_init(&priv->poll_rx_task, mwl8k_rx_poll, (unsigned long)hw); |
---|
| 6126 | + tasklet_setup(&priv->poll_rx_task, mwl8k_rx_poll); |
---|
6124 | 6127 | tasklet_disable(&priv->poll_rx_task); |
---|
6125 | 6128 | |
---|
6126 | 6129 | /* Power management cookie */ |
---|