|
khypervisor
v1
|
#include <hvmm_types.h>

Go to the source code of this file.
Functions | |
| hvmm_status_t | virq_inject (vmid_t vmid, uint32_t virq, uint32_t pirq, uint8_t hw) |
| hvmm_status_t | virq_init (void) |
| hvmm_status_t virq_init | ( | void | ) |
Definition at line 88 of file virq.c.
{
int i, j;
for( i = 0; i < NUM_GUESTS_STATIC; i++) {
for( j = 0; j < (VIRQ_MAX_ENTRIES + 1); j++ ) {
_guest_virqs[i][j].valid = 0;
}
}
vgic_setcallback_virq_flush(&virq_flush);
return HVMM_STATUS_SUCCESS;
}

| hvmm_status_t virq_inject | ( | vmid_t | vmid, |
| uint32_t | virq, | ||
| uint32_t | pirq, | ||
| uint8_t | hw | ||
| ) |
Definition at line 26 of file virq.c.
{
hvmm_status_t result = HVMM_STATUS_BUSY;
int i;
struct virq_entry *q = &_guest_virqs[vmid][0];
int slot = slotvirq_getslot(vmid, virq);
if ( slot == SLOT_INVALID ) {
/* Inject only the same virq is not present in a slot */
for( i = 0; i < VIRQ_MAX_ENTRIES; i++ ) {
if ( q[i].valid == 0 ) {
q[i].pirq = pirq;
q[i].virq = virq;
q[i].hw = hw;
q[i].valid = 1;
result = HVMM_STATUS_SUCCESS;
break;
}
}
printh( "virq: queueing virq %d pirq %d to vmid %d %s\n", virq, pirq, vmid, result == HVMM_STATUS_SUCCESS ? "done" : "failed");
} else {
printh( "virq: rejected queueing duplicated virq %d pirq %d to vmid %d %s\n", virq, pirq, vmid);
}
return result;
}

1.7.6.1