Page MenuHomeFreeBSD

D17544.id49123.diff
No OneTemporary

D17544.id49123.diff

Index: sys/conf/files.amd64
===================================================================
--- sys/conf/files.amd64
+++ sys/conf/files.amd64
@@ -271,9 +271,9 @@
compile-with "${NORMAL_C} -I$S/dev/ixl"
dev/ixl/ixl_pf_i2c.c optional ixl pci \
compile-with "${NORMAL_C} -I$S/dev/ixl"
-dev/ixl/if_ixlv.c optional iavf pci \
+dev/ixl/if_iavf.c optional iavf pci \
compile-with "${NORMAL_C} -I$S/dev/ixl"
-dev/ixl/ixlvc.c optional iavf pci \
+dev/ixl/iavf_vc.c optional iavf pci \
compile-with "${NORMAL_C} -I$S/dev/ixl"
dev/ixl/ixl_txrx.c optional ixl pci | iavf pci \
compile-with "${NORMAL_C} -I$S/dev/ixl"
Index: sys/dev/ixl/iavf.h
===================================================================
--- sys/dev/ixl/iavf.h
+++ sys/dev/ixl/iavf.h
@@ -33,40 +33,40 @@
/*$FreeBSD$*/
-#ifndef _IXLV_H_
-#define _IXLV_H_
+#ifndef _IAVF_H_
+#define _IAVF_H_
#include "ixl.h"
-#define IXLV_AQ_MAX_ERR 200
-#define IXLV_MAX_FILTERS 128
-#define IXLV_MAX_QUEUES 16
-#define IXLV_AQ_TIMEOUT (1 * hz)
+#define IAVF_AQ_MAX_ERR 200
+#define IAVF_MAX_FILTERS 128
+#define IAVF_MAX_QUEUES 16
+#define IAVF_AQ_TIMEOUT (1 * hz)
-#define IXLV_FLAG_AQ_ENABLE_QUEUES (u32)(1 << 0)
-#define IXLV_FLAG_AQ_DISABLE_QUEUES (u32)(1 << 1)
-#define IXLV_FLAG_AQ_ADD_MAC_FILTER (u32)(1 << 2)
-#define IXLV_FLAG_AQ_ADD_VLAN_FILTER (u32)(1 << 3)
-#define IXLV_FLAG_AQ_DEL_MAC_FILTER (u32)(1 << 4)
-#define IXLV_FLAG_AQ_DEL_VLAN_FILTER (u32)(1 << 5)
-#define IXLV_FLAG_AQ_CONFIGURE_QUEUES (u32)(1 << 6)
-#define IXLV_FLAG_AQ_MAP_VECTORS (u32)(1 << 7)
-#define IXLV_FLAG_AQ_HANDLE_RESET (u32)(1 << 8)
-#define IXLV_FLAG_AQ_CONFIGURE_PROMISC (u32)(1 << 9)
-#define IXLV_FLAG_AQ_GET_STATS (u32)(1 << 10)
-#define IXLV_FLAG_AQ_CONFIG_RSS_KEY (u32)(1 << 11)
-#define IXLV_FLAG_AQ_SET_RSS_HENA (u32)(1 << 12)
-#define IXLV_FLAG_AQ_GET_RSS_HENA_CAPS (u32)(1 << 13)
-#define IXLV_FLAG_AQ_CONFIG_RSS_LUT (u32)(1 << 14)
+#define IAVF_FLAG_AQ_ENABLE_QUEUES (u32)(1 << 0)
+#define IAVF_FLAG_AQ_DISABLE_QUEUES (u32)(1 << 1)
+#define IAVF_FLAG_AQ_ADD_MAC_FILTER (u32)(1 << 2)
+#define IAVF_FLAG_AQ_ADD_VLAN_FILTER (u32)(1 << 3)
+#define IAVF_FLAG_AQ_DEL_MAC_FILTER (u32)(1 << 4)
+#define IAVF_FLAG_AQ_DEL_VLAN_FILTER (u32)(1 << 5)
+#define IAVF_FLAG_AQ_CONFIGURE_QUEUES (u32)(1 << 6)
+#define IAVF_FLAG_AQ_MAP_VECTORS (u32)(1 << 7)
+#define IAVF_FLAG_AQ_HANDLE_RESET (u32)(1 << 8)
+#define IAVF_FLAG_AQ_CONFIGURE_PROMISC (u32)(1 << 9)
+#define IAVF_FLAG_AQ_GET_STATS (u32)(1 << 10)
+#define IAVF_FLAG_AQ_CONFIG_RSS_KEY (u32)(1 << 11)
+#define IAVF_FLAG_AQ_SET_RSS_HENA (u32)(1 << 12)
+#define IAVF_FLAG_AQ_GET_RSS_HENA_CAPS (u32)(1 << 13)
+#define IAVF_FLAG_AQ_CONFIG_RSS_LUT (u32)(1 << 14)
/* printf %b flag args */
-#define IXLV_FLAGS \
+#define IAVF_FLAGS \
"\20\1ENABLE_QUEUES\2DISABLE_QUEUES\3ADD_MAC_FILTER" \
"\4ADD_VLAN_FILTER\5DEL_MAC_FILTER\6DEL_VLAN_FILTER" \
"\7CONFIGURE_QUEUES\10MAP_VECTORS\11HANDLE_RESET" \
"\12CONFIGURE_PROMISC\13GET_STATS\14CONFIG_RSS_KEY" \
"\15SET_RSS_HENA\16GET_RSS_HENA_CAPS\17CONFIG_RSS_LUT"
-#define IXLV_PRINTF_VF_OFFLOAD_FLAGS \
+#define IAVF_PRINTF_VF_OFFLOAD_FLAGS \
"\20\1L2" \
"\2IWARP" \
"\3RSVD" \
@@ -82,34 +82,34 @@
"\26ENCAP_CSUM" \
"\27RX_ENCAP_CSUM"
-MALLOC_DECLARE(M_IXLV);
+MALLOC_DECLARE(M_IAVF);
/* Driver state */
-enum ixlv_state_t {
- IXLV_RESET_REQUIRED,
- IXLV_RESET_PENDING,
- IXLV_INIT_READY,
- IXLV_RUNNING,
+enum iavf_state_t {
+ IAVF_RESET_REQUIRED,
+ IAVF_RESET_PENDING,
+ IAVF_INIT_READY,
+ IAVF_RUNNING,
};
/* Structs */
-struct ixlv_mac_filter {
- SLIST_ENTRY(ixlv_mac_filter) next;
+struct iavf_mac_filter {
+ SLIST_ENTRY(iavf_mac_filter) next;
u8 macaddr[ETHER_ADDR_LEN];
u16 flags;
};
-SLIST_HEAD(mac_list, ixlv_mac_filter);
+SLIST_HEAD(mac_list, iavf_mac_filter);
-struct ixlv_vlan_filter {
- SLIST_ENTRY(ixlv_vlan_filter) next;
+struct iavf_vlan_filter {
+ SLIST_ENTRY(iavf_vlan_filter) next;
u16 vlan;
u16 flags;
};
-SLIST_HEAD(vlan_list, ixlv_vlan_filter);
+SLIST_HEAD(vlan_list, iavf_vlan_filter);
/* Software controller structure */
-struct ixlv_sc {
+struct iavf_sc {
struct ixl_vsi vsi;
struct i40e_hw hw;
@@ -118,7 +118,7 @@
struct resource *pci_mem;
- enum ixlv_state_t init_state;
+ enum iavf_state_t init_state;
struct ifmedia media;
struct virtchnl_version_info version;
@@ -159,7 +159,7 @@
** unless the Admin on the Host has created one.
*/
static inline bool
-ixlv_check_ether_addr(u8 *addr)
+iavf_check_ether_addr(u8 *addr)
{
bool status = TRUE;
@@ -170,49 +170,49 @@
}
/* Debug printing */
-#define ixlv_dbg(sc, m, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, m, s, ##__VA_ARGS__)
-#define ixlv_dbg_init(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IXLV_DBG_INIT, s, ##__VA_ARGS__)
-#define ixlv_dbg_info(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IXLV_DBG_INFO, s, ##__VA_ARGS__)
-#define ixlv_dbg_vc(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IXLV_DBG_VC, s, ##__VA_ARGS__)
-#define ixlv_dbg_filter(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IXLV_DBG_FILTER, s, ##__VA_ARGS__)
+#define iavf_dbg(sc, m, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, m, s, ##__VA_ARGS__)
+#define iavf_dbg_init(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IAVF_DBG_INIT, s, ##__VA_ARGS__)
+#define iavf_dbg_info(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IAVF_DBG_INFO, s, ##__VA_ARGS__)
+#define iavf_dbg_vc(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IAVF_DBG_VC, s, ##__VA_ARGS__)
+#define iavf_dbg_filter(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IAVF_DBG_FILTER, s, ##__VA_ARGS__)
/*
** VF Common function prototypes
*/
-void ixlv_if_init(if_ctx_t ctx);
+void iavf_if_init(if_ctx_t ctx);
-int ixlv_send_api_ver(struct ixlv_sc *);
-int ixlv_verify_api_ver(struct ixlv_sc *);
-int ixlv_send_vf_config_msg(struct ixlv_sc *);
-int ixlv_get_vf_config(struct ixlv_sc *);
-void ixlv_init(void *);
-int ixlv_reinit_locked(struct ixlv_sc *);
-int ixlv_configure_queues(struct ixlv_sc *);
-int ixlv_enable_queues(struct ixlv_sc *);
-int ixlv_disable_queues(struct ixlv_sc *);
-int ixlv_map_queues(struct ixlv_sc *);
-void ixlv_enable_intr(struct ixl_vsi *);
-void ixlv_disable_intr(struct ixl_vsi *);
-int ixlv_add_ether_filters(struct ixlv_sc *);
-int ixlv_del_ether_filters(struct ixlv_sc *);
-int ixlv_request_stats(struct ixlv_sc *);
-int ixlv_request_reset(struct ixlv_sc *);
-void ixlv_vc_completion(struct ixlv_sc *,
+int iavf_send_api_ver(struct iavf_sc *);
+int iavf_verify_api_ver(struct iavf_sc *);
+int iavf_send_vf_config_msg(struct iavf_sc *);
+int iavf_get_vf_config(struct iavf_sc *);
+void iavf_init(void *);
+int iavf_reinit_locked(struct iavf_sc *);
+int iavf_configure_queues(struct iavf_sc *);
+int iavf_enable_queues(struct iavf_sc *);
+int iavf_disable_queues(struct iavf_sc *);
+int iavf_map_queues(struct iavf_sc *);
+void iavf_enable_intr(struct ixl_vsi *);
+void iavf_disable_intr(struct ixl_vsi *);
+int iavf_add_ether_filters(struct iavf_sc *);
+int iavf_del_ether_filters(struct iavf_sc *);
+int iavf_request_stats(struct iavf_sc *);
+int iavf_request_reset(struct iavf_sc *);
+void iavf_vc_completion(struct iavf_sc *,
enum virtchnl_ops, enum virtchnl_status_code,
u8 *, u16);
-int ixlv_add_ether_filter(struct ixlv_sc *);
-int ixlv_add_vlans(struct ixlv_sc *);
-int ixlv_del_vlans(struct ixlv_sc *);
-void ixlv_update_stats_counters(struct ixlv_sc *,
+int iavf_add_ether_filter(struct iavf_sc *);
+int iavf_add_vlans(struct iavf_sc *);
+int iavf_del_vlans(struct iavf_sc *);
+void iavf_update_stats_counters(struct iavf_sc *,
struct i40e_eth_stats *);
-void ixlv_update_link_status(struct ixlv_sc *);
-int ixlv_get_default_rss_key(u32 *, bool);
-int ixlv_config_rss_key(struct ixlv_sc *);
-int ixlv_set_rss_hena(struct ixlv_sc *);
-int ixlv_config_rss_lut(struct ixlv_sc *);
-int ixlv_config_promisc_mode(struct ixlv_sc *);
+void iavf_update_link_status(struct iavf_sc *);
+int iavf_get_default_rss_key(u32 *, bool);
+int iavf_config_rss_key(struct iavf_sc *);
+int iavf_set_rss_hena(struct iavf_sc *);
+int iavf_config_rss_lut(struct iavf_sc *);
+int iavf_config_promisc_mode(struct iavf_sc *);
-int ixl_vc_send_cmd(struct ixlv_sc *sc, uint32_t request);
-char *ixlv_vc_speed_to_string(enum virtchnl_link_speed link_speed);
-void *ixl_vc_get_op_chan(struct ixlv_sc *sc, uint32_t request);
-#endif /* _IXLV_H_ */
+int ixl_vc_send_cmd(struct iavf_sc *sc, uint32_t request);
+char *iavf_vc_speed_to_string(enum virtchnl_link_speed link_speed);
+void *ixl_vc_get_op_chan(struct iavf_sc *sc, uint32_t request);
+#endif /* _IAVF_H_ */
Index: sys/dev/ixl/iavf_vc.c
===================================================================
--- sys/dev/ixl/iavf_vc.c
+++ sys/dev/ixl/iavf_vc.c
@@ -39,19 +39,19 @@
*/
#include "ixl.h"
-#include "ixlv.h"
+#include "iavf.h"
/* busy wait delay in msec */
-#define IXLV_BUSY_WAIT_DELAY 10
-#define IXLV_BUSY_WAIT_COUNT 50
+#define IAVF_BUSY_WAIT_DELAY 10
+#define IAVF_BUSY_WAIT_COUNT 50
/*
-** ixlv_send_pf_msg
+** iavf_send_pf_msg
**
** Send message to PF and print status if failure.
*/
static int
-ixlv_send_pf_msg(struct ixlv_sc *sc,
+iavf_send_pf_msg(struct iavf_sc *sc,
enum virtchnl_ops op, u8 *msg, u16 len)
{
struct i40e_hw *hw = &sc->hw;
@@ -73,7 +73,7 @@
}
if (op != VIRTCHNL_OP_GET_STATS)
- ixlv_dbg_vc(sc,
+ iavf_dbg_vc(sc,
"Sending msg (op=%s[%d]) to PF\n",
ixl_vc_opcode_str(op), op);
@@ -89,33 +89,33 @@
}
/*
-** ixlv_send_api_ver
+** iavf_send_api_ver
**
** Send API version admin queue message to the PF. The reply is not checked
** in this function. Returns 0 if the message was successfully
** sent, or one of the I40E_ADMIN_QUEUE_ERROR_ statuses if not.
*/
int
-ixlv_send_api_ver(struct ixlv_sc *sc)
+iavf_send_api_ver(struct iavf_sc *sc)
{
struct virtchnl_version_info vvi;
vvi.major = VIRTCHNL_VERSION_MAJOR;
vvi.minor = VIRTCHNL_VERSION_MINOR;
- return ixlv_send_pf_msg(sc, VIRTCHNL_OP_VERSION,
+ return iavf_send_pf_msg(sc, VIRTCHNL_OP_VERSION,
(u8 *)&vvi, sizeof(vvi));
}
/*
-** ixlv_verify_api_ver
+** iavf_verify_api_ver
**
** Compare API versions with the PF. Must be called after admin queue is
** initialized. Returns 0 if API versions match, EIO if
** they do not, or I40E_ERR_ADMIN_QUEUE_NO_WORK if the admin queue is empty.
*/
int
-ixlv_verify_api_ver(struct ixlv_sc *sc)
+iavf_verify_api_ver(struct iavf_sc *sc)
{
struct virtchnl_version_info *pf_vvi;
struct i40e_hw *hw = &sc->hw;
@@ -125,10 +125,10 @@
int retries = 0;
event.buf_len = IXL_AQ_BUF_SZ;
- event.msg_buf = malloc(event.buf_len, M_IXLV, M_WAITOK);
+ event.msg_buf = malloc(event.buf_len, M_IAVF, M_WAITOK);
for (;;) {
- if (++retries > IXLV_AQ_MAX_ERR)
+ if (++retries > IAVF_AQ_MAX_ERR)
goto out_alloc;
/* Initial delay here is necessary */
@@ -174,19 +174,19 @@
VIRTCHNL_VERSION_MAJOR, VIRTCHNL_VERSION_MINOR);
out_alloc:
- free(event.msg_buf, M_IXLV);
+ free(event.msg_buf, M_IAVF);
return (err);
}
/*
-** ixlv_send_vf_config_msg
+** iavf_send_vf_config_msg
**
** Send VF configuration request admin queue message to the PF. The reply
** is not checked in this function. Returns 0 if the message was
** successfully sent, or one of the I40E_ADMIN_QUEUE_ERROR_ statuses if not.
*/
int
-ixlv_send_vf_config_msg(struct ixlv_sc *sc)
+iavf_send_vf_config_msg(struct iavf_sc *sc)
{
u32 caps;
@@ -194,19 +194,19 @@
VIRTCHNL_VF_OFFLOAD_RSS_PF |
VIRTCHNL_VF_OFFLOAD_VLAN;
- ixlv_dbg_info(sc, "Sending offload flags: 0x%b\n",
- caps, IXLV_PRINTF_VF_OFFLOAD_FLAGS);
+ iavf_dbg_info(sc, "Sending offload flags: 0x%b\n",
+ caps, IAVF_PRINTF_VF_OFFLOAD_FLAGS);
if (sc->version.minor == VIRTCHNL_VERSION_MINOR_NO_VF_CAPS)
- return ixlv_send_pf_msg(sc, VIRTCHNL_OP_GET_VF_RESOURCES,
+ return iavf_send_pf_msg(sc, VIRTCHNL_OP_GET_VF_RESOURCES,
NULL, 0);
else
- return ixlv_send_pf_msg(sc, VIRTCHNL_OP_GET_VF_RESOURCES,
+ return iavf_send_pf_msg(sc, VIRTCHNL_OP_GET_VF_RESOURCES,
(u8 *)&caps, sizeof(caps));
}
/*
-** ixlv_get_vf_config
+** iavf_get_vf_config
**
** Get VF configuration from PF and populate hw structure. Must be called after
** admin queue is initialized. Busy waits until response is received from PF,
@@ -214,7 +214,7 @@
** processing by the caller.
*/
int
-ixlv_get_vf_config(struct ixlv_sc *sc)
+iavf_get_vf_config(struct iavf_sc *sc)
{
struct i40e_hw *hw = &sc->hw;
device_t dev = sc->dev;
@@ -227,12 +227,12 @@
len = sizeof(struct virtchnl_vf_resource) +
sizeof(struct virtchnl_vsi_resource);
event.buf_len = len;
- event.msg_buf = malloc(event.buf_len, M_IXLV, M_WAITOK);
+ event.msg_buf = malloc(event.buf_len, M_IAVF, M_WAITOK);
for (;;) {
err = i40e_clean_arq_element(hw, &event, NULL);
if (err == I40E_ERR_ADMIN_QUEUE_NO_WORK) {
- if (++retries <= IXLV_AQ_MAX_ERR)
+ if (++retries <= IAVF_AQ_MAX_ERR)
i40e_msec_pause(10);
} else if ((enum virtchnl_ops)le32toh(event.desc.cookie_high) !=
VIRTCHNL_OP_GET_VF_RESOURCES) {
@@ -256,7 +256,7 @@
break;
}
- if (retries > IXLV_AQ_MAX_ERR) {
+ if (retries > IAVF_AQ_MAX_ERR) {
INIT_DBG_DEV(dev, "Did not receive response after %d tries.",
retries);
err = ETIMEDOUT;
@@ -268,17 +268,17 @@
i40e_vf_parse_hw_config(hw, sc->vf_res);
out_alloc:
- free(event.msg_buf, M_IXLV);
+ free(event.msg_buf, M_IAVF);
return err;
}
/*
-** ixlv_configure_queues
+** iavf_configure_queues
**
** Request that the PF set up our queues.
*/
int
-ixlv_configure_queues(struct ixlv_sc *sc)
+iavf_configure_queues(struct iavf_sc *sc)
{
device_t dev = sc->dev;
struct ixl_vsi *vsi = &sc->vsi;
@@ -297,7 +297,7 @@
pairs = max(vsi->num_tx_queues, vsi->num_rx_queues);
len = sizeof(struct virtchnl_vsi_queue_config_info) +
(sizeof(struct virtchnl_queue_pair_info) * pairs);
- vqci = malloc(len, M_IXLV, M_NOWAIT | M_ZERO);
+ vqci = malloc(len, M_IAVF, M_NOWAIT | M_ZERO);
if (!vqci) {
device_printf(dev, "%s: unable to allocate memory\n", __func__);
return (ENOMEM);
@@ -336,20 +336,20 @@
vqpi->rxq.splithdr_enabled = 0;
}
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_VSI_QUEUES,
+ iavf_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_VSI_QUEUES,
(u8 *)vqci, len);
- free(vqci, M_IXLV);
+ free(vqci, M_IAVF);
return (0);
}
/*
-** ixlv_enable_queues
+** iavf_enable_queues
**
** Request that the PF enable all of our queues.
*/
int
-ixlv_enable_queues(struct ixlv_sc *sc)
+iavf_enable_queues(struct iavf_sc *sc)
{
struct virtchnl_queue_select vqs;
@@ -358,18 +358,18 @@
* every queue in VF VSI is enabled. */
vqs.tx_queues = (1 << sc->vsi.num_tx_queues) - 1;
vqs.rx_queues = vqs.tx_queues;
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_ENABLE_QUEUES,
+ iavf_send_pf_msg(sc, VIRTCHNL_OP_ENABLE_QUEUES,
(u8 *)&vqs, sizeof(vqs));
return (0);
}
/*
-** ixlv_disable_queues
+** iavf_disable_queues
**
** Request that the PF disable all of our queues.
*/
int
-ixlv_disable_queues(struct ixlv_sc *sc)
+iavf_disable_queues(struct iavf_sc *sc)
{
struct virtchnl_queue_select vqs;
@@ -378,19 +378,19 @@
* every queue in VF VSI is disabled. */
vqs.tx_queues = (1 << sc->vsi.num_tx_queues) - 1;
vqs.rx_queues = vqs.tx_queues;
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_DISABLE_QUEUES,
+ iavf_send_pf_msg(sc, VIRTCHNL_OP_DISABLE_QUEUES,
(u8 *)&vqs, sizeof(vqs));
return (0);
}
/*
-** ixlv_map_queues
+** iavf_map_queues
**
** Request that the PF map queues to interrupt vectors. Misc causes, including
** admin queue, are always mapped to vector 0.
*/
int
-ixlv_map_queues(struct ixlv_sc *sc)
+iavf_map_queues(struct iavf_sc *sc)
{
struct virtchnl_irq_map_info *vm;
int i, q, len;
@@ -408,7 +408,7 @@
len = sizeof(struct virtchnl_irq_map_info) +
(scctx->isc_vectors * sizeof(struct virtchnl_vector_map));
- vm = malloc(len, M_IXLV, M_NOWAIT);
+ vm = malloc(len, M_IAVF, M_NOWAIT);
if (!vm) {
device_printf(dev, "%s: unable to allocate memory\n", __func__);
return (ENOMEM);
@@ -434,9 +434,9 @@
vm->vecmap[i].rxitr_idx = 0;
vm->vecmap[i].txitr_idx = 0;
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_IRQ_MAP,
+ iavf_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_IRQ_MAP,
(u8 *)vm, len);
- free(vm, M_IXLV);
+ free(vm, M_IAVF);
return (0);
}
@@ -447,10 +447,10 @@
** for handling.
*/
int
-ixlv_add_vlans(struct ixlv_sc *sc)
+iavf_add_vlans(struct iavf_sc *sc)
{
struct virtchnl_vlan_filter_list *v;
- struct ixlv_vlan_filter *f, *ftmp;
+ struct iavf_vlan_filter *f, *ftmp;
device_t dev = sc->dev;
int len, i = 0, cnt = 0;
@@ -472,7 +472,7 @@
return (EFBIG);
}
- v = malloc(len, M_IXLV, M_NOWAIT);
+ v = malloc(len, M_IAVF, M_NOWAIT);
if (!v) {
device_printf(dev, "%s: unable to allocate memory\n",
__func__);
@@ -493,8 +493,8 @@
break;
}
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_ADD_VLAN, (u8 *)v, len);
- free(v, M_IXLV);
+ iavf_send_pf_msg(sc, VIRTCHNL_OP_ADD_VLAN, (u8 *)v, len);
+ free(v, M_IAVF);
/* add stats? */
return (0);
}
@@ -505,10 +505,10 @@
** for handling.
*/
int
-ixlv_del_vlans(struct ixlv_sc *sc)
+iavf_del_vlans(struct iavf_sc *sc)
{
struct virtchnl_vlan_filter_list *v;
- struct ixlv_vlan_filter *f, *ftmp;
+ struct iavf_vlan_filter *f, *ftmp;
device_t dev = sc->dev;
int len, i = 0, cnt = 0;
@@ -530,7 +530,7 @@
return (EFBIG);
}
- v = malloc(len, M_IXLV, M_NOWAIT | M_ZERO);
+ v = malloc(len, M_IAVF, M_NOWAIT | M_ZERO);
if (!v) {
device_printf(dev, "%s: unable to allocate memory\n",
__func__);
@@ -545,15 +545,15 @@
if (f->flags & IXL_FILTER_DEL) {
bcopy(&f->vlan, &v->vlan_id[i], sizeof(u16));
i++;
- SLIST_REMOVE(sc->vlan_filters, f, ixlv_vlan_filter, next);
- free(f, M_IXLV);
+ SLIST_REMOVE(sc->vlan_filters, f, iavf_vlan_filter, next);
+ free(f, M_IAVF);
}
if (i == cnt)
break;
}
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_DEL_VLAN, (u8 *)v, len);
- free(v, M_IXLV);
+ iavf_send_pf_msg(sc, VIRTCHNL_OP_DEL_VLAN, (u8 *)v, len);
+ free(v, M_IAVF);
/* add stats? */
return (0);
}
@@ -565,10 +565,10 @@
** the filters in the hardware.
*/
int
-ixlv_add_ether_filters(struct ixlv_sc *sc)
+iavf_add_ether_filters(struct iavf_sc *sc)
{
struct virtchnl_ether_addr_list *a;
- struct ixlv_mac_filter *f;
+ struct iavf_mac_filter *f;
device_t dev = sc->dev;
int len, j = 0, cnt = 0;
enum i40e_status_code status;
@@ -579,14 +579,14 @@
cnt++;
}
if (cnt == 0) { /* Should not happen... */
- ixlv_dbg_vc(sc, "%s: cnt == 0, exiting...\n", __func__);
+ iavf_dbg_vc(sc, "%s: cnt == 0, exiting...\n", __func__);
return (ENOENT);
}
len = sizeof(struct virtchnl_ether_addr_list) +
(cnt * sizeof(struct virtchnl_ether_addr));
- a = malloc(len, M_IXLV, M_NOWAIT | M_ZERO);
+ a = malloc(len, M_IAVF, M_NOWAIT | M_ZERO);
if (a == NULL) {
device_printf(dev, "%s: Failed to get memory for "
"virtchnl_ether_addr_list\n", __func__);
@@ -602,7 +602,7 @@
f->flags &= ~IXL_FILTER_ADD;
j++;
- ixlv_dbg_vc(sc, "ADD: " MAC_FORMAT "\n",
+ iavf_dbg_vc(sc, "ADD: " MAC_FORMAT "\n",
MAC_FORMAT_ARGS(f->macaddr));
}
if (j == cnt)
@@ -611,10 +611,10 @@
DDPRINTF(dev, "len %d, j %d, cnt %d",
len, j, cnt);
- status = ixlv_send_pf_msg(sc,
+ status = iavf_send_pf_msg(sc,
VIRTCHNL_OP_ADD_ETH_ADDR, (u8 *)a, len);
/* add stats? */
- free(a, M_IXLV);
+ free(a, M_IAVF);
return (status);
}
@@ -624,10 +624,10 @@
** to delete those filters in the hardware.
*/
int
-ixlv_del_ether_filters(struct ixlv_sc *sc)
+iavf_del_ether_filters(struct iavf_sc *sc)
{
struct virtchnl_ether_addr_list *d;
- struct ixlv_mac_filter *f, *f_temp;
+ struct iavf_mac_filter *f, *f_temp;
device_t dev = sc->dev;
int len, j = 0, cnt = 0;
@@ -637,14 +637,14 @@
cnt++;
}
if (cnt == 0) {
- ixlv_dbg_vc(sc, "%s: cnt == 0, exiting...\n", __func__);
+ iavf_dbg_vc(sc, "%s: cnt == 0, exiting...\n", __func__);
return (ENOENT);
}
len = sizeof(struct virtchnl_ether_addr_list) +
(cnt * sizeof(struct virtchnl_ether_addr));
- d = malloc(len, M_IXLV, M_NOWAIT | M_ZERO);
+ d = malloc(len, M_IAVF, M_NOWAIT | M_ZERO);
if (d == NULL) {
device_printf(dev, "%s: Failed to get memory for "
"virtchnl_ether_addr_list\n", __func__);
@@ -657,28 +657,28 @@
SLIST_FOREACH_SAFE(f, sc->mac_filters, next, f_temp) {
if (f->flags & IXL_FILTER_DEL) {
bcopy(f->macaddr, d->list[j].addr, ETHER_ADDR_LEN);
- ixlv_dbg_vc(sc, "DEL: " MAC_FORMAT "\n",
+ iavf_dbg_vc(sc, "DEL: " MAC_FORMAT "\n",
MAC_FORMAT_ARGS(f->macaddr));
j++;
- SLIST_REMOVE(sc->mac_filters, f, ixlv_mac_filter, next);
- free(f, M_IXLV);
+ SLIST_REMOVE(sc->mac_filters, f, iavf_mac_filter, next);
+ free(f, M_IAVF);
}
if (j == cnt)
break;
}
- ixlv_send_pf_msg(sc,
+ iavf_send_pf_msg(sc,
VIRTCHNL_OP_DEL_ETH_ADDR, (u8 *)d, len);
/* add stats? */
- free(d, M_IXLV);
+ free(d, M_IAVF);
return (0);
}
/*
-** ixlv_request_reset
+** iavf_request_reset
** Request that the PF reset this VF. No response is expected.
*/
int
-ixlv_request_reset(struct ixlv_sc *sc)
+iavf_request_reset(struct iavf_sc *sc)
{
/*
** Set the reset status to "in progress" before
@@ -686,23 +686,23 @@
** a mistaken early detection of completion.
*/
wr32(&sc->hw, I40E_VFGEN_RSTAT, VIRTCHNL_VFR_INPROGRESS);
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_RESET_VF, NULL, 0);
+ iavf_send_pf_msg(sc, VIRTCHNL_OP_RESET_VF, NULL, 0);
return (0);
}
/*
-** ixlv_request_stats
+** iavf_request_stats
** Request the statistics for this VF's VSI from PF.
*/
int
-ixlv_request_stats(struct ixlv_sc *sc)
+iavf_request_stats(struct iavf_sc *sc)
{
struct virtchnl_queue_select vqs;
int error = 0;
vqs.vsi_id = sc->vsi_res->vsi_id;
/* Low priority, we don't need to error check */
- error = ixlv_send_pf_msg(sc, VIRTCHNL_OP_GET_STATS,
+ error = iavf_send_pf_msg(sc, VIRTCHNL_OP_GET_STATS,
(u8 *)&vqs, sizeof(vqs));
if (error)
device_printf(sc->dev, "Error sending stats request to PF: %d\n", error);
@@ -714,7 +714,7 @@
** Updates driver's stats counters with VSI stats returned from PF.
*/
void
-ixlv_update_stats_counters(struct ixlv_sc *sc, struct i40e_eth_stats *es)
+iavf_update_stats_counters(struct iavf_sc *sc, struct i40e_eth_stats *es)
{
struct ixl_vsi *vsi = &sc->vsi;
uint64_t tx_discards;
@@ -747,7 +747,7 @@
}
int
-ixlv_config_rss_key(struct ixlv_sc *sc)
+iavf_config_rss_key(struct iavf_sc *sc)
{
struct virtchnl_rss_key *rss_key_msg;
int msg_len, key_length;
@@ -763,7 +763,7 @@
/* Send the fetched key */
key_length = IXL_RSS_KEY_SIZE;
msg_len = sizeof(struct virtchnl_rss_key) + (sizeof(u8) * key_length) - 1;
- rss_key_msg = malloc(msg_len, M_IXLV, M_NOWAIT | M_ZERO);
+ rss_key_msg = malloc(msg_len, M_IAVF, M_NOWAIT | M_ZERO);
if (rss_key_msg == NULL) {
device_printf(sc->dev, "Unable to allocate msg memory for RSS key msg.\n");
return (ENOMEM);
@@ -773,18 +773,18 @@
rss_key_msg->key_len = key_length;
bcopy(rss_seed, &rss_key_msg->key[0], key_length);
- ixlv_dbg_vc(sc, "config_rss: vsi_id %d, key_len %d\n",
+ iavf_dbg_vc(sc, "config_rss: vsi_id %d, key_len %d\n",
rss_key_msg->vsi_id, rss_key_msg->key_len);
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_RSS_KEY,
+ iavf_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_RSS_KEY,
(u8 *)rss_key_msg, msg_len);
- free(rss_key_msg, M_IXLV);
+ free(rss_key_msg, M_IAVF);
return (0);
}
int
-ixlv_set_rss_hena(struct ixlv_sc *sc)
+iavf_set_rss_hena(struct iavf_sc *sc)
{
struct virtchnl_rss_hena hena;
struct i40e_hw *hw = &sc->hw;
@@ -794,13 +794,13 @@
else
hena.hena = IXL_DEFAULT_RSS_HENA_XL710;
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_SET_RSS_HENA,
+ iavf_send_pf_msg(sc, VIRTCHNL_OP_SET_RSS_HENA,
(u8 *)&hena, sizeof(hena));
return (0);
}
int
-ixlv_config_rss_lut(struct ixlv_sc *sc)
+iavf_config_rss_lut(struct iavf_sc *sc)
{
struct virtchnl_rss_lut *rss_lut_msg;
int msg_len;
@@ -810,7 +810,7 @@
lut_length = IXL_RSS_VSI_LUT_SIZE;
msg_len = sizeof(struct virtchnl_rss_lut) + (lut_length * sizeof(u8)) - 1;
- rss_lut_msg = malloc(msg_len, M_IXLV, M_NOWAIT | M_ZERO);
+ rss_lut_msg = malloc(msg_len, M_IAVF, M_NOWAIT | M_ZERO);
if (rss_lut_msg == NULL) {
device_printf(sc->dev, "Unable to allocate msg memory for RSS lut msg.\n");
return (ENOMEM);
@@ -837,42 +837,42 @@
rss_lut_msg->lut[i] = lut;
}
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_RSS_LUT,
+ iavf_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_RSS_LUT,
(u8 *)rss_lut_msg, msg_len);
- free(rss_lut_msg, M_IXLV);
+ free(rss_lut_msg, M_IAVF);
return (0);
}
int
-ixlv_config_promisc_mode(struct ixlv_sc *sc)
+iavf_config_promisc_mode(struct iavf_sc *sc)
{
struct virtchnl_promisc_info pinfo;
pinfo.vsi_id = sc->vsi_res->vsi_id;
pinfo.flags = sc->promisc_flags;
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE,
+ iavf_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE,
(u8 *)&pinfo, sizeof(pinfo));
return (0);
}
/*
-** ixlv_vc_completion
+** iavf_vc_completion
**
** Asynchronous completion function for admin queue messages. Rather than busy
** wait, we fire off our requests and assume that no errors will be returned.
** This function handles the reply messages.
*/
void
-ixlv_vc_completion(struct ixlv_sc *sc,
+iavf_vc_completion(struct iavf_sc *sc,
enum virtchnl_ops v_opcode,
enum virtchnl_status_code v_retval, u8 *msg, u16 msglen)
{
device_t dev = sc->dev;
if (v_opcode != VIRTCHNL_OP_GET_STATS)
- ixlv_dbg_vc(sc, "%s: opcode %s\n", __func__,
+ iavf_dbg_vc(sc, "%s: opcode %s\n", __func__,
ixl_vc_opcode_str(v_opcode));
if (v_opcode == VIRTCHNL_OP_EVENT) {
@@ -881,22 +881,22 @@
switch (vpe->event) {
case VIRTCHNL_EVENT_LINK_CHANGE:
- ixlv_dbg_vc(sc, "Link change: status %d, speed %s\n",
+ iavf_dbg_vc(sc, "Link change: status %d, speed %s\n",
vpe->event_data.link_event.link_status,
- ixlv_vc_speed_to_string(vpe->event_data.link_event.link_speed));
+ iavf_vc_speed_to_string(vpe->event_data.link_event.link_speed));
sc->link_up =
vpe->event_data.link_event.link_status;
sc->link_speed =
vpe->event_data.link_event.link_speed;
- ixlv_update_link_status(sc);
+ iavf_update_link_status(sc);
break;
case VIRTCHNL_EVENT_RESET_IMPENDING:
device_printf(dev, "PF initiated reset!\n");
- sc->init_state = IXLV_RESET_PENDING;
- ixlv_if_init(sc->vsi.ctx);
+ sc->init_state = IAVF_RESET_PENDING;
+ iavf_if_init(sc->vsi.ctx);
break;
default:
- ixlv_dbg_vc(sc, "Unknown event %d from AQ\n",
+ iavf_dbg_vc(sc, "Unknown event %d from AQ\n",
vpe->event);
break;
}
@@ -913,7 +913,7 @@
switch (v_opcode) {
case VIRTCHNL_OP_GET_STATS:
- ixlv_update_stats_counters(sc, (struct i40e_eth_stats *)msg);
+ iavf_update_stats_counters(sc, (struct i40e_eth_stats *)msg);
break;
case VIRTCHNL_OP_ADD_ETH_ADDR:
if (v_retval) {
@@ -948,7 +948,7 @@
case VIRTCHNL_OP_CONFIG_RSS_LUT:
break;
default:
- ixlv_dbg_vc(sc,
+ iavf_dbg_vc(sc,
"Received unexpected message %s from PF.\n",
ixl_vc_opcode_str(v_opcode));
break;
@@ -956,57 +956,57 @@
}
int
-ixl_vc_send_cmd(struct ixlv_sc *sc, uint32_t request)
+ixl_vc_send_cmd(struct iavf_sc *sc, uint32_t request)
{
switch (request) {
- case IXLV_FLAG_AQ_MAP_VECTORS:
- return ixlv_map_queues(sc);
+ case IAVF_FLAG_AQ_MAP_VECTORS:
+ return iavf_map_queues(sc);
- case IXLV_FLAG_AQ_ADD_MAC_FILTER:
- return ixlv_add_ether_filters(sc);
+ case IAVF_FLAG_AQ_ADD_MAC_FILTER:
+ return iavf_add_ether_filters(sc);
- case IXLV_FLAG_AQ_ADD_VLAN_FILTER:
- return ixlv_add_vlans(sc);
+ case IAVF_FLAG_AQ_ADD_VLAN_FILTER:
+ return iavf_add_vlans(sc);
- case IXLV_FLAG_AQ_DEL_MAC_FILTER:
- return ixlv_del_ether_filters(sc);
+ case IAVF_FLAG_AQ_DEL_MAC_FILTER:
+ return iavf_del_ether_filters(sc);
- case IXLV_FLAG_AQ_DEL_VLAN_FILTER:
- return ixlv_del_vlans(sc);
+ case IAVF_FLAG_AQ_DEL_VLAN_FILTER:
+ return iavf_del_vlans(sc);
- case IXLV_FLAG_AQ_CONFIGURE_QUEUES:
- return ixlv_configure_queues(sc);
+ case IAVF_FLAG_AQ_CONFIGURE_QUEUES:
+ return iavf_configure_queues(sc);
- case IXLV_FLAG_AQ_DISABLE_QUEUES:
- return ixlv_disable_queues(sc);
+ case IAVF_FLAG_AQ_DISABLE_QUEUES:
+ return iavf_disable_queues(sc);
- case IXLV_FLAG_AQ_ENABLE_QUEUES:
- return ixlv_enable_queues(sc);
+ case IAVF_FLAG_AQ_ENABLE_QUEUES:
+ return iavf_enable_queues(sc);
- case IXLV_FLAG_AQ_CONFIG_RSS_KEY:
- return ixlv_config_rss_key(sc);
+ case IAVF_FLAG_AQ_CONFIG_RSS_KEY:
+ return iavf_config_rss_key(sc);
- case IXLV_FLAG_AQ_SET_RSS_HENA:
- return ixlv_set_rss_hena(sc);
+ case IAVF_FLAG_AQ_SET_RSS_HENA:
+ return iavf_set_rss_hena(sc);
- case IXLV_FLAG_AQ_CONFIG_RSS_LUT:
- return ixlv_config_rss_lut(sc);
+ case IAVF_FLAG_AQ_CONFIG_RSS_LUT:
+ return iavf_config_rss_lut(sc);
- case IXLV_FLAG_AQ_CONFIGURE_PROMISC:
- return ixlv_config_promisc_mode(sc);
+ case IAVF_FLAG_AQ_CONFIGURE_PROMISC:
+ return iavf_config_promisc_mode(sc);
}
return (0);
}
void *
-ixl_vc_get_op_chan(struct ixlv_sc *sc, uint32_t request)
+ixl_vc_get_op_chan(struct iavf_sc *sc, uint32_t request)
{
switch (request) {
- case IXLV_FLAG_AQ_ENABLE_QUEUES:
+ case IAVF_FLAG_AQ_ENABLE_QUEUES:
return (&sc->enable_queues_chan);
- case IXLV_FLAG_AQ_DISABLE_QUEUES:
+ case IAVF_FLAG_AQ_DISABLE_QUEUES:
return (&sc->disable_queues_chan);
default:
return (NULL);
Index: sys/dev/ixl/if_iavf.c
===================================================================
--- sys/dev/ixl/if_iavf.c
+++ sys/dev/ixl/if_iavf.c
@@ -32,7 +32,7 @@
******************************************************************************/
/*$FreeBSD$*/
-#include "ixlv.h"
+#include "iavf.h"
/*********************************************************************
* Driver version
@@ -54,7 +54,7 @@
* ( Vendor ID, Device ID, Branding String )
*********************************************************************/
-static pci_vendor_info_t ixlv_vendor_info_array[] =
+static pci_vendor_info_t iavf_vendor_info_array[] =
{
PVID(I40E_INTEL_VENDOR_ID, I40E_DEV_ID_VF, "Intel(R) Ethernet Virtual Function 700 Series"),
PVID(I40E_INTEL_VENDOR_ID, I40E_DEV_ID_X722_VF, "Intel(R) Ethernet Virtual Function 700 Series (X722)"),
@@ -66,80 +66,80 @@
/*********************************************************************
* Function prototypes
*********************************************************************/
-static void *ixlv_register(device_t dev);
-static int ixlv_if_attach_pre(if_ctx_t ctx);
-static int ixlv_if_attach_post(if_ctx_t ctx);
-static int ixlv_if_detach(if_ctx_t ctx);
-static int ixlv_if_shutdown(if_ctx_t ctx);
-static int ixlv_if_suspend(if_ctx_t ctx);
-static int ixlv_if_resume(if_ctx_t ctx);
-static int ixlv_if_msix_intr_assign(if_ctx_t ctx, int msix);
-static void ixlv_if_enable_intr(if_ctx_t ctx);
-static void ixlv_if_disable_intr(if_ctx_t ctx);
-static int ixlv_if_rx_queue_intr_enable(if_ctx_t ctx, uint16_t rxqid);
-static int ixlv_if_tx_queue_intr_enable(if_ctx_t ctx, uint16_t txqid);
-static int ixlv_if_tx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int ntxqs, int ntxqsets);
-static int ixlv_if_rx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int nqs, int nqsets);
-static void ixlv_if_queues_free(if_ctx_t ctx);
-static void ixlv_if_update_admin_status(if_ctx_t ctx);
-static void ixlv_if_multi_set(if_ctx_t ctx);
-static int ixlv_if_mtu_set(if_ctx_t ctx, uint32_t mtu);
-static void ixlv_if_media_status(if_ctx_t ctx, struct ifmediareq *ifmr);
-static int ixlv_if_media_change(if_ctx_t ctx);
-static int ixlv_if_promisc_set(if_ctx_t ctx, int flags);
-static void ixlv_if_timer(if_ctx_t ctx, uint16_t qid);
-static void ixlv_if_vlan_register(if_ctx_t ctx, u16 vtag);
-static void ixlv_if_vlan_unregister(if_ctx_t ctx, u16 vtag);
-static uint64_t ixlv_if_get_counter(if_ctx_t ctx, ift_counter cnt);
-static void ixlv_if_stop(if_ctx_t ctx);
+static void *iavf_register(device_t dev);
+static int iavf_if_attach_pre(if_ctx_t ctx);
+static int iavf_if_attach_post(if_ctx_t ctx);
+static int iavf_if_detach(if_ctx_t ctx);
+static int iavf_if_shutdown(if_ctx_t ctx);
+static int iavf_if_suspend(if_ctx_t ctx);
+static int iavf_if_resume(if_ctx_t ctx);
+static int iavf_if_msix_intr_assign(if_ctx_t ctx, int msix);
+static void iavf_if_enable_intr(if_ctx_t ctx);
+static void iavf_if_disable_intr(if_ctx_t ctx);
+static int iavf_if_rx_queue_intr_enable(if_ctx_t ctx, uint16_t rxqid);
+static int iavf_if_tx_queue_intr_enable(if_ctx_t ctx, uint16_t txqid);
+static int iavf_if_tx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int ntxqs, int ntxqsets);
+static int iavf_if_rx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int nqs, int nqsets);
+static void iavf_if_queues_free(if_ctx_t ctx);
+static void iavf_if_update_admin_status(if_ctx_t ctx);
+static void iavf_if_multi_set(if_ctx_t ctx);
+static int iavf_if_mtu_set(if_ctx_t ctx, uint32_t mtu);
+static void iavf_if_media_status(if_ctx_t ctx, struct ifmediareq *ifmr);
+static int iavf_if_media_change(if_ctx_t ctx);
+static int iavf_if_promisc_set(if_ctx_t ctx, int flags);
+static void iavf_if_timer(if_ctx_t ctx, uint16_t qid);
+static void iavf_if_vlan_register(if_ctx_t ctx, u16 vtag);
+static void iavf_if_vlan_unregister(if_ctx_t ctx, u16 vtag);
+static uint64_t iavf_if_get_counter(if_ctx_t ctx, ift_counter cnt);
+static void iavf_if_stop(if_ctx_t ctx);
-static int ixlv_allocate_pci_resources(struct ixlv_sc *);
-static int ixlv_reset_complete(struct i40e_hw *);
-static int ixlv_setup_vc(struct ixlv_sc *);
-static int ixlv_reset(struct ixlv_sc *);
-static int ixlv_vf_config(struct ixlv_sc *);
-static void ixlv_init_filters(struct ixlv_sc *);
-static void ixlv_free_pci_resources(struct ixlv_sc *);
-static void ixlv_free_filters(struct ixlv_sc *);
-static void ixlv_setup_interface(device_t, struct ixlv_sc *);
-static void ixlv_add_device_sysctls(struct ixlv_sc *);
-static void ixlv_enable_adminq_irq(struct i40e_hw *);
-static void ixlv_disable_adminq_irq(struct i40e_hw *);
-static void ixlv_enable_queue_irq(struct i40e_hw *, int);
-static void ixlv_disable_queue_irq(struct i40e_hw *, int);
-static void ixlv_config_rss(struct ixlv_sc *);
-static void ixlv_stop(struct ixlv_sc *);
+static int iavf_allocate_pci_resources(struct iavf_sc *);
+static int iavf_reset_complete(struct i40e_hw *);
+static int iavf_setup_vc(struct iavf_sc *);
+static int iavf_reset(struct iavf_sc *);
+static int iavf_vf_config(struct iavf_sc *);
+static void iavf_init_filters(struct iavf_sc *);
+static void iavf_free_pci_resources(struct iavf_sc *);
+static void iavf_free_filters(struct iavf_sc *);
+static void iavf_setup_interface(device_t, struct iavf_sc *);
+static void iavf_add_device_sysctls(struct iavf_sc *);
+static void iavf_enable_adminq_irq(struct i40e_hw *);
+static void iavf_disable_adminq_irq(struct i40e_hw *);
+static void iavf_enable_queue_irq(struct i40e_hw *, int);
+static void iavf_disable_queue_irq(struct i40e_hw *, int);
+static void iavf_config_rss(struct iavf_sc *);
+static void iavf_stop(struct iavf_sc *);
-static int ixlv_add_mac_filter(struct ixlv_sc *, u8 *, u16);
-static int ixlv_del_mac_filter(struct ixlv_sc *sc, u8 *macaddr);
-static int ixlv_msix_que(void *);
-static int ixlv_msix_adminq(void *);
-//static void ixlv_del_multi(struct ixlv_sc *sc);
-static void ixlv_init_multi(struct ixlv_sc *sc);
-static void ixlv_configure_itr(struct ixlv_sc *sc);
+static int iavf_add_mac_filter(struct iavf_sc *, u8 *, u16);
+static int iavf_del_mac_filter(struct iavf_sc *sc, u8 *macaddr);
+static int iavf_msix_que(void *);
+static int iavf_msix_adminq(void *);
+//static void iavf_del_multi(struct iavf_sc *sc);
+static void iavf_init_multi(struct iavf_sc *sc);
+static void iavf_configure_itr(struct iavf_sc *sc);
-static int ixlv_sysctl_rx_itr(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_tx_itr(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_current_speed(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_sw_filter_list(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_queue_interrupt_table(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_vf_reset(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_vflr_reset(SYSCTL_HANDLER_ARGS);
+static int iavf_sysctl_rx_itr(SYSCTL_HANDLER_ARGS);
+static int iavf_sysctl_tx_itr(SYSCTL_HANDLER_ARGS);
+static int iavf_sysctl_current_speed(SYSCTL_HANDLER_ARGS);
+static int iavf_sysctl_sw_filter_list(SYSCTL_HANDLER_ARGS);
+static int iavf_sysctl_queue_interrupt_table(SYSCTL_HANDLER_ARGS);
+static int iavf_sysctl_vf_reset(SYSCTL_HANDLER_ARGS);
+static int iavf_sysctl_vflr_reset(SYSCTL_HANDLER_ARGS);
-char *ixlv_vc_speed_to_string(enum virtchnl_link_speed link_speed);
-static void ixlv_save_tunables(struct ixlv_sc *);
+char *iavf_vc_speed_to_string(enum virtchnl_link_speed link_speed);
+static void iavf_save_tunables(struct iavf_sc *);
static enum i40e_status_code
- ixlv_process_adminq(struct ixlv_sc *, u16 *);
-static int ixlv_send_vc_msg(struct ixlv_sc *sc, u32 op);
-static int ixlv_send_vc_msg_sleep(struct ixlv_sc *sc, u32 op);
+ iavf_process_adminq(struct iavf_sc *, u16 *);
+static int iavf_send_vc_msg(struct iavf_sc *sc, u32 op);
+static int iavf_send_vc_msg_sleep(struct iavf_sc *sc, u32 op);
/*********************************************************************
* FreeBSD Device Interface Entry Points
*********************************************************************/
-static device_method_t ixlv_methods[] = {
+static device_method_t iavf_methods[] = {
/* Device interface */
- DEVMETHOD(device_register, ixlv_register),
+ DEVMETHOD(device_register, iavf_register),
DEVMETHOD(device_probe, iflib_device_probe),
DEVMETHOD(device_attach, iflib_device_attach),
DEVMETHOD(device_detach, iflib_device_detach),
@@ -147,55 +147,55 @@
DEVMETHOD_END
};
-static driver_t ixlv_driver = {
- "iavf", ixlv_methods, sizeof(struct ixlv_sc),
+static driver_t iavf_driver = {
+ "iavf", iavf_methods, sizeof(struct iavf_sc),
};
-devclass_t ixlv_devclass;
-DRIVER_MODULE(iavf, pci, ixlv_driver, ixlv_devclass, 0, 0);
+devclass_t iavf_devclass;
+DRIVER_MODULE(iavf, pci, iavf_driver, iavf_devclass, 0, 0);
MODULE_PNP_INFO("U32:vendor;U32:device;U32:subvendor;U32:subdevice;U32:revision",
- pci, iavf, ixlv_vendor_info_array,
- nitems(ixlv_vendor_info_array) - 1);
+ pci, iavf, iavf_vendor_info_array,
+ nitems(iavf_vendor_info_array) - 1);
MODULE_VERSION(iavf, 1);
MODULE_DEPEND(iavf, pci, 1, 1, 1);
MODULE_DEPEND(iavf, ether, 1, 1, 1);
MODULE_DEPEND(iavf, iflib, 1, 1, 1);
-MALLOC_DEFINE(M_IXLV, "iavf", "iavf driver allocations");
+MALLOC_DEFINE(M_IAVF, "iavf", "iavf driver allocations");
-static device_method_t ixlv_if_methods[] = {
- DEVMETHOD(ifdi_attach_pre, ixlv_if_attach_pre),
- DEVMETHOD(ifdi_attach_post, ixlv_if_attach_post),
- DEVMETHOD(ifdi_detach, ixlv_if_detach),
- DEVMETHOD(ifdi_shutdown, ixlv_if_shutdown),
- DEVMETHOD(ifdi_suspend, ixlv_if_suspend),
- DEVMETHOD(ifdi_resume, ixlv_if_resume),
- DEVMETHOD(ifdi_init, ixlv_if_init),
- DEVMETHOD(ifdi_stop, ixlv_if_stop),
- DEVMETHOD(ifdi_msix_intr_assign, ixlv_if_msix_intr_assign),
- DEVMETHOD(ifdi_intr_enable, ixlv_if_enable_intr),
- DEVMETHOD(ifdi_intr_disable, ixlv_if_disable_intr),
- DEVMETHOD(ifdi_rx_queue_intr_enable, ixlv_if_rx_queue_intr_enable),
- DEVMETHOD(ifdi_tx_queue_intr_enable, ixlv_if_tx_queue_intr_enable),
- DEVMETHOD(ifdi_tx_queues_alloc, ixlv_if_tx_queues_alloc),
- DEVMETHOD(ifdi_rx_queues_alloc, ixlv_if_rx_queues_alloc),
- DEVMETHOD(ifdi_queues_free, ixlv_if_queues_free),
- DEVMETHOD(ifdi_update_admin_status, ixlv_if_update_admin_status),
- DEVMETHOD(ifdi_multi_set, ixlv_if_multi_set),
- DEVMETHOD(ifdi_mtu_set, ixlv_if_mtu_set),
- DEVMETHOD(ifdi_media_status, ixlv_if_media_status),
- DEVMETHOD(ifdi_media_change, ixlv_if_media_change),
- DEVMETHOD(ifdi_promisc_set, ixlv_if_promisc_set),
- DEVMETHOD(ifdi_timer, ixlv_if_timer),
- DEVMETHOD(ifdi_vlan_register, ixlv_if_vlan_register),
- DEVMETHOD(ifdi_vlan_unregister, ixlv_if_vlan_unregister),
- DEVMETHOD(ifdi_get_counter, ixlv_if_get_counter),
+static device_method_t iavf_if_methods[] = {
+ DEVMETHOD(ifdi_attach_pre, iavf_if_attach_pre),
+ DEVMETHOD(ifdi_attach_post, iavf_if_attach_post),
+ DEVMETHOD(ifdi_detach, iavf_if_detach),
+ DEVMETHOD(ifdi_shutdown, iavf_if_shutdown),
+ DEVMETHOD(ifdi_suspend, iavf_if_suspend),
+ DEVMETHOD(ifdi_resume, iavf_if_resume),
+ DEVMETHOD(ifdi_init, iavf_if_init),
+ DEVMETHOD(ifdi_stop, iavf_if_stop),
+ DEVMETHOD(ifdi_msix_intr_assign, iavf_if_msix_intr_assign),
+ DEVMETHOD(ifdi_intr_enable, iavf_if_enable_intr),
+ DEVMETHOD(ifdi_intr_disable, iavf_if_disable_intr),
+ DEVMETHOD(ifdi_rx_queue_intr_enable, iavf_if_rx_queue_intr_enable),
+ DEVMETHOD(ifdi_tx_queue_intr_enable, iavf_if_tx_queue_intr_enable),
+ DEVMETHOD(ifdi_tx_queues_alloc, iavf_if_tx_queues_alloc),
+ DEVMETHOD(ifdi_rx_queues_alloc, iavf_if_rx_queues_alloc),
+ DEVMETHOD(ifdi_queues_free, iavf_if_queues_free),
+ DEVMETHOD(ifdi_update_admin_status, iavf_if_update_admin_status),
+ DEVMETHOD(ifdi_multi_set, iavf_if_multi_set),
+ DEVMETHOD(ifdi_mtu_set, iavf_if_mtu_set),
+ DEVMETHOD(ifdi_media_status, iavf_if_media_status),
+ DEVMETHOD(ifdi_media_change, iavf_if_media_change),
+ DEVMETHOD(ifdi_promisc_set, iavf_if_promisc_set),
+ DEVMETHOD(ifdi_timer, iavf_if_timer),
+ DEVMETHOD(ifdi_vlan_register, iavf_if_vlan_register),
+ DEVMETHOD(ifdi_vlan_unregister, iavf_if_vlan_unregister),
+ DEVMETHOD(ifdi_get_counter, iavf_if_get_counter),
DEVMETHOD_END
};
-static driver_t ixlv_if_driver = {
- "iavf_if", ixlv_if_methods, sizeof(struct ixlv_sc)
+static driver_t iavf_if_driver = {
+ "iavf_if", iavf_if_methods, sizeof(struct iavf_sc)
};
/*
@@ -209,41 +209,41 @@
* Different method for processing TX descriptor
* completion.
*/
-static int ixlv_enable_head_writeback = 0;
+static int iavf_enable_head_writeback = 0;
TUNABLE_INT("hw.iavf.enable_head_writeback",
- &ixlv_enable_head_writeback);
+ &iavf_enable_head_writeback);
SYSCTL_INT(_hw_iavf, OID_AUTO, enable_head_writeback, CTLFLAG_RDTUN,
- &ixlv_enable_head_writeback, 0,
+ &iavf_enable_head_writeback, 0,
"For detecting last completed TX descriptor by hardware, use value written by HW instead of checking descriptors");
-static int ixlv_core_debug_mask = 0;
+static int iavf_core_debug_mask = 0;
TUNABLE_INT("hw.iavf.core_debug_mask",
- &ixlv_core_debug_mask);
+ &iavf_core_debug_mask);
SYSCTL_INT(_hw_iavf, OID_AUTO, core_debug_mask, CTLFLAG_RDTUN,
- &ixlv_core_debug_mask, 0,
+ &iavf_core_debug_mask, 0,
"Display debug statements that are printed in non-shared code");
-static int ixlv_shared_debug_mask = 0;
+static int iavf_shared_debug_mask = 0;
TUNABLE_INT("hw.iavf.shared_debug_mask",
- &ixlv_shared_debug_mask);
+ &iavf_shared_debug_mask);
SYSCTL_INT(_hw_iavf, OID_AUTO, shared_debug_mask, CTLFLAG_RDTUN,
- &ixlv_shared_debug_mask, 0,
+ &iavf_shared_debug_mask, 0,
"Display debug statements that are printed in shared code");
-int ixlv_rx_itr = IXL_ITR_8K;
-TUNABLE_INT("hw.iavf.rx_itr", &ixlv_rx_itr);
+int iavf_rx_itr = IXL_ITR_8K;
+TUNABLE_INT("hw.iavf.rx_itr", &iavf_rx_itr);
SYSCTL_INT(_hw_iavf, OID_AUTO, rx_itr, CTLFLAG_RDTUN,
- &ixlv_rx_itr, 0, "RX Interrupt Rate");
+ &iavf_rx_itr, 0, "RX Interrupt Rate");
-int ixlv_tx_itr = IXL_ITR_4K;
-TUNABLE_INT("hw.iavf.tx_itr", &ixlv_tx_itr);
+int iavf_tx_itr = IXL_ITR_4K;
+TUNABLE_INT("hw.iavf.tx_itr", &iavf_tx_itr);
SYSCTL_INT(_hw_iavf, OID_AUTO, tx_itr, CTLFLAG_RDTUN,
- &ixlv_tx_itr, 0, "TX Interrupt Rate");
+ &iavf_tx_itr, 0, "TX Interrupt Rate");
extern struct if_txrx ixl_txrx_hwb;
extern struct if_txrx ixl_txrx_dwb;
-static struct if_shared_ctx ixlv_sctx_init = {
+static struct if_shared_ctx iavf_sctx_init = {
.isc_magic = IFLIB_MAGIC,
.isc_q_align = PAGE_SIZE,/* max(DBA_ALIGN, PAGE_SIZE) */
.isc_tx_maxsize = IXL_TSO_SIZE + sizeof(struct ether_vlan_header),
@@ -258,9 +258,9 @@
.isc_nrxqs = 1,
.isc_admin_intrcnt = 1,
- .isc_vendor_info = ixlv_vendor_info_array,
+ .isc_vendor_info = iavf_vendor_info_array,
.isc_driver_version = IAVF_DRIVER_VERSION_STRING,
- .isc_driver = &ixlv_if_driver,
+ .isc_driver = &iavf_if_driver,
.isc_flags = IFLIB_NEED_SCRATCH | IFLIB_NEED_ZERO_CSUM | IFLIB_IS_VF,
.isc_nrxd_min = {IXL_MIN_RING},
@@ -271,17 +271,17 @@
.isc_ntxd_default = {IXL_DEFAULT_RING},
};
-if_shared_ctx_t ixlv_sctx = &ixlv_sctx_init;
+if_shared_ctx_t iavf_sctx = &iavf_sctx_init;
/*** Functions ***/
static void *
-ixlv_register(device_t dev)
+iavf_register(device_t dev)
{
- return (ixlv_sctx);
+ return (iavf_sctx);
}
static int
-ixlv_allocate_pci_resources(struct ixlv_sc *sc)
+iavf_allocate_pci_resources(struct iavf_sc *sc)
{
struct i40e_hw *hw = &sc->hw;
device_t dev = iflib_get_dev(sc->vsi.ctx);
@@ -325,10 +325,10 @@
}
static int
-ixlv_if_attach_pre(if_ctx_t ctx)
+iavf_if_attach_pre(if_ctx_t ctx)
{
device_t dev;
- struct ixlv_sc *sc;
+ struct iavf_sc *sc;
struct i40e_hw *hw;
struct ixl_vsi *vsi;
if_softc_ctx_t scctx;
@@ -349,17 +349,17 @@
vsi->media = iflib_get_media(ctx);
vsi->shared = scctx = iflib_get_softc_ctx(ctx);
- ixlv_save_tunables(sc);
+ iavf_save_tunables(sc);
/* Do PCI setup - map BAR0, etc */
- if (ixlv_allocate_pci_resources(sc)) {
+ if (iavf_allocate_pci_resources(sc)) {
device_printf(dev, "%s: Allocation of PCI resources failed\n",
__func__);
error = ENXIO;
goto err_early;
}
- ixlv_dbg_init(sc, "Allocated PCI resources and MSIX vectors\n");
+ iavf_dbg_init(sc, "Allocated PCI resources and MSIX vectors\n");
/*
* XXX: This is called by init_shared_code in the PF driver,
@@ -372,36 +372,36 @@
goto err_pci_res;
}
- error = ixlv_reset_complete(hw);
+ error = iavf_reset_complete(hw);
if (error) {
device_printf(dev, "%s: Device is still being reset\n",
__func__);
goto err_pci_res;
}
- ixlv_dbg_init(sc, "VF Device is ready for configuration\n");
+ iavf_dbg_init(sc, "VF Device is ready for configuration\n");
/* Sets up Admin Queue */
- error = ixlv_setup_vc(sc);
+ error = iavf_setup_vc(sc);
if (error) {
device_printf(dev, "%s: Error setting up PF comms, %d\n",
__func__, error);
goto err_pci_res;
}
- ixlv_dbg_init(sc, "PF API version verified\n");
+ iavf_dbg_init(sc, "PF API version verified\n");
/* Need API version before sending reset message */
- error = ixlv_reset(sc);
+ error = iavf_reset(sc);
if (error) {
device_printf(dev, "VF reset failed; reload the driver\n");
goto err_aq;
}
- ixlv_dbg_init(sc, "VF reset complete\n");
+ iavf_dbg_init(sc, "VF reset complete\n");
/* Ask for VF config from PF */
- error = ixlv_vf_config(sc);
+ error = iavf_vf_config(sc);
if (error) {
device_printf(dev, "Error getting configuration from PF: %d\n",
error);
@@ -414,8 +414,8 @@
sc->vf_res->max_vectors,
sc->vf_res->rss_key_size,
sc->vf_res->rss_lut_size);
- ixlv_dbg_info(sc, "Capabilities=%b\n",
- sc->vf_res->vf_cap_flags, IXLV_PRINTF_VF_OFFLOAD_FLAGS);
+ iavf_dbg_info(sc, "Capabilities=%b\n",
+ sc->vf_res->vf_cap_flags, IAVF_PRINTF_VF_OFFLOAD_FLAGS);
/* got VF config message back from PF, now we can parse it */
for (int i = 0; i < sc->vf_res->num_vsis; i++) {
@@ -430,10 +430,10 @@
}
vsi->id = sc->vsi_res->vsi_id;
- ixlv_dbg_init(sc, "Resource Acquisition complete\n");
+ iavf_dbg_init(sc, "Resource Acquisition complete\n");
/* If no mac address was assigned just make a random one */
- if (!ixlv_check_ether_addr(hw->mac.addr)) {
+ if (!iavf_check_ether_addr(hw->mac.addr)) {
u8 addr[ETHER_ADDR_LEN];
arc4rand(&addr, sizeof(addr), 0);
addr[0] &= 0xFE;
@@ -444,7 +444,7 @@
iflib_set_mac(ctx, hw->mac.addr);
/* Allocate filter lists */
- ixlv_init_filters(sc);
+ iavf_init_filters(sc);
/* Fill out more iflib parameters */
scctx->isc_ntxqsets_max = scctx->isc_nrxqsets_max =
@@ -472,20 +472,20 @@
return (0);
err_res_buf:
- free(sc->vf_res, M_IXLV);
+ free(sc->vf_res, M_IAVF);
err_aq:
i40e_shutdown_adminq(hw);
err_pci_res:
- ixlv_free_pci_resources(sc);
+ iavf_free_pci_resources(sc);
err_early:
return (error);
}
static int
-ixlv_if_attach_post(if_ctx_t ctx)
+iavf_if_attach_post(if_ctx_t ctx)
{
device_t dev;
- struct ixlv_sc *sc;
+ struct iavf_sc *sc;
struct i40e_hw *hw;
struct ixl_vsi *vsi;
int error = 0;
@@ -503,19 +503,19 @@
vsi->num_tx_queues = vsi->shared->isc_ntxqsets;
/* Setup the stack interface */
- ixlv_setup_interface(dev, sc);
+ iavf_setup_interface(dev, sc);
INIT_DBG_DEV(dev, "Interface setup complete");
/* Initialize statistics & add sysctls */
bzero(&sc->vsi.eth_stats, sizeof(struct i40e_eth_stats));
- ixlv_add_device_sysctls(sc);
+ iavf_add_device_sysctls(sc);
- sc->init_state = IXLV_INIT_READY;
+ sc->init_state = IAVF_INIT_READY;
atomic_store_rel_32(&sc->queues_enabled, 0);
/* We want AQ enabled early for init */
- ixlv_enable_adminq_irq(hw);
+ iavf_enable_adminq_irq(hw);
INIT_DBG_DEV(dev, "end");
@@ -527,9 +527,9 @@
* -> This means that this isn't allowed to fail
*/
static int
-ixlv_if_detach(if_ctx_t ctx)
+iavf_if_detach(if_ctx_t ctx)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
struct i40e_hw *hw = &sc->hw;
device_t dev = sc->dev;
@@ -540,7 +540,7 @@
/* Remove all the media and link information */
ifmedia_removeall(vsi->media);
- ixlv_disable_adminq_irq(hw);
+ iavf_disable_adminq_irq(hw);
status = i40e_shutdown_adminq(&sc->hw);
if (status != I40E_SUCCESS) {
device_printf(dev,
@@ -548,71 +548,71 @@
i40e_stat_str(hw, status));
}
- free(sc->vf_res, M_IXLV);
- ixlv_free_pci_resources(sc);
- ixlv_free_filters(sc);
+ free(sc->vf_res, M_IAVF);
+ iavf_free_pci_resources(sc);
+ iavf_free_filters(sc);
INIT_DBG_DEV(dev, "end");
return (0);
}
static int
-ixlv_if_shutdown(if_ctx_t ctx)
+iavf_if_shutdown(if_ctx_t ctx)
{
return (0);
}
static int
-ixlv_if_suspend(if_ctx_t ctx)
+iavf_if_suspend(if_ctx_t ctx)
{
return (0);
}
static int
-ixlv_if_resume(if_ctx_t ctx)
+iavf_if_resume(if_ctx_t ctx)
{
return (0);
}
static int
-ixlv_send_vc_msg_sleep(struct ixlv_sc *sc, u32 op)
+iavf_send_vc_msg_sleep(struct iavf_sc *sc, u32 op)
{
int error = 0;
if_ctx_t ctx = sc->vsi.ctx;
error = ixl_vc_send_cmd(sc, op);
if (error != 0) {
- ixlv_dbg_vc(sc, "Error sending %b: %d\n", op, IXLV_FLAGS, error);
+ iavf_dbg_vc(sc, "Error sending %b: %d\n", op, IAVF_FLAGS, error);
return (error);
}
/* Don't wait for a response if the device is being detached. */
if (!iflib_in_detach(ctx)) {
- ixlv_dbg_vc(sc, "Sleeping for op %b\n", op, IXLV_FLAGS);
+ iavf_dbg_vc(sc, "Sleeping for op %b\n", op, IAVF_FLAGS);
error = sx_sleep(ixl_vc_get_op_chan(sc, op),
- iflib_ctx_lock_get(ctx), PRI_MAX, "ixlvc", IXLV_AQ_TIMEOUT);
+ iflib_ctx_lock_get(ctx), PRI_MAX, "iavf_vc", IAVF_AQ_TIMEOUT);
if (error == EWOULDBLOCK)
- device_printf(sc->dev, "%b timed out\n", op, IXLV_FLAGS);
+ device_printf(sc->dev, "%b timed out\n", op, IAVF_FLAGS);
}
return (error);
}
static int
-ixlv_send_vc_msg(struct ixlv_sc *sc, u32 op)
+iavf_send_vc_msg(struct iavf_sc *sc, u32 op)
{
int error = 0;
error = ixl_vc_send_cmd(sc, op);
if (error != 0)
- ixlv_dbg_vc(sc, "Error sending %b: %d\n", op, IXLV_FLAGS, error);
+ iavf_dbg_vc(sc, "Error sending %b: %d\n", op, IAVF_FLAGS, error);
return (error);
}
static void
-ixlv_init_queues(struct ixl_vsi *vsi)
+iavf_init_queues(struct ixl_vsi *vsi)
{
if_softc_ctx_t scctx = vsi->shared;
struct ixl_tx_queue *tx_que = vsi->tx_queues;
@@ -635,9 +635,9 @@
}
void
-ixlv_if_init(if_ctx_t ctx)
+iavf_if_init(if_ctx_t ctx)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
struct i40e_hw *hw = &sc->hw;
struct ifnet *ifp = iflib_get_ifp(ctx);
@@ -648,50 +648,50 @@
MPASS(sx_xlocked(iflib_ctx_lock_get(ctx)));
- error = ixlv_reset_complete(hw);
+ error = iavf_reset_complete(hw);
if (error) {
device_printf(sc->dev, "%s: VF reset failed\n",
__func__);
}
if (!i40e_check_asq_alive(hw)) {
- ixlv_dbg_info(sc, "ASQ is not alive, re-initializing AQ\n");
+ iavf_dbg_info(sc, "ASQ is not alive, re-initializing AQ\n");
pci_enable_busmaster(sc->dev);
i40e_shutdown_adminq(hw);
i40e_init_adminq(hw);
}
/* Make sure queues are disabled */
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_DISABLE_QUEUES);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_DISABLE_QUEUES);
bcopy(IF_LLADDR(ifp), tmpaddr, ETHER_ADDR_LEN);
if (!cmp_etheraddr(hw->mac.addr, tmpaddr) &&
(i40e_validate_mac_addr(tmpaddr) == I40E_SUCCESS)) {
- error = ixlv_del_mac_filter(sc, hw->mac.addr);
+ error = iavf_del_mac_filter(sc, hw->mac.addr);
if (error == 0)
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_DEL_MAC_FILTER);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_DEL_MAC_FILTER);
bcopy(tmpaddr, hw->mac.addr, ETH_ALEN);
}
- error = ixlv_add_mac_filter(sc, hw->mac.addr, 0);
+ error = iavf_add_mac_filter(sc, hw->mac.addr, 0);
if (!error || error == EEXIST)
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_ADD_MAC_FILTER);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_ADD_MAC_FILTER);
iflib_set_mac(ctx, hw->mac.addr);
/* Prepare the queues for operation */
- ixlv_init_queues(vsi);
+ iavf_init_queues(vsi);
/* Set initial ITR values */
- ixlv_configure_itr(sc);
+ iavf_configure_itr(sc);
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_CONFIGURE_QUEUES);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_CONFIGURE_QUEUES);
/* Set up RSS */
- ixlv_config_rss(sc);
+ iavf_config_rss(sc);
/* Map vectors */
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_MAP_VECTORS);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_MAP_VECTORS);
/* Init SW TX ring indices */
if (vsi->enable_head_writeback)
@@ -700,22 +700,22 @@
ixl_init_tx_rsqs(vsi);
/* Configure promiscuous mode */
- ixlv_if_promisc_set(ctx, if_getflags(ifp));
+ iavf_if_promisc_set(ctx, if_getflags(ifp));
/* Enable queues */
- ixlv_send_vc_msg_sleep(sc, IXLV_FLAG_AQ_ENABLE_QUEUES);
+ iavf_send_vc_msg_sleep(sc, IAVF_FLAG_AQ_ENABLE_QUEUES);
- sc->init_state = IXLV_RUNNING;
+ sc->init_state = IAVF_RUNNING;
}
/*
- * ixlv_attach() helper function; initalizes the admin queue
+ * iavf_attach() helper function; initalizes the admin queue
* and attempts to establish contact with the PF by
* retrying the initial "API version" message several times
* or until the PF responds.
*/
static int
-ixlv_setup_vc(struct ixlv_sc *sc)
+iavf_setup_vc(struct iavf_sc *sc)
{
struct i40e_hw *hw = &sc->hw;
device_t dev = sc->dev;
@@ -728,7 +728,7 @@
hw->aq.arq_buf_size = IXL_AQ_BUF_SZ;
hw->aq.asq_buf_size = IXL_AQ_BUF_SZ;
- for (int i = 0; i < IXLV_AQ_MAX_ERR; i++) {
+ for (int i = 0; i < IAVF_AQ_MAX_ERR; i++) {
/* Initialize admin queue */
error = i40e_init_adminq(hw);
if (error) {
@@ -738,12 +738,12 @@
continue;
}
- ixlv_dbg_init(sc, "Initialized Admin Queue; starting"
+ iavf_dbg_init(sc, "Initialized Admin Queue; starting"
" send_api_ver attempt %d", i+1);
retry_send:
/* Send VF's API version */
- error = ixlv_send_api_ver(sc);
+ error = iavf_send_api_ver(sc);
if (error) {
i40e_shutdown_adminq(hw);
ret_error = 2;
@@ -754,23 +754,23 @@
asq_retries = 0;
while (!i40e_asq_done(hw)) {
- if (++asq_retries > IXLV_AQ_MAX_ERR) {
+ if (++asq_retries > IAVF_AQ_MAX_ERR) {
i40e_shutdown_adminq(hw);
device_printf(dev, "Admin Queue timeout "
"(waiting for send_api_ver), %d more tries...\n",
- IXLV_AQ_MAX_ERR - (i + 1));
+ IAVF_AQ_MAX_ERR - (i + 1));
ret_error = 3;
break;
}
i40e_msec_pause(10);
}
- if (asq_retries > IXLV_AQ_MAX_ERR)
+ if (asq_retries > IAVF_AQ_MAX_ERR)
continue;
- ixlv_dbg_init(sc, "Sent API version message to PF");
+ iavf_dbg_init(sc, "Sent API version message to PF");
/* Verify that the VF accepts the PF's API version */
- error = ixlv_verify_api_ver(sc);
+ error = iavf_verify_api_ver(sc);
if (error == ETIMEDOUT) {
if (!send_api_ver_retried) {
/* Resend message, one more time */
@@ -802,11 +802,11 @@
}
/*
- * ixlv_attach() helper function; asks the PF for this VF's
+ * iavf_attach() helper function; asks the PF for this VF's
* configuration, and saves the information if it receives it.
*/
static int
-ixlv_vf_config(struct ixlv_sc *sc)
+iavf_vf_config(struct iavf_sc *sc)
{
struct i40e_hw *hw = &sc->hw;
device_t dev = sc->dev;
@@ -814,7 +814,7 @@
int asq_retries, retried = 0;
retry_config:
- error = ixlv_send_vf_config_msg(sc);
+ error = iavf_send_vf_config_msg(sc);
if (error) {
device_printf(dev,
"%s: Unable to send VF config request, attempt %d,"
@@ -824,7 +824,7 @@
asq_retries = 0;
while (!i40e_asq_done(hw)) {
- if (++asq_retries > IXLV_AQ_MAX_ERR) {
+ if (++asq_retries > IAVF_AQ_MAX_ERR) {
device_printf(dev, "%s: Admin Queue timeout "
"(waiting for send_vf_config_msg), attempt %d\n",
__func__, retried + 1);
@@ -834,13 +834,13 @@
i40e_msec_pause(10);
}
- ixlv_dbg_init(sc, "Sent VF config message to PF, attempt %d\n",
+ iavf_dbg_init(sc, "Sent VF config message to PF, attempt %d\n",
retried + 1);
if (!sc->vf_res) {
bufsz = sizeof(struct virtchnl_vf_resource) +
(I40E_MAX_VF_VSI * sizeof(struct virtchnl_vsi_resource));
- sc->vf_res = malloc(bufsz, M_IXLV, M_NOWAIT);
+ sc->vf_res = malloc(bufsz, M_IAVF, M_NOWAIT);
if (!sc->vf_res) {
device_printf(dev,
"%s: Unable to allocate memory for VF configuration"
@@ -851,7 +851,7 @@
}
/* Check for VF config response */
- error = ixlv_get_vf_config(sc);
+ error = iavf_get_vf_config(sc);
if (error == ETIMEDOUT) {
/* The 1st time we timeout, send the configuration message again */
if (!retried) {
@@ -859,7 +859,7 @@
goto retry_config;
}
device_printf(dev,
- "%s: ixlv_get_vf_config() timed out waiting for a response\n",
+ "%s: iavf_get_vf_config() timed out waiting for a response\n",
__func__);
}
if (error) {
@@ -871,15 +871,15 @@
goto done;
fail:
- free(sc->vf_res, M_IXLV);
+ free(sc->vf_res, M_IAVF);
done:
return (ret_error);
}
static int
-ixlv_if_msix_intr_assign(if_ctx_t ctx, int msix)
+iavf_if_msix_intr_assign(if_ctx_t ctx, int msix)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
struct ixl_rx_queue *rx_que = vsi->rx_queues;
struct ixl_tx_queue *tx_que = vsi->tx_queues;
@@ -892,7 +892,7 @@
/* Admin Que is vector 0*/
rid = vector + 1;
err = iflib_irq_alloc_generic(ctx, &vsi->irq, rid, IFLIB_INTR_ADMIN,
- ixlv_msix_adminq, sc, 0, "aq");
+ iavf_msix_adminq, sc, 0, "aq");
if (err) {
iflib_irq_free(ctx, &vsi->irq);
device_printf(iflib_get_dev(ctx),
@@ -906,7 +906,7 @@
snprintf(buf, sizeof(buf), "rxq%d", i);
err = iflib_irq_alloc_generic(ctx, &rx_que->que_irq, rid,
- IFLIB_INTR_RX, ixlv_msix_que, rx_que, rx_que->rxr.me, buf);
+ IFLIB_INTR_RX, iavf_msix_que, rx_que, rx_que->rxr.me, buf);
/* XXX: Does the driver work as expected if there are fewer num_rx_queues than
* what's expected in the iflib context? */
if (err) {
@@ -943,52 +943,52 @@
/* Enable all interrupts */
static void
-ixlv_if_enable_intr(if_ctx_t ctx)
+iavf_if_enable_intr(if_ctx_t ctx)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
- ixlv_enable_intr(vsi);
+ iavf_enable_intr(vsi);
}
/* Disable all interrupts */
static void
-ixlv_if_disable_intr(if_ctx_t ctx)
+iavf_if_disable_intr(if_ctx_t ctx)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
- ixlv_disable_intr(vsi);
+ iavf_disable_intr(vsi);
}
static int
-ixlv_if_rx_queue_intr_enable(if_ctx_t ctx, uint16_t rxqid)
+iavf_if_rx_queue_intr_enable(if_ctx_t ctx, uint16_t rxqid)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
struct i40e_hw *hw = vsi->hw;
struct ixl_rx_queue *rx_que = &vsi->rx_queues[rxqid];
- ixlv_enable_queue_irq(hw, rx_que->msix - 1);
+ iavf_enable_queue_irq(hw, rx_que->msix - 1);
return (0);
}
static int
-ixlv_if_tx_queue_intr_enable(if_ctx_t ctx, uint16_t txqid)
+iavf_if_tx_queue_intr_enable(if_ctx_t ctx, uint16_t txqid)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
struct i40e_hw *hw = vsi->hw;
struct ixl_tx_queue *tx_que = &vsi->tx_queues[txqid];
- ixlv_enable_queue_irq(hw, tx_que->msix - 1);
+ iavf_enable_queue_irq(hw, tx_que->msix - 1);
return (0);
}
static int
-ixlv_if_tx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int ntxqs, int ntxqsets)
+iavf_if_tx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int ntxqs, int ntxqsets)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
if_softc_ctx_t scctx = vsi->shared;
struct ixl_tx_queue *que;
@@ -1000,7 +1000,7 @@
/* Allocate queue structure memory */
if (!(vsi->tx_queues =
- (struct ixl_tx_queue *) malloc(sizeof(struct ixl_tx_queue) *ntxqsets, M_IXLV, M_NOWAIT | M_ZERO))) {
+ (struct ixl_tx_queue *) malloc(sizeof(struct ixl_tx_queue) *ntxqsets, M_IAVF, M_NOWAIT | M_ZERO))) {
device_printf(iflib_get_dev(ctx), "Unable to allocate TX ring memory\n");
return (ENOMEM);
}
@@ -1013,7 +1013,7 @@
if (!vsi->enable_head_writeback) {
/* Allocate report status array */
- if (!(txr->tx_rsq = malloc(sizeof(qidx_t) * scctx->isc_ntxd[0], M_IXLV, M_NOWAIT))) {
+ if (!(txr->tx_rsq = malloc(sizeof(qidx_t) * scctx->isc_ntxd[0], M_IAVF, M_NOWAIT))) {
device_printf(iflib_get_dev(ctx), "failed to allocate tx_rsq memory\n");
error = ENOMEM;
goto fail;
@@ -1031,14 +1031,14 @@
return (0);
fail:
- ixlv_if_queues_free(ctx);
+ iavf_if_queues_free(ctx);
return (error);
}
static int
-ixlv_if_rx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int nrxqs, int nrxqsets)
+iavf_if_rx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int nrxqs, int nrxqsets)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
struct ixl_rx_queue *que;
int i, error = 0;
@@ -1053,7 +1053,7 @@
/* Allocate queue structure memory */
if (!(vsi->rx_queues =
(struct ixl_rx_queue *) malloc(sizeof(struct ixl_rx_queue) *
- nrxqsets, M_IXLV, M_NOWAIT | M_ZERO))) {
+ nrxqsets, M_IAVF, M_NOWAIT | M_ZERO))) {
device_printf(iflib_get_dev(ctx), "Unable to allocate RX ring memory\n");
error = ENOMEM;
goto fail;
@@ -1074,14 +1074,14 @@
return (0);
fail:
- ixlv_if_queues_free(ctx);
+ iavf_if_queues_free(ctx);
return (error);
}
static void
-ixlv_if_queues_free(if_ctx_t ctx)
+iavf_if_queues_free(if_ctx_t ctx)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
if (!vsi->enable_head_writeback) {
@@ -1091,24 +1091,24 @@
for (i = 0, que = vsi->tx_queues; i < vsi->shared->isc_ntxqsets; i++, que++) {
struct tx_ring *txr = &que->txr;
if (txr->tx_rsq != NULL) {
- free(txr->tx_rsq, M_IXLV);
+ free(txr->tx_rsq, M_IAVF);
txr->tx_rsq = NULL;
}
}
}
if (vsi->tx_queues != NULL) {
- free(vsi->tx_queues, M_IXLV);
+ free(vsi->tx_queues, M_IAVF);
vsi->tx_queues = NULL;
}
if (vsi->rx_queues != NULL) {
- free(vsi->rx_queues, M_IXLV);
+ free(vsi->rx_queues, M_IAVF);
vsi->rx_queues = NULL;
}
}
static int
-ixlv_check_aq_errors(struct ixlv_sc *sc)
+iavf_check_aq_errors(struct iavf_sc *sc)
{
struct i40e_hw *hw = &sc->hw;
device_t dev = sc->dev;
@@ -1160,16 +1160,16 @@
* A VF reset might not be enough to fix a problem here;
* a PF reset could be required.
*/
- sc->init_state = IXLV_RESET_REQUIRED;
- ixlv_stop(sc);
- ixlv_request_reset(sc);
+ sc->init_state = IAVF_RESET_REQUIRED;
+ iavf_stop(sc);
+ iavf_request_reset(sc);
}
return (aq_error ? EIO : 0);
}
static enum i40e_status_code
-ixlv_process_adminq(struct ixlv_sc *sc, u16 *pending)
+iavf_process_adminq(struct iavf_sc *sc, u16 *pending)
{
enum i40e_status_code status = I40E_SUCCESS;
struct i40e_arq_event_info event;
@@ -1178,7 +1178,7 @@
int error = 0, loop = 0;
u32 reg;
- error = ixlv_check_aq_errors(sc);
+ error = iavf_check_aq_errors(sc);
if (error)
return (I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR);
@@ -1196,7 +1196,7 @@
*/
if (status)
break;
- ixlv_vc_completion(sc, v_msg->v_opcode,
+ iavf_vc_completion(sc, v_msg->v_opcode,
v_msg->v_retval, event.msg_buf, event.msg_len);
bzero(event.msg_buf, IXL_AQ_BUF_SZ);
} while (*pending && (loop++ < IXL_ADM_LIMIT));
@@ -1210,14 +1210,14 @@
}
static void
-ixlv_if_update_admin_status(if_ctx_t ctx)
+iavf_if_update_admin_status(if_ctx_t ctx)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct i40e_hw *hw = &sc->hw;
u16 pending;
- ixlv_process_adminq(sc, &pending);
- ixlv_update_link_status(sc);
+ iavf_process_adminq(sc, &pending);
+ iavf_update_link_status(sc);
/*
* If there are still messages to process, reschedule.
@@ -1226,18 +1226,18 @@
if (pending > 0)
iflib_admin_intr_deferred(ctx);
else
- ixlv_enable_adminq_irq(hw);
+ iavf_enable_adminq_irq(hw);
}
static int
-ixlv_mc_filter_apply(void *arg, struct ifmultiaddr *ifma, int count __unused)
+iavf_mc_filter_apply(void *arg, struct ifmultiaddr *ifma, int count __unused)
{
- struct ixlv_sc *sc = arg;
+ struct iavf_sc *sc = arg;
int error = 0;
if (ifma->ifma_addr->sa_family != AF_LINK)
return (0);
- error = ixlv_add_mac_filter(sc,
+ error = iavf_add_mac_filter(sc,
(u8*)LLADDR((struct sockaddr_dl *) ifma->ifma_addr),
IXL_FILTER_MC);
@@ -1245,36 +1245,36 @@
}
static void
-ixlv_if_multi_set(if_ctx_t ctx)
+iavf_if_multi_set(if_ctx_t ctx)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
int mcnt = 0;
- IOCTL_DEBUGOUT("ixlv_if_multi_set: begin");
+ IOCTL_DEBUGOUT("iavf_if_multi_set: begin");
mcnt = if_multiaddr_count(iflib_get_ifp(ctx), MAX_MULTICAST_ADDR);
if (__predict_false(mcnt == MAX_MULTICAST_ADDR)) {
/* Delete MC filters and enable mulitcast promisc instead */
- ixlv_init_multi(sc);
+ iavf_init_multi(sc);
sc->promisc_flags |= FLAG_VF_MULTICAST_PROMISC;
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_CONFIGURE_PROMISC);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_CONFIGURE_PROMISC);
return;
}
/* If there aren't too many filters, delete existing MC filters */
- ixlv_init_multi(sc);
+ iavf_init_multi(sc);
/* And (re-)install filters for all mcast addresses */
- mcnt = if_multi_apply(iflib_get_ifp(ctx), ixlv_mc_filter_apply, sc);
+ mcnt = if_multi_apply(iflib_get_ifp(ctx), iavf_mc_filter_apply, sc);
if (mcnt > 0)
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_ADD_MAC_FILTER);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_ADD_MAC_FILTER);
}
static int
-ixlv_if_mtu_set(if_ctx_t ctx, uint32_t mtu)
+iavf_if_mtu_set(if_ctx_t ctx, uint32_t mtu)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
IOCTL_DEBUGOUT("ioctl: SIOCSIFMTU (Set Interface MTU)");
@@ -1289,16 +1289,16 @@
}
static void
-ixlv_if_media_status(if_ctx_t ctx, struct ifmediareq *ifmr)
+iavf_if_media_status(if_ctx_t ctx, struct ifmediareq *ifmr)
{
#ifdef IXL_DEBUG
struct ifnet *ifp = iflib_get_ifp(ctx);
#endif
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
INIT_DBG_IF(ifp, "begin");
- ixlv_update_link_status(sc);
+ iavf_update_link_status(sc);
ifmr->ifm_status = IFM_AVALID;
ifmr->ifm_active = IFM_ETHER;
@@ -1341,7 +1341,7 @@
}
static int
-ixlv_if_media_change(if_ctx_t ctx)
+iavf_if_media_change(if_ctx_t ctx)
{
struct ifmedia *ifm = iflib_get_media(ctx);
@@ -1355,9 +1355,9 @@
}
static int
-ixlv_if_promisc_set(if_ctx_t ctx, int flags)
+iavf_if_promisc_set(if_ctx_t ctx, int flags)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ifnet *ifp = iflib_get_ifp(ctx);
sc->promisc_flags = 0;
@@ -1368,15 +1368,15 @@
if (flags & IFF_PROMISC)
sc->promisc_flags |= FLAG_VF_UNICAST_PROMISC;
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_CONFIGURE_PROMISC);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_CONFIGURE_PROMISC);
return (0);
}
static void
-ixlv_if_timer(if_ctx_t ctx, uint16_t qid)
+iavf_if_timer(if_ctx_t ctx, uint16_t qid)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct i40e_hw *hw = &sc->hw;
u32 val;
@@ -1388,7 +1388,7 @@
I40E_VFGEN_RSTAT_VFR_STATE_MASK;
if (val != VIRTCHNL_VFR_VFACTIVE
&& val != VIRTCHNL_VFR_COMPLETED) {
- ixlv_dbg_info(sc, "reset in progress! (%d)\n", val);
+ iavf_dbg_info(sc, "reset in progress! (%d)\n", val);
return;
}
@@ -1396,34 +1396,34 @@
iflib_admin_intr_deferred(ctx);
/* Update stats */
- ixlv_request_stats(sc);
+ iavf_request_stats(sc);
}
static void
-ixlv_if_vlan_register(if_ctx_t ctx, u16 vtag)
+iavf_if_vlan_register(if_ctx_t ctx, u16 vtag)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
- struct ixlv_vlan_filter *v;
+ struct iavf_vlan_filter *v;
if ((vtag == 0) || (vtag > 4095)) /* Invalid */
return;
++vsi->num_vlans;
- v = malloc(sizeof(struct ixlv_vlan_filter), M_IXLV, M_WAITOK | M_ZERO);
+ v = malloc(sizeof(struct iavf_vlan_filter), M_IAVF, M_WAITOK | M_ZERO);
SLIST_INSERT_HEAD(sc->vlan_filters, v, next);
v->vlan = vtag;
v->flags = IXL_FILTER_ADD;
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_ADD_VLAN_FILTER);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_ADD_VLAN_FILTER);
}
static void
-ixlv_if_vlan_unregister(if_ctx_t ctx, u16 vtag)
+iavf_if_vlan_unregister(if_ctx_t ctx, u16 vtag)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
- struct ixlv_vlan_filter *v;
+ struct iavf_vlan_filter *v;
int i = 0;
if ((vtag == 0) || (vtag > 4095)) /* Invalid */
@@ -1437,13 +1437,13 @@
}
}
if (i)
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_DEL_VLAN_FILTER);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_DEL_VLAN_FILTER);
}
static uint64_t
-ixlv_if_get_counter(if_ctx_t ctx, ift_counter cnt)
+iavf_if_get_counter(if_ctx_t ctx, ift_counter cnt)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
struct ixl_vsi *vsi = &sc->vsi;
if_t ifp = iflib_get_ifp(ctx);
@@ -1480,7 +1480,7 @@
static void
-ixlv_free_pci_resources(struct ixlv_sc *sc)
+iavf_free_pci_resources(struct iavf_sc *sc)
{
struct ixl_vsi *vsi = &sc->vsi;
struct ixl_rx_queue *rx_que = vsi->rx_queues;
@@ -1509,18 +1509,18 @@
** Requires the VF's Admin Queue to be initialized.
*/
static int
-ixlv_reset(struct ixlv_sc *sc)
+iavf_reset(struct iavf_sc *sc)
{
struct i40e_hw *hw = &sc->hw;
device_t dev = sc->dev;
int error = 0;
/* Ask the PF to reset us if we are initiating */
- if (sc->init_state != IXLV_RESET_PENDING)
- ixlv_request_reset(sc);
+ if (sc->init_state != IAVF_RESET_PENDING)
+ iavf_request_reset(sc);
i40e_msec_pause(100);
- error = ixlv_reset_complete(hw);
+ error = iavf_reset_complete(hw);
if (error) {
device_printf(dev, "%s: VF reset failed\n",
__func__);
@@ -1542,12 +1542,12 @@
return (error);
}
- ixlv_enable_adminq_irq(hw);
+ iavf_enable_adminq_irq(hw);
return (0);
}
static int
-ixlv_reset_complete(struct i40e_hw *hw)
+iavf_reset_complete(struct i40e_hw *hw)
{
u32 reg;
@@ -1566,7 +1566,7 @@
}
static void
-ixlv_setup_interface(device_t dev, struct ixlv_sc *sc)
+iavf_setup_interface(device_t dev, struct iavf_sc *sc)
{
struct ixl_vsi *vsi = &sc->vsi;
if_ctx_t ctx = vsi->ctx;
@@ -1590,13 +1590,13 @@
/*
** Get a new filter and add it to the mac filter list.
*/
-static struct ixlv_mac_filter *
-ixlv_get_mac_filter(struct ixlv_sc *sc)
+static struct iavf_mac_filter *
+iavf_get_mac_filter(struct iavf_sc *sc)
{
- struct ixlv_mac_filter *f;
+ struct iavf_mac_filter *f;
- f = malloc(sizeof(struct ixlv_mac_filter),
- M_IXLV, M_NOWAIT | M_ZERO);
+ f = malloc(sizeof(struct iavf_mac_filter),
+ M_IAVF, M_NOWAIT | M_ZERO);
if (f)
SLIST_INSERT_HEAD(sc->mac_filters, f, next);
@@ -1606,10 +1606,10 @@
/*
** Find the filter with matching MAC address
*/
-static struct ixlv_mac_filter *
-ixlv_find_mac_filter(struct ixlv_sc *sc, u8 *macaddr)
+static struct iavf_mac_filter *
+iavf_find_mac_filter(struct iavf_sc *sc, u8 *macaddr)
{
- struct ixlv_mac_filter *f;
+ struct iavf_mac_filter *f;
bool match = FALSE;
SLIST_FOREACH(f, sc->mac_filters, next) {
@@ -1628,9 +1628,9 @@
** Admin Queue interrupt handler
*/
static int
-ixlv_msix_adminq(void *arg)
+iavf_msix_adminq(void *arg)
{
- struct ixlv_sc *sc = arg;
+ struct iavf_sc *sc = arg;
struct i40e_hw *hw = &sc->hw;
u32 reg, mask;
bool do_task = FALSE;
@@ -1651,7 +1651,7 @@
}
wr32(hw, I40E_VFINT_ICR0_ENA1, mask);
- ixlv_enable_adminq_irq(hw);
+ iavf_enable_adminq_irq(hw);
if (do_task)
return (FILTER_SCHEDULE_THREAD);
@@ -1660,28 +1660,28 @@
}
void
-ixlv_enable_intr(struct ixl_vsi *vsi)
+iavf_enable_intr(struct ixl_vsi *vsi)
{
struct i40e_hw *hw = vsi->hw;
struct ixl_rx_queue *que = vsi->rx_queues;
- ixlv_enable_adminq_irq(hw);
+ iavf_enable_adminq_irq(hw);
for (int i = 0; i < vsi->num_rx_queues; i++, que++)
- ixlv_enable_queue_irq(hw, que->rxr.me);
+ iavf_enable_queue_irq(hw, que->rxr.me);
}
void
-ixlv_disable_intr(struct ixl_vsi *vsi)
+iavf_disable_intr(struct ixl_vsi *vsi)
{
struct i40e_hw *hw = vsi->hw;
struct ixl_rx_queue *que = vsi->rx_queues;
for (int i = 0; i < vsi->num_rx_queues; i++, que++)
- ixlv_disable_queue_irq(hw, que->rxr.me);
+ iavf_disable_queue_irq(hw, que->rxr.me);
}
static void
-ixlv_disable_adminq_irq(struct i40e_hw *hw)
+iavf_disable_adminq_irq(struct i40e_hw *hw)
{
wr32(hw, I40E_VFINT_DYN_CTL01, 0);
wr32(hw, I40E_VFINT_ICR0_ENA1, 0);
@@ -1690,7 +1690,7 @@
}
static void
-ixlv_enable_adminq_irq(struct i40e_hw *hw)
+iavf_enable_adminq_irq(struct i40e_hw *hw)
{
wr32(hw, I40E_VFINT_DYN_CTL01,
I40E_VFINT_DYN_CTL01_INTENA_MASK |
@@ -1701,7 +1701,7 @@
}
static void
-ixlv_enable_queue_irq(struct i40e_hw *hw, int id)
+iavf_enable_queue_irq(struct i40e_hw *hw, int id)
{
u32 reg;
@@ -1712,7 +1712,7 @@
}
static void
-ixlv_disable_queue_irq(struct i40e_hw *hw, int id)
+iavf_disable_queue_irq(struct i40e_hw *hw, int id)
{
wr32(hw, I40E_VFINT_DYN_CTLN1(id),
I40E_VFINT_DYN_CTLN1_ITR_INDX_MASK);
@@ -1720,7 +1720,7 @@
}
static void
-ixlv_configure_tx_itr(struct ixlv_sc *sc)
+iavf_configure_tx_itr(struct iavf_sc *sc)
{
struct i40e_hw *hw = &sc->hw;
struct ixl_vsi *vsi = &sc->vsi;
@@ -1739,7 +1739,7 @@
}
static void
-ixlv_configure_rx_itr(struct ixlv_sc *sc)
+iavf_configure_rx_itr(struct iavf_sc *sc)
{
struct i40e_hw *hw = &sc->hw;
struct ixl_vsi *vsi = &sc->vsi;
@@ -1761,10 +1761,10 @@
* Get initial ITR values from tunable values.
*/
static void
-ixlv_configure_itr(struct ixlv_sc *sc)
+iavf_configure_itr(struct iavf_sc *sc)
{
- ixlv_configure_tx_itr(sc);
- ixlv_configure_rx_itr(sc);
+ iavf_configure_tx_itr(sc);
+ iavf_configure_rx_itr(sc);
}
/*
@@ -1772,7 +1772,7 @@
** interrupt moderation value.
*/
static void
-ixlv_set_queue_rx_itr(struct ixl_rx_queue *que)
+iavf_set_queue_rx_itr(struct ixl_rx_queue *que)
{
struct ixl_vsi *vsi = que->vsi;
struct i40e_hw *hw = vsi->hw;
@@ -1791,14 +1791,14 @@
}
static int
-ixlv_msix_que(void *arg)
+iavf_msix_que(void *arg)
{
struct ixl_rx_queue *rx_que = arg;
++rx_que->irqs;
- ixlv_set_queue_rx_itr(rx_que);
- // ixlv_set_queue_tx_itr(que);
+ iavf_set_queue_rx_itr(rx_que);
+ // iavf_set_queue_tx_itr(que);
return (FILTER_SCHEDULE_THREAD);
}
@@ -1810,9 +1810,9 @@
*
**********************************************************************/
static void
-ixlv_init_multi(struct ixlv_sc *sc)
+iavf_init_multi(struct iavf_sc *sc)
{
- struct ixlv_mac_filter *f;
+ struct iavf_mac_filter *f;
int mcnt = 0;
/* First clear any multicast filters */
@@ -1824,7 +1824,7 @@
}
}
if (mcnt > 0)
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_DEL_MAC_FILTER);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_DEL_MAC_FILTER);
}
/*
@@ -1833,7 +1833,7 @@
** a link interrupt.
*/
void
-ixlv_update_link_status(struct ixlv_sc *sc)
+iavf_update_link_status(struct iavf_sc *sc)
{
struct ixl_vsi *vsi = &sc->vsi;
u64 baudrate;
@@ -1842,7 +1842,7 @@
if (vsi->link_active == FALSE) {
vsi->link_active = TRUE;
baudrate = ixl_max_vc_speed_to_value(sc->link_speed);
- ixlv_dbg_info(sc, "baudrate: %lu\n", baudrate);
+ iavf_dbg_info(sc, "baudrate: %lu\n", baudrate);
iflib_link_state_change(vsi->ctx, LINK_STATE_UP, baudrate);
}
} else { /* Link down */
@@ -1861,28 +1861,28 @@
**********************************************************************/
static void
-ixlv_stop(struct ixlv_sc *sc)
+iavf_stop(struct iavf_sc *sc)
{
struct ifnet *ifp;
ifp = sc->vsi.ifp;
- ixlv_disable_intr(&sc->vsi);
+ iavf_disable_intr(&sc->vsi);
if (atomic_load_acq_32(&sc->queues_enabled))
- ixlv_send_vc_msg_sleep(sc, IXLV_FLAG_AQ_DISABLE_QUEUES);
+ iavf_send_vc_msg_sleep(sc, IAVF_FLAG_AQ_DISABLE_QUEUES);
}
static void
-ixlv_if_stop(if_ctx_t ctx)
+iavf_if_stop(if_ctx_t ctx)
{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
+ struct iavf_sc *sc = iflib_get_softc(ctx);
- ixlv_stop(sc);
+ iavf_stop(sc);
}
static void
-ixlv_config_rss_reg(struct ixlv_sc *sc)
+iavf_config_rss_reg(struct iavf_sc *sc)
{
struct i40e_hw *hw = &sc->hw;
struct ixl_vsi *vsi = &sc->vsi;
@@ -1966,29 +1966,29 @@
}
static void
-ixlv_config_rss_pf(struct ixlv_sc *sc)
+iavf_config_rss_pf(struct iavf_sc *sc)
{
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_CONFIG_RSS_KEY);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_CONFIG_RSS_KEY);
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_SET_RSS_HENA);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_SET_RSS_HENA);
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_CONFIG_RSS_LUT);
+ iavf_send_vc_msg(sc, IAVF_FLAG_AQ_CONFIG_RSS_LUT);
}
/*
-** ixlv_config_rss - setup RSS
+** iavf_config_rss - setup RSS
**
** RSS keys and table are cleared on VF reset.
*/
static void
-ixlv_config_rss(struct ixlv_sc *sc)
+iavf_config_rss(struct iavf_sc *sc)
{
if (sc->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_REG) {
- ixlv_dbg_info(sc, "Setting up RSS using VF registers...");
- ixlv_config_rss_reg(sc);
+ iavf_dbg_info(sc, "Setting up RSS using VF registers...");
+ iavf_config_rss_reg(sc);
} else if (sc->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF) {
- ixlv_dbg_info(sc, "Setting up RSS using messages to PF...");
- ixlv_config_rss_pf(sc);
+ iavf_dbg_info(sc, "Setting up RSS using messages to PF...");
+ iavf_config_rss_pf(sc);
} else
device_printf(sc->dev, "VF does not support RSS capability sent by PF.\n");
}
@@ -1999,27 +1999,27 @@
** channel message.
*/
static int
-ixlv_add_mac_filter(struct ixlv_sc *sc, u8 *macaddr, u16 flags)
+iavf_add_mac_filter(struct iavf_sc *sc, u8 *macaddr, u16 flags)
{
- struct ixlv_mac_filter *f;
+ struct iavf_mac_filter *f;
/* Does one already exist? */
- f = ixlv_find_mac_filter(sc, macaddr);
+ f = iavf_find_mac_filter(sc, macaddr);
if (f != NULL) {
- ixlv_dbg_filter(sc, "exists: " MAC_FORMAT "\n",
+ iavf_dbg_filter(sc, "exists: " MAC_FORMAT "\n",
MAC_FORMAT_ARGS(macaddr));
return (EEXIST);
}
/* If not, get a new empty filter */
- f = ixlv_get_mac_filter(sc);
+ f = iavf_get_mac_filter(sc);
if (f == NULL) {
device_printf(sc->dev, "%s: no filters available!!\n",
__func__);
return (ENOMEM);
}
- ixlv_dbg_filter(sc, "marked: " MAC_FORMAT "\n",
+ iavf_dbg_filter(sc, "marked: " MAC_FORMAT "\n",
MAC_FORMAT_ARGS(macaddr));
bcopy(macaddr, f->macaddr, ETHER_ADDR_LEN);
@@ -2032,11 +2032,11 @@
** Marks a MAC filter for deletion.
*/
static int
-ixlv_del_mac_filter(struct ixlv_sc *sc, u8 *macaddr)
+iavf_del_mac_filter(struct iavf_sc *sc, u8 *macaddr)
{
- struct ixlv_mac_filter *f;
+ struct iavf_mac_filter *f;
- f = ixlv_find_mac_filter(sc, macaddr);
+ f = iavf_find_mac_filter(sc, macaddr);
if (f == NULL)
return (ENOENT);
@@ -2048,7 +2048,7 @@
* Re-uses the name from the PF driver.
*/
static void
-ixlv_add_device_sysctls(struct ixlv_sc *sc)
+iavf_add_device_sysctls(struct iavf_sc *sc)
{
struct ixl_vsi *vsi = &sc->vsi;
device_t dev = sc->dev;
@@ -2061,16 +2061,16 @@
SYSCTL_ADD_PROC(ctx, ctx_list,
OID_AUTO, "current_speed", CTLTYPE_STRING | CTLFLAG_RD,
- sc, 0, ixlv_sysctl_current_speed, "A", "Current Port Speed");
+ sc, 0, iavf_sysctl_current_speed, "A", "Current Port Speed");
SYSCTL_ADD_PROC(ctx, ctx_list,
OID_AUTO, "tx_itr", CTLTYPE_INT | CTLFLAG_RW,
- sc, 0, ixlv_sysctl_tx_itr, "I",
+ sc, 0, iavf_sysctl_tx_itr, "I",
"Immediately set TX ITR value for all queues");
SYSCTL_ADD_PROC(ctx, ctx_list,
OID_AUTO, "rx_itr", CTLTYPE_INT | CTLFLAG_RW,
- sc, 0, ixlv_sysctl_rx_itr, "I",
+ sc, 0, iavf_sysctl_rx_itr, "I",
"Immediately set RX ITR value for all queues");
/* Add sysctls meant to print debug information, but don't list them
@@ -2089,19 +2089,19 @@
SYSCTL_ADD_PROC(ctx, debug_list,
OID_AUTO, "filter_list", CTLTYPE_STRING | CTLFLAG_RD,
- sc, 0, ixlv_sysctl_sw_filter_list, "A", "SW Filter List");
+ sc, 0, iavf_sysctl_sw_filter_list, "A", "SW Filter List");
SYSCTL_ADD_PROC(ctx, debug_list,
OID_AUTO, "queue_interrupt_table", CTLTYPE_STRING | CTLFLAG_RD,
- sc, 0, ixlv_sysctl_queue_interrupt_table, "A", "View MSI-X indices for TX/RX queues");
+ sc, 0, iavf_sysctl_queue_interrupt_table, "A", "View MSI-X indices for TX/RX queues");
SYSCTL_ADD_PROC(ctx, debug_list,
OID_AUTO, "do_vf_reset", CTLTYPE_INT | CTLFLAG_WR,
- sc, 0, ixlv_sysctl_vf_reset, "A", "Request a VF reset from PF");
+ sc, 0, iavf_sysctl_vf_reset, "A", "Request a VF reset from PF");
SYSCTL_ADD_PROC(ctx, debug_list,
OID_AUTO, "do_vflr_reset", CTLTYPE_INT | CTLFLAG_WR,
- sc, 0, ixlv_sysctl_vflr_reset, "A", "Request a VFLR reset from HW");
+ sc, 0, iavf_sysctl_vflr_reset, "A", "Request a VFLR reset from HW");
/* Add stats sysctls */
ixl_add_vsi_sysctls(dev, vsi, ctx, "vsi");
@@ -2110,38 +2110,38 @@
}
static void
-ixlv_init_filters(struct ixlv_sc *sc)
+iavf_init_filters(struct iavf_sc *sc)
{
sc->mac_filters = malloc(sizeof(struct mac_list),
- M_IXLV, M_WAITOK | M_ZERO);
+ M_IAVF, M_WAITOK | M_ZERO);
SLIST_INIT(sc->mac_filters);
sc->vlan_filters = malloc(sizeof(struct vlan_list),
- M_IXLV, M_WAITOK | M_ZERO);
+ M_IAVF, M_WAITOK | M_ZERO);
SLIST_INIT(sc->vlan_filters);
}
static void
-ixlv_free_filters(struct ixlv_sc *sc)
+iavf_free_filters(struct iavf_sc *sc)
{
- struct ixlv_mac_filter *f;
- struct ixlv_vlan_filter *v;
+ struct iavf_mac_filter *f;
+ struct iavf_vlan_filter *v;
while (!SLIST_EMPTY(sc->mac_filters)) {
f = SLIST_FIRST(sc->mac_filters);
SLIST_REMOVE_HEAD(sc->mac_filters, next);
- free(f, M_IXLV);
+ free(f, M_IAVF);
}
- free(sc->mac_filters, M_IXLV);
+ free(sc->mac_filters, M_IAVF);
while (!SLIST_EMPTY(sc->vlan_filters)) {
v = SLIST_FIRST(sc->vlan_filters);
SLIST_REMOVE_HEAD(sc->vlan_filters, next);
- free(v, M_IXLV);
+ free(v, M_IAVF);
}
- free(sc->vlan_filters, M_IXLV);
+ free(sc->vlan_filters, M_IAVF);
}
char *
-ixlv_vc_speed_to_string(enum virtchnl_link_speed link_speed)
+iavf_vc_speed_to_string(enum virtchnl_link_speed link_speed)
{
int index;
@@ -2184,13 +2184,13 @@
}
static int
-ixlv_sysctl_current_speed(SYSCTL_HANDLER_ARGS)
+iavf_sysctl_current_speed(SYSCTL_HANDLER_ARGS)
{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
+ struct iavf_sc *sc = (struct iavf_sc *)arg1;
int error = 0;
error = sysctl_handle_string(oidp,
- ixlv_vc_speed_to_string(sc->link_speed),
+ iavf_vc_speed_to_string(sc->link_speed),
8, req);
return (error);
}
@@ -2199,18 +2199,18 @@
* Sanity check and save off tunable values.
*/
static void
-ixlv_save_tunables(struct ixlv_sc *sc)
+iavf_save_tunables(struct iavf_sc *sc)
{
device_t dev = sc->dev;
/* Save tunable information */
- sc->dbg_mask = ixlv_core_debug_mask;
- sc->hw.debug_mask = ixlv_shared_debug_mask;
- sc->vsi.enable_head_writeback = !!(ixlv_enable_head_writeback);
+ sc->dbg_mask = iavf_core_debug_mask;
+ sc->hw.debug_mask = iavf_shared_debug_mask;
+ sc->vsi.enable_head_writeback = !!(iavf_enable_head_writeback);
- if (ixlv_tx_itr < 0 || ixlv_tx_itr > IXL_MAX_ITR) {
+ if (iavf_tx_itr < 0 || iavf_tx_itr > IXL_MAX_ITR) {
device_printf(dev, "Invalid tx_itr value of %d set!\n",
- ixlv_tx_itr);
+ iavf_tx_itr);
device_printf(dev, "tx_itr must be between %d and %d, "
"inclusive\n",
0, IXL_MAX_ITR);
@@ -2218,11 +2218,11 @@
IXL_ITR_4K);
sc->tx_itr = IXL_ITR_4K;
} else
- sc->tx_itr = ixlv_tx_itr;
+ sc->tx_itr = iavf_tx_itr;
- if (ixlv_rx_itr < 0 || ixlv_rx_itr > IXL_MAX_ITR) {
+ if (iavf_rx_itr < 0 || iavf_rx_itr > IXL_MAX_ITR) {
device_printf(dev, "Invalid rx_itr value of %d set!\n",
- ixlv_rx_itr);
+ iavf_rx_itr);
device_printf(dev, "rx_itr must be between %d and %d, "
"inclusive\n",
0, IXL_MAX_ITR);
@@ -2230,7 +2230,7 @@
IXL_ITR_8K);
sc->rx_itr = IXL_ITR_8K;
} else
- sc->rx_itr = ixlv_rx_itr;
+ sc->rx_itr = iavf_rx_itr;
}
/*
@@ -2238,9 +2238,9 @@
* Writes to the ITR registers immediately.
*/
static int
-ixlv_sysctl_tx_itr(SYSCTL_HANDLER_ARGS)
+iavf_sysctl_tx_itr(SYSCTL_HANDLER_ARGS)
{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
+ struct iavf_sc *sc = (struct iavf_sc *)arg1;
device_t dev = sc->dev;
int requested_tx_itr;
int error = 0;
@@ -2257,7 +2257,7 @@
}
sc->tx_itr = requested_tx_itr;
- ixlv_configure_tx_itr(sc);
+ iavf_configure_tx_itr(sc);
return (error);
}
@@ -2267,9 +2267,9 @@
* Writes to the ITR registers immediately.
*/
static int
-ixlv_sysctl_rx_itr(SYSCTL_HANDLER_ARGS)
+iavf_sysctl_rx_itr(SYSCTL_HANDLER_ARGS)
{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
+ struct iavf_sc *sc = (struct iavf_sc *)arg1;
device_t dev = sc->dev;
int requested_rx_itr;
int error = 0;
@@ -2286,17 +2286,17 @@
}
sc->rx_itr = requested_rx_itr;
- ixlv_configure_rx_itr(sc);
+ iavf_configure_rx_itr(sc);
return (error);
}
static int
-ixlv_sysctl_sw_filter_list(SYSCTL_HANDLER_ARGS)
+iavf_sysctl_sw_filter_list(SYSCTL_HANDLER_ARGS)
{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
- struct ixlv_mac_filter *f;
- struct ixlv_vlan_filter *v;
+ struct iavf_sc *sc = (struct iavf_sc *)arg1;
+ struct iavf_mac_filter *f;
+ struct iavf_vlan_filter *v;
device_t dev = sc->dev;
int ftl_len, ftl_counter = 0, error = 0;
struct sbuf *buf;
@@ -2355,9 +2355,9 @@
* to MSI-X vectors.
*/
static int
-ixlv_sysctl_queue_interrupt_table(SYSCTL_HANDLER_ARGS)
+iavf_sysctl_queue_interrupt_table(SYSCTL_HANDLER_ARGS)
{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
+ struct iavf_sc *sc = (struct iavf_sc *)arg1;
struct ixl_vsi *vsi = &sc->vsi;
device_t dev = sc->dev;
struct sbuf *buf;
@@ -2392,9 +2392,9 @@
#define CTX_ACTIVE(ctx) ((if_getdrvflags(iflib_get_ifp(ctx)) & IFF_DRV_RUNNING))
static int
-ixlv_sysctl_vf_reset(SYSCTL_HANDLER_ARGS)
+iavf_sysctl_vf_reset(SYSCTL_HANDLER_ARGS)
{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
+ struct iavf_sc *sc = (struct iavf_sc *)arg1;
int do_reset = 0, error = 0;
error = sysctl_handle_int(oidp, &do_reset, 0, req);
@@ -2402,7 +2402,7 @@
return (error);
if (do_reset == 1) {
- ixlv_reset(sc);
+ iavf_reset(sc);
if (CTX_ACTIVE(sc->vsi.ctx))
iflib_request_reset(sc->vsi.ctx);
}
@@ -2411,9 +2411,9 @@
}
static int
-ixlv_sysctl_vflr_reset(SYSCTL_HANDLER_ARGS)
+iavf_sysctl_vflr_reset(SYSCTL_HANDLER_ARGS)
{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
+ struct iavf_sc *sc = (struct iavf_sc *)arg1;
device_t dev = sc->dev;
int do_reset = 0, error = 0;
Index: sys/dev/ixl/if_ixlv.c
===================================================================
--- sys/dev/ixl/if_ixlv.c
+++ sys/dev/ixl/if_ixlv.c
@@ -1,2435 +0,0 @@
-/******************************************************************************
-
- Copyright (c) 2013-2018, Intel Corporation
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- 3. Neither the name of the Intel Corporation nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-******************************************************************************/
-/*$FreeBSD$*/
-
-#include "ixlv.h"
-
-/*********************************************************************
- * Driver version
- *********************************************************************/
-#define IAVF_DRIVER_VERSION_MAJOR 2
-#define IAVF_DRIVER_VERSION_MINOR 0
-#define IAVF_DRIVER_VERSION_BUILD 0
-
-#define IAVF_DRIVER_VERSION_STRING \
- __XSTRING(IAVF_DRIVER_VERSION_MAJOR) "." \
- __XSTRING(IAVF_DRIVER_VERSION_MINOR) "." \
- __XSTRING(IAVF_DRIVER_VERSION_BUILD) "-k"
-
-/*********************************************************************
- * PCI Device ID Table
- *
- * Used by probe to select devices to load on
- *
- * ( Vendor ID, Device ID, Branding String )
- *********************************************************************/
-
-static pci_vendor_info_t ixlv_vendor_info_array[] =
-{
- PVID(I40E_INTEL_VENDOR_ID, I40E_DEV_ID_VF, "Intel(R) Ethernet Virtual Function 700 Series"),
- PVID(I40E_INTEL_VENDOR_ID, I40E_DEV_ID_X722_VF, "Intel(R) Ethernet Virtual Function 700 Series (X722)"),
- PVID(I40E_INTEL_VENDOR_ID, I40E_DEV_ID_ADAPTIVE_VF, "Intel(R) Ethernet Adaptive Virtual Function"),
- /* required last entry */
- PVID_END
-};
-
-/*********************************************************************
- * Function prototypes
- *********************************************************************/
-static void *ixlv_register(device_t dev);
-static int ixlv_if_attach_pre(if_ctx_t ctx);
-static int ixlv_if_attach_post(if_ctx_t ctx);
-static int ixlv_if_detach(if_ctx_t ctx);
-static int ixlv_if_shutdown(if_ctx_t ctx);
-static int ixlv_if_suspend(if_ctx_t ctx);
-static int ixlv_if_resume(if_ctx_t ctx);
-static int ixlv_if_msix_intr_assign(if_ctx_t ctx, int msix);
-static void ixlv_if_enable_intr(if_ctx_t ctx);
-static void ixlv_if_disable_intr(if_ctx_t ctx);
-static int ixlv_if_rx_queue_intr_enable(if_ctx_t ctx, uint16_t rxqid);
-static int ixlv_if_tx_queue_intr_enable(if_ctx_t ctx, uint16_t txqid);
-static int ixlv_if_tx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int ntxqs, int ntxqsets);
-static int ixlv_if_rx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int nqs, int nqsets);
-static void ixlv_if_queues_free(if_ctx_t ctx);
-static void ixlv_if_update_admin_status(if_ctx_t ctx);
-static void ixlv_if_multi_set(if_ctx_t ctx);
-static int ixlv_if_mtu_set(if_ctx_t ctx, uint32_t mtu);
-static void ixlv_if_media_status(if_ctx_t ctx, struct ifmediareq *ifmr);
-static int ixlv_if_media_change(if_ctx_t ctx);
-static int ixlv_if_promisc_set(if_ctx_t ctx, int flags);
-static void ixlv_if_timer(if_ctx_t ctx, uint16_t qid);
-static void ixlv_if_vlan_register(if_ctx_t ctx, u16 vtag);
-static void ixlv_if_vlan_unregister(if_ctx_t ctx, u16 vtag);
-static uint64_t ixlv_if_get_counter(if_ctx_t ctx, ift_counter cnt);
-static void ixlv_if_stop(if_ctx_t ctx);
-
-static int ixlv_allocate_pci_resources(struct ixlv_sc *);
-static int ixlv_reset_complete(struct i40e_hw *);
-static int ixlv_setup_vc(struct ixlv_sc *);
-static int ixlv_reset(struct ixlv_sc *);
-static int ixlv_vf_config(struct ixlv_sc *);
-static void ixlv_init_filters(struct ixlv_sc *);
-static void ixlv_free_pci_resources(struct ixlv_sc *);
-static void ixlv_free_filters(struct ixlv_sc *);
-static void ixlv_setup_interface(device_t, struct ixlv_sc *);
-static void ixlv_add_device_sysctls(struct ixlv_sc *);
-static void ixlv_enable_adminq_irq(struct i40e_hw *);
-static void ixlv_disable_adminq_irq(struct i40e_hw *);
-static void ixlv_enable_queue_irq(struct i40e_hw *, int);
-static void ixlv_disable_queue_irq(struct i40e_hw *, int);
-static void ixlv_config_rss(struct ixlv_sc *);
-static void ixlv_stop(struct ixlv_sc *);
-
-static int ixlv_add_mac_filter(struct ixlv_sc *, u8 *, u16);
-static int ixlv_del_mac_filter(struct ixlv_sc *sc, u8 *macaddr);
-static int ixlv_msix_que(void *);
-static int ixlv_msix_adminq(void *);
-//static void ixlv_del_multi(struct ixlv_sc *sc);
-static void ixlv_init_multi(struct ixlv_sc *sc);
-static void ixlv_configure_itr(struct ixlv_sc *sc);
-
-static int ixlv_sysctl_rx_itr(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_tx_itr(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_current_speed(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_sw_filter_list(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_queue_interrupt_table(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_vf_reset(SYSCTL_HANDLER_ARGS);
-static int ixlv_sysctl_vflr_reset(SYSCTL_HANDLER_ARGS);
-
-char *ixlv_vc_speed_to_string(enum virtchnl_link_speed link_speed);
-static void ixlv_save_tunables(struct ixlv_sc *);
-static enum i40e_status_code
- ixlv_process_adminq(struct ixlv_sc *, u16 *);
-static int ixlv_send_vc_msg(struct ixlv_sc *sc, u32 op);
-static int ixlv_send_vc_msg_sleep(struct ixlv_sc *sc, u32 op);
-
-/*********************************************************************
- * FreeBSD Device Interface Entry Points
- *********************************************************************/
-
-static device_method_t ixlv_methods[] = {
- /* Device interface */
- DEVMETHOD(device_register, ixlv_register),
- DEVMETHOD(device_probe, iflib_device_probe),
- DEVMETHOD(device_attach, iflib_device_attach),
- DEVMETHOD(device_detach, iflib_device_detach),
- DEVMETHOD(device_shutdown, iflib_device_shutdown),
- DEVMETHOD_END
-};
-
-static driver_t ixlv_driver = {
- "iavf", ixlv_methods, sizeof(struct ixlv_sc),
-};
-
-devclass_t ixlv_devclass;
-DRIVER_MODULE(iavf, pci, ixlv_driver, ixlv_devclass, 0, 0);
-MODULE_PNP_INFO("U32:vendor;U32:device;U32:subvendor;U32:subdevice;U32:revision",
- pci, iavf, ixlv_vendor_info_array,
- nitems(ixlv_vendor_info_array) - 1);
-MODULE_VERSION(iavf, 1);
-
-MODULE_DEPEND(iavf, pci, 1, 1, 1);
-MODULE_DEPEND(iavf, ether, 1, 1, 1);
-MODULE_DEPEND(iavf, iflib, 1, 1, 1);
-
-MALLOC_DEFINE(M_IXLV, "iavf", "iavf driver allocations");
-
-static device_method_t ixlv_if_methods[] = {
- DEVMETHOD(ifdi_attach_pre, ixlv_if_attach_pre),
- DEVMETHOD(ifdi_attach_post, ixlv_if_attach_post),
- DEVMETHOD(ifdi_detach, ixlv_if_detach),
- DEVMETHOD(ifdi_shutdown, ixlv_if_shutdown),
- DEVMETHOD(ifdi_suspend, ixlv_if_suspend),
- DEVMETHOD(ifdi_resume, ixlv_if_resume),
- DEVMETHOD(ifdi_init, ixlv_if_init),
- DEVMETHOD(ifdi_stop, ixlv_if_stop),
- DEVMETHOD(ifdi_msix_intr_assign, ixlv_if_msix_intr_assign),
- DEVMETHOD(ifdi_intr_enable, ixlv_if_enable_intr),
- DEVMETHOD(ifdi_intr_disable, ixlv_if_disable_intr),
- DEVMETHOD(ifdi_rx_queue_intr_enable, ixlv_if_rx_queue_intr_enable),
- DEVMETHOD(ifdi_tx_queue_intr_enable, ixlv_if_tx_queue_intr_enable),
- DEVMETHOD(ifdi_tx_queues_alloc, ixlv_if_tx_queues_alloc),
- DEVMETHOD(ifdi_rx_queues_alloc, ixlv_if_rx_queues_alloc),
- DEVMETHOD(ifdi_queues_free, ixlv_if_queues_free),
- DEVMETHOD(ifdi_update_admin_status, ixlv_if_update_admin_status),
- DEVMETHOD(ifdi_multi_set, ixlv_if_multi_set),
- DEVMETHOD(ifdi_mtu_set, ixlv_if_mtu_set),
- DEVMETHOD(ifdi_media_status, ixlv_if_media_status),
- DEVMETHOD(ifdi_media_change, ixlv_if_media_change),
- DEVMETHOD(ifdi_promisc_set, ixlv_if_promisc_set),
- DEVMETHOD(ifdi_timer, ixlv_if_timer),
- DEVMETHOD(ifdi_vlan_register, ixlv_if_vlan_register),
- DEVMETHOD(ifdi_vlan_unregister, ixlv_if_vlan_unregister),
- DEVMETHOD(ifdi_get_counter, ixlv_if_get_counter),
- DEVMETHOD_END
-};
-
-static driver_t ixlv_if_driver = {
- "iavf_if", ixlv_if_methods, sizeof(struct ixlv_sc)
-};
-
-/*
-** TUNEABLE PARAMETERS:
-*/
-
-static SYSCTL_NODE(_hw, OID_AUTO, iavf, CTLFLAG_RD, 0,
- "iavf driver parameters");
-
-/*
- * Different method for processing TX descriptor
- * completion.
- */
-static int ixlv_enable_head_writeback = 0;
-TUNABLE_INT("hw.iavf.enable_head_writeback",
- &ixlv_enable_head_writeback);
-SYSCTL_INT(_hw_iavf, OID_AUTO, enable_head_writeback, CTLFLAG_RDTUN,
- &ixlv_enable_head_writeback, 0,
- "For detecting last completed TX descriptor by hardware, use value written by HW instead of checking descriptors");
-
-static int ixlv_core_debug_mask = 0;
-TUNABLE_INT("hw.iavf.core_debug_mask",
- &ixlv_core_debug_mask);
-SYSCTL_INT(_hw_iavf, OID_AUTO, core_debug_mask, CTLFLAG_RDTUN,
- &ixlv_core_debug_mask, 0,
- "Display debug statements that are printed in non-shared code");
-
-static int ixlv_shared_debug_mask = 0;
-TUNABLE_INT("hw.iavf.shared_debug_mask",
- &ixlv_shared_debug_mask);
-SYSCTL_INT(_hw_iavf, OID_AUTO, shared_debug_mask, CTLFLAG_RDTUN,
- &ixlv_shared_debug_mask, 0,
- "Display debug statements that are printed in shared code");
-
-int ixlv_rx_itr = IXL_ITR_8K;
-TUNABLE_INT("hw.iavf.rx_itr", &ixlv_rx_itr);
-SYSCTL_INT(_hw_iavf, OID_AUTO, rx_itr, CTLFLAG_RDTUN,
- &ixlv_rx_itr, 0, "RX Interrupt Rate");
-
-int ixlv_tx_itr = IXL_ITR_4K;
-TUNABLE_INT("hw.iavf.tx_itr", &ixlv_tx_itr);
-SYSCTL_INT(_hw_iavf, OID_AUTO, tx_itr, CTLFLAG_RDTUN,
- &ixlv_tx_itr, 0, "TX Interrupt Rate");
-
-extern struct if_txrx ixl_txrx_hwb;
-extern struct if_txrx ixl_txrx_dwb;
-
-static struct if_shared_ctx ixlv_sctx_init = {
- .isc_magic = IFLIB_MAGIC,
- .isc_q_align = PAGE_SIZE,/* max(DBA_ALIGN, PAGE_SIZE) */
- .isc_tx_maxsize = IXL_TSO_SIZE + sizeof(struct ether_vlan_header),
- .isc_tx_maxsegsize = IXL_MAX_DMA_SEG_SIZE,
- .isc_tso_maxsize = IXL_TSO_SIZE + sizeof(struct ether_vlan_header),
- .isc_tso_maxsegsize = IXL_MAX_DMA_SEG_SIZE,
- .isc_rx_maxsize = 16384,
- .isc_rx_nsegments = IXL_MAX_RX_SEGS,
- .isc_rx_maxsegsize = IXL_MAX_DMA_SEG_SIZE,
- .isc_nfl = 1,
- .isc_ntxqs = 1,
- .isc_nrxqs = 1,
-
- .isc_admin_intrcnt = 1,
- .isc_vendor_info = ixlv_vendor_info_array,
- .isc_driver_version = IAVF_DRIVER_VERSION_STRING,
- .isc_driver = &ixlv_if_driver,
- .isc_flags = IFLIB_NEED_SCRATCH | IFLIB_NEED_ZERO_CSUM | IFLIB_IS_VF,
-
- .isc_nrxd_min = {IXL_MIN_RING},
- .isc_ntxd_min = {IXL_MIN_RING},
- .isc_nrxd_max = {IXL_MAX_RING},
- .isc_ntxd_max = {IXL_MAX_RING},
- .isc_nrxd_default = {IXL_DEFAULT_RING},
- .isc_ntxd_default = {IXL_DEFAULT_RING},
-};
-
-if_shared_ctx_t ixlv_sctx = &ixlv_sctx_init;
-
-/*** Functions ***/
-static void *
-ixlv_register(device_t dev)
-{
- return (ixlv_sctx);
-}
-
-static int
-ixlv_allocate_pci_resources(struct ixlv_sc *sc)
-{
- struct i40e_hw *hw = &sc->hw;
- device_t dev = iflib_get_dev(sc->vsi.ctx);
- int rid;
-
- /* Map BAR0 */
- rid = PCIR_BAR(0);
- sc->pci_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
- &rid, RF_ACTIVE);
-
- if (!(sc->pci_mem)) {
- device_printf(dev, "Unable to allocate bus resource: PCI memory\n");
- return (ENXIO);
- }
-
- /* Save off the PCI information */
- hw->vendor_id = pci_get_vendor(dev);
- hw->device_id = pci_get_device(dev);
- hw->revision_id = pci_read_config(dev, PCIR_REVID, 1);
- hw->subsystem_vendor_id =
- pci_read_config(dev, PCIR_SUBVEND_0, 2);
- hw->subsystem_device_id =
- pci_read_config(dev, PCIR_SUBDEV_0, 2);
-
- hw->bus.device = pci_get_slot(dev);
- hw->bus.func = pci_get_function(dev);
-
- /* Save off register access information */
- sc->osdep.mem_bus_space_tag =
- rman_get_bustag(sc->pci_mem);
- sc->osdep.mem_bus_space_handle =
- rman_get_bushandle(sc->pci_mem);
- sc->osdep.mem_bus_space_size = rman_get_size(sc->pci_mem);
- sc->osdep.flush_reg = I40E_VFGEN_RSTAT;
- sc->osdep.dev = dev;
-
- sc->hw.hw_addr = (u8 *) &sc->osdep.mem_bus_space_handle;
- sc->hw.back = &sc->osdep;
-
- return (0);
-}
-
-static int
-ixlv_if_attach_pre(if_ctx_t ctx)
-{
- device_t dev;
- struct ixlv_sc *sc;
- struct i40e_hw *hw;
- struct ixl_vsi *vsi;
- if_softc_ctx_t scctx;
- int error = 0;
-
- dev = iflib_get_dev(ctx);
- sc = iflib_get_softc(ctx);
-
- vsi = &sc->vsi;
- vsi->back = sc;
- sc->dev = dev;
- hw = &sc->hw;
-
- vsi->dev = dev;
- vsi->hw = &sc->hw;
- vsi->num_vlans = 0;
- vsi->ctx = ctx;
- vsi->media = iflib_get_media(ctx);
- vsi->shared = scctx = iflib_get_softc_ctx(ctx);
-
- ixlv_save_tunables(sc);
-
- /* Do PCI setup - map BAR0, etc */
- if (ixlv_allocate_pci_resources(sc)) {
- device_printf(dev, "%s: Allocation of PCI resources failed\n",
- __func__);
- error = ENXIO;
- goto err_early;
- }
-
- ixlv_dbg_init(sc, "Allocated PCI resources and MSIX vectors\n");
-
- /*
- * XXX: This is called by init_shared_code in the PF driver,
- * but the rest of that function does not support VFs.
- */
- error = i40e_set_mac_type(hw);
- if (error) {
- device_printf(dev, "%s: set_mac_type failed: %d\n",
- __func__, error);
- goto err_pci_res;
- }
-
- error = ixlv_reset_complete(hw);
- if (error) {
- device_printf(dev, "%s: Device is still being reset\n",
- __func__);
- goto err_pci_res;
- }
-
- ixlv_dbg_init(sc, "VF Device is ready for configuration\n");
-
- /* Sets up Admin Queue */
- error = ixlv_setup_vc(sc);
- if (error) {
- device_printf(dev, "%s: Error setting up PF comms, %d\n",
- __func__, error);
- goto err_pci_res;
- }
-
- ixlv_dbg_init(sc, "PF API version verified\n");
-
- /* Need API version before sending reset message */
- error = ixlv_reset(sc);
- if (error) {
- device_printf(dev, "VF reset failed; reload the driver\n");
- goto err_aq;
- }
-
- ixlv_dbg_init(sc, "VF reset complete\n");
-
- /* Ask for VF config from PF */
- error = ixlv_vf_config(sc);
- if (error) {
- device_printf(dev, "Error getting configuration from PF: %d\n",
- error);
- goto err_aq;
- }
-
- device_printf(dev, "VSIs %d, QPs %d, MSIX %d, RSS sizes: key %d lut %d\n",
- sc->vf_res->num_vsis,
- sc->vf_res->num_queue_pairs,
- sc->vf_res->max_vectors,
- sc->vf_res->rss_key_size,
- sc->vf_res->rss_lut_size);
- ixlv_dbg_info(sc, "Capabilities=%b\n",
- sc->vf_res->vf_cap_flags, IXLV_PRINTF_VF_OFFLOAD_FLAGS);
-
- /* got VF config message back from PF, now we can parse it */
- for (int i = 0; i < sc->vf_res->num_vsis; i++) {
- /* XXX: We only use the first VSI we find */
- if (sc->vf_res->vsi_res[i].vsi_type == I40E_VSI_SRIOV)
- sc->vsi_res = &sc->vf_res->vsi_res[i];
- }
- if (!sc->vsi_res) {
- device_printf(dev, "%s: no LAN VSI found\n", __func__);
- error = EIO;
- goto err_res_buf;
- }
- vsi->id = sc->vsi_res->vsi_id;
-
- ixlv_dbg_init(sc, "Resource Acquisition complete\n");
-
- /* If no mac address was assigned just make a random one */
- if (!ixlv_check_ether_addr(hw->mac.addr)) {
- u8 addr[ETHER_ADDR_LEN];
- arc4rand(&addr, sizeof(addr), 0);
- addr[0] &= 0xFE;
- addr[0] |= 0x02;
- bcopy(addr, hw->mac.addr, sizeof(addr));
- }
- bcopy(hw->mac.addr, hw->mac.perm_addr, ETHER_ADDR_LEN);
- iflib_set_mac(ctx, hw->mac.addr);
-
- /* Allocate filter lists */
- ixlv_init_filters(sc);
-
- /* Fill out more iflib parameters */
- scctx->isc_ntxqsets_max = scctx->isc_nrxqsets_max =
- sc->vsi_res->num_queue_pairs;
- if (vsi->enable_head_writeback) {
- scctx->isc_txqsizes[0] = roundup2(scctx->isc_ntxd[0]
- * sizeof(struct i40e_tx_desc) + sizeof(u32), DBA_ALIGN);
- scctx->isc_txrx = &ixl_txrx_hwb;
- } else {
- scctx->isc_txqsizes[0] = roundup2(scctx->isc_ntxd[0]
- * sizeof(struct i40e_tx_desc), DBA_ALIGN);
- scctx->isc_txrx = &ixl_txrx_dwb;
- }
- scctx->isc_rxqsizes[0] = roundup2(scctx->isc_nrxd[0]
- * sizeof(union i40e_32byte_rx_desc), DBA_ALIGN);
- scctx->isc_msix_bar = PCIR_BAR(IXL_MSIX_BAR);
- scctx->isc_tx_nsegments = IXL_MAX_TX_SEGS;
- scctx->isc_tx_tso_segments_max = IXL_MAX_TSO_SEGS;
- scctx->isc_tx_tso_size_max = IXL_TSO_SIZE;
- scctx->isc_tx_tso_segsize_max = IXL_MAX_DMA_SEG_SIZE;
- scctx->isc_rss_table_size = IXL_RSS_VSI_LUT_SIZE;
- scctx->isc_tx_csum_flags = CSUM_OFFLOAD;
- scctx->isc_capabilities = scctx->isc_capenable = IXL_CAPS;
-
- return (0);
-
-err_res_buf:
- free(sc->vf_res, M_IXLV);
-err_aq:
- i40e_shutdown_adminq(hw);
-err_pci_res:
- ixlv_free_pci_resources(sc);
-err_early:
- return (error);
-}
-
-static int
-ixlv_if_attach_post(if_ctx_t ctx)
-{
- device_t dev;
- struct ixlv_sc *sc;
- struct i40e_hw *hw;
- struct ixl_vsi *vsi;
- int error = 0;
-
- INIT_DBG_DEV(dev, "begin");
-
- dev = iflib_get_dev(ctx);
- sc = iflib_get_softc(ctx);
- vsi = &sc->vsi;
- vsi->ifp = iflib_get_ifp(ctx);
- hw = &sc->hw;
-
- /* Save off determined number of queues for interface */
- vsi->num_rx_queues = vsi->shared->isc_nrxqsets;
- vsi->num_tx_queues = vsi->shared->isc_ntxqsets;
-
- /* Setup the stack interface */
- ixlv_setup_interface(dev, sc);
-
- INIT_DBG_DEV(dev, "Interface setup complete");
-
- /* Initialize statistics & add sysctls */
- bzero(&sc->vsi.eth_stats, sizeof(struct i40e_eth_stats));
- ixlv_add_device_sysctls(sc);
-
- sc->init_state = IXLV_INIT_READY;
- atomic_store_rel_32(&sc->queues_enabled, 0);
-
- /* We want AQ enabled early for init */
- ixlv_enable_adminq_irq(hw);
-
- INIT_DBG_DEV(dev, "end");
-
- return (error);
-}
-
-/**
- * XXX: iflib always ignores the return value of detach()
- * -> This means that this isn't allowed to fail
- */
-static int
-ixlv_if_detach(if_ctx_t ctx)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
- struct i40e_hw *hw = &sc->hw;
- device_t dev = sc->dev;
- enum i40e_status_code status;
-
- INIT_DBG_DEV(dev, "begin");
-
- /* Remove all the media and link information */
- ifmedia_removeall(vsi->media);
-
- ixlv_disable_adminq_irq(hw);
- status = i40e_shutdown_adminq(&sc->hw);
- if (status != I40E_SUCCESS) {
- device_printf(dev,
- "i40e_shutdown_adminq() failed with status %s\n",
- i40e_stat_str(hw, status));
- }
-
- free(sc->vf_res, M_IXLV);
- ixlv_free_pci_resources(sc);
- ixlv_free_filters(sc);
-
- INIT_DBG_DEV(dev, "end");
- return (0);
-}
-
-static int
-ixlv_if_shutdown(if_ctx_t ctx)
-{
- return (0);
-}
-
-static int
-ixlv_if_suspend(if_ctx_t ctx)
-{
- return (0);
-}
-
-static int
-ixlv_if_resume(if_ctx_t ctx)
-{
- return (0);
-}
-
-static int
-ixlv_send_vc_msg_sleep(struct ixlv_sc *sc, u32 op)
-{
- int error = 0;
- if_ctx_t ctx = sc->vsi.ctx;
-
- error = ixl_vc_send_cmd(sc, op);
- if (error != 0) {
- ixlv_dbg_vc(sc, "Error sending %b: %d\n", op, IXLV_FLAGS, error);
- return (error);
- }
-
- /* Don't wait for a response if the device is being detached. */
- if (!iflib_in_detach(ctx)) {
- ixlv_dbg_vc(sc, "Sleeping for op %b\n", op, IXLV_FLAGS);
- error = sx_sleep(ixl_vc_get_op_chan(sc, op),
- iflib_ctx_lock_get(ctx), PRI_MAX, "ixlvc", IXLV_AQ_TIMEOUT);
-
- if (error == EWOULDBLOCK)
- device_printf(sc->dev, "%b timed out\n", op, IXLV_FLAGS);
- }
-
- return (error);
-}
-
-static int
-ixlv_send_vc_msg(struct ixlv_sc *sc, u32 op)
-{
- int error = 0;
-
- error = ixl_vc_send_cmd(sc, op);
- if (error != 0)
- ixlv_dbg_vc(sc, "Error sending %b: %d\n", op, IXLV_FLAGS, error);
-
- return (error);
-}
-
-static void
-ixlv_init_queues(struct ixl_vsi *vsi)
-{
- if_softc_ctx_t scctx = vsi->shared;
- struct ixl_tx_queue *tx_que = vsi->tx_queues;
- struct ixl_rx_queue *rx_que = vsi->rx_queues;
- struct rx_ring *rxr;
-
- for (int i = 0; i < vsi->num_tx_queues; i++, tx_que++)
- ixl_init_tx_ring(vsi, tx_que);
-
- for (int i = 0; i < vsi->num_rx_queues; i++, rx_que++) {
- rxr = &rx_que->rxr;
-
- if (scctx->isc_max_frame_size <= MCLBYTES)
- rxr->mbuf_sz = MCLBYTES;
- else
- rxr->mbuf_sz = MJUMPAGESIZE;
-
- wr32(vsi->hw, rxr->tail, 0);
- }
-}
-
-void
-ixlv_if_init(if_ctx_t ctx)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
- struct i40e_hw *hw = &sc->hw;
- struct ifnet *ifp = iflib_get_ifp(ctx);
- u8 tmpaddr[ETHER_ADDR_LEN];
- int error = 0;
-
- INIT_DBG_IF(ifp, "begin");
-
- MPASS(sx_xlocked(iflib_ctx_lock_get(ctx)));
-
- error = ixlv_reset_complete(hw);
- if (error) {
- device_printf(sc->dev, "%s: VF reset failed\n",
- __func__);
- }
-
- if (!i40e_check_asq_alive(hw)) {
- ixlv_dbg_info(sc, "ASQ is not alive, re-initializing AQ\n");
- pci_enable_busmaster(sc->dev);
- i40e_shutdown_adminq(hw);
- i40e_init_adminq(hw);
- }
-
- /* Make sure queues are disabled */
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_DISABLE_QUEUES);
-
- bcopy(IF_LLADDR(ifp), tmpaddr, ETHER_ADDR_LEN);
- if (!cmp_etheraddr(hw->mac.addr, tmpaddr) &&
- (i40e_validate_mac_addr(tmpaddr) == I40E_SUCCESS)) {
- error = ixlv_del_mac_filter(sc, hw->mac.addr);
- if (error == 0)
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_DEL_MAC_FILTER);
-
- bcopy(tmpaddr, hw->mac.addr, ETH_ALEN);
- }
-
- error = ixlv_add_mac_filter(sc, hw->mac.addr, 0);
- if (!error || error == EEXIST)
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_ADD_MAC_FILTER);
- iflib_set_mac(ctx, hw->mac.addr);
-
- /* Prepare the queues for operation */
- ixlv_init_queues(vsi);
-
- /* Set initial ITR values */
- ixlv_configure_itr(sc);
-
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_CONFIGURE_QUEUES);
-
- /* Set up RSS */
- ixlv_config_rss(sc);
-
- /* Map vectors */
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_MAP_VECTORS);
-
- /* Init SW TX ring indices */
- if (vsi->enable_head_writeback)
- ixl_init_tx_cidx(vsi);
- else
- ixl_init_tx_rsqs(vsi);
-
- /* Configure promiscuous mode */
- ixlv_if_promisc_set(ctx, if_getflags(ifp));
-
- /* Enable queues */
- ixlv_send_vc_msg_sleep(sc, IXLV_FLAG_AQ_ENABLE_QUEUES);
-
- sc->init_state = IXLV_RUNNING;
-}
-
-/*
- * ixlv_attach() helper function; initalizes the admin queue
- * and attempts to establish contact with the PF by
- * retrying the initial "API version" message several times
- * or until the PF responds.
- */
-static int
-ixlv_setup_vc(struct ixlv_sc *sc)
-{
- struct i40e_hw *hw = &sc->hw;
- device_t dev = sc->dev;
- int error = 0, ret_error = 0, asq_retries = 0;
- bool send_api_ver_retried = 0;
-
- /* Need to set these AQ paramters before initializing AQ */
- hw->aq.num_arq_entries = IXL_AQ_LEN;
- hw->aq.num_asq_entries = IXL_AQ_LEN;
- hw->aq.arq_buf_size = IXL_AQ_BUF_SZ;
- hw->aq.asq_buf_size = IXL_AQ_BUF_SZ;
-
- for (int i = 0; i < IXLV_AQ_MAX_ERR; i++) {
- /* Initialize admin queue */
- error = i40e_init_adminq(hw);
- if (error) {
- device_printf(dev, "%s: init_adminq failed: %d\n",
- __func__, error);
- ret_error = 1;
- continue;
- }
-
- ixlv_dbg_init(sc, "Initialized Admin Queue; starting"
- " send_api_ver attempt %d", i+1);
-
-retry_send:
- /* Send VF's API version */
- error = ixlv_send_api_ver(sc);
- if (error) {
- i40e_shutdown_adminq(hw);
- ret_error = 2;
- device_printf(dev, "%s: unable to send api"
- " version to PF on attempt %d, error %d\n",
- __func__, i+1, error);
- }
-
- asq_retries = 0;
- while (!i40e_asq_done(hw)) {
- if (++asq_retries > IXLV_AQ_MAX_ERR) {
- i40e_shutdown_adminq(hw);
- device_printf(dev, "Admin Queue timeout "
- "(waiting for send_api_ver), %d more tries...\n",
- IXLV_AQ_MAX_ERR - (i + 1));
- ret_error = 3;
- break;
- }
- i40e_msec_pause(10);
- }
- if (asq_retries > IXLV_AQ_MAX_ERR)
- continue;
-
- ixlv_dbg_init(sc, "Sent API version message to PF");
-
- /* Verify that the VF accepts the PF's API version */
- error = ixlv_verify_api_ver(sc);
- if (error == ETIMEDOUT) {
- if (!send_api_ver_retried) {
- /* Resend message, one more time */
- send_api_ver_retried = true;
- device_printf(dev,
- "%s: Timeout while verifying API version on first"
- " try!\n", __func__);
- goto retry_send;
- } else {
- device_printf(dev,
- "%s: Timeout while verifying API version on second"
- " try!\n", __func__);
- ret_error = 4;
- break;
- }
- }
- if (error) {
- device_printf(dev,
- "%s: Unable to verify API version,"
- " error %s\n", __func__, i40e_stat_str(hw, error));
- ret_error = 5;
- }
- break;
- }
-
- if (ret_error >= 4)
- i40e_shutdown_adminq(hw);
- return (ret_error);
-}
-
-/*
- * ixlv_attach() helper function; asks the PF for this VF's
- * configuration, and saves the information if it receives it.
- */
-static int
-ixlv_vf_config(struct ixlv_sc *sc)
-{
- struct i40e_hw *hw = &sc->hw;
- device_t dev = sc->dev;
- int bufsz, error = 0, ret_error = 0;
- int asq_retries, retried = 0;
-
-retry_config:
- error = ixlv_send_vf_config_msg(sc);
- if (error) {
- device_printf(dev,
- "%s: Unable to send VF config request, attempt %d,"
- " error %d\n", __func__, retried + 1, error);
- ret_error = 2;
- }
-
- asq_retries = 0;
- while (!i40e_asq_done(hw)) {
- if (++asq_retries > IXLV_AQ_MAX_ERR) {
- device_printf(dev, "%s: Admin Queue timeout "
- "(waiting for send_vf_config_msg), attempt %d\n",
- __func__, retried + 1);
- ret_error = 3;
- goto fail;
- }
- i40e_msec_pause(10);
- }
-
- ixlv_dbg_init(sc, "Sent VF config message to PF, attempt %d\n",
- retried + 1);
-
- if (!sc->vf_res) {
- bufsz = sizeof(struct virtchnl_vf_resource) +
- (I40E_MAX_VF_VSI * sizeof(struct virtchnl_vsi_resource));
- sc->vf_res = malloc(bufsz, M_IXLV, M_NOWAIT);
- if (!sc->vf_res) {
- device_printf(dev,
- "%s: Unable to allocate memory for VF configuration"
- " message from PF on attempt %d\n", __func__, retried + 1);
- ret_error = 1;
- goto fail;
- }
- }
-
- /* Check for VF config response */
- error = ixlv_get_vf_config(sc);
- if (error == ETIMEDOUT) {
- /* The 1st time we timeout, send the configuration message again */
- if (!retried) {
- retried++;
- goto retry_config;
- }
- device_printf(dev,
- "%s: ixlv_get_vf_config() timed out waiting for a response\n",
- __func__);
- }
- if (error) {
- device_printf(dev,
- "%s: Unable to get VF configuration from PF after %d tries!\n",
- __func__, retried + 1);
- ret_error = 4;
- }
- goto done;
-
-fail:
- free(sc->vf_res, M_IXLV);
-done:
- return (ret_error);
-}
-
-static int
-ixlv_if_msix_intr_assign(if_ctx_t ctx, int msix)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
- struct ixl_rx_queue *rx_que = vsi->rx_queues;
- struct ixl_tx_queue *tx_que = vsi->tx_queues;
- int err, i, rid, vector = 0;
- char buf[16];
-
- MPASS(vsi->shared->isc_nrxqsets > 0);
- MPASS(vsi->shared->isc_ntxqsets > 0);
-
- /* Admin Que is vector 0*/
- rid = vector + 1;
- err = iflib_irq_alloc_generic(ctx, &vsi->irq, rid, IFLIB_INTR_ADMIN,
- ixlv_msix_adminq, sc, 0, "aq");
- if (err) {
- iflib_irq_free(ctx, &vsi->irq);
- device_printf(iflib_get_dev(ctx),
- "Failed to register Admin Que handler");
- return (err);
- }
-
- /* Now set up the stations */
- for (i = 0, vector = 1; i < vsi->shared->isc_nrxqsets; i++, vector++, rx_que++) {
- rid = vector + 1;
-
- snprintf(buf, sizeof(buf), "rxq%d", i);
- err = iflib_irq_alloc_generic(ctx, &rx_que->que_irq, rid,
- IFLIB_INTR_RX, ixlv_msix_que, rx_que, rx_que->rxr.me, buf);
- /* XXX: Does the driver work as expected if there are fewer num_rx_queues than
- * what's expected in the iflib context? */
- if (err) {
- device_printf(iflib_get_dev(ctx),
- "Failed to allocate queue RX int vector %d, err: %d\n", i, err);
- vsi->num_rx_queues = i + 1;
- goto fail;
- }
- rx_que->msix = vector;
- }
-
- bzero(buf, sizeof(buf));
-
- for (i = 0; i < vsi->shared->isc_ntxqsets; i++, tx_que++) {
- snprintf(buf, sizeof(buf), "txq%d", i);
- iflib_softirq_alloc_generic(ctx,
- &vsi->rx_queues[i % vsi->shared->isc_nrxqsets].que_irq,
- IFLIB_INTR_TX, tx_que, tx_que->txr.me, buf);
-
- /* TODO: Maybe call a strategy function for this to figure out which
- * interrupts to map Tx queues to. I don't know if there's an immediately
- * better way than this other than a user-supplied map, though. */
- tx_que->msix = (i % vsi->shared->isc_nrxqsets) + 1;
- }
-
- return (0);
-fail:
- iflib_irq_free(ctx, &vsi->irq);
- rx_que = vsi->rx_queues;
- for (int i = 0; i < vsi->num_rx_queues; i++, rx_que++)
- iflib_irq_free(ctx, &rx_que->que_irq);
- return (err);
-}
-
-/* Enable all interrupts */
-static void
-ixlv_if_enable_intr(if_ctx_t ctx)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
-
- ixlv_enable_intr(vsi);
-}
-
-/* Disable all interrupts */
-static void
-ixlv_if_disable_intr(if_ctx_t ctx)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
-
- ixlv_disable_intr(vsi);
-}
-
-static int
-ixlv_if_rx_queue_intr_enable(if_ctx_t ctx, uint16_t rxqid)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
- struct i40e_hw *hw = vsi->hw;
- struct ixl_rx_queue *rx_que = &vsi->rx_queues[rxqid];
-
- ixlv_enable_queue_irq(hw, rx_que->msix - 1);
- return (0);
-}
-
-static int
-ixlv_if_tx_queue_intr_enable(if_ctx_t ctx, uint16_t txqid)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
- struct i40e_hw *hw = vsi->hw;
- struct ixl_tx_queue *tx_que = &vsi->tx_queues[txqid];
-
- ixlv_enable_queue_irq(hw, tx_que->msix - 1);
- return (0);
-}
-
-static int
-ixlv_if_tx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int ntxqs, int ntxqsets)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
- if_softc_ctx_t scctx = vsi->shared;
- struct ixl_tx_queue *que;
- int i, j, error = 0;
-
- MPASS(scctx->isc_ntxqsets > 0);
- MPASS(ntxqs == 1);
- MPASS(scctx->isc_ntxqsets == ntxqsets);
-
- /* Allocate queue structure memory */
- if (!(vsi->tx_queues =
- (struct ixl_tx_queue *) malloc(sizeof(struct ixl_tx_queue) *ntxqsets, M_IXLV, M_NOWAIT | M_ZERO))) {
- device_printf(iflib_get_dev(ctx), "Unable to allocate TX ring memory\n");
- return (ENOMEM);
- }
-
- for (i = 0, que = vsi->tx_queues; i < ntxqsets; i++, que++) {
- struct tx_ring *txr = &que->txr;
-
- txr->me = i;
- que->vsi = vsi;
-
- if (!vsi->enable_head_writeback) {
- /* Allocate report status array */
- if (!(txr->tx_rsq = malloc(sizeof(qidx_t) * scctx->isc_ntxd[0], M_IXLV, M_NOWAIT))) {
- device_printf(iflib_get_dev(ctx), "failed to allocate tx_rsq memory\n");
- error = ENOMEM;
- goto fail;
- }
- /* Init report status array */
- for (j = 0; j < scctx->isc_ntxd[0]; j++)
- txr->tx_rsq[j] = QIDX_INVALID;
- }
- /* get the virtual and physical address of the hardware queues */
- txr->tail = I40E_QTX_TAIL1(txr->me);
- txr->tx_base = (struct i40e_tx_desc *)vaddrs[i * ntxqs];
- txr->tx_paddr = paddrs[i * ntxqs];
- txr->que = que;
- }
-
- return (0);
-fail:
- ixlv_if_queues_free(ctx);
- return (error);
-}
-
-static int
-ixlv_if_rx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int nrxqs, int nrxqsets)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
- struct ixl_rx_queue *que;
- int i, error = 0;
-
-#ifdef INVARIANTS
- if_softc_ctx_t scctx = vsi->shared;
- MPASS(scctx->isc_nrxqsets > 0);
- MPASS(nrxqs == 1);
- MPASS(scctx->isc_nrxqsets == nrxqsets);
-#endif
-
- /* Allocate queue structure memory */
- if (!(vsi->rx_queues =
- (struct ixl_rx_queue *) malloc(sizeof(struct ixl_rx_queue) *
- nrxqsets, M_IXLV, M_NOWAIT | M_ZERO))) {
- device_printf(iflib_get_dev(ctx), "Unable to allocate RX ring memory\n");
- error = ENOMEM;
- goto fail;
- }
-
- for (i = 0, que = vsi->rx_queues; i < nrxqsets; i++, que++) {
- struct rx_ring *rxr = &que->rxr;
-
- rxr->me = i;
- que->vsi = vsi;
-
- /* get the virtual and physical address of the hardware queues */
- rxr->tail = I40E_QRX_TAIL1(rxr->me);
- rxr->rx_base = (union i40e_rx_desc *)vaddrs[i * nrxqs];
- rxr->rx_paddr = paddrs[i * nrxqs];
- rxr->que = que;
- }
-
- return (0);
-fail:
- ixlv_if_queues_free(ctx);
- return (error);
-}
-
-static void
-ixlv_if_queues_free(if_ctx_t ctx)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
-
- if (!vsi->enable_head_writeback) {
- struct ixl_tx_queue *que;
- int i = 0;
-
- for (i = 0, que = vsi->tx_queues; i < vsi->shared->isc_ntxqsets; i++, que++) {
- struct tx_ring *txr = &que->txr;
- if (txr->tx_rsq != NULL) {
- free(txr->tx_rsq, M_IXLV);
- txr->tx_rsq = NULL;
- }
- }
- }
-
- if (vsi->tx_queues != NULL) {
- free(vsi->tx_queues, M_IXLV);
- vsi->tx_queues = NULL;
- }
- if (vsi->rx_queues != NULL) {
- free(vsi->rx_queues, M_IXLV);
- vsi->rx_queues = NULL;
- }
-}
-
-static int
-ixlv_check_aq_errors(struct ixlv_sc *sc)
-{
- struct i40e_hw *hw = &sc->hw;
- device_t dev = sc->dev;
- u32 reg, oldreg;
- u8 aq_error = false;
-
- /* check for Admin queue errors */
- oldreg = reg = rd32(hw, hw->aq.arq.len);
- if (reg & I40E_VF_ARQLEN1_ARQVFE_MASK) {
- device_printf(dev, "ARQ VF Error detected\n");
- reg &= ~I40E_VF_ARQLEN1_ARQVFE_MASK;
- aq_error = true;
- }
- if (reg & I40E_VF_ARQLEN1_ARQOVFL_MASK) {
- device_printf(dev, "ARQ Overflow Error detected\n");
- reg &= ~I40E_VF_ARQLEN1_ARQOVFL_MASK;
- aq_error = true;
- }
- if (reg & I40E_VF_ARQLEN1_ARQCRIT_MASK) {
- device_printf(dev, "ARQ Critical Error detected\n");
- reg &= ~I40E_VF_ARQLEN1_ARQCRIT_MASK;
- aq_error = true;
- }
- if (oldreg != reg)
- wr32(hw, hw->aq.arq.len, reg);
-
- oldreg = reg = rd32(hw, hw->aq.asq.len);
- if (reg & I40E_VF_ATQLEN1_ATQVFE_MASK) {
- device_printf(dev, "ASQ VF Error detected\n");
- reg &= ~I40E_VF_ATQLEN1_ATQVFE_MASK;
- aq_error = true;
- }
- if (reg & I40E_VF_ATQLEN1_ATQOVFL_MASK) {
- device_printf(dev, "ASQ Overflow Error detected\n");
- reg &= ~I40E_VF_ATQLEN1_ATQOVFL_MASK;
- aq_error = true;
- }
- if (reg & I40E_VF_ATQLEN1_ATQCRIT_MASK) {
- device_printf(dev, "ASQ Critical Error detected\n");
- reg &= ~I40E_VF_ATQLEN1_ATQCRIT_MASK;
- aq_error = true;
- }
- if (oldreg != reg)
- wr32(hw, hw->aq.asq.len, reg);
-
- if (aq_error) {
- device_printf(dev, "WARNING: Stopping VF!\n");
- /*
- * A VF reset might not be enough to fix a problem here;
- * a PF reset could be required.
- */
- sc->init_state = IXLV_RESET_REQUIRED;
- ixlv_stop(sc);
- ixlv_request_reset(sc);
- }
-
- return (aq_error ? EIO : 0);
-}
-
-static enum i40e_status_code
-ixlv_process_adminq(struct ixlv_sc *sc, u16 *pending)
-{
- enum i40e_status_code status = I40E_SUCCESS;
- struct i40e_arq_event_info event;
- struct i40e_hw *hw = &sc->hw;
- struct virtchnl_msg *v_msg;
- int error = 0, loop = 0;
- u32 reg;
-
- error = ixlv_check_aq_errors(sc);
- if (error)
- return (I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR);
-
- event.buf_len = IXL_AQ_BUF_SZ;
- event.msg_buf = sc->aq_buffer;
- bzero(event.msg_buf, IXL_AQ_BUF_SZ);
- v_msg = (struct virtchnl_msg *)&event.desc;
-
- /* clean and process any events */
- do {
- status = i40e_clean_arq_element(hw, &event, pending);
- /*
- * Also covers normal case when i40e_clean_arq_element()
- * returns "I40E_ERR_ADMIN_QUEUE_NO_WORK"
- */
- if (status)
- break;
- ixlv_vc_completion(sc, v_msg->v_opcode,
- v_msg->v_retval, event.msg_buf, event.msg_len);
- bzero(event.msg_buf, IXL_AQ_BUF_SZ);
- } while (*pending && (loop++ < IXL_ADM_LIMIT));
-
- /* Re-enable admin queue interrupt cause */
- reg = rd32(hw, I40E_VFINT_ICR0_ENA1);
- reg |= I40E_VFINT_ICR0_ENA1_ADMINQ_MASK;
- wr32(hw, I40E_VFINT_ICR0_ENA1, reg);
-
- return (status);
-}
-
-static void
-ixlv_if_update_admin_status(if_ctx_t ctx)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct i40e_hw *hw = &sc->hw;
- u16 pending;
-
- ixlv_process_adminq(sc, &pending);
- ixlv_update_link_status(sc);
-
- /*
- * If there are still messages to process, reschedule.
- * Otherwise, re-enable the Admin Queue interrupt.
- */
- if (pending > 0)
- iflib_admin_intr_deferred(ctx);
- else
- ixlv_enable_adminq_irq(hw);
-}
-
-static int
-ixlv_mc_filter_apply(void *arg, struct ifmultiaddr *ifma, int count __unused)
-{
- struct ixlv_sc *sc = arg;
- int error = 0;
-
- if (ifma->ifma_addr->sa_family != AF_LINK)
- return (0);
- error = ixlv_add_mac_filter(sc,
- (u8*)LLADDR((struct sockaddr_dl *) ifma->ifma_addr),
- IXL_FILTER_MC);
-
- return (!error);
-}
-
-static void
-ixlv_if_multi_set(if_ctx_t ctx)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- int mcnt = 0;
-
- IOCTL_DEBUGOUT("ixlv_if_multi_set: begin");
-
- mcnt = if_multiaddr_count(iflib_get_ifp(ctx), MAX_MULTICAST_ADDR);
- if (__predict_false(mcnt == MAX_MULTICAST_ADDR)) {
- /* Delete MC filters and enable mulitcast promisc instead */
- ixlv_init_multi(sc);
- sc->promisc_flags |= FLAG_VF_MULTICAST_PROMISC;
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_CONFIGURE_PROMISC);
- return;
- }
-
- /* If there aren't too many filters, delete existing MC filters */
- ixlv_init_multi(sc);
-
- /* And (re-)install filters for all mcast addresses */
- mcnt = if_multi_apply(iflib_get_ifp(ctx), ixlv_mc_filter_apply, sc);
-
- if (mcnt > 0)
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_ADD_MAC_FILTER);
-}
-
-static int
-ixlv_if_mtu_set(if_ctx_t ctx, uint32_t mtu)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
-
- IOCTL_DEBUGOUT("ioctl: SIOCSIFMTU (Set Interface MTU)");
- if (mtu > IXL_MAX_FRAME - ETHER_HDR_LEN - ETHER_CRC_LEN -
- ETHER_VLAN_ENCAP_LEN)
- return (EINVAL);
-
- vsi->shared->isc_max_frame_size = mtu + ETHER_HDR_LEN + ETHER_CRC_LEN +
- ETHER_VLAN_ENCAP_LEN;
-
- return (0);
-}
-
-static void
-ixlv_if_media_status(if_ctx_t ctx, struct ifmediareq *ifmr)
-{
-#ifdef IXL_DEBUG
- struct ifnet *ifp = iflib_get_ifp(ctx);
-#endif
- struct ixlv_sc *sc = iflib_get_softc(ctx);
-
- INIT_DBG_IF(ifp, "begin");
-
- ixlv_update_link_status(sc);
-
- ifmr->ifm_status = IFM_AVALID;
- ifmr->ifm_active = IFM_ETHER;
-
- if (!sc->link_up)
- return;
-
- ifmr->ifm_status |= IFM_ACTIVE;
- /* Hardware is always full-duplex */
- ifmr->ifm_active |= IFM_FDX;
-
- /* Based on the link speed reported by the PF over the AdminQ, choose a
- * PHY type to report. This isn't 100% correct since we don't really
- * know the underlying PHY type of the PF, but at least we can report
- * a valid link speed...
- */
- switch (sc->link_speed) {
- case VIRTCHNL_LINK_SPEED_100MB:
- ifmr->ifm_active |= IFM_100_TX;
- break;
- case VIRTCHNL_LINK_SPEED_1GB:
- ifmr->ifm_active |= IFM_1000_T;
- break;
- case VIRTCHNL_LINK_SPEED_10GB:
- ifmr->ifm_active |= IFM_10G_SR;
- break;
- case VIRTCHNL_LINK_SPEED_20GB:
- case VIRTCHNL_LINK_SPEED_25GB:
- ifmr->ifm_active |= IFM_25G_SR;
- break;
- case VIRTCHNL_LINK_SPEED_40GB:
- ifmr->ifm_active |= IFM_40G_SR4;
- break;
- default:
- ifmr->ifm_active |= IFM_UNKNOWN;
- break;
- }
-
- INIT_DBG_IF(ifp, "end");
-}
-
-static int
-ixlv_if_media_change(if_ctx_t ctx)
-{
- struct ifmedia *ifm = iflib_get_media(ctx);
-
- INIT_DEBUGOUT("ixl_media_change: begin");
-
- if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
- return (EINVAL);
-
- if_printf(iflib_get_ifp(ctx), "Media change is not supported.\n");
- return (ENODEV);
-}
-
-static int
-ixlv_if_promisc_set(if_ctx_t ctx, int flags)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ifnet *ifp = iflib_get_ifp(ctx);
-
- sc->promisc_flags = 0;
-
- if (flags & IFF_ALLMULTI ||
- if_multiaddr_count(ifp, MAX_MULTICAST_ADDR) == MAX_MULTICAST_ADDR)
- sc->promisc_flags |= FLAG_VF_MULTICAST_PROMISC;
- if (flags & IFF_PROMISC)
- sc->promisc_flags |= FLAG_VF_UNICAST_PROMISC;
-
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_CONFIGURE_PROMISC);
-
- return (0);
-}
-
-static void
-ixlv_if_timer(if_ctx_t ctx, uint16_t qid)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct i40e_hw *hw = &sc->hw;
- u32 val;
-
- if (qid != 0)
- return;
-
- /* Check for when PF triggers a VF reset */
- val = rd32(hw, I40E_VFGEN_RSTAT) &
- I40E_VFGEN_RSTAT_VFR_STATE_MASK;
- if (val != VIRTCHNL_VFR_VFACTIVE
- && val != VIRTCHNL_VFR_COMPLETED) {
- ixlv_dbg_info(sc, "reset in progress! (%d)\n", val);
- return;
- }
-
- /* Fire off the adminq task */
- iflib_admin_intr_deferred(ctx);
-
- /* Update stats */
- ixlv_request_stats(sc);
-}
-
-static void
-ixlv_if_vlan_register(if_ctx_t ctx, u16 vtag)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
- struct ixlv_vlan_filter *v;
-
- if ((vtag == 0) || (vtag > 4095)) /* Invalid */
- return;
-
- ++vsi->num_vlans;
- v = malloc(sizeof(struct ixlv_vlan_filter), M_IXLV, M_WAITOK | M_ZERO);
- SLIST_INSERT_HEAD(sc->vlan_filters, v, next);
- v->vlan = vtag;
- v->flags = IXL_FILTER_ADD;
-
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_ADD_VLAN_FILTER);
-}
-
-static void
-ixlv_if_vlan_unregister(if_ctx_t ctx, u16 vtag)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
- struct ixlv_vlan_filter *v;
- int i = 0;
-
- if ((vtag == 0) || (vtag > 4095)) /* Invalid */
- return;
-
- SLIST_FOREACH(v, sc->vlan_filters, next) {
- if (v->vlan == vtag) {
- v->flags = IXL_FILTER_DEL;
- ++i;
- --vsi->num_vlans;
- }
- }
- if (i)
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_DEL_VLAN_FILTER);
-}
-
-static uint64_t
-ixlv_if_get_counter(if_ctx_t ctx, ift_counter cnt)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
- struct ixl_vsi *vsi = &sc->vsi;
- if_t ifp = iflib_get_ifp(ctx);
-
- switch (cnt) {
- case IFCOUNTER_IPACKETS:
- return (vsi->ipackets);
- case IFCOUNTER_IERRORS:
- return (vsi->ierrors);
- case IFCOUNTER_OPACKETS:
- return (vsi->opackets);
- case IFCOUNTER_OERRORS:
- return (vsi->oerrors);
- case IFCOUNTER_COLLISIONS:
- /* Collisions are by standard impossible in 40G/10G Ethernet */
- return (0);
- case IFCOUNTER_IBYTES:
- return (vsi->ibytes);
- case IFCOUNTER_OBYTES:
- return (vsi->obytes);
- case IFCOUNTER_IMCASTS:
- return (vsi->imcasts);
- case IFCOUNTER_OMCASTS:
- return (vsi->omcasts);
- case IFCOUNTER_IQDROPS:
- return (vsi->iqdrops);
- case IFCOUNTER_OQDROPS:
- return (vsi->oqdrops);
- case IFCOUNTER_NOPROTO:
- return (vsi->noproto);
- default:
- return (if_get_counter_default(ifp, cnt));
- }
-}
-
-
-static void
-ixlv_free_pci_resources(struct ixlv_sc *sc)
-{
- struct ixl_vsi *vsi = &sc->vsi;
- struct ixl_rx_queue *rx_que = vsi->rx_queues;
- device_t dev = sc->dev;
-
- /* We may get here before stations are setup */
- if (rx_que == NULL)
- goto early;
-
- /* Release all interrupts */
- iflib_irq_free(vsi->ctx, &vsi->irq);
-
- for (int i = 0; i < vsi->num_rx_queues; i++, rx_que++)
- iflib_irq_free(vsi->ctx, &rx_que->que_irq);
-
-early:
- if (sc->pci_mem != NULL)
- bus_release_resource(dev, SYS_RES_MEMORY,
- PCIR_BAR(0), sc->pci_mem);
-}
-
-
-/*
-** Requests a VF reset from the PF.
-**
-** Requires the VF's Admin Queue to be initialized.
-*/
-static int
-ixlv_reset(struct ixlv_sc *sc)
-{
- struct i40e_hw *hw = &sc->hw;
- device_t dev = sc->dev;
- int error = 0;
-
- /* Ask the PF to reset us if we are initiating */
- if (sc->init_state != IXLV_RESET_PENDING)
- ixlv_request_reset(sc);
-
- i40e_msec_pause(100);
- error = ixlv_reset_complete(hw);
- if (error) {
- device_printf(dev, "%s: VF reset failed\n",
- __func__);
- return (error);
- }
- pci_enable_busmaster(dev);
-
- error = i40e_shutdown_adminq(hw);
- if (error) {
- device_printf(dev, "%s: shutdown_adminq failed: %d\n",
- __func__, error);
- return (error);
- }
-
- error = i40e_init_adminq(hw);
- if (error) {
- device_printf(dev, "%s: init_adminq failed: %d\n",
- __func__, error);
- return (error);
- }
-
- ixlv_enable_adminq_irq(hw);
- return (0);
-}
-
-static int
-ixlv_reset_complete(struct i40e_hw *hw)
-{
- u32 reg;
-
- /* Wait up to ~10 seconds */
- for (int i = 0; i < 100; i++) {
- reg = rd32(hw, I40E_VFGEN_RSTAT) &
- I40E_VFGEN_RSTAT_VFR_STATE_MASK;
-
- if ((reg == VIRTCHNL_VFR_VFACTIVE) ||
- (reg == VIRTCHNL_VFR_COMPLETED))
- return (0);
- i40e_msec_pause(100);
- }
-
- return (EBUSY);
-}
-
-static void
-ixlv_setup_interface(device_t dev, struct ixlv_sc *sc)
-{
- struct ixl_vsi *vsi = &sc->vsi;
- if_ctx_t ctx = vsi->ctx;
- struct ifnet *ifp = iflib_get_ifp(ctx);
-
- INIT_DBG_DEV(dev, "begin");
-
- vsi->shared->isc_max_frame_size =
- ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN
- + ETHER_VLAN_ENCAP_LEN;
-#if __FreeBSD_version >= 1100000
- if_setbaudrate(ifp, IF_Gbps(40));
-#else
- if_initbaudrate(ifp, IF_Gbps(40));
-#endif
-
- ifmedia_add(vsi->media, IFM_ETHER | IFM_AUTO, 0, NULL);
- ifmedia_set(vsi->media, IFM_ETHER | IFM_AUTO);
-}
-
-/*
-** Get a new filter and add it to the mac filter list.
-*/
-static struct ixlv_mac_filter *
-ixlv_get_mac_filter(struct ixlv_sc *sc)
-{
- struct ixlv_mac_filter *f;
-
- f = malloc(sizeof(struct ixlv_mac_filter),
- M_IXLV, M_NOWAIT | M_ZERO);
- if (f)
- SLIST_INSERT_HEAD(sc->mac_filters, f, next);
-
- return (f);
-}
-
-/*
-** Find the filter with matching MAC address
-*/
-static struct ixlv_mac_filter *
-ixlv_find_mac_filter(struct ixlv_sc *sc, u8 *macaddr)
-{
- struct ixlv_mac_filter *f;
- bool match = FALSE;
-
- SLIST_FOREACH(f, sc->mac_filters, next) {
- if (cmp_etheraddr(f->macaddr, macaddr)) {
- match = TRUE;
- break;
- }
- }
-
- if (!match)
- f = NULL;
- return (f);
-}
-
-/*
-** Admin Queue interrupt handler
-*/
-static int
-ixlv_msix_adminq(void *arg)
-{
- struct ixlv_sc *sc = arg;
- struct i40e_hw *hw = &sc->hw;
- u32 reg, mask;
- bool do_task = FALSE;
-
- ++sc->admin_irq;
-
- reg = rd32(hw, I40E_VFINT_ICR01);
- /*
- * For masking off interrupt causes that need to be handled before
- * they can be re-enabled
- */
- mask = rd32(hw, I40E_VFINT_ICR0_ENA1);
-
- /* Check on the cause */
- if (reg & I40E_VFINT_ICR0_ADMINQ_MASK) {
- mask &= ~I40E_VFINT_ICR0_ENA_ADMINQ_MASK;
- do_task = TRUE;
- }
-
- wr32(hw, I40E_VFINT_ICR0_ENA1, mask);
- ixlv_enable_adminq_irq(hw);
-
- if (do_task)
- return (FILTER_SCHEDULE_THREAD);
- else
- return (FILTER_HANDLED);
-}
-
-void
-ixlv_enable_intr(struct ixl_vsi *vsi)
-{
- struct i40e_hw *hw = vsi->hw;
- struct ixl_rx_queue *que = vsi->rx_queues;
-
- ixlv_enable_adminq_irq(hw);
- for (int i = 0; i < vsi->num_rx_queues; i++, que++)
- ixlv_enable_queue_irq(hw, que->rxr.me);
-}
-
-void
-ixlv_disable_intr(struct ixl_vsi *vsi)
-{
- struct i40e_hw *hw = vsi->hw;
- struct ixl_rx_queue *que = vsi->rx_queues;
-
- for (int i = 0; i < vsi->num_rx_queues; i++, que++)
- ixlv_disable_queue_irq(hw, que->rxr.me);
-}
-
-static void
-ixlv_disable_adminq_irq(struct i40e_hw *hw)
-{
- wr32(hw, I40E_VFINT_DYN_CTL01, 0);
- wr32(hw, I40E_VFINT_ICR0_ENA1, 0);
- /* flush */
- rd32(hw, I40E_VFGEN_RSTAT);
-}
-
-static void
-ixlv_enable_adminq_irq(struct i40e_hw *hw)
-{
- wr32(hw, I40E_VFINT_DYN_CTL01,
- I40E_VFINT_DYN_CTL01_INTENA_MASK |
- I40E_VFINT_DYN_CTL01_ITR_INDX_MASK);
- wr32(hw, I40E_VFINT_ICR0_ENA1, I40E_VFINT_ICR0_ENA1_ADMINQ_MASK);
- /* flush */
- rd32(hw, I40E_VFGEN_RSTAT);
-}
-
-static void
-ixlv_enable_queue_irq(struct i40e_hw *hw, int id)
-{
- u32 reg;
-
- reg = I40E_VFINT_DYN_CTLN1_INTENA_MASK |
- I40E_VFINT_DYN_CTLN1_CLEARPBA_MASK |
- I40E_VFINT_DYN_CTLN1_ITR_INDX_MASK;
- wr32(hw, I40E_VFINT_DYN_CTLN1(id), reg);
-}
-
-static void
-ixlv_disable_queue_irq(struct i40e_hw *hw, int id)
-{
- wr32(hw, I40E_VFINT_DYN_CTLN1(id),
- I40E_VFINT_DYN_CTLN1_ITR_INDX_MASK);
- rd32(hw, I40E_VFGEN_RSTAT);
-}
-
-static void
-ixlv_configure_tx_itr(struct ixlv_sc *sc)
-{
- struct i40e_hw *hw = &sc->hw;
- struct ixl_vsi *vsi = &sc->vsi;
- struct ixl_tx_queue *que = vsi->tx_queues;
-
- vsi->tx_itr_setting = sc->tx_itr;
-
- for (int i = 0; i < vsi->num_tx_queues; i++, que++) {
- struct tx_ring *txr = &que->txr;
-
- wr32(hw, I40E_VFINT_ITRN1(IXL_TX_ITR, i),
- vsi->tx_itr_setting);
- txr->itr = vsi->tx_itr_setting;
- txr->latency = IXL_AVE_LATENCY;
- }
-}
-
-static void
-ixlv_configure_rx_itr(struct ixlv_sc *sc)
-{
- struct i40e_hw *hw = &sc->hw;
- struct ixl_vsi *vsi = &sc->vsi;
- struct ixl_rx_queue *que = vsi->rx_queues;
-
- vsi->rx_itr_setting = sc->rx_itr;
-
- for (int i = 0; i < vsi->num_rx_queues; i++, que++) {
- struct rx_ring *rxr = &que->rxr;
-
- wr32(hw, I40E_VFINT_ITRN1(IXL_RX_ITR, i),
- vsi->rx_itr_setting);
- rxr->itr = vsi->rx_itr_setting;
- rxr->latency = IXL_AVE_LATENCY;
- }
-}
-
-/*
- * Get initial ITR values from tunable values.
- */
-static void
-ixlv_configure_itr(struct ixlv_sc *sc)
-{
- ixlv_configure_tx_itr(sc);
- ixlv_configure_rx_itr(sc);
-}
-
-/*
-** Provide a update to the queue RX
-** interrupt moderation value.
-*/
-static void
-ixlv_set_queue_rx_itr(struct ixl_rx_queue *que)
-{
- struct ixl_vsi *vsi = que->vsi;
- struct i40e_hw *hw = vsi->hw;
- struct rx_ring *rxr = &que->rxr;
-
- /* Idle, do nothing */
- if (rxr->bytes == 0)
- return;
-
- /* Update the hardware if needed */
- if (rxr->itr != vsi->rx_itr_setting) {
- rxr->itr = vsi->rx_itr_setting;
- wr32(hw, I40E_VFINT_ITRN1(IXL_RX_ITR,
- que->rxr.me), rxr->itr);
- }
-}
-
-static int
-ixlv_msix_que(void *arg)
-{
- struct ixl_rx_queue *rx_que = arg;
-
- ++rx_que->irqs;
-
- ixlv_set_queue_rx_itr(rx_que);
- // ixlv_set_queue_tx_itr(que);
-
- return (FILTER_SCHEDULE_THREAD);
-}
-
-/*********************************************************************
- * Multicast Initialization
- *
- * This routine is called by init to reset a fresh state.
- *
- **********************************************************************/
-static void
-ixlv_init_multi(struct ixlv_sc *sc)
-{
- struct ixlv_mac_filter *f;
- int mcnt = 0;
-
- /* First clear any multicast filters */
- SLIST_FOREACH(f, sc->mac_filters, next) {
- if ((f->flags & IXL_FILTER_USED)
- && (f->flags & IXL_FILTER_MC)) {
- f->flags |= IXL_FILTER_DEL;
- mcnt++;
- }
- }
- if (mcnt > 0)
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_DEL_MAC_FILTER);
-}
-
-/*
-** Note: this routine updates the OS on the link state
-** the real check of the hardware only happens with
-** a link interrupt.
-*/
-void
-ixlv_update_link_status(struct ixlv_sc *sc)
-{
- struct ixl_vsi *vsi = &sc->vsi;
- u64 baudrate;
-
- if (sc->link_up){
- if (vsi->link_active == FALSE) {
- vsi->link_active = TRUE;
- baudrate = ixl_max_vc_speed_to_value(sc->link_speed);
- ixlv_dbg_info(sc, "baudrate: %lu\n", baudrate);
- iflib_link_state_change(vsi->ctx, LINK_STATE_UP, baudrate);
- }
- } else { /* Link down */
- if (vsi->link_active == TRUE) {
- vsi->link_active = FALSE;
- iflib_link_state_change(vsi->ctx, LINK_STATE_DOWN, 0);
- }
- }
-}
-
-/*********************************************************************
- *
- * This routine disables all traffic on the adapter by issuing a
- * global reset on the MAC and deallocates TX/RX buffers.
- *
- **********************************************************************/
-
-static void
-ixlv_stop(struct ixlv_sc *sc)
-{
- struct ifnet *ifp;
-
- ifp = sc->vsi.ifp;
-
- ixlv_disable_intr(&sc->vsi);
-
- if (atomic_load_acq_32(&sc->queues_enabled))
- ixlv_send_vc_msg_sleep(sc, IXLV_FLAG_AQ_DISABLE_QUEUES);
-}
-
-static void
-ixlv_if_stop(if_ctx_t ctx)
-{
- struct ixlv_sc *sc = iflib_get_softc(ctx);
-
- ixlv_stop(sc);
-}
-
-static void
-ixlv_config_rss_reg(struct ixlv_sc *sc)
-{
- struct i40e_hw *hw = &sc->hw;
- struct ixl_vsi *vsi = &sc->vsi;
- u32 lut = 0;
- u64 set_hena = 0, hena;
- int i, j, que_id;
- u32 rss_seed[IXL_RSS_KEY_SIZE_REG];
-#ifdef RSS
- u32 rss_hash_config;
-#endif
-
- /* Don't set up RSS if using a single queue */
- if (vsi->num_rx_queues == 1) {
- wr32(hw, I40E_VFQF_HENA(0), 0);
- wr32(hw, I40E_VFQF_HENA(1), 0);
- ixl_flush(hw);
- return;
- }
-
-#ifdef RSS
- /* Fetch the configured RSS key */
- rss_getkey((uint8_t *) &rss_seed);
-#else
- ixl_get_default_rss_key(rss_seed);
-#endif
-
- /* Fill out hash function seed */
- for (i = 0; i < IXL_RSS_KEY_SIZE_REG; i++)
- wr32(hw, I40E_VFQF_HKEY(i), rss_seed[i]);
-
- /* Enable PCTYPES for RSS: */
-#ifdef RSS
- rss_hash_config = rss_gethashconfig();
- if (rss_hash_config & RSS_HASHTYPE_RSS_IPV4)
- set_hena |= ((u64)1 << I40E_FILTER_PCTYPE_NONF_IPV4_OTHER);
- if (rss_hash_config & RSS_HASHTYPE_RSS_TCP_IPV4)
- set_hena |= ((u64)1 << I40E_FILTER_PCTYPE_NONF_IPV4_TCP);
- if (rss_hash_config & RSS_HASHTYPE_RSS_UDP_IPV4)
- set_hena |= ((u64)1 << I40E_FILTER_PCTYPE_NONF_IPV4_UDP);
- if (rss_hash_config & RSS_HASHTYPE_RSS_IPV6)
- set_hena |= ((u64)1 << I40E_FILTER_PCTYPE_NONF_IPV6_OTHER);
- if (rss_hash_config & RSS_HASHTYPE_RSS_IPV6_EX)
- set_hena |= ((u64)1 << I40E_FILTER_PCTYPE_FRAG_IPV6);
- if (rss_hash_config & RSS_HASHTYPE_RSS_TCP_IPV6)
- set_hena |= ((u64)1 << I40E_FILTER_PCTYPE_NONF_IPV6_TCP);
- if (rss_hash_config & RSS_HASHTYPE_RSS_UDP_IPV6)
- set_hena |= ((u64)1 << I40E_FILTER_PCTYPE_NONF_IPV6_UDP);
-#else
- set_hena = IXL_DEFAULT_RSS_HENA_XL710;
-#endif
- hena = (u64)rd32(hw, I40E_VFQF_HENA(0)) |
- ((u64)rd32(hw, I40E_VFQF_HENA(1)) << 32);
- hena |= set_hena;
- wr32(hw, I40E_VFQF_HENA(0), (u32)hena);
- wr32(hw, I40E_VFQF_HENA(1), (u32)(hena >> 32));
-
- /* Populate the LUT with max no. of queues in round robin fashion */
- for (i = 0, j = 0; i < IXL_RSS_VSI_LUT_SIZE; i++, j++) {
- if (j == vsi->num_rx_queues)
- j = 0;
-#ifdef RSS
- /*
- * Fetch the RSS bucket id for the given indirection entry.
- * Cap it at the number of configured buckets (which is
- * num_queues.)
- */
- que_id = rss_get_indirection_to_bucket(i);
- que_id = que_id % vsi->num_queues;
-#else
- que_id = j;
-#endif
- /* lut = 4-byte sliding window of 4 lut entries */
- lut = (lut << 8) | (que_id & IXL_RSS_VF_LUT_ENTRY_MASK);
- /* On i = 3, we have 4 entries in lut; write to the register */
- if ((i & 3) == 3) {
- wr32(hw, I40E_VFQF_HLUT(i >> 2), lut);
- DDPRINTF(sc->dev, "HLUT(%2d): %#010x", i, lut);
- }
- }
- ixl_flush(hw);
-}
-
-static void
-ixlv_config_rss_pf(struct ixlv_sc *sc)
-{
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_CONFIG_RSS_KEY);
-
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_SET_RSS_HENA);
-
- ixlv_send_vc_msg(sc, IXLV_FLAG_AQ_CONFIG_RSS_LUT);
-}
-
-/*
-** ixlv_config_rss - setup RSS
-**
-** RSS keys and table are cleared on VF reset.
-*/
-static void
-ixlv_config_rss(struct ixlv_sc *sc)
-{
- if (sc->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_REG) {
- ixlv_dbg_info(sc, "Setting up RSS using VF registers...");
- ixlv_config_rss_reg(sc);
- } else if (sc->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF) {
- ixlv_dbg_info(sc, "Setting up RSS using messages to PF...");
- ixlv_config_rss_pf(sc);
- } else
- device_printf(sc->dev, "VF does not support RSS capability sent by PF.\n");
-}
-
-/*
-** This routine adds new MAC filters to the sc's list;
-** these are later added in hardware by sending a virtual
-** channel message.
-*/
-static int
-ixlv_add_mac_filter(struct ixlv_sc *sc, u8 *macaddr, u16 flags)
-{
- struct ixlv_mac_filter *f;
-
- /* Does one already exist? */
- f = ixlv_find_mac_filter(sc, macaddr);
- if (f != NULL) {
- ixlv_dbg_filter(sc, "exists: " MAC_FORMAT "\n",
- MAC_FORMAT_ARGS(macaddr));
- return (EEXIST);
- }
-
- /* If not, get a new empty filter */
- f = ixlv_get_mac_filter(sc);
- if (f == NULL) {
- device_printf(sc->dev, "%s: no filters available!!\n",
- __func__);
- return (ENOMEM);
- }
-
- ixlv_dbg_filter(sc, "marked: " MAC_FORMAT "\n",
- MAC_FORMAT_ARGS(macaddr));
-
- bcopy(macaddr, f->macaddr, ETHER_ADDR_LEN);
- f->flags |= (IXL_FILTER_ADD | IXL_FILTER_USED);
- f->flags |= flags;
- return (0);
-}
-
-/*
-** Marks a MAC filter for deletion.
-*/
-static int
-ixlv_del_mac_filter(struct ixlv_sc *sc, u8 *macaddr)
-{
- struct ixlv_mac_filter *f;
-
- f = ixlv_find_mac_filter(sc, macaddr);
- if (f == NULL)
- return (ENOENT);
-
- f->flags |= IXL_FILTER_DEL;
- return (0);
-}
-
-/*
- * Re-uses the name from the PF driver.
- */
-static void
-ixlv_add_device_sysctls(struct ixlv_sc *sc)
-{
- struct ixl_vsi *vsi = &sc->vsi;
- device_t dev = sc->dev;
-
- struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(dev);
- struct sysctl_oid_list *ctx_list =
- SYSCTL_CHILDREN(device_get_sysctl_tree(dev));
- struct sysctl_oid *debug_node;
- struct sysctl_oid_list *debug_list;
-
- SYSCTL_ADD_PROC(ctx, ctx_list,
- OID_AUTO, "current_speed", CTLTYPE_STRING | CTLFLAG_RD,
- sc, 0, ixlv_sysctl_current_speed, "A", "Current Port Speed");
-
- SYSCTL_ADD_PROC(ctx, ctx_list,
- OID_AUTO, "tx_itr", CTLTYPE_INT | CTLFLAG_RW,
- sc, 0, ixlv_sysctl_tx_itr, "I",
- "Immediately set TX ITR value for all queues");
-
- SYSCTL_ADD_PROC(ctx, ctx_list,
- OID_AUTO, "rx_itr", CTLTYPE_INT | CTLFLAG_RW,
- sc, 0, ixlv_sysctl_rx_itr, "I",
- "Immediately set RX ITR value for all queues");
-
- /* Add sysctls meant to print debug information, but don't list them
- * in "sysctl -a" output. */
- debug_node = SYSCTL_ADD_NODE(ctx, ctx_list,
- OID_AUTO, "debug", CTLFLAG_RD | CTLFLAG_SKIP, NULL, "Debug Sysctls");
- debug_list = SYSCTL_CHILDREN(debug_node);
-
- SYSCTL_ADD_UINT(ctx, debug_list,
- OID_AUTO, "shared_debug_mask", CTLFLAG_RW,
- &sc->hw.debug_mask, 0, "Shared code debug message level");
-
- SYSCTL_ADD_UINT(ctx, debug_list,
- OID_AUTO, "core_debug_mask", CTLFLAG_RW,
- &sc->dbg_mask, 0, "Non-shared code debug message level");
-
- SYSCTL_ADD_PROC(ctx, debug_list,
- OID_AUTO, "filter_list", CTLTYPE_STRING | CTLFLAG_RD,
- sc, 0, ixlv_sysctl_sw_filter_list, "A", "SW Filter List");
-
- SYSCTL_ADD_PROC(ctx, debug_list,
- OID_AUTO, "queue_interrupt_table", CTLTYPE_STRING | CTLFLAG_RD,
- sc, 0, ixlv_sysctl_queue_interrupt_table, "A", "View MSI-X indices for TX/RX queues");
-
- SYSCTL_ADD_PROC(ctx, debug_list,
- OID_AUTO, "do_vf_reset", CTLTYPE_INT | CTLFLAG_WR,
- sc, 0, ixlv_sysctl_vf_reset, "A", "Request a VF reset from PF");
-
- SYSCTL_ADD_PROC(ctx, debug_list,
- OID_AUTO, "do_vflr_reset", CTLTYPE_INT | CTLFLAG_WR,
- sc, 0, ixlv_sysctl_vflr_reset, "A", "Request a VFLR reset from HW");
-
- /* Add stats sysctls */
- ixl_add_vsi_sysctls(dev, vsi, ctx, "vsi");
- ixl_add_queues_sysctls(dev, vsi);
-
-}
-
-static void
-ixlv_init_filters(struct ixlv_sc *sc)
-{
- sc->mac_filters = malloc(sizeof(struct mac_list),
- M_IXLV, M_WAITOK | M_ZERO);
- SLIST_INIT(sc->mac_filters);
- sc->vlan_filters = malloc(sizeof(struct vlan_list),
- M_IXLV, M_WAITOK | M_ZERO);
- SLIST_INIT(sc->vlan_filters);
-}
-
-static void
-ixlv_free_filters(struct ixlv_sc *sc)
-{
- struct ixlv_mac_filter *f;
- struct ixlv_vlan_filter *v;
-
- while (!SLIST_EMPTY(sc->mac_filters)) {
- f = SLIST_FIRST(sc->mac_filters);
- SLIST_REMOVE_HEAD(sc->mac_filters, next);
- free(f, M_IXLV);
- }
- free(sc->mac_filters, M_IXLV);
- while (!SLIST_EMPTY(sc->vlan_filters)) {
- v = SLIST_FIRST(sc->vlan_filters);
- SLIST_REMOVE_HEAD(sc->vlan_filters, next);
- free(v, M_IXLV);
- }
- free(sc->vlan_filters, M_IXLV);
-}
-
-char *
-ixlv_vc_speed_to_string(enum virtchnl_link_speed link_speed)
-{
- int index;
-
- char *speeds[] = {
- "Unknown",
- "100 Mbps",
- "1 Gbps",
- "10 Gbps",
- "40 Gbps",
- "20 Gbps",
- "25 Gbps",
- };
-
- switch (link_speed) {
- case VIRTCHNL_LINK_SPEED_100MB:
- index = 1;
- break;
- case VIRTCHNL_LINK_SPEED_1GB:
- index = 2;
- break;
- case VIRTCHNL_LINK_SPEED_10GB:
- index = 3;
- break;
- case VIRTCHNL_LINK_SPEED_40GB:
- index = 4;
- break;
- case VIRTCHNL_LINK_SPEED_20GB:
- index = 5;
- break;
- case VIRTCHNL_LINK_SPEED_25GB:
- index = 6;
- break;
- case VIRTCHNL_LINK_SPEED_UNKNOWN:
- default:
- index = 0;
- break;
- }
-
- return speeds[index];
-}
-
-static int
-ixlv_sysctl_current_speed(SYSCTL_HANDLER_ARGS)
-{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
- int error = 0;
-
- error = sysctl_handle_string(oidp,
- ixlv_vc_speed_to_string(sc->link_speed),
- 8, req);
- return (error);
-}
-
-/*
- * Sanity check and save off tunable values.
- */
-static void
-ixlv_save_tunables(struct ixlv_sc *sc)
-{
- device_t dev = sc->dev;
-
- /* Save tunable information */
- sc->dbg_mask = ixlv_core_debug_mask;
- sc->hw.debug_mask = ixlv_shared_debug_mask;
- sc->vsi.enable_head_writeback = !!(ixlv_enable_head_writeback);
-
- if (ixlv_tx_itr < 0 || ixlv_tx_itr > IXL_MAX_ITR) {
- device_printf(dev, "Invalid tx_itr value of %d set!\n",
- ixlv_tx_itr);
- device_printf(dev, "tx_itr must be between %d and %d, "
- "inclusive\n",
- 0, IXL_MAX_ITR);
- device_printf(dev, "Using default value of %d instead\n",
- IXL_ITR_4K);
- sc->tx_itr = IXL_ITR_4K;
- } else
- sc->tx_itr = ixlv_tx_itr;
-
- if (ixlv_rx_itr < 0 || ixlv_rx_itr > IXL_MAX_ITR) {
- device_printf(dev, "Invalid rx_itr value of %d set!\n",
- ixlv_rx_itr);
- device_printf(dev, "rx_itr must be between %d and %d, "
- "inclusive\n",
- 0, IXL_MAX_ITR);
- device_printf(dev, "Using default value of %d instead\n",
- IXL_ITR_8K);
- sc->rx_itr = IXL_ITR_8K;
- } else
- sc->rx_itr = ixlv_rx_itr;
-}
-
-/*
- * Used to set the Tx ITR value for all of the VF's queues.
- * Writes to the ITR registers immediately.
- */
-static int
-ixlv_sysctl_tx_itr(SYSCTL_HANDLER_ARGS)
-{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
- device_t dev = sc->dev;
- int requested_tx_itr;
- int error = 0;
-
- requested_tx_itr = sc->tx_itr;
- error = sysctl_handle_int(oidp, &requested_tx_itr, 0, req);
- if ((error) || (req->newptr == NULL))
- return (error);
- if (requested_tx_itr < 0 || requested_tx_itr > IXL_MAX_ITR) {
- device_printf(dev,
- "Invalid TX itr value; value must be between 0 and %d\n",
- IXL_MAX_ITR);
- return (EINVAL);
- }
-
- sc->tx_itr = requested_tx_itr;
- ixlv_configure_tx_itr(sc);
-
- return (error);
-}
-
-/*
- * Used to set the Rx ITR value for all of the VF's queues.
- * Writes to the ITR registers immediately.
- */
-static int
-ixlv_sysctl_rx_itr(SYSCTL_HANDLER_ARGS)
-{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
- device_t dev = sc->dev;
- int requested_rx_itr;
- int error = 0;
-
- requested_rx_itr = sc->rx_itr;
- error = sysctl_handle_int(oidp, &requested_rx_itr, 0, req);
- if ((error) || (req->newptr == NULL))
- return (error);
- if (requested_rx_itr < 0 || requested_rx_itr > IXL_MAX_ITR) {
- device_printf(dev,
- "Invalid RX itr value; value must be between 0 and %d\n",
- IXL_MAX_ITR);
- return (EINVAL);
- }
-
- sc->rx_itr = requested_rx_itr;
- ixlv_configure_rx_itr(sc);
-
- return (error);
-}
-
-static int
-ixlv_sysctl_sw_filter_list(SYSCTL_HANDLER_ARGS)
-{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
- struct ixlv_mac_filter *f;
- struct ixlv_vlan_filter *v;
- device_t dev = sc->dev;
- int ftl_len, ftl_counter = 0, error = 0;
- struct sbuf *buf;
-
- buf = sbuf_new_for_sysctl(NULL, NULL, 128, req);
- if (!buf) {
- device_printf(dev, "Could not allocate sbuf for output.\n");
- return (ENOMEM);
- }
-
- sbuf_printf(buf, "\n");
-
- /* Print MAC filters */
- sbuf_printf(buf, "MAC Filters:\n");
- ftl_len = 0;
- SLIST_FOREACH(f, sc->mac_filters, next)
- ftl_len++;
- if (ftl_len < 1)
- sbuf_printf(buf, "(none)\n");
- else {
- SLIST_FOREACH(f, sc->mac_filters, next) {
- sbuf_printf(buf,
- MAC_FORMAT ", flags %#06x\n",
- MAC_FORMAT_ARGS(f->macaddr), f->flags);
- }
- }
-
- /* Print VLAN filters */
- sbuf_printf(buf, "VLAN Filters:\n");
- ftl_len = 0;
- SLIST_FOREACH(v, sc->vlan_filters, next)
- ftl_len++;
- if (ftl_len < 1)
- sbuf_printf(buf, "(none)");
- else {
- SLIST_FOREACH(v, sc->vlan_filters, next) {
- sbuf_printf(buf,
- "%d, flags %#06x",
- v->vlan, v->flags);
- /* don't print '\n' for last entry */
- if (++ftl_counter != ftl_len)
- sbuf_printf(buf, "\n");
- }
- }
-
- error = sbuf_finish(buf);
- if (error)
- device_printf(dev, "Error finishing sbuf: %d\n", error);
-
- sbuf_delete(buf);
- return (error);
-}
-
-/*
- * Print out mapping of TX queue indexes and Rx queue indexes
- * to MSI-X vectors.
- */
-static int
-ixlv_sysctl_queue_interrupt_table(SYSCTL_HANDLER_ARGS)
-{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
- struct ixl_vsi *vsi = &sc->vsi;
- device_t dev = sc->dev;
- struct sbuf *buf;
- int error = 0;
-
- struct ixl_rx_queue *rx_que = vsi->rx_queues;
- struct ixl_tx_queue *tx_que = vsi->tx_queues;
-
- buf = sbuf_new_for_sysctl(NULL, NULL, 128, req);
- if (!buf) {
- device_printf(dev, "Could not allocate sbuf for output.\n");
- return (ENOMEM);
- }
-
- sbuf_cat(buf, "\n");
- for (int i = 0; i < vsi->num_rx_queues; i++) {
- rx_que = &vsi->rx_queues[i];
- sbuf_printf(buf, "(rxq %3d): %d\n", i, rx_que->msix);
- }
- for (int i = 0; i < vsi->num_tx_queues; i++) {
- tx_que = &vsi->tx_queues[i];
- sbuf_printf(buf, "(txq %3d): %d\n", i, tx_que->msix);
- }
-
- error = sbuf_finish(buf);
- if (error)
- device_printf(dev, "Error finishing sbuf: %d\n", error);
- sbuf_delete(buf);
-
- return (error);
-}
-
-#define CTX_ACTIVE(ctx) ((if_getdrvflags(iflib_get_ifp(ctx)) & IFF_DRV_RUNNING))
-static int
-ixlv_sysctl_vf_reset(SYSCTL_HANDLER_ARGS)
-{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
- int do_reset = 0, error = 0;
-
- error = sysctl_handle_int(oidp, &do_reset, 0, req);
- if ((error) || (req->newptr == NULL))
- return (error);
-
- if (do_reset == 1) {
- ixlv_reset(sc);
- if (CTX_ACTIVE(sc->vsi.ctx))
- iflib_request_reset(sc->vsi.ctx);
- }
-
- return (error);
-}
-
-static int
-ixlv_sysctl_vflr_reset(SYSCTL_HANDLER_ARGS)
-{
- struct ixlv_sc *sc = (struct ixlv_sc *)arg1;
- device_t dev = sc->dev;
- int do_reset = 0, error = 0;
-
- error = sysctl_handle_int(oidp, &do_reset, 0, req);
- if ((error) || (req->newptr == NULL))
- return (error);
-
- if (do_reset == 1) {
- if (!pcie_flr(dev, max(pcie_get_max_completion_timeout(dev) / 1000, 10), true)) {
- device_printf(dev, "PCIE FLR failed\n");
- error = EIO;
- }
- else if (CTX_ACTIVE(sc->vsi.ctx))
- iflib_request_reset(sc->vsi.ctx);
- }
-
- return (error);
-}
-#undef CTX_ACTIVE
Index: sys/dev/ixl/ixl.h
===================================================================
--- sys/dev/ixl/ixl.h
+++ sys/dev/ixl/ixl.h
@@ -203,7 +203,7 @@
#define IXL_VSI_DATA_PORT 0x01
-#define IXLV_MAX_QUEUES 16
+#define IAVF_MAX_QUEUES 16
#define IXL_MAX_VSI_QUEUES (2 * (I40E_VSILAN_QTABLE_MAX_INDEX + 1))
#define IXL_RX_CTX_BASE_UNITS 128
Index: sys/dev/ixl/ixl_debug.h
===================================================================
--- sys/dev/ixl/ixl_debug.h
+++ sys/dev/ixl/ixl_debug.h
@@ -104,20 +104,20 @@
IXL_DBG_ALL = 0xFFFFFFFF
};
-enum ixlv_dbg_mask {
- IXLV_DBG_INFO = 0x00000001,
- IXLV_DBG_EN_DIS = 0x00000002,
- IXLV_DBG_AQ = 0x00000004,
- IXLV_DBG_INIT = 0x00000008,
- IXLV_DBG_FILTER = 0x00000010,
+enum iavf_dbg_mask {
+ IAVF_DBG_INFO = 0x00000001,
+ IAVF_DBG_EN_DIS = 0x00000002,
+ IAVF_DBG_AQ = 0x00000004,
+ IAVF_DBG_INIT = 0x00000008,
+ IAVF_DBG_FILTER = 0x00000010,
- IXLV_DEBUG_RSS = 0x00000100,
+ IAVF_DEBUG_RSS = 0x00000100,
- IXLV_DBG_VC = 0x00001000,
+ IAVF_DBG_VC = 0x00001000,
- IXLV_DBG_SWITCH_INFO = 0x00010000,
+ IAVF_DBG_SWITCH_INFO = 0x00010000,
- IXLV_DBG_ALL = 0xFFFFFFFF
+ IAVF_DBG_ALL = 0xFFFFFFFF
};
#endif /* _IXL_DEBUG_H_ */
Index: sys/dev/ixl/ixl_pf_iov.c
===================================================================
--- sys/dev/ixl/ixl_pf_iov.c
+++ sys/dev/ixl/ixl_pf_iov.c
@@ -108,7 +108,7 @@
IOV_SCHEMA_HASDEFAULT, FALSE);
pci_iov_schema_add_uint16(vf_schema, "num-queues",
IOV_SCHEMA_HASDEFAULT,
- max(1, min(hw->func_caps.num_msix_vectors_vf - 1, IXLV_MAX_QUEUES)));
+ max(1, min(hw->func_caps.num_msix_vectors_vf - 1, IAVF_MAX_QUEUES)));
iov_error = pci_iov_attach(dev, pf_schema, vf_schema);
if (iov_error != 0) {
@@ -1889,9 +1889,9 @@
if (num_queues < 1) {
device_printf(dev, "Setting VF %d num-queues to 1\n", vf->vf_num);
num_queues = 1;
- } else if (num_queues > IXLV_MAX_QUEUES) {
- device_printf(dev, "Setting VF %d num-queues to %d\n", vf->vf_num, IXLV_MAX_QUEUES);
- num_queues = IXLV_MAX_QUEUES;
+ } else if (num_queues > IAVF_MAX_QUEUES) {
+ device_printf(dev, "Setting VF %d num-queues to %d\n", vf->vf_num, IAVF_MAX_QUEUES);
+ num_queues = IAVF_MAX_QUEUES;
}
error = ixl_pf_qmgr_alloc_scattered(&pf->qmgr, num_queues, &vf->qtag);
if (error) {
Index: sys/dev/ixl/ixlv.h
===================================================================
--- sys/dev/ixl/ixlv.h
+++ sys/dev/ixl/ixlv.h
@@ -1,218 +0,0 @@
-/******************************************************************************
-
- Copyright (c) 2013-2018, Intel Corporation
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- 3. Neither the name of the Intel Corporation nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-******************************************************************************/
-/*$FreeBSD$*/
-
-
-#ifndef _IXLV_H_
-#define _IXLV_H_
-
-#include "ixl.h"
-
-#define IXLV_AQ_MAX_ERR 200
-#define IXLV_MAX_FILTERS 128
-#define IXLV_MAX_QUEUES 16
-#define IXLV_AQ_TIMEOUT (1 * hz)
-
-#define IXLV_FLAG_AQ_ENABLE_QUEUES (u32)(1 << 0)
-#define IXLV_FLAG_AQ_DISABLE_QUEUES (u32)(1 << 1)
-#define IXLV_FLAG_AQ_ADD_MAC_FILTER (u32)(1 << 2)
-#define IXLV_FLAG_AQ_ADD_VLAN_FILTER (u32)(1 << 3)
-#define IXLV_FLAG_AQ_DEL_MAC_FILTER (u32)(1 << 4)
-#define IXLV_FLAG_AQ_DEL_VLAN_FILTER (u32)(1 << 5)
-#define IXLV_FLAG_AQ_CONFIGURE_QUEUES (u32)(1 << 6)
-#define IXLV_FLAG_AQ_MAP_VECTORS (u32)(1 << 7)
-#define IXLV_FLAG_AQ_HANDLE_RESET (u32)(1 << 8)
-#define IXLV_FLAG_AQ_CONFIGURE_PROMISC (u32)(1 << 9)
-#define IXLV_FLAG_AQ_GET_STATS (u32)(1 << 10)
-#define IXLV_FLAG_AQ_CONFIG_RSS_KEY (u32)(1 << 11)
-#define IXLV_FLAG_AQ_SET_RSS_HENA (u32)(1 << 12)
-#define IXLV_FLAG_AQ_GET_RSS_HENA_CAPS (u32)(1 << 13)
-#define IXLV_FLAG_AQ_CONFIG_RSS_LUT (u32)(1 << 14)
-
-/* printf %b flag args */
-#define IXLV_FLAGS \
- "\20\1ENABLE_QUEUES\2DISABLE_QUEUES\3ADD_MAC_FILTER" \
- "\4ADD_VLAN_FILTER\5DEL_MAC_FILTER\6DEL_VLAN_FILTER" \
- "\7CONFIGURE_QUEUES\10MAP_VECTORS\11HANDLE_RESET" \
- "\12CONFIGURE_PROMISC\13GET_STATS\14CONFIG_RSS_KEY" \
- "\15SET_RSS_HENA\16GET_RSS_HENA_CAPS\17CONFIG_RSS_LUT"
-#define IXLV_PRINTF_VF_OFFLOAD_FLAGS \
- "\20\1L2" \
- "\2IWARP" \
- "\3RSVD" \
- "\4RSS_AQ" \
- "\5RSS_REG" \
- "\6WB_ON_ITR" \
- "\7REQ_QUEUES" \
- "\21VLAN" \
- "\22RX_POLLING" \
- "\23RSS_PCTYPE_V2" \
- "\24RSS_PF" \
- "\25ENCAP" \
- "\26ENCAP_CSUM" \
- "\27RX_ENCAP_CSUM"
-
-MALLOC_DECLARE(M_IXLV);
-
-/* Driver state */
-enum ixlv_state_t {
- IXLV_RESET_REQUIRED,
- IXLV_RESET_PENDING,
- IXLV_INIT_READY,
- IXLV_RUNNING,
-};
-
-/* Structs */
-
-struct ixlv_mac_filter {
- SLIST_ENTRY(ixlv_mac_filter) next;
- u8 macaddr[ETHER_ADDR_LEN];
- u16 flags;
-};
-SLIST_HEAD(mac_list, ixlv_mac_filter);
-
-struct ixlv_vlan_filter {
- SLIST_ENTRY(ixlv_vlan_filter) next;
- u16 vlan;
- u16 flags;
-};
-SLIST_HEAD(vlan_list, ixlv_vlan_filter);
-
-/* Software controller structure */
-struct ixlv_sc {
- struct ixl_vsi vsi;
-
- struct i40e_hw hw;
- struct i40e_osdep osdep;
- device_t dev;
-
- struct resource *pci_mem;
-
- enum ixlv_state_t init_state;
-
- struct ifmedia media;
- struct virtchnl_version_info version;
- enum ixl_dbg_mask dbg_mask;
- u16 promisc_flags;
-
- bool link_up;
- enum virtchnl_link_speed link_speed;
-
- /* Tunable settings */
- int tx_itr;
- int rx_itr;
- int dynamic_tx_itr;
- int dynamic_rx_itr;
-
- /* Filter lists */
- struct mac_list *mac_filters;
- struct vlan_list *vlan_filters;
-
- /* Virtual comm channel */
- struct virtchnl_vf_resource *vf_res;
- struct virtchnl_vsi_resource *vsi_res;
-
- /* Misc stats maintained by the driver */
- u64 admin_irq;
-
- /* Buffer used for reading AQ responses */
- u8 aq_buffer[IXL_AQ_BUF_SZ];
-
- /* State flag used in init/stop */
- u32 queues_enabled;
- u8 enable_queues_chan;
- u8 disable_queues_chan;
-};
-
-/*
-** This checks for a zero mac addr, something that will be likely
-** unless the Admin on the Host has created one.
-*/
-static inline bool
-ixlv_check_ether_addr(u8 *addr)
-{
- bool status = TRUE;
-
- if ((addr[0] == 0 && addr[1]== 0 && addr[2] == 0 &&
- addr[3] == 0 && addr[4]== 0 && addr[5] == 0))
- status = FALSE;
- return (status);
-}
-
-/* Debug printing */
-#define ixlv_dbg(sc, m, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, m, s, ##__VA_ARGS__)
-#define ixlv_dbg_init(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IXLV_DBG_INIT, s, ##__VA_ARGS__)
-#define ixlv_dbg_info(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IXLV_DBG_INFO, s, ##__VA_ARGS__)
-#define ixlv_dbg_vc(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IXLV_DBG_VC, s, ##__VA_ARGS__)
-#define ixlv_dbg_filter(sc, s, ...) ixl_debug_core(sc->dev, sc->dbg_mask, IXLV_DBG_FILTER, s, ##__VA_ARGS__)
-
-/*
-** VF Common function prototypes
-*/
-void ixlv_if_init(if_ctx_t ctx);
-
-int ixlv_send_api_ver(struct ixlv_sc *);
-int ixlv_verify_api_ver(struct ixlv_sc *);
-int ixlv_send_vf_config_msg(struct ixlv_sc *);
-int ixlv_get_vf_config(struct ixlv_sc *);
-void ixlv_init(void *);
-int ixlv_reinit_locked(struct ixlv_sc *);
-int ixlv_configure_queues(struct ixlv_sc *);
-int ixlv_enable_queues(struct ixlv_sc *);
-int ixlv_disable_queues(struct ixlv_sc *);
-int ixlv_map_queues(struct ixlv_sc *);
-void ixlv_enable_intr(struct ixl_vsi *);
-void ixlv_disable_intr(struct ixl_vsi *);
-int ixlv_add_ether_filters(struct ixlv_sc *);
-int ixlv_del_ether_filters(struct ixlv_sc *);
-int ixlv_request_stats(struct ixlv_sc *);
-int ixlv_request_reset(struct ixlv_sc *);
-void ixlv_vc_completion(struct ixlv_sc *,
- enum virtchnl_ops, enum virtchnl_status_code,
- u8 *, u16);
-int ixlv_add_ether_filter(struct ixlv_sc *);
-int ixlv_add_vlans(struct ixlv_sc *);
-int ixlv_del_vlans(struct ixlv_sc *);
-void ixlv_update_stats_counters(struct ixlv_sc *,
- struct i40e_eth_stats *);
-void ixlv_update_link_status(struct ixlv_sc *);
-int ixlv_get_default_rss_key(u32 *, bool);
-int ixlv_config_rss_key(struct ixlv_sc *);
-int ixlv_set_rss_hena(struct ixlv_sc *);
-int ixlv_config_rss_lut(struct ixlv_sc *);
-int ixlv_config_promisc_mode(struct ixlv_sc *);
-
-int ixl_vc_send_cmd(struct ixlv_sc *sc, uint32_t request);
-char *ixlv_vc_speed_to_string(enum virtchnl_link_speed link_speed);
-void *ixl_vc_get_op_chan(struct ixlv_sc *sc, uint32_t request);
-#endif /* _IXLV_H_ */
Index: sys/dev/ixl/ixlvc.c
===================================================================
--- sys/dev/ixl/ixlvc.c
+++ sys/dev/ixl/ixlvc.c
@@ -1,1014 +0,0 @@
-/******************************************************************************
-
- Copyright (c) 2013-2018, Intel Corporation
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- 3. Neither the name of the Intel Corporation nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-******************************************************************************/
-/*$FreeBSD$*/
-
-/*
-** Virtual Channel support
-** These are support functions to communication
-** between the VF and PF drivers.
-*/
-
-#include "ixl.h"
-#include "ixlv.h"
-
-/* busy wait delay in msec */
-#define IXLV_BUSY_WAIT_DELAY 10
-#define IXLV_BUSY_WAIT_COUNT 50
-
-/*
-** ixlv_send_pf_msg
-**
-** Send message to PF and print status if failure.
-*/
-static int
-ixlv_send_pf_msg(struct ixlv_sc *sc,
- enum virtchnl_ops op, u8 *msg, u16 len)
-{
- struct i40e_hw *hw = &sc->hw;
- device_t dev = sc->dev;
- i40e_status status;
- int val_err;
-
- /* Validating message before sending it to the PF */
- val_err = virtchnl_vc_validate_vf_msg(&sc->version, op, msg, len);
- if (val_err)
- device_printf(dev, "Error validating msg to PF for op %d,"
- " msglen %d: error %d\n", op, len, val_err);
-
- if (!i40e_check_asq_alive(hw)) {
- if (op != VIRTCHNL_OP_GET_STATS)
- device_printf(dev, "Unable to send opcode %s to PF, "
- "ASQ is not alive\n", ixl_vc_opcode_str(op));
- return (0);
- }
-
- if (op != VIRTCHNL_OP_GET_STATS)
- ixlv_dbg_vc(sc,
- "Sending msg (op=%s[%d]) to PF\n",
- ixl_vc_opcode_str(op), op);
-
- status = i40e_aq_send_msg_to_pf(hw, op, I40E_SUCCESS, msg, len, NULL);
- if (status && op != VIRTCHNL_OP_GET_STATS)
- device_printf(dev, "Unable to send opcode %s to PF, "
- "status %s, aq error %s\n",
- ixl_vc_opcode_str(op),
- i40e_stat_str(hw, status),
- i40e_aq_str(hw, hw->aq.asq_last_status));
-
- return (status);
-}
-
-/*
-** ixlv_send_api_ver
-**
-** Send API version admin queue message to the PF. The reply is not checked
-** in this function. Returns 0 if the message was successfully
-** sent, or one of the I40E_ADMIN_QUEUE_ERROR_ statuses if not.
-*/
-int
-ixlv_send_api_ver(struct ixlv_sc *sc)
-{
- struct virtchnl_version_info vvi;
-
- vvi.major = VIRTCHNL_VERSION_MAJOR;
- vvi.minor = VIRTCHNL_VERSION_MINOR;
-
- return ixlv_send_pf_msg(sc, VIRTCHNL_OP_VERSION,
- (u8 *)&vvi, sizeof(vvi));
-}
-
-/*
-** ixlv_verify_api_ver
-**
-** Compare API versions with the PF. Must be called after admin queue is
-** initialized. Returns 0 if API versions match, EIO if
-** they do not, or I40E_ERR_ADMIN_QUEUE_NO_WORK if the admin queue is empty.
-*/
-int
-ixlv_verify_api_ver(struct ixlv_sc *sc)
-{
- struct virtchnl_version_info *pf_vvi;
- struct i40e_hw *hw = &sc->hw;
- struct i40e_arq_event_info event;
- device_t dev = sc->dev;
- i40e_status err;
- int retries = 0;
-
- event.buf_len = IXL_AQ_BUF_SZ;
- event.msg_buf = malloc(event.buf_len, M_IXLV, M_WAITOK);
-
- for (;;) {
- if (++retries > IXLV_AQ_MAX_ERR)
- goto out_alloc;
-
- /* Initial delay here is necessary */
- i40e_msec_pause(100);
- err = i40e_clean_arq_element(hw, &event, NULL);
- if (err == I40E_ERR_ADMIN_QUEUE_NO_WORK)
- continue;
- else if (err) {
- err = EIO;
- goto out_alloc;
- }
-
- if ((enum virtchnl_ops)le32toh(event.desc.cookie_high) !=
- VIRTCHNL_OP_VERSION) {
- DDPRINTF(dev, "Received unexpected op response: %d\n",
- le32toh(event.desc.cookie_high));
- /* Don't stop looking for expected response */
- continue;
- }
-
- err = (i40e_status)le32toh(event.desc.cookie_low);
- if (err) {
- err = EIO;
- goto out_alloc;
- } else
- break;
- }
-
- pf_vvi = (struct virtchnl_version_info *)event.msg_buf;
- if ((pf_vvi->major > VIRTCHNL_VERSION_MAJOR) ||
- ((pf_vvi->major == VIRTCHNL_VERSION_MAJOR) &&
- (pf_vvi->minor > VIRTCHNL_VERSION_MINOR))) {
- device_printf(dev, "Critical PF/VF API version mismatch!\n");
- err = EIO;
- } else {
- sc->version.major = pf_vvi->major;
- sc->version.minor = pf_vvi->minor;
- }
-
- /* Log PF/VF api versions */
- device_printf(dev, "PF API %d.%d / VF API %d.%d\n",
- pf_vvi->major, pf_vvi->minor,
- VIRTCHNL_VERSION_MAJOR, VIRTCHNL_VERSION_MINOR);
-
-out_alloc:
- free(event.msg_buf, M_IXLV);
- return (err);
-}
-
-/*
-** ixlv_send_vf_config_msg
-**
-** Send VF configuration request admin queue message to the PF. The reply
-** is not checked in this function. Returns 0 if the message was
-** successfully sent, or one of the I40E_ADMIN_QUEUE_ERROR_ statuses if not.
-*/
-int
-ixlv_send_vf_config_msg(struct ixlv_sc *sc)
-{
- u32 caps;
-
- caps = VIRTCHNL_VF_OFFLOAD_L2 |
- VIRTCHNL_VF_OFFLOAD_RSS_PF |
- VIRTCHNL_VF_OFFLOAD_VLAN;
-
- ixlv_dbg_info(sc, "Sending offload flags: 0x%b\n",
- caps, IXLV_PRINTF_VF_OFFLOAD_FLAGS);
-
- if (sc->version.minor == VIRTCHNL_VERSION_MINOR_NO_VF_CAPS)
- return ixlv_send_pf_msg(sc, VIRTCHNL_OP_GET_VF_RESOURCES,
- NULL, 0);
- else
- return ixlv_send_pf_msg(sc, VIRTCHNL_OP_GET_VF_RESOURCES,
- (u8 *)&caps, sizeof(caps));
-}
-
-/*
-** ixlv_get_vf_config
-**
-** Get VF configuration from PF and populate hw structure. Must be called after
-** admin queue is initialized. Busy waits until response is received from PF,
-** with maximum timeout. Response from PF is returned in the buffer for further
-** processing by the caller.
-*/
-int
-ixlv_get_vf_config(struct ixlv_sc *sc)
-{
- struct i40e_hw *hw = &sc->hw;
- device_t dev = sc->dev;
- struct i40e_arq_event_info event;
- u16 len;
- i40e_status err = 0;
- u32 retries = 0;
-
- /* Note this assumes a single VSI */
- len = sizeof(struct virtchnl_vf_resource) +
- sizeof(struct virtchnl_vsi_resource);
- event.buf_len = len;
- event.msg_buf = malloc(event.buf_len, M_IXLV, M_WAITOK);
-
- for (;;) {
- err = i40e_clean_arq_element(hw, &event, NULL);
- if (err == I40E_ERR_ADMIN_QUEUE_NO_WORK) {
- if (++retries <= IXLV_AQ_MAX_ERR)
- i40e_msec_pause(10);
- } else if ((enum virtchnl_ops)le32toh(event.desc.cookie_high) !=
- VIRTCHNL_OP_GET_VF_RESOURCES) {
- DDPRINTF(dev, "Received a response from PF,"
- " opcode %d, error %d",
- le32toh(event.desc.cookie_high),
- le32toh(event.desc.cookie_low));
- retries++;
- continue;
- } else {
- err = (i40e_status)le32toh(event.desc.cookie_low);
- if (err) {
- device_printf(dev, "%s: Error returned from PF,"
- " opcode %d, error %d\n", __func__,
- le32toh(event.desc.cookie_high),
- le32toh(event.desc.cookie_low));
- err = EIO;
- goto out_alloc;
- }
- /* We retrieved the config message, with no errors */
- break;
- }
-
- if (retries > IXLV_AQ_MAX_ERR) {
- INIT_DBG_DEV(dev, "Did not receive response after %d tries.",
- retries);
- err = ETIMEDOUT;
- goto out_alloc;
- }
- }
-
- memcpy(sc->vf_res, event.msg_buf, min(event.msg_len, len));
- i40e_vf_parse_hw_config(hw, sc->vf_res);
-
-out_alloc:
- free(event.msg_buf, M_IXLV);
- return err;
-}
-
-/*
-** ixlv_configure_queues
-**
-** Request that the PF set up our queues.
-*/
-int
-ixlv_configure_queues(struct ixlv_sc *sc)
-{
- device_t dev = sc->dev;
- struct ixl_vsi *vsi = &sc->vsi;
- if_softc_ctx_t scctx = iflib_get_softc_ctx(vsi->ctx);
- struct ixl_tx_queue *tx_que = vsi->tx_queues;
- struct ixl_rx_queue *rx_que = vsi->rx_queues;
- struct tx_ring *txr;
- struct rx_ring *rxr;
- int len, pairs;
-
- struct virtchnl_vsi_queue_config_info *vqci;
- struct virtchnl_queue_pair_info *vqpi;
-
- /* XXX: Linux PF driver wants matching ids in each tx/rx struct, so both TX/RX
- * queues of a pair need to be configured */
- pairs = max(vsi->num_tx_queues, vsi->num_rx_queues);
- len = sizeof(struct virtchnl_vsi_queue_config_info) +
- (sizeof(struct virtchnl_queue_pair_info) * pairs);
- vqci = malloc(len, M_IXLV, M_NOWAIT | M_ZERO);
- if (!vqci) {
- device_printf(dev, "%s: unable to allocate memory\n", __func__);
- return (ENOMEM);
- }
- vqci->vsi_id = sc->vsi_res->vsi_id;
- vqci->num_queue_pairs = pairs;
- vqpi = vqci->qpair;
- /* Size check is not needed here - HW max is 16 queue pairs, and we
- * can fit info for 31 of them into the AQ buffer before it overflows.
- */
- // TODO: the above is wrong now; X722 VFs can have 256 queues
- for (int i = 0; i < pairs; i++, tx_que++, rx_que++, vqpi++) {
- txr = &tx_que->txr;
- rxr = &rx_que->rxr;
-
- vqpi->txq.vsi_id = vqci->vsi_id;
- vqpi->txq.queue_id = i;
- vqpi->txq.ring_len = scctx->isc_ntxd[0];
- vqpi->txq.dma_ring_addr = txr->tx_paddr;
- /* Enable Head writeback */
- if (!vsi->enable_head_writeback) {
- vqpi->txq.headwb_enabled = 0;
- vqpi->txq.dma_headwb_addr = 0;
- } else {
- vqpi->txq.headwb_enabled = 1;
- vqpi->txq.dma_headwb_addr = txr->tx_paddr +
- sizeof(struct i40e_tx_desc) * scctx->isc_ntxd[0];
- }
-
- vqpi->rxq.vsi_id = vqci->vsi_id;
- vqpi->rxq.queue_id = i;
- vqpi->rxq.ring_len = scctx->isc_nrxd[0];
- vqpi->rxq.dma_ring_addr = rxr->rx_paddr;
- vqpi->rxq.max_pkt_size = scctx->isc_max_frame_size;
- vqpi->rxq.databuffer_size = rxr->mbuf_sz;
- vqpi->rxq.splithdr_enabled = 0;
- }
-
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_VSI_QUEUES,
- (u8 *)vqci, len);
- free(vqci, M_IXLV);
-
- return (0);
-}
-
-/*
-** ixlv_enable_queues
-**
-** Request that the PF enable all of our queues.
-*/
-int
-ixlv_enable_queues(struct ixlv_sc *sc)
-{
- struct virtchnl_queue_select vqs;
-
- vqs.vsi_id = sc->vsi_res->vsi_id;
- /* XXX: In Linux PF, as long as neither of these is 0,
- * every queue in VF VSI is enabled. */
- vqs.tx_queues = (1 << sc->vsi.num_tx_queues) - 1;
- vqs.rx_queues = vqs.tx_queues;
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_ENABLE_QUEUES,
- (u8 *)&vqs, sizeof(vqs));
- return (0);
-}
-
-/*
-** ixlv_disable_queues
-**
-** Request that the PF disable all of our queues.
-*/
-int
-ixlv_disable_queues(struct ixlv_sc *sc)
-{
- struct virtchnl_queue_select vqs;
-
- vqs.vsi_id = sc->vsi_res->vsi_id;
- /* XXX: In Linux PF, as long as neither of these is 0,
- * every queue in VF VSI is disabled. */
- vqs.tx_queues = (1 << sc->vsi.num_tx_queues) - 1;
- vqs.rx_queues = vqs.tx_queues;
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_DISABLE_QUEUES,
- (u8 *)&vqs, sizeof(vqs));
- return (0);
-}
-
-/*
-** ixlv_map_queues
-**
-** Request that the PF map queues to interrupt vectors. Misc causes, including
-** admin queue, are always mapped to vector 0.
-*/
-int
-ixlv_map_queues(struct ixlv_sc *sc)
-{
- struct virtchnl_irq_map_info *vm;
- int i, q, len;
- struct ixl_vsi *vsi = &sc->vsi;
- struct ixl_rx_queue *rx_que = vsi->rx_queues;
- if_softc_ctx_t scctx = vsi->shared;
- device_t dev = sc->dev;
-
- // XXX: What happens if we only get 1 MSI-X vector?
- MPASS(scctx->isc_vectors > 1);
-
- /* How many queue vectors, adminq uses one */
- // XXX: How do we know how many interrupt vectors we have?
- q = scctx->isc_vectors - 1;
-
- len = sizeof(struct virtchnl_irq_map_info) +
- (scctx->isc_vectors * sizeof(struct virtchnl_vector_map));
- vm = malloc(len, M_IXLV, M_NOWAIT);
- if (!vm) {
- device_printf(dev, "%s: unable to allocate memory\n", __func__);
- return (ENOMEM);
- }
-
- vm->num_vectors = scctx->isc_vectors;
- /* Queue vectors first */
- for (i = 0; i < q; i++, rx_que++) {
- vm->vecmap[i].vsi_id = sc->vsi_res->vsi_id;
- vm->vecmap[i].vector_id = i + 1; /* first is adminq */
- // TODO: Re-examine this
- vm->vecmap[i].txq_map = (1 << rx_que->rxr.me);
- vm->vecmap[i].rxq_map = (1 << rx_que->rxr.me);
- vm->vecmap[i].rxitr_idx = 0;
- vm->vecmap[i].txitr_idx = 1;
- }
-
- /* Misc vector last - this is only for AdminQ messages */
- vm->vecmap[i].vsi_id = sc->vsi_res->vsi_id;
- vm->vecmap[i].vector_id = 0;
- vm->vecmap[i].txq_map = 0;
- vm->vecmap[i].rxq_map = 0;
- vm->vecmap[i].rxitr_idx = 0;
- vm->vecmap[i].txitr_idx = 0;
-
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_IRQ_MAP,
- (u8 *)vm, len);
- free(vm, M_IXLV);
-
- return (0);
-}
-
-/*
-** Scan the Filter List looking for vlans that need
-** to be added, then create the data to hand to the AQ
-** for handling.
-*/
-int
-ixlv_add_vlans(struct ixlv_sc *sc)
-{
- struct virtchnl_vlan_filter_list *v;
- struct ixlv_vlan_filter *f, *ftmp;
- device_t dev = sc->dev;
- int len, i = 0, cnt = 0;
-
- /* Get count of VLAN filters to add */
- SLIST_FOREACH(f, sc->vlan_filters, next) {
- if (f->flags & IXL_FILTER_ADD)
- cnt++;
- }
-
- if (!cnt) /* no work... */
- return (ENOENT);
-
- len = sizeof(struct virtchnl_vlan_filter_list) +
- (cnt * sizeof(u16));
-
- if (len > IXL_AQ_BUF_SZ) {
- device_printf(dev, "%s: Exceeded Max AQ Buf size\n",
- __func__);
- return (EFBIG);
- }
-
- v = malloc(len, M_IXLV, M_NOWAIT);
- if (!v) {
- device_printf(dev, "%s: unable to allocate memory\n",
- __func__);
- return (ENOMEM);
- }
-
- v->vsi_id = sc->vsi_res->vsi_id;
- v->num_elements = cnt;
-
- /* Scan the filter array */
- SLIST_FOREACH_SAFE(f, sc->vlan_filters, next, ftmp) {
- if (f->flags & IXL_FILTER_ADD) {
- bcopy(&f->vlan, &v->vlan_id[i], sizeof(u16));
- f->flags = IXL_FILTER_USED;
- i++;
- }
- if (i == cnt)
- break;
- }
-
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_ADD_VLAN, (u8 *)v, len);
- free(v, M_IXLV);
- /* add stats? */
- return (0);
-}
-
-/*
-** Scan the Filter Table looking for vlans that need
-** to be removed, then create the data to hand to the AQ
-** for handling.
-*/
-int
-ixlv_del_vlans(struct ixlv_sc *sc)
-{
- struct virtchnl_vlan_filter_list *v;
- struct ixlv_vlan_filter *f, *ftmp;
- device_t dev = sc->dev;
- int len, i = 0, cnt = 0;
-
- /* Get count of VLAN filters to delete */
- SLIST_FOREACH(f, sc->vlan_filters, next) {
- if (f->flags & IXL_FILTER_DEL)
- cnt++;
- }
-
- if (!cnt) /* no work... */
- return (ENOENT);
-
- len = sizeof(struct virtchnl_vlan_filter_list) +
- (cnt * sizeof(u16));
-
- if (len > IXL_AQ_BUF_SZ) {
- device_printf(dev, "%s: Exceeded Max AQ Buf size\n",
- __func__);
- return (EFBIG);
- }
-
- v = malloc(len, M_IXLV, M_NOWAIT | M_ZERO);
- if (!v) {
- device_printf(dev, "%s: unable to allocate memory\n",
- __func__);
- return (ENOMEM);
- }
-
- v->vsi_id = sc->vsi_res->vsi_id;
- v->num_elements = cnt;
-
- /* Scan the filter array */
- SLIST_FOREACH_SAFE(f, sc->vlan_filters, next, ftmp) {
- if (f->flags & IXL_FILTER_DEL) {
- bcopy(&f->vlan, &v->vlan_id[i], sizeof(u16));
- i++;
- SLIST_REMOVE(sc->vlan_filters, f, ixlv_vlan_filter, next);
- free(f, M_IXLV);
- }
- if (i == cnt)
- break;
- }
-
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_DEL_VLAN, (u8 *)v, len);
- free(v, M_IXLV);
- /* add stats? */
- return (0);
-}
-
-
-/*
-** This routine takes additions to the vsi filter
-** table and creates an Admin Queue call to create
-** the filters in the hardware.
-*/
-int
-ixlv_add_ether_filters(struct ixlv_sc *sc)
-{
- struct virtchnl_ether_addr_list *a;
- struct ixlv_mac_filter *f;
- device_t dev = sc->dev;
- int len, j = 0, cnt = 0;
- enum i40e_status_code status;
-
- /* Get count of MAC addresses to add */
- SLIST_FOREACH(f, sc->mac_filters, next) {
- if (f->flags & IXL_FILTER_ADD)
- cnt++;
- }
- if (cnt == 0) { /* Should not happen... */
- ixlv_dbg_vc(sc, "%s: cnt == 0, exiting...\n", __func__);
- return (ENOENT);
- }
-
- len = sizeof(struct virtchnl_ether_addr_list) +
- (cnt * sizeof(struct virtchnl_ether_addr));
-
- a = malloc(len, M_IXLV, M_NOWAIT | M_ZERO);
- if (a == NULL) {
- device_printf(dev, "%s: Failed to get memory for "
- "virtchnl_ether_addr_list\n", __func__);
- return (ENOMEM);
- }
- a->vsi_id = sc->vsi.id;
- a->num_elements = cnt;
-
- /* Scan the filter array */
- SLIST_FOREACH(f, sc->mac_filters, next) {
- if (f->flags & IXL_FILTER_ADD) {
- bcopy(f->macaddr, a->list[j].addr, ETHER_ADDR_LEN);
- f->flags &= ~IXL_FILTER_ADD;
- j++;
-
- ixlv_dbg_vc(sc, "ADD: " MAC_FORMAT "\n",
- MAC_FORMAT_ARGS(f->macaddr));
- }
- if (j == cnt)
- break;
- }
- DDPRINTF(dev, "len %d, j %d, cnt %d",
- len, j, cnt);
-
- status = ixlv_send_pf_msg(sc,
- VIRTCHNL_OP_ADD_ETH_ADDR, (u8 *)a, len);
- /* add stats? */
- free(a, M_IXLV);
- return (status);
-}
-
-/*
-** This routine takes filters flagged for deletion in the
-** sc MAC filter list and creates an Admin Queue call
-** to delete those filters in the hardware.
-*/
-int
-ixlv_del_ether_filters(struct ixlv_sc *sc)
-{
- struct virtchnl_ether_addr_list *d;
- struct ixlv_mac_filter *f, *f_temp;
- device_t dev = sc->dev;
- int len, j = 0, cnt = 0;
-
- /* Get count of MAC addresses to delete */
- SLIST_FOREACH(f, sc->mac_filters, next) {
- if (f->flags & IXL_FILTER_DEL)
- cnt++;
- }
- if (cnt == 0) {
- ixlv_dbg_vc(sc, "%s: cnt == 0, exiting...\n", __func__);
- return (ENOENT);
- }
-
- len = sizeof(struct virtchnl_ether_addr_list) +
- (cnt * sizeof(struct virtchnl_ether_addr));
-
- d = malloc(len, M_IXLV, M_NOWAIT | M_ZERO);
- if (d == NULL) {
- device_printf(dev, "%s: Failed to get memory for "
- "virtchnl_ether_addr_list\n", __func__);
- return (ENOMEM);
- }
- d->vsi_id = sc->vsi.id;
- d->num_elements = cnt;
-
- /* Scan the filter array */
- SLIST_FOREACH_SAFE(f, sc->mac_filters, next, f_temp) {
- if (f->flags & IXL_FILTER_DEL) {
- bcopy(f->macaddr, d->list[j].addr, ETHER_ADDR_LEN);
- ixlv_dbg_vc(sc, "DEL: " MAC_FORMAT "\n",
- MAC_FORMAT_ARGS(f->macaddr));
- j++;
- SLIST_REMOVE(sc->mac_filters, f, ixlv_mac_filter, next);
- free(f, M_IXLV);
- }
- if (j == cnt)
- break;
- }
- ixlv_send_pf_msg(sc,
- VIRTCHNL_OP_DEL_ETH_ADDR, (u8 *)d, len);
- /* add stats? */
- free(d, M_IXLV);
- return (0);
-}
-
-/*
-** ixlv_request_reset
-** Request that the PF reset this VF. No response is expected.
-*/
-int
-ixlv_request_reset(struct ixlv_sc *sc)
-{
- /*
- ** Set the reset status to "in progress" before
- ** the request, this avoids any possibility of
- ** a mistaken early detection of completion.
- */
- wr32(&sc->hw, I40E_VFGEN_RSTAT, VIRTCHNL_VFR_INPROGRESS);
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_RESET_VF, NULL, 0);
- return (0);
-}
-
-/*
-** ixlv_request_stats
-** Request the statistics for this VF's VSI from PF.
-*/
-int
-ixlv_request_stats(struct ixlv_sc *sc)
-{
- struct virtchnl_queue_select vqs;
- int error = 0;
-
- vqs.vsi_id = sc->vsi_res->vsi_id;
- /* Low priority, we don't need to error check */
- error = ixlv_send_pf_msg(sc, VIRTCHNL_OP_GET_STATS,
- (u8 *)&vqs, sizeof(vqs));
- if (error)
- device_printf(sc->dev, "Error sending stats request to PF: %d\n", error);
-
- return (0);
-}
-
-/*
-** Updates driver's stats counters with VSI stats returned from PF.
-*/
-void
-ixlv_update_stats_counters(struct ixlv_sc *sc, struct i40e_eth_stats *es)
-{
- struct ixl_vsi *vsi = &sc->vsi;
- uint64_t tx_discards;
-
- tx_discards = es->tx_discards;
-#if 0
- for (int i = 0; i < vsi->num_queues; i++)
- tx_discards += sc->vsi.queues[i].txr.br->br_drops;
-#endif
-
- /* Update ifnet stats */
- IXL_SET_IPACKETS(vsi, es->rx_unicast +
- es->rx_multicast +
- es->rx_broadcast);
- IXL_SET_OPACKETS(vsi, es->tx_unicast +
- es->tx_multicast +
- es->tx_broadcast);
- IXL_SET_IBYTES(vsi, es->rx_bytes);
- IXL_SET_OBYTES(vsi, es->tx_bytes);
- IXL_SET_IMCASTS(vsi, es->rx_multicast);
- IXL_SET_OMCASTS(vsi, es->tx_multicast);
-
- IXL_SET_OERRORS(vsi, es->tx_errors);
- IXL_SET_IQDROPS(vsi, es->rx_discards);
- IXL_SET_OQDROPS(vsi, tx_discards);
- IXL_SET_NOPROTO(vsi, es->rx_unknown_protocol);
- IXL_SET_COLLISIONS(vsi, 0);
-
- vsi->eth_stats = *es;
-}
-
-int
-ixlv_config_rss_key(struct ixlv_sc *sc)
-{
- struct virtchnl_rss_key *rss_key_msg;
- int msg_len, key_length;
- u8 rss_seed[IXL_RSS_KEY_SIZE];
-
-#ifdef RSS
- /* Fetch the configured RSS key */
- rss_getkey((uint8_t *) &rss_seed);
-#else
- ixl_get_default_rss_key((u32 *)rss_seed);
-#endif
-
- /* Send the fetched key */
- key_length = IXL_RSS_KEY_SIZE;
- msg_len = sizeof(struct virtchnl_rss_key) + (sizeof(u8) * key_length) - 1;
- rss_key_msg = malloc(msg_len, M_IXLV, M_NOWAIT | M_ZERO);
- if (rss_key_msg == NULL) {
- device_printf(sc->dev, "Unable to allocate msg memory for RSS key msg.\n");
- return (ENOMEM);
- }
-
- rss_key_msg->vsi_id = sc->vsi_res->vsi_id;
- rss_key_msg->key_len = key_length;
- bcopy(rss_seed, &rss_key_msg->key[0], key_length);
-
- ixlv_dbg_vc(sc, "config_rss: vsi_id %d, key_len %d\n",
- rss_key_msg->vsi_id, rss_key_msg->key_len);
-
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_RSS_KEY,
- (u8 *)rss_key_msg, msg_len);
-
- free(rss_key_msg, M_IXLV);
- return (0);
-}
-
-int
-ixlv_set_rss_hena(struct ixlv_sc *sc)
-{
- struct virtchnl_rss_hena hena;
- struct i40e_hw *hw = &sc->hw;
-
- if (hw->mac.type == I40E_MAC_X722_VF)
- hena.hena = IXL_DEFAULT_RSS_HENA_X722;
- else
- hena.hena = IXL_DEFAULT_RSS_HENA_XL710;
-
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_SET_RSS_HENA,
- (u8 *)&hena, sizeof(hena));
- return (0);
-}
-
-int
-ixlv_config_rss_lut(struct ixlv_sc *sc)
-{
- struct virtchnl_rss_lut *rss_lut_msg;
- int msg_len;
- u16 lut_length;
- u32 lut;
- int i, que_id;
-
- lut_length = IXL_RSS_VSI_LUT_SIZE;
- msg_len = sizeof(struct virtchnl_rss_lut) + (lut_length * sizeof(u8)) - 1;
- rss_lut_msg = malloc(msg_len, M_IXLV, M_NOWAIT | M_ZERO);
- if (rss_lut_msg == NULL) {
- device_printf(sc->dev, "Unable to allocate msg memory for RSS lut msg.\n");
- return (ENOMEM);
- }
-
- rss_lut_msg->vsi_id = sc->vsi_res->vsi_id;
- /* Each LUT entry is a max of 1 byte, so this is easy */
- rss_lut_msg->lut_entries = lut_length;
-
- /* Populate the LUT with max no. of queues in round robin fashion */
- for (i = 0; i < lut_length; i++) {
-#ifdef RSS
- /*
- * Fetch the RSS bucket id for the given indirection entry.
- * Cap it at the number of configured buckets (which is
- * num_queues.)
- */
- que_id = rss_get_indirection_to_bucket(i);
- que_id = que_id % sc->vsi.num_rx_queues;
-#else
- que_id = i % sc->vsi.num_rx_queues;
-#endif
- lut = que_id & IXL_RSS_VSI_LUT_ENTRY_MASK;
- rss_lut_msg->lut[i] = lut;
- }
-
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_RSS_LUT,
- (u8 *)rss_lut_msg, msg_len);
-
- free(rss_lut_msg, M_IXLV);
- return (0);
-}
-
-int
-ixlv_config_promisc_mode(struct ixlv_sc *sc)
-{
- struct virtchnl_promisc_info pinfo;
-
- pinfo.vsi_id = sc->vsi_res->vsi_id;
- pinfo.flags = sc->promisc_flags;
-
- ixlv_send_pf_msg(sc, VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE,
- (u8 *)&pinfo, sizeof(pinfo));
- return (0);
-}
-
-/*
-** ixlv_vc_completion
-**
-** Asynchronous completion function for admin queue messages. Rather than busy
-** wait, we fire off our requests and assume that no errors will be returned.
-** This function handles the reply messages.
-*/
-void
-ixlv_vc_completion(struct ixlv_sc *sc,
- enum virtchnl_ops v_opcode,
- enum virtchnl_status_code v_retval, u8 *msg, u16 msglen)
-{
- device_t dev = sc->dev;
-
- if (v_opcode != VIRTCHNL_OP_GET_STATS)
- ixlv_dbg_vc(sc, "%s: opcode %s\n", __func__,
- ixl_vc_opcode_str(v_opcode));
-
- if (v_opcode == VIRTCHNL_OP_EVENT) {
- struct virtchnl_pf_event *vpe =
- (struct virtchnl_pf_event *)msg;
-
- switch (vpe->event) {
- case VIRTCHNL_EVENT_LINK_CHANGE:
- ixlv_dbg_vc(sc, "Link change: status %d, speed %s\n",
- vpe->event_data.link_event.link_status,
- ixlv_vc_speed_to_string(vpe->event_data.link_event.link_speed));
- sc->link_up =
- vpe->event_data.link_event.link_status;
- sc->link_speed =
- vpe->event_data.link_event.link_speed;
- ixlv_update_link_status(sc);
- break;
- case VIRTCHNL_EVENT_RESET_IMPENDING:
- device_printf(dev, "PF initiated reset!\n");
- sc->init_state = IXLV_RESET_PENDING;
- ixlv_if_init(sc->vsi.ctx);
- break;
- default:
- ixlv_dbg_vc(sc, "Unknown event %d from AQ\n",
- vpe->event);
- break;
- }
-
- return;
- }
-
- /* Catch-all error response */
- if (v_retval) {
- device_printf(dev,
- "%s: AQ returned error %s to our request %s!\n",
- __func__, i40e_vc_stat_str(&sc->hw, v_retval), ixl_vc_opcode_str(v_opcode));
- }
-
- switch (v_opcode) {
- case VIRTCHNL_OP_GET_STATS:
- ixlv_update_stats_counters(sc, (struct i40e_eth_stats *)msg);
- break;
- case VIRTCHNL_OP_ADD_ETH_ADDR:
- if (v_retval) {
- device_printf(dev, "WARNING: Error adding VF mac filter!\n");
- device_printf(dev, "WARNING: Device may not receive traffic!\n");
- }
- break;
- case VIRTCHNL_OP_DEL_ETH_ADDR:
- break;
- case VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE:
- break;
- case VIRTCHNL_OP_ADD_VLAN:
- break;
- case VIRTCHNL_OP_DEL_VLAN:
- break;
- case VIRTCHNL_OP_ENABLE_QUEUES:
- atomic_store_rel_32(&sc->queues_enabled, 1);
- wakeup_one(&sc->enable_queues_chan);
- break;
- case VIRTCHNL_OP_DISABLE_QUEUES:
- atomic_store_rel_32(&sc->queues_enabled, 0);
- wakeup_one(&sc->disable_queues_chan);
- break;
- case VIRTCHNL_OP_CONFIG_VSI_QUEUES:
- break;
- case VIRTCHNL_OP_CONFIG_IRQ_MAP:
- break;
- case VIRTCHNL_OP_CONFIG_RSS_KEY:
- break;
- case VIRTCHNL_OP_SET_RSS_HENA:
- break;
- case VIRTCHNL_OP_CONFIG_RSS_LUT:
- break;
- default:
- ixlv_dbg_vc(sc,
- "Received unexpected message %s from PF.\n",
- ixl_vc_opcode_str(v_opcode));
- break;
- }
-}
-
-int
-ixl_vc_send_cmd(struct ixlv_sc *sc, uint32_t request)
-{
-
- switch (request) {
- case IXLV_FLAG_AQ_MAP_VECTORS:
- return ixlv_map_queues(sc);
-
- case IXLV_FLAG_AQ_ADD_MAC_FILTER:
- return ixlv_add_ether_filters(sc);
-
- case IXLV_FLAG_AQ_ADD_VLAN_FILTER:
- return ixlv_add_vlans(sc);
-
- case IXLV_FLAG_AQ_DEL_MAC_FILTER:
- return ixlv_del_ether_filters(sc);
-
- case IXLV_FLAG_AQ_DEL_VLAN_FILTER:
- return ixlv_del_vlans(sc);
-
- case IXLV_FLAG_AQ_CONFIGURE_QUEUES:
- return ixlv_configure_queues(sc);
-
- case IXLV_FLAG_AQ_DISABLE_QUEUES:
- return ixlv_disable_queues(sc);
-
- case IXLV_FLAG_AQ_ENABLE_QUEUES:
- return ixlv_enable_queues(sc);
-
- case IXLV_FLAG_AQ_CONFIG_RSS_KEY:
- return ixlv_config_rss_key(sc);
-
- case IXLV_FLAG_AQ_SET_RSS_HENA:
- return ixlv_set_rss_hena(sc);
-
- case IXLV_FLAG_AQ_CONFIG_RSS_LUT:
- return ixlv_config_rss_lut(sc);
-
- case IXLV_FLAG_AQ_CONFIGURE_PROMISC:
- return ixlv_config_promisc_mode(sc);
- }
-
- return (0);
-}
-
-void *
-ixl_vc_get_op_chan(struct ixlv_sc *sc, uint32_t request)
-{
- switch (request) {
- case IXLV_FLAG_AQ_ENABLE_QUEUES:
- return (&sc->enable_queues_chan);
- case IXLV_FLAG_AQ_DISABLE_QUEUES:
- return (&sc->disable_queues_chan);
- default:
- return (NULL);
- }
-}
Index: sys/modules/iavf/Makefile
===================================================================
--- sys/modules/iavf/Makefile
+++ sys/modules/iavf/Makefile
@@ -5,7 +5,7 @@
KMOD = if_iavf
SRCS = device_if.h bus_if.h pci_if.h ifdi_if.h
SRCS += opt_inet.h opt_inet6.h opt_rss.h opt_ixl.h opt_iflib.h opt_global.h
-SRCS += if_ixlv.c ixlvc.c ixl_txrx.c i40e_osdep.c
+SRCS += if_iavf.c iavf_vc.c ixl_txrx.c i40e_osdep.c
# Shared source
SRCS += i40e_common.c i40e_nvm.c i40e_adminq.c

File Metadata

Mime Type
text/plain
Expires
Sat, Feb 22, 2:53 PM (20 m, 2 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16773600
Default Alt Text
D17544.id49123.diff (190 KB)

Event Timeline