// SPDX-License-Identifier: GPL-2.0 /* Copyright(c) 2013 - 2018 Intel Corporation. */ #include <linux/list.h> #include <linux/errno.h> #include <linux/net/intel/i40e_client.h> #include "i40e.h" static LIST_HEAD(i40e_devices); static DEFINE_MUTEX(i40e_device_mutex); DEFINE_IDA(…); static int i40e_client_virtchnl_send(struct i40e_info *ldev, struct i40e_client *client, u32 vf_id, u8 *msg, u16 len); static int i40e_client_setup_qvlist(struct i40e_info *ldev, struct i40e_client *client, struct i40e_qvlist_info *qvlist_info); static void i40e_client_request_reset(struct i40e_info *ldev, struct i40e_client *client, u32 reset_level); static int i40e_client_update_vsi_ctxt(struct i40e_info *ldev, struct i40e_client *client, bool is_vf, u32 vf_id, u32 flag, u32 valid_flag); static struct i40e_ops i40e_lan_ops = …; /** * i40e_client_get_params - Get the params that can change at runtime * @vsi: the VSI with the message * @params: client param struct * **/ static int i40e_client_get_params(struct i40e_vsi *vsi, struct i40e_params *params) { … } /** * i40e_notify_client_of_vf_msg - call the client vf message callback * @vsi: the VSI with the message * @vf_id: the absolute VF id that sent the message * @msg: message buffer * @len: length of the message * * If there is a client to this VSI, call the client **/ void i40e_notify_client_of_vf_msg(struct i40e_vsi *vsi, u32 vf_id, u8 *msg, u16 len) { … } /** * i40e_notify_client_of_l2_param_changes - call the client notify callback * @pf: PF device pointer * * If there is a client, call its callback **/ void i40e_notify_client_of_l2_param_changes(struct i40e_pf *pf) { … } /** * i40e_client_release_qvlist - release MSI-X vector mapping for client * @ldev: pointer to L2 context. * **/ static void i40e_client_release_qvlist(struct i40e_info *ldev) { … } /** * i40e_notify_client_of_netdev_close - call the client close callback * @pf: PF device pointer * @reset: true when close called due to a reset pending * * If there is a client to this netdev, call the client with close **/ void i40e_notify_client_of_netdev_close(struct i40e_pf *pf, bool reset) { … } /** * i40e_notify_client_of_vf_reset - call the client vf reset callback * @pf: PF device pointer * @vf_id: asolute id of VF being reset * * If there is a client attached to this PF, notify when a VF is reset **/ void i40e_notify_client_of_vf_reset(struct i40e_pf *pf, u32 vf_id) { … } /** * i40e_notify_client_of_vf_enable - call the client vf notification callback * @pf: PF device pointer * @num_vfs: the number of VFs currently enabled, 0 for disable * * If there is a client attached to this PF, call its VF notification routine **/ void i40e_notify_client_of_vf_enable(struct i40e_pf *pf, u32 num_vfs) { … } /** * i40e_vf_client_capable - ask the client if it likes the specified VF * @pf: PF device pointer * @vf_id: the VF in question * * If there is a client of the specified type attached to this PF, call * its vf_capable routine **/ int i40e_vf_client_capable(struct i40e_pf *pf, u32 vf_id) { … } void i40e_client_update_msix_info(struct i40e_pf *pf) { … } static void i40e_auxiliary_dev_release(struct device *dev) { … } static int i40e_register_auxiliary_dev(struct i40e_info *ldev, const char *name) { … } /** * i40e_client_add_instance - add a client instance struct to the instance list * @pf: pointer to the board struct * **/ static void i40e_client_add_instance(struct i40e_pf *pf) { … } /** * i40e_client_del_instance - removes a client instance from the list * @pf: pointer to the board struct * **/ static void i40e_client_del_instance(struct i40e_pf *pf) { … } /** * i40e_client_subtask - client maintenance work * @pf: board private structure **/ void i40e_client_subtask(struct i40e_pf *pf) { … } /** * i40e_lan_add_device - add a lan device struct to the list of lan devices * @pf: pointer to the board struct * * Returns 0 on success or none 0 on error **/ int i40e_lan_add_device(struct i40e_pf *pf) { … } /** * i40e_lan_del_device - removes a lan device from the device list * @pf: pointer to the board struct * * Returns 0 on success or non-0 on error **/ int i40e_lan_del_device(struct i40e_pf *pf) { … } /** * i40e_client_virtchnl_send - TBD * @ldev: pointer to L2 context * @client: Client pointer * @vf_id: absolute VF identifier * @msg: message buffer * @len: length of message buffer * * Return 0 on success or < 0 on error **/ static int i40e_client_virtchnl_send(struct i40e_info *ldev, struct i40e_client *client, u32 vf_id, u8 *msg, u16 len) { … } /** * i40e_client_setup_qvlist * @ldev: pointer to L2 context. * @client: Client pointer. * @qvlist_info: queue and vector list * * Return 0 on success or < 0 on error **/ static int i40e_client_setup_qvlist(struct i40e_info *ldev, struct i40e_client *client, struct i40e_qvlist_info *qvlist_info) { … } /** * i40e_client_request_reset * @ldev: pointer to L2 context. * @client: Client pointer. * @reset_level: reset level **/ static void i40e_client_request_reset(struct i40e_info *ldev, struct i40e_client *client, u32 reset_level) { … } /** * i40e_client_update_vsi_ctxt * @ldev: pointer to L2 context. * @client: Client pointer. * @is_vf: if this for the VF * @vf_id: if is_vf true this carries the vf_id * @flag: Any device level setting that needs to be done for PE * @valid_flag: Bits in this match up and enable changing of flag bits * * Return 0 on success or < 0 on error **/ static int i40e_client_update_vsi_ctxt(struct i40e_info *ldev, struct i40e_client *client, bool is_vf, u32 vf_id, u32 flag, u32 valid_flag) { … } void i40e_client_device_register(struct i40e_info *ldev, struct i40e_client *client) { … } EXPORT_SYMBOL_GPL(…); void i40e_client_device_unregister(struct i40e_info *ldev) { … } EXPORT_SYMBOL_GPL(…);