110535SVikram.Hegde@Sun.COM /* 210535SVikram.Hegde@Sun.COM * CDDL HEADER START 310535SVikram.Hegde@Sun.COM * 410535SVikram.Hegde@Sun.COM * The contents of this file are subject to the terms of the 510535SVikram.Hegde@Sun.COM * Common Development and Distribution License (the "License"). 610535SVikram.Hegde@Sun.COM * You may not use this file except in compliance with the License. 710535SVikram.Hegde@Sun.COM * 810535SVikram.Hegde@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 910535SVikram.Hegde@Sun.COM * or http://www.opensolaris.org/os/licensing. 1010535SVikram.Hegde@Sun.COM * See the License for the specific language governing permissions 1110535SVikram.Hegde@Sun.COM * and limitations under the License. 1210535SVikram.Hegde@Sun.COM * 1310535SVikram.Hegde@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 1410535SVikram.Hegde@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1510535SVikram.Hegde@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 1610535SVikram.Hegde@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 1710535SVikram.Hegde@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 1810535SVikram.Hegde@Sun.COM * 1910535SVikram.Hegde@Sun.COM * CDDL HEADER END 2010535SVikram.Hegde@Sun.COM */ 2110535SVikram.Hegde@Sun.COM /* 22*12203SJerry.Gilliam@Sun.COM * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. 2310535SVikram.Hegde@Sun.COM */ 2410535SVikram.Hegde@Sun.COM 2510535SVikram.Hegde@Sun.COM #ifndef _AMD_IOMMU_ACPI_H 2610535SVikram.Hegde@Sun.COM #define _AMD_IOMMU_ACPI_H 2710535SVikram.Hegde@Sun.COM 2810535SVikram.Hegde@Sun.COM #ifdef __cplusplus 2910535SVikram.Hegde@Sun.COM extern "C" { 3010535SVikram.Hegde@Sun.COM #endif 3110535SVikram.Hegde@Sun.COM 3210535SVikram.Hegde@Sun.COM #include <sys/sunddi.h> 3310535SVikram.Hegde@Sun.COM #include <sys/acpi/acpi.h> 3410535SVikram.Hegde@Sun.COM #include <sys/acpica.h> 3510535SVikram.Hegde@Sun.COM #include <sys/amd_iommu.h> 3610535SVikram.Hegde@Sun.COM #include "amd_iommu_impl.h" 3710535SVikram.Hegde@Sun.COM 3810535SVikram.Hegde@Sun.COM #ifdef _KERNEL 3910535SVikram.Hegde@Sun.COM 4010535SVikram.Hegde@Sun.COM #define IVRS_SIG "IVRS" 4110535SVikram.Hegde@Sun.COM 4210535SVikram.Hegde@Sun.COM /* 4310535SVikram.Hegde@Sun.COM * IVINFO settings 4410535SVikram.Hegde@Sun.COM */ 4510535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVINFO_RSV1 (31 << 16 | 23) 4610535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_HT_ATSRSV (22 << 16 | 22) 4710535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_VA_SIZE (21 << 16 | 15) 4810535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_PA_SIZE (14 << 16 | 8) 4910535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVINFO_RSV2 (7 << 16 | 0) 5010535SVikram.Hegde@Sun.COM 5110535SVikram.Hegde@Sun.COM /* 5210535SVikram.Hegde@Sun.COM * IVHD Device entry len field 5310535SVikram.Hegde@Sun.COM */ 5410535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_DEVENTRY_LEN (7 << 16 | 6) 5510535SVikram.Hegde@Sun.COM 5610535SVikram.Hegde@Sun.COM /* 5710535SVikram.Hegde@Sun.COM * IVHD flag fields definition 5810535SVikram.Hegde@Sun.COM */ 5910535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVHD_FLAGS_RSV (7 << 16 | 5) 6010535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVHD_FLAGS_IOTLBSUP (4 << 16 | 4) 6110535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVHD_FLAGS_ISOC (3 << 16 | 3) 6210535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVHD_FLAGS_RESPASSPW (2 << 16 | 2) 6310535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVHD_FLAGS_PASSPW (1 << 16 | 1) 6410535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVHD_FLAGS_HTTUNEN (0 << 16 | 0) 6510535SVikram.Hegde@Sun.COM 6610535SVikram.Hegde@Sun.COM /* 6710535SVikram.Hegde@Sun.COM * IVHD IOMMU info fields 6810535SVikram.Hegde@Sun.COM */ 6910535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IOMMU_INFO_RSV1 (15 << 16 | 13) 7010535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IOMMU_INFO_UNITID (12 << 16 | 8) 7110535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IOMMU_INFO_RSV2 (7 << 16 | 5) 7210535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IOMMU_INFO_MSINUM (4 << 16 | 0) 7310535SVikram.Hegde@Sun.COM 7410535SVikram.Hegde@Sun.COM /* 7510535SVikram.Hegde@Sun.COM * IVHD deventry data settings 7610535SVikram.Hegde@Sun.COM */ 7710535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_LINT1PASS (7 << 16 | 7) 7810535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_LINT0PASS (6 << 16 | 6) 7910535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_SYSMGT (5 << 16 | 4) 8010535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_DATRSV (3 << 16 | 3) 8110535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_NMIPASS (2 << 16 | 2) 8210535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_EXTINTPASS (1 << 16 | 1) 8310535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_INITPASS (0 << 16 | 0) 8410535SVikram.Hegde@Sun.COM 8510535SVikram.Hegde@Sun.COM /* 8610535SVikram.Hegde@Sun.COM * IVHD deventry extended data settings 8710535SVikram.Hegde@Sun.COM */ 8810535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_ATSDISABLED (31 << 16 | 31) 8910535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_EXTDATRSV (30 << 16 | 0) 9010535SVikram.Hegde@Sun.COM 9110535SVikram.Hegde@Sun.COM /* 9210535SVikram.Hegde@Sun.COM * IVMD flags fields settings 9310535SVikram.Hegde@Sun.COM */ 9410535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVMD_RSV (7 << 16 | 4) 9510535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVMD_EXCL_RANGE (3 << 16 | 3) 9610535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVMD_IW (2 << 16 | 2) 9710535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVMD_IR (1 << 16 | 1) 9810535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_IVMD_UNITY (0 << 16 | 0) 9910535SVikram.Hegde@Sun.COM 10010535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_INFO_HASH_SZ (256) 10110535SVikram.Hegde@Sun.COM 10210535SVikram.Hegde@Sun.COM /* 10310535SVikram.Hegde@Sun.COM * Deventry special device "variety" 10410535SVikram.Hegde@Sun.COM */ 10510535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_SPECIAL_APIC 0x1 10610535SVikram.Hegde@Sun.COM #define AMD_IOMMU_ACPI_SPECIAL_HPET 0x2 10710535SVikram.Hegde@Sun.COM 10810535SVikram.Hegde@Sun.COM typedef enum { 10910535SVikram.Hegde@Sun.COM DEVENTRY_INVALID = 0, 11010535SVikram.Hegde@Sun.COM DEVENTRY_ALL = 1, 11110535SVikram.Hegde@Sun.COM DEVENTRY_SELECT, 11210535SVikram.Hegde@Sun.COM DEVENTRY_RANGE, 11310535SVikram.Hegde@Sun.COM DEVENTRY_RANGE_END, 11410535SVikram.Hegde@Sun.COM DEVENTRY_ALIAS_SELECT, 11510535SVikram.Hegde@Sun.COM DEVENTRY_ALIAS_RANGE, 11610535SVikram.Hegde@Sun.COM DEVENTRY_EXTENDED_SELECT, 11710535SVikram.Hegde@Sun.COM DEVENTRY_EXTENDED_RANGE, 11810535SVikram.Hegde@Sun.COM DEVENTRY_SPECIAL_DEVICE 11910535SVikram.Hegde@Sun.COM } ivhd_deventry_type_t; 12010535SVikram.Hegde@Sun.COM 12110535SVikram.Hegde@Sun.COM typedef enum { 12210535SVikram.Hegde@Sun.COM IVMD_DEVICE_INVALID = 0, 12310535SVikram.Hegde@Sun.COM IVMD_DEVICEID_ALL, 12410535SVikram.Hegde@Sun.COM IVMD_DEVICEID_SELECT, 12510535SVikram.Hegde@Sun.COM IVMD_DEVICEID_RANGE 12610535SVikram.Hegde@Sun.COM } ivmd_deviceid_type_t; 12710535SVikram.Hegde@Sun.COM 12810535SVikram.Hegde@Sun.COM typedef struct ivhd_deventry { 12910535SVikram.Hegde@Sun.COM uint8_t idev_len; 13010535SVikram.Hegde@Sun.COM ivhd_deventry_type_t idev_type; 13110535SVikram.Hegde@Sun.COM int32_t idev_deviceid; 13210535SVikram.Hegde@Sun.COM int32_t idev_src_deviceid; 13310535SVikram.Hegde@Sun.COM uint8_t idev_handle; 13410535SVikram.Hegde@Sun.COM uint8_t idev_variety; 13510535SVikram.Hegde@Sun.COM uint8_t idev_Lint1Pass; 13610535SVikram.Hegde@Sun.COM uint8_t idev_Lint0Pass; 13710535SVikram.Hegde@Sun.COM uint8_t idev_SysMgt; 13810535SVikram.Hegde@Sun.COM uint8_t idev_NMIPass; 13910535SVikram.Hegde@Sun.COM uint8_t idev_ExtIntPass; 14010535SVikram.Hegde@Sun.COM uint8_t idev_INITPass; 14110535SVikram.Hegde@Sun.COM uint8_t idev_AtsDisabled; 14210535SVikram.Hegde@Sun.COM struct ivhd_deventry *idev_next; 14310535SVikram.Hegde@Sun.COM } ivhd_deventry_t; 14410535SVikram.Hegde@Sun.COM 14510535SVikram.Hegde@Sun.COM typedef struct ivhd { 14610535SVikram.Hegde@Sun.COM uint8_t ivhd_type; 14710535SVikram.Hegde@Sun.COM uint8_t ivhd_flags; 14810535SVikram.Hegde@Sun.COM uint16_t ivhd_len; 14910535SVikram.Hegde@Sun.COM uint16_t ivhd_deviceid; 15010535SVikram.Hegde@Sun.COM uint16_t ivhd_cap_off; 15110535SVikram.Hegde@Sun.COM uint64_t ivhd_reg_base; 15210535SVikram.Hegde@Sun.COM uint16_t ivhd_pci_seg; 15310535SVikram.Hegde@Sun.COM uint16_t ivhd_iommu_info; 15410535SVikram.Hegde@Sun.COM uint32_t ivhd_resv; 15510535SVikram.Hegde@Sun.COM } ivhd_t; 15610535SVikram.Hegde@Sun.COM 15710535SVikram.Hegde@Sun.COM typedef struct ivhd_container { 15810535SVikram.Hegde@Sun.COM ivhd_t *ivhdc_ivhd; 15910535SVikram.Hegde@Sun.COM ivhd_deventry_t *ivhdc_first_deventry; 16010535SVikram.Hegde@Sun.COM ivhd_deventry_t *ivhdc_last_deventry; 16110535SVikram.Hegde@Sun.COM struct ivhd_container *ivhdc_next; 16210535SVikram.Hegde@Sun.COM } ivhd_container_t; 16310535SVikram.Hegde@Sun.COM 16410535SVikram.Hegde@Sun.COM typedef struct ivmd { 16510535SVikram.Hegde@Sun.COM uint8_t ivmd_type; 16610535SVikram.Hegde@Sun.COM uint8_t ivmd_flags; 16710535SVikram.Hegde@Sun.COM uint16_t ivmd_len; 16810535SVikram.Hegde@Sun.COM uint16_t ivmd_deviceid; 16910535SVikram.Hegde@Sun.COM uint16_t ivmd_auxdata; 17010535SVikram.Hegde@Sun.COM uint64_t ivmd_resv; 17110535SVikram.Hegde@Sun.COM uint64_t ivmd_phys_start; 17210535SVikram.Hegde@Sun.COM uint64_t ivmd_phys_len; 17310535SVikram.Hegde@Sun.COM } ivmd_t; 17410535SVikram.Hegde@Sun.COM 17510535SVikram.Hegde@Sun.COM typedef struct ivmd_container { 17610535SVikram.Hegde@Sun.COM ivmd_t *ivmdc_ivmd; 17710535SVikram.Hegde@Sun.COM struct ivmd_container *ivmdc_next; 17810535SVikram.Hegde@Sun.COM } ivmd_container_t; 17910535SVikram.Hegde@Sun.COM 18010535SVikram.Hegde@Sun.COM typedef struct ivrs { 18110535SVikram.Hegde@Sun.COM struct acpi_table_header ivrs_hdr; 18210535SVikram.Hegde@Sun.COM uint32_t ivrs_ivinfo; 18310535SVikram.Hegde@Sun.COM uint64_t ivrs_resv; 18410535SVikram.Hegde@Sun.COM } ivrs_t; 18510535SVikram.Hegde@Sun.COM 18610535SVikram.Hegde@Sun.COM typedef struct amd_iommu_acpi { 18710535SVikram.Hegde@Sun.COM struct ivrs *acp_ivrs; 18810535SVikram.Hegde@Sun.COM ivhd_container_t *acp_first_ivhdc; 18910535SVikram.Hegde@Sun.COM ivhd_container_t *acp_last_ivhdc; 19010535SVikram.Hegde@Sun.COM ivmd_container_t *acp_first_ivmdc; 19110535SVikram.Hegde@Sun.COM ivmd_container_t *acp_last_ivmdc; 19210535SVikram.Hegde@Sun.COM } amd_iommu_acpi_t; 19310535SVikram.Hegde@Sun.COM 19410535SVikram.Hegde@Sun.COM 19510535SVikram.Hegde@Sun.COM /* Global IVINFo fields */ 19610535SVikram.Hegde@Sun.COM typedef struct amd_iommu_acpi_global { 19710535SVikram.Hegde@Sun.COM uint8_t acg_HtAtsResv; 19810535SVikram.Hegde@Sun.COM uint8_t acg_VAsize; 19910535SVikram.Hegde@Sun.COM uint8_t acg_PAsize; 20010535SVikram.Hegde@Sun.COM } amd_iommu_acpi_global_t; 20110535SVikram.Hegde@Sun.COM 20210535SVikram.Hegde@Sun.COM typedef struct amd_iommu_acpi_ivhd { 20310535SVikram.Hegde@Sun.COM int32_t ach_deviceid_start; 20410535SVikram.Hegde@Sun.COM int32_t ach_deviceid_end; 20510535SVikram.Hegde@Sun.COM 20610535SVikram.Hegde@Sun.COM /* IVHD deventry type */ 20710535SVikram.Hegde@Sun.COM ivhd_deventry_type_t ach_dev_type; 20810535SVikram.Hegde@Sun.COM 20910535SVikram.Hegde@Sun.COM /* IVHD flag fields */ 21010535SVikram.Hegde@Sun.COM uint8_t ach_IotlbSup; 21110535SVikram.Hegde@Sun.COM uint8_t ach_Isoc; 21210535SVikram.Hegde@Sun.COM uint8_t ach_ResPassPW; 21310535SVikram.Hegde@Sun.COM uint8_t ach_PassPW; 21410535SVikram.Hegde@Sun.COM uint8_t ach_HtTunEn; 21510535SVikram.Hegde@Sun.COM 21610535SVikram.Hegde@Sun.COM /* IVHD fields */ 21710535SVikram.Hegde@Sun.COM uint16_t ach_IOMMU_deviceid; 21810535SVikram.Hegde@Sun.COM uint16_t ach_IOMMU_cap_off; 21910535SVikram.Hegde@Sun.COM uint64_t ach_IOMMU_reg_base; 22010535SVikram.Hegde@Sun.COM uint16_t ach_IOMMU_pci_seg; 22110535SVikram.Hegde@Sun.COM 22210535SVikram.Hegde@Sun.COM /* IVHD IOMMU info fields */ 22310535SVikram.Hegde@Sun.COM uint8_t ach_IOMMU_UnitID; 22410535SVikram.Hegde@Sun.COM uint8_t ach_IOMMU_MSInum; 22510535SVikram.Hegde@Sun.COM 22610535SVikram.Hegde@Sun.COM /* IVHD deventry data settings */ 22710535SVikram.Hegde@Sun.COM uint8_t ach_Lint1Pass; 22810535SVikram.Hegde@Sun.COM uint8_t ach_Lint0Pass; 22910535SVikram.Hegde@Sun.COM uint8_t ach_SysMgt; 23010535SVikram.Hegde@Sun.COM uint8_t ach_NMIPass; 23110535SVikram.Hegde@Sun.COM uint8_t ach_ExtIntPass; 23210535SVikram.Hegde@Sun.COM uint8_t ach_INITPass; 23310535SVikram.Hegde@Sun.COM 23410535SVikram.Hegde@Sun.COM /* alias */ 23510535SVikram.Hegde@Sun.COM int32_t ach_src_deviceid; 23610535SVikram.Hegde@Sun.COM 23710535SVikram.Hegde@Sun.COM /* IVHD deventry extended data settings */ 23810535SVikram.Hegde@Sun.COM uint8_t ach_AtsDisabled; 23910535SVikram.Hegde@Sun.COM 24010535SVikram.Hegde@Sun.COM /* IVHD deventry special device */ 24110535SVikram.Hegde@Sun.COM uint8_t ach_special_handle; 24210535SVikram.Hegde@Sun.COM uint8_t ach_special_variety; 24310535SVikram.Hegde@Sun.COM 24410535SVikram.Hegde@Sun.COM struct amd_iommu_acpi_ivhd *ach_next; 24510535SVikram.Hegde@Sun.COM } amd_iommu_acpi_ivhd_t; 24610535SVikram.Hegde@Sun.COM 24710535SVikram.Hegde@Sun.COM typedef struct amd_iommu_acpi_ivmd { 24810535SVikram.Hegde@Sun.COM int32_t acm_deviceid_start; 24910535SVikram.Hegde@Sun.COM int32_t acm_deviceid_end; 25010535SVikram.Hegde@Sun.COM 25110535SVikram.Hegde@Sun.COM /* IVMD type */ 25210535SVikram.Hegde@Sun.COM ivmd_deviceid_type_t acm_dev_type; 25310535SVikram.Hegde@Sun.COM 25410535SVikram.Hegde@Sun.COM /* IVMD flags */ 25510535SVikram.Hegde@Sun.COM uint8_t acm_ExclRange; 25610535SVikram.Hegde@Sun.COM uint8_t acm_IW; 25710535SVikram.Hegde@Sun.COM uint8_t acm_IR; 25810535SVikram.Hegde@Sun.COM uint8_t acm_Unity; 25910535SVikram.Hegde@Sun.COM 26010535SVikram.Hegde@Sun.COM /* IVMD mem block */ 26110535SVikram.Hegde@Sun.COM uint64_t acm_ivmd_phys_start; 26210535SVikram.Hegde@Sun.COM uint64_t acm_ivmd_phys_len; 26310535SVikram.Hegde@Sun.COM 26410535SVikram.Hegde@Sun.COM struct amd_iommu_acpi_ivmd *acm_next; 26510535SVikram.Hegde@Sun.COM } amd_iommu_acpi_ivmd_t; 26610535SVikram.Hegde@Sun.COM 26710535SVikram.Hegde@Sun.COM typedef union { 26810535SVikram.Hegde@Sun.COM uint16_t ent16; 26910535SVikram.Hegde@Sun.COM uint8_t ent8[2]; 27010535SVikram.Hegde@Sun.COM } align_16_t; 27110535SVikram.Hegde@Sun.COM 27210535SVikram.Hegde@Sun.COM typedef union { 27310535SVikram.Hegde@Sun.COM uint32_t ent32; 27410535SVikram.Hegde@Sun.COM uint8_t ent8[4]; 27510535SVikram.Hegde@Sun.COM } align_32_t; 27610535SVikram.Hegde@Sun.COM 27710535SVikram.Hegde@Sun.COM typedef union { 27810535SVikram.Hegde@Sun.COM ivhd_t *ivhdp; 27910535SVikram.Hegde@Sun.COM char *cp; 28010535SVikram.Hegde@Sun.COM } align_ivhd_t; 28110535SVikram.Hegde@Sun.COM 28210535SVikram.Hegde@Sun.COM typedef union { 28310535SVikram.Hegde@Sun.COM ivmd_t *ivmdp; 28410535SVikram.Hegde@Sun.COM char *cp; 28510535SVikram.Hegde@Sun.COM } align_ivmd_t; 28610535SVikram.Hegde@Sun.COM 28710535SVikram.Hegde@Sun.COM #pragma pack() 28810535SVikram.Hegde@Sun.COM 28910535SVikram.Hegde@Sun.COM int amd_iommu_acpi_init(void); 29010535SVikram.Hegde@Sun.COM void amd_iommu_acpi_fini(void); 29110535SVikram.Hegde@Sun.COM amd_iommu_acpi_ivhd_t *amd_iommu_lookup_all_ivhd(void); 29210535SVikram.Hegde@Sun.COM amd_iommu_acpi_ivmd_t *amd_iommu_lookup_all_ivmd(void); 293*12203SJerry.Gilliam@Sun.COM amd_iommu_acpi_ivhd_t *amd_iommu_lookup_any_ivhd(amd_iommu_t *); 29410535SVikram.Hegde@Sun.COM amd_iommu_acpi_ivmd_t *amd_iommu_lookup_any_ivmd(void); 29510535SVikram.Hegde@Sun.COM amd_iommu_acpi_global_t *amd_iommu_lookup_acpi_global(void); 29610535SVikram.Hegde@Sun.COM amd_iommu_acpi_ivhd_t *amd_iommu_lookup_ivhd(int32_t deviceid); 29710535SVikram.Hegde@Sun.COM amd_iommu_acpi_ivmd_t *amd_iommu_lookup_ivmd(int32_t deviceid); 298*12203SJerry.Gilliam@Sun.COM int amd_iommu_acpi_init_devtbl(amd_iommu_t *iommu); 29910535SVikram.Hegde@Sun.COM 30010535SVikram.Hegde@Sun.COM #endif /* _KERNEL */ 30110535SVikram.Hegde@Sun.COM 30210535SVikram.Hegde@Sun.COM #ifdef __cplusplus 30310535SVikram.Hegde@Sun.COM } 30410535SVikram.Hegde@Sun.COM #endif 30510535SVikram.Hegde@Sun.COM 30610535SVikram.Hegde@Sun.COM #endif /* _AMD_IOMMU_ACPI_H */ 307