Skip to content

Commit

Permalink
drivers/net: enic: Add an interface for USNIC to interact with firmware
Browse files Browse the repository at this point in the history
This patch adds an interface for USNIC to proxy firmware commands
through ENIC.

Signed-off-by: Neel Patel <neepatel@cisco.com>
Signed-off-by: Nishank Trivedi <nistrive@cisco.com>
Signed-off-by: Christian Benvenuti <benve@cisco.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Neel Patel authored and davem330 committed Aug 20, 2013
1 parent 92e2b46 commit 0b03856
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 1 deletion.
2 changes: 1 addition & 1 deletion drivers/net/ethernet/cisco/enic/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ obj-$(CONFIG_ENIC) := enic.o

enic-y := enic_main.o vnic_cq.o vnic_intr.o vnic_wq.o \
enic_res.o enic_dev.o enic_pp.o vnic_dev.o vnic_rq.o vnic_vic.o \
enic_ethtool.o
enic_ethtool.o enic_api.o

1 change: 1 addition & 0 deletions drivers/net/ethernet/cisco/enic/enic.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ struct enic {
#ifdef CONFIG_PCI_IOV
u16 num_vfs;
#endif
spinlock_t enic_api_lock;
struct enic_port_profile *pp;

/* work queue cache line section */
Expand Down
48 changes: 48 additions & 0 deletions drivers/net/ethernet/cisco/enic/enic_api.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/**
* Copyright 2013 Cisco Systems, Inc. All rights reserved.
*
* This program is free software; you may redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*/

#include <linux/netdevice.h>
#include <linux/spinlock.h>

#include "vnic_dev.h"
#include "vnic_devcmd.h"

#include "enic_res.h"
#include "enic.h"
#include "enic_api.h"

int enic_api_devcmd_proxy_by_index(struct net_device *netdev, int vf,
enum vnic_devcmd_cmd cmd, u64 *a0, u64 *a1, int wait)
{
int err;
struct enic *enic = netdev_priv(netdev);
struct vnic_dev *vdev = enic->vdev;

spin_lock(&enic->enic_api_lock);
spin_lock(&enic->devcmd_lock);

vnic_dev_cmd_proxy_by_index_start(vdev, vf);
err = vnic_dev_cmd(vdev, cmd, a0, a1, wait);
vnic_dev_cmd_proxy_end(vdev);

spin_unlock(&enic->devcmd_lock);
spin_unlock(&enic->enic_api_lock);

return err;
}
EXPORT_SYMBOL(enic_api_devcmd_proxy_by_index);
30 changes: 30 additions & 0 deletions drivers/net/ethernet/cisco/enic/enic_api.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* Copyright 2013 Cisco Systems, Inc. All rights reserved.
*
* This program is free software; you may redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*/

#ifndef __ENIC_API_H__
#define __ENIC_API_H__

#include <linux/netdevice.h>

#include "vnic_dev.h"
#include "vnic_devcmd.h"

int enic_api_devcmd_proxy_by_index(struct net_device *netdev, int vf,
enum vnic_devcmd_cmd cmd, u64 *a0, u64 *a1, int wait);

#endif
3 changes: 3 additions & 0 deletions drivers/net/ethernet/cisco/enic/enic_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1733,6 +1733,7 @@ static void enic_reset(struct work_struct *work)

rtnl_lock();

spin_lock(&enic->enic_api_lock);
enic_dev_hang_notify(enic);
enic_stop(enic->netdev);
enic_dev_hang_reset(enic);
Expand All @@ -1741,6 +1742,7 @@ static void enic_reset(struct work_struct *work)
enic_set_rss_nic_cfg(enic);
enic_dev_set_ig_vlan_rewrite_mode(enic);
enic_open(enic->netdev);
spin_unlock(&enic->enic_api_lock);

rtnl_unlock();
}
Expand Down Expand Up @@ -2153,6 +2155,7 @@ static int enic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
*/

spin_lock_init(&enic->devcmd_lock);
spin_lock_init(&enic->enic_api_lock);

/*
* Set ingress vlan rewrite mode before vnic initialization
Expand Down

0 comments on commit 0b03856

Please sign in to comment.