24 */
25 /*
26 * Copyright (c) 2009, Intel Corporation.
27 * All rights reserved.
28 */
29 /*
30 * Copyright 2012 Garrett D'Amore <garrett@damore.org>. All rights reserved.
31 */
32
33 /*
34 * DVMA code
35 * This file contains Intel IOMMU code that deals with DVMA
36 * i.e. DMA remapping.
37 */
38
39 #include <sys/sysmacros.h>
40 #include <sys/pcie.h>
41 #include <sys/pci_cfgspace.h>
42 #include <vm/hat_i86.h>
43 #include <sys/memlist.h>
44 #include <sys/acpi/acpi.h>
45 #include <sys/acpica.h>
46 #include <sys/modhash.h>
47 #include <sys/immu.h>
48 #include <sys/x86_archext.h>
49 #include <sys/archsystm.h>
50
51 #undef TEST
52
53 /*
54 * Macros based on PCI spec
55 */
56 #define IMMU_PCI_REV2CLASS(r) ((r) >> 8) /* classcode from revid */
57 #define IMMU_PCI_CLASS2BASE(c) ((c) >> 16) /* baseclass from classcode */
58 #define IMMU_PCI_CLASS2SUB(c) (((c) >> 8) & 0xff); /* classcode */
59
60 #define IMMU_CONTIG_PADDR(d, p) \
61 ((d).dck_paddr && ((d).dck_paddr + IMMU_PAGESIZE) == (p))
62
63 typedef struct dvma_arg {
64 immu_t *dva_immu;
|
24 */
25 /*
26 * Copyright (c) 2009, Intel Corporation.
27 * All rights reserved.
28 */
29 /*
30 * Copyright 2012 Garrett D'Amore <garrett@damore.org>. All rights reserved.
31 */
32
33 /*
34 * DVMA code
35 * This file contains Intel IOMMU code that deals with DVMA
36 * i.e. DMA remapping.
37 */
38
39 #include <sys/sysmacros.h>
40 #include <sys/pcie.h>
41 #include <sys/pci_cfgspace.h>
42 #include <vm/hat_i86.h>
43 #include <sys/memlist.h>
44 #include <acpica/include/acpi.h>
45 #include <sys/acpica.h>
46 #include <sys/modhash.h>
47 #include <sys/immu.h>
48 #include <sys/x86_archext.h>
49 #include <sys/archsystm.h>
50
51 #undef TEST
52
53 /*
54 * Macros based on PCI spec
55 */
56 #define IMMU_PCI_REV2CLASS(r) ((r) >> 8) /* classcode from revid */
57 #define IMMU_PCI_CLASS2BASE(c) ((c) >> 16) /* baseclass from classcode */
58 #define IMMU_PCI_CLASS2SUB(c) (((c) >> 8) & 0xff); /* classcode */
59
60 #define IMMU_CONTIG_PADDR(d, p) \
61 ((d).dck_paddr && ((d).dck_paddr + IMMU_PAGESIZE) == (p))
62
63 typedef struct dvma_arg {
64 immu_t *dva_immu;
|