Changeset View
Changeset View
Standalone View
Standalone View
usr.sbin/bhyve/virtio.c
Show First 20 Lines • Show All 597 Lines • ▼ Show 20 Lines | if (offset >= virtio_config_size) { | ||||
* Subtract off the standard size (including MSI-X | * Subtract off the standard size (including MSI-X | ||||
* registers if enabled) and dispatch to underlying driver. | * registers if enabled) and dispatch to underlying driver. | ||||
* If that fails, fall into general code. | * If that fails, fall into general code. | ||||
*/ | */ | ||||
newoff = offset - virtio_config_size; | newoff = offset - virtio_config_size; | ||||
max = vc->vc_cfgsize ? vc->vc_cfgsize : 0x100000000; | max = vc->vc_cfgsize ? vc->vc_cfgsize : 0x100000000; | ||||
if (newoff + size > max) | if (newoff + size > max) | ||||
goto bad; | goto bad; | ||||
if (vc->vc_cfgread != NULL) | |||||
error = (*vc->vc_cfgread)(DEV_SOFTC(vs), newoff, size, &value); | error = (*vc->vc_cfgread)(DEV_SOFTC(vs), newoff, size, &value); | ||||
else | |||||
error = 0; | |||||
if (!error) | if (!error) | ||||
goto done; | goto done; | ||||
} | } | ||||
bad: | bad: | ||||
cr = vi_find_cr(offset); | cr = vi_find_cr(offset); | ||||
if (cr == NULL || cr->cr_size != size) { | if (cr == NULL || cr->cr_size != size) { | ||||
if (cr != NULL) { | if (cr != NULL) { | ||||
▲ Show 20 Lines • Show All 99 Lines • ▼ Show 20 Lines | if (offset >= virtio_config_size) { | ||||
/* | /* | ||||
* Subtract off the standard size (including MSI-X | * Subtract off the standard size (including MSI-X | ||||
* registers if enabled) and dispatch to underlying driver. | * registers if enabled) and dispatch to underlying driver. | ||||
*/ | */ | ||||
newoff = offset - virtio_config_size; | newoff = offset - virtio_config_size; | ||||
max = vc->vc_cfgsize ? vc->vc_cfgsize : 0x100000000; | max = vc->vc_cfgsize ? vc->vc_cfgsize : 0x100000000; | ||||
if (newoff + size > max) | if (newoff + size > max) | ||||
goto bad; | goto bad; | ||||
if (vc->vc_cfgwrite != NULL) | |||||
error = (*vc->vc_cfgwrite)(DEV_SOFTC(vs), newoff, size, value); | error = (*vc->vc_cfgwrite)(DEV_SOFTC(vs), newoff, size, value); | ||||
else | |||||
error = 0; | |||||
if (!error) | if (!error) | ||||
goto done; | goto done; | ||||
} | } | ||||
bad: | bad: | ||||
cr = vi_find_cr(offset); | cr = vi_find_cr(offset); | ||||
if (cr == NULL || cr->cr_size != size || cr->cr_ro) { | if (cr == NULL || cr->cr_size != size || cr->cr_ro) { | ||||
if (cr != NULL) { | if (cr != NULL) { | ||||
▲ Show 20 Lines • Show All 225 Lines • Show Last 20 Lines |