diff options
Diffstat (limited to 'sys/amd64/vmm/amd/amdvi_hw.c')
| -rw-r--r-- | sys/amd64/vmm/amd/amdvi_hw.c | 52 | 
1 files changed, 27 insertions, 25 deletions
| diff --git a/sys/amd64/vmm/amd/amdvi_hw.c b/sys/amd64/vmm/amd/amdvi_hw.c index 87270b24c9f6..831c31277570 100644 --- a/sys/amd64/vmm/amd/amdvi_hw.c +++ b/sys/amd64/vmm/amd/amdvi_hw.c @@ -1,5 +1,5 @@  /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause   *   * Copyright (c) 2016, Anish Gupta (anish@freebsd.org)   * All rights reserved. @@ -26,9 +26,6 @@   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.   */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); -  #include <sys/param.h>  #include <sys/systm.h>  #include <sys/bus.h> @@ -127,7 +124,7 @@ static inline uint32_t  amdvi_pci_read(struct amdvi_softc *softc, int off)  { -	return (pci_cfgregread(PCI_RID2BUS(softc->pci_rid), +	return (pci_cfgregread(softc->pci_seg, PCI_RID2BUS(softc->pci_rid),  	    PCI_RID2SLOT(softc->pci_rid), PCI_RID2FUNC(softc->pci_rid),  	    off, 4));  } @@ -931,8 +928,8 @@ amdvi_teardown_hw(struct amdvi_softc *softc)  	dev = softc->dev; -	/*  -	 * Called after disable, h/w is stopped by now, free all the resources.  +	/* +	 * Called after disable, h/w is stopped by now, free all the resources.  	 */  	amdvi_free_evt_intr_res(dev); @@ -1158,9 +1155,9 @@ amdvi_update_mapping(struct amdvi_domain *domain, vm_paddr_t gpa,  	return (mapped);  } -static uint64_t +static int  amdvi_create_mapping(void *arg, vm_paddr_t gpa, vm_paddr_t hpa, -    uint64_t len) +    uint64_t len, uint64_t *res_len)  {  	struct amdvi_domain *domain; @@ -1168,7 +1165,7 @@ amdvi_create_mapping(void *arg, vm_paddr_t gpa, vm_paddr_t hpa,  	if (domain->id && !domain->ptp) {  		printf("ptp is NULL"); -		return (-1); +		return (EINVAL);  	}  	/* @@ -1176,13 +1173,14 @@ amdvi_create_mapping(void *arg, vm_paddr_t gpa, vm_paddr_t hpa,  	 * table set-up.  	 */  	if (domain->ptp) -		return (amdvi_update_mapping(domain, gpa, hpa, len, true)); +		*res_len = amdvi_update_mapping(domain, gpa, hpa, len, true);  	else -		return (len); +		*res_len = len; +	return (0);  } -static uint64_t -amdvi_remove_mapping(void *arg, vm_paddr_t gpa, uint64_t len) +static int +amdvi_remove_mapping(void *arg, vm_paddr_t gpa, uint64_t len, uint64_t *res_len)  {  	struct amdvi_domain *domain; @@ -1192,9 +1190,10 @@ amdvi_remove_mapping(void *arg, vm_paddr_t gpa, uint64_t len)  	 * table set-up.  	 */  	if (domain->ptp) -		return (amdvi_update_mapping(domain, gpa, 0, len, false)); -	return -	    (len); +		*res_len = amdvi_update_mapping(domain, gpa, 0, len, false); +	else +		*res_len = len; +	return (0);  }  static struct amdvi_softc * @@ -1271,8 +1270,8 @@ amdvi_inv_device(struct amdvi_softc *softc, uint16_t devid)  	amdvi_wait(softc);  } -static void -amdvi_add_device(void *arg, uint16_t devid) +static int +amdvi_add_device(void *arg, device_t dev __unused, uint16_t devid)  {  	struct amdvi_domain *domain;  	struct amdvi_softc *softc; @@ -1285,13 +1284,14 @@ amdvi_add_device(void *arg, uint16_t devid)  #endif  	softc = amdvi_find_iommu(devid);  	if (softc == NULL) -		return; +		return (ENXIO);  	amdvi_set_dte(domain, softc, devid, true);  	amdvi_inv_device(softc, devid); +	return (0);  } -static void -amdvi_remove_device(void *arg, uint16_t devid) +static int +amdvi_remove_device(void *arg, device_t dev __unused, uint16_t devid)  {  	struct amdvi_domain *domain;  	struct amdvi_softc *softc; @@ -1303,9 +1303,10 @@ amdvi_remove_device(void *arg, uint16_t devid)  #endif  	softc = amdvi_find_iommu(devid);  	if (softc == NULL) -		return; +		return (ENXIO);  	amdvi_set_dte(domain, softc, devid, false);  	amdvi_inv_device(softc, devid); +	return (0);  }  static void @@ -1360,7 +1361,7 @@ amdvi_disable(void)  	}  } -static void +static int  amdvi_invalidate_tlb(void *arg)  {  	struct amdvi_domain *domain; @@ -1368,6 +1369,7 @@ amdvi_invalidate_tlb(void *arg)  	domain = (struct amdvi_domain *)arg;  	KASSERT(domain, ("domain is NULL"));  	amdvi_do_inv_domain(domain->id, false); +	return (0);  }  const struct iommu_ops iommu_ops_amd = { @@ -1381,5 +1383,5 @@ const struct iommu_ops iommu_ops_amd = {  	.remove_mapping = amdvi_remove_mapping,  	.add_device = amdvi_add_device,  	.remove_device = amdvi_remove_device, -	.invalidate_tlb = amdvi_invalidate_tlb +	.invalidate_tlb = amdvi_invalidate_tlb,  }; | 
