101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman/* 229046f9b1e36f6e3332ce2d8e366005fd177b37aVasanthy Kolluri * Copyright 2008-2010 Cisco Systems, Inc. All rights reserved. 301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * Copyright 2007 Nuova Systems, Inc. All rights reserved. 401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * 501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * This program is free software; you may redistribute it and/or modify 601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * it under the terms of the GNU General Public License as published by 701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * the Free Software Foundation; version 2 of the License. 801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * 901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 1001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 1201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 1301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 1401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 1501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 1601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * SOFTWARE. 1701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * 1801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman */ 1901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman 2001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#ifndef _ENIC_H_ 2101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define _ENIC_H_ 2201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman 2301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#include "vnic_enet.h" 2401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#include "vnic_dev.h" 2501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#include "vnic_wq.h" 2601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#include "vnic_rq.h" 2701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#include "vnic_cq.h" 2801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#include "vnic_intr.h" 2901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#include "vnic_stats.h" 306ba9cdc09678d6925c205ef0b0bd374e31589ecfScott Feldman#include "vnic_nic.h" 31717258ba4b3ecca9c7c0ef2b76d7aa5800242badVasanthy Kolluri#include "vnic_rss.h" 3201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman 3301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define DRV_NAME "enic" 34641cb85e68945878d520d5fc3c2dc64aa1dda868Vasanthy Kolluri#define DRV_DESCRIPTION "Cisco VIC Ethernet NIC Driver" 35b8622cbd58f345d48f683d881abe3037c60aa673Roopa Prabhu#define DRV_VERSION "2.1.1.39" 364dce2396b329ef6a14b40c5416d6f76005097b0dRoopa Prabhu#define DRV_COPYRIGHT "Copyright 2008-2011 Cisco Systems, Inc" 3701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman 3827e6c7d33835e7f347cdfb5025766b7d9a6596d1Scott Feldman#define ENIC_BARS_MAX 6 3927e6c7d33835e7f347cdfb5025766b7d9a6596d1Scott Feldman 401cbb1a61d59b7552e1e3fde485d8af5699fe16e0Vasanthy Kolluri#define ENIC_WQ_MAX 1 4163da93d932af04cf80507b110afe894a8a8d1f90Neel Patel#define ENIC_RQ_MAX 8 426ba9cdc09678d6925c205ef0b0bd374e31589ecfScott Feldman#define ENIC_CQ_MAX (ENIC_WQ_MAX + ENIC_RQ_MAX) 436ba9cdc09678d6925c205ef0b0bd374e31589ecfScott Feldman#define ENIC_INTR_MAX (ENIC_CQ_MAX + 2) 446ba9cdc09678d6925c205ef0b0bd374e31589ecfScott Feldman 4501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldmanstruct enic_msix_entry { 4601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman int requested; 4701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman char devname[IFNAMSIZ]; 4801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman irqreturn_t (*isr)(int, void *); 4901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman void *devid; 5001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman}; 5101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman 528749b427f213e14303dfef4c1b9770f05f67916dRoopa Prabhu/* priv_flags */ 538749b427f213e14303dfef4c1b9770f05f67916dRoopa Prabhu#define ENIC_SRIOV_ENABLED (1 << 0) 548749b427f213e14303dfef4c1b9770f05f67916dRoopa Prabhu 558749b427f213e14303dfef4c1b9770f05f67916dRoopa Prabhu/* enic port profile set flags */ 564dce2396b329ef6a14b40c5416d6f76005097b0dRoopa Prabhu#define ENIC_PORT_REQUEST_APPLIED (1 << 0) 5708f382ebb8a9efb898840aa74cf55148c7a98af6Scott Feldman#define ENIC_SET_REQUEST (1 << 1) 5808f382ebb8a9efb898840aa74cf55148c7a98af6Scott Feldman#define ENIC_SET_NAME (1 << 2) 5908f382ebb8a9efb898840aa74cf55148c7a98af6Scott Feldman#define ENIC_SET_INSTANCE (1 << 3) 6008f382ebb8a9efb898840aa74cf55148c7a98af6Scott Feldman#define ENIC_SET_HOST (1 << 4) 6108f382ebb8a9efb898840aa74cf55148c7a98af6Scott Feldman 62f8bd909183acffad68780b10c1cdf36161cfd5d1Scott Feldmanstruct enic_port_profile { 6308f382ebb8a9efb898840aa74cf55148c7a98af6Scott Feldman u32 set; 64f8bd909183acffad68780b10c1cdf36161cfd5d1Scott Feldman u8 request; 65f8bd909183acffad68780b10c1cdf36161cfd5d1Scott Feldman char name[PORT_PROFILE_MAX]; 66f8bd909183acffad68780b10c1cdf36161cfd5d1Scott Feldman u8 instance_uuid[PORT_UUID_MAX]; 67f8bd909183acffad68780b10c1cdf36161cfd5d1Scott Feldman u8 host_uuid[PORT_UUID_MAX]; 680b1c00fc3e9f8d658e0632da7e7ee57bed779ec7Roopa Prabhu u8 vf_mac[ETH_ALEN]; 6929639059a0122d95b34b5475bd9fee3910b401a3Roopa Prabhu u8 mac_addr[ETH_ALEN]; 70f8bd909183acffad68780b10c1cdf36161cfd5d1Scott Feldman}; 71f8bd909183acffad68780b10c1cdf36161cfd5d1Scott Feldman 7201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman/* Per-instance private data structure */ 7301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldmanstruct enic { 7401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman struct net_device *netdev; 7501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman struct pci_dev *pdev; 7601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman struct vnic_enet_config config; 7727e6c7d33835e7f347cdfb5025766b7d9a6596d1Scott Feldman struct vnic_dev_bar bar[ENIC_BARS_MAX]; 7801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman struct vnic_dev *vdev; 7901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman struct timer_list notify_timer; 8001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman struct work_struct reset; 81c97c894dc7bcae28d0308dbcd010185079de4a28Roopa Prabhu struct work_struct change_mtu_work; 82717258ba4b3ecca9c7c0ef2b76d7aa5800242badVasanthy Kolluri struct msix_entry msix_entry[ENIC_INTR_MAX]; 83717258ba4b3ecca9c7c0ef2b76d7aa5800242badVasanthy Kolluri struct enic_msix_entry msix[ENIC_INTR_MAX]; 8401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman u32 msg_enable; 8501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman spinlock_t devcmd_lock; 8601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman u8 mac_addr[ETH_ALEN]; 8701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman u8 mc_addr[ENIC_MULTICAST_PERFECT_FILTERS][ETH_ALEN]; 88319d7e847355ec7e03d3c865917b2b0e2e592fb8Roopa Prabhu u8 uc_addr[ENIC_UNICAST_PERFECT_FILTERS][ETH_ALEN]; 899959a18556c73ebf2936b8df183ea7b41f38d933Scott Feldman unsigned int flags; 908749b427f213e14303dfef4c1b9770f05f67916dRoopa Prabhu unsigned int priv_flags; 9101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman unsigned int mc_count; 92319d7e847355ec7e03d3c865917b2b0e2e592fb8Roopa Prabhu unsigned int uc_count; 9301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman u32 port_mtu; 947c8445991172cc17eaca9f7de0a300c02caaa49dScott Feldman u32 rx_coalesce_usecs; 957c8445991172cc17eaca9f7de0a300c02caaa49dScott Feldman u32 tx_coalesce_usecs; 968749b427f213e14303dfef4c1b9770f05f67916dRoopa Prabhu#ifdef CONFIG_PCI_IOV 97413708bbaf5c85c4c8a264145f7d6c3afcd97f99Dan Carpenter u16 num_vfs; 988749b427f213e14303dfef4c1b9770f05f67916dRoopa Prabhu#endif 993f192795cf1a0098df7bd655f7a72eee26bd63c3Roopa Prabhu struct enic_port_profile *pp; 10001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman 10101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman /* work queue cache line section */ 1026ba9cdc09678d6925c205ef0b0bd374e31589ecfScott Feldman ____cacheline_aligned struct vnic_wq wq[ENIC_WQ_MAX]; 1036ba9cdc09678d6925c205ef0b0bd374e31589ecfScott Feldman spinlock_t wq_lock[ENIC_WQ_MAX]; 10401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman unsigned int wq_count; 1051825aca667196f75b193e2d509ea96ffdc8db0caVasanthy Kolluri u16 loop_enable; 1061825aca667196f75b193e2d509ea96ffdc8db0caVasanthy Kolluri u16 loop_tag; 10701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman 10801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman /* receive queue cache line section */ 1096ba9cdc09678d6925c205ef0b0bd374e31589ecfScott Feldman ____cacheline_aligned struct vnic_rq rq[ENIC_RQ_MAX]; 11001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman unsigned int rq_count; 111350991e12ac1ac407850169a0d65f522a7fd029eScott Feldman u64 rq_truncated_pkts; 112bd9fb1a44a5c52a1c322ebacd08f6b7416a40a86Scott Feldman u64 rq_bad_fcs; 113717258ba4b3ecca9c7c0ef2b76d7aa5800242badVasanthy Kolluri struct napi_struct napi[ENIC_RQ_MAX]; 11401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman 11501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman /* interrupt resource cache line section */ 1166ba9cdc09678d6925c205ef0b0bd374e31589ecfScott Feldman ____cacheline_aligned struct vnic_intr intr[ENIC_INTR_MAX]; 11701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman unsigned int intr_count; 11801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman u32 __iomem *legacy_pba; /* memory-mapped */ 11901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman 12001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman /* completion queue cache line section */ 12101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman ____cacheline_aligned struct vnic_cq cq[ENIC_CQ_MAX]; 12201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman unsigned int cq_count; 12301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman}; 12401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman 125a7a79debcca02fbf908c0abed8d8fb25d0e51b48Vasanthy Kolluristatic inline struct device *enic_get_dev(struct enic *enic) 126a7a79debcca02fbf908c0abed8d8fb25d0e51b48Vasanthy Kolluri{ 127a7a79debcca02fbf908c0abed8d8fb25d0e51b48Vasanthy Kolluri return &(enic->pdev->dev); 128a7a79debcca02fbf908c0abed8d8fb25d0e51b48Vasanthy Kolluri} 129a7a79debcca02fbf908c0abed8d8fb25d0e51b48Vasanthy Kolluri 130b3abfbd2951102f5f5b8fe251a672e5223ac972bRoopa Prabhuvoid enic_reset_addr_lists(struct enic *enic); 1318749b427f213e14303dfef4c1b9770f05f67916dRoopa Prabhuint enic_sriov_enabled(struct enic *enic); 132889d13f53cf9d741398637b6e8e578c65bb792e8Roopa Prabhuint enic_is_valid_vf(struct enic *enic, int vf); 1333f192795cf1a0098df7bd655f7a72eee26bd63c3Roopa Prabhuint enic_is_dynamic(struct enic *enic); 134b3abfbd2951102f5f5b8fe251a672e5223ac972bRoopa Prabhu 13501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#endif /* _ENIC_H_ */ 136