17613SVikram.Hegde@Sun.COM /* 27613SVikram.Hegde@Sun.COM * CDDL HEADER START 37613SVikram.Hegde@Sun.COM * 47613SVikram.Hegde@Sun.COM * The contents of this file are subject to the terms of the 57613SVikram.Hegde@Sun.COM * Common Development and Distribution License (the "License"). 67613SVikram.Hegde@Sun.COM * You may not use this file except in compliance with the License. 77613SVikram.Hegde@Sun.COM * 87613SVikram.Hegde@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97613SVikram.Hegde@Sun.COM * or http://www.opensolaris.org/os/licensing. 107613SVikram.Hegde@Sun.COM * See the License for the specific language governing permissions 117613SVikram.Hegde@Sun.COM * and limitations under the License. 127613SVikram.Hegde@Sun.COM * 137613SVikram.Hegde@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 147613SVikram.Hegde@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157613SVikram.Hegde@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 167613SVikram.Hegde@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 177613SVikram.Hegde@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 187613SVikram.Hegde@Sun.COM * 197613SVikram.Hegde@Sun.COM * CDDL HEADER END 207613SVikram.Hegde@Sun.COM */ 217613SVikram.Hegde@Sun.COM /* 227613SVikram.Hegde@Sun.COM * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 237613SVikram.Hegde@Sun.COM * Use is subject to license terms. 247613SVikram.Hegde@Sun.COM */ 257613SVikram.Hegde@Sun.COM 267613SVikram.Hegde@Sun.COM #ifndef _SYS_IOMMULIB_H 277613SVikram.Hegde@Sun.COM #define _SYS_IOMMULIB_H 287613SVikram.Hegde@Sun.COM 297613SVikram.Hegde@Sun.COM #pragma ident "@(#)iommulib.h 1.3 08/08/31 SMI" 307613SVikram.Hegde@Sun.COM 317613SVikram.Hegde@Sun.COM #ifdef __cplusplus 327613SVikram.Hegde@Sun.COM extern "C" { 337613SVikram.Hegde@Sun.COM #endif 347613SVikram.Hegde@Sun.COM 357613SVikram.Hegde@Sun.COM #include <sys/ddi_impldefs.h> 367613SVikram.Hegde@Sun.COM 377613SVikram.Hegde@Sun.COM #ifdef _KERNEL 387613SVikram.Hegde@Sun.COM 397613SVikram.Hegde@Sun.COM typedef enum { 407613SVikram.Hegde@Sun.COM INVALID_VENDOR = 0, 417613SVikram.Hegde@Sun.COM AMD_IOMMU, 427613SVikram.Hegde@Sun.COM INTEL_IOMMU 437613SVikram.Hegde@Sun.COM } iommulib_vendor_t; 447613SVikram.Hegde@Sun.COM 457613SVikram.Hegde@Sun.COM typedef enum { 467613SVikram.Hegde@Sun.COM IOMMU_OPS_VERSION_INVALID = 0, 477613SVikram.Hegde@Sun.COM IOMMU_OPS_VERSION_1 = 1 487613SVikram.Hegde@Sun.COM } iommulib_opsversion_t; 497613SVikram.Hegde@Sun.COM 507613SVikram.Hegde@Sun.COM #define IOMMU_OPS_VERSION IOMMU_OPS_VERSION_1 517613SVikram.Hegde@Sun.COM 527613SVikram.Hegde@Sun.COM typedef struct iommulib_ops { 537613SVikram.Hegde@Sun.COM iommulib_opsversion_t ilops_vers; 547613SVikram.Hegde@Sun.COM iommulib_vendor_t ilops_vendor; 557613SVikram.Hegde@Sun.COM char *ilops_id; 567613SVikram.Hegde@Sun.COM void *ilops_data; 577613SVikram.Hegde@Sun.COM 58*8215SVikram.Hegde@Sun.COM int (*ilops_probe)(iommulib_handle_t handle, dev_info_t *rdip); 597613SVikram.Hegde@Sun.COM 607613SVikram.Hegde@Sun.COM int (*ilops_dma_allochdl)(iommulib_handle_t handle, 617613SVikram.Hegde@Sun.COM dev_info_t *dip, dev_info_t *rdip, ddi_dma_attr_t *attr, 627613SVikram.Hegde@Sun.COM int (*waitfp)(caddr_t), caddr_t arg, ddi_dma_handle_t *dma_handlep); 637613SVikram.Hegde@Sun.COM 647613SVikram.Hegde@Sun.COM int (*ilops_dma_freehdl)(iommulib_handle_t handle, 657613SVikram.Hegde@Sun.COM dev_info_t *dip, dev_info_t *rdip, ddi_dma_handle_t dma_handle); 667613SVikram.Hegde@Sun.COM 677613SVikram.Hegde@Sun.COM int (*ilops_dma_bindhdl)(iommulib_handle_t handle, dev_info_t *dip, 687613SVikram.Hegde@Sun.COM dev_info_t *rdip, ddi_dma_handle_t dma_handle, 697613SVikram.Hegde@Sun.COM struct ddi_dma_req *dmareq, ddi_dma_cookie_t *cookiep, 707613SVikram.Hegde@Sun.COM uint_t *ccountp); 717613SVikram.Hegde@Sun.COM 727613SVikram.Hegde@Sun.COM int (*ilops_dma_unbindhdl)(iommulib_handle_t handle, 737613SVikram.Hegde@Sun.COM dev_info_t *dip, dev_info_t *rdip, ddi_dma_handle_t dma_handle); 747613SVikram.Hegde@Sun.COM 757613SVikram.Hegde@Sun.COM int (*ilops_dma_sync)(iommulib_handle_t handle, dev_info_t *dip, 767613SVikram.Hegde@Sun.COM dev_info_t *rdip, ddi_dma_handle_t dma_handle, off_t off, 777613SVikram.Hegde@Sun.COM size_t len, uint_t cache_flags); 787613SVikram.Hegde@Sun.COM 797613SVikram.Hegde@Sun.COM int (*ilops_dma_win)(iommulib_handle_t handle, dev_info_t *dip, 807613SVikram.Hegde@Sun.COM dev_info_t *rdip, ddi_dma_handle_t dma_handle, uint_t win, 817613SVikram.Hegde@Sun.COM off_t *offp, size_t *lenp, ddi_dma_cookie_t *cookiep, 827613SVikram.Hegde@Sun.COM uint_t *ccountp); 837613SVikram.Hegde@Sun.COM 847613SVikram.Hegde@Sun.COM 857613SVikram.Hegde@Sun.COM /* Obsolete DMA routines */ 867613SVikram.Hegde@Sun.COM 877613SVikram.Hegde@Sun.COM int (*ilops_dma_map)(iommulib_handle_t handle, dev_info_t *dip, 887613SVikram.Hegde@Sun.COM dev_info_t *rdip, struct ddi_dma_req *dmareq, 897613SVikram.Hegde@Sun.COM ddi_dma_handle_t *dma_handle); 907613SVikram.Hegde@Sun.COM 917613SVikram.Hegde@Sun.COM int (*ilops_dma_mctl)(iommulib_handle_t handle, dev_info_t *dip, 927613SVikram.Hegde@Sun.COM dev_info_t *rdip, ddi_dma_handle_t dma_handle, 937613SVikram.Hegde@Sun.COM enum ddi_dma_ctlops request, off_t *offp, size_t *lenp, 947613SVikram.Hegde@Sun.COM caddr_t *objpp, uint_t cache_flags); 957613SVikram.Hegde@Sun.COM 967613SVikram.Hegde@Sun.COM } iommulib_ops_t; 977613SVikram.Hegde@Sun.COM 987613SVikram.Hegde@Sun.COM #define IOMMU_USED(dip) (DEVI(dip)->devi_iommulib_handle != NULL) 997613SVikram.Hegde@Sun.COM 1007613SVikram.Hegde@Sun.COM typedef enum { 1017613SVikram.Hegde@Sun.COM IOMMU_NEXOPS_VERSION_INVALID = 0, 1027613SVikram.Hegde@Sun.COM IOMMU_NEXOPS_VERSION_1 = 1 1037613SVikram.Hegde@Sun.COM } iommulib_nexops_version_t; 1047613SVikram.Hegde@Sun.COM 1057613SVikram.Hegde@Sun.COM #define IOMMU_NEXOPS_VERSION IOMMU_NEXOPS_VERSION_1 1067613SVikram.Hegde@Sun.COM 1077613SVikram.Hegde@Sun.COM typedef struct iommulib_nexops { 1087613SVikram.Hegde@Sun.COM iommulib_nexops_version_t nops_vers; 1097613SVikram.Hegde@Sun.COM char *nops_id; 1107613SVikram.Hegde@Sun.COM void *nops_data; 1117613SVikram.Hegde@Sun.COM 1127613SVikram.Hegde@Sun.COM int (*nops_dma_allochdl)(dev_info_t *dip, dev_info_t *rdip, 1137613SVikram.Hegde@Sun.COM ddi_dma_attr_t *attr, int (*waitfp)(caddr_t), caddr_t arg, 1147613SVikram.Hegde@Sun.COM ddi_dma_handle_t *handlep); 1157613SVikram.Hegde@Sun.COM 1167613SVikram.Hegde@Sun.COM int (*nops_dma_freehdl)(dev_info_t *dip, dev_info_t *rdip, 1177613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle); 1187613SVikram.Hegde@Sun.COM 1197613SVikram.Hegde@Sun.COM int (*nops_dma_bindhdl)(dev_info_t *dip, dev_info_t *rdip, 1207613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle, struct ddi_dma_req *dmareq, 1217613SVikram.Hegde@Sun.COM ddi_dma_cookie_t *cookiep, uint_t *ccountp); 1227613SVikram.Hegde@Sun.COM 1237613SVikram.Hegde@Sun.COM int (*nops_dma_unbindhdl)(dev_info_t *dip, dev_info_t *rdip, 1247613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle); 1257613SVikram.Hegde@Sun.COM 1267613SVikram.Hegde@Sun.COM void (*nops_dma_reset_cookies)(dev_info_t *dip, 1277613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle); 1287613SVikram.Hegde@Sun.COM 1297613SVikram.Hegde@Sun.COM int (*nops_dma_get_cookies)(dev_info_t *dip, ddi_dma_handle_t handle, 130*8215SVikram.Hegde@Sun.COM ddi_dma_cookie_t **cookiepp, uint_t *ccountp); 131*8215SVikram.Hegde@Sun.COM 132*8215SVikram.Hegde@Sun.COM int (*nops_dma_set_cookies)(dev_info_t *dip, ddi_dma_handle_t handle, 133*8215SVikram.Hegde@Sun.COM ddi_dma_cookie_t *cookiep, uint_t ccount); 134*8215SVikram.Hegde@Sun.COM 135*8215SVikram.Hegde@Sun.COM int (*nops_dma_clear_cookies)(dev_info_t *dip, ddi_dma_handle_t handle); 136*8215SVikram.Hegde@Sun.COM 137*8215SVikram.Hegde@Sun.COM int (*nops_dma_get_sleep_flags)(ddi_dma_handle_t handle); 1387613SVikram.Hegde@Sun.COM 1397613SVikram.Hegde@Sun.COM int (*nops_dma_sync)(dev_info_t *dip, dev_info_t *rdip, 1407613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle, off_t off, size_t len, uint_t cache_flags); 1417613SVikram.Hegde@Sun.COM 1427613SVikram.Hegde@Sun.COM int (*nops_dma_win)(dev_info_t *dip, dev_info_t *rdip, 1437613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle, uint_t win, off_t *offp, size_t *lenp, 1447613SVikram.Hegde@Sun.COM ddi_dma_cookie_t *cookiep, uint_t *ccountp); 1457613SVikram.Hegde@Sun.COM 1467613SVikram.Hegde@Sun.COM int (*nops_dma_map)(dev_info_t *dip, dev_info_t *rdip, 1477613SVikram.Hegde@Sun.COM struct ddi_dma_req *dmareq, ddi_dma_handle_t *handlep); 1487613SVikram.Hegde@Sun.COM 1497613SVikram.Hegde@Sun.COM int (*nops_dma_mctl)(dev_info_t *dip, dev_info_t *rdip, 1507613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle, enum ddi_dma_ctlops request, off_t *offp, 1517613SVikram.Hegde@Sun.COM size_t *lenp, caddr_t *objpp, uint_t cache_flags); 1527613SVikram.Hegde@Sun.COM } iommulib_nexops_t; 1537613SVikram.Hegde@Sun.COM 1547613SVikram.Hegde@Sun.COM struct iommulib_nex; 1557613SVikram.Hegde@Sun.COM typedef struct iommulib_nex *iommulib_nexhandle_t; 1567613SVikram.Hegde@Sun.COM 1577613SVikram.Hegde@Sun.COM /* 158*8215SVikram.Hegde@Sun.COM * struct iommu_dip_private 159*8215SVikram.Hegde@Sun.COM * private iommu structure hook on dev_info 160*8215SVikram.Hegde@Sun.COM */ 161*8215SVikram.Hegde@Sun.COM typedef struct iommu_private { 162*8215SVikram.Hegde@Sun.COM /* pci seg, bus, dev, func */ 163*8215SVikram.Hegde@Sun.COM int idp_seg; 164*8215SVikram.Hegde@Sun.COM int idp_bus; 165*8215SVikram.Hegde@Sun.COM int idp_devfn; 166*8215SVikram.Hegde@Sun.COM 167*8215SVikram.Hegde@Sun.COM /* ppb information */ 168*8215SVikram.Hegde@Sun.COM boolean_t idp_is_bridge; 169*8215SVikram.Hegde@Sun.COM int idp_bbp_type; 170*8215SVikram.Hegde@Sun.COM int idp_sec; 171*8215SVikram.Hegde@Sun.COM int idp_sub; 172*8215SVikram.Hegde@Sun.COM 173*8215SVikram.Hegde@Sun.COM /* identifier for special devices */ 174*8215SVikram.Hegde@Sun.COM boolean_t idp_is_display; 175*8215SVikram.Hegde@Sun.COM boolean_t idp_is_lpc; 176*8215SVikram.Hegde@Sun.COM 177*8215SVikram.Hegde@Sun.COM /* domain ptr */ 178*8215SVikram.Hegde@Sun.COM void *idp_intel_domain; 179*8215SVikram.Hegde@Sun.COM } iommu_private_t; 180*8215SVikram.Hegde@Sun.COM 181*8215SVikram.Hegde@Sun.COM #define INTEL_IOMMU_PRIVATE(i) (dmar_domain_state_t *)(i) 182*8215SVikram.Hegde@Sun.COM 183*8215SVikram.Hegde@Sun.COM typedef struct gfx_entry { 184*8215SVikram.Hegde@Sun.COM dev_info_t *g_dip; 185*8215SVikram.Hegde@Sun.COM struct gfx_entry *g_prev; 186*8215SVikram.Hegde@Sun.COM struct gfx_entry *g_next; 187*8215SVikram.Hegde@Sun.COM } gfx_entry_t; 188*8215SVikram.Hegde@Sun.COM 189*8215SVikram.Hegde@Sun.COM /* 1907613SVikram.Hegde@Sun.COM * Interfaces for nexus drivers - typically rootnex 1917613SVikram.Hegde@Sun.COM */ 1927613SVikram.Hegde@Sun.COM 1937613SVikram.Hegde@Sun.COM int iommulib_nexus_register(dev_info_t *dip, iommulib_nexops_t *nexops, 1947613SVikram.Hegde@Sun.COM iommulib_nexhandle_t *handle); 1957613SVikram.Hegde@Sun.COM 1967613SVikram.Hegde@Sun.COM int iommulib_nexus_unregister(iommulib_nexhandle_t handle); 1977613SVikram.Hegde@Sun.COM 1987613SVikram.Hegde@Sun.COM int iommulib_nex_open(dev_info_t *rdip, uint_t *errorp); 1997613SVikram.Hegde@Sun.COM void iommulib_nex_close(dev_info_t *rdip); 2007613SVikram.Hegde@Sun.COM 2017613SVikram.Hegde@Sun.COM int iommulib_nexdma_allochdl(dev_info_t *dip, dev_info_t *rdip, 2027613SVikram.Hegde@Sun.COM ddi_dma_attr_t *attr, int (*waitfp)(caddr_t), 2037613SVikram.Hegde@Sun.COM caddr_t arg, ddi_dma_handle_t *dma_handlep); 2047613SVikram.Hegde@Sun.COM 2057613SVikram.Hegde@Sun.COM int iommulib_nexdma_freehdl(dev_info_t *dip, dev_info_t *rdip, 2067613SVikram.Hegde@Sun.COM ddi_dma_handle_t dma_handle); 2077613SVikram.Hegde@Sun.COM 2087613SVikram.Hegde@Sun.COM int iommulib_nexdma_bindhdl(dev_info_t *dip, dev_info_t *rdip, 2097613SVikram.Hegde@Sun.COM ddi_dma_handle_t dma_handle, struct ddi_dma_req *dmareq, 2107613SVikram.Hegde@Sun.COM ddi_dma_cookie_t *cookiep, uint_t *ccountp); 2117613SVikram.Hegde@Sun.COM 2127613SVikram.Hegde@Sun.COM int iommulib_nexdma_unbindhdl(dev_info_t *dip, dev_info_t *rdip, 2137613SVikram.Hegde@Sun.COM ddi_dma_handle_t dma_handle); 2147613SVikram.Hegde@Sun.COM 2157613SVikram.Hegde@Sun.COM int iommulib_nexdma_sync(dev_info_t *dip, dev_info_t *rdip, 2167613SVikram.Hegde@Sun.COM ddi_dma_handle_t dma_handle, off_t off, size_t len, 2177613SVikram.Hegde@Sun.COM uint_t cache_flags); 2187613SVikram.Hegde@Sun.COM 2197613SVikram.Hegde@Sun.COM int iommulib_nexdma_win(dev_info_t *dip, dev_info_t *rdip, 2207613SVikram.Hegde@Sun.COM ddi_dma_handle_t dma_handle, uint_t win, off_t *offp, size_t *lenp, 2217613SVikram.Hegde@Sun.COM ddi_dma_cookie_t *cookiep, uint_t *ccountp); 2227613SVikram.Hegde@Sun.COM 2237613SVikram.Hegde@Sun.COM int iommulib_nexdma_map(dev_info_t *dip, dev_info_t *rdip, 2247613SVikram.Hegde@Sun.COM struct ddi_dma_req *dmareq, ddi_dma_handle_t *dma_handle); 2257613SVikram.Hegde@Sun.COM 2267613SVikram.Hegde@Sun.COM int iommulib_nexdma_mctl(dev_info_t *dip, dev_info_t *rdip, 2277613SVikram.Hegde@Sun.COM ddi_dma_handle_t dma_handle, enum ddi_dma_ctlops request, 2287613SVikram.Hegde@Sun.COM off_t *offp, size_t *lenp, caddr_t *objpp, uint_t cache_flags); 2297613SVikram.Hegde@Sun.COM 2307613SVikram.Hegde@Sun.COM /* 2317613SVikram.Hegde@Sun.COM * Interfaces for IOMMU drivers provided by IOMMULIB 2327613SVikram.Hegde@Sun.COM */ 2337613SVikram.Hegde@Sun.COM 2347613SVikram.Hegde@Sun.COM int iommulib_iommu_register(dev_info_t *dip, iommulib_ops_t *ops, 2357613SVikram.Hegde@Sun.COM iommulib_handle_t *handle); 2367613SVikram.Hegde@Sun.COM 2377613SVikram.Hegde@Sun.COM int iommulib_iommu_unregister(iommulib_handle_t handle); 2387613SVikram.Hegde@Sun.COM 2397613SVikram.Hegde@Sun.COM int iommulib_iommu_getunitid(iommulib_handle_t handle, uint64_t *unitidp); 2407613SVikram.Hegde@Sun.COM 2417613SVikram.Hegde@Sun.COM dev_info_t *iommulib_iommu_getdip(iommulib_handle_t handle); 2427613SVikram.Hegde@Sun.COM 2437613SVikram.Hegde@Sun.COM iommulib_ops_t *iommulib_iommu_getops(iommulib_handle_t handle); 2447613SVikram.Hegde@Sun.COM 2457613SVikram.Hegde@Sun.COM void *iommulib_iommu_getdata(iommulib_handle_t handle); 2467613SVikram.Hegde@Sun.COM 2477613SVikram.Hegde@Sun.COM 2487613SVikram.Hegde@Sun.COM /* Interfaces for IOMMU drivers provided by NEXUS drivers (typically rootnex) */ 2497613SVikram.Hegde@Sun.COM 2507613SVikram.Hegde@Sun.COM int iommulib_iommu_dma_allochdl(dev_info_t *dip, dev_info_t *rdip, 2517613SVikram.Hegde@Sun.COM ddi_dma_attr_t *attr, int (*waitfp)(caddr_t), caddr_t arg, 2527613SVikram.Hegde@Sun.COM ddi_dma_handle_t *handlep); 2537613SVikram.Hegde@Sun.COM 2547613SVikram.Hegde@Sun.COM int iommulib_iommu_dma_freehdl(dev_info_t *dip, dev_info_t *rdip, 2557613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle); 2567613SVikram.Hegde@Sun.COM 2577613SVikram.Hegde@Sun.COM int iommulib_iommu_dma_bindhdl(dev_info_t *dip, dev_info_t *rdip, 2587613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle, struct ddi_dma_req *dmareq, 2597613SVikram.Hegde@Sun.COM ddi_dma_cookie_t *cookiep, uint_t *ccountp); 2607613SVikram.Hegde@Sun.COM 2617613SVikram.Hegde@Sun.COM int iommulib_iommu_dma_unbindhdl(dev_info_t *dip, dev_info_t *rdip, 2627613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle); 2637613SVikram.Hegde@Sun.COM 2647613SVikram.Hegde@Sun.COM void iommulib_iommu_dma_reset_cookies(dev_info_t *dip, ddi_dma_handle_t handle); 2657613SVikram.Hegde@Sun.COM 2667613SVikram.Hegde@Sun.COM int iommulib_iommu_dma_get_cookies(dev_info_t *dip, ddi_dma_handle_t handle, 267*8215SVikram.Hegde@Sun.COM ddi_dma_cookie_t **cookiepp, uint_t *ccountp); 268*8215SVikram.Hegde@Sun.COM 269*8215SVikram.Hegde@Sun.COM int iommulib_iommu_dma_set_cookies(dev_info_t *dip, ddi_dma_handle_t handle, 270*8215SVikram.Hegde@Sun.COM ddi_dma_cookie_t *cookiep, uint_t ccount); 271*8215SVikram.Hegde@Sun.COM 272*8215SVikram.Hegde@Sun.COM int iommulib_iommu_dma_clear_cookies(dev_info_t *dip, ddi_dma_handle_t handle); 273*8215SVikram.Hegde@Sun.COM 274*8215SVikram.Hegde@Sun.COM int iommulib_iommu_dma_get_sleep_flags(dev_info_t *dip, 275*8215SVikram.Hegde@Sun.COM ddi_dma_handle_t handle); 2767613SVikram.Hegde@Sun.COM 2777613SVikram.Hegde@Sun.COM int iommulib_iommu_dma_sync(dev_info_t *dip, dev_info_t *rdip, 2787613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle, off_t off, size_t len, uint_t cache_flags); 2797613SVikram.Hegde@Sun.COM 2807613SVikram.Hegde@Sun.COM int iommulib_iommu_dma_win(dev_info_t *dip, dev_info_t *rdip, 2817613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle, uint_t win, off_t *offp, size_t *lenp, 2827613SVikram.Hegde@Sun.COM ddi_dma_cookie_t *cookiep, uint_t *ccountp); 2837613SVikram.Hegde@Sun.COM 2847613SVikram.Hegde@Sun.COM int iommulib_iommu_dma_map(dev_info_t *dip, dev_info_t *rdip, 2857613SVikram.Hegde@Sun.COM struct ddi_dma_req *dmareq, ddi_dma_handle_t *handlep); 2867613SVikram.Hegde@Sun.COM 2877613SVikram.Hegde@Sun.COM int iommulib_iommu_dma_mctl(dev_info_t *dip, dev_info_t *rdip, 2887613SVikram.Hegde@Sun.COM ddi_dma_handle_t handle, enum ddi_dma_ctlops request, off_t *offp, 2897613SVikram.Hegde@Sun.COM size_t *lenp, caddr_t *objpp, uint_t cache_flags); 2907613SVikram.Hegde@Sun.COM 2917613SVikram.Hegde@Sun.COM #endif /* _KERNEL */ 2927613SVikram.Hegde@Sun.COM 2937613SVikram.Hegde@Sun.COM #ifdef __cplusplus 2947613SVikram.Hegde@Sun.COM } 2957613SVikram.Hegde@Sun.COM #endif 2967613SVikram.Hegde@Sun.COM 2977613SVikram.Hegde@Sun.COM #endif /* _SYS_IOMMULIB_H */ 298