aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/qlogic
diff options
context:
space:
mode:
authorJiri Pirko <jpirko@redhat.com>2011-12-08 19:52:37 -0500
committerDavid S. Miller <davem@davemloft.net>2011-12-08 19:52:37 -0500
commit8e586137e6b63af1e881b328466ab5ffbe562510 (patch)
treeda0767e1b1361aa24bd32f485453079e31854c0c /drivers/net/ethernet/qlogic
parent7da82c06ded105bf601bfa0eafc92e84eb0ceeed (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.c10
-rw-r--r--drivers/net/ethernet/qlogic/qlge/qlge_main.c38
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);
97static int qlcnicvf_start_firmware(struct qlcnic_adapter *); 97static int qlcnicvf_start_firmware(struct qlcnic_adapter *);
98static void qlcnic_set_netdev_features(struct qlcnic_adapter *, 98static void qlcnic_set_netdev_features(struct qlcnic_adapter *,
99 struct qlcnic_esw_func_cfg *); 99 struct qlcnic_esw_func_cfg *);
100static void qlcnic_vlan_rx_add(struct net_device *, u16); 100static int qlcnic_vlan_rx_add(struct net_device *, u16);
101static void qlcnic_vlan_rx_del(struct net_device *, u16); 101static 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
738static void 738static int
739qlcnic_vlan_rx_add(struct net_device *netdev, u16 vid) 739qlcnic_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
745static void 746static int
746qlcnic_vlan_rx_del(struct net_device *netdev, u16 vid) 747qlcnic_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
754static void 756static 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
2352static void __qlge_vlan_rx_add_vid(struct ql_adapter *qdev, u16 vid) 2352static 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
2363static void qlge_vlan_rx_add_vid(struct net_device *ndev, u16 vid) 2365static 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
2378static void __qlge_vlan_rx_kill_vid(struct ql_adapter *qdev, u16 vid) 2383static 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
2389static void qlge_vlan_rx_kill_vid(struct net_device *ndev, u16 vid) 2396static 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
2404static void qlge_restore_vlan(struct ql_adapter *qdev) 2414static void qlge_restore_vlan(struct ql_adapter *qdev)