/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
|
/* Copyright (c) 2019 Mellanox Technologies. */
|
|
#ifndef __LIB_HV_VHCA_H__
|
#define __LIB_HV_VHCA_H__
|
|
#include "en.h"
|
#include "lib/hv.h"
|
|
struct mlx5_hv_vhca_agent;
|
struct mlx5_hv_vhca;
|
struct mlx5_hv_vhca_control_block;
|
|
enum mlx5_hv_vhca_agent_type {
|
MLX5_HV_VHCA_AGENT_CONTROL = 0,
|
MLX5_HV_VHCA_AGENT_STATS = 1,
|
MLX5_HV_VHCA_AGENT_MAX = 32,
|
};
|
|
#if IS_ENABLED(CONFIG_PCI_HYPERV_INTERFACE)
|
|
struct mlx5_hv_vhca_control_block {
|
u32 capabilities;
|
u32 control;
|
u16 command;
|
u16 command_ack;
|
u16 version;
|
u16 rings;
|
u32 reserved1[28];
|
};
|
|
struct mlx5_hv_vhca *mlx5_hv_vhca_create(struct mlx5_core_dev *dev);
|
void mlx5_hv_vhca_destroy(struct mlx5_hv_vhca *hv_vhca);
|
int mlx5_hv_vhca_init(struct mlx5_hv_vhca *hv_vhca);
|
void mlx5_hv_vhca_cleanup(struct mlx5_hv_vhca *hv_vhca);
|
void mlx5_hv_vhca_invalidate(void *context, u64 block_mask);
|
|
struct mlx5_hv_vhca_agent *
|
mlx5_hv_vhca_agent_create(struct mlx5_hv_vhca *hv_vhca,
|
enum mlx5_hv_vhca_agent_type type,
|
void (*control)(struct mlx5_hv_vhca_agent*,
|
struct mlx5_hv_vhca_control_block *block),
|
void (*invalidate)(struct mlx5_hv_vhca_agent*,
|
u64 block_mask),
|
void (*cleanup)(struct mlx5_hv_vhca_agent *agent),
|
void *context);
|
|
void mlx5_hv_vhca_agent_destroy(struct mlx5_hv_vhca_agent *agent);
|
int mlx5_hv_vhca_agent_write(struct mlx5_hv_vhca_agent *agent,
|
void *buf, int len);
|
void *mlx5_hv_vhca_agent_priv(struct mlx5_hv_vhca_agent *agent);
|
|
#else
|
|
static inline struct mlx5_hv_vhca *
|
mlx5_hv_vhca_create(struct mlx5_core_dev *dev)
|
{
|
return NULL;
|
}
|
|
static inline void mlx5_hv_vhca_destroy(struct mlx5_hv_vhca *hv_vhca)
|
{
|
}
|
|
static inline int mlx5_hv_vhca_init(struct mlx5_hv_vhca *hv_vhca)
|
{
|
return 0;
|
}
|
|
static inline void mlx5_hv_vhca_cleanup(struct mlx5_hv_vhca *hv_vhca)
|
{
|
}
|
|
static inline void mlx5_hv_vhca_invalidate(void *context,
|
u64 block_mask)
|
{
|
}
|
|
static inline struct mlx5_hv_vhca_agent *
|
mlx5_hv_vhca_agent_create(struct mlx5_hv_vhca *hv_vhca,
|
enum mlx5_hv_vhca_agent_type type,
|
void (*control)(struct mlx5_hv_vhca_agent*,
|
struct mlx5_hv_vhca_control_block *block),
|
void (*invalidate)(struct mlx5_hv_vhca_agent*,
|
u64 block_mask),
|
void (*cleanup)(struct mlx5_hv_vhca_agent *agent),
|
void *context)
|
{
|
return NULL;
|
}
|
|
static inline void mlx5_hv_vhca_agent_destroy(struct mlx5_hv_vhca_agent *agent)
|
{
|
}
|
|
static inline int
|
mlx5_hv_vhca_write_agent(struct mlx5_hv_vhca_agent *agent,
|
void *buf, int len)
|
{
|
return 0;
|
}
|
#endif
|
|
#endif /* __LIB_HV_VHCA_H__ */
|