]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/net/wireless/rndis_wlan.c
rndis_host: allow rndis_wlan to see all indications
[net-next-2.6.git] / drivers / net / wireless / rndis_wlan.c
index f6dcbb168b78f1acba3ec741a1f2f131af03ac7d..6b6452b0e8c4388bd8928370ff846dfed99b0a5b 100644 (file)
@@ -2211,13 +2211,32 @@ static void rndis_wlan_set_multicast_list(struct net_device *dev)
        queue_work(priv->workqueue, &priv->work);
 }
 
-static void rndis_wlan_link_change(struct usbnet *usbdev, int state)
+static void rndis_wlan_indication(struct usbnet *usbdev, void *ind, int buflen)
 {
        struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
+       struct rndis_indicate *msg = ind;
 
        /* queue work to avoid recursive calls into rndis_command */
-       set_bit(state ? WORK_LINK_UP : WORK_LINK_DOWN, &priv->work_pending);
-       queue_work(priv->workqueue, &priv->work);
+       switch (msg->status) {
+       case RNDIS_STATUS_MEDIA_CONNECT:
+               devinfo(usbdev, "media connect");
+
+               set_bit(WORK_LINK_UP, &priv->work_pending);
+               queue_work(priv->workqueue, &priv->work);
+               break;
+
+       case RNDIS_STATUS_MEDIA_DISCONNECT:
+               devinfo(usbdev, "media disconnect");
+
+               set_bit(WORK_LINK_DOWN, &priv->work_pending);
+               queue_work(priv->workqueue, &priv->work);
+               break;
+
+       default:
+               devinfo(usbdev, "indication: 0x%08x",
+                               le32_to_cpu(msg->status));
+               break;
+       }
 }
 
 
@@ -2666,7 +2685,7 @@ static const struct driver_info   bcm4320b_info = {
        .reset =        rndis_wlan_reset,
        .stop =         rndis_wlan_stop,
        .early_init =   bcm4320b_early_init,
-       .link_change =  rndis_wlan_link_change,
+       .indication =   rndis_wlan_indication,
 };
 
 static const struct driver_info        bcm4320a_info = {
@@ -2681,7 +2700,7 @@ static const struct driver_info   bcm4320a_info = {
        .reset =        rndis_wlan_reset,
        .stop =         rndis_wlan_stop,
        .early_init =   bcm4320a_early_init,
-       .link_change =  rndis_wlan_link_change,
+       .indication =   rndis_wlan_indication,
 };
 
 static const struct driver_info rndis_wlan_info = {
@@ -2696,7 +2715,7 @@ static const struct driver_info rndis_wlan_info = {
        .reset =        rndis_wlan_reset,
        .stop =         rndis_wlan_stop,
        .early_init =   bcm4320a_early_init,
-       .link_change =  rndis_wlan_link_change,
+       .indication =   rndis_wlan_indication,
 };
 
 /*-------------------------------------------------------------------------*/