]> err.no Git - linux-2.6/blobdiff - drivers/net/wireless/libertas/rx.c
iwlwifi: rename 4965 to AGN
[linux-2.6] / drivers / net / wireless / libertas / rx.c
index 6332fd451a1ed6a5404bc442380b0e661709d5b9..5749f22b296f90969b6580df2ae505629892762d 100644 (file)
@@ -145,17 +145,17 @@ int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *skb)
        struct net_device *dev = priv->dev;
        struct rxpackethdr *p_rx_pkt;
        struct rxpd *p_rx_pd;
-
        int hdrchop;
        struct ethhdr *p_ethhdr;
-
        const u8 rfc1042_eth_hdr[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 };
 
        lbs_deb_enter(LBS_DEB_RX);
 
+       BUG_ON(!skb);
+
        skb->ip_summed = CHECKSUM_NONE;
 
-       if (priv->monitormode != LBS_MONITOR_OFF)
+       if (priv->monitormode)
                return process_rxed_802_11_packet(priv, skb);
 
        p_rx_pkt = (struct rxpackethdr *) skb->data;
@@ -237,7 +237,7 @@ int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *skb)
        /* Take the data rate from the rxpd structure
         * only if the rate is auto
         */
-       if (priv->auto_rate)
+       if (priv->enablehwauto)
                priv->cur_rate = lbs_fw_index_to_data_rate(p_rx_pd->rx_rate);
 
        lbs_compute_rssi(priv, p_rx_pd);
@@ -247,7 +247,10 @@ int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *skb)
        priv->stats.rx_packets++;
 
        skb->protocol = eth_type_trans(skb, dev);
-       netif_rx(skb);
+       if (in_interrupt())
+               netif_rx(skb);
+       else
+               netif_rx_ni(skb);
 
        ret = 0;
 done:
@@ -380,7 +383,7 @@ static int process_rxed_802_11_packet(struct lbs_private *priv,
        /* Take the data rate from the rxpd structure
         * only if the rate is auto
         */
-       if (priv->auto_rate)
+       if (priv->enablehwauto)
                priv->cur_rate = lbs_fw_index_to_data_rate(prxpd->rx_rate);
 
        lbs_compute_rssi(priv, prxpd);