Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 203683
b: refs/heads/master
c: 64600ea
h: refs/heads/master
i:
  203681: be94696
  203679: 49853ab
v: v3
  • Loading branch information
Ajit Khaparde authored and David S. Miller committed Jul 23, 2010
1 parent bbab5ca commit 9dd2b72
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9cd9000bdee9131ffd2ce92ca6ef9c86467edd25
refs/heads/master: 64600ea5f389858e183d3739776f4667265cc77f
9 changes: 7 additions & 2 deletions trunk/drivers/net/benet/be.h
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,12 @@ struct be_rx_obj {
struct be_rx_page_info page_info_tbl[RX_Q_LEN];
};

struct be_vf_cfg {
unsigned char vf_mac_addr[ETH_ALEN];
u32 vf_if_handle;
u32 vf_pmac_id;
};

#define BE_NUM_MSIX_VECTORS 2 /* 1 each for Tx and Rx */
#define BE_INVALID_PMAC_ID 0xffffffff
struct be_adapter {
Expand Down Expand Up @@ -289,8 +295,7 @@ struct be_adapter {
struct completion flash_compl;

bool sriov_enabled;
u32 vf_if_handle[BE_MAX_VF];
u32 vf_pmac_id[BE_MAX_VF];
struct be_vf_cfg vf_cfg[BE_MAX_VF];
u8 base_eq_id;
u8 is_virtfn;
};
Expand Down
51 changes: 40 additions & 11 deletions trunk/drivers/net/benet/be_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -656,18 +656,44 @@ static int be_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
if (!is_valid_ether_addr(mac) || (vf >= num_vfs))
return -EINVAL;

if (adapter->vf_pmac_id[vf] != BE_INVALID_PMAC_ID)
status = be_cmd_pmac_del(adapter, adapter->vf_if_handle[vf],
adapter->vf_pmac_id[vf]);
if (adapter->vf_cfg[vf].vf_pmac_id != BE_INVALID_PMAC_ID)
status = be_cmd_pmac_del(adapter,
adapter->vf_cfg[vf].vf_if_handle,
adapter->vf_cfg[vf].vf_pmac_id);

status = be_cmd_pmac_add(adapter, mac, adapter->vf_if_handle[vf],
&adapter->vf_pmac_id[vf]);
if (!status)
status = be_cmd_pmac_add(adapter, mac,
adapter->vf_cfg[vf].vf_if_handle,
&adapter->vf_cfg[vf].vf_pmac_id);

if (status)
dev_err(&adapter->pdev->dev, "MAC %pM set on VF %d Failed\n",
mac, vf);
else
memcpy(adapter->vf_cfg[vf].vf_mac_addr, mac, ETH_ALEN);

return status;
}

static int be_get_vf_config(struct net_device *netdev, int vf,
struct ifla_vf_info *vi)
{
struct be_adapter *adapter = netdev_priv(netdev);

if (!adapter->sriov_enabled)
return -EPERM;

if (vf >= num_vfs)
return -EINVAL;

vi->vf = vf;
vi->tx_rate = 0;
vi->vlan = 0;
vi->qos = 0;
memcpy(&vi->mac, adapter->vf_cfg[vf].vf_mac_addr, ETH_ALEN);

return 0;
}

static void be_rx_rate_update(struct be_adapter *adapter)
{
struct be_drvr_stats *stats = drvr_stats(adapter);
Expand Down Expand Up @@ -1904,14 +1930,15 @@ static int be_setup(struct be_adapter *adapter)
cap_flags = en_flags = BE_IF_FLAGS_UNTAGGED
| BE_IF_FLAGS_BROADCAST;
status = be_cmd_if_create(adapter, cap_flags, en_flags,
mac, true, &adapter->vf_if_handle[vf],
mac, true,
&adapter->vf_cfg[vf].vf_if_handle,
NULL, vf+1);
if (status) {
dev_err(&adapter->pdev->dev,
"Interface Create failed for VF %d\n", vf);
goto if_destroy;
}
adapter->vf_pmac_id[vf] = BE_INVALID_PMAC_ID;
adapter->vf_cfg[vf].vf_pmac_id = BE_INVALID_PMAC_ID;
vf++;
}
} else if (!be_physfn(adapter)) {
Expand Down Expand Up @@ -1945,8 +1972,9 @@ static int be_setup(struct be_adapter *adapter)
be_tx_queues_destroy(adapter);
if_destroy:
for (vf = 0; vf < num_vfs; vf++)
if (adapter->vf_if_handle[vf])
be_cmd_if_destroy(adapter, adapter->vf_if_handle[vf]);
if (adapter->vf_cfg[vf].vf_if_handle)
be_cmd_if_destroy(adapter,
adapter->vf_cfg[vf].vf_if_handle);
be_cmd_if_destroy(adapter, adapter->if_handle);
do_none:
return status;
Expand Down Expand Up @@ -2189,7 +2217,8 @@ static struct net_device_ops be_netdev_ops = {
.ndo_vlan_rx_register = be_vlan_register,
.ndo_vlan_rx_add_vid = be_vlan_add_vid,
.ndo_vlan_rx_kill_vid = be_vlan_rem_vid,
.ndo_set_vf_mac = be_set_vf_mac
.ndo_set_vf_mac = be_set_vf_mac,
.ndo_get_vf_config = be_get_vf_config
};

static void be_netdev_init(struct net_device *netdev)
Expand Down

0 comments on commit 9dd2b72

Please sign in to comment.