diff options
author | Jiri Pirko <jpirko@redhat.com> | 2011-12-08 19:52:37 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-12-08 19:52:37 -0500 |
commit | 8e586137e6b63af1e881b328466ab5ffbe562510 (patch) | |
tree | da0767e1b1361aa24bd32f485453079e31854c0c /drivers/net/ethernet/qlogic | |
parent | 7da82c06ded105bf601bfa0eafc92e84eb0ceeed (diff) |
net: make vlan ndo_vlan_rx_[add/kill]_vid return error value
Let caller know the result of adding/removing vlan id to/from vlan
filter.
In some drivers I make those functions to just return 0. But in those
where there is able to see if hw setup went correctly, return value is
set appropriately.
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/qlogic')
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 10 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlge/qlge_main.c | 38 |
2 files changed, 30 insertions, 18 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c index 823f845ddc04..69b8e4ef14d9 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | |||
@@ -97,8 +97,8 @@ static int qlcnicvf_config_bridged_mode(struct qlcnic_adapter *, u32); | |||
97 | static int qlcnicvf_start_firmware(struct qlcnic_adapter *); | 97 | static int qlcnicvf_start_firmware(struct qlcnic_adapter *); |
98 | static void qlcnic_set_netdev_features(struct qlcnic_adapter *, | 98 | static void qlcnic_set_netdev_features(struct qlcnic_adapter *, |
99 | struct qlcnic_esw_func_cfg *); | 99 | struct qlcnic_esw_func_cfg *); |
100 | static void qlcnic_vlan_rx_add(struct net_device *, u16); | 100 | static int qlcnic_vlan_rx_add(struct net_device *, u16); |
101 | static void qlcnic_vlan_rx_del(struct net_device *, u16); | 101 | static int qlcnic_vlan_rx_del(struct net_device *, u16); |
102 | 102 | ||
103 | /* PCI Device ID Table */ | 103 | /* PCI Device ID Table */ |
104 | #define ENTRY(device) \ | 104 | #define ENTRY(device) \ |
@@ -735,20 +735,22 @@ qlcnic_set_vlan_config(struct qlcnic_adapter *adapter, | |||
735 | adapter->pvid = 0; | 735 | adapter->pvid = 0; |
736 | } | 736 | } |
737 | 737 | ||
738 | static void | 738 | static int |
739 | qlcnic_vlan_rx_add(struct net_device *netdev, u16 vid) | 739 | qlcnic_vlan_rx_add(struct net_device *netdev, u16 vid) |
740 | { | 740 | { |
741 | struct qlcnic_adapter *adapter = netdev_priv(netdev); | 741 | struct qlcnic_adapter *adapter = netdev_priv(netdev); |
742 | set_bit(vid, adapter->vlans); | 742 | set_bit(vid, adapter->vlans); |
743 | return 0; | ||
743 | } | 744 | } |
744 | 745 | ||
745 | static void | 746 | static int |
746 | qlcnic_vlan_rx_del(struct net_device *netdev, u16 vid) | 747 | qlcnic_vlan_rx_del(struct net_device *netdev, u16 vid) |
747 | { | 748 | { |
748 | struct qlcnic_adapter *adapter = netdev_priv(netdev); | 749 | struct qlcnic_adapter *adapter = netdev_priv(netdev); |
749 | 750 | ||
750 | qlcnic_restore_indev_addr(netdev, NETDEV_DOWN); | 751 | qlcnic_restore_indev_addr(netdev, NETDEV_DOWN); |
751 | clear_bit(vid, adapter->vlans); | 752 | clear_bit(vid, adapter->vlans); |
753 | return 0; | ||
752 | } | 754 | } |
753 | 755 | ||
754 | static void | 756 | static void |
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c index 1ce4e08037b8..b54898737284 100644 --- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c +++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c | |||
@@ -2349,56 +2349,66 @@ static int qlge_set_features(struct net_device *ndev, | |||
2349 | return 0; | 2349 | return 0; |
2350 | } | 2350 | } |
2351 | 2351 | ||
2352 | static void __qlge_vlan_rx_add_vid(struct ql_adapter *qdev, u16 vid) | 2352 | static int __qlge_vlan_rx_add_vid(struct ql_adapter *qdev, u16 vid) |
2353 | { | 2353 | { |
2354 | u32 enable_bit = MAC_ADDR_E; | 2354 | u32 enable_bit = MAC_ADDR_E; |
2355 | int err; | ||
2355 | 2356 | ||
2356 | if (ql_set_mac_addr_reg | 2357 | err = ql_set_mac_addr_reg(qdev, (u8 *) &enable_bit, |
2357 | (qdev, (u8 *) &enable_bit, MAC_ADDR_TYPE_VLAN, vid)) { | 2358 | MAC_ADDR_TYPE_VLAN, vid); |
2359 | if (err) | ||
2358 | netif_err(qdev, ifup, qdev->ndev, | 2360 | netif_err(qdev, ifup, qdev->ndev, |
2359 | "Failed to init vlan address.\n"); | 2361 | "Failed to init vlan address.\n"); |
2360 | } | 2362 | return err; |
2361 | } | 2363 | } |
2362 | 2364 | ||
2363 | static void qlge_vlan_rx_add_vid(struct net_device *ndev, u16 vid) | 2365 | static int qlge_vlan_rx_add_vid(struct net_device *ndev, u16 vid) |
2364 | { | 2366 | { |
2365 | struct ql_adapter *qdev = netdev_priv(ndev); | 2367 | struct ql_adapter *qdev = netdev_priv(ndev); |
2366 | int status; | 2368 | int status; |
2369 | int err; | ||
2367 | 2370 | ||
2368 | status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK); | 2371 | status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK); |
2369 | if (status) | 2372 | if (status) |
2370 | return; | 2373 | return status; |
2371 | 2374 | ||
2372 | __qlge_vlan_rx_add_vid(qdev, vid); | 2375 | err = __qlge_vlan_rx_add_vid(qdev, vid); |
2373 | set_bit(vid, qdev->active_vlans); | 2376 | set_bit(vid, qdev->active_vlans); |
2374 | 2377 | ||
2375 | ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK); | 2378 | ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK); |
2379 | |||
2380 | return err; | ||
2376 | } | 2381 | } |
2377 | 2382 | ||
2378 | static void __qlge_vlan_rx_kill_vid(struct ql_adapter *qdev, u16 vid) | 2383 | static int __qlge_vlan_rx_kill_vid(struct ql_adapter *qdev, u16 vid) |
2379 | { | 2384 | { |
2380 | u32 enable_bit = 0; | 2385 | u32 enable_bit = 0; |
2386 | int err; | ||
2381 | 2387 | ||
2382 | if (ql_set_mac_addr_reg | 2388 | err = ql_set_mac_addr_reg(qdev, (u8 *) &enable_bit, |
2383 | (qdev, (u8 *) &enable_bit, MAC_ADDR_TYPE_VLAN, vid)) { | 2389 | MAC_ADDR_TYPE_VLAN, vid); |
2390 | if (err) | ||
2384 | netif_err(qdev, ifup, qdev->ndev, | 2391 | netif_err(qdev, ifup, qdev->ndev, |
2385 | "Failed to clear vlan address.\n"); | 2392 | "Failed to clear vlan address.\n"); |
2386 | } | 2393 | return err; |
2387 | } | 2394 | } |
2388 | 2395 | ||
2389 | static void qlge_vlan_rx_kill_vid(struct net_device *ndev, u16 vid) | 2396 | static int qlge_vlan_rx_kill_vid(struct net_device *ndev, u16 vid) |
2390 | { | 2397 | { |
2391 | struct ql_adapter *qdev = netdev_priv(ndev); | 2398 | struct ql_adapter *qdev = netdev_priv(ndev); |
2392 | int status; | 2399 | int status; |
2400 | int err; | ||
2393 | 2401 | ||
2394 | status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK); | 2402 | status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK); |
2395 | if (status) | 2403 | if (status) |
2396 | return; | 2404 | return status; |
2397 | 2405 | ||
2398 | __qlge_vlan_rx_kill_vid(qdev, vid); | 2406 | err = __qlge_vlan_rx_kill_vid(qdev, vid); |
2399 | clear_bit(vid, qdev->active_vlans); | 2407 | clear_bit(vid, qdev->active_vlans); |
2400 | 2408 | ||
2401 | ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK); | 2409 | ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK); |
2410 | |||
2411 | return err; | ||
2402 | } | 2412 | } |
2403 | 2413 | ||
2404 | static void qlge_restore_vlan(struct ql_adapter *qdev) | 2414 | static void qlge_restore_vlan(struct ql_adapter *qdev) |