Ejemplo n.º 1
0
int
vm_install_tk1_usb_passthrough_device(vm_t* vm)
{

    /* Add the device */
    void *addr = map_vm_device(vm, dev_usb.pstart, dev_usb.pstart, seL4_AllRights);
    if (addr == NULL) {
        ZF_LOGE("map_vm_device returned NULL");
        return -1;
    }
    void *vmm_addr = vspace_share_mem(vm_get_vspace(vm), vm_get_vmm_vspace(vm), addr, 1,
    seL4_PageBits, seL4_AllRights, 0);
    if (vmm_addr == NULL) {
        ZF_LOGE("vspace_share_mem returned NULL");
        return -1;
    }

    int err = vm_add_device(vm, &dev_usb);
    if (err) {
        ZF_LOGE("vm_add_device returned error: %d", err);
        return -1;
    }
    err = vm_register_reboot_callback(vm, usb_vm_reboot_hook, vmm_addr);
    if (err) {
        ZF_LOGE("vm_register_reboot_callback returned error: %d", err);
        return -1;
    }

    return 0;
}
Ejemplo n.º 2
0
int
vm_install_vsysreg(vm_t* vm)
{
    struct sysreg_priv *sysreg_data;
    struct device d;
    vspace_t* vmm_vspace;
    int err;

    d = dev_sysreg;
    vmm_vspace = vm->vmm_vspace;

    /* Initialise the virtual device */
    sysreg_data = malloc(sizeof(struct sysreg_priv));
    if (sysreg_data == NULL) {
        assert(sysreg_data);
        return -1;
    }
    memset(sysreg_data, 0, sizeof(*sysreg_data));
    sysreg_data->vm = vm;

    sysreg_data->regs = map_device(vmm_vspace, vm->vka, vm->simple,
                                   d.pstart, 0, seL4_AllRights);
    if (sysreg_data->regs == NULL) {
        return -1;
    }

    d.priv = sysreg_data;
    err = vm_add_device(vm, &d);
    assert(!err);
    if (err) {
        free(sysreg_data);
        return -1;
    }

    return 0;
}