|
@@ -2349,56 +2349,66 @@ static int qlge_set_features(struct net_device *ndev,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void __qlge_vlan_rx_add_vid(struct ql_adapter *qdev, u16 vid)
|
|
|
+static int __qlge_vlan_rx_add_vid(struct ql_adapter *qdev, u16 vid)
|
|
|
{
|
|
|
u32 enable_bit = MAC_ADDR_E;
|
|
|
+ int err;
|
|
|
|
|
|
- if (ql_set_mac_addr_reg
|
|
|
- (qdev, (u8 *) &enable_bit, MAC_ADDR_TYPE_VLAN, vid)) {
|
|
|
+ err = ql_set_mac_addr_reg(qdev, (u8 *) &enable_bit,
|
|
|
+ MAC_ADDR_TYPE_VLAN, vid);
|
|
|
+ if (err)
|
|
|
netif_err(qdev, ifup, qdev->ndev,
|
|
|
"Failed to init vlan address.\n");
|
|
|
- }
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
-static void qlge_vlan_rx_add_vid(struct net_device *ndev, u16 vid)
|
|
|
+static int qlge_vlan_rx_add_vid(struct net_device *ndev, u16 vid)
|
|
|
{
|
|
|
struct ql_adapter *qdev = netdev_priv(ndev);
|
|
|
int status;
|
|
|
+ int err;
|
|
|
|
|
|
status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
|
|
|
if (status)
|
|
|
- return;
|
|
|
+ return status;
|
|
|
|
|
|
- __qlge_vlan_rx_add_vid(qdev, vid);
|
|
|
+ err = __qlge_vlan_rx_add_vid(qdev, vid);
|
|
|
set_bit(vid, qdev->active_vlans);
|
|
|
|
|
|
ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
|
|
|
+
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
-static void __qlge_vlan_rx_kill_vid(struct ql_adapter *qdev, u16 vid)
|
|
|
+static int __qlge_vlan_rx_kill_vid(struct ql_adapter *qdev, u16 vid)
|
|
|
{
|
|
|
u32 enable_bit = 0;
|
|
|
+ int err;
|
|
|
|
|
|
- if (ql_set_mac_addr_reg
|
|
|
- (qdev, (u8 *) &enable_bit, MAC_ADDR_TYPE_VLAN, vid)) {
|
|
|
+ err = ql_set_mac_addr_reg(qdev, (u8 *) &enable_bit,
|
|
|
+ MAC_ADDR_TYPE_VLAN, vid);
|
|
|
+ if (err)
|
|
|
netif_err(qdev, ifup, qdev->ndev,
|
|
|
"Failed to clear vlan address.\n");
|
|
|
- }
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
-static void qlge_vlan_rx_kill_vid(struct net_device *ndev, u16 vid)
|
|
|
+static int qlge_vlan_rx_kill_vid(struct net_device *ndev, u16 vid)
|
|
|
{
|
|
|
struct ql_adapter *qdev = netdev_priv(ndev);
|
|
|
int status;
|
|
|
+ int err;
|
|
|
|
|
|
status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
|
|
|
if (status)
|
|
|
- return;
|
|
|
+ return status;
|
|
|
|
|
|
- __qlge_vlan_rx_kill_vid(qdev, vid);
|
|
|
+ err = __qlge_vlan_rx_kill_vid(qdev, vid);
|
|
|
clear_bit(vid, qdev->active_vlans);
|
|
|
|
|
|
ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
|
|
|
+
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
static void qlge_restore_vlan(struct ql_adapter *qdev)
|