goto free_all;
        }
 
-    device_set_multi(pDevice->dev);
-
     /* init for key management */
     KeyvInitTable(pDevice,&pDevice->sKey);
        memcpy(pDevice->vnt_mgmt.abyMACAddr,
 static void device_set_multi(struct net_device *dev)
 {
        struct vnt_private *priv = netdev_priv(dev);
+       unsigned long flags;
+
+       if (priv->flags & DEVICE_FLAGS_OPENED) {
+               spin_lock_irqsave(&priv->lock, flags);
+
+               bScheduleCommand(priv, WLAN_CMD_CONFIGURE_FILTER, NULL);
+
+               spin_unlock_irqrestore(&priv->lock, flags);
+       }
+}
+
+void vnt_configure_filter(struct vnt_private *priv)
+{
+       struct net_device *dev = priv->dev;
        struct vnt_manager *mgmt = &priv->vnt_mgmt;
        struct netdev_hw_addr *ha;
        u64 mc_filter = 0;
        u8 tmp = 0;
        int rc;
 
-       spin_lock_irq(&priv->lock);
-
        rc = CONTROLnsRequestIn(priv, MESSAGE_TYPE_READ,
                MAC_REG_RCR, MESSAGE_REQUEST_MACREG, 1, &tmp);
        if (rc == 0)
 
        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO
                                "priv->byRxMode out= %x\n", priv->byRxMode);
-
-       spin_unlock_irq(&priv->lock);
 }
 
 static struct net_device_stats *device_get_stats(struct net_device *dev)
 
                s_bCommandComplete(pDevice);
                break;
 
+       case WLAN_CMD_CONFIGURE_FILTER_START:
+               vnt_configure_filter(pDevice);
+               s_bCommandComplete(pDevice);
+               break;
        default:
                s_bCommandComplete(pDevice);
                break;
                        pDevice->eCommandState = WLAN_CMD_11H_CHSW_START;
                        break;
 
+               case WLAN_CMD_CONFIGURE_FILTER:
+                       pDevice->eCommandState =
+                                               WLAN_CMD_CONFIGURE_FILTER_START;
+                       break;
+
                default:
                        break;
                }
 
     WLAN_CMD_REMOVE_ALLKEY,
     WLAN_CMD_MAC_DISPOWERSAVING,
     WLAN_CMD_11H_CHSW,
-    WLAN_CMD_RUN_AP
+    WLAN_CMD_RUN_AP,
+    WLAN_CMD_CONFIGURE_FILTER
 } CMD_CODE, *PCMD_CODE;
 
 #define CMD_Q_SIZE              32
     WLAN_CMD_REMOVE_ALLKEY_START,
     WLAN_CMD_MAC_DISPOWERSAVING_START,
     WLAN_CMD_11H_CHSW_START,
+    WLAN_CMD_CONFIGURE_FILTER_START,
     WLAN_CMD_IDLE
 } CMD_STATE, *PCMD_STATE;