p54: upgrade memrecord to p54_tx_info
authorChristian Lamparter <chunkeey@web.de>
Fri, 9 Jan 2009 20:06:06 +0000 (21:06 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 29 Jan 2009 21:00:19 +0000 (16:00 -0500)
mac80211 reserves 24 bytes in skb->cb for the driver.
So far, we only used them to keep track of used and free device memory.
But p54spi will need a slice of it, as well as the stuck frame detection.

Signed-off-by: Christian Lamparter <chunkeey@web.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/p54/p54.h
drivers/net/wireless/p54/p54common.c
drivers/net/wireless/p54/p54common.h

index ce933387792613a6b4b1dc0b1e2e43aa9ff40696..a06c2a676dfefd95d0d6634b6fee7d01b40ad5e1 100644 (file)
@@ -44,6 +44,16 @@ enum p54_control_frame_types {
        P54_CONTROL_TYPE_BT_OPTIONS = 35
 };
 
+/* provide 16 bytes for the transport back-end */
+#define P54_TX_INFO_DATA_SIZE          16
+
+/* stored in ieee80211_tx_info's rate_driver_data */
+struct p54_tx_info {
+       u32 start_addr;
+       u32 end_addr;
+       void *data[P54_TX_INFO_DATA_SIZE / sizeof(void *)];
+};
+
 #define P54_MAX_CTRL_FRAME_LEN         0x1000
 
 #define P54_HDR_FLAG_CONTROL           BIT(15)
index c6dcf98aad3e0402a190ea03ba263d846ac26cee..85aff1685a1027badfd78c04affde1671db49b8a 100644 (file)
@@ -700,7 +700,7 @@ void p54_free_skb(struct ieee80211_hw *dev, struct sk_buff *skb)
 {
        struct p54_common *priv = dev->priv;
        struct ieee80211_tx_info *info;
-       struct memrecord *range;
+       struct p54_tx_info *range;
        unsigned long flags;
        u32 freed = 0, last_addr = priv->rx_start;
 
@@ -718,18 +718,18 @@ void p54_free_skb(struct ieee80211_hw *dev, struct sk_buff *skb)
        range = (void *)info->rate_driver_data;
        if (skb->prev != (struct sk_buff *)&priv->tx_queue) {
                struct ieee80211_tx_info *ni;
-               struct memrecord *mr;
+               struct p54_tx_info *mr;
 
                ni = IEEE80211_SKB_CB(skb->prev);
-               mr = (struct memrecord *)ni->rate_driver_data;
+               mr = (struct p54_tx_info *)ni->rate_driver_data;
                last_addr = mr->end_addr;
        }
        if (skb->next != (struct sk_buff *)&priv->tx_queue) {
                struct ieee80211_tx_info *ni;
-               struct memrecord *mr;
+               struct p54_tx_info *mr;
 
                ni = IEEE80211_SKB_CB(skb->next);
-               mr = (struct memrecord *)ni->rate_driver_data;
+               mr = (struct p54_tx_info *)ni->rate_driver_data;
                freed = mr->start_addr - last_addr;
        } else
                freed = priv->rx_end - last_addr;
@@ -771,7 +771,7 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb)
        struct p54_frame_sent *payload = (struct p54_frame_sent *) hdr->data;
        struct sk_buff *entry = (struct sk_buff *) priv->tx_queue.next;
        u32 addr = le32_to_cpu(hdr->req_id) - priv->headroom;
-       struct memrecord *range = NULL;
+       struct p54_tx_info *range = NULL;
        u32 freed = 0;
        u32 last_addr = priv->rx_start;
        unsigned long flags;
@@ -793,10 +793,10 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb)
 
                if (entry->next != (struct sk_buff *)&priv->tx_queue) {
                        struct ieee80211_tx_info *ni;
-                       struct memrecord *mr;
+                       struct p54_tx_info *mr;
 
                        ni = IEEE80211_SKB_CB(entry->next);
-                       mr = (struct memrecord *)ni->rate_driver_data;
+                       mr = (struct p54_tx_info *)ni->rate_driver_data;
                        freed = mr->start_addr - last_addr;
                } else
                        freed = priv->rx_end - last_addr;
@@ -1013,8 +1013,8 @@ EXPORT_SYMBOL_GPL(p54_rx);
  * can find some unused memory to upload our packets to. However, data that we
  * want the card to TX needs to stay intact until the card has told us that
  * it is done with it. This function finds empty places we can upload to and
- * marks allocated areas as reserved if necessary. p54_rx_frame_sent frees
- * allocated areas.
+ * marks allocated areas as reserved if necessary. p54_rx_frame_sent or
+ * p54_free_skb frees allocated areas.
  */
 static int p54_assign_address(struct ieee80211_hw *dev, struct sk_buff *skb,
                               struct p54_hdr *data, u32 len)
@@ -1023,7 +1023,7 @@ static int p54_assign_address(struct ieee80211_hw *dev, struct sk_buff *skb,
        struct sk_buff *entry = priv->tx_queue.next;
        struct sk_buff *target_skb = NULL;
        struct ieee80211_tx_info *info;
-       struct memrecord *range;
+       struct p54_tx_info *range;
        u32 last_addr = priv->rx_start;
        u32 largest_hole = 0;
        u32 target_addr = priv->rx_start;
index 6207323848bd7f416f63f96e6877be74a85e67ad..bcfb75a4d6bfd12934a806df715739adf971cd82 100644 (file)
@@ -247,12 +247,6 @@ struct pda_country {
 #define PDR_COUNTRY_CERT_IODOOR_OUTDOOR        0x30
 #define PDR_COUNTRY_CERT_INDEX         0x0F
 
-/* stored in skb->cb */
-struct memrecord {
-       u32 start_addr;
-       u32 end_addr;
-};
-
 struct p54_eeprom_lm86 {
        union {
                struct {