Changeset View
Changeset View
Standalone View
Standalone View
usr.sbin/bhyve/pci_emul.c
Show First 20 Lines • Show All 616 Lines • ▼ Show 20 Lines | case PCIBAR_IO: | ||||
iop.size = pi->pi_bar[idx].size; | iop.size = pi->pi_bar[idx].size; | ||||
if (registration) { | if (registration) { | ||||
iop.flags = IOPORT_F_INOUT; | iop.flags = IOPORT_F_INOUT; | ||||
iop.handler = pci_emul_io_handler; | iop.handler = pci_emul_io_handler; | ||||
iop.arg = pi; | iop.arg = pi; | ||||
error = register_inout(&iop); | error = register_inout(&iop); | ||||
} else | } else | ||||
error = unregister_inout(&iop); | error = unregister_inout(&iop); | ||||
if (pe->pe_baraddr != NULL) | |||||
(*pe->pe_baraddr)(pi, idx, registration, | |||||
pi->pi_bar[idx].addr); | |||||
break; | break; | ||||
case PCIBAR_MEM32: | case PCIBAR_MEM32: | ||||
case PCIBAR_MEM64: | case PCIBAR_MEM64: | ||||
bzero(&mr, sizeof(struct mem_range)); | bzero(&mr, sizeof(struct mem_range)); | ||||
mr.name = pi->pi_name; | mr.name = pi->pi_name; | ||||
mr.base = pi->pi_bar[idx].addr; | mr.base = pi->pi_bar[idx].addr; | ||||
mr.size = pi->pi_bar[idx].size; | mr.size = pi->pi_bar[idx].size; | ||||
if (registration) { | if (registration) { | ||||
mr.flags = MEM_F_RW; | mr.flags = MEM_F_RW; | ||||
mr.handler = pci_emul_mem_handler; | mr.handler = pci_emul_mem_handler; | ||||
mr.arg1 = pi; | mr.arg1 = pi; | ||||
mr.arg2 = idx; | mr.arg2 = idx; | ||||
error = register_mem(&mr); | error = register_mem(&mr); | ||||
} else | } else | ||||
error = unregister_mem(&mr); | error = unregister_mem(&mr); | ||||
if (pe->pe_baraddr != NULL) | |||||
(*pe->pe_baraddr)(pi, idx, registration, | |||||
pi->pi_bar[idx].addr); | |||||
break; | break; | ||||
case PCIBAR_ROM: | case PCIBAR_ROM: | ||||
error = 0; | error = 0; | ||||
if (pe->pe_baraddr != NULL) | |||||
(*pe->pe_baraddr)(pi, idx, registration, | |||||
pi->pi_bar[idx].addr); | |||||
break; | break; | ||||
default: | default: | ||||
error = EINVAL; | error = EINVAL; | ||||
break; | break; | ||||
} | } | ||||
assert(error == 0); | assert(error == 0); | ||||
if (pe->pe_baraddr != NULL) | |||||
(*pe->pe_baraddr)(pi, idx, registration, pi->pi_bar[idx].addr); | |||||
} | } | ||||
static void | static void | ||||
unregister_bar(struct pci_devinst *pi, int idx) | unregister_bar(struct pci_devinst *pi, int idx) | ||||
{ | { | ||||
modify_bar_registration(pi, idx, 0); | modify_bar_registration(pi, idx, 0); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 2,072 Lines • Show Last 20 Lines |