cross_vm_connectors: Add a device name register The event PCI BAR allocates a 4K frame but only uses the first 8 bytes for sending and receiving events. The next 50 bytes are now used to store a device name that a guest OS can use to identify different devices. A default of "connector" is used because this was the name that the Linux kernel module would give to all devices before this change.
diff --git a/libsel4vmmplatsupport/include/sel4vmmplatsupport/drivers/cross_vm_connection.h b/libsel4vmmplatsupport/include/sel4vmmplatsupport/drivers/cross_vm_connection.h index da8ff9b..df4cad4 100644 --- a/libsel4vmmplatsupport/include/sel4vmmplatsupport/drivers/cross_vm_connection.h +++ b/libsel4vmmplatsupport/include/sel4vmmplatsupport/drivers/cross_vm_connection.h
@@ -55,6 +55,7 @@ crossvm_dataport_handle_t *dataport; emit_fn emit_fn; seL4_Word consume_id; + const char *connection_name; } crossvm_handle_t; /***
diff --git a/libsel4vmmplatsupport/src/drivers/cross_vm_connection.c b/libsel4vmmplatsupport/src/drivers/cross_vm_connection.c index d875175..dde6f3b 100644 --- a/libsel4vmmplatsupport/src/drivers/cross_vm_connection.c +++ b/libsel4vmmplatsupport/src/drivers/cross_vm_connection.c
@@ -35,6 +35,8 @@ #define EVENT_BAR_EMIT_REGISTER_INDEX 0 #define EVENT_BAR_CONSUME_EVENT_REGISTER 0x4 #define EVENT_BAR_CONSUME_EVENT_REGISTER_INDEX 1 +#define EVENT_BAR_DEVICE_NAME_REGISTER 0x8 +#define EVENT_BAR_DEVICE_NAME_MAX_LEN 50 struct connection_info { uintptr_t event_address; @@ -291,6 +293,12 @@ return -1; } info[i].connection = connections[i]; + if (connections[i].connection_name == NULL) { + connections[i].connection_name = "connector"; + } + strncpy(info[i].event_registers + EVENT_BAR_DEVICE_NAME_REGISTER, connections[i].connection_name, + EVENT_BAR_DEVICE_NAME_MAX_LEN); + connection_curr_addr += dataport_size; } return 0;