xref: /onnv-gate/usr/src/uts/intel/sys/ddi_isa.h (revision 11433:ad26b3d4143e)
10Sstevel@tonic-gate /*
20Sstevel@tonic-gate  * CDDL HEADER START
30Sstevel@tonic-gate  *
40Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
51106Smrj  * Common Development and Distribution License (the "License").
61106Smrj  * You may not use this file except in compliance with the License.
70Sstevel@tonic-gate  *
80Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
90Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
100Sstevel@tonic-gate  * See the License for the specific language governing permissions
110Sstevel@tonic-gate  * and limitations under the License.
120Sstevel@tonic-gate  *
130Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
140Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
150Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
160Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
170Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
180Sstevel@tonic-gate  *
190Sstevel@tonic-gate  * CDDL HEADER END
200Sstevel@tonic-gate  */
210Sstevel@tonic-gate /*
22*11433SMark.Johnson@Sun.COM  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
230Sstevel@tonic-gate  * Use is subject to license terms.
240Sstevel@tonic-gate  */
250Sstevel@tonic-gate 
260Sstevel@tonic-gate #ifndef	_SYS_DDI_ISA_H
270Sstevel@tonic-gate #define	_SYS_DDI_ISA_H
280Sstevel@tonic-gate 
290Sstevel@tonic-gate #include <sys/isa_defs.h>
300Sstevel@tonic-gate #include <sys/dditypes.h>
310Sstevel@tonic-gate #include <sys/ndifm.h>
321106Smrj #ifdef	_KERNEL
331106Smrj #include <sys/ddi_obsolete.h>
341106Smrj #endif
350Sstevel@tonic-gate 
360Sstevel@tonic-gate #ifdef	__cplusplus
370Sstevel@tonic-gate extern "C" {
380Sstevel@tonic-gate #endif
390Sstevel@tonic-gate 
400Sstevel@tonic-gate #ifdef	_KERNEL
410Sstevel@tonic-gate 
420Sstevel@tonic-gate /*
430Sstevel@tonic-gate  * These are the data access functions which the platform
440Sstevel@tonic-gate  * can choose to define as functions or macro's.
450Sstevel@tonic-gate  */
460Sstevel@tonic-gate 
470Sstevel@tonic-gate /*
480Sstevel@tonic-gate  * DDI interfaces defined as macro's
490Sstevel@tonic-gate  */
500Sstevel@tonic-gate 
510Sstevel@tonic-gate /*
520Sstevel@tonic-gate  * DDI interfaces defined as functions
530Sstevel@tonic-gate  */
540Sstevel@tonic-gate 
550Sstevel@tonic-gate #ifdef	__STDC__
560Sstevel@tonic-gate 
570Sstevel@tonic-gate /*
580Sstevel@tonic-gate  * ahi_acc_attr flags
590Sstevel@tonic-gate  */
600Sstevel@tonic-gate #define	DDI_ACCATTR_CONFIG_SPACE	0x1
610Sstevel@tonic-gate #define	DDI_ACCATTR_IO_SPACE		0x2
620Sstevel@tonic-gate #define	DDI_ACCATTR_CPU_VADDR		0x4
630Sstevel@tonic-gate #define	DDI_ACCATTR_DIRECT		0x8
640Sstevel@tonic-gate 
650Sstevel@tonic-gate typedef struct ddi_acc_impl {
660Sstevel@tonic-gate 	ddi_acc_hdl_t	ahi_common;
670Sstevel@tonic-gate 	uint_t		ahi_acc_attr;
680Sstevel@tonic-gate 	ulong_t		ahi_io_port_base;
690Sstevel@tonic-gate 
700Sstevel@tonic-gate 	uint8_t
710Sstevel@tonic-gate 		(*ahi_get8)(struct ddi_acc_impl *handle, uint8_t *addr);
720Sstevel@tonic-gate 	uint16_t
730Sstevel@tonic-gate 		(*ahi_get16)(struct ddi_acc_impl *handle, uint16_t *addr);
740Sstevel@tonic-gate 	uint32_t
750Sstevel@tonic-gate 		(*ahi_get32)(struct ddi_acc_impl *handle, uint32_t *addr);
760Sstevel@tonic-gate 	uint64_t
770Sstevel@tonic-gate 		(*ahi_get64)(struct ddi_acc_impl *handle, uint64_t *addr);
780Sstevel@tonic-gate 
790Sstevel@tonic-gate 	void	(*ahi_put8)(struct ddi_acc_impl *handle, uint8_t *addr,
800Sstevel@tonic-gate 			uint8_t value);
810Sstevel@tonic-gate 	void	(*ahi_put16)(struct ddi_acc_impl *handle, uint16_t *addr,
820Sstevel@tonic-gate 			uint16_t value);
830Sstevel@tonic-gate 	void	(*ahi_put32)(struct ddi_acc_impl *handle, uint32_t *addr,
840Sstevel@tonic-gate 			uint32_t value);
850Sstevel@tonic-gate 	void	(*ahi_put64)(struct ddi_acc_impl *handle, uint64_t *addr,
860Sstevel@tonic-gate 			uint64_t value);
870Sstevel@tonic-gate 
880Sstevel@tonic-gate 	void	(*ahi_rep_get8)(struct ddi_acc_impl *handle,
890Sstevel@tonic-gate 			uint8_t *host_addr, uint8_t *dev_addr,
900Sstevel@tonic-gate 			size_t repcount, uint_t flags);
910Sstevel@tonic-gate 	void	(*ahi_rep_get16)(struct ddi_acc_impl *handle,
920Sstevel@tonic-gate 			uint16_t *host_addr, uint16_t *dev_addr,
930Sstevel@tonic-gate 			size_t repcount, uint_t flags);
940Sstevel@tonic-gate 	void	(*ahi_rep_get32)(struct ddi_acc_impl *handle,
950Sstevel@tonic-gate 			uint32_t *host_addr, uint32_t *dev_addr,
960Sstevel@tonic-gate 			size_t repcount, uint_t flags);
970Sstevel@tonic-gate 	void	(*ahi_rep_get64)(struct ddi_acc_impl *handle,
980Sstevel@tonic-gate 			uint64_t *host_addr, uint64_t *dev_addr,
990Sstevel@tonic-gate 			size_t repcount, uint_t flags);
1000Sstevel@tonic-gate 
1010Sstevel@tonic-gate 	void	(*ahi_rep_put8)(struct ddi_acc_impl *handle,
1020Sstevel@tonic-gate 			uint8_t *host_addr, uint8_t *dev_addr,
1030Sstevel@tonic-gate 			size_t repcount, uint_t flags);
1040Sstevel@tonic-gate 	void	(*ahi_rep_put16)(struct ddi_acc_impl *handle,
1050Sstevel@tonic-gate 			uint16_t *host_addr, uint16_t *dev_addr,
1060Sstevel@tonic-gate 			size_t repcount, uint_t flags);
1070Sstevel@tonic-gate 	void	(*ahi_rep_put32)(struct ddi_acc_impl *handle,
1080Sstevel@tonic-gate 			uint32_t *host_addr, uint32_t *dev_addr,
1090Sstevel@tonic-gate 			size_t repcount, uint_t flags);
1100Sstevel@tonic-gate 	void	(*ahi_rep_put64)(struct ddi_acc_impl *handle,
1110Sstevel@tonic-gate 			uint64_t *host_addr, uint64_t *dev_addr,
1120Sstevel@tonic-gate 			size_t repcount, uint_t flags);
1130Sstevel@tonic-gate 
1140Sstevel@tonic-gate 	int	(*ahi_fault_check)(struct ddi_acc_impl *handle);
1150Sstevel@tonic-gate 	void	(*ahi_fault_notify)(struct ddi_acc_impl *handle);
1160Sstevel@tonic-gate 	uint32_t	ahi_fault;
1170Sstevel@tonic-gate 	ndi_err_t *ahi_err;
11811236SStephen.Hanson@Sun.COM 	kmutex_t *ahi_peekpoke_mutexp;
11911236SStephen.Hanson@Sun.COM 	kmutex_t *ahi_err_mutexp;
12011236SStephen.Hanson@Sun.COM 	void (*ahi_scan)(dev_info_t *, ddi_fm_error_t *);
12111236SStephen.Hanson@Sun.COM 	dev_info_t *ahi_scan_dip;
1220Sstevel@tonic-gate } ddi_acc_impl_t;
1230Sstevel@tonic-gate 
1240Sstevel@tonic-gate 
1250Sstevel@tonic-gate /*
1260Sstevel@tonic-gate  * Input functions to memory mapped IO
1270Sstevel@tonic-gate  */
1280Sstevel@tonic-gate uint8_t
1290Sstevel@tonic-gate i_ddi_vaddr_get8(ddi_acc_impl_t *hdlp, uint8_t *addr);
1300Sstevel@tonic-gate 
1310Sstevel@tonic-gate uint16_t
1320Sstevel@tonic-gate i_ddi_vaddr_get16(ddi_acc_impl_t *hdlp, uint16_t *addr);
1330Sstevel@tonic-gate 
1340Sstevel@tonic-gate uint32_t
1350Sstevel@tonic-gate i_ddi_vaddr_get32(ddi_acc_impl_t *hdlp, uint32_t *addr);
1360Sstevel@tonic-gate 
1370Sstevel@tonic-gate uint64_t
1380Sstevel@tonic-gate i_ddi_vaddr_get64(ddi_acc_impl_t *hdlp, uint64_t *addr);
1390Sstevel@tonic-gate 
1400Sstevel@tonic-gate uint16_t
1410Sstevel@tonic-gate i_ddi_vaddr_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr);
1420Sstevel@tonic-gate 
1430Sstevel@tonic-gate uint32_t
1440Sstevel@tonic-gate i_ddi_vaddr_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr);
1450Sstevel@tonic-gate 
1460Sstevel@tonic-gate uint64_t
1470Sstevel@tonic-gate i_ddi_vaddr_swap_get64(ddi_acc_impl_t *hdlp, uint64_t *addr);
1480Sstevel@tonic-gate 
1490Sstevel@tonic-gate /*
1500Sstevel@tonic-gate  * Output functions to memory mapped IO
1510Sstevel@tonic-gate  */
1520Sstevel@tonic-gate void
1530Sstevel@tonic-gate i_ddi_vaddr_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value);
1540Sstevel@tonic-gate 
1550Sstevel@tonic-gate void
1560Sstevel@tonic-gate i_ddi_vaddr_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value);
1570Sstevel@tonic-gate 
1580Sstevel@tonic-gate void
1590Sstevel@tonic-gate i_ddi_vaddr_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value);
1600Sstevel@tonic-gate 
1610Sstevel@tonic-gate void
1620Sstevel@tonic-gate i_ddi_vaddr_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value);
1630Sstevel@tonic-gate 
1640Sstevel@tonic-gate void
1650Sstevel@tonic-gate i_ddi_vaddr_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value);
1660Sstevel@tonic-gate 
1670Sstevel@tonic-gate void
1680Sstevel@tonic-gate i_ddi_vaddr_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value);
1690Sstevel@tonic-gate 
1700Sstevel@tonic-gate void
1710Sstevel@tonic-gate i_ddi_vaddr_swap_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value);
1720Sstevel@tonic-gate 
1730Sstevel@tonic-gate /*
1740Sstevel@tonic-gate  * Repeated input functions for memory mapped IO
1750Sstevel@tonic-gate  */
1760Sstevel@tonic-gate void
1770Sstevel@tonic-gate i_ddi_vaddr_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
1780Sstevel@tonic-gate 	uint8_t *dev_addr, size_t repcount, uint_t flags);
1790Sstevel@tonic-gate 
1800Sstevel@tonic-gate void
1810Sstevel@tonic-gate i_ddi_vaddr_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1820Sstevel@tonic-gate 	uint16_t *dev_addr, size_t repcount, uint_t flags);
1830Sstevel@tonic-gate 
1840Sstevel@tonic-gate void
1850Sstevel@tonic-gate i_ddi_vaddr_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1860Sstevel@tonic-gate 	uint32_t *dev_addr, size_t repcount, uint_t flags);
1870Sstevel@tonic-gate 
1880Sstevel@tonic-gate void
1890Sstevel@tonic-gate i_ddi_vaddr_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
1900Sstevel@tonic-gate 	uint64_t *dev_addr, size_t repcount, uint_t flags);
1910Sstevel@tonic-gate 
1920Sstevel@tonic-gate void
1930Sstevel@tonic-gate i_ddi_vaddr_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1940Sstevel@tonic-gate 	uint16_t *dev_addr, size_t repcount, uint_t flags);
1950Sstevel@tonic-gate 
1960Sstevel@tonic-gate void
1970Sstevel@tonic-gate i_ddi_vaddr_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1980Sstevel@tonic-gate 	uint32_t *dev_addr, size_t repcount, uint_t flags);
1990Sstevel@tonic-gate 
2000Sstevel@tonic-gate void
2010Sstevel@tonic-gate i_ddi_vaddr_swap_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
2020Sstevel@tonic-gate 	uint64_t *dev_addr, size_t repcount, uint_t flags);
2030Sstevel@tonic-gate 
2040Sstevel@tonic-gate /*
2050Sstevel@tonic-gate  * Repeated output functions for memory mapped IO
2060Sstevel@tonic-gate  */
2070Sstevel@tonic-gate void
2080Sstevel@tonic-gate i_ddi_vaddr_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
2090Sstevel@tonic-gate 	uint8_t *dev_addr, size_t repcount, uint_t flags);
2100Sstevel@tonic-gate 
2110Sstevel@tonic-gate void
2120Sstevel@tonic-gate i_ddi_vaddr_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
2130Sstevel@tonic-gate 	uint16_t *dev_addr, size_t repcount, uint_t flags);
2140Sstevel@tonic-gate 
2150Sstevel@tonic-gate void
2160Sstevel@tonic-gate i_ddi_vaddr_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr,
2170Sstevel@tonic-gate 	uint32_t *dev_addr, size_t repcount, uint_t flags);
2180Sstevel@tonic-gate 
2190Sstevel@tonic-gate void
2200Sstevel@tonic-gate i_ddi_vaddr_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr,
2210Sstevel@tonic-gate 	uint64_t *dev_addr, size_t repcount, uint_t flags);
2220Sstevel@tonic-gate 
2230Sstevel@tonic-gate void
2240Sstevel@tonic-gate i_ddi_vaddr_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
2250Sstevel@tonic-gate 	uint16_t *dev_addr, size_t repcount, uint_t flags);
2260Sstevel@tonic-gate 
2270Sstevel@tonic-gate void
2280Sstevel@tonic-gate i_ddi_vaddr_swap_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr,
2290Sstevel@tonic-gate 	uint32_t *dev_addr, size_t repcount, uint_t flags);
2300Sstevel@tonic-gate 
2310Sstevel@tonic-gate void
2320Sstevel@tonic-gate i_ddi_vaddr_swap_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr,
2330Sstevel@tonic-gate 	uint64_t *dev_addr, size_t repcount, uint_t flags);
2340Sstevel@tonic-gate 
2350Sstevel@tonic-gate /*
2360Sstevel@tonic-gate  * Input functions to IO space
2370Sstevel@tonic-gate  */
2380Sstevel@tonic-gate uint8_t
2390Sstevel@tonic-gate i_ddi_io_get8(ddi_acc_impl_t *hdlp, uint8_t *addr);
2400Sstevel@tonic-gate 
2410Sstevel@tonic-gate uint16_t
2420Sstevel@tonic-gate i_ddi_io_get16(ddi_acc_impl_t *hdlp, uint16_t *addr);
2430Sstevel@tonic-gate 
2440Sstevel@tonic-gate uint32_t
2450Sstevel@tonic-gate i_ddi_io_get32(ddi_acc_impl_t *hdlp, uint32_t *addr);
2460Sstevel@tonic-gate 
2470Sstevel@tonic-gate uint64_t
2480Sstevel@tonic-gate i_ddi_io_get64(ddi_acc_impl_t *hdlp, uint64_t *addr);
2490Sstevel@tonic-gate 
2500Sstevel@tonic-gate uint16_t
2510Sstevel@tonic-gate i_ddi_io_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr);
2520Sstevel@tonic-gate 
2530Sstevel@tonic-gate uint32_t
2540Sstevel@tonic-gate i_ddi_io_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr);
2550Sstevel@tonic-gate 
2560Sstevel@tonic-gate /*
2570Sstevel@tonic-gate  * Output functions to IO space
2580Sstevel@tonic-gate  */
2590Sstevel@tonic-gate void
2600Sstevel@tonic-gate i_ddi_io_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value);
2610Sstevel@tonic-gate 
2620Sstevel@tonic-gate void
2630Sstevel@tonic-gate i_ddi_io_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value);
2640Sstevel@tonic-gate 
2650Sstevel@tonic-gate void
2660Sstevel@tonic-gate i_ddi_io_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value);
2670Sstevel@tonic-gate 
2680Sstevel@tonic-gate void
2690Sstevel@tonic-gate i_ddi_io_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value);
2700Sstevel@tonic-gate 
2710Sstevel@tonic-gate void
2720Sstevel@tonic-gate i_ddi_io_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value);
2730Sstevel@tonic-gate 
2740Sstevel@tonic-gate void
2750Sstevel@tonic-gate i_ddi_io_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value);
2760Sstevel@tonic-gate 
2770Sstevel@tonic-gate /*
2780Sstevel@tonic-gate  * Repeated input functions for IO space
2790Sstevel@tonic-gate  */
2800Sstevel@tonic-gate void
2810Sstevel@tonic-gate i_ddi_io_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, uint8_t *dev_addr,
2820Sstevel@tonic-gate 	size_t repcount, uint_t flags);
2830Sstevel@tonic-gate 
2840Sstevel@tonic-gate void
2850Sstevel@tonic-gate i_ddi_io_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
2860Sstevel@tonic-gate 	uint16_t *dev_addr, size_t repcount, uint_t flags);
2870Sstevel@tonic-gate 
2880Sstevel@tonic-gate void
2890Sstevel@tonic-gate i_ddi_io_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
2900Sstevel@tonic-gate 	uint32_t *dev_addr, size_t repcount, uint_t flags);
2910Sstevel@tonic-gate 
2920Sstevel@tonic-gate void
2930Sstevel@tonic-gate i_ddi_io_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
2940Sstevel@tonic-gate 	uint64_t *dev_addr, size_t repcount, uint_t flags);
2950Sstevel@tonic-gate 
2960Sstevel@tonic-gate void
2970Sstevel@tonic-gate i_ddi_io_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
2980Sstevel@tonic-gate 	uint16_t *dev_addr, size_t repcount, uint_t flags);
2990Sstevel@tonic-gate 
3000Sstevel@tonic-gate void
3010Sstevel@tonic-gate i_ddi_io_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
3020Sstevel@tonic-gate 	uint32_t *dev_addr, size_t repcount, uint_t flags);
3030Sstevel@tonic-gate 
3040Sstevel@tonic-gate /*
3050Sstevel@tonic-gate  * Repeated output functions for IO space
3060Sstevel@tonic-gate  */
3070Sstevel@tonic-gate void
3080Sstevel@tonic-gate i_ddi_io_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, uint8_t *dev_addr,
3090Sstevel@tonic-gate 	size_t repcount, uint_t flags);
3100Sstevel@tonic-gate 
3110Sstevel@tonic-gate void
3120Sstevel@tonic-gate i_ddi_io_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
3130Sstevel@tonic-gate 	uint16_t *dev_addr, size_t repcount, uint_t flags);
3140Sstevel@tonic-gate 
3150Sstevel@tonic-gate void
3160Sstevel@tonic-gate i_ddi_io_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr, uint32_t *dev_addr,
3170Sstevel@tonic-gate 	size_t repcount, uint_t flags);
3180Sstevel@tonic-gate 
3190Sstevel@tonic-gate void
3200Sstevel@tonic-gate i_ddi_io_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr, uint64_t *dev_addr,
3210Sstevel@tonic-gate 	size_t repcount, uint_t flags);
3220Sstevel@tonic-gate void
3230Sstevel@tonic-gate i_ddi_io_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
3240Sstevel@tonic-gate 	uint16_t *dev_addr, size_t repcount, uint_t flags);
3250Sstevel@tonic-gate 
3260Sstevel@tonic-gate void
3270Sstevel@tonic-gate i_ddi_io_swap_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr,
3280Sstevel@tonic-gate 	uint32_t *dev_addr, size_t repcount, uint_t flags);
3290Sstevel@tonic-gate 
3300Sstevel@tonic-gate /*
33111236SStephen.Hanson@Sun.COM  * repeat for protected mode accesses
33211236SStephen.Hanson@Sun.COM  */
33311236SStephen.Hanson@Sun.COM 
33411236SStephen.Hanson@Sun.COM /*
33511236SStephen.Hanson@Sun.COM  * Input functions to memory mapped IO
33611236SStephen.Hanson@Sun.COM  */
33711236SStephen.Hanson@Sun.COM uint8_t
33811236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_get8(ddi_acc_impl_t *hdlp, uint8_t *addr);
33911236SStephen.Hanson@Sun.COM 
34011236SStephen.Hanson@Sun.COM uint16_t
34111236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_get16(ddi_acc_impl_t *hdlp, uint16_t *addr);
34211236SStephen.Hanson@Sun.COM 
34311236SStephen.Hanson@Sun.COM uint32_t
34411236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_get32(ddi_acc_impl_t *hdlp, uint32_t *addr);
34511236SStephen.Hanson@Sun.COM 
34611236SStephen.Hanson@Sun.COM uint64_t
34711236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_get64(ddi_acc_impl_t *hdlp, uint64_t *addr);
34811236SStephen.Hanson@Sun.COM 
34911236SStephen.Hanson@Sun.COM uint16_t
35011236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr);
35111236SStephen.Hanson@Sun.COM 
35211236SStephen.Hanson@Sun.COM uint32_t
35311236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr);
35411236SStephen.Hanson@Sun.COM 
35511236SStephen.Hanson@Sun.COM uint64_t
35611236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_get64(ddi_acc_impl_t *hdlp, uint64_t *addr);
35711236SStephen.Hanson@Sun.COM 
35811236SStephen.Hanson@Sun.COM /*
35911236SStephen.Hanson@Sun.COM  * Output functions to memory mapped IO
36011236SStephen.Hanson@Sun.COM  */
36111236SStephen.Hanson@Sun.COM void
36211236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value);
36311236SStephen.Hanson@Sun.COM 
36411236SStephen.Hanson@Sun.COM void
36511236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value);
36611236SStephen.Hanson@Sun.COM 
36711236SStephen.Hanson@Sun.COM void
36811236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value);
36911236SStephen.Hanson@Sun.COM 
37011236SStephen.Hanson@Sun.COM void
37111236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value);
37211236SStephen.Hanson@Sun.COM 
37311236SStephen.Hanson@Sun.COM void
37411236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr,
37511236SStephen.Hanson@Sun.COM 	uint16_t value);
37611236SStephen.Hanson@Sun.COM 
37711236SStephen.Hanson@Sun.COM void
37811236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr,
37911236SStephen.Hanson@Sun.COM 	uint32_t value);
38011236SStephen.Hanson@Sun.COM 
38111236SStephen.Hanson@Sun.COM void
38211236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_put64(ddi_acc_impl_t *hdlp, uint64_t *addr,
38311236SStephen.Hanson@Sun.COM 	uint64_t value);
38411236SStephen.Hanson@Sun.COM 
38511236SStephen.Hanson@Sun.COM /*
38611236SStephen.Hanson@Sun.COM  * Repeated input functions for memory mapped IO
38711236SStephen.Hanson@Sun.COM  */
38811236SStephen.Hanson@Sun.COM void
38911236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
39011236SStephen.Hanson@Sun.COM 	uint8_t *dev_addr, size_t repcount, uint_t flags);
39111236SStephen.Hanson@Sun.COM 
39211236SStephen.Hanson@Sun.COM void
39311236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
39411236SStephen.Hanson@Sun.COM 	uint16_t *dev_addr, size_t repcount, uint_t flags);
39511236SStephen.Hanson@Sun.COM 
39611236SStephen.Hanson@Sun.COM void
39711236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
39811236SStephen.Hanson@Sun.COM 	uint32_t *dev_addr, size_t repcount, uint_t flags);
39911236SStephen.Hanson@Sun.COM 
40011236SStephen.Hanson@Sun.COM void
40111236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
40211236SStephen.Hanson@Sun.COM 	uint64_t *dev_addr, size_t repcount, uint_t flags);
40311236SStephen.Hanson@Sun.COM 
40411236SStephen.Hanson@Sun.COM void
40511236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
40611236SStephen.Hanson@Sun.COM 	uint16_t *dev_addr, size_t repcount, uint_t flags);
40711236SStephen.Hanson@Sun.COM 
40811236SStephen.Hanson@Sun.COM void
40911236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
41011236SStephen.Hanson@Sun.COM 	uint32_t *dev_addr, size_t repcount, uint_t flags);
41111236SStephen.Hanson@Sun.COM 
41211236SStephen.Hanson@Sun.COM void
41311236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
41411236SStephen.Hanson@Sun.COM 	uint64_t *dev_addr, size_t repcount, uint_t flags);
41511236SStephen.Hanson@Sun.COM 
41611236SStephen.Hanson@Sun.COM /*
41711236SStephen.Hanson@Sun.COM  * Repeated output functions for memory mapped IO
41811236SStephen.Hanson@Sun.COM  */
41911236SStephen.Hanson@Sun.COM void
42011236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
42111236SStephen.Hanson@Sun.COM 	uint8_t *dev_addr, size_t repcount, uint_t flags);
42211236SStephen.Hanson@Sun.COM 
42311236SStephen.Hanson@Sun.COM void
42411236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
42511236SStephen.Hanson@Sun.COM 	uint16_t *dev_addr, size_t repcount, uint_t flags);
42611236SStephen.Hanson@Sun.COM 
42711236SStephen.Hanson@Sun.COM void
42811236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr,
42911236SStephen.Hanson@Sun.COM 	uint32_t *dev_addr, size_t repcount, uint_t flags);
43011236SStephen.Hanson@Sun.COM 
43111236SStephen.Hanson@Sun.COM void
43211236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr,
43311236SStephen.Hanson@Sun.COM 	uint64_t *dev_addr, size_t repcount, uint_t flags);
43411236SStephen.Hanson@Sun.COM 
43511236SStephen.Hanson@Sun.COM void
43611236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
43711236SStephen.Hanson@Sun.COM 	uint16_t *dev_addr, size_t repcount, uint_t flags);
43811236SStephen.Hanson@Sun.COM 
43911236SStephen.Hanson@Sun.COM void
44011236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr,
44111236SStephen.Hanson@Sun.COM 	uint32_t *dev_addr, size_t repcount, uint_t flags);
44211236SStephen.Hanson@Sun.COM 
44311236SStephen.Hanson@Sun.COM void
44411236SStephen.Hanson@Sun.COM i_ddi_prot_vaddr_swap_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr,
44511236SStephen.Hanson@Sun.COM 	uint64_t *dev_addr, size_t repcount, uint_t flags);
44611236SStephen.Hanson@Sun.COM 
44711236SStephen.Hanson@Sun.COM /*
44811236SStephen.Hanson@Sun.COM  * Input functions to IO space
44911236SStephen.Hanson@Sun.COM  */
45011236SStephen.Hanson@Sun.COM uint8_t
45111236SStephen.Hanson@Sun.COM i_ddi_prot_io_get8(ddi_acc_impl_t *hdlp, uint8_t *addr);
45211236SStephen.Hanson@Sun.COM 
45311236SStephen.Hanson@Sun.COM uint16_t
45411236SStephen.Hanson@Sun.COM i_ddi_prot_io_get16(ddi_acc_impl_t *hdlp, uint16_t *addr);
45511236SStephen.Hanson@Sun.COM 
45611236SStephen.Hanson@Sun.COM uint32_t
45711236SStephen.Hanson@Sun.COM i_ddi_prot_io_get32(ddi_acc_impl_t *hdlp, uint32_t *addr);
45811236SStephen.Hanson@Sun.COM 
45911236SStephen.Hanson@Sun.COM uint16_t
46011236SStephen.Hanson@Sun.COM i_ddi_prot_io_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr);
46111236SStephen.Hanson@Sun.COM 
46211236SStephen.Hanson@Sun.COM uint32_t
46311236SStephen.Hanson@Sun.COM i_ddi_prot_io_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr);
46411236SStephen.Hanson@Sun.COM 
46511236SStephen.Hanson@Sun.COM /*
46611236SStephen.Hanson@Sun.COM  * Output functions to IO space
46711236SStephen.Hanson@Sun.COM  */
46811236SStephen.Hanson@Sun.COM void
46911236SStephen.Hanson@Sun.COM i_ddi_prot_io_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value);
47011236SStephen.Hanson@Sun.COM 
47111236SStephen.Hanson@Sun.COM void
47211236SStephen.Hanson@Sun.COM i_ddi_prot_io_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value);
47311236SStephen.Hanson@Sun.COM 
47411236SStephen.Hanson@Sun.COM void
47511236SStephen.Hanson@Sun.COM i_ddi_prot_io_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value);
47611236SStephen.Hanson@Sun.COM 
47711236SStephen.Hanson@Sun.COM void
47811236SStephen.Hanson@Sun.COM i_ddi_prot_io_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value);
47911236SStephen.Hanson@Sun.COM 
48011236SStephen.Hanson@Sun.COM void
48111236SStephen.Hanson@Sun.COM i_ddi_prot_io_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value);
48211236SStephen.Hanson@Sun.COM 
48311236SStephen.Hanson@Sun.COM void
48411236SStephen.Hanson@Sun.COM i_ddi_prot_io_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value);
48511236SStephen.Hanson@Sun.COM 
48611236SStephen.Hanson@Sun.COM /*
48711236SStephen.Hanson@Sun.COM  * Repeated input functions for IO space
48811236SStephen.Hanson@Sun.COM  */
48911236SStephen.Hanson@Sun.COM void
49011236SStephen.Hanson@Sun.COM i_ddi_prot_io_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
49111236SStephen.Hanson@Sun.COM 	uint8_t *dev_addr, size_t repcount, uint_t flags);
49211236SStephen.Hanson@Sun.COM 
49311236SStephen.Hanson@Sun.COM void
49411236SStephen.Hanson@Sun.COM i_ddi_prot_io_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
49511236SStephen.Hanson@Sun.COM 	uint16_t *dev_addr, size_t repcount, uint_t flags);
49611236SStephen.Hanson@Sun.COM 
49711236SStephen.Hanson@Sun.COM void
49811236SStephen.Hanson@Sun.COM i_ddi_prot_io_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
49911236SStephen.Hanson@Sun.COM 	uint32_t *dev_addr, size_t repcount, uint_t flags);
50011236SStephen.Hanson@Sun.COM 
50111236SStephen.Hanson@Sun.COM void
50211236SStephen.Hanson@Sun.COM i_ddi_prot_io_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
50311236SStephen.Hanson@Sun.COM 	uint16_t *dev_addr, size_t repcount, uint_t flags);
50411236SStephen.Hanson@Sun.COM 
50511236SStephen.Hanson@Sun.COM void
50611236SStephen.Hanson@Sun.COM i_ddi_prot_io_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
50711236SStephen.Hanson@Sun.COM 	uint32_t *dev_addr, size_t repcount, uint_t flags);
50811236SStephen.Hanson@Sun.COM 
50911236SStephen.Hanson@Sun.COM /*
51011236SStephen.Hanson@Sun.COM  * Repeated output functions for IO space
51111236SStephen.Hanson@Sun.COM  */
51211236SStephen.Hanson@Sun.COM void
51311236SStephen.Hanson@Sun.COM i_ddi_prot_io_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
51411236SStephen.Hanson@Sun.COM 	uint8_t *dev_addr, size_t repcount, uint_t flags);
51511236SStephen.Hanson@Sun.COM 
51611236SStephen.Hanson@Sun.COM void
51711236SStephen.Hanson@Sun.COM i_ddi_prot_io_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
51811236SStephen.Hanson@Sun.COM 	uint16_t *dev_addr, size_t repcount, uint_t flags);
51911236SStephen.Hanson@Sun.COM 
52011236SStephen.Hanson@Sun.COM void
52111236SStephen.Hanson@Sun.COM i_ddi_prot_io_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr,
52211236SStephen.Hanson@Sun.COM 	uint32_t *dev_addr, size_t repcount, uint_t flags);
52311236SStephen.Hanson@Sun.COM 
52411236SStephen.Hanson@Sun.COM void
52511236SStephen.Hanson@Sun.COM i_ddi_prot_io_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr,
52611236SStephen.Hanson@Sun.COM 	uint64_t *dev_addr, size_t repcount, uint_t flags);
52711236SStephen.Hanson@Sun.COM void
52811236SStephen.Hanson@Sun.COM i_ddi_prot_io_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
52911236SStephen.Hanson@Sun.COM 	uint16_t *dev_addr, size_t repcount, uint_t flags);
53011236SStephen.Hanson@Sun.COM 
53111236SStephen.Hanson@Sun.COM void
53211236SStephen.Hanson@Sun.COM i_ddi_prot_io_swap_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr,
53311236SStephen.Hanson@Sun.COM 	uint32_t *dev_addr, size_t repcount, uint_t flags);
53411236SStephen.Hanson@Sun.COM 
53511236SStephen.Hanson@Sun.COM /*
5360Sstevel@tonic-gate  * Default fault-checking and notification functions
5370Sstevel@tonic-gate  */
5380Sstevel@tonic-gate int
5390Sstevel@tonic-gate i_ddi_acc_fault_check(ddi_acc_impl_t *hdlp);
5400Sstevel@tonic-gate 
5410Sstevel@tonic-gate void
5420Sstevel@tonic-gate i_ddi_acc_fault_notify(ddi_acc_impl_t *hdlp);
5430Sstevel@tonic-gate 
5441865Sdilpreet /* DDI Fault Services functions */
5451865Sdilpreet void i_ddi_caut_get(size_t size, void *addr, void *val);
5461865Sdilpreet 
5471865Sdilpreet uint8_t i_ddi_caut_get8(ddi_acc_impl_t *hdlp, uint8_t *addr);
5481865Sdilpreet uint16_t i_ddi_caut_get16(ddi_acc_impl_t *hdlp, uint16_t *addr);
5491865Sdilpreet uint32_t i_ddi_caut_get32(ddi_acc_impl_t *hdlp, uint32_t *addr);
5501865Sdilpreet uint64_t i_ddi_caut_get64(ddi_acc_impl_t *hdlp, uint64_t *addr);
5511865Sdilpreet 
5521865Sdilpreet void i_ddi_caut_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value);
5531865Sdilpreet void i_ddi_caut_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value);
5541865Sdilpreet void i_ddi_caut_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value);
5551865Sdilpreet void i_ddi_caut_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value);
5561865Sdilpreet 
5571865Sdilpreet void i_ddi_caut_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
5581865Sdilpreet     uint8_t *dev_addr, size_t repcount, uint_t flags);
5591865Sdilpreet void i_ddi_caut_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
5601865Sdilpreet     uint16_t *dev_addr, size_t repcount, uint_t flags);
5611865Sdilpreet void i_ddi_caut_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
5621865Sdilpreet     uint32_t *dev_addr, size_t repcount, uint_t flags);
5631865Sdilpreet void i_ddi_caut_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
5641865Sdilpreet     uint64_t *dev_addr, size_t repcount, uint_t flags);
5651865Sdilpreet 
5661865Sdilpreet void i_ddi_caut_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
5671865Sdilpreet     uint8_t *dev_addr, size_t repcount, uint_t flags);
5681865Sdilpreet void i_ddi_caut_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
5691865Sdilpreet     uint16_t *dev_addr, size_t repcount, uint_t flags);
5701865Sdilpreet void i_ddi_caut_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr,
5711865Sdilpreet     uint32_t *dev_addr, size_t repcount, uint_t flags);
5721865Sdilpreet void i_ddi_caut_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr,
5731865Sdilpreet     uint64_t *dev_addr, size_t repcount, uint_t flags);
5741865Sdilpreet 
5755251Smrj boolean_t i_ddi_copybuf_required(ddi_dma_attr_t *attrp);
5765251Smrj size_t i_ddi_copybuf_size();
5775251Smrj uint32_t i_ddi_dma_max(dev_info_t *dip, ddi_dma_attr_t *attrp);
5785251Smrj 
579*11433SMark.Johnson@Sun.COM /* handles case of running on top of hypervisor */
580*11433SMark.Johnson@Sun.COM pfn_t i_ddi_paddr_to_pfn(paddr_t paddr);
581*11433SMark.Johnson@Sun.COM 
5820Sstevel@tonic-gate #endif	/* __STDC__ */
5830Sstevel@tonic-gate 
5840Sstevel@tonic-gate #endif	/* _KERNEL */
5850Sstevel@tonic-gate 
5860Sstevel@tonic-gate #ifdef	__cplusplus
5870Sstevel@tonic-gate }
5880Sstevel@tonic-gate #endif
5890Sstevel@tonic-gate 
5900Sstevel@tonic-gate #endif	/* _SYS_DDI_ISA_H */
591