Drivers: hv: VMBus protocol version 6.0
The confidential VMBus is supported starting from the protocol version 6.0 onwards. Provide the required definitions. No functional changes. Signed-off-by: Roman Kisel <romank@linux.microsoft.com> Reviewed-by: Alok Tiwari <alok.a.tiwari@oracle.com> Reviewed-by: Michael Kelley <mhklinux@outlook.com> Signed-off-by: Wei Liu <wei.liu@kernel.org>master
parent
92c7053b44
commit
6802d8af47
|
|
@ -333,6 +333,8 @@ extern const struct vmbus_channel_message_table_entry
|
|||
|
||||
/* General vmbus interface */
|
||||
|
||||
bool vmbus_is_confidential(void);
|
||||
|
||||
struct hv_device *vmbus_device_create(const guid_t *type,
|
||||
const guid_t *instance,
|
||||
struct vmbus_channel *channel);
|
||||
|
|
|
|||
|
|
@ -56,6 +56,18 @@ static long __percpu *vmbus_evt;
|
|||
int vmbus_irq;
|
||||
int vmbus_interrupt;
|
||||
|
||||
/*
|
||||
* If the Confidential VMBus is used, the data on the "wire" is not
|
||||
* visible to either the host or the hypervisor.
|
||||
*/
|
||||
static bool is_confidential;
|
||||
|
||||
bool vmbus_is_confidential(void)
|
||||
{
|
||||
return is_confidential;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vmbus_is_confidential);
|
||||
|
||||
/*
|
||||
* The panic notifier below is responsible solely for unloading the
|
||||
* vmbus connection, which is necessary in a panic event.
|
||||
|
|
|
|||
|
|
@ -260,6 +260,7 @@ union hv_hypervisor_version_info {
|
|||
#define HYPERV_CPUID_VIRT_STACK_PROPERTIES 0x40000082
|
||||
/* Support for the extended IOAPIC RTE format */
|
||||
#define HYPERV_VS_PROPERTIES_EAX_EXTENDED_IOAPIC_RTE BIT(2)
|
||||
#define HYPERV_VS_PROPERTIES_EAX_CONFIDENTIAL_VMBUS_AVAILABLE BIT(3)
|
||||
|
||||
#define HYPERV_HYPERVISOR_PRESENT_BIT 0x80000000
|
||||
#define HYPERV_CPUID_MIN 0x40000005
|
||||
|
|
|
|||
|
|
@ -265,16 +265,18 @@ static inline u32 hv_get_avail_to_write_percent(
|
|||
* Linux kernel.
|
||||
*/
|
||||
|
||||
#define VERSION_WS2008 ((0 << 16) | (13))
|
||||
#define VERSION_WIN7 ((1 << 16) | (1))
|
||||
#define VERSION_WIN8 ((2 << 16) | (4))
|
||||
#define VERSION_WIN8_1 ((3 << 16) | (0))
|
||||
#define VERSION_WIN10 ((4 << 16) | (0))
|
||||
#define VERSION_WIN10_V4_1 ((4 << 16) | (1))
|
||||
#define VERSION_WIN10_V5 ((5 << 16) | (0))
|
||||
#define VERSION_WIN10_V5_1 ((5 << 16) | (1))
|
||||
#define VERSION_WIN10_V5_2 ((5 << 16) | (2))
|
||||
#define VERSION_WIN10_V5_3 ((5 << 16) | (3))
|
||||
#define VMBUS_MAKE_VERSION(MAJ, MIN) ((((u32)MAJ) << 16) | (MIN))
|
||||
#define VERSION_WS2008 VMBUS_MAKE_VERSION(0, 13)
|
||||
#define VERSION_WIN7 VMBUS_MAKE_VERSION(1, 1)
|
||||
#define VERSION_WIN8 VMBUS_MAKE_VERSION(2, 4)
|
||||
#define VERSION_WIN8_1 VMBUS_MAKE_VERSION(3, 0)
|
||||
#define VERSION_WIN10 VMBUS_MAKE_VERSION(4, 0)
|
||||
#define VERSION_WIN10_V4_1 VMBUS_MAKE_VERSION(4, 1)
|
||||
#define VERSION_WIN10_V5 VMBUS_MAKE_VERSION(5, 0)
|
||||
#define VERSION_WIN10_V5_1 VMBUS_MAKE_VERSION(5, 1)
|
||||
#define VERSION_WIN10_V5_2 VMBUS_MAKE_VERSION(5, 2)
|
||||
#define VERSION_WIN10_V5_3 VMBUS_MAKE_VERSION(5, 3)
|
||||
#define VERSION_WIN10_V6_0 VMBUS_MAKE_VERSION(6, 0)
|
||||
|
||||
/* Make maximum size of pipe payload of 16K */
|
||||
#define MAX_PIPE_DATA_PAYLOAD (sizeof(u8) * 16384)
|
||||
|
|
@ -335,14 +337,22 @@ struct vmbus_channel_offer {
|
|||
} __packed;
|
||||
|
||||
/* Server Flags */
|
||||
#define VMBUS_CHANNEL_ENUMERATE_DEVICE_INTERFACE 1
|
||||
#define VMBUS_CHANNEL_SERVER_SUPPORTS_TRANSFER_PAGES 2
|
||||
#define VMBUS_CHANNEL_SERVER_SUPPORTS_GPADLS 4
|
||||
#define VMBUS_CHANNEL_NAMED_PIPE_MODE 0x10
|
||||
#define VMBUS_CHANNEL_LOOPBACK_OFFER 0x100
|
||||
#define VMBUS_CHANNEL_PARENT_OFFER 0x200
|
||||
#define VMBUS_CHANNEL_REQUEST_MONITORED_NOTIFICATION 0x400
|
||||
#define VMBUS_CHANNEL_TLNPI_PROVIDER_OFFER 0x2000
|
||||
#define VMBUS_CHANNEL_ENUMERATE_DEVICE_INTERFACE 0x0001
|
||||
/*
|
||||
* This flag indicates that the channel is offered by the paravisor, and must
|
||||
* use encrypted memory for the channel ring buffer.
|
||||
*/
|
||||
#define VMBUS_CHANNEL_CONFIDENTIAL_RING_BUFFER 0x0002
|
||||
/*
|
||||
* This flag indicates that the channel is offered by the paravisor, and must
|
||||
* use encrypted memory for GPA direct packets and additional GPADLs.
|
||||
*/
|
||||
#define VMBUS_CHANNEL_CONFIDENTIAL_EXTERNAL_MEMORY 0x0004
|
||||
#define VMBUS_CHANNEL_NAMED_PIPE_MODE 0x0010
|
||||
#define VMBUS_CHANNEL_LOOPBACK_OFFER 0x0100
|
||||
#define VMBUS_CHANNEL_PARENT_OFFER 0x0200
|
||||
#define VMBUS_CHANNEL_REQUEST_MONITORED_NOTIFICATION 0x0400
|
||||
#define VMBUS_CHANNEL_TLNPI_PROVIDER_OFFER 0x2000
|
||||
|
||||
struct vmpacket_descriptor {
|
||||
u16 type;
|
||||
|
|
@ -621,6 +631,12 @@ struct vmbus_channel_relid_released {
|
|||
u32 child_relid;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Used by the paravisor only, means that the encrypted ring buffers and
|
||||
* the encrypted external memory are supported
|
||||
*/
|
||||
#define VMBUS_FEATURE_FLAG_CONFIDENTIAL_CHANNELS 0x10
|
||||
|
||||
struct vmbus_channel_initiate_contact {
|
||||
struct vmbus_channel_message_header header;
|
||||
u32 vmbus_version_requested;
|
||||
|
|
@ -630,7 +646,8 @@ struct vmbus_channel_initiate_contact {
|
|||
struct {
|
||||
u8 msg_sint;
|
||||
u8 msg_vtl;
|
||||
u8 reserved[6];
|
||||
u8 reserved[2];
|
||||
u32 feature_flags; /* VMBus version 6.0 */
|
||||
};
|
||||
};
|
||||
u64 monitor_page1;
|
||||
|
|
@ -1003,6 +1020,10 @@ struct vmbus_channel {
|
|||
|
||||
/* boolean to control visibility of sysfs for ring buffer */
|
||||
bool ring_sysfs_visible;
|
||||
/* The ring buffer is encrypted */
|
||||
bool co_ring_buffer;
|
||||
/* The external memory is encrypted */
|
||||
bool co_external_memory;
|
||||
};
|
||||
|
||||
#define lock_requestor(channel, flags) \
|
||||
|
|
@ -1027,6 +1048,16 @@ u64 vmbus_request_addr_match(struct vmbus_channel *channel, u64 trans_id,
|
|||
u64 rqst_addr);
|
||||
u64 vmbus_request_addr(struct vmbus_channel *channel, u64 trans_id);
|
||||
|
||||
static inline bool is_co_ring_buffer(const struct vmbus_channel_offer_channel *o)
|
||||
{
|
||||
return !!(o->offer.chn_flags & VMBUS_CHANNEL_CONFIDENTIAL_RING_BUFFER);
|
||||
}
|
||||
|
||||
static inline bool is_co_external_memory(const struct vmbus_channel_offer_channel *o)
|
||||
{
|
||||
return !!(o->offer.chn_flags & VMBUS_CHANNEL_CONFIDENTIAL_EXTERNAL_MEMORY);
|
||||
}
|
||||
|
||||
static inline bool is_hvsock_offer(const struct vmbus_channel_offer_channel *o)
|
||||
{
|
||||
return !!(o->offer.chn_flags & VMBUS_CHANNEL_TLNPI_PROVIDER_OFFER);
|
||||
|
|
|
|||
Loading…
Reference in New Issue