diff options
Diffstat (limited to 'drivers/net/wireless/p54/p54common.c')
-rw-r--r-- | drivers/net/wireless/p54/p54common.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/net/wireless/p54/p54common.c b/drivers/net/wireless/p54/p54common.c index 81a9756254fb..65be5eca2340 100644 --- a/drivers/net/wireless/p54/p54common.c +++ b/drivers/net/wireless/p54/p54common.c | |||
@@ -548,7 +548,7 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb) | |||
548 | spin_lock_irqsave(&priv->tx_queue.lock, flags); | 548 | spin_lock_irqsave(&priv->tx_queue.lock, flags); |
549 | while (entry != (struct sk_buff *)&priv->tx_queue) { | 549 | while (entry != (struct sk_buff *)&priv->tx_queue) { |
550 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(entry); | 550 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(entry); |
551 | range = (void *)info->driver_data; | 551 | range = (void *)info->rate_driver_data; |
552 | if (range->start_addr == addr) { | 552 | if (range->start_addr == addr) { |
553 | struct p54_control_hdr *entry_hdr; | 553 | struct p54_control_hdr *entry_hdr; |
554 | struct p54_tx_control_allocdata *entry_data; | 554 | struct p54_tx_control_allocdata *entry_data; |
@@ -559,7 +559,7 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb) | |||
559 | struct memrecord *mr; | 559 | struct memrecord *mr; |
560 | 560 | ||
561 | ni = IEEE80211_SKB_CB(entry->next); | 561 | ni = IEEE80211_SKB_CB(entry->next); |
562 | mr = (struct memrecord *)ni->driver_data; | 562 | mr = (struct memrecord *)ni->rate_driver_data; |
563 | freed = mr->start_addr - last_addr; | 563 | freed = mr->start_addr - last_addr; |
564 | } else | 564 | } else |
565 | freed = priv->rx_end - last_addr; | 565 | freed = priv->rx_end - last_addr; |
@@ -568,7 +568,7 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb) | |||
568 | __skb_unlink(entry, &priv->tx_queue); | 568 | __skb_unlink(entry, &priv->tx_queue); |
569 | spin_unlock_irqrestore(&priv->tx_queue.lock, flags); | 569 | spin_unlock_irqrestore(&priv->tx_queue.lock, flags); |
570 | 570 | ||
571 | memset(&info->status, 0, sizeof(info->status)); | 571 | ieee80211_tx_info_clear_status(info); |
572 | entry_hdr = (struct p54_control_hdr *) entry->data; | 572 | entry_hdr = (struct p54_control_hdr *) entry->data; |
573 | entry_data = (struct p54_tx_control_allocdata *) entry_hdr->data; | 573 | entry_data = (struct p54_tx_control_allocdata *) entry_hdr->data; |
574 | if ((entry_hdr->magic1 & cpu_to_le16(0x4000)) != 0) | 574 | if ((entry_hdr->magic1 & cpu_to_le16(0x4000)) != 0) |
@@ -578,10 +578,8 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb) | |||
578 | if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) { | 578 | if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) { |
579 | if (!(payload->status & 0x01)) | 579 | if (!(payload->status & 0x01)) |
580 | info->flags |= IEEE80211_TX_STAT_ACK; | 580 | info->flags |= IEEE80211_TX_STAT_ACK; |
581 | else | ||
582 | info->status.excessive_retries = 1; | ||
583 | } | 581 | } |
584 | info->status.retry_count = payload->retries - 1; | 582 | info->status.rates[0].count = payload->retries; |
585 | info->status.ack_signal = p54_rssi_to_dbm(dev, | 583 | info->status.ack_signal = p54_rssi_to_dbm(dev, |
586 | le16_to_cpu(payload->ack_rssi)); | 584 | le16_to_cpu(payload->ack_rssi)); |
587 | skb_pull(entry, sizeof(*hdr) + pad + sizeof(*entry_data)); | 585 | skb_pull(entry, sizeof(*hdr) + pad + sizeof(*entry_data)); |
@@ -699,7 +697,7 @@ static void p54_assign_address(struct ieee80211_hw *dev, struct sk_buff *skb, | |||
699 | while (left--) { | 697 | while (left--) { |
700 | u32 hole_size; | 698 | u32 hole_size; |
701 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(entry); | 699 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(entry); |
702 | struct memrecord *range = (void *)info->driver_data; | 700 | struct memrecord *range = (void *)info->rate_driver_data; |
703 | hole_size = range->start_addr - last_addr; | 701 | hole_size = range->start_addr - last_addr; |
704 | if (!target_skb && hole_size >= len) { | 702 | if (!target_skb && hole_size >= len) { |
705 | target_skb = entry->prev; | 703 | target_skb = entry->prev; |
@@ -715,7 +713,7 @@ static void p54_assign_address(struct ieee80211_hw *dev, struct sk_buff *skb, | |||
715 | largest_hole = max(largest_hole, priv->rx_end - last_addr - len); | 713 | largest_hole = max(largest_hole, priv->rx_end - last_addr - len); |
716 | if (!skb_queue_empty(&priv->tx_queue)) { | 714 | if (!skb_queue_empty(&priv->tx_queue)) { |
717 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(target_skb); | 715 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(target_skb); |
718 | struct memrecord *range = (void *)info->driver_data; | 716 | struct memrecord *range = (void *)info->rate_driver_data; |
719 | target_addr = range->end_addr; | 717 | target_addr = range->end_addr; |
720 | } | 718 | } |
721 | } else | 719 | } else |
@@ -723,7 +721,7 @@ static void p54_assign_address(struct ieee80211_hw *dev, struct sk_buff *skb, | |||
723 | 721 | ||
724 | if (skb) { | 722 | if (skb) { |
725 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | 723 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); |
726 | struct memrecord *range = (void *)info->driver_data; | 724 | struct memrecord *range = (void *)info->rate_driver_data; |
727 | range->start_addr = target_addr; | 725 | range->start_addr = target_addr; |
728 | range->end_addr = target_addr + len; | 726 | range->end_addr = target_addr + len; |
729 | __skb_queue_after(&priv->tx_queue, target_skb, skb); | 727 | __skb_queue_after(&priv->tx_queue, target_skb, skb); |
@@ -806,6 +804,7 @@ static int p54_tx(struct ieee80211_hw *dev, struct sk_buff *skb) | |||
806 | size_t padding, len; | 804 | size_t padding, len; |
807 | u8 rate; | 805 | u8 rate; |
808 | u8 cts_rate = 0x20; | 806 | u8 cts_rate = 0x20; |
807 | u8 rc_flags; | ||
809 | 808 | ||
810 | current_queue = &priv->tx_stats[skb_get_queue_mapping(skb) + 4]; | 809 | current_queue = &priv->tx_stats[skb_get_queue_mapping(skb) + 4]; |
811 | if (unlikely(current_queue->len > current_queue->limit)) | 810 | if (unlikely(current_queue->len > current_queue->limit)) |
@@ -828,18 +827,19 @@ static int p54_tx(struct ieee80211_hw *dev, struct sk_buff *skb) | |||
828 | hdr->magic1 = cpu_to_le16(0x0010); | 827 | hdr->magic1 = cpu_to_le16(0x0010); |
829 | hdr->len = cpu_to_le16(len); | 828 | hdr->len = cpu_to_le16(len); |
830 | hdr->type = (info->flags & IEEE80211_TX_CTL_NO_ACK) ? 0 : cpu_to_le16(1); | 829 | hdr->type = (info->flags & IEEE80211_TX_CTL_NO_ACK) ? 0 : cpu_to_le16(1); |
831 | hdr->retry1 = hdr->retry2 = info->control.retry_limit; | 830 | hdr->retry1 = hdr->retry2 = info->control.rates[0].count; |
832 | 831 | ||
833 | /* TODO: add support for alternate retry TX rates */ | 832 | /* TODO: add support for alternate retry TX rates */ |
834 | rate = ieee80211_get_tx_rate(dev, info)->hw_value; | 833 | rate = ieee80211_get_tx_rate(dev, info)->hw_value; |
835 | if (info->flags & IEEE80211_TX_CTL_SHORT_PREAMBLE) { | 834 | rc_flags = info->control.rates[0].flags; |
835 | if (rc_flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) { | ||
836 | rate |= 0x10; | 836 | rate |= 0x10; |
837 | cts_rate |= 0x10; | 837 | cts_rate |= 0x10; |
838 | } | 838 | } |
839 | if (info->flags & IEEE80211_TX_CTL_USE_RTS_CTS) { | 839 | if (rc_flags & IEEE80211_TX_RC_USE_RTS_CTS) { |
840 | rate |= 0x40; | 840 | rate |= 0x40; |
841 | cts_rate |= ieee80211_get_rts_cts_rate(dev, info)->hw_value; | 841 | cts_rate |= ieee80211_get_rts_cts_rate(dev, info)->hw_value; |
842 | } else if (info->flags & IEEE80211_TX_CTL_USE_CTS_PROTECT) { | 842 | } else if (rc_flags & IEEE80211_TX_RC_USE_CTS_PROTECT) { |
843 | rate |= 0x20; | 843 | rate |= 0x20; |
844 | cts_rate |= ieee80211_get_rts_cts_rate(dev, info)->hw_value; | 844 | cts_rate |= ieee80211_get_rts_cts_rate(dev, info)->hw_value; |
845 | } | 845 | } |