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