root/drivers/net/ethernet/cisco/enic/enic_dev.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. enic_dev_fw_info
  2. enic_dev_stats_dump
  3. enic_dev_add_station_addr
  4. enic_dev_del_station_addr
  5. enic_dev_packet_filter
  6. enic_dev_add_addr
  7. enic_dev_del_addr
  8. enic_dev_notify_unset
  9. enic_dev_hang_notify
  10. enic_dev_set_ig_vlan_rewrite_mode
  11. enic_dev_enable
  12. enic_dev_disable
  13. enic_dev_intr_coal_timer_info
  14. enic_vlan_rx_add_vid
  15. enic_vlan_rx_kill_vid
  16. enic_dev_status_to_errno

   1 /*
   2  * Copyright 2011 Cisco Systems, Inc.  All rights reserved.
   3  *
   4  * This program is free software; you may redistribute it and/or modify
   5  * it under the terms of the GNU General Public License as published by
   6  * the Free Software Foundation; version 2 of the License.
   7  *
   8  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   9  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  10  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  11  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  12  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  13  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  14  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  15  * SOFTWARE.
  16  *
  17  */
  18 
  19 #include <linux/pci.h>
  20 #include <linux/etherdevice.h>
  21 
  22 #include "vnic_dev.h"
  23 #include "vnic_vic.h"
  24 #include "enic_res.h"
  25 #include "enic.h"
  26 #include "enic_dev.h"
  27 
  28 int enic_dev_fw_info(struct enic *enic, struct vnic_devcmd_fw_info **fw_info)
  29 {
  30         int err;
  31 
  32         spin_lock_bh(&enic->devcmd_lock);
  33         err = vnic_dev_fw_info(enic->vdev, fw_info);
  34         spin_unlock_bh(&enic->devcmd_lock);
  35 
  36         return err;
  37 }
  38 
  39 int enic_dev_stats_dump(struct enic *enic, struct vnic_stats **vstats)
  40 {
  41         int err;
  42 
  43         spin_lock_bh(&enic->devcmd_lock);
  44         err = vnic_dev_stats_dump(enic->vdev, vstats);
  45         spin_unlock_bh(&enic->devcmd_lock);
  46 
  47         return err;
  48 }
  49 
  50 int enic_dev_add_station_addr(struct enic *enic)
  51 {
  52         int err;
  53 
  54         if (!is_valid_ether_addr(enic->netdev->dev_addr))
  55                 return -EADDRNOTAVAIL;
  56 
  57         spin_lock_bh(&enic->devcmd_lock);
  58         err = vnic_dev_add_addr(enic->vdev, enic->netdev->dev_addr);
  59         spin_unlock_bh(&enic->devcmd_lock);
  60 
  61         return err;
  62 }
  63 
  64 int enic_dev_del_station_addr(struct enic *enic)
  65 {
  66         int err;
  67 
  68         if (!is_valid_ether_addr(enic->netdev->dev_addr))
  69                 return -EADDRNOTAVAIL;
  70 
  71         spin_lock_bh(&enic->devcmd_lock);
  72         err = vnic_dev_del_addr(enic->vdev, enic->netdev->dev_addr);
  73         spin_unlock_bh(&enic->devcmd_lock);
  74 
  75         return err;
  76 }
  77 
  78 int enic_dev_packet_filter(struct enic *enic, int directed, int multicast,
  79         int broadcast, int promisc, int allmulti)
  80 {
  81         int err;
  82 
  83         spin_lock_bh(&enic->devcmd_lock);
  84         err = vnic_dev_packet_filter(enic->vdev, directed,
  85                 multicast, broadcast, promisc, allmulti);
  86         spin_unlock_bh(&enic->devcmd_lock);
  87 
  88         return err;
  89 }
  90 
  91 int enic_dev_add_addr(struct enic *enic, const u8 *addr)
  92 {
  93         int err;
  94 
  95         spin_lock_bh(&enic->devcmd_lock);
  96         err = vnic_dev_add_addr(enic->vdev, addr);
  97         spin_unlock_bh(&enic->devcmd_lock);
  98 
  99         return err;
 100 }
 101 
 102 int enic_dev_del_addr(struct enic *enic, const u8 *addr)
 103 {
 104         int err;
 105 
 106         spin_lock_bh(&enic->devcmd_lock);
 107         err = vnic_dev_del_addr(enic->vdev, addr);
 108         spin_unlock_bh(&enic->devcmd_lock);
 109 
 110         return err;
 111 }
 112 
 113 int enic_dev_notify_unset(struct enic *enic)
 114 {
 115         int err;
 116 
 117         spin_lock_bh(&enic->devcmd_lock);
 118         err = vnic_dev_notify_unset(enic->vdev);
 119         spin_unlock_bh(&enic->devcmd_lock);
 120 
 121         return err;
 122 }
 123 
 124 int enic_dev_hang_notify(struct enic *enic)
 125 {
 126         int err;
 127 
 128         spin_lock_bh(&enic->devcmd_lock);
 129         err = vnic_dev_hang_notify(enic->vdev);
 130         spin_unlock_bh(&enic->devcmd_lock);
 131 
 132         return err;
 133 }
 134 
 135 int enic_dev_set_ig_vlan_rewrite_mode(struct enic *enic)
 136 {
 137         int err;
 138 
 139         spin_lock_bh(&enic->devcmd_lock);
 140         err = vnic_dev_set_ig_vlan_rewrite_mode(enic->vdev,
 141                 IG_VLAN_REWRITE_MODE_PRIORITY_TAG_DEFAULT_VLAN);
 142         spin_unlock_bh(&enic->devcmd_lock);
 143 
 144         return err;
 145 }
 146 
 147 int enic_dev_enable(struct enic *enic)
 148 {
 149         int err;
 150 
 151         spin_lock_bh(&enic->devcmd_lock);
 152         err = vnic_dev_enable_wait(enic->vdev);
 153         spin_unlock_bh(&enic->devcmd_lock);
 154 
 155         return err;
 156 }
 157 
 158 int enic_dev_disable(struct enic *enic)
 159 {
 160         int err;
 161 
 162         spin_lock_bh(&enic->devcmd_lock);
 163         err = vnic_dev_disable(enic->vdev);
 164         spin_unlock_bh(&enic->devcmd_lock);
 165 
 166         return err;
 167 }
 168 
 169 int enic_dev_intr_coal_timer_info(struct enic *enic)
 170 {
 171         int err;
 172 
 173         spin_lock_bh(&enic->devcmd_lock);
 174         err = vnic_dev_intr_coal_timer_info(enic->vdev);
 175         spin_unlock_bh(&enic->devcmd_lock);
 176 
 177         return err;
 178 }
 179 
 180 /* rtnl lock is held */
 181 int enic_vlan_rx_add_vid(struct net_device *netdev, __be16 proto, u16 vid)
 182 {
 183         struct enic *enic = netdev_priv(netdev);
 184         int err;
 185 
 186         spin_lock_bh(&enic->devcmd_lock);
 187         err = enic_add_vlan(enic, vid);
 188         spin_unlock_bh(&enic->devcmd_lock);
 189 
 190         return err;
 191 }
 192 
 193 /* rtnl lock is held */
 194 int enic_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, u16 vid)
 195 {
 196         struct enic *enic = netdev_priv(netdev);
 197         int err;
 198 
 199         spin_lock_bh(&enic->devcmd_lock);
 200         err = enic_del_vlan(enic, vid);
 201         spin_unlock_bh(&enic->devcmd_lock);
 202 
 203         return err;
 204 }
 205 
 206 int enic_dev_status_to_errno(int devcmd_status)
 207 {
 208         switch (devcmd_status) {
 209         case ERR_SUCCESS:
 210                 return 0;
 211         case ERR_EINVAL:
 212                 return -EINVAL;
 213         case ERR_EFAULT:
 214                 return -EFAULT;
 215         case ERR_EPERM:
 216                 return -EPERM;
 217         case ERR_EBUSY:
 218                 return -EBUSY;
 219         case ERR_ECMDUNKNOWN:
 220         case ERR_ENOTSUPPORTED:
 221                 return -EOPNOTSUPP;
 222         case ERR_EBADSTATE:
 223                 return -EINVAL;
 224         case ERR_ENOMEM:
 225                 return -ENOMEM;
 226         case ERR_ETIMEDOUT:
 227                 return -ETIMEDOUT;
 228         case ERR_ELINKDOWN:
 229                 return -ENETDOWN;
 230         case ERR_EINPROGRESS:
 231                 return -EINPROGRESS;
 232         case ERR_EMAXRES:
 233         default:
 234                 return (devcmd_status < 0) ? devcmd_status : -1;
 235         }
 236 }

/* [<][>][^][v][top][bottom][index][help] */