mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
i40e/i40evf: Update FW API with X722 support
This patch does the firmware API update to support the new X722 device. Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com> Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com> Tested-by: Jim Young <james.m.young@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
d502ce01d2
commit
e50c8d6d3d
6 changed files with 444 additions and 1 deletions
|
@ -257,6 +257,10 @@ enum i40e_admin_queue_opc {
|
|||
/* Tunnel commands */
|
||||
i40e_aqc_opc_add_udp_tunnel = 0x0B00,
|
||||
i40e_aqc_opc_del_udp_tunnel = 0x0B01,
|
||||
i40e_aqc_opc_set_rss_key = 0x0B02,
|
||||
i40e_aqc_opc_set_rss_lut = 0x0B03,
|
||||
i40e_aqc_opc_get_rss_key = 0x0B04,
|
||||
i40e_aqc_opc_get_rss_lut = 0x0B05,
|
||||
|
||||
/* Async Events */
|
||||
i40e_aqc_opc_event_lan_overflow = 0x1001,
|
||||
|
@ -821,8 +825,12 @@ struct i40e_aqc_vsi_properties_data {
|
|||
I40E_AQ_VSI_TC_QUE_NUMBER_SHIFT)
|
||||
/* queueing option section */
|
||||
u8 queueing_opt_flags;
|
||||
#define I40E_AQ_VSI_QUE_OPT_MULTICAST_UDP_ENA 0x04
|
||||
#define I40E_AQ_VSI_QUE_OPT_UNICAST_UDP_ENA 0x08
|
||||
#define I40E_AQ_VSI_QUE_OPT_TCP_ENA 0x10
|
||||
#define I40E_AQ_VSI_QUE_OPT_FCOE_ENA 0x20
|
||||
#define I40E_AQ_VSI_QUE_OPT_RSS_LUT_PF 0x00
|
||||
#define I40E_AQ_VSI_QUE_OPT_RSS_LUT_VSI 0x40
|
||||
u8 queueing_opt_reserved[3];
|
||||
/* scheduler section */
|
||||
u8 up_enable_bits;
|
||||
|
@ -2179,6 +2187,46 @@ struct i40e_aqc_del_udp_tunnel_completion {
|
|||
|
||||
I40E_CHECK_CMD_LENGTH(i40e_aqc_del_udp_tunnel_completion);
|
||||
|
||||
struct i40e_aqc_get_set_rss_key {
|
||||
#define I40E_AQC_SET_RSS_KEY_VSI_VALID (0x1 << 15)
|
||||
#define I40E_AQC_SET_RSS_KEY_VSI_ID_SHIFT 0
|
||||
#define I40E_AQC_SET_RSS_KEY_VSI_ID_MASK (0x3FF << \
|
||||
I40E_AQC_SET_RSS_KEY_VSI_ID_SHIFT)
|
||||
__le16 vsi_id;
|
||||
u8 reserved[6];
|
||||
__le32 addr_high;
|
||||
__le32 addr_low;
|
||||
};
|
||||
|
||||
I40E_CHECK_CMD_LENGTH(i40e_aqc_get_set_rss_key);
|
||||
|
||||
struct i40e_aqc_get_set_rss_key_data {
|
||||
u8 standard_rss_key[0x28];
|
||||
u8 extended_hash_key[0xc];
|
||||
};
|
||||
|
||||
I40E_CHECK_STRUCT_LEN(0x34, i40e_aqc_get_set_rss_key_data);
|
||||
|
||||
struct i40e_aqc_get_set_rss_lut {
|
||||
#define I40E_AQC_SET_RSS_LUT_VSI_VALID (0x1 << 15)
|
||||
#define I40E_AQC_SET_RSS_LUT_VSI_ID_SHIFT 0
|
||||
#define I40E_AQC_SET_RSS_LUT_VSI_ID_MASK (0x3FF << \
|
||||
I40E_AQC_SET_RSS_LUT_VSI_ID_SHIFT)
|
||||
__le16 vsi_id;
|
||||
#define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT 0
|
||||
#define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_MASK (0x1 << \
|
||||
I40E_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT)
|
||||
|
||||
#define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_VSI 0
|
||||
#define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_PF 1
|
||||
__le16 flags;
|
||||
u8 reserved[4];
|
||||
__le32 addr_high;
|
||||
__le32 addr_low;
|
||||
};
|
||||
|
||||
I40E_CHECK_CMD_LENGTH(i40e_aqc_get_set_rss_lut);
|
||||
|
||||
/* tunnel key structure 0x0B10 */
|
||||
|
||||
struct i40e_aqc_tunnel_key_structure {
|
||||
|
|
|
@ -392,6 +392,169 @@ i40e_status i40e_aq_queue_shutdown(struct i40e_hw *hw,
|
|||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_get_set_rss_lut
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_id: vsi fw index
|
||||
* @pf_lut: for PF table set true, for VSI table set false
|
||||
* @lut: pointer to the lut buffer provided by the caller
|
||||
* @lut_size: size of the lut buffer
|
||||
* @set: set true to set the table, false to get the table
|
||||
*
|
||||
* Internal function to get or set RSS look up table
|
||||
**/
|
||||
static i40e_status i40e_aq_get_set_rss_lut(struct i40e_hw *hw,
|
||||
u16 vsi_id, bool pf_lut,
|
||||
u8 *lut, u16 lut_size,
|
||||
bool set)
|
||||
{
|
||||
i40e_status status;
|
||||
struct i40e_aq_desc desc;
|
||||
struct i40e_aqc_get_set_rss_lut *cmd_resp =
|
||||
(struct i40e_aqc_get_set_rss_lut *)&desc.params.raw;
|
||||
|
||||
if (set)
|
||||
i40e_fill_default_direct_cmd_desc(&desc,
|
||||
i40e_aqc_opc_set_rss_lut);
|
||||
else
|
||||
i40e_fill_default_direct_cmd_desc(&desc,
|
||||
i40e_aqc_opc_get_rss_lut);
|
||||
|
||||
/* Indirect command */
|
||||
desc.flags |= cpu_to_le16((u16)I40E_AQ_FLAG_BUF);
|
||||
desc.flags |= cpu_to_le16((u16)I40E_AQ_FLAG_RD);
|
||||
|
||||
cmd_resp->vsi_id =
|
||||
cpu_to_le16((u16)((vsi_id <<
|
||||
I40E_AQC_SET_RSS_LUT_VSI_ID_SHIFT) &
|
||||
I40E_AQC_SET_RSS_LUT_VSI_ID_MASK));
|
||||
cmd_resp->vsi_id |= cpu_to_le16((u16)I40E_AQC_SET_RSS_LUT_VSI_VALID);
|
||||
|
||||
if (pf_lut)
|
||||
cmd_resp->flags |= cpu_to_le16((u16)
|
||||
((I40E_AQC_SET_RSS_LUT_TABLE_TYPE_PF <<
|
||||
I40E_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT) &
|
||||
I40E_AQC_SET_RSS_LUT_TABLE_TYPE_MASK));
|
||||
else
|
||||
cmd_resp->flags |= cpu_to_le16((u16)
|
||||
((I40E_AQC_SET_RSS_LUT_TABLE_TYPE_VSI <<
|
||||
I40E_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT) &
|
||||
I40E_AQC_SET_RSS_LUT_TABLE_TYPE_MASK));
|
||||
|
||||
cmd_resp->addr_high = cpu_to_le32(high_16_bits((u64)lut));
|
||||
cmd_resp->addr_low = cpu_to_le32(lower_32_bits((u64)lut));
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, lut, lut_size, NULL);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_get_rss_lut
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_id: vsi fw index
|
||||
* @pf_lut: for PF table set true, for VSI table set false
|
||||
* @lut: pointer to the lut buffer provided by the caller
|
||||
* @lut_size: size of the lut buffer
|
||||
*
|
||||
* get the RSS lookup table, PF or VSI type
|
||||
**/
|
||||
i40e_status i40e_aq_get_rss_lut(struct i40e_hw *hw, u16 vsi_id,
|
||||
bool pf_lut, u8 *lut, u16 lut_size)
|
||||
{
|
||||
return i40e_aq_get_set_rss_lut(hw, vsi_id, pf_lut, lut, lut_size,
|
||||
false);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_set_rss_lut
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_id: vsi fw index
|
||||
* @pf_lut: for PF table set true, for VSI table set false
|
||||
* @lut: pointer to the lut buffer provided by the caller
|
||||
* @lut_size: size of the lut buffer
|
||||
*
|
||||
* set the RSS lookup table, PF or VSI type
|
||||
**/
|
||||
i40e_status i40e_aq_set_rss_lut(struct i40e_hw *hw, u16 vsi_id,
|
||||
bool pf_lut, u8 *lut, u16 lut_size)
|
||||
{
|
||||
return i40e_aq_get_set_rss_lut(hw, vsi_id, pf_lut, lut, lut_size, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_get_set_rss_key
|
||||
* @hw: pointer to the hw struct
|
||||
* @vsi_id: vsi fw index
|
||||
* @key: pointer to key info struct
|
||||
* @set: set true to set the key, false to get the key
|
||||
*
|
||||
* get the RSS key per VSI
|
||||
**/
|
||||
static i40e_status i40e_aq_get_set_rss_key(struct i40e_hw *hw,
|
||||
u16 vsi_id,
|
||||
struct i40e_aqc_get_set_rss_key_data *key,
|
||||
bool set)
|
||||
{
|
||||
i40e_status status;
|
||||
struct i40e_aq_desc desc;
|
||||
struct i40e_aqc_get_set_rss_key *cmd_resp =
|
||||
(struct i40e_aqc_get_set_rss_key *)&desc.params.raw;
|
||||
u16 key_size = sizeof(struct i40e_aqc_get_set_rss_key_data);
|
||||
|
||||
if (set)
|
||||
i40e_fill_default_direct_cmd_desc(&desc,
|
||||
i40e_aqc_opc_set_rss_key);
|
||||
else
|
||||
i40e_fill_default_direct_cmd_desc(&desc,
|
||||
i40e_aqc_opc_get_rss_key);
|
||||
|
||||
/* Indirect command */
|
||||
desc.flags |= cpu_to_le16((u16)I40E_AQ_FLAG_BUF);
|
||||
desc.flags |= cpu_to_le16((u16)I40E_AQ_FLAG_RD);
|
||||
|
||||
cmd_resp->vsi_id =
|
||||
cpu_to_le16((u16)((vsi_id <<
|
||||
I40E_AQC_SET_RSS_KEY_VSI_ID_SHIFT) &
|
||||
I40E_AQC_SET_RSS_KEY_VSI_ID_MASK));
|
||||
cmd_resp->vsi_id |= cpu_to_le16((u16)I40E_AQC_SET_RSS_KEY_VSI_VALID);
|
||||
cmd_resp->addr_high = cpu_to_le32(high_16_bits((u64)key));
|
||||
cmd_resp->addr_low = cpu_to_le32(lower_32_bits((u64)key));
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, key, key_size, NULL);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_get_rss_key
|
||||
* @hw: pointer to the hw struct
|
||||
* @vsi_id: vsi fw index
|
||||
* @key: pointer to key info struct
|
||||
*
|
||||
**/
|
||||
i40e_status i40e_aq_get_rss_key(struct i40e_hw *hw,
|
||||
u16 vsi_id,
|
||||
struct i40e_aqc_get_set_rss_key_data *key)
|
||||
{
|
||||
return i40e_aq_get_set_rss_key(hw, vsi_id, key, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_set_rss_key
|
||||
* @hw: pointer to the hw struct
|
||||
* @vsi_id: vsi fw index
|
||||
* @key: pointer to key info struct
|
||||
*
|
||||
* set the RSS key per VSI
|
||||
**/
|
||||
i40e_status i40e_aq_set_rss_key(struct i40e_hw *hw,
|
||||
u16 vsi_id,
|
||||
struct i40e_aqc_get_set_rss_key_data *key)
|
||||
{
|
||||
return i40e_aq_get_set_rss_key(hw, vsi_id, key, true);
|
||||
}
|
||||
|
||||
/* The i40e_ptype_lookup table is used to convert from the 8-bit ptype in the
|
||||
* hardware to a bit-field that can be used by SW to more easily determine the
|
||||
* packet type.
|
||||
|
|
|
@ -61,6 +61,17 @@ i40e_status i40e_aq_queue_shutdown(struct i40e_hw *hw, bool unloading);
|
|||
char *i40e_aq_str(struct i40e_hw *hw, enum i40e_admin_queue_err aq_err);
|
||||
char *i40e_stat_str(struct i40e_hw *hw, i40e_status stat_err);
|
||||
|
||||
i40e_status i40e_aq_get_rss_lut(struct i40e_hw *hw, u16 seid,
|
||||
bool pf_lut, u8 *lut, u16 lut_size);
|
||||
i40e_status i40e_aq_set_rss_lut(struct i40e_hw *hw, u16 seid,
|
||||
bool pf_lut, u8 *lut, u16 lut_size);
|
||||
i40e_status i40e_aq_get_rss_key(struct i40e_hw *hw,
|
||||
u16 seid,
|
||||
struct i40e_aqc_get_set_rss_key_data *key);
|
||||
i40e_status i40e_aq_set_rss_key(struct i40e_hw *hw,
|
||||
u16 seid,
|
||||
struct i40e_aqc_get_set_rss_key_data *key);
|
||||
|
||||
u32 i40e_led_get(struct i40e_hw *hw);
|
||||
void i40e_led_set(struct i40e_hw *hw, u32 mode, bool blink);
|
||||
|
||||
|
|
|
@ -35,7 +35,6 @@
|
|||
|
||||
#define I40E_FW_API_VERSION_MAJOR 0x0001
|
||||
#define I40E_FW_API_VERSION_MINOR 0x0004
|
||||
#define I40E_FW_API_VERSION_A0_MINOR 0x0000
|
||||
|
||||
struct i40e_aq_desc {
|
||||
__le16 flags;
|
||||
|
@ -255,6 +254,10 @@ enum i40e_admin_queue_opc {
|
|||
/* Tunnel commands */
|
||||
i40e_aqc_opc_add_udp_tunnel = 0x0B00,
|
||||
i40e_aqc_opc_del_udp_tunnel = 0x0B01,
|
||||
i40e_aqc_opc_set_rss_key = 0x0B02,
|
||||
i40e_aqc_opc_set_rss_lut = 0x0B03,
|
||||
i40e_aqc_opc_get_rss_key = 0x0B04,
|
||||
i40e_aqc_opc_get_rss_lut = 0x0B05,
|
||||
|
||||
/* Async Events */
|
||||
i40e_aqc_opc_event_lan_overflow = 0x1001,
|
||||
|
@ -819,8 +822,12 @@ struct i40e_aqc_vsi_properties_data {
|
|||
I40E_AQ_VSI_TC_QUE_NUMBER_SHIFT)
|
||||
/* queueing option section */
|
||||
u8 queueing_opt_flags;
|
||||
#define I40E_AQ_VSI_QUE_OPT_MULTICAST_UDP_ENA 0x04
|
||||
#define I40E_AQ_VSI_QUE_OPT_UNICAST_UDP_ENA 0x08
|
||||
#define I40E_AQ_VSI_QUE_OPT_TCP_ENA 0x10
|
||||
#define I40E_AQ_VSI_QUE_OPT_FCOE_ENA 0x20
|
||||
#define I40E_AQ_VSI_QUE_OPT_RSS_LUT_PF 0x00
|
||||
#define I40E_AQ_VSI_QUE_OPT_RSS_LUT_VSI 0x40
|
||||
u8 queueing_opt_reserved[3];
|
||||
/* scheduler section */
|
||||
u8 up_enable_bits;
|
||||
|
@ -2089,6 +2096,46 @@ struct i40e_aqc_del_udp_tunnel_completion {
|
|||
|
||||
I40E_CHECK_CMD_LENGTH(i40e_aqc_del_udp_tunnel_completion);
|
||||
|
||||
struct i40e_aqc_get_set_rss_key {
|
||||
#define I40E_AQC_SET_RSS_KEY_VSI_VALID (0x1 << 15)
|
||||
#define I40E_AQC_SET_RSS_KEY_VSI_ID_SHIFT 0
|
||||
#define I40E_AQC_SET_RSS_KEY_VSI_ID_MASK (0x3FF << \
|
||||
I40E_AQC_SET_RSS_KEY_VSI_ID_SHIFT)
|
||||
__le16 vsi_id;
|
||||
u8 reserved[6];
|
||||
__le32 addr_high;
|
||||
__le32 addr_low;
|
||||
};
|
||||
|
||||
I40E_CHECK_CMD_LENGTH(i40e_aqc_get_set_rss_key);
|
||||
|
||||
struct i40e_aqc_get_set_rss_key_data {
|
||||
u8 standard_rss_key[0x28];
|
||||
u8 extended_hash_key[0xc];
|
||||
};
|
||||
|
||||
I40E_CHECK_STRUCT_LEN(0x34, i40e_aqc_get_set_rss_key_data);
|
||||
|
||||
struct i40e_aqc_get_set_rss_lut {
|
||||
#define I40E_AQC_SET_RSS_LUT_VSI_VALID (0x1 << 15)
|
||||
#define I40E_AQC_SET_RSS_LUT_VSI_ID_SHIFT 0
|
||||
#define I40E_AQC_SET_RSS_LUT_VSI_ID_MASK (0x3FF << \
|
||||
I40E_AQC_SET_RSS_LUT_VSI_ID_SHIFT)
|
||||
__le16 vsi_id;
|
||||
#define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT 0
|
||||
#define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_MASK (0x1 << \
|
||||
I40E_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT)
|
||||
|
||||
#define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_VSI 0
|
||||
#define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_PF 1
|
||||
__le16 flags;
|
||||
u8 reserved[4];
|
||||
__le32 addr_high;
|
||||
__le32 addr_low;
|
||||
};
|
||||
|
||||
I40E_CHECK_CMD_LENGTH(i40e_aqc_get_set_rss_lut);
|
||||
|
||||
/* tunnel key structure 0x0B10 */
|
||||
|
||||
struct i40e_aqc_tunnel_key_structure_A0 {
|
||||
|
|
|
@ -392,6 +392,169 @@ i40e_status i40evf_aq_queue_shutdown(struct i40e_hw *hw,
|
|||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_get_set_rss_lut
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_id: vsi fw index
|
||||
* @pf_lut: for PF table set true, for VSI table set false
|
||||
* @lut: pointer to the lut buffer provided by the caller
|
||||
* @lut_size: size of the lut buffer
|
||||
* @set: set true to set the table, false to get the table
|
||||
*
|
||||
* Internal function to get or set RSS look up table
|
||||
**/
|
||||
static i40e_status i40e_aq_get_set_rss_lut(struct i40e_hw *hw,
|
||||
u16 vsi_id, bool pf_lut,
|
||||
u8 *lut, u16 lut_size,
|
||||
bool set)
|
||||
{
|
||||
i40e_status status;
|
||||
struct i40e_aq_desc desc;
|
||||
struct i40e_aqc_get_set_rss_lut *cmd_resp =
|
||||
(struct i40e_aqc_get_set_rss_lut *)&desc.params.raw;
|
||||
|
||||
if (set)
|
||||
i40evf_fill_default_direct_cmd_desc(&desc,
|
||||
i40e_aqc_opc_set_rss_lut);
|
||||
else
|
||||
i40evf_fill_default_direct_cmd_desc(&desc,
|
||||
i40e_aqc_opc_get_rss_lut);
|
||||
|
||||
/* Indirect command */
|
||||
desc.flags |= cpu_to_le16((u16)I40E_AQ_FLAG_BUF);
|
||||
desc.flags |= cpu_to_le16((u16)I40E_AQ_FLAG_RD);
|
||||
|
||||
cmd_resp->vsi_id =
|
||||
cpu_to_le16((u16)((vsi_id <<
|
||||
I40E_AQC_SET_RSS_LUT_VSI_ID_SHIFT) &
|
||||
I40E_AQC_SET_RSS_LUT_VSI_ID_MASK));
|
||||
cmd_resp->vsi_id |= cpu_to_le16((u16)I40E_AQC_SET_RSS_LUT_VSI_VALID);
|
||||
|
||||
if (pf_lut)
|
||||
cmd_resp->flags |= cpu_to_le16((u16)
|
||||
((I40E_AQC_SET_RSS_LUT_TABLE_TYPE_PF <<
|
||||
I40E_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT) &
|
||||
I40E_AQC_SET_RSS_LUT_TABLE_TYPE_MASK));
|
||||
else
|
||||
cmd_resp->flags |= cpu_to_le16((u16)
|
||||
((I40E_AQC_SET_RSS_LUT_TABLE_TYPE_VSI <<
|
||||
I40E_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT) &
|
||||
I40E_AQC_SET_RSS_LUT_TABLE_TYPE_MASK));
|
||||
|
||||
cmd_resp->addr_high = cpu_to_le32(high_16_bits((u64)lut));
|
||||
cmd_resp->addr_low = cpu_to_le32(lower_32_bits((u64)lut));
|
||||
|
||||
status = i40evf_asq_send_command(hw, &desc, lut, lut_size, NULL);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40evf_aq_get_rss_lut
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_id: vsi fw index
|
||||
* @pf_lut: for PF table set true, for VSI table set false
|
||||
* @lut: pointer to the lut buffer provided by the caller
|
||||
* @lut_size: size of the lut buffer
|
||||
*
|
||||
* get the RSS lookup table, PF or VSI type
|
||||
**/
|
||||
i40e_status i40evf_aq_get_rss_lut(struct i40e_hw *hw, u16 vsi_id,
|
||||
bool pf_lut, u8 *lut, u16 lut_size)
|
||||
{
|
||||
return i40e_aq_get_set_rss_lut(hw, vsi_id, pf_lut, lut, lut_size,
|
||||
false);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40evf_aq_set_rss_lut
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_id: vsi fw index
|
||||
* @pf_lut: for PF table set true, for VSI table set false
|
||||
* @lut: pointer to the lut buffer provided by the caller
|
||||
* @lut_size: size of the lut buffer
|
||||
*
|
||||
* set the RSS lookup table, PF or VSI type
|
||||
**/
|
||||
i40e_status i40evf_aq_set_rss_lut(struct i40e_hw *hw, u16 vsi_id,
|
||||
bool pf_lut, u8 *lut, u16 lut_size)
|
||||
{
|
||||
return i40e_aq_get_set_rss_lut(hw, vsi_id, pf_lut, lut, lut_size, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_get_set_rss_key
|
||||
* @hw: pointer to the hw struct
|
||||
* @vsi_id: vsi fw index
|
||||
* @key: pointer to key info struct
|
||||
* @set: set true to set the key, false to get the key
|
||||
*
|
||||
* get the RSS key per VSI
|
||||
**/
|
||||
static i40e_status i40e_aq_get_set_rss_key(struct i40e_hw *hw,
|
||||
u16 vsi_id,
|
||||
struct i40e_aqc_get_set_rss_key_data *key,
|
||||
bool set)
|
||||
{
|
||||
i40e_status status;
|
||||
struct i40e_aq_desc desc;
|
||||
struct i40e_aqc_get_set_rss_key *cmd_resp =
|
||||
(struct i40e_aqc_get_set_rss_key *)&desc.params.raw;
|
||||
u16 key_size = sizeof(struct i40e_aqc_get_set_rss_key_data);
|
||||
|
||||
if (set)
|
||||
i40evf_fill_default_direct_cmd_desc(&desc,
|
||||
i40e_aqc_opc_set_rss_key);
|
||||
else
|
||||
i40evf_fill_default_direct_cmd_desc(&desc,
|
||||
i40e_aqc_opc_get_rss_key);
|
||||
|
||||
/* Indirect command */
|
||||
desc.flags |= cpu_to_le16((u16)I40E_AQ_FLAG_BUF);
|
||||
desc.flags |= cpu_to_le16((u16)I40E_AQ_FLAG_RD);
|
||||
|
||||
cmd_resp->vsi_id =
|
||||
cpu_to_le16((u16)((vsi_id <<
|
||||
I40E_AQC_SET_RSS_KEY_VSI_ID_SHIFT) &
|
||||
I40E_AQC_SET_RSS_KEY_VSI_ID_MASK));
|
||||
cmd_resp->vsi_id |= cpu_to_le16((u16)I40E_AQC_SET_RSS_KEY_VSI_VALID);
|
||||
cmd_resp->addr_high = cpu_to_le32(high_16_bits((u64)key));
|
||||
cmd_resp->addr_low = cpu_to_le32(lower_32_bits((u64)key));
|
||||
|
||||
status = i40evf_asq_send_command(hw, &desc, key, key_size, NULL);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40evf_aq_get_rss_key
|
||||
* @hw: pointer to the hw struct
|
||||
* @vsi_id: vsi fw index
|
||||
* @key: pointer to key info struct
|
||||
*
|
||||
**/
|
||||
i40e_status i40evf_aq_get_rss_key(struct i40e_hw *hw,
|
||||
u16 vsi_id,
|
||||
struct i40e_aqc_get_set_rss_key_data *key)
|
||||
{
|
||||
return i40e_aq_get_set_rss_key(hw, vsi_id, key, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40evf_aq_set_rss_key
|
||||
* @hw: pointer to the hw struct
|
||||
* @vsi_id: vsi fw index
|
||||
* @key: pointer to key info struct
|
||||
*
|
||||
* set the RSS key per VSI
|
||||
**/
|
||||
i40e_status i40evf_aq_set_rss_key(struct i40e_hw *hw,
|
||||
u16 vsi_id,
|
||||
struct i40e_aqc_get_set_rss_key_data *key)
|
||||
{
|
||||
return i40e_aq_get_set_rss_key(hw, vsi_id, key, true);
|
||||
}
|
||||
|
||||
|
||||
/* The i40evf_ptype_lookup table is used to convert from the 8-bit ptype in the
|
||||
* hardware to a bit-field that can be used by SW to more easily determine the
|
||||
|
|
|
@ -63,6 +63,17 @@ i40e_status i40evf_aq_queue_shutdown(struct i40e_hw *hw, bool unloading);
|
|||
char *i40evf_aq_str(struct i40e_hw *hw, enum i40e_admin_queue_err aq_err);
|
||||
char *i40evf_stat_str(struct i40e_hw *hw, i40e_status stat_err);
|
||||
|
||||
i40e_status i40evf_aq_get_rss_lut(struct i40e_hw *hw, u16 seid,
|
||||
bool pf_lut, u8 *lut, u16 lut_size);
|
||||
i40e_status i40evf_aq_set_rss_lut(struct i40e_hw *hw, u16 seid,
|
||||
bool pf_lut, u8 *lut, u16 lut_size);
|
||||
i40e_status i40evf_aq_get_rss_key(struct i40e_hw *hw,
|
||||
u16 seid,
|
||||
struct i40e_aqc_get_set_rss_key_data *key);
|
||||
i40e_status i40evf_aq_set_rss_key(struct i40e_hw *hw,
|
||||
u16 seid,
|
||||
struct i40e_aqc_get_set_rss_key_data *key);
|
||||
|
||||
i40e_status i40e_set_mac_type(struct i40e_hw *hw);
|
||||
|
||||
extern struct i40e_rx_ptype_decoded i40evf_ptype_lookup[];
|
||||
|
|
Loading…
Reference in a new issue