hyperv: Nuke unused stuffs
MFC after: 1 week Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D6913
This commit is contained in:
parent
423e60a9f6
commit
bbc8a9fd63
@ -179,8 +179,6 @@ typedef struct hv_vmbus_channel_offer {
|
||||
|
||||
} __packed hv_vmbus_channel_offer;
|
||||
|
||||
typedef uint32_t hv_gpadl_handle;
|
||||
|
||||
typedef struct {
|
||||
uint16_t type;
|
||||
uint16_t data_offset8;
|
||||
@ -351,14 +349,6 @@ typedef struct {
|
||||
uint32_t version;
|
||||
} __packed hv_vmbus_channel_query_vmbus_version;
|
||||
|
||||
/*
|
||||
* VMBus Version Supported parameters
|
||||
*/
|
||||
typedef struct {
|
||||
hv_vmbus_channel_msg_header header;
|
||||
hv_bool_uint8_t version_supported;
|
||||
} __packed hv_vmbus_channel_version_supported;
|
||||
|
||||
/*
|
||||
* Channel Offer parameters
|
||||
*/
|
||||
@ -397,171 +387,13 @@ typedef struct
|
||||
uint32_t child_rel_id;
|
||||
} __packed hv_vmbus_channel_rescind_offer;
|
||||
|
||||
|
||||
/*
|
||||
* Request Offer -- no parameters, SynIC message contains the partition ID
|
||||
*
|
||||
* Set Snoop -- no parameters, SynIC message contains the partition ID
|
||||
*
|
||||
* Clear Snoop -- no parameters, SynIC message contains the partition ID
|
||||
*
|
||||
* All Offers Delivered -- no parameters, SynIC message contains the
|
||||
* partition ID
|
||||
*
|
||||
* Flush Client -- no parameters, SynIC message contains the partition ID
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Open Channel parameters
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
hv_vmbus_channel_msg_header header;
|
||||
|
||||
/*
|
||||
* Identifies the specific VMBus channel that is being opened.
|
||||
*/
|
||||
uint32_t child_rel_id;
|
||||
|
||||
/*
|
||||
* ID making a particular open request at a channel offer unique.
|
||||
*/
|
||||
uint32_t open_id;
|
||||
|
||||
/*
|
||||
* GPADL for the channel's ring buffer.
|
||||
*/
|
||||
hv_gpadl_handle ring_buffer_gpadl_handle;
|
||||
|
||||
/*
|
||||
* Before win8, all incoming channel interrupts are only
|
||||
* delivered on cpu 0. Setting this value to 0 would
|
||||
* preserve the earlier behavior.
|
||||
*/
|
||||
uint32_t target_vcpu;
|
||||
|
||||
/*
|
||||
* The upstream ring buffer begins at offset zero in the memory described
|
||||
* by ring_buffer_gpadl_handle. The downstream ring buffer follows it at
|
||||
* this offset (in pages).
|
||||
*/
|
||||
uint32_t downstream_ring_buffer_page_offset;
|
||||
|
||||
/*
|
||||
* User-specific data to be passed along to the server endpoint.
|
||||
*/
|
||||
uint8_t user_data[HV_MAX_USER_DEFINED_BYTES];
|
||||
|
||||
} __packed hv_vmbus_channel_open_channel;
|
||||
|
||||
typedef uint32_t hv_nt_status;
|
||||
|
||||
/*
|
||||
* Open Channel Result parameters
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
hv_vmbus_channel_msg_header header;
|
||||
uint32_t child_rel_id;
|
||||
uint32_t open_id;
|
||||
hv_nt_status status;
|
||||
} __packed hv_vmbus_channel_open_result;
|
||||
|
||||
/*
|
||||
* Close channel parameters
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
hv_vmbus_channel_msg_header header;
|
||||
uint32_t child_rel_id;
|
||||
} __packed hv_vmbus_channel_close_channel;
|
||||
|
||||
/*
|
||||
* Channel Message GPADL
|
||||
*/
|
||||
#define HV_GPADL_TYPE_RING_BUFFER 1
|
||||
#define HV_GPADL_TYPE_SERVER_SAVE_AREA 2
|
||||
#define HV_GPADL_TYPE_TRANSACTION 8
|
||||
|
||||
/*
|
||||
* The number of PFNs in a GPADL message is defined by the number of pages
|
||||
* that would be spanned by byte_count and byte_offset. If the implied number
|
||||
* of PFNs won't fit in this packet, there will be a follow-up packet that
|
||||
* contains more
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
hv_vmbus_channel_msg_header header;
|
||||
uint32_t child_rel_id;
|
||||
uint32_t gpadl;
|
||||
uint16_t range_buf_len;
|
||||
uint16_t range_count;
|
||||
hv_gpa_range range[0];
|
||||
} __packed hv_vmbus_channel_gpadl_header;
|
||||
|
||||
/*
|
||||
* This is the follow-up packet that contains more PFNs
|
||||
*/
|
||||
typedef struct {
|
||||
hv_vmbus_channel_msg_header header;
|
||||
uint32_t message_number;
|
||||
uint32_t gpadl;
|
||||
uint64_t pfn[0];
|
||||
} __packed hv_vmbus_channel_gpadl_body;
|
||||
|
||||
typedef struct {
|
||||
hv_vmbus_channel_msg_header header;
|
||||
uint32_t child_rel_id;
|
||||
uint32_t gpadl;
|
||||
uint32_t creation_status;
|
||||
} __packed hv_vmbus_channel_gpadl_created;
|
||||
|
||||
typedef struct {
|
||||
hv_vmbus_channel_msg_header header;
|
||||
uint32_t child_rel_id;
|
||||
uint32_t gpadl;
|
||||
} __packed hv_vmbus_channel_gpadl_teardown;
|
||||
|
||||
typedef struct {
|
||||
hv_vmbus_channel_msg_header header;
|
||||
uint32_t gpadl;
|
||||
} __packed hv_vmbus_channel_gpadl_torndown;
|
||||
|
||||
typedef struct {
|
||||
hv_vmbus_channel_msg_header header;
|
||||
uint32_t child_rel_id;
|
||||
} __packed hv_vmbus_channel_relid_released;
|
||||
|
||||
typedef hv_vmbus_channel_msg_header hv_vmbus_channel_unload;
|
||||
|
||||
#define HW_MACADDR_LEN 6
|
||||
|
||||
/*
|
||||
* Fixme: Added to quiet "typeof" errors involving hv_vmbus.h when
|
||||
* the including C file was compiled with "-std=c99".
|
||||
*/
|
||||
#ifndef typeof
|
||||
#define typeof __typeof
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL (void *)0
|
||||
#endif
|
||||
|
||||
typedef void *hv_vmbus_handle;
|
||||
|
||||
#ifndef CONTAINING_RECORD
|
||||
#define CONTAINING_RECORD(address, type, field) ((type *)( \
|
||||
(uint8_t *)(address) - \
|
||||
(uint8_t *)(&((type *)0)->field)))
|
||||
#endif /* CONTAINING_RECORD */
|
||||
|
||||
|
||||
#define container_of(ptr, type, member) ({ \
|
||||
__typeof__( ((type *)0)->member ) *__mptr = (ptr); \
|
||||
(type *)( (char *)__mptr - offsetof(type,member) );})
|
||||
|
||||
enum {
|
||||
HV_VMBUS_IVAR_TYPE,
|
||||
HV_VMBUS_IVAR_INSTANCE,
|
||||
|
@ -70,10 +70,6 @@ hv_vmbus_connect(struct vmbus_softc *sc)
|
||||
*/
|
||||
hv_vmbus_g_connection.connect_state = HV_CONNECTING;
|
||||
|
||||
TAILQ_INIT(&hv_vmbus_g_connection.channel_msg_anchor);
|
||||
mtx_init(&hv_vmbus_g_connection.channel_msg_lock, "vmbus channel msg",
|
||||
NULL, MTX_DEF);
|
||||
|
||||
TAILQ_INIT(&hv_vmbus_g_connection.channel_anchor);
|
||||
mtx_init(&hv_vmbus_g_connection.channel_lock, "vmbus channel",
|
||||
NULL, MTX_DEF);
|
||||
@ -93,8 +89,6 @@ int
|
||||
hv_vmbus_disconnect(void)
|
||||
{
|
||||
|
||||
mtx_destroy(&hv_vmbus_g_connection.channel_msg_lock);
|
||||
|
||||
free(hv_vmbus_g_connection.channels, M_DEVBUF);
|
||||
hv_vmbus_g_connection.connect_state = HV_DISCONNECTED;
|
||||
|
||||
@ -164,40 +158,6 @@ vmbus_event_proc_compat(struct vmbus_softc *sc, int cpu)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a msg on the vmbus's message connection
|
||||
*/
|
||||
int hv_vmbus_post_message(void *buffer, size_t bufferLen)
|
||||
{
|
||||
hv_vmbus_connection_id connId;
|
||||
sbintime_t time = SBT_1MS;
|
||||
int retries;
|
||||
int ret;
|
||||
|
||||
connId.as_uint32_t = 0;
|
||||
connId.u.id = HV_VMBUS_MESSAGE_CONNECTION_ID;
|
||||
|
||||
/*
|
||||
* We retry to cope with transient failures caused by host side's
|
||||
* insufficient resources. 20 times should suffice in practice.
|
||||
*/
|
||||
for (retries = 0; retries < 20; retries++) {
|
||||
ret = hv_vmbus_post_msg_via_msg_ipc(connId,
|
||||
HYPERV_MSGTYPE_CHANNEL, buffer, bufferLen);
|
||||
if (ret == HV_STATUS_SUCCESS)
|
||||
return (0);
|
||||
|
||||
pause_sbt("pstmsg", time, 0, C_HARDCLOCK);
|
||||
if (time < SBT_1S * 2)
|
||||
time *= 2;
|
||||
}
|
||||
|
||||
KASSERT(ret == HV_STATUS_SUCCESS,
|
||||
("Error VMBUS: Message Post Failed, ret=%d\n", ret));
|
||||
|
||||
return (EAGAIN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send an event notification to the parent
|
||||
*/
|
||||
|
@ -90,47 +90,6 @@ typedef struct {
|
||||
hv_vmbus_ring_buffer_debug_info outbound;
|
||||
} hv_vmbus_channel_debug_info;
|
||||
|
||||
typedef union {
|
||||
hv_vmbus_channel_version_supported version_supported;
|
||||
hv_vmbus_channel_open_result open_result;
|
||||
hv_vmbus_channel_gpadl_torndown gpadl_torndown;
|
||||
hv_vmbus_channel_gpadl_created gpadl_created;
|
||||
} hv_vmbus_channel_msg_response;
|
||||
|
||||
/*
|
||||
* Represents each channel msg on the vmbus connection
|
||||
* This is a variable-size data structure depending on
|
||||
* the msg type itself
|
||||
*/
|
||||
typedef struct hv_vmbus_channel_msg_info {
|
||||
/*
|
||||
* Bookkeeping stuff
|
||||
*/
|
||||
TAILQ_ENTRY(hv_vmbus_channel_msg_info) msg_list_entry;
|
||||
/*
|
||||
* So far, this is only used to handle
|
||||
* gpadl body message
|
||||
*/
|
||||
TAILQ_HEAD(, hv_vmbus_channel_msg_info) sub_msg_list_anchor;
|
||||
/*
|
||||
* Synchronize the request/response if
|
||||
* needed.
|
||||
* KYS: Use a semaphore for now.
|
||||
* Not perf critical.
|
||||
*/
|
||||
struct sema wait_sema;
|
||||
hv_vmbus_channel_msg_response response;
|
||||
uint32_t message_size;
|
||||
/**
|
||||
* The channel message that goes out on
|
||||
* the "wire". It will contain at
|
||||
* minimum the
|
||||
* hv_vmbus_channel_msg_header
|
||||
* header.
|
||||
*/
|
||||
unsigned char msg[0];
|
||||
} hv_vmbus_channel_msg_info;
|
||||
|
||||
/*
|
||||
* The format must be the same as hv_vm_data_gpa_direct
|
||||
*/
|
||||
@ -244,8 +203,6 @@ typedef struct {
|
||||
hv_vmbus_connect_state connect_state;
|
||||
uint32_t next_gpadl_handle;
|
||||
|
||||
TAILQ_HEAD(, hv_vmbus_channel_msg_info) channel_msg_anchor;
|
||||
struct mtx channel_msg_lock;
|
||||
/**
|
||||
* List of primary channels. Sub channels will be linked
|
||||
* under their primary channel.
|
||||
@ -320,17 +277,6 @@ typedef struct {
|
||||
uint8_t rsvd_z4[1984];
|
||||
} hv_vmbus_monitor_page;
|
||||
|
||||
/*
|
||||
* Define the hv_vmbus_post_message hypercall input structure
|
||||
*/
|
||||
typedef struct {
|
||||
hv_vmbus_connection_id connection_id;
|
||||
uint32_t reserved;
|
||||
hv_vmbus_msg_type message_type;
|
||||
uint32_t payload_size;
|
||||
uint64_t payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT];
|
||||
} hv_vmbus_input_post_message;
|
||||
|
||||
/*
|
||||
* Declare the various hypercall operations
|
||||
*/
|
||||
@ -398,12 +344,6 @@ uint32_t hv_ring_buffer_read_end(
|
||||
void hv_vmbus_free_vmbus_channel(hv_vmbus_channel *channel);
|
||||
void hv_vmbus_release_unattached_channels(void);
|
||||
|
||||
uint16_t hv_vmbus_post_msg_via_msg_ipc(
|
||||
hv_vmbus_connection_id connection_id,
|
||||
hv_vmbus_msg_type message_type,
|
||||
void *payload,
|
||||
size_t payload_size);
|
||||
|
||||
uint16_t hv_vmbus_signal_event(void *con_id);
|
||||
|
||||
struct hv_device* hv_vmbus_child_device_create(
|
||||
@ -423,7 +363,6 @@ int hv_vmbus_child_device_unregister(
|
||||
*/
|
||||
int hv_vmbus_connect(struct vmbus_softc *);
|
||||
int hv_vmbus_disconnect(void);
|
||||
int hv_vmbus_post_message(void *buffer, size_t buf_size);
|
||||
int hv_vmbus_set_event(hv_vmbus_channel *channel);
|
||||
|
||||
#endif /* __HYPERV_PRIV_H__ */
|
||||
|
@ -125,51 +125,6 @@ hypercall_post_message(bus_addr_t msg_paddr)
|
||||
HYPERCALL_POST_MESSAGE, msg_paddr, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Post a message using the hypervisor message IPC.
|
||||
* (This involves a hypercall.)
|
||||
*/
|
||||
hv_vmbus_status
|
||||
hv_vmbus_post_msg_via_msg_ipc(
|
||||
hv_vmbus_connection_id connection_id,
|
||||
hv_vmbus_msg_type message_type,
|
||||
void* payload,
|
||||
size_t payload_size)
|
||||
{
|
||||
struct alignedinput {
|
||||
uint64_t alignment8;
|
||||
hv_vmbus_input_post_message msg;
|
||||
};
|
||||
|
||||
hv_vmbus_input_post_message* aligned_msg;
|
||||
hv_vmbus_status status;
|
||||
size_t addr;
|
||||
|
||||
if (payload_size > HV_MESSAGE_PAYLOAD_BYTE_COUNT)
|
||||
return (EMSGSIZE);
|
||||
|
||||
addr = (size_t) malloc(sizeof(struct alignedinput), M_DEVBUF,
|
||||
M_ZERO | M_NOWAIT);
|
||||
KASSERT(addr != 0,
|
||||
("Error VMBUS: malloc failed to allocate message buffer!"));
|
||||
if (addr == 0)
|
||||
return (ENOMEM);
|
||||
|
||||
aligned_msg = (hv_vmbus_input_post_message*)
|
||||
(HV_ALIGN_UP(addr, HV_HYPERCALL_PARAM_ALIGN));
|
||||
|
||||
aligned_msg->connection_id = connection_id;
|
||||
aligned_msg->message_type = message_type;
|
||||
aligned_msg->payload_size = payload_size;
|
||||
memcpy((void*) aligned_msg->payload, payload, payload_size);
|
||||
|
||||
status = hv_vmbus_do_hypercall(
|
||||
HV_CALL_POST_MESSAGE, aligned_msg, 0) & 0xFFFF;
|
||||
|
||||
free((void *) addr, M_DEVBUF);
|
||||
return (status);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Signal an event on the specified connection using the hypervisor
|
||||
* event IPC. (This involves a hypercall.)
|
||||
|
Loading…
x
Reference in New Issue
Block a user