mirror of
https://github.com/hermitcore/libhermit.git
synced 2025-03-09 00:00:03 +01:00
Finished code generator including clean up and documentation.
This commit is contained in:
parent
91ce18c6ec
commit
7082c820e5
7 changed files with 1499 additions and 121 deletions
96
tools/ibv_code_generator/GEN_include_hermit_stddef.h
Normal file
96
tools/ibv_code_generator/GEN_include_hermit_stddef.h
Normal file
|
@ -0,0 +1,96 @@
|
|||
|
||||
#define UHYVE_PORT_IBV_WC_STATUS_STR 0x510,
|
||||
#define UHYVE_PORT_IBV_RATE_TO_MULT 0x511,
|
||||
#define UHYVE_PORT_MULT_TO_IBV_RATE 0x512,
|
||||
#define UHYVE_PORT_IBV_RATE_TO_MBPS 0x513,
|
||||
#define UHYVE_PORT_MBPS_TO_IBV_RATE 0x514,
|
||||
#define UHYVE_PORT_IBV_CQ_EX_TO_CQ 0x515,
|
||||
#define UHYVE_PORT_IBV_START_POLL 0x516,
|
||||
#define UHYVE_PORT_IBV_NEXT_POLL 0x517,
|
||||
#define UHYVE_PORT_IBV_END_POLL 0x518,
|
||||
#define UHYVE_PORT_IBV_WC_READ_OPCODE 0x519,
|
||||
#define UHYVE_PORT_IBV_WC_READ_VENDOR_ERR 0x51A,
|
||||
#define UHYVE_PORT_IBV_WC_READ_BYTE_LEN 0x51B,
|
||||
#define UHYVE_PORT_IBV_WC_READ_IMM_DATA 0x51C,
|
||||
#define UHYVE_PORT_IBV_WC_READ_INVALIDATED_RKEY 0x51D,
|
||||
#define UHYVE_PORT_IBV_WC_READ_QP_NUM 0x51E,
|
||||
#define UHYVE_PORT_IBV_WC_READ_SRC_QP 0x51F,
|
||||
#define UHYVE_PORT_IBV_WC_READ_WC_FLAGS 0x520,
|
||||
#define UHYVE_PORT_IBV_WC_READ_SLID 0x521,
|
||||
#define UHYVE_PORT_IBV_WC_READ_SL 0x522,
|
||||
#define UHYVE_PORT_IBV_WC_READ_DLID_PATH_BITS 0x523,
|
||||
#define UHYVE_PORT_IBV_WC_READ_COMPLETION_TS 0x524,
|
||||
#define UHYVE_PORT_IBV_WC_READ_CVLAN 0x525,
|
||||
#define UHYVE_PORT_IBV_WC_READ_FLOW_TAG 0x526,
|
||||
#define UHYVE_PORT_IBV_POST_WQ_RECV 0x527,
|
||||
#define UHYVE_PORT_VERBS_GET_CTX 0x528,
|
||||
#define UHYVE_PORT_IBV_GET_DEVICE_LIST 0x529,
|
||||
#define UHYVE_PORT_IBV_FREE_DEVICE_LIST 0x52A,
|
||||
#define UHYVE_PORT_IBV_GET_DEVICE_NAME 0x52B,
|
||||
#define UHYVE_PORT_IBV_GET_DEVICE_GUID 0x52C,
|
||||
#define UHYVE_PORT_IBV_OPEN_DEVICE 0x52D,
|
||||
#define UHYVE_PORT_IBV_CLOSE_DEVICE 0x52E,
|
||||
#define UHYVE_PORT_IBV_GET_ASYNC_EVENT 0x52F,
|
||||
#define UHYVE_PORT_IBV_ACK_ASYNC_EVENT 0x530,
|
||||
#define UHYVE_PORT_IBV_QUERY_DEVICE 0x531,
|
||||
#define UHYVE_PORT_IBV_QUERY_PORT 0x532,
|
||||
#define UHYVE_PORT____IBV_QUERY_PORT 0x533,
|
||||
#define UHYVE_PORT_IBV_QUERY_GID 0x534,
|
||||
#define UHYVE_PORT_IBV_QUERY_PKEY 0x535,
|
||||
#define UHYVE_PORT_IBV_ALLOC_PD 0x536,
|
||||
#define UHYVE_PORT_IBV_DEALLOC_PD 0x537,
|
||||
#define UHYVE_PORT_IBV_CREATE_FLOW 0x538,
|
||||
#define UHYVE_PORT_IBV_DESTROY_FLOW 0x539,
|
||||
#define UHYVE_PORT_IBV_OPEN_XRCD 0x53A,
|
||||
#define UHYVE_PORT_IBV_CLOSE_XRCD 0x53B,
|
||||
#define UHYVE_PORT_IBV_REG_MR 0x53C,
|
||||
#define UHYVE_PORT_IBV_REREG_MR 0x53D,
|
||||
#define UHYVE_PORT_IBV_DEREG_MR 0x53E,
|
||||
#define UHYVE_PORT_IBV_ALLOC_MW 0x53F,
|
||||
#define UHYVE_PORT_IBV_DEALLOC_MW 0x540,
|
||||
#define UHYVE_PORT_IBV_INC_RKEY 0x541,
|
||||
#define UHYVE_PORT_IBV_BIND_MW 0x542,
|
||||
#define UHYVE_PORT_IBV_CREATE_COMP_CHANNEL 0x543,
|
||||
#define UHYVE_PORT_IBV_DESTROY_COMP_CHANNEL 0x544,
|
||||
#define UHYVE_PORT_IBV_CREATE_CQ 0x545,
|
||||
#define UHYVE_PORT_IBV_CREATE_CQ_EX 0x546,
|
||||
#define UHYVE_PORT_IBV_RESIZE_CQ 0x547,
|
||||
#define UHYVE_PORT_IBV_DESTROY_CQ 0x548,
|
||||
#define UHYVE_PORT_IBV_GET_CQ_EVENT 0x549,
|
||||
#define UHYVE_PORT_IBV_ACK_CQ_EVENTS 0x54A,
|
||||
#define UHYVE_PORT_IBV_POLL_CQ 0x54B,
|
||||
#define UHYVE_PORT_IBV_REQ_NOTIFY_CQ 0x54C,
|
||||
#define UHYVE_PORT_IBV_CREATE_SRQ 0x54D,
|
||||
#define UHYVE_PORT_IBV_CREATE_SRQ_EX 0x54E,
|
||||
#define UHYVE_PORT_IBV_MODIFY_SRQ 0x54F,
|
||||
#define UHYVE_PORT_IBV_QUERY_SRQ 0x550,
|
||||
#define UHYVE_PORT_IBV_GET_SRQ_NUM 0x551,
|
||||
#define UHYVE_PORT_IBV_DESTROY_SRQ 0x552,
|
||||
#define UHYVE_PORT_IBV_POST_SRQ_RECV 0x553,
|
||||
#define UHYVE_PORT_IBV_CREATE_QP 0x554,
|
||||
#define UHYVE_PORT_IBV_CREATE_QP_EX 0x555,
|
||||
#define UHYVE_PORT_IBV_QUERY_RT_VALUES_EX 0x556,
|
||||
#define UHYVE_PORT_IBV_QUERY_DEVICE_EX 0x557,
|
||||
#define UHYVE_PORT_IBV_OPEN_QP 0x558,
|
||||
#define UHYVE_PORT_IBV_MODIFY_QP 0x559,
|
||||
#define UHYVE_PORT_IBV_QUERY_QP 0x55A,
|
||||
#define UHYVE_PORT_IBV_DESTROY_QP 0x55B,
|
||||
#define UHYVE_PORT_IBV_CREATE_WQ 0x55C,
|
||||
#define UHYVE_PORT_IBV_MODIFY_WQ 0x55D,
|
||||
#define UHYVE_PORT_IBV_DESTROY_WQ 0x55E,
|
||||
#define UHYVE_PORT_IBV_CREATE_RWQ_IND_TABLE 0x55F,
|
||||
#define UHYVE_PORT_IBV_DESTROY_RWQ_IND_TABLE 0x560,
|
||||
#define UHYVE_PORT_IBV_POST_SEND 0x561,
|
||||
#define UHYVE_PORT_IBV_POST_RECV 0x562,
|
||||
#define UHYVE_PORT_IBV_CREATE_AH 0x563,
|
||||
#define UHYVE_PORT_IBV_INIT_AH_FROM_WC 0x564,
|
||||
#define UHYVE_PORT_IBV_CREATE_AH_FROM_WC 0x565,
|
||||
#define UHYVE_PORT_IBV_DESTROY_AH 0x566,
|
||||
#define UHYVE_PORT_IBV_ATTACH_MCAST 0x567,
|
||||
#define UHYVE_PORT_IBV_DETACH_MCAST 0x568,
|
||||
#define UHYVE_PORT_IBV_FORK_INIT 0x569,
|
||||
#define UHYVE_PORT_IBV_NODE_TYPE_STR 0x56A,
|
||||
#define UHYVE_PORT_IBV_PORT_STATE_STR 0x56B,
|
||||
#define UHYVE_PORT_IBV_EVENT_TYPE_STR 0x56C,
|
||||
#define UHYVE_PORT_IBV_RESOLVE_ETH_L2_FROM_GID 0x56D,
|
||||
#define UHYVE_PORT_IBV_IS_QPT_SUPPORTED 0x56E,
|
|
@ -8,7 +8,9 @@ typedef struct {
|
|||
const char * ibv_wc_status_str(enum ibv_wc_status status) {
|
||||
uhyve_ibv_wc_status_str_t uhyve_args;
|
||||
uhyve_args->status = status;
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(const char));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_STATUS_STR, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -26,6 +28,7 @@ typedef struct {
|
|||
int ibv_rate_to_mult(enum ibv_rate rate) {
|
||||
uhyve_ibv_rate_to_mult_t uhyve_args;
|
||||
uhyve_args->rate = rate;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_RATE_TO_MULT, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -43,6 +46,7 @@ typedef struct {
|
|||
enum ibv_rate mult_to_ibv_rate(int mult) {
|
||||
uhyve_mult_to_ibv_rate_t uhyve_args;
|
||||
uhyve_args->mult = mult;
|
||||
|
||||
uhyve_send(UHYVE_PORT_MULT_TO_IBV_RATE, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -60,6 +64,7 @@ typedef struct {
|
|||
int ibv_rate_to_mbps(enum ibv_rate rate) {
|
||||
uhyve_ibv_rate_to_mbps_t uhyve_args;
|
||||
uhyve_args->rate = rate;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_RATE_TO_MBPS, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -77,6 +82,7 @@ typedef struct {
|
|||
enum ibv_rate mbps_to_ibv_rate(int mbps) {
|
||||
uhyve_mbps_to_ibv_rate_t uhyve_args;
|
||||
uhyve_args->mbps = mbps;
|
||||
|
||||
uhyve_send(UHYVE_PORT_MBPS_TO_IBV_RATE, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -94,7 +100,9 @@ typedef struct {
|
|||
struct ibv_cq * ibv_cq_ex_to_cq(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_cq_ex_to_cq_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_cq));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CQ_EX_TO_CQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -114,6 +122,7 @@ int ibv_start_poll(struct ibv_cq_ex * cq, struct ibv_poll_cq_attr * attr) {
|
|||
uhyve_ibv_start_poll_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
uhyve_args->attr = (struct ibv_poll_cq_attr *) virt_to_phys((size_t) attr);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_START_POLL, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -131,6 +140,7 @@ typedef struct {
|
|||
int ibv_next_poll(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_next_poll_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_NEXT_POLL, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -148,6 +158,7 @@ typedef struct {
|
|||
void ibv_end_poll(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_end_poll_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_END_POLL, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -165,6 +176,7 @@ typedef struct {
|
|||
enum ibv_wc_opcode ibv_wc_read_opcode(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_opcode_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_OPCODE, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -182,6 +194,7 @@ typedef struct {
|
|||
uint32_t ibv_wc_read_vendor_err(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_vendor_err_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_VENDOR_ERR, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -199,6 +212,7 @@ typedef struct {
|
|||
uint32_t ibv_wc_read_byte_len(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_byte_len_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_BYTE_LEN, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -216,6 +230,7 @@ typedef struct {
|
|||
__be32 ibv_wc_read_imm_data(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_imm_data_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_IMM_DATA, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -233,6 +248,7 @@ typedef struct {
|
|||
uint32_t ibv_wc_read_invalidated_rkey(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_invalidated_rkey_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_INVALIDATED_RKEY, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -250,6 +266,7 @@ typedef struct {
|
|||
uint32_t ibv_wc_read_qp_num(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_qp_num_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_QP_NUM, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -267,6 +284,7 @@ typedef struct {
|
|||
uint32_t ibv_wc_read_src_qp(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_src_qp_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_SRC_QP, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -284,6 +302,7 @@ typedef struct {
|
|||
int ibv_wc_read_wc_flags(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_wc_flags_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_WC_FLAGS, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -301,6 +320,7 @@ typedef struct {
|
|||
uint32_t ibv_wc_read_slid(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_slid_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_SLID, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -318,6 +338,7 @@ typedef struct {
|
|||
uint8_t ibv_wc_read_sl(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_sl_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_SL, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -335,6 +356,7 @@ typedef struct {
|
|||
uint8_t ibv_wc_read_dlid_path_bits(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_dlid_path_bits_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_DLID_PATH_BITS, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -352,6 +374,7 @@ typedef struct {
|
|||
uint64_t ibv_wc_read_completion_ts(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_completion_ts_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_COMPLETION_TS, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -369,6 +392,7 @@ typedef struct {
|
|||
uint16_t ibv_wc_read_cvlan(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_cvlan_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_CVLAN, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -386,6 +410,7 @@ typedef struct {
|
|||
uint32_t ibv_wc_read_flow_tag(struct ibv_cq_ex * cq) {
|
||||
uhyve_ibv_wc_read_flow_tag_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq_ex *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_WC_READ_FLOW_TAG, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -407,6 +432,7 @@ int ibv_post_wq_recv(struct ibv_wq * wq, struct ibv_recv_wr * recv_wr, struct ib
|
|||
uhyve_args->wq = (struct ibv_wq *) virt_to_phys((size_t) wq);
|
||||
uhyve_args->recv_wr = (struct ibv_recv_wr *) virt_to_phys((size_t) recv_wr);
|
||||
// TODO: Take care of ** parameter.
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_POST_WQ_RECV, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -424,7 +450,9 @@ typedef struct {
|
|||
struct verbs_context * verbs_get_ctx(struct ibv_context * ctx) {
|
||||
uhyve_verbs_get_ctx_t uhyve_args;
|
||||
uhyve_args->ctx = (struct ibv_context *) virt_to_phys((size_t) ctx);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct verbs_context));
|
||||
|
||||
uhyve_send(UHYVE_PORT_VERBS_GET_CTX, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -442,7 +470,9 @@ typedef struct {
|
|||
struct ibv_device ** ibv_get_device_list(int * num_devices) {
|
||||
uhyve_ibv_get_device_list_t uhyve_args;
|
||||
uhyve_args->num_devices = (int *) virt_to_phys((size_t) num_devices);
|
||||
|
||||
// TODO: Take care of return value.
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_GET_DEVICE_LIST, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -460,6 +490,7 @@ typedef struct {
|
|||
void ibv_free_device_list(struct ibv_device ** list) {
|
||||
uhyve_ibv_free_device_list_t uhyve_args;
|
||||
// TODO: Take care of ** parameter.
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_FREE_DEVICE_LIST, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -477,7 +508,9 @@ typedef struct {
|
|||
const char * ibv_get_device_name(struct ibv_device * device) {
|
||||
uhyve_ibv_get_device_name_t uhyve_args;
|
||||
uhyve_args->device = (struct ibv_device *) virt_to_phys((size_t) device);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(const char));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_GET_DEVICE_NAME, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -495,6 +528,7 @@ typedef struct {
|
|||
__be64 ibv_get_device_guid(struct ibv_device * device) {
|
||||
uhyve_ibv_get_device_guid_t uhyve_args;
|
||||
uhyve_args->device = (struct ibv_device *) virt_to_phys((size_t) device);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_GET_DEVICE_GUID, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -512,7 +546,9 @@ typedef struct {
|
|||
struct ibv_context * ibv_open_device(struct ibv_device * device) {
|
||||
uhyve_ibv_open_device_t uhyve_args;
|
||||
uhyve_args->device = (struct ibv_device *) virt_to_phys((size_t) device);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_context));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_OPEN_DEVICE, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -530,6 +566,7 @@ typedef struct {
|
|||
int ibv_close_device(struct ibv_context * context) {
|
||||
uhyve_ibv_close_device_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CLOSE_DEVICE, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -549,6 +586,7 @@ int ibv_get_async_event(struct ibv_context * context, struct ibv_async_event * e
|
|||
uhyve_ibv_get_async_event_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->event = (struct ibv_async_event *) virt_to_phys((size_t) event);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_GET_ASYNC_EVENT, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -566,6 +604,7 @@ typedef struct {
|
|||
void ibv_ack_async_event(struct ibv_async_event * event) {
|
||||
uhyve_ibv_ack_async_event_t uhyve_args;
|
||||
uhyve_args->event = (struct ibv_async_event *) virt_to_phys((size_t) event);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_ACK_ASYNC_EVENT, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -585,6 +624,7 @@ int ibv_query_device(struct ibv_context * context, struct ibv_device_attr * devi
|
|||
uhyve_ibv_query_device_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->device_attr = (struct ibv_device_attr *) virt_to_phys((size_t) device_attr);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_QUERY_DEVICE, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -606,6 +646,7 @@ int ibv_query_port(struct ibv_context * context, uint8_t port_num, struct ibv_po
|
|||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->port_num = port_num;
|
||||
uhyve_args->port_attr = (struct ibv_port_attr *) virt_to_phys((size_t) port_attr);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_QUERY_PORT, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -627,6 +668,7 @@ int ___ibv_query_port(struct ibv_context * context, uint8_t port_num, struct ibv
|
|||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->port_num = port_num;
|
||||
uhyve_args->port_attr = (struct ibv_port_attr *) virt_to_phys((size_t) port_attr);
|
||||
|
||||
uhyve_send(UHYVE_PORT____IBV_QUERY_PORT, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -650,6 +692,7 @@ int ibv_query_gid(struct ibv_context * context, uint8_t port_num, int index, uni
|
|||
uhyve_args->port_num = port_num;
|
||||
uhyve_args->index = index;
|
||||
uhyve_args->gid = (union ibv_gid *) virt_to_phys((size_t) gid);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_QUERY_GID, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -673,6 +716,7 @@ int ibv_query_pkey(struct ibv_context * context, uint8_t port_num, int index, __
|
|||
uhyve_args->port_num = port_num;
|
||||
uhyve_args->index = index;
|
||||
uhyve_args->pkey = (__be16 *) virt_to_phys((size_t) pkey);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_QUERY_PKEY, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -690,7 +734,9 @@ typedef struct {
|
|||
struct ibv_pd * ibv_alloc_pd(struct ibv_context * context) {
|
||||
uhyve_ibv_alloc_pd_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_pd));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_ALLOC_PD, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -708,6 +754,7 @@ typedef struct {
|
|||
int ibv_dealloc_pd(struct ibv_pd * pd) {
|
||||
uhyve_ibv_dealloc_pd_t uhyve_args;
|
||||
uhyve_args->pd = (struct ibv_pd *) virt_to_phys((size_t) pd);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DEALLOC_PD, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -727,7 +774,9 @@ struct ibv_flow * ibv_create_flow(struct ibv_qp * qp, struct ibv_flow_attr * flo
|
|||
uhyve_ibv_create_flow_t uhyve_args;
|
||||
uhyve_args->qp = (struct ibv_qp *) virt_to_phys((size_t) qp);
|
||||
uhyve_args->flow = (struct ibv_flow_attr *) virt_to_phys((size_t) flow);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_flow));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_FLOW, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -745,6 +794,7 @@ typedef struct {
|
|||
int ibv_destroy_flow(struct ibv_flow * flow_id) {
|
||||
uhyve_ibv_destroy_flow_t uhyve_args;
|
||||
uhyve_args->flow_id = (struct ibv_flow *) virt_to_phys((size_t) flow_id);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DESTROY_FLOW, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -764,7 +814,9 @@ struct ibv_xrcd * ibv_open_xrcd(struct ibv_context * context, struct ibv_xrcd_in
|
|||
uhyve_ibv_open_xrcd_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->xrcd_init_attr = (struct ibv_xrcd_init_attr *) virt_to_phys((size_t) xrcd_init_attr);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_xrcd));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_OPEN_XRCD, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -782,6 +834,7 @@ typedef struct {
|
|||
int ibv_close_xrcd(struct ibv_xrcd * xrcd) {
|
||||
uhyve_ibv_close_xrcd_t uhyve_args;
|
||||
uhyve_args->xrcd = (struct ibv_xrcd *) virt_to_phys((size_t) xrcd);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CLOSE_XRCD, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -805,7 +858,9 @@ struct ibv_mr * ibv_reg_mr(struct ibv_pd * pd, void * addr, int length, int acce
|
|||
uhyve_args->addr = (void *) virt_to_phys((size_t) addr);
|
||||
uhyve_args->length = length;
|
||||
uhyve_args->access = access;
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_mr));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_REG_MR, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -833,6 +888,7 @@ int ibv_rereg_mr(struct ibv_mr * mr, int flags, struct ibv_pd * pd, void * addr,
|
|||
uhyve_args->addr = (void *) virt_to_phys((size_t) addr);
|
||||
uhyve_args->length = length;
|
||||
uhyve_args->access = access;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_REREG_MR, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -850,6 +906,7 @@ typedef struct {
|
|||
int ibv_dereg_mr(struct ibv_mr * mr) {
|
||||
uhyve_ibv_dereg_mr_t uhyve_args;
|
||||
uhyve_args->mr = (struct ibv_mr *) virt_to_phys((size_t) mr);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DEREG_MR, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -869,7 +926,9 @@ struct ibv_mw * ibv_alloc_mw(struct ibv_pd * pd, enum ibv_mw_type type) {
|
|||
uhyve_ibv_alloc_mw_t uhyve_args;
|
||||
uhyve_args->pd = (struct ibv_pd *) virt_to_phys((size_t) pd);
|
||||
uhyve_args->type = type;
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_mw));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_ALLOC_MW, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -887,6 +946,7 @@ typedef struct {
|
|||
int ibv_dealloc_mw(struct ibv_mw * mw) {
|
||||
uhyve_ibv_dealloc_mw_t uhyve_args;
|
||||
uhyve_args->mw = (struct ibv_mw *) virt_to_phys((size_t) mw);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DEALLOC_MW, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -904,6 +964,7 @@ typedef struct {
|
|||
uint32_t ibv_inc_rkey(uint32_t rkey) {
|
||||
uhyve_ibv_inc_rkey_t uhyve_args;
|
||||
uhyve_args->rkey = rkey;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_INC_RKEY, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -925,6 +986,7 @@ int ibv_bind_mw(struct ibv_qp * qp, struct ibv_mw * mw, struct ibv_mw_bind * mw_
|
|||
uhyve_args->qp = (struct ibv_qp *) virt_to_phys((size_t) qp);
|
||||
uhyve_args->mw = (struct ibv_mw *) virt_to_phys((size_t) mw);
|
||||
uhyve_args->mw_bind = (struct ibv_mw_bind *) virt_to_phys((size_t) mw_bind);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_BIND_MW, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -942,7 +1004,9 @@ typedef struct {
|
|||
struct ibv_comp_channel * ibv_create_comp_channel(struct ibv_context * context) {
|
||||
uhyve_ibv_create_comp_channel_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_comp_channel));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_COMP_CHANNEL, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -960,6 +1024,7 @@ typedef struct {
|
|||
int ibv_destroy_comp_channel(struct ibv_comp_channel * channel) {
|
||||
uhyve_ibv_destroy_comp_channel_t uhyve_args;
|
||||
uhyve_args->channel = (struct ibv_comp_channel *) virt_to_phys((size_t) channel);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DESTROY_COMP_CHANNEL, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -985,7 +1050,9 @@ struct ibv_cq * ibv_create_cq(struct ibv_context * context, int cqe, void * cq_c
|
|||
uhyve_args->cq_context = (void *) virt_to_phys((size_t) cq_context);
|
||||
uhyve_args->channel = (struct ibv_comp_channel *) virt_to_phys((size_t) channel);
|
||||
uhyve_args->comp_vector = comp_vector;
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_cq));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_CQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1005,7 +1072,9 @@ struct ibv_cq_ex * ibv_create_cq_ex(struct ibv_context * context, struct ibv_cq_
|
|||
uhyve_ibv_create_cq_ex_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->cq_attr = (struct ibv_cq_init_attr_ex *) virt_to_phys((size_t) cq_attr);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_cq_ex));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_CQ_EX, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1025,6 +1094,7 @@ int ibv_resize_cq(struct ibv_cq * cq, int cqe) {
|
|||
uhyve_ibv_resize_cq_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq *) virt_to_phys((size_t) cq);
|
||||
uhyve_args->cqe = cqe;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_RESIZE_CQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1042,6 +1112,7 @@ typedef struct {
|
|||
int ibv_destroy_cq(struct ibv_cq * cq) {
|
||||
uhyve_ibv_destroy_cq_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq *) virt_to_phys((size_t) cq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DESTROY_CQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1063,6 +1134,7 @@ int ibv_get_cq_event(struct ibv_comp_channel * channel, struct ibv_cq ** cq, voi
|
|||
uhyve_args->channel = (struct ibv_comp_channel *) virt_to_phys((size_t) channel);
|
||||
// TODO: Take care of ** parameter.
|
||||
// TODO: Take care of ** parameter.
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_GET_CQ_EVENT, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1082,6 +1154,7 @@ void ibv_ack_cq_events(struct ibv_cq * cq, unsigned int nevents) {
|
|||
uhyve_ibv_ack_cq_events_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq *) virt_to_phys((size_t) cq);
|
||||
uhyve_args->nevents = nevents;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_ACK_CQ_EVENTS, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1103,6 +1176,7 @@ int ibv_poll_cq(struct ibv_cq * cq, int num_entries, struct ibv_wc * wc) {
|
|||
uhyve_args->cq = (struct ibv_cq *) virt_to_phys((size_t) cq);
|
||||
uhyve_args->num_entries = num_entries;
|
||||
uhyve_args->wc = (struct ibv_wc *) virt_to_phys((size_t) wc);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_POLL_CQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1122,6 +1196,7 @@ int ibv_req_notify_cq(struct ibv_cq * cq, int solicited_only) {
|
|||
uhyve_ibv_req_notify_cq_t uhyve_args;
|
||||
uhyve_args->cq = (struct ibv_cq *) virt_to_phys((size_t) cq);
|
||||
uhyve_args->solicited_only = solicited_only;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_REQ_NOTIFY_CQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1141,7 +1216,9 @@ struct ibv_srq * ibv_create_srq(struct ibv_pd * pd, struct ibv_srq_init_attr * s
|
|||
uhyve_ibv_create_srq_t uhyve_args;
|
||||
uhyve_args->pd = (struct ibv_pd *) virt_to_phys((size_t) pd);
|
||||
uhyve_args->srq_init_attr = (struct ibv_srq_init_attr *) virt_to_phys((size_t) srq_init_attr);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_srq));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_SRQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1161,7 +1238,9 @@ struct ibv_srq * ibv_create_srq_ex(struct ibv_context * context, struct ibv_srq_
|
|||
uhyve_ibv_create_srq_ex_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->srq_init_attr_ex = (struct ibv_srq_init_attr_ex *) virt_to_phys((size_t) srq_init_attr_ex);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_srq));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_SRQ_EX, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1183,6 +1262,7 @@ int ibv_modify_srq(struct ibv_srq * srq, struct ibv_srq_attr * srq_attr, int srq
|
|||
uhyve_args->srq = (struct ibv_srq *) virt_to_phys((size_t) srq);
|
||||
uhyve_args->srq_attr = (struct ibv_srq_attr *) virt_to_phys((size_t) srq_attr);
|
||||
uhyve_args->srq_attr_mask = srq_attr_mask;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_MODIFY_SRQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1202,6 +1282,7 @@ int ibv_query_srq(struct ibv_srq * srq, struct ibv_srq_attr * srq_attr) {
|
|||
uhyve_ibv_query_srq_t uhyve_args;
|
||||
uhyve_args->srq = (struct ibv_srq *) virt_to_phys((size_t) srq);
|
||||
uhyve_args->srq_attr = (struct ibv_srq_attr *) virt_to_phys((size_t) srq_attr);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_QUERY_SRQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1221,6 +1302,7 @@ int ibv_get_srq_num(struct ibv_srq * srq, uint32_t * srq_num) {
|
|||
uhyve_ibv_get_srq_num_t uhyve_args;
|
||||
uhyve_args->srq = (struct ibv_srq *) virt_to_phys((size_t) srq);
|
||||
uhyve_args->srq_num = (uint32_t *) virt_to_phys((size_t) srq_num);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_GET_SRQ_NUM, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1238,6 +1320,7 @@ typedef struct {
|
|||
int ibv_destroy_srq(struct ibv_srq * srq) {
|
||||
uhyve_ibv_destroy_srq_t uhyve_args;
|
||||
uhyve_args->srq = (struct ibv_srq *) virt_to_phys((size_t) srq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DESTROY_SRQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1259,6 +1342,7 @@ int ibv_post_srq_recv(struct ibv_srq * srq, struct ibv_recv_wr * recv_wr, struct
|
|||
uhyve_args->srq = (struct ibv_srq *) virt_to_phys((size_t) srq);
|
||||
uhyve_args->recv_wr = (struct ibv_recv_wr *) virt_to_phys((size_t) recv_wr);
|
||||
// TODO: Take care of ** parameter.
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_POST_SRQ_RECV, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1278,7 +1362,9 @@ struct ibv_qp * ibv_create_qp(struct ibv_pd * pd, struct ibv_qp_init_attr * qp_i
|
|||
uhyve_ibv_create_qp_t uhyve_args;
|
||||
uhyve_args->pd = (struct ibv_pd *) virt_to_phys((size_t) pd);
|
||||
uhyve_args->qp_init_attr = (struct ibv_qp_init_attr *) virt_to_phys((size_t) qp_init_attr);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_qp));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_QP, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1298,7 +1384,9 @@ struct ibv_qp * ibv_create_qp_ex(struct ibv_context * context, struct ibv_qp_ini
|
|||
uhyve_ibv_create_qp_ex_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->qp_init_attr_ex = (struct ibv_qp_init_attr_ex *) virt_to_phys((size_t) qp_init_attr_ex);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_qp));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_QP_EX, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1318,6 +1406,7 @@ int ibv_query_rt_values_ex(struct ibv_context * context, struct ibv_values_ex *
|
|||
uhyve_ibv_query_rt_values_ex_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->values = (struct ibv_values_ex *) virt_to_phys((size_t) values);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_QUERY_RT_VALUES_EX, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1339,6 +1428,7 @@ int ibv_query_device_ex(struct ibv_context * context, const struct ibv_query_dev
|
|||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->input = (const struct ibv_query_device_ex_input *) virt_to_phys((size_t) input);
|
||||
uhyve_args->attr = (struct ibv_device_attr_ex *) virt_to_phys((size_t) attr);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_QUERY_DEVICE_EX, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1358,7 +1448,9 @@ struct ibv_qp * ibv_open_qp(struct ibv_context * context, struct ibv_qp_open_att
|
|||
uhyve_ibv_open_qp_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->qp_open_attr = (struct ibv_qp_open_attr *) virt_to_phys((size_t) qp_open_attr);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_qp));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_OPEN_QP, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1380,6 +1472,7 @@ int ibv_modify_qp(struct ibv_qp * qp, struct ibv_qp_attr * attr, int attr_mask)
|
|||
uhyve_args->qp = (struct ibv_qp *) virt_to_phys((size_t) qp);
|
||||
uhyve_args->attr = (struct ibv_qp_attr *) virt_to_phys((size_t) attr);
|
||||
uhyve_args->attr_mask = attr_mask;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_MODIFY_QP, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1403,6 +1496,7 @@ int ibv_query_qp(struct ibv_qp * qp, struct ibv_qp_attr * attr, int attr_mask, s
|
|||
uhyve_args->attr = (struct ibv_qp_attr *) virt_to_phys((size_t) attr);
|
||||
uhyve_args->attr_mask = attr_mask;
|
||||
uhyve_args->init_attr = (struct ibv_qp_init_attr *) virt_to_phys((size_t) init_attr);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_QUERY_QP, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1420,6 +1514,7 @@ typedef struct {
|
|||
int ibv_destroy_qp(struct ibv_qp * qp) {
|
||||
uhyve_ibv_destroy_qp_t uhyve_args;
|
||||
uhyve_args->qp = (struct ibv_qp *) virt_to_phys((size_t) qp);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DESTROY_QP, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1439,7 +1534,9 @@ struct ibv_wq * ibv_create_wq(struct ibv_context * context, struct ibv_wq_init_a
|
|||
uhyve_ibv_create_wq_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->wq_init_attr = (struct ibv_wq_init_attr *) virt_to_phys((size_t) wq_init_attr);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_wq));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_WQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1459,6 +1556,7 @@ int ibv_modify_wq(struct ibv_wq * wq, struct ibv_wq_attr * wq_attr) {
|
|||
uhyve_ibv_modify_wq_t uhyve_args;
|
||||
uhyve_args->wq = (struct ibv_wq *) virt_to_phys((size_t) wq);
|
||||
uhyve_args->wq_attr = (struct ibv_wq_attr *) virt_to_phys((size_t) wq_attr);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_MODIFY_WQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1476,6 +1574,7 @@ typedef struct {
|
|||
int ibv_destroy_wq(struct ibv_wq * wq) {
|
||||
uhyve_ibv_destroy_wq_t uhyve_args;
|
||||
uhyve_args->wq = (struct ibv_wq *) virt_to_phys((size_t) wq);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DESTROY_WQ, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1495,7 +1594,9 @@ struct ibv_rwq_ind_table * ibv_create_rwq_ind_table(struct ibv_context * context
|
|||
uhyve_ibv_create_rwq_ind_table_t uhyve_args;
|
||||
uhyve_args->context = (struct ibv_context *) virt_to_phys((size_t) context);
|
||||
uhyve_args->init_attr = (struct ibv_rwq_ind_table_init_attr *) virt_to_phys((size_t) init_attr);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_rwq_ind_table));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_RWQ_IND_TABLE, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1513,6 +1614,7 @@ typedef struct {
|
|||
int ibv_destroy_rwq_ind_table(struct ibv_rwq_ind_table * rwq_ind_table) {
|
||||
uhyve_ibv_destroy_rwq_ind_table_t uhyve_args;
|
||||
uhyve_args->rwq_ind_table = (struct ibv_rwq_ind_table *) virt_to_phys((size_t) rwq_ind_table);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DESTROY_RWQ_IND_TABLE, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1534,6 +1636,7 @@ int ibv_post_send(struct ibv_qp * qp, struct ibv_send_wr * wr, struct ibv_send_w
|
|||
uhyve_args->qp = (struct ibv_qp *) virt_to_phys((size_t) qp);
|
||||
uhyve_args->wr = (struct ibv_send_wr *) virt_to_phys((size_t) wr);
|
||||
// TODO: Take care of ** parameter.
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_POST_SEND, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1555,6 +1658,7 @@ int ibv_post_recv(struct ibv_qp * qp, struct ibv_recv_wr * wr, struct ibv_recv_w
|
|||
uhyve_args->qp = (struct ibv_qp *) virt_to_phys((size_t) qp);
|
||||
uhyve_args->wr = (struct ibv_recv_wr *) virt_to_phys((size_t) wr);
|
||||
// TODO: Take care of ** parameter.
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_POST_RECV, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1574,7 +1678,9 @@ struct ibv_ah * ibv_create_ah(struct ibv_pd * pd, struct ibv_ah_attr * attr) {
|
|||
uhyve_ibv_create_ah_t uhyve_args;
|
||||
uhyve_args->pd = (struct ibv_pd *) virt_to_phys((size_t) pd);
|
||||
uhyve_args->attr = (struct ibv_ah_attr *) virt_to_phys((size_t) attr);
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_ah));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_AH, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1600,6 +1706,7 @@ int ibv_init_ah_from_wc(struct ibv_context * context, uint8_t port_num, struct i
|
|||
uhyve_args->wc = (struct ibv_wc *) virt_to_phys((size_t) wc);
|
||||
uhyve_args->grh = (struct ibv_grh *) virt_to_phys((size_t) grh);
|
||||
uhyve_args->ah_attr = (struct ibv_ah_attr *) virt_to_phys((size_t) ah_attr);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_INIT_AH_FROM_WC, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1623,7 +1730,9 @@ struct ibv_ah * ibv_create_ah_from_wc(struct ibv_pd * pd, struct ibv_wc * wc, st
|
|||
uhyve_args->wc = (struct ibv_wc *) virt_to_phys((size_t) wc);
|
||||
uhyve_args->grh = (struct ibv_grh *) virt_to_phys((size_t) grh);
|
||||
uhyve_args->port_num = port_num;
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(struct ibv_ah));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_CREATE_AH_FROM_WC, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1641,6 +1750,7 @@ typedef struct {
|
|||
int ibv_destroy_ah(struct ibv_ah * ah) {
|
||||
uhyve_ibv_destroy_ah_t uhyve_args;
|
||||
uhyve_args->ah = (struct ibv_ah *) virt_to_phys((size_t) ah);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DESTROY_AH, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1662,6 +1772,7 @@ int ibv_attach_mcast(struct ibv_qp * qp, const union ibv_gid * gid, uint16_t lid
|
|||
uhyve_args->qp = (struct ibv_qp *) virt_to_phys((size_t) qp);
|
||||
uhyve_args->gid = (const union ibv_gid *) virt_to_phys((size_t) gid);
|
||||
uhyve_args->lid = lid;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_ATTACH_MCAST, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1683,6 +1794,7 @@ int ibv_detach_mcast(struct ibv_qp * qp, const union ibv_gid * gid, uint16_t lid
|
|||
uhyve_args->qp = (struct ibv_qp *) virt_to_phys((size_t) qp);
|
||||
uhyve_args->gid = (const union ibv_gid *) virt_to_phys((size_t) gid);
|
||||
uhyve_args->lid = lid;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_DETACH_MCAST, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1700,6 +1812,7 @@ typedef struct {
|
|||
int ibv_fork_init() {
|
||||
uhyve_ibv_fork_init_t uhyve_args;
|
||||
uhyve_args-> = ;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_FORK_INIT, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1717,7 +1830,9 @@ typedef struct {
|
|||
const char * ibv_node_type_str(enum ibv_node_type node_type) {
|
||||
uhyve_ibv_node_type_str_t uhyve_args;
|
||||
uhyve_args->node_type = node_type;
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(const char));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_NODE_TYPE_STR, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1735,7 +1850,9 @@ typedef struct {
|
|||
const char * ibv_port_state_str(enum ibv_port_state port_state) {
|
||||
uhyve_ibv_port_state_str_t uhyve_args;
|
||||
uhyve_args->port_state = port_state;
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(const char));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_PORT_STATE_STR, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1753,7 +1870,9 @@ typedef struct {
|
|||
const char * ibv_event_type_str(enum ibv_event_type event) {
|
||||
uhyve_ibv_event_type_str_t uhyve_args;
|
||||
uhyve_args->event = event;
|
||||
|
||||
uhyve_args->ret = kmalloc(sizeof(const char));
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_EVENT_TYPE_STR, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1777,6 +1896,7 @@ int ibv_resolve_eth_l2_from_gid(struct ibv_context * context, struct ibv_ah_attr
|
|||
uhyve_args->attr = (struct ibv_ah_attr *) virt_to_phys((size_t) attr);
|
||||
uhyve_args->eth_mac = eth_mac;
|
||||
uhyve_args->vid = (uint16_t *) virt_to_phys((size_t) vid);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_RESOLVE_ETH_L2_FROM_GID, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
||||
|
@ -1796,6 +1916,7 @@ int ibv_is_qpt_supported(uint32_t caps, enum ibv_qp_type qpt) {
|
|||
uhyve_ibv_is_qpt_supported_t uhyve_args;
|
||||
uhyve_args->caps = caps;
|
||||
uhyve_args->qpt = qpt;
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_IS_QPT_SUPPORTED, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
// TODO: Fix pointers in returned data structures.
|
97
tools/ibv_code_generator/GEN_tools_uhyve-ibv.h
Normal file
97
tools/ibv_code_generator/GEN_tools_uhyve-ibv.h
Normal file
|
@ -0,0 +1,97 @@
|
|||
typedef enum {
|
||||
UHYVE_PORT_IBV_WC_STATUS_STR = 0x510,
|
||||
UHYVE_PORT_IBV_RATE_TO_MULT = 0x511,
|
||||
UHYVE_PORT_MULT_TO_IBV_RATE = 0x512,
|
||||
UHYVE_PORT_IBV_RATE_TO_MBPS = 0x513,
|
||||
UHYVE_PORT_MBPS_TO_IBV_RATE = 0x514,
|
||||
UHYVE_PORT_IBV_CQ_EX_TO_CQ = 0x515,
|
||||
UHYVE_PORT_IBV_START_POLL = 0x516,
|
||||
UHYVE_PORT_IBV_NEXT_POLL = 0x517,
|
||||
UHYVE_PORT_IBV_END_POLL = 0x518,
|
||||
UHYVE_PORT_IBV_WC_READ_OPCODE = 0x519,
|
||||
UHYVE_PORT_IBV_WC_READ_VENDOR_ERR = 0x51A,
|
||||
UHYVE_PORT_IBV_WC_READ_BYTE_LEN = 0x51B,
|
||||
UHYVE_PORT_IBV_WC_READ_IMM_DATA = 0x51C,
|
||||
UHYVE_PORT_IBV_WC_READ_INVALIDATED_RKEY = 0x51D,
|
||||
UHYVE_PORT_IBV_WC_READ_QP_NUM = 0x51E,
|
||||
UHYVE_PORT_IBV_WC_READ_SRC_QP = 0x51F,
|
||||
UHYVE_PORT_IBV_WC_READ_WC_FLAGS = 0x520,
|
||||
UHYVE_PORT_IBV_WC_READ_SLID = 0x521,
|
||||
UHYVE_PORT_IBV_WC_READ_SL = 0x522,
|
||||
UHYVE_PORT_IBV_WC_READ_DLID_PATH_BITS = 0x523,
|
||||
UHYVE_PORT_IBV_WC_READ_COMPLETION_TS = 0x524,
|
||||
UHYVE_PORT_IBV_WC_READ_CVLAN = 0x525,
|
||||
UHYVE_PORT_IBV_WC_READ_FLOW_TAG = 0x526,
|
||||
UHYVE_PORT_IBV_POST_WQ_RECV = 0x527,
|
||||
UHYVE_PORT_VERBS_GET_CTX = 0x528,
|
||||
UHYVE_PORT_IBV_GET_DEVICE_LIST = 0x529,
|
||||
UHYVE_PORT_IBV_FREE_DEVICE_LIST = 0x52A,
|
||||
UHYVE_PORT_IBV_GET_DEVICE_NAME = 0x52B,
|
||||
UHYVE_PORT_IBV_GET_DEVICE_GUID = 0x52C,
|
||||
UHYVE_PORT_IBV_OPEN_DEVICE = 0x52D,
|
||||
UHYVE_PORT_IBV_CLOSE_DEVICE = 0x52E,
|
||||
UHYVE_PORT_IBV_GET_ASYNC_EVENT = 0x52F,
|
||||
UHYVE_PORT_IBV_ACK_ASYNC_EVENT = 0x530,
|
||||
UHYVE_PORT_IBV_QUERY_DEVICE = 0x531,
|
||||
UHYVE_PORT_IBV_QUERY_PORT = 0x532,
|
||||
UHYVE_PORT____IBV_QUERY_PORT = 0x533,
|
||||
UHYVE_PORT_IBV_QUERY_GID = 0x534,
|
||||
UHYVE_PORT_IBV_QUERY_PKEY = 0x535,
|
||||
UHYVE_PORT_IBV_ALLOC_PD = 0x536,
|
||||
UHYVE_PORT_IBV_DEALLOC_PD = 0x537,
|
||||
UHYVE_PORT_IBV_CREATE_FLOW = 0x538,
|
||||
UHYVE_PORT_IBV_DESTROY_FLOW = 0x539,
|
||||
UHYVE_PORT_IBV_OPEN_XRCD = 0x53A,
|
||||
UHYVE_PORT_IBV_CLOSE_XRCD = 0x53B,
|
||||
UHYVE_PORT_IBV_REG_MR = 0x53C,
|
||||
UHYVE_PORT_IBV_REREG_MR = 0x53D,
|
||||
UHYVE_PORT_IBV_DEREG_MR = 0x53E,
|
||||
UHYVE_PORT_IBV_ALLOC_MW = 0x53F,
|
||||
UHYVE_PORT_IBV_DEALLOC_MW = 0x540,
|
||||
UHYVE_PORT_IBV_INC_RKEY = 0x541,
|
||||
UHYVE_PORT_IBV_BIND_MW = 0x542,
|
||||
UHYVE_PORT_IBV_CREATE_COMP_CHANNEL = 0x543,
|
||||
UHYVE_PORT_IBV_DESTROY_COMP_CHANNEL = 0x544,
|
||||
UHYVE_PORT_IBV_CREATE_CQ = 0x545,
|
||||
UHYVE_PORT_IBV_CREATE_CQ_EX = 0x546,
|
||||
UHYVE_PORT_IBV_RESIZE_CQ = 0x547,
|
||||
UHYVE_PORT_IBV_DESTROY_CQ = 0x548,
|
||||
UHYVE_PORT_IBV_GET_CQ_EVENT = 0x549,
|
||||
UHYVE_PORT_IBV_ACK_CQ_EVENTS = 0x54A,
|
||||
UHYVE_PORT_IBV_POLL_CQ = 0x54B,
|
||||
UHYVE_PORT_IBV_REQ_NOTIFY_CQ = 0x54C,
|
||||
UHYVE_PORT_IBV_CREATE_SRQ = 0x54D,
|
||||
UHYVE_PORT_IBV_CREATE_SRQ_EX = 0x54E,
|
||||
UHYVE_PORT_IBV_MODIFY_SRQ = 0x54F,
|
||||
UHYVE_PORT_IBV_QUERY_SRQ = 0x550,
|
||||
UHYVE_PORT_IBV_GET_SRQ_NUM = 0x551,
|
||||
UHYVE_PORT_IBV_DESTROY_SRQ = 0x552,
|
||||
UHYVE_PORT_IBV_POST_SRQ_RECV = 0x553,
|
||||
UHYVE_PORT_IBV_CREATE_QP = 0x554,
|
||||
UHYVE_PORT_IBV_CREATE_QP_EX = 0x555,
|
||||
UHYVE_PORT_IBV_QUERY_RT_VALUES_EX = 0x556,
|
||||
UHYVE_PORT_IBV_QUERY_DEVICE_EX = 0x557,
|
||||
UHYVE_PORT_IBV_OPEN_QP = 0x558,
|
||||
UHYVE_PORT_IBV_MODIFY_QP = 0x559,
|
||||
UHYVE_PORT_IBV_QUERY_QP = 0x55A,
|
||||
UHYVE_PORT_IBV_DESTROY_QP = 0x55B,
|
||||
UHYVE_PORT_IBV_CREATE_WQ = 0x55C,
|
||||
UHYVE_PORT_IBV_MODIFY_WQ = 0x55D,
|
||||
UHYVE_PORT_IBV_DESTROY_WQ = 0x55E,
|
||||
UHYVE_PORT_IBV_CREATE_RWQ_IND_TABLE = 0x55F,
|
||||
UHYVE_PORT_IBV_DESTROY_RWQ_IND_TABLE = 0x560,
|
||||
UHYVE_PORT_IBV_POST_SEND = 0x561,
|
||||
UHYVE_PORT_IBV_POST_RECV = 0x562,
|
||||
UHYVE_PORT_IBV_CREATE_AH = 0x563,
|
||||
UHYVE_PORT_IBV_INIT_AH_FROM_WC = 0x564,
|
||||
UHYVE_PORT_IBV_CREATE_AH_FROM_WC = 0x565,
|
||||
UHYVE_PORT_IBV_DESTROY_AH = 0x566,
|
||||
UHYVE_PORT_IBV_ATTACH_MCAST = 0x567,
|
||||
UHYVE_PORT_IBV_DETACH_MCAST = 0x568,
|
||||
UHYVE_PORT_IBV_FORK_INIT = 0x569,
|
||||
UHYVE_PORT_IBV_NODE_TYPE_STR = 0x56A,
|
||||
UHYVE_PORT_IBV_PORT_STATE_STR = 0x56B,
|
||||
UHYVE_PORT_IBV_EVENT_TYPE_STR = 0x56C,
|
||||
UHYVE_PORT_IBV_RESOLVE_ETH_L2_FROM_GID = 0x56D,
|
||||
UHYVE_PORT_IBV_IS_QPT_SUPPORTED = 0x56E,
|
||||
} uhyve_ibv_t;
|
855
tools/ibv_code_generator/GEN_tools_uhyve.c
Normal file
855
tools/ibv_code_generator/GEN_tools_uhyve.c
Normal file
|
@ -0,0 +1,855 @@
|
|||
|
||||
case UHYVE_PORT_IBV_WC_STATUS_STR: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_status_str_t * args = (uhyve_ibv_wc_status_str_t *) (guest_mem + data);
|
||||
|
||||
const char * host_ret = ibv_wc_status_str(status);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_RATE_TO_MULT: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_rate_to_mult_t * args = (uhyve_ibv_rate_to_mult_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_rate_to_mult(rate);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_MULT_TO_IBV_RATE: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_mult_to_ibv_rate_t * args = (uhyve_mult_to_ibv_rate_t *) (guest_mem + data);
|
||||
|
||||
enum ibv_rate host_ret = mult_to_ibv_rate(mult);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_RATE_TO_MBPS: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_rate_to_mbps_t * args = (uhyve_ibv_rate_to_mbps_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_rate_to_mbps(rate);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_MBPS_TO_IBV_RATE: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_mbps_to_ibv_rate_t * args = (uhyve_mbps_to_ibv_rate_t *) (guest_mem + data);
|
||||
|
||||
enum ibv_rate host_ret = mbps_to_ibv_rate(mbps);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CQ_EX_TO_CQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_cq_ex_to_cq_t * args = (uhyve_ibv_cq_ex_to_cq_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_cq * host_ret = ibv_cq_ex_to_cq(guest_mem+(size_t)args->cq);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_START_POLL: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_start_poll_t * args = (uhyve_ibv_start_poll_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_start_poll(guest_mem+(size_t)args->cq, guest_mem+(size_t)args->attr);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_NEXT_POLL: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_next_poll_t * args = (uhyve_ibv_next_poll_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_next_poll(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_END_POLL: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_end_poll_t * args = (uhyve_ibv_end_poll_t *) (guest_mem + data);
|
||||
|
||||
void host_ret = ibv_end_poll(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_OPCODE: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_opcode_t * args = (uhyve_ibv_wc_read_opcode_t *) (guest_mem + data);
|
||||
|
||||
enum ibv_wc_opcode host_ret = ibv_wc_read_opcode(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_VENDOR_ERR: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_vendor_err_t * args = (uhyve_ibv_wc_read_vendor_err_t *) (guest_mem + data);
|
||||
|
||||
uint32_t host_ret = ibv_wc_read_vendor_err(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_BYTE_LEN: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_byte_len_t * args = (uhyve_ibv_wc_read_byte_len_t *) (guest_mem + data);
|
||||
|
||||
uint32_t host_ret = ibv_wc_read_byte_len(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_IMM_DATA: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_imm_data_t * args = (uhyve_ibv_wc_read_imm_data_t *) (guest_mem + data);
|
||||
|
||||
__be32 host_ret = ibv_wc_read_imm_data(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_INVALIDATED_RKEY: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_invalidated_rkey_t * args = (uhyve_ibv_wc_read_invalidated_rkey_t *) (guest_mem + data);
|
||||
|
||||
uint32_t host_ret = ibv_wc_read_invalidated_rkey(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_QP_NUM: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_qp_num_t * args = (uhyve_ibv_wc_read_qp_num_t *) (guest_mem + data);
|
||||
|
||||
uint32_t host_ret = ibv_wc_read_qp_num(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_SRC_QP: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_src_qp_t * args = (uhyve_ibv_wc_read_src_qp_t *) (guest_mem + data);
|
||||
|
||||
uint32_t host_ret = ibv_wc_read_src_qp(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_WC_FLAGS: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_wc_flags_t * args = (uhyve_ibv_wc_read_wc_flags_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_wc_read_wc_flags(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_SLID: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_slid_t * args = (uhyve_ibv_wc_read_slid_t *) (guest_mem + data);
|
||||
|
||||
uint32_t host_ret = ibv_wc_read_slid(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_SL: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_sl_t * args = (uhyve_ibv_wc_read_sl_t *) (guest_mem + data);
|
||||
|
||||
uint8_t host_ret = ibv_wc_read_sl(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_DLID_PATH_BITS: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_dlid_path_bits_t * args = (uhyve_ibv_wc_read_dlid_path_bits_t *) (guest_mem + data);
|
||||
|
||||
uint8_t host_ret = ibv_wc_read_dlid_path_bits(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_COMPLETION_TS: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_completion_ts_t * args = (uhyve_ibv_wc_read_completion_ts_t *) (guest_mem + data);
|
||||
|
||||
uint64_t host_ret = ibv_wc_read_completion_ts(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_CVLAN: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_cvlan_t * args = (uhyve_ibv_wc_read_cvlan_t *) (guest_mem + data);
|
||||
|
||||
uint16_t host_ret = ibv_wc_read_cvlan(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_WC_READ_FLOW_TAG: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_wc_read_flow_tag_t * args = (uhyve_ibv_wc_read_flow_tag_t *) (guest_mem + data);
|
||||
|
||||
uint32_t host_ret = ibv_wc_read_flow_tag(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_POST_WQ_RECV: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_post_wq_recv_t * args = (uhyve_ibv_post_wq_recv_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_post_wq_recv(guest_mem+(size_t)args->wq, guest_mem+(size_t)args->recv_wr, /* TODO: param bad_recv_wr*/);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_VERBS_GET_CTX: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_verbs_get_ctx_t * args = (uhyve_verbs_get_ctx_t *) (guest_mem + data);
|
||||
|
||||
struct verbs_context * host_ret = verbs_get_ctx(guest_mem+(size_t)args->ctx);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_GET_DEVICE_LIST: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_get_device_list_t * args = (uhyve_ibv_get_device_list_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_device ** host_ret = ibv_get_device_list(guest_mem+(size_t)args->num_devices);
|
||||
// TODO: Take care of struct ibv_device ** return value.
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_FREE_DEVICE_LIST: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_free_device_list_t * args = (uhyve_ibv_free_device_list_t *) (guest_mem + data);
|
||||
|
||||
void host_ret = ibv_free_device_list(/* TODO: param list*/);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_GET_DEVICE_NAME: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_get_device_name_t * args = (uhyve_ibv_get_device_name_t *) (guest_mem + data);
|
||||
|
||||
const char * host_ret = ibv_get_device_name(guest_mem+(size_t)args->device);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_GET_DEVICE_GUID: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_get_device_guid_t * args = (uhyve_ibv_get_device_guid_t *) (guest_mem + data);
|
||||
|
||||
__be64 host_ret = ibv_get_device_guid(guest_mem+(size_t)args->device);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_OPEN_DEVICE: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_open_device_t * args = (uhyve_ibv_open_device_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_context * host_ret = ibv_open_device(guest_mem+(size_t)args->device);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CLOSE_DEVICE: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_close_device_t * args = (uhyve_ibv_close_device_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_close_device(guest_mem+(size_t)args->context);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_GET_ASYNC_EVENT: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_get_async_event_t * args = (uhyve_ibv_get_async_event_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_get_async_event(guest_mem+(size_t)args->context, guest_mem+(size_t)args->event);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_ACK_ASYNC_EVENT: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_ack_async_event_t * args = (uhyve_ibv_ack_async_event_t *) (guest_mem + data);
|
||||
|
||||
void host_ret = ibv_ack_async_event(guest_mem+(size_t)args->event);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_QUERY_DEVICE: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_query_device_t * args = (uhyve_ibv_query_device_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_query_device(guest_mem+(size_t)args->context, guest_mem+(size_t)args->device_attr);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_QUERY_PORT: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_query_port_t * args = (uhyve_ibv_query_port_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_query_port(guest_mem+(size_t)args->context, port_num, guest_mem+(size_t)args->port_attr);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT____IBV_QUERY_PORT: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve____ibv_query_port_t * args = (uhyve____ibv_query_port_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ___ibv_query_port(guest_mem+(size_t)args->context, port_num, guest_mem+(size_t)args->port_attr);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_QUERY_GID: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_query_gid_t * args = (uhyve_ibv_query_gid_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_query_gid(guest_mem+(size_t)args->context, port_num, index, guest_mem+(size_t)args->gid);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_QUERY_PKEY: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_query_pkey_t * args = (uhyve_ibv_query_pkey_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_query_pkey(guest_mem+(size_t)args->context, port_num, index, guest_mem+(size_t)args->pkey);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_ALLOC_PD: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_alloc_pd_t * args = (uhyve_ibv_alloc_pd_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_pd * host_ret = ibv_alloc_pd(guest_mem+(size_t)args->context);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DEALLOC_PD: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_dealloc_pd_t * args = (uhyve_ibv_dealloc_pd_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_dealloc_pd(guest_mem+(size_t)args->pd);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_FLOW: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_flow_t * args = (uhyve_ibv_create_flow_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_flow * host_ret = ibv_create_flow(guest_mem+(size_t)args->qp, guest_mem+(size_t)args->flow);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DESTROY_FLOW: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_destroy_flow_t * args = (uhyve_ibv_destroy_flow_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_destroy_flow(guest_mem+(size_t)args->flow_id);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_OPEN_XRCD: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_open_xrcd_t * args = (uhyve_ibv_open_xrcd_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_xrcd * host_ret = ibv_open_xrcd(guest_mem+(size_t)args->context, guest_mem+(size_t)args->xrcd_init_attr);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CLOSE_XRCD: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_close_xrcd_t * args = (uhyve_ibv_close_xrcd_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_close_xrcd(guest_mem+(size_t)args->xrcd);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_REG_MR: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_reg_mr_t * args = (uhyve_ibv_reg_mr_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_mr * host_ret = ibv_reg_mr(guest_mem+(size_t)args->pd, guest_mem+(size_t)args->addr, length, access);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_REREG_MR: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_rereg_mr_t * args = (uhyve_ibv_rereg_mr_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_rereg_mr(guest_mem+(size_t)args->mr, flags, guest_mem+(size_t)args->pd, guest_mem+(size_t)args->addr, length, access);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DEREG_MR: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_dereg_mr_t * args = (uhyve_ibv_dereg_mr_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_dereg_mr(guest_mem+(size_t)args->mr);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_ALLOC_MW: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_alloc_mw_t * args = (uhyve_ibv_alloc_mw_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_mw * host_ret = ibv_alloc_mw(guest_mem+(size_t)args->pd, type);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DEALLOC_MW: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_dealloc_mw_t * args = (uhyve_ibv_dealloc_mw_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_dealloc_mw(guest_mem+(size_t)args->mw);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_INC_RKEY: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_inc_rkey_t * args = (uhyve_ibv_inc_rkey_t *) (guest_mem + data);
|
||||
|
||||
uint32_t host_ret = ibv_inc_rkey(rkey);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_BIND_MW: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_bind_mw_t * args = (uhyve_ibv_bind_mw_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_bind_mw(guest_mem+(size_t)args->qp, guest_mem+(size_t)args->mw, guest_mem+(size_t)args->mw_bind);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_COMP_CHANNEL: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_comp_channel_t * args = (uhyve_ibv_create_comp_channel_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_comp_channel * host_ret = ibv_create_comp_channel(guest_mem+(size_t)args->context);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DESTROY_COMP_CHANNEL: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_destroy_comp_channel_t * args = (uhyve_ibv_destroy_comp_channel_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_destroy_comp_channel(guest_mem+(size_t)args->channel);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_CQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_cq_t * args = (uhyve_ibv_create_cq_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_cq * host_ret = ibv_create_cq(guest_mem+(size_t)args->context, cqe, guest_mem+(size_t)args->cq_context, guest_mem+(size_t)args->channel, comp_vector);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_CQ_EX: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_cq_ex_t * args = (uhyve_ibv_create_cq_ex_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_cq_ex * host_ret = ibv_create_cq_ex(guest_mem+(size_t)args->context, guest_mem+(size_t)args->cq_attr);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_RESIZE_CQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_resize_cq_t * args = (uhyve_ibv_resize_cq_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_resize_cq(guest_mem+(size_t)args->cq, cqe);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DESTROY_CQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_destroy_cq_t * args = (uhyve_ibv_destroy_cq_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_destroy_cq(guest_mem+(size_t)args->cq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_GET_CQ_EVENT: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_get_cq_event_t * args = (uhyve_ibv_get_cq_event_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_get_cq_event(guest_mem+(size_t)args->channel, /* TODO: param cq*/, /* TODO: param cq_context*/);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_ACK_CQ_EVENTS: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_ack_cq_events_t * args = (uhyve_ibv_ack_cq_events_t *) (guest_mem + data);
|
||||
|
||||
void host_ret = ibv_ack_cq_events(guest_mem+(size_t)args->cq, nevents);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_POLL_CQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_poll_cq_t * args = (uhyve_ibv_poll_cq_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_poll_cq(guest_mem+(size_t)args->cq, num_entries, guest_mem+(size_t)args->wc);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_REQ_NOTIFY_CQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_req_notify_cq_t * args = (uhyve_ibv_req_notify_cq_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_req_notify_cq(guest_mem+(size_t)args->cq, solicited_only);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_SRQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_srq_t * args = (uhyve_ibv_create_srq_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_srq * host_ret = ibv_create_srq(guest_mem+(size_t)args->pd, guest_mem+(size_t)args->srq_init_attr);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_SRQ_EX: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_srq_ex_t * args = (uhyve_ibv_create_srq_ex_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_srq * host_ret = ibv_create_srq_ex(guest_mem+(size_t)args->context, guest_mem+(size_t)args->srq_init_attr_ex);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_MODIFY_SRQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_modify_srq_t * args = (uhyve_ibv_modify_srq_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_modify_srq(guest_mem+(size_t)args->srq, guest_mem+(size_t)args->srq_attr, srq_attr_mask);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_QUERY_SRQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_query_srq_t * args = (uhyve_ibv_query_srq_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_query_srq(guest_mem+(size_t)args->srq, guest_mem+(size_t)args->srq_attr);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_GET_SRQ_NUM: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_get_srq_num_t * args = (uhyve_ibv_get_srq_num_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_get_srq_num(guest_mem+(size_t)args->srq, guest_mem+(size_t)args->srq_num);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DESTROY_SRQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_destroy_srq_t * args = (uhyve_ibv_destroy_srq_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_destroy_srq(guest_mem+(size_t)args->srq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_POST_SRQ_RECV: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_post_srq_recv_t * args = (uhyve_ibv_post_srq_recv_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_post_srq_recv(guest_mem+(size_t)args->srq, guest_mem+(size_t)args->recv_wr, /* TODO: param bad_recv_wr*/);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_QP: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_qp_t * args = (uhyve_ibv_create_qp_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_qp * host_ret = ibv_create_qp(guest_mem+(size_t)args->pd, guest_mem+(size_t)args->qp_init_attr);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_QP_EX: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_qp_ex_t * args = (uhyve_ibv_create_qp_ex_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_qp * host_ret = ibv_create_qp_ex(guest_mem+(size_t)args->context, guest_mem+(size_t)args->qp_init_attr_ex);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_QUERY_RT_VALUES_EX: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_query_rt_values_ex_t * args = (uhyve_ibv_query_rt_values_ex_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_query_rt_values_ex(guest_mem+(size_t)args->context, guest_mem+(size_t)args->values);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_QUERY_DEVICE_EX: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_query_device_ex_t * args = (uhyve_ibv_query_device_ex_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_query_device_ex(guest_mem+(size_t)args->context, guest_mem+(size_t)args->input, guest_mem+(size_t)args->attr);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_OPEN_QP: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_open_qp_t * args = (uhyve_ibv_open_qp_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_qp * host_ret = ibv_open_qp(guest_mem+(size_t)args->context, guest_mem+(size_t)args->qp_open_attr);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_MODIFY_QP: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_modify_qp_t * args = (uhyve_ibv_modify_qp_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_modify_qp(guest_mem+(size_t)args->qp, guest_mem+(size_t)args->attr, attr_mask);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_QUERY_QP: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_query_qp_t * args = (uhyve_ibv_query_qp_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_query_qp(guest_mem+(size_t)args->qp, guest_mem+(size_t)args->attr, attr_mask, guest_mem+(size_t)args->init_attr);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DESTROY_QP: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_destroy_qp_t * args = (uhyve_ibv_destroy_qp_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_destroy_qp(guest_mem+(size_t)args->qp);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_WQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_wq_t * args = (uhyve_ibv_create_wq_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_wq * host_ret = ibv_create_wq(guest_mem+(size_t)args->context, guest_mem+(size_t)args->wq_init_attr);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_MODIFY_WQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_modify_wq_t * args = (uhyve_ibv_modify_wq_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_modify_wq(guest_mem+(size_t)args->wq, guest_mem+(size_t)args->wq_attr);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DESTROY_WQ: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_destroy_wq_t * args = (uhyve_ibv_destroy_wq_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_destroy_wq(guest_mem+(size_t)args->wq);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_RWQ_IND_TABLE: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_rwq_ind_table_t * args = (uhyve_ibv_create_rwq_ind_table_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_rwq_ind_table * host_ret = ibv_create_rwq_ind_table(guest_mem+(size_t)args->context, guest_mem+(size_t)args->init_attr);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DESTROY_RWQ_IND_TABLE: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_destroy_rwq_ind_table_t * args = (uhyve_ibv_destroy_rwq_ind_table_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_destroy_rwq_ind_table(guest_mem+(size_t)args->rwq_ind_table);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_POST_SEND: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_post_send_t * args = (uhyve_ibv_post_send_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_post_send(guest_mem+(size_t)args->qp, guest_mem+(size_t)args->wr, /* TODO: param bad_wr*/);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_POST_RECV: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_post_recv_t * args = (uhyve_ibv_post_recv_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_post_recv(guest_mem+(size_t)args->qp, guest_mem+(size_t)args->wr, /* TODO: param bad_wr*/);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_AH: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_ah_t * args = (uhyve_ibv_create_ah_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_ah * host_ret = ibv_create_ah(guest_mem+(size_t)args->pd, guest_mem+(size_t)args->attr);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_INIT_AH_FROM_WC: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_init_ah_from_wc_t * args = (uhyve_ibv_init_ah_from_wc_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_init_ah_from_wc(guest_mem+(size_t)args->context, port_num, guest_mem+(size_t)args->wc, guest_mem+(size_t)args->grh, guest_mem+(size_t)args->ah_attr);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_CREATE_AH_FROM_WC: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_create_ah_from_wc_t * args = (uhyve_ibv_create_ah_from_wc_t *) (guest_mem + data);
|
||||
|
||||
struct ibv_ah * host_ret = ibv_create_ah_from_wc(guest_mem+(size_t)args->pd, guest_mem+(size_t)args->wc, guest_mem+(size_t)args->grh, port_num);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DESTROY_AH: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_destroy_ah_t * args = (uhyve_ibv_destroy_ah_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_destroy_ah(guest_mem+(size_t)args->ah);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_ATTACH_MCAST: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_attach_mcast_t * args = (uhyve_ibv_attach_mcast_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_attach_mcast(guest_mem+(size_t)args->qp, guest_mem+(size_t)args->gid, lid);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_DETACH_MCAST: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_detach_mcast_t * args = (uhyve_ibv_detach_mcast_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_detach_mcast(guest_mem+(size_t)args->qp, guest_mem+(size_t)args->gid, lid);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_FORK_INIT: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_fork_init_t * args = (uhyve_ibv_fork_init_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_fork_init();
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_NODE_TYPE_STR: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_node_type_str_t * args = (uhyve_ibv_node_type_str_t *) (guest_mem + data);
|
||||
|
||||
const char * host_ret = ibv_node_type_str(node_type);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_PORT_STATE_STR: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_port_state_str_t * args = (uhyve_ibv_port_state_str_t *) (guest_mem + data);
|
||||
|
||||
const char * host_ret = ibv_port_state_str(port_state);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_EVENT_TYPE_STR: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_event_type_str_t * args = (uhyve_ibv_event_type_str_t *) (guest_mem + data);
|
||||
|
||||
const char * host_ret = ibv_event_type_str(event);
|
||||
memcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_RESOLVE_ETH_L2_FROM_GID: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_resolve_eth_l2_from_gid_t * args = (uhyve_ibv_resolve_eth_l2_from_gid_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_resolve_eth_l2_from_gid(guest_mem+(size_t)args->context, guest_mem+(size_t)args->attr, eth_mac, guest_mem+(size_t)args->vid);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
case UHYVE_PORT_IBV_IS_QPT_SUPPORTED: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_is_qpt_supported_t * args = (uhyve_ibv_is_qpt_supported_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_is_qpt_supported(caps, qpt);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
330
tools/ibv_code_generator/generate_code.py
Executable file
330
tools/ibv_code_generator/generate_code.py
Executable file
|
@ -0,0 +1,330 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""Copyright (c) 2017, Annika Wierichs, RWTH Aachen University
|
||||
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the University nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
This script expects a text file containing function prototypes as input
|
||||
(SRC_PATH). It generates the following C code snippets for each individual given
|
||||
function in the input file. Todo notes are inserted whereever more work is
|
||||
required.
|
||||
|
||||
1. The definition of a struct that contains all parameters and the return value
|
||||
of a given function.
|
||||
Required in: ./kernel/ibv.c
|
||||
|
||||
Example:
|
||||
typedef struct {
|
||||
// Parameters:
|
||||
struct ibv_mr * mr;
|
||||
int flags;
|
||||
struct ibv_pd * pd;
|
||||
// Return value:
|
||||
int ret;
|
||||
} __attribute__((packed)) uhyve_ibv_rereg_mr_t;
|
||||
|
||||
2. The definition of the kernel space function that sends a KVM exit IO to
|
||||
uhyve.
|
||||
Required in: ./kernel/ibv.c
|
||||
|
||||
Example:
|
||||
int ibv_rereg_mr(struct ibv_mr * mr, int flags, struct ibv_pd * pd) {
|
||||
uhyve_ibv_rereg_mr_t uhyve_args;
|
||||
uhyve_args->mr = (struct ibv_mr *) virt_to_phys((size_t) mr);
|
||||
uhyve_args->flags = flags;
|
||||
uhyve_args->pd = (struct ibv_pd *) virt_to_phys((size_t) pd);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_REREG_MR, (unsigned) virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
return uhyve_args.ret;
|
||||
}
|
||||
|
||||
3. The switch-case that catches the KVM exit IO sent to uhyve by the kernel.
|
||||
Required in: ./tool/uhyve.c
|
||||
|
||||
Example:
|
||||
case UHYVE_PORT_IBV_REREG_MR: {
|
||||
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
|
||||
uhyve_ibv_rereg_mr_t * args = (uhyve_ibv_rereg_mr_t *) (guest_mem + data);
|
||||
|
||||
int host_ret = ibv_rereg_mr(guest_mem+(size_t)args->mr, flags, guest_mem+(size_t)args->pd);
|
||||
args->ret = host_ret;
|
||||
break;
|
||||
}
|
||||
|
||||
The script also generates an enum mapping all functions to KVM exit IO port
|
||||
names and numbers.
|
||||
Required in: ./tool/uhyve-ibv.h
|
||||
|
||||
Example:
|
||||
typedef enum {
|
||||
UHYVE_PORT_IBV_WC_STATUS_STR = 0x510,
|
||||
UHYVE_PORT_IBV_RATE_TO_MULT = 0x511,
|
||||
UHYVE_PORT_MULT_TO_IBV_RATE = 0x512,
|
||||
// ...
|
||||
} uhyve_ibv_t;
|
||||
"""
|
||||
|
||||
|
||||
# Path of the input file containing function prototypes.
|
||||
SRC_PATH = "function_prototypes.txt"
|
||||
|
||||
# Paths of the files that are generated by the script.
|
||||
IBV_GEN_PATH = "GEN_kernel_ibv.c"
|
||||
UHYVE_CASES_GEN_PATH = "GEN_tools_uhyve.c"
|
||||
UHYVE_IBV_HEADER_GEN_PATH = "GEN_tools_uhyve-ibv.h"
|
||||
INCLUDE_STDDEF_GEN_PATH = "GEN_include_hermit_stddef.h"
|
||||
|
||||
# Starting number of the sequence used for IBV ports.
|
||||
PORT_NUMBER_START = 0x510
|
||||
|
||||
|
||||
def get_struct_name(function_name):
|
||||
"""Returns the matching struct name for a given function name.
|
||||
"""
|
||||
return "uhyve_{0}_t".format(function_name)
|
||||
|
||||
|
||||
def parse_line(line):
|
||||
"""Parses a line containing a function prototype.
|
||||
|
||||
Args:
|
||||
line: Line of the following format:
|
||||
<return_type> <function_name>(<param_type> <param_name>, [...])
|
||||
|
||||
Returns:
|
||||
Return type, function name, parameters as Tuple[string, string, list[string]]
|
||||
"""
|
||||
parens_split = line.split("(")
|
||||
|
||||
ret_and_name = parens_split[0].split(" ")
|
||||
all_params = parens_split[-1][:-1]
|
||||
|
||||
ret = " ".join(ret_and_name[:-1])
|
||||
function_name = ret_and_name[-1]
|
||||
|
||||
params = all_params.split(",")
|
||||
params[-1] = params[-1][:-1]
|
||||
|
||||
return ret, function_name, params
|
||||
|
||||
|
||||
def generate_struct(ret, function_name, params):
|
||||
"""Generates the struct to hold a function's parameters and return value.
|
||||
|
||||
Args:
|
||||
ret: Return type as string.
|
||||
function_name: Function name as string.
|
||||
params: Parameters as list of strings.
|
||||
|
||||
Returns:
|
||||
Generated struct as string.
|
||||
"""
|
||||
struct = "typedef struct {\n"
|
||||
if params:
|
||||
struct += "\t// Parameters:\n"
|
||||
for param in params:
|
||||
struct += "\t{0};\n".format(param)
|
||||
|
||||
if ret is not "void":
|
||||
struct += "\t// Return value:\n"
|
||||
struct += "\t{0} ret;\n".format(ret)
|
||||
|
||||
struct_name = get_struct_name(function_name)
|
||||
struct += "}} __attribute__((packed)) {0};\n\n".format(struct_name)
|
||||
|
||||
return struct
|
||||
|
||||
|
||||
def generate_kernel_function(ret, function_name, params):
|
||||
"""Generates the kernel function that sends the KVM exit IO to uhyve.
|
||||
|
||||
Args:
|
||||
ret: Return type as string.
|
||||
function_name: Function name as string.
|
||||
params: Parameters as list of strings.
|
||||
|
||||
Returns:
|
||||
Generated function as string.
|
||||
"""
|
||||
function = "{0} {1}({2}) {{\n".format(ret, function_name, ", ".join(params))
|
||||
|
||||
# Create uhyve_args and define parameters
|
||||
struct_name = get_struct_name(function_name)
|
||||
function += "\t{0} uhyve_args;\n".format(struct_name)
|
||||
for param in params:
|
||||
param_split = param.split(" ")
|
||||
param_type = " ".join(param_split[:-1])
|
||||
param_name = param_split[-1]
|
||||
|
||||
# Define struct members according to their type.
|
||||
if "**" in param_type:
|
||||
function += "\t// TODO: Take care of ** parameter.\n"
|
||||
elif "*" in param_type:
|
||||
function += "\tuhyve_args->{0} = " "({1}) virt_to_phys((size_t) {2});\n".format(
|
||||
param_name, param_type, param_name)
|
||||
else:
|
||||
function += "\tuhyve_args->{0} = {0};\n".format(param_name)
|
||||
|
||||
# Allocate memory for return value if it is a pointer.
|
||||
if "**" in ret:
|
||||
function += "\n\t// TODO: Take care of return value.\n"
|
||||
elif "*" in ret:
|
||||
function += "\n\tuhyve_args->ret = kmalloc(sizeof({0}));\n".format(ret[:-2])
|
||||
|
||||
# call uhyve_send() using the respective port ID.
|
||||
port_name = "UHYVE_PORT_" + function_name.upper()
|
||||
function += "\n\tuhyve_send({0}, (unsigned) virt_to_phys((size_t) " \
|
||||
"&uhyve_args));\n\n".format(port_name)
|
||||
|
||||
function += "\t// TODO: Fix pointers in returned data structures.\n"
|
||||
|
||||
function += "\treturn uhyve_args.ret;\n"
|
||||
function += "}\n\n\n"
|
||||
|
||||
return function
|
||||
|
||||
|
||||
def generate_uhyve_case(ret, function_name, params):
|
||||
"""Generates a switch-case that catches a KVM exit IO for the given function in uhyve.
|
||||
|
||||
Args:
|
||||
ret: Return type as string.
|
||||
function_name: Function name as string.
|
||||
params: Parameters as list of strings.
|
||||
|
||||
Returns:
|
||||
Generated switch-case code as string.
|
||||
"""
|
||||
|
||||
def generate_host_call_parameter(param):
|
||||
"""Generates the parameter for the host's function called from within uhyve.
|
||||
|
||||
This distinguishes between pointers and non-pointers since pointers have to
|
||||
be converted to host memory addresses.
|
||||
Example for pointer: guest_mem+(size_t)args->param
|
||||
Example for non-pointer: args->param
|
||||
|
||||
Args:
|
||||
param: The parameter type and name as a single string.
|
||||
|
||||
Returns:
|
||||
Generated parameter,
|
||||
"""
|
||||
param_name = param.split(" ")[-1]
|
||||
if "**" in param:
|
||||
host_param = "/* TODO: param {0}*/".format(param_name)
|
||||
elif "*" in param:
|
||||
host_param = "guest_mem+(size_t)args->{0}".format(param_name)
|
||||
else:
|
||||
host_param = "{0}".format(param_name)
|
||||
|
||||
return host_param
|
||||
|
||||
port_name = "UHYVE_PORT_" + function_name.upper()
|
||||
struct_name = get_struct_name(function_name)
|
||||
|
||||
case = "\n\t\t\tcase {0}: {{".format(port_name)
|
||||
case += "\n\t\t\t\tunsigned data = *((unsigned*)((size_t)run+run->io.data_offset));"
|
||||
case += "\n\t\t\t\t{0} * args = ({0} *) (guest_mem + data);".format(struct_name)
|
||||
case += "\n\n\t\t\t\t{0} host_ret = {1}(".format(ret, function_name)
|
||||
|
||||
for param in params[:-1]:
|
||||
case += generate_host_call_parameter(param) + ", "
|
||||
else:
|
||||
case += generate_host_call_parameter(params[-1]) + ");"
|
||||
|
||||
if "**" in ret:
|
||||
case += "\n\t\t\t\t// TODO: Take care of {0} return value.".format(ret)
|
||||
elif "*" in ret:
|
||||
case += "\n\t\t\t\tmemcpy(guest_mem+(size_t)args->ret, host_ret, sizeof(host_ret));"
|
||||
else:
|
||||
case += "\n\t\t\t\targs->ret = host_ret;"
|
||||
|
||||
case += "\n\t\t\t\tbreak;"
|
||||
case += "\n\t\t\t}\n"
|
||||
|
||||
return case
|
||||
|
||||
|
||||
def generate_port_enum(function_names):
|
||||
"""Generates the enum mapping KVM exit IO port names to port numbers.
|
||||
|
||||
Args:
|
||||
function_names: All function names to be mapped to ports as list of strings.
|
||||
|
||||
Returns:
|
||||
Generated complete enum.
|
||||
"""
|
||||
port_enum = "typedef enum {"
|
||||
for num, function_name in enumerate(function_names, PORT_NUMBER_START):
|
||||
port_enum += "\n\tUHYVE_PORT_{0} = 0x{1},".format(function_name.upper(),
|
||||
format(num, "X"))
|
||||
port_enum += "\n} uhyve_ibv_t;"
|
||||
|
||||
return port_enum
|
||||
|
||||
|
||||
def generate_port_macros(function_names):
|
||||
"""Generates the compiler macros mapping KVM exit IO port names to port numbers.
|
||||
|
||||
Args:
|
||||
function_names: All function names to be mapped to ports as list of strings.
|
||||
|
||||
Returns:
|
||||
Generated list of compiler macros.
|
||||
"""
|
||||
macros = ""
|
||||
for num, function_name in enumerate(function_names, PORT_NUMBER_START):
|
||||
macros += "\n#define UHYVE_PORT_{0} 0x{1},".format(function_name.upper(),
|
||||
format(num, "X"))
|
||||
return macros
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with open(SRC_PATH, "r") as f_src, \
|
||||
open(IBV_GEN_PATH, "w") as f_ibv, \
|
||||
open(UHYVE_CASES_GEN_PATH, "w") as f_uhyve:
|
||||
function_names = []
|
||||
for line in f_src:
|
||||
ret, function_name, params = parse_line(line)
|
||||
function_names.append(function_name)
|
||||
|
||||
struct = generate_struct(ret, function_name, params)
|
||||
f_ibv.write(struct)
|
||||
|
||||
kernel_function = generate_kernel_function(ret, function_name, params)
|
||||
f_ibv.write(kernel_function)
|
||||
|
||||
uhyve_case = generate_uhyve_case(ret, function_name, params)
|
||||
f_uhyve.write(uhyve_case)
|
||||
|
||||
with open(UHYVE_IBV_HEADER_GEN_PATH, "w") as f_uhyve_ibv:
|
||||
port_enum = generate_port_enum(function_names)
|
||||
f_uhyve_ibv.write(port_enum)
|
||||
|
||||
with open(INCLUDE_STDDEF_GEN_PATH, "w") as f_stddef:
|
||||
port_macros = generate_port_macros(function_names)
|
||||
f_stddef.write(port_macros)
|
|
@ -1,121 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""Copyright (c) 2017, Annika Wierichs, RWTH Aachen University
|
||||
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the University nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
TODO: Documentation"""
|
||||
|
||||
src_file_path = 'function_prototypes.txt'
|
||||
|
||||
ibv_gen_path = 'ibv_gen.c'
|
||||
uhyve_cases_gen_path = 'uhyve_gen.c'
|
||||
|
||||
with open(src_file_path, 'r') as f_src:
|
||||
with open(ibv_gen_path, 'w') as f_ibv, open(uhyve_cases_gen_path, 'w') as f_uhyve:
|
||||
# TODO: next: generate hyve stuff.
|
||||
for line in f_src:
|
||||
parens_split = line.split('(')
|
||||
|
||||
ret_and_name = parens_split[0].split(' ')
|
||||
function_name = ret_and_name[-1]
|
||||
ret = ' '.join(ret_and_name[:-1])
|
||||
|
||||
all_params = parens_split[-1][:-1]
|
||||
params = all_params.split(',')
|
||||
params[-1] = params[-1][:-1]
|
||||
|
||||
# Struct
|
||||
struct_name = 'uhyve_{0}_t'.format(function_name)
|
||||
f_ibv.write('typedef struct {\n')
|
||||
if params:
|
||||
f_ibv.write('\t// Parameters:\n')
|
||||
for param in params:
|
||||
f_ibv.write('\t{0};\n'.format(param))
|
||||
|
||||
if ret is not "void":
|
||||
f_ibv.write('\t// Return value:\n')
|
||||
f_ibv.write('\t{0} ret;\n'.format(ret))
|
||||
|
||||
f_ibv.write('}} __attribute__((packed)) {0};\n\n'.format(struct_name))
|
||||
|
||||
# Function
|
||||
params_single_string = ', '.join(params)
|
||||
f_ibv.write('{0} {1}({2}) {{\n'.format(ret, function_name,
|
||||
params_single_string))
|
||||
|
||||
# Create uhyve_args and define parameters
|
||||
f_ibv.write('\t{0} uhyve_args;\n'.format(struct_name))
|
||||
for param in params:
|
||||
param_split = param.split(' ')
|
||||
param_type = ' '.join(param_split[:-1])
|
||||
param_name = param_split[-1]
|
||||
# Define struct members according to their type.
|
||||
if '**' in param_type:
|
||||
f_ibv.write('\t// TODO: Take care of ** parameter.\n')
|
||||
elif '*' in param_type:
|
||||
f_ibv.write('\tuhyve_args->{0} = ({1}) virt_to_phys((size_t) {2});\n'
|
||||
.format(param_name, param_type, param_name))
|
||||
else:
|
||||
f_ibv.write('\tuhyve_args->{0} = {0};\n'.format(param_name))
|
||||
|
||||
# Allocate memory for return value if it is a pointer.
|
||||
if '**' in ret:
|
||||
f_ibv.write('\n\t// TODO: Take care of return value.\n')
|
||||
elif '*' in ret:
|
||||
f_ibv.write('\n\tuhyve_args->ret = kmalloc(sizeof({0}));\n'.format(ret[:-2]))
|
||||
|
||||
# call uhyve_send() using the respective port ID.
|
||||
port_name = 'UHYVE_PORT_' + function_name.upper()
|
||||
f_ibv.write('\n\tuhyve_send({0}, (unsigned) virt_to_phys((size_t) '
|
||||
'&uhyve_args));\n\n'.format(port_name))
|
||||
|
||||
f_ibv.write('\t// TODO: Fix pointers in returned data structures.\n')
|
||||
|
||||
f_ibv.write('\treturn uhyve_args.ret;\n')
|
||||
f_ibv.write('}\n\n\n')
|
||||
|
||||
with open(uhyve_cases_gen_path, 'w') as f_ibv:
|
||||
|
||||
|
||||
|
||||
# typedef struct {
|
||||
# // Parameters:
|
||||
# struct ibv_device *device;
|
||||
# // Return value:
|
||||
# struct ibv_context *ret;
|
||||
# } __attribute__((packed)) uhyve_ibv_open_device_t;
|
||||
|
||||
# int ibv_open_device(struct ibv_device *device) {
|
||||
# uhyve_ibv_open_device_t uhyve_args;
|
||||
# uhyve_args.device = (struct ibv_device *) virt_to_phys((size_t) device);
|
||||
# uhyve_args->ret = kmalloc(sizeof(struct ibv_context));
|
||||
|
||||
# uhyve_send(UHYVE_PORT_IBV_OPEN_DEVICE, (unsigned)virt_to_phys((size_t) &uhyve_args));
|
||||
|
||||
# // Set all pointers contained in returned data structure to valid kernel space addresses.
|
||||
# uhyve_args->ret->device = device;
|
||||
|
||||
# return uhyve_args.ret;
|
||||
# }
|
Loading…
Add table
Reference in a new issue