xref: /onnv-gate/usr/src/uts/intel/sys/iommulib.h (revision 8215:dc6a5d93e70c)
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