#include <linux/bitfield.h>
#include <linux/bsearch.h>
#include <drm/drm_managed.h>
#include <drm/drm_print.h>
#include "abi/guc_actions_sriov_abi.h"
#include "abi/guc_communication_mmio_abi.h"
#include "abi/guc_klvs_abi.h"
#include "abi/guc_relay_actions_abi.h"
#include "regs/xe_gt_regs.h"
#include "regs/xe_gtt_defs.h"
#include "xe_assert.h"
#include "xe_device.h"
#include "xe_ggtt.h"
#include "xe_gt_sriov_printk.h"
#include "xe_gt_sriov_vf.h"
#include "xe_gt_sriov_vf_types.h"
#include "xe_guc.h"
#include "xe_guc_hxg_helpers.h"
#include "xe_guc_relay.h"
#include "xe_mmio.h"
#include "xe_sriov.h"
#include "xe_uc_fw.h"
#include "xe_wopcm.h"
#define make_u64_from_u32(hi, lo) …
static int guc_action_vf_reset(struct xe_guc *guc)
{ … }
static int vf_reset_guc_state(struct xe_gt *gt)
{ … }
static int guc_action_match_version(struct xe_guc *guc,
u32 wanted_branch, u32 wanted_major, u32 wanted_minor,
u32 *branch, u32 *major, u32 *minor, u32 *patch)
{ … }
static void vf_minimum_guc_version(struct xe_gt *gt, u32 *branch, u32 *major, u32 *minor)
{ … }
static void vf_wanted_guc_version(struct xe_gt *gt, u32 *branch, u32 *major, u32 *minor)
{ … }
static int vf_handshake_with_guc(struct xe_gt *gt)
{ … }
int xe_gt_sriov_vf_bootstrap(struct xe_gt *gt)
{ … }
static int guc_action_query_single_klv(struct xe_guc *guc, u32 key,
u32 *value, u32 value_len)
{ … }
static int guc_action_query_single_klv32(struct xe_guc *guc, u32 key, u32 *value32)
{ … }
static int guc_action_query_single_klv64(struct xe_guc *guc, u32 key, u64 *value64)
{ … }
static bool has_gmdid(struct xe_device *xe)
{ … }
u32 xe_gt_sriov_vf_gmdid(struct xe_gt *gt)
{ … }
static int vf_get_ggtt_info(struct xe_gt *gt)
{ … }
static int vf_get_lmem_info(struct xe_gt *gt)
{ … }
static int vf_get_submission_cfg(struct xe_gt *gt)
{ … }
static void vf_cache_gmdid(struct xe_gt *gt)
{ … }
int xe_gt_sriov_vf_query_config(struct xe_gt *gt)
{ … }
u16 xe_gt_sriov_vf_guc_ids(struct xe_gt *gt)
{ … }
u64 xe_gt_sriov_vf_lmem(struct xe_gt *gt)
{ … }
static int vf_balloon_ggtt(struct xe_gt *gt)
{ … }
static void deballoon_ggtt(struct drm_device *drm, void *arg)
{ … }
int xe_gt_sriov_vf_prepare_ggtt(struct xe_gt *gt)
{ … }
static int relay_action_handshake(struct xe_gt *gt, u32 *major, u32 *minor)
{ … }
static void vf_connect_pf(struct xe_gt *gt, u16 major, u16 minor)
{ … }
static void vf_disconnect_pf(struct xe_gt *gt)
{ … }
static int vf_handshake_with_pf(struct xe_gt *gt)
{ … }
int xe_gt_sriov_vf_connect(struct xe_gt *gt)
{ … }
static bool vf_is_negotiated(struct xe_gt *gt, u16 major, u16 minor)
{ … }
static int vf_prepare_runtime_info(struct xe_gt *gt, unsigned int num_regs)
{ … }
static int vf_query_runtime_info(struct xe_gt *gt)
{ … }
static void vf_show_runtime_info(struct xe_gt *gt)
{ … }
int xe_gt_sriov_vf_query_runtime(struct xe_gt *gt)
{ … }
static int vf_runtime_reg_cmp(const void *a, const void *b)
{ … }
static struct vf_runtime_reg *vf_lookup_reg(struct xe_gt *gt, u32 addr)
{ … }
u32 xe_gt_sriov_vf_read32(struct xe_gt *gt, struct xe_reg reg)
{ … }
void xe_gt_sriov_vf_print_config(struct xe_gt *gt, struct drm_printer *p)
{ … }
void xe_gt_sriov_vf_print_runtime(struct xe_gt *gt, struct drm_printer *p)
{ … }
void xe_gt_sriov_vf_print_version(struct xe_gt *gt, struct drm_printer *p)
{ … }