i40e/base: support proxy config for X722

Adds admin q functions for "Set Proxying Configuration Command"
and "Set NS Proxy Table Entry Command".

Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
Acked-by: Helin Zhang <helin.zhang@intel.com>
Tested-by: Huilong Xu <huilongx.xu@intel.com>
This commit is contained in:
Jingjing Wu 2015-09-06 15:11:52 +08:00 committed by Thomas Monjalon
parent 4000d1d0cc
commit 788fc17b2d
3 changed files with 121 additions and 0 deletions

View File

@ -272,6 +272,10 @@ enum i40e_admin_queue_opc {
i40e_aqc_opc_get_rss_lut = 0x0B05,
#endif
/* Proxy commands */
i40e_aqc_opc_set_proxy_config = 0x0104,
i40e_aqc_opc_set_ns_proxy_table_entry = 0x0105,
/* Async Events */
i40e_aqc_opc_event_lan_overflow = 0x1001,
@ -2418,4 +2422,41 @@ struct i40e_aqc_debug_modify_internals {
I40E_CHECK_CMD_LENGTH(i40e_aqc_debug_modify_internals);
#ifdef X722_SUPPORT
struct i40e_aqc_set_proxy_config {
u8 reserved_1[4];
u8 reserved_2[4];
__le32 address_high;
__le32 address_low;
};
I40E_CHECK_CMD_LENGTH(i40e_aqc_set_proxy_config);
struct i40e_aqc_set_proxy_config_resp {
u8 reserved[8];
__le32 address_high;
__le32 address_low;
};
I40E_CHECK_CMD_LENGTH(i40e_aqc_set_proxy_config_resp);
struct i40e_aqc_set_ns_proxy_table_entry {
u8 reserved_1[4];
u8 reserved_2[4];
__le32 address_high;
__le32 address_low;
};
I40E_CHECK_CMD_LENGTH(i40e_aqc_set_ns_proxy_table_entry);
struct i40e_aqc_set_ns_proxy_table_entry_resp {
u8 reserved_1[4];
u8 reserved_2[4];
__le32 address_high;
__le32 address_low;
};
I40E_CHECK_CMD_LENGTH(i40e_aqc_set_ns_proxy_table_entry_resp);
#endif
#endif /* _I40E_ADMINQ_CMD_H_ */

View File

@ -5768,3 +5768,75 @@ enum i40e_status_code i40e_vf_reset(struct i40e_hw *hw)
I40E_SUCCESS, NULL, 0, NULL);
}
#endif /* VF_DRIVER */
#ifdef X722_SUPPORT
/**
* i40e_aq_set_arp_proxy_config
* @hw: pointer to the HW structure
* @proxy_config - pointer to proxy config command table struct
* @cmd_details: pointer to command details
*
* Set ARP offload parameters from pre-populated
* i40e_aqc_arp_proxy_data struct
**/
enum i40e_status_code i40e_aq_set_arp_proxy_config(struct i40e_hw *hw,
struct i40e_aqc_arp_proxy_data *proxy_config,
struct i40e_asq_cmd_details *cmd_details)
{
struct i40e_aq_desc desc;
struct i40e_aqc_set_proxy_config *cmd =
(struct i40e_aqc_set_proxy_config *) &desc.params.raw;
enum i40e_status_code status;
if (!proxy_config)
return I40E_ERR_PARAM;
i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_set_proxy_config);
cmd->address_high = CPU_TO_LE32(I40E_HI_DWORD((u64)proxy_config));
cmd->address_low = CPU_TO_LE32(I40E_LO_DWORD((u64)proxy_config));
status = i40e_asq_send_command(hw, &desc, proxy_config,
sizeof(struct i40e_aqc_arp_proxy_data),
cmd_details);
return status;
}
/**
* i40e_aq_opc_set_ns_proxy_table_entry
* @hw: pointer to the HW structure
* @ns_proxy_table_entry: pointer to NS table entry command struct
* @cmd_details: pointer to command details
*
* Set IPv6 Neighbor Solicitation (NS) protocol offload parameters
* from pre-populated i40e_aqc_ns_proxy_data struct
**/
enum i40e_status_code i40e_aq_set_ns_proxy_table_entry(struct i40e_hw *hw,
struct i40e_aqc_ns_proxy_data *ns_proxy_table_entry,
struct i40e_asq_cmd_details *cmd_details)
{
struct i40e_aq_desc desc;
struct i40e_aqc_set_ns_proxy_table_entry *cmd =
(struct i40e_aqc_set_ns_proxy_table_entry *) &desc.params.raw;
enum i40e_status_code status;
if (!ns_proxy_table_entry)
return I40E_ERR_PARAM;
i40e_fill_default_direct_cmd_desc(&desc,
i40e_aqc_opc_set_ns_proxy_table_entry);
cmd->address_high =
CPU_TO_LE32(I40E_HI_DWORD((u64)ns_proxy_table_entry));
cmd->address_low =
CPU_TO_LE32(I40E_LO_DWORD((u64)ns_proxy_table_entry));
status = i40e_asq_send_command(hw, &desc, ns_proxy_table_entry,
sizeof(struct i40e_aqc_ns_proxy_data),
cmd_details);
return status;
}
#endif /* X722_SUPPORT */

View File

@ -491,4 +491,12 @@ enum i40e_status_code i40e_aq_debug_dump(struct i40e_hw *hw, u8 cluster_id,
struct i40e_asq_cmd_details *cmd_details);
void i40e_add_filter_to_drop_tx_flow_control_frames(struct i40e_hw *hw,
u16 vsi_seid);
#ifdef X722_SUPPORT
enum i40e_status_code i40e_aq_set_arp_proxy_config(struct i40e_hw *hw,
struct i40e_aqc_arp_proxy_data *proxy_config,
struct i40e_asq_cmd_details *cmd_details);
enum i40e_status_code i40e_aq_set_ns_proxy_table_entry(struct i40e_hw *hw,
struct i40e_aqc_ns_proxy_data *ns_proxy_table_entry,
struct i40e_asq_cmd_details *cmd_details);
#endif
#endif /* _I40E_PROTOTYPE_H_ */