xref: /illumos-gate/usr/src/uts/intel/os/ddi_i86.c (revision f0089e391b2bc4be2755f1a1b51fb4cd9b8f3988)
1*f0089e39SRichard Lowe /*
2*f0089e39SRichard Lowe  * CDDL HEADER START
3*f0089e39SRichard Lowe  *
4*f0089e39SRichard Lowe  * The contents of this file are subject to the terms of the
5*f0089e39SRichard Lowe  * Common Development and Distribution License (the "License").
6*f0089e39SRichard Lowe  * You may not use this file except in compliance with the License.
7*f0089e39SRichard Lowe  *
8*f0089e39SRichard Lowe  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*f0089e39SRichard Lowe  * or http://www.opensolaris.org/os/licensing.
10*f0089e39SRichard Lowe  * See the License for the specific language governing permissions
11*f0089e39SRichard Lowe  * and limitations under the License.
12*f0089e39SRichard Lowe  *
13*f0089e39SRichard Lowe  * When distributing Covered Code, include this CDDL HEADER in each
14*f0089e39SRichard Lowe  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*f0089e39SRichard Lowe  * If applicable, add the following below this CDDL HEADER, with the
16*f0089e39SRichard Lowe  * fields enclosed by brackets "[]" replaced with your own identifying
17*f0089e39SRichard Lowe  * information: Portions Copyright [yyyy] [name of copyright owner]
18*f0089e39SRichard Lowe  *
19*f0089e39SRichard Lowe  * CDDL HEADER END
20*f0089e39SRichard Lowe  */
21*f0089e39SRichard Lowe 
22*f0089e39SRichard Lowe /*
23*f0089e39SRichard Lowe  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24*f0089e39SRichard Lowe  * Use is subject to license terms.
25*f0089e39SRichard Lowe  */
26*f0089e39SRichard Lowe /*
27*f0089e39SRichard Lowe  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
28*f0089e39SRichard Lowe  */
29*f0089e39SRichard Lowe 
30*f0089e39SRichard Lowe #include <sys/conf.h>
31*f0089e39SRichard Lowe #include <sys/kmem.h>
32*f0089e39SRichard Lowe #include <sys/ddi_impldefs.h>
33*f0089e39SRichard Lowe #include <sys/ddi.h>
34*f0089e39SRichard Lowe #include <sys/sunddi.h>
35*f0089e39SRichard Lowe #include <sys/ddifm.h>
36*f0089e39SRichard Lowe #include <sys/fm/io/ddi.h>
37*f0089e39SRichard Lowe #include <sys/fm/protocol.h>
38*f0089e39SRichard Lowe #include <sys/ontrap.h>
39*f0089e39SRichard Lowe 
40*f0089e39SRichard Lowe 
41*f0089e39SRichard Lowe /*
42*f0089e39SRichard Lowe  * DDI DMA Engine functions for x86.
43*f0089e39SRichard Lowe  * These functions are more naturally generic, but do not apply to SPARC.
44*f0089e39SRichard Lowe  */
45*f0089e39SRichard Lowe 
46*f0089e39SRichard Lowe int
ddi_dmae_alloc(dev_info_t * dip,int chnl,int (* dmae_waitfp)(),caddr_t arg)47*f0089e39SRichard Lowe ddi_dmae_alloc(dev_info_t *dip, int chnl, int (*dmae_waitfp)(), caddr_t arg)
48*f0089e39SRichard Lowe {
49*f0089e39SRichard Lowe 	return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_ACQUIRE,
50*f0089e39SRichard Lowe 	    (off_t *)dmae_waitfp, (size_t *)arg,
51*f0089e39SRichard Lowe 	    (caddr_t *)(uintptr_t)chnl, 0));
52*f0089e39SRichard Lowe }
53*f0089e39SRichard Lowe 
54*f0089e39SRichard Lowe int
ddi_dmae_release(dev_info_t * dip,int chnl)55*f0089e39SRichard Lowe ddi_dmae_release(dev_info_t *dip, int chnl)
56*f0089e39SRichard Lowe {
57*f0089e39SRichard Lowe 	return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_FREE, 0, 0,
58*f0089e39SRichard Lowe 	    (caddr_t *)(uintptr_t)chnl, 0));
59*f0089e39SRichard Lowe }
60*f0089e39SRichard Lowe 
61*f0089e39SRichard Lowe int
ddi_dmae_getattr(dev_info_t * dip,ddi_dma_attr_t * attrp)62*f0089e39SRichard Lowe ddi_dmae_getattr(dev_info_t *dip, ddi_dma_attr_t *attrp)
63*f0089e39SRichard Lowe {
64*f0089e39SRichard Lowe 	return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_GETATTR, 0, 0,
65*f0089e39SRichard Lowe 	    (caddr_t *)attrp, 0));
66*f0089e39SRichard Lowe }
67*f0089e39SRichard Lowe 
68*f0089e39SRichard Lowe int
ddi_dmae_1stparty(dev_info_t * dip,int chnl)69*f0089e39SRichard Lowe ddi_dmae_1stparty(dev_info_t *dip, int chnl)
70*f0089e39SRichard Lowe {
71*f0089e39SRichard Lowe 	return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_1STPTY, 0, 0,
72*f0089e39SRichard Lowe 	    (caddr_t *)(uintptr_t)chnl, 0));
73*f0089e39SRichard Lowe }
74*f0089e39SRichard Lowe 
75*f0089e39SRichard Lowe int
ddi_dmae_prog(dev_info_t * dip,struct ddi_dmae_req * dmaereqp,ddi_dma_cookie_t * cookiep,int chnl)76*f0089e39SRichard Lowe ddi_dmae_prog(dev_info_t *dip, struct ddi_dmae_req *dmaereqp,
77*f0089e39SRichard Lowe     ddi_dma_cookie_t *cookiep, int chnl)
78*f0089e39SRichard Lowe {
79*f0089e39SRichard Lowe 	return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_PROG, (off_t *)dmaereqp,
80*f0089e39SRichard Lowe 	    (size_t *)cookiep, (caddr_t *)(uintptr_t)chnl, 0));
81*f0089e39SRichard Lowe }
82*f0089e39SRichard Lowe 
83*f0089e39SRichard Lowe int
ddi_dmae_swsetup(dev_info_t * dip,struct ddi_dmae_req * dmaereqp,ddi_dma_cookie_t * cookiep,int chnl)84*f0089e39SRichard Lowe ddi_dmae_swsetup(dev_info_t *dip, struct ddi_dmae_req *dmaereqp,
85*f0089e39SRichard Lowe     ddi_dma_cookie_t *cookiep, int chnl)
86*f0089e39SRichard Lowe {
87*f0089e39SRichard Lowe 	return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_SWSETUP, (off_t *)dmaereqp,
88*f0089e39SRichard Lowe 	    (size_t *)cookiep, (caddr_t *)(uintptr_t)chnl, 0));
89*f0089e39SRichard Lowe }
90*f0089e39SRichard Lowe 
91*f0089e39SRichard Lowe int
ddi_dmae_swstart(dev_info_t * dip,int chnl)92*f0089e39SRichard Lowe ddi_dmae_swstart(dev_info_t *dip, int chnl)
93*f0089e39SRichard Lowe {
94*f0089e39SRichard Lowe 	return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_SWSTART, 0, 0,
95*f0089e39SRichard Lowe 	    (caddr_t *)(uintptr_t)chnl, 0));
96*f0089e39SRichard Lowe }
97*f0089e39SRichard Lowe 
98*f0089e39SRichard Lowe int
ddi_dmae_stop(dev_info_t * dip,int chnl)99*f0089e39SRichard Lowe ddi_dmae_stop(dev_info_t *dip, int chnl)
100*f0089e39SRichard Lowe {
101*f0089e39SRichard Lowe 	return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_STOP, 0, 0,
102*f0089e39SRichard Lowe 	    (caddr_t *)(uintptr_t)chnl, 0));
103*f0089e39SRichard Lowe }
104*f0089e39SRichard Lowe 
105*f0089e39SRichard Lowe int
ddi_dmae_enable(dev_info_t * dip,int chnl)106*f0089e39SRichard Lowe ddi_dmae_enable(dev_info_t *dip, int chnl)
107*f0089e39SRichard Lowe {
108*f0089e39SRichard Lowe 	return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_ENABLE, 0, 0,
109*f0089e39SRichard Lowe 	    (caddr_t *)(uintptr_t)chnl, 0));
110*f0089e39SRichard Lowe }
111*f0089e39SRichard Lowe 
112*f0089e39SRichard Lowe int
ddi_dmae_disable(dev_info_t * dip,int chnl)113*f0089e39SRichard Lowe ddi_dmae_disable(dev_info_t *dip, int chnl)
114*f0089e39SRichard Lowe {
115*f0089e39SRichard Lowe 	return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_DISABLE, 0, 0,
116*f0089e39SRichard Lowe 	    (caddr_t *)(uintptr_t)chnl, 0));
117*f0089e39SRichard Lowe }
118*f0089e39SRichard Lowe 
119*f0089e39SRichard Lowe int
ddi_dmae_getcnt(dev_info_t * dip,int chnl,int * countp)120*f0089e39SRichard Lowe ddi_dmae_getcnt(dev_info_t *dip, int chnl, int *countp)
121*f0089e39SRichard Lowe {
122*f0089e39SRichard Lowe 	return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_GETCNT, 0, (size_t *)countp,
123*f0089e39SRichard Lowe 	    (caddr_t *)(uintptr_t)chnl, 0));
124*f0089e39SRichard Lowe }
125*f0089e39SRichard Lowe 
126*f0089e39SRichard Lowe /*
127*f0089e39SRichard Lowe  * implementation specific access handle and routines:
128*f0089e39SRichard Lowe  */
129*f0089e39SRichard Lowe 
130*f0089e39SRichard Lowe static uintptr_t impl_acc_hdl_id = 0;
131*f0089e39SRichard Lowe 
132*f0089e39SRichard Lowe /*
133*f0089e39SRichard Lowe  * access handle allocator
134*f0089e39SRichard Lowe  */
135*f0089e39SRichard Lowe ddi_acc_hdl_t *
impl_acc_hdl_get(ddi_acc_handle_t hdl)136*f0089e39SRichard Lowe impl_acc_hdl_get(ddi_acc_handle_t hdl)
137*f0089e39SRichard Lowe {
138*f0089e39SRichard Lowe 	/*
139*f0089e39SRichard Lowe 	 * recast to ddi_acc_hdl_t instead of
140*f0089e39SRichard Lowe 	 * casting to ddi_acc_impl_t and then return the ah_platform_private
141*f0089e39SRichard Lowe 	 *
142*f0089e39SRichard Lowe 	 * this optimization based on the ddi_acc_hdl_t is the
143*f0089e39SRichard Lowe 	 * first member of the ddi_acc_impl_t.
144*f0089e39SRichard Lowe 	 */
145*f0089e39SRichard Lowe 	return ((ddi_acc_hdl_t *)hdl);
146*f0089e39SRichard Lowe }
147*f0089e39SRichard Lowe 
148*f0089e39SRichard Lowe ddi_acc_handle_t
impl_acc_hdl_alloc(int (* waitfp)(caddr_t),caddr_t arg)149*f0089e39SRichard Lowe impl_acc_hdl_alloc(int (*waitfp)(caddr_t), caddr_t arg)
150*f0089e39SRichard Lowe {
151*f0089e39SRichard Lowe 	ddi_acc_impl_t *hp;
152*f0089e39SRichard Lowe 	on_trap_data_t *otp;
153*f0089e39SRichard Lowe 	int sleepflag;
154*f0089e39SRichard Lowe 
155*f0089e39SRichard Lowe 	sleepflag = ((waitfp == (int (*)())KM_SLEEP) ? KM_SLEEP : KM_NOSLEEP);
156*f0089e39SRichard Lowe 	/*
157*f0089e39SRichard Lowe 	 * Allocate and initialize the data access handle and error status.
158*f0089e39SRichard Lowe 	 */
159*f0089e39SRichard Lowe 	if ((hp = kmem_zalloc(sizeof (ddi_acc_impl_t), sleepflag)) == NULL)
160*f0089e39SRichard Lowe 		goto fail;
161*f0089e39SRichard Lowe 	if ((hp->ahi_err = (ndi_err_t *)kmem_zalloc(
162*f0089e39SRichard Lowe 	    sizeof (ndi_err_t), sleepflag)) == NULL) {
163*f0089e39SRichard Lowe 		kmem_free(hp, sizeof (ddi_acc_impl_t));
164*f0089e39SRichard Lowe 		goto fail;
165*f0089e39SRichard Lowe 	}
166*f0089e39SRichard Lowe 	if ((otp = (on_trap_data_t *)kmem_zalloc(
167*f0089e39SRichard Lowe 	    sizeof (on_trap_data_t), sleepflag)) == NULL) {
168*f0089e39SRichard Lowe 		kmem_free(hp->ahi_err, sizeof (ndi_err_t));
169*f0089e39SRichard Lowe 		kmem_free(hp, sizeof (ddi_acc_impl_t));
170*f0089e39SRichard Lowe 		goto fail;
171*f0089e39SRichard Lowe 	}
172*f0089e39SRichard Lowe 	hp->ahi_err->err_ontrap = otp;
173*f0089e39SRichard Lowe 	hp->ahi_common.ah_platform_private = (void *)hp;
174*f0089e39SRichard Lowe 
175*f0089e39SRichard Lowe 	return ((ddi_acc_handle_t)hp);
176*f0089e39SRichard Lowe fail:
177*f0089e39SRichard Lowe 	if ((waitfp != (int (*)())KM_SLEEP) &&
178*f0089e39SRichard Lowe 	    (waitfp != (int (*)())KM_NOSLEEP))
179*f0089e39SRichard Lowe 		ddi_set_callback(waitfp, arg, &impl_acc_hdl_id);
180*f0089e39SRichard Lowe 	return (NULL);
181*f0089e39SRichard Lowe }
182*f0089e39SRichard Lowe 
183*f0089e39SRichard Lowe void
impl_acc_hdl_free(ddi_acc_handle_t handle)184*f0089e39SRichard Lowe impl_acc_hdl_free(ddi_acc_handle_t handle)
185*f0089e39SRichard Lowe {
186*f0089e39SRichard Lowe 	ddi_acc_impl_t *hp;
187*f0089e39SRichard Lowe 
188*f0089e39SRichard Lowe 	/*
189*f0089e39SRichard Lowe 	 * The supplied (ddi_acc_handle_t) is actually a (ddi_acc_impl_t *),
190*f0089e39SRichard Lowe 	 * because that's what we allocated in impl_acc_hdl_alloc() above.
191*f0089e39SRichard Lowe 	 */
192*f0089e39SRichard Lowe 	hp = (ddi_acc_impl_t *)handle;
193*f0089e39SRichard Lowe 	if (hp) {
194*f0089e39SRichard Lowe 		kmem_free(hp->ahi_err->err_ontrap, sizeof (on_trap_data_t));
195*f0089e39SRichard Lowe 		kmem_free(hp->ahi_err, sizeof (ndi_err_t));
196*f0089e39SRichard Lowe 		kmem_free(hp, sizeof (ddi_acc_impl_t));
197*f0089e39SRichard Lowe 		if (impl_acc_hdl_id)
198*f0089e39SRichard Lowe 			ddi_run_callback(&impl_acc_hdl_id);
199*f0089e39SRichard Lowe 	}
200*f0089e39SRichard Lowe }
201*f0089e39SRichard Lowe 
202*f0089e39SRichard Lowe /*
203*f0089e39SRichard Lowe  * Function used to check if a given access handle owns the failing address.
204*f0089e39SRichard Lowe  * Called by ndi_fmc_error, when we detect a PIO error.
205*f0089e39SRichard Lowe  */
206*f0089e39SRichard Lowe /* ARGSUSED */
207*f0089e39SRichard Lowe static int
impl_acc_check(dev_info_t * dip,const void * handle,const void * addr,const void * not_used)208*f0089e39SRichard Lowe impl_acc_check(dev_info_t *dip, const void *handle, const void *addr,
209*f0089e39SRichard Lowe     const void *not_used)
210*f0089e39SRichard Lowe {
211*f0089e39SRichard Lowe 	pfn_t pfn, fault_pfn;
212*f0089e39SRichard Lowe 	ddi_acc_hdl_t *hp;
213*f0089e39SRichard Lowe 
214*f0089e39SRichard Lowe 	hp = impl_acc_hdl_get((ddi_acc_handle_t)handle);
215*f0089e39SRichard Lowe 
216*f0089e39SRichard Lowe 	ASSERT(hp);
217*f0089e39SRichard Lowe 
218*f0089e39SRichard Lowe 	if (addr != NULL) {
219*f0089e39SRichard Lowe 		pfn = hp->ah_pfn;
220*f0089e39SRichard Lowe 		fault_pfn = mmu_btop(*(uint64_t *)addr);
221*f0089e39SRichard Lowe 		if (fault_pfn >= pfn && fault_pfn < (pfn + hp->ah_pnum))
222*f0089e39SRichard Lowe 			return (DDI_FM_NONFATAL);
223*f0089e39SRichard Lowe 	}
224*f0089e39SRichard Lowe 	return (DDI_FM_UNKNOWN);
225*f0089e39SRichard Lowe }
226*f0089e39SRichard Lowe 
227*f0089e39SRichard Lowe void
impl_acc_err_init(ddi_acc_hdl_t * handlep)228*f0089e39SRichard Lowe impl_acc_err_init(ddi_acc_hdl_t *handlep)
229*f0089e39SRichard Lowe {
230*f0089e39SRichard Lowe 	int fmcap;
231*f0089e39SRichard Lowe 	ndi_err_t *errp;
232*f0089e39SRichard Lowe 	on_trap_data_t *otp;
233*f0089e39SRichard Lowe 	ddi_acc_impl_t *hp = (ddi_acc_impl_t *)handlep;
234*f0089e39SRichard Lowe 
235*f0089e39SRichard Lowe 	fmcap = ddi_fm_capable(handlep->ah_dip);
236*f0089e39SRichard Lowe 
237*f0089e39SRichard Lowe 	if (handlep->ah_acc.devacc_attr_version < DDI_DEVICE_ATTR_V1 ||
238*f0089e39SRichard Lowe 	    !DDI_FM_ACC_ERR_CAP(fmcap)) {
239*f0089e39SRichard Lowe 		handlep->ah_acc.devacc_attr_access = DDI_DEFAULT_ACC;
240*f0089e39SRichard Lowe 	} else if (handlep->ah_acc.devacc_attr_access == DDI_FLAGERR_ACC &&
241*f0089e39SRichard Lowe 	    hp->ahi_scan == NULL) {
242*f0089e39SRichard Lowe 		handlep->ah_acc.devacc_attr_access = DDI_DEFAULT_ACC;
243*f0089e39SRichard Lowe 	} else if (DDI_FM_ACC_ERR_CAP(fmcap)) {
244*f0089e39SRichard Lowe 		if (handlep->ah_acc.devacc_attr_access == DDI_DEFAULT_ACC) {
245*f0089e39SRichard Lowe 			if (handlep->ah_xfermodes)
246*f0089e39SRichard Lowe 				return;
247*f0089e39SRichard Lowe 			i_ddi_drv_ereport_post(handlep->ah_dip, DVR_EFMCAP,
248*f0089e39SRichard Lowe 			    NULL, DDI_NOSLEEP);
249*f0089e39SRichard Lowe 		} else {
250*f0089e39SRichard Lowe 			errp = hp->ahi_err;
251*f0089e39SRichard Lowe 			otp = (on_trap_data_t *)errp->err_ontrap;
252*f0089e39SRichard Lowe 			otp->ot_handle = (void *)(hp);
253*f0089e39SRichard Lowe 			otp->ot_prot = OT_DATA_ACCESS;
254*f0089e39SRichard Lowe 			errp->err_status = DDI_FM_OK;
255*f0089e39SRichard Lowe 			errp->err_expected = DDI_FM_ERR_UNEXPECTED;
256*f0089e39SRichard Lowe 			errp->err_cf = impl_acc_check;
257*f0089e39SRichard Lowe 		}
258*f0089e39SRichard Lowe 	}
259*f0089e39SRichard Lowe }
260*f0089e39SRichard Lowe 
261*f0089e39SRichard Lowe /* ARGSUSED */
262*f0089e39SRichard Lowe int
impl_dma_check(dev_info_t * dip,const void * handle,const void * pci_hdl,const void * not_used)263*f0089e39SRichard Lowe impl_dma_check(dev_info_t *dip, const void *handle, const void *pci_hdl,
264*f0089e39SRichard Lowe     const void *not_used)
265*f0089e39SRichard Lowe {
266*f0089e39SRichard Lowe 	return (DDI_FM_UNKNOWN);
267*f0089e39SRichard Lowe }
268*f0089e39SRichard Lowe 
269*f0089e39SRichard Lowe void
impl_acc_hdl_init(ddi_acc_hdl_t * handlep)270*f0089e39SRichard Lowe impl_acc_hdl_init(ddi_acc_hdl_t *handlep)
271*f0089e39SRichard Lowe {
272*f0089e39SRichard Lowe 	ddi_acc_impl_t *hp;
273*f0089e39SRichard Lowe 	int fmcap;
274*f0089e39SRichard Lowe 	int devacc_attr_access;
275*f0089e39SRichard Lowe 
276*f0089e39SRichard Lowe 	if (!handlep)
277*f0089e39SRichard Lowe 		return;
278*f0089e39SRichard Lowe 	fmcap = ddi_fm_capable(handlep->ah_dip);
279*f0089e39SRichard Lowe 	if (handlep->ah_acc.devacc_attr_version < DDI_DEVICE_ATTR_V1 ||
280*f0089e39SRichard Lowe 	    !DDI_FM_ACC_ERR_CAP(fmcap))
281*f0089e39SRichard Lowe 		devacc_attr_access = DDI_DEFAULT_ACC;
282*f0089e39SRichard Lowe 	else
283*f0089e39SRichard Lowe 		devacc_attr_access = handlep->ah_acc.devacc_attr_access;
284*f0089e39SRichard Lowe 
285*f0089e39SRichard Lowe 	hp = (ddi_acc_impl_t *)handlep->ah_platform_private;
286*f0089e39SRichard Lowe 
287*f0089e39SRichard Lowe 	/*
288*f0089e39SRichard Lowe 	 * Can only do FLAGERR if scan callback is set up. This should
289*f0089e39SRichard Lowe 	 * also guarantee that the peekpoke_mutex and err_mutex are defined.
290*f0089e39SRichard Lowe 	 */
291*f0089e39SRichard Lowe 	if (devacc_attr_access == DDI_FLAGERR_ACC && hp->ahi_scan == NULL)
292*f0089e39SRichard Lowe 		devacc_attr_access = DDI_DEFAULT_ACC;
293*f0089e39SRichard Lowe 
294*f0089e39SRichard Lowe 	switch (devacc_attr_access) {
295*f0089e39SRichard Lowe 	case DDI_CAUTIOUS_ACC:
296*f0089e39SRichard Lowe 		hp->ahi_get8 = i_ddi_caut_get8;
297*f0089e39SRichard Lowe 		hp->ahi_put8 = i_ddi_caut_put8;
298*f0089e39SRichard Lowe 		hp->ahi_rep_get8 = i_ddi_caut_rep_get8;
299*f0089e39SRichard Lowe 		hp->ahi_rep_put8 = i_ddi_caut_rep_put8;
300*f0089e39SRichard Lowe 		hp->ahi_get16 = i_ddi_caut_get16;
301*f0089e39SRichard Lowe 		hp->ahi_get32 = i_ddi_caut_get32;
302*f0089e39SRichard Lowe 		hp->ahi_put16 = i_ddi_caut_put16;
303*f0089e39SRichard Lowe 		hp->ahi_put32 = i_ddi_caut_put32;
304*f0089e39SRichard Lowe 		hp->ahi_rep_get16 = i_ddi_caut_rep_get16;
305*f0089e39SRichard Lowe 		hp->ahi_rep_get32 = i_ddi_caut_rep_get32;
306*f0089e39SRichard Lowe 		hp->ahi_rep_put16 = i_ddi_caut_rep_put16;
307*f0089e39SRichard Lowe 		hp->ahi_rep_put32 = i_ddi_caut_rep_put32;
308*f0089e39SRichard Lowe 		hp->ahi_get64 = i_ddi_caut_get64;
309*f0089e39SRichard Lowe 		hp->ahi_put64 = i_ddi_caut_put64;
310*f0089e39SRichard Lowe 		hp->ahi_rep_get64 = i_ddi_caut_rep_get64;
311*f0089e39SRichard Lowe 		hp->ahi_rep_put64 = i_ddi_caut_rep_put64;
312*f0089e39SRichard Lowe 		break;
313*f0089e39SRichard Lowe 	case DDI_FLAGERR_ACC:
314*f0089e39SRichard Lowe 		if (hp->ahi_acc_attr & DDI_ACCATTR_IO_SPACE) {
315*f0089e39SRichard Lowe 			hp->ahi_get8 = i_ddi_prot_io_get8;
316*f0089e39SRichard Lowe 			hp->ahi_put8 = i_ddi_prot_io_put8;
317*f0089e39SRichard Lowe 			hp->ahi_rep_get8 = i_ddi_prot_io_rep_get8;
318*f0089e39SRichard Lowe 			hp->ahi_rep_put8 = i_ddi_prot_io_rep_put8;
319*f0089e39SRichard Lowe 
320*f0089e39SRichard Lowe 			/* temporary set these 64 functions to no-ops */
321*f0089e39SRichard Lowe 			hp->ahi_get64 = i_ddi_io_get64;
322*f0089e39SRichard Lowe 			hp->ahi_put64 = i_ddi_io_put64;
323*f0089e39SRichard Lowe 			hp->ahi_rep_get64 = i_ddi_io_rep_get64;
324*f0089e39SRichard Lowe 			hp->ahi_rep_put64 = i_ddi_io_rep_put64;
325*f0089e39SRichard Lowe 
326*f0089e39SRichard Lowe 			/*
327*f0089e39SRichard Lowe 			 * check for BIG endian access
328*f0089e39SRichard Lowe 			 */
329*f0089e39SRichard Lowe 			if (handlep->ah_acc.devacc_attr_endian_flags ==
330*f0089e39SRichard Lowe 			    DDI_STRUCTURE_BE_ACC) {
331*f0089e39SRichard Lowe 				hp->ahi_get16 = i_ddi_prot_io_swap_get16;
332*f0089e39SRichard Lowe 				hp->ahi_get32 = i_ddi_prot_io_swap_get32;
333*f0089e39SRichard Lowe 				hp->ahi_put16 = i_ddi_prot_io_swap_put16;
334*f0089e39SRichard Lowe 				hp->ahi_put32 = i_ddi_prot_io_swap_put32;
335*f0089e39SRichard Lowe 				hp->ahi_rep_get16 =
336*f0089e39SRichard Lowe 				    i_ddi_prot_io_swap_rep_get16;
337*f0089e39SRichard Lowe 				hp->ahi_rep_get32 =
338*f0089e39SRichard Lowe 				    i_ddi_prot_io_swap_rep_get32;
339*f0089e39SRichard Lowe 				hp->ahi_rep_put16 =
340*f0089e39SRichard Lowe 				    i_ddi_prot_io_swap_rep_put16;
341*f0089e39SRichard Lowe 				hp->ahi_rep_put32 =
342*f0089e39SRichard Lowe 				    i_ddi_prot_io_swap_rep_put32;
343*f0089e39SRichard Lowe 			} else {
344*f0089e39SRichard Lowe 				hp->ahi_acc_attr |= DDI_ACCATTR_DIRECT;
345*f0089e39SRichard Lowe 				hp->ahi_get16 = i_ddi_prot_io_get16;
346*f0089e39SRichard Lowe 				hp->ahi_get32 = i_ddi_prot_io_get32;
347*f0089e39SRichard Lowe 				hp->ahi_put16 = i_ddi_prot_io_put16;
348*f0089e39SRichard Lowe 				hp->ahi_put32 = i_ddi_prot_io_put32;
349*f0089e39SRichard Lowe 				hp->ahi_rep_get16 = i_ddi_prot_io_rep_get16;
350*f0089e39SRichard Lowe 				hp->ahi_rep_get32 = i_ddi_prot_io_rep_get32;
351*f0089e39SRichard Lowe 				hp->ahi_rep_put16 = i_ddi_prot_io_rep_put16;
352*f0089e39SRichard Lowe 				hp->ahi_rep_put32 = i_ddi_prot_io_rep_put32;
353*f0089e39SRichard Lowe 			}
354*f0089e39SRichard Lowe 
355*f0089e39SRichard Lowe 		} else if (hp->ahi_acc_attr & DDI_ACCATTR_CPU_VADDR) {
356*f0089e39SRichard Lowe 
357*f0089e39SRichard Lowe 			hp->ahi_get8 = i_ddi_prot_vaddr_get8;
358*f0089e39SRichard Lowe 			hp->ahi_put8 = i_ddi_prot_vaddr_put8;
359*f0089e39SRichard Lowe 			hp->ahi_rep_get8 = i_ddi_prot_vaddr_rep_get8;
360*f0089e39SRichard Lowe 			hp->ahi_rep_put8 = i_ddi_prot_vaddr_rep_put8;
361*f0089e39SRichard Lowe 
362*f0089e39SRichard Lowe 			/*
363*f0089e39SRichard Lowe 			 * check for BIG endian access
364*f0089e39SRichard Lowe 			 */
365*f0089e39SRichard Lowe 			if (handlep->ah_acc.devacc_attr_endian_flags ==
366*f0089e39SRichard Lowe 			    DDI_STRUCTURE_BE_ACC) {
367*f0089e39SRichard Lowe 
368*f0089e39SRichard Lowe 				hp->ahi_get16 = i_ddi_prot_vaddr_swap_get16;
369*f0089e39SRichard Lowe 				hp->ahi_get32 = i_ddi_prot_vaddr_swap_get32;
370*f0089e39SRichard Lowe 				hp->ahi_get64 = i_ddi_prot_vaddr_swap_get64;
371*f0089e39SRichard Lowe 				hp->ahi_put16 = i_ddi_prot_vaddr_swap_put16;
372*f0089e39SRichard Lowe 				hp->ahi_put32 = i_ddi_prot_vaddr_swap_put32;
373*f0089e39SRichard Lowe 				hp->ahi_put64 = i_ddi_prot_vaddr_swap_put64;
374*f0089e39SRichard Lowe 				hp->ahi_rep_get16 =
375*f0089e39SRichard Lowe 				    i_ddi_prot_vaddr_swap_rep_get16;
376*f0089e39SRichard Lowe 				hp->ahi_rep_get32 =
377*f0089e39SRichard Lowe 				    i_ddi_prot_vaddr_swap_rep_get32;
378*f0089e39SRichard Lowe 				hp->ahi_rep_get64 =
379*f0089e39SRichard Lowe 				    i_ddi_prot_vaddr_swap_rep_get64;
380*f0089e39SRichard Lowe 				hp->ahi_rep_put16 =
381*f0089e39SRichard Lowe 				    i_ddi_prot_vaddr_swap_rep_put16;
382*f0089e39SRichard Lowe 				hp->ahi_rep_put32 =
383*f0089e39SRichard Lowe 				    i_ddi_prot_vaddr_swap_rep_put32;
384*f0089e39SRichard Lowe 				hp->ahi_rep_put64 =
385*f0089e39SRichard Lowe 				    i_ddi_prot_vaddr_swap_rep_put64;
386*f0089e39SRichard Lowe 			} else {
387*f0089e39SRichard Lowe 				hp->ahi_acc_attr |= DDI_ACCATTR_DIRECT;
388*f0089e39SRichard Lowe 				hp->ahi_get16 = i_ddi_prot_vaddr_get16;
389*f0089e39SRichard Lowe 				hp->ahi_get32 = i_ddi_prot_vaddr_get32;
390*f0089e39SRichard Lowe 				hp->ahi_get64 = i_ddi_prot_vaddr_get64;
391*f0089e39SRichard Lowe 				hp->ahi_put16 = i_ddi_prot_vaddr_put16;
392*f0089e39SRichard Lowe 				hp->ahi_put32 = i_ddi_prot_vaddr_put32;
393*f0089e39SRichard Lowe 				hp->ahi_put64 = i_ddi_prot_vaddr_put64;
394*f0089e39SRichard Lowe 				hp->ahi_rep_get16 = i_ddi_prot_vaddr_rep_get16;
395*f0089e39SRichard Lowe 				hp->ahi_rep_get32 = i_ddi_prot_vaddr_rep_get32;
396*f0089e39SRichard Lowe 				hp->ahi_rep_get64 = i_ddi_prot_vaddr_rep_get64;
397*f0089e39SRichard Lowe 				hp->ahi_rep_put16 = i_ddi_prot_vaddr_rep_put16;
398*f0089e39SRichard Lowe 				hp->ahi_rep_put32 = i_ddi_prot_vaddr_rep_put32;
399*f0089e39SRichard Lowe 				hp->ahi_rep_put64 = i_ddi_prot_vaddr_rep_put64;
400*f0089e39SRichard Lowe 			}
401*f0089e39SRichard Lowe 		}
402*f0089e39SRichard Lowe 		break;
403*f0089e39SRichard Lowe 	case DDI_DEFAULT_ACC:
404*f0089e39SRichard Lowe 		if (hp->ahi_acc_attr & DDI_ACCATTR_IO_SPACE) {
405*f0089e39SRichard Lowe 			hp->ahi_get8 = i_ddi_io_get8;
406*f0089e39SRichard Lowe 			hp->ahi_put8 = i_ddi_io_put8;
407*f0089e39SRichard Lowe 			hp->ahi_rep_get8 = i_ddi_io_rep_get8;
408*f0089e39SRichard Lowe 			hp->ahi_rep_put8 = i_ddi_io_rep_put8;
409*f0089e39SRichard Lowe 
410*f0089e39SRichard Lowe 			/* temporary set these 64 functions to no-ops */
411*f0089e39SRichard Lowe 			hp->ahi_get64 = i_ddi_io_get64;
412*f0089e39SRichard Lowe 			hp->ahi_put64 = i_ddi_io_put64;
413*f0089e39SRichard Lowe 			hp->ahi_rep_get64 = i_ddi_io_rep_get64;
414*f0089e39SRichard Lowe 			hp->ahi_rep_put64 = i_ddi_io_rep_put64;
415*f0089e39SRichard Lowe 
416*f0089e39SRichard Lowe 			/*
417*f0089e39SRichard Lowe 			 * check for BIG endian access
418*f0089e39SRichard Lowe 			 */
419*f0089e39SRichard Lowe 			if (handlep->ah_acc.devacc_attr_endian_flags ==
420*f0089e39SRichard Lowe 			    DDI_STRUCTURE_BE_ACC) {
421*f0089e39SRichard Lowe 				hp->ahi_get16 = i_ddi_io_swap_get16;
422*f0089e39SRichard Lowe 				hp->ahi_get32 = i_ddi_io_swap_get32;
423*f0089e39SRichard Lowe 				hp->ahi_put16 = i_ddi_io_swap_put16;
424*f0089e39SRichard Lowe 				hp->ahi_put32 = i_ddi_io_swap_put32;
425*f0089e39SRichard Lowe 				hp->ahi_rep_get16 = i_ddi_io_swap_rep_get16;
426*f0089e39SRichard Lowe 				hp->ahi_rep_get32 = i_ddi_io_swap_rep_get32;
427*f0089e39SRichard Lowe 				hp->ahi_rep_put16 = i_ddi_io_swap_rep_put16;
428*f0089e39SRichard Lowe 				hp->ahi_rep_put32 = i_ddi_io_swap_rep_put32;
429*f0089e39SRichard Lowe 			} else {
430*f0089e39SRichard Lowe 				hp->ahi_acc_attr |= DDI_ACCATTR_DIRECT;
431*f0089e39SRichard Lowe 				hp->ahi_get16 = i_ddi_io_get16;
432*f0089e39SRichard Lowe 				hp->ahi_get32 = i_ddi_io_get32;
433*f0089e39SRichard Lowe 				hp->ahi_put16 = i_ddi_io_put16;
434*f0089e39SRichard Lowe 				hp->ahi_put32 = i_ddi_io_put32;
435*f0089e39SRichard Lowe 				hp->ahi_rep_get16 = i_ddi_io_rep_get16;
436*f0089e39SRichard Lowe 				hp->ahi_rep_get32 = i_ddi_io_rep_get32;
437*f0089e39SRichard Lowe 				hp->ahi_rep_put16 = i_ddi_io_rep_put16;
438*f0089e39SRichard Lowe 				hp->ahi_rep_put32 = i_ddi_io_rep_put32;
439*f0089e39SRichard Lowe 			}
440*f0089e39SRichard Lowe 
441*f0089e39SRichard Lowe 		} else if (hp->ahi_acc_attr & DDI_ACCATTR_CPU_VADDR) {
442*f0089e39SRichard Lowe 
443*f0089e39SRichard Lowe 			hp->ahi_get8 = i_ddi_vaddr_get8;
444*f0089e39SRichard Lowe 			hp->ahi_put8 = i_ddi_vaddr_put8;
445*f0089e39SRichard Lowe 			hp->ahi_rep_get8 = i_ddi_vaddr_rep_get8;
446*f0089e39SRichard Lowe 			hp->ahi_rep_put8 = i_ddi_vaddr_rep_put8;
447*f0089e39SRichard Lowe 
448*f0089e39SRichard Lowe 			/*
449*f0089e39SRichard Lowe 			 * check for BIG endian access
450*f0089e39SRichard Lowe 			 */
451*f0089e39SRichard Lowe 			if (handlep->ah_acc.devacc_attr_endian_flags ==
452*f0089e39SRichard Lowe 			    DDI_STRUCTURE_BE_ACC) {
453*f0089e39SRichard Lowe 
454*f0089e39SRichard Lowe 				hp->ahi_get16 = i_ddi_vaddr_swap_get16;
455*f0089e39SRichard Lowe 				hp->ahi_get32 = i_ddi_vaddr_swap_get32;
456*f0089e39SRichard Lowe 				hp->ahi_get64 = i_ddi_vaddr_swap_get64;
457*f0089e39SRichard Lowe 				hp->ahi_put16 = i_ddi_vaddr_swap_put16;
458*f0089e39SRichard Lowe 				hp->ahi_put32 = i_ddi_vaddr_swap_put32;
459*f0089e39SRichard Lowe 				hp->ahi_put64 = i_ddi_vaddr_swap_put64;
460*f0089e39SRichard Lowe 				hp->ahi_rep_get16 = i_ddi_vaddr_swap_rep_get16;
461*f0089e39SRichard Lowe 				hp->ahi_rep_get32 = i_ddi_vaddr_swap_rep_get32;
462*f0089e39SRichard Lowe 				hp->ahi_rep_get64 = i_ddi_vaddr_swap_rep_get64;
463*f0089e39SRichard Lowe 				hp->ahi_rep_put16 = i_ddi_vaddr_swap_rep_put16;
464*f0089e39SRichard Lowe 				hp->ahi_rep_put32 = i_ddi_vaddr_swap_rep_put32;
465*f0089e39SRichard Lowe 				hp->ahi_rep_put64 = i_ddi_vaddr_swap_rep_put64;
466*f0089e39SRichard Lowe 			} else {
467*f0089e39SRichard Lowe 				hp->ahi_acc_attr |= DDI_ACCATTR_DIRECT;
468*f0089e39SRichard Lowe 				hp->ahi_get16 = i_ddi_vaddr_get16;
469*f0089e39SRichard Lowe 				hp->ahi_get32 = i_ddi_vaddr_get32;
470*f0089e39SRichard Lowe 				hp->ahi_get64 = i_ddi_vaddr_get64;
471*f0089e39SRichard Lowe 				hp->ahi_put16 = i_ddi_vaddr_put16;
472*f0089e39SRichard Lowe 				hp->ahi_put32 = i_ddi_vaddr_put32;
473*f0089e39SRichard Lowe 				hp->ahi_put64 = i_ddi_vaddr_put64;
474*f0089e39SRichard Lowe 				hp->ahi_rep_get16 = i_ddi_vaddr_rep_get16;
475*f0089e39SRichard Lowe 				hp->ahi_rep_get32 = i_ddi_vaddr_rep_get32;
476*f0089e39SRichard Lowe 				hp->ahi_rep_get64 = i_ddi_vaddr_rep_get64;
477*f0089e39SRichard Lowe 				hp->ahi_rep_put16 = i_ddi_vaddr_rep_put16;
478*f0089e39SRichard Lowe 				hp->ahi_rep_put32 = i_ddi_vaddr_rep_put32;
479*f0089e39SRichard Lowe 				hp->ahi_rep_put64 = i_ddi_vaddr_rep_put64;
480*f0089e39SRichard Lowe 			}
481*f0089e39SRichard Lowe 		}
482*f0089e39SRichard Lowe 		break;
483*f0089e39SRichard Lowe 	}
484*f0089e39SRichard Lowe 	hp->ahi_fault_check = i_ddi_acc_fault_check;
485*f0089e39SRichard Lowe 	hp->ahi_fault_notify = i_ddi_acc_fault_notify;
486*f0089e39SRichard Lowe 	hp->ahi_fault = 0;
487*f0089e39SRichard Lowe 	impl_acc_err_init(handlep);
488*f0089e39SRichard Lowe }
489*f0089e39SRichard Lowe 
490*f0089e39SRichard Lowe /*
491*f0089e39SRichard Lowe  * The followings are low-level routines for data access.
492*f0089e39SRichard Lowe  *
493*f0089e39SRichard Lowe  * All of these routines should be implemented in assembly. Those
494*f0089e39SRichard Lowe  * that have been rewritten be found in ~ml/ddi_i86_asm.s
495*f0089e39SRichard Lowe  */
496*f0089e39SRichard Lowe 
497*f0089e39SRichard Lowe /*ARGSUSED*/
498*f0089e39SRichard Lowe uint16_t
i_ddi_vaddr_swap_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)499*f0089e39SRichard Lowe i_ddi_vaddr_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
500*f0089e39SRichard Lowe {
501*f0089e39SRichard Lowe 	return (ddi_swap16(*addr));
502*f0089e39SRichard Lowe }
503*f0089e39SRichard Lowe 
504*f0089e39SRichard Lowe /*ARGSUSED*/
505*f0089e39SRichard Lowe uint16_t
i_ddi_io_swap_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)506*f0089e39SRichard Lowe i_ddi_io_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
507*f0089e39SRichard Lowe {
508*f0089e39SRichard Lowe 	return (ddi_swap16(inw((uintptr_t)addr)));
509*f0089e39SRichard Lowe }
510*f0089e39SRichard Lowe 
511*f0089e39SRichard Lowe /*ARGSUSED*/
512*f0089e39SRichard Lowe uint32_t
i_ddi_vaddr_swap_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)513*f0089e39SRichard Lowe i_ddi_vaddr_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
514*f0089e39SRichard Lowe {
515*f0089e39SRichard Lowe 	return (ddi_swap32(*addr));
516*f0089e39SRichard Lowe }
517*f0089e39SRichard Lowe 
518*f0089e39SRichard Lowe /*ARGSUSED*/
519*f0089e39SRichard Lowe uint32_t
i_ddi_io_swap_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)520*f0089e39SRichard Lowe i_ddi_io_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
521*f0089e39SRichard Lowe {
522*f0089e39SRichard Lowe 	return (ddi_swap32(inl((uintptr_t)addr)));
523*f0089e39SRichard Lowe }
524*f0089e39SRichard Lowe 
525*f0089e39SRichard Lowe /*ARGSUSED*/
526*f0089e39SRichard Lowe uint64_t
i_ddi_vaddr_swap_get64(ddi_acc_impl_t * hdlp,uint64_t * addr)527*f0089e39SRichard Lowe i_ddi_vaddr_swap_get64(ddi_acc_impl_t *hdlp, uint64_t *addr)
528*f0089e39SRichard Lowe {
529*f0089e39SRichard Lowe 	return (ddi_swap64(*addr));
530*f0089e39SRichard Lowe }
531*f0089e39SRichard Lowe 
532*f0089e39SRichard Lowe /*ARGSUSED*/
533*f0089e39SRichard Lowe void
i_ddi_vaddr_swap_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)534*f0089e39SRichard Lowe i_ddi_vaddr_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value)
535*f0089e39SRichard Lowe {
536*f0089e39SRichard Lowe 	*addr = ddi_swap16(value);
537*f0089e39SRichard Lowe }
538*f0089e39SRichard Lowe 
539*f0089e39SRichard Lowe /*ARGSUSED*/
540*f0089e39SRichard Lowe void
i_ddi_io_swap_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)541*f0089e39SRichard Lowe i_ddi_io_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value)
542*f0089e39SRichard Lowe {
543*f0089e39SRichard Lowe 	outw((uintptr_t)addr, ddi_swap16(value));
544*f0089e39SRichard Lowe }
545*f0089e39SRichard Lowe 
546*f0089e39SRichard Lowe /*ARGSUSED*/
547*f0089e39SRichard Lowe void
i_ddi_vaddr_swap_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)548*f0089e39SRichard Lowe i_ddi_vaddr_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value)
549*f0089e39SRichard Lowe {
550*f0089e39SRichard Lowe 	*addr = ddi_swap32(value);
551*f0089e39SRichard Lowe }
552*f0089e39SRichard Lowe 
553*f0089e39SRichard Lowe /*ARGSUSED*/
554*f0089e39SRichard Lowe void
i_ddi_io_swap_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)555*f0089e39SRichard Lowe i_ddi_io_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value)
556*f0089e39SRichard Lowe {
557*f0089e39SRichard Lowe 	outl((uintptr_t)addr, ddi_swap32(value));
558*f0089e39SRichard Lowe }
559*f0089e39SRichard Lowe 
560*f0089e39SRichard Lowe /*ARGSUSED*/
561*f0089e39SRichard Lowe void
i_ddi_vaddr_swap_put64(ddi_acc_impl_t * hdlp,uint64_t * addr,uint64_t value)562*f0089e39SRichard Lowe i_ddi_vaddr_swap_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value)
563*f0089e39SRichard Lowe {
564*f0089e39SRichard Lowe 	*addr = ddi_swap64(value);
565*f0089e39SRichard Lowe }
566*f0089e39SRichard Lowe 
567*f0089e39SRichard Lowe /*ARGSUSED*/
568*f0089e39SRichard Lowe void
i_ddi_vaddr_rep_get8(ddi_acc_impl_t * hdlp,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount,uint_t flags)569*f0089e39SRichard Lowe i_ddi_vaddr_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
570*f0089e39SRichard Lowe     uint8_t *dev_addr, size_t repcount, uint_t flags)
571*f0089e39SRichard Lowe {
572*f0089e39SRichard Lowe 	uint8_t	*h, *d;
573*f0089e39SRichard Lowe 
574*f0089e39SRichard Lowe 	h = host_addr;
575*f0089e39SRichard Lowe 	d = dev_addr;
576*f0089e39SRichard Lowe 
577*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
578*f0089e39SRichard Lowe 		for (; repcount; repcount--)
579*f0089e39SRichard Lowe 			*h++ = *d++;
580*f0089e39SRichard Lowe 	else
581*f0089e39SRichard Lowe 		for (; repcount; repcount--)
582*f0089e39SRichard Lowe 			*h++ = *d;
583*f0089e39SRichard Lowe }
584*f0089e39SRichard Lowe 
585*f0089e39SRichard Lowe /*ARGSUSED*/
586*f0089e39SRichard Lowe void
i_ddi_vaddr_rep_get16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)587*f0089e39SRichard Lowe i_ddi_vaddr_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
588*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
589*f0089e39SRichard Lowe {
590*f0089e39SRichard Lowe 	uint16_t *h, *d;
591*f0089e39SRichard Lowe 
592*f0089e39SRichard Lowe 	h = host_addr;
593*f0089e39SRichard Lowe 	d = dev_addr;
594*f0089e39SRichard Lowe 
595*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
596*f0089e39SRichard Lowe 		for (; repcount; repcount--)
597*f0089e39SRichard Lowe 			*h++ = *d++;
598*f0089e39SRichard Lowe 	else
599*f0089e39SRichard Lowe 		for (; repcount; repcount--)
600*f0089e39SRichard Lowe 			*h++ = *d;
601*f0089e39SRichard Lowe }
602*f0089e39SRichard Lowe 
603*f0089e39SRichard Lowe /*ARGSUSED*/
604*f0089e39SRichard Lowe void
i_ddi_vaddr_swap_rep_get16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)605*f0089e39SRichard Lowe i_ddi_vaddr_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
606*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
607*f0089e39SRichard Lowe {
608*f0089e39SRichard Lowe 	uint16_t *h, *d;
609*f0089e39SRichard Lowe 
610*f0089e39SRichard Lowe 	h = host_addr;
611*f0089e39SRichard Lowe 	d = dev_addr;
612*f0089e39SRichard Lowe 
613*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
614*f0089e39SRichard Lowe 		for (; repcount; repcount--)
615*f0089e39SRichard Lowe 			*h++ = ddi_swap16(*d++);
616*f0089e39SRichard Lowe 	else
617*f0089e39SRichard Lowe 		for (; repcount; repcount--)
618*f0089e39SRichard Lowe 			*h++ = ddi_swap16(*d);
619*f0089e39SRichard Lowe }
620*f0089e39SRichard Lowe 
621*f0089e39SRichard Lowe /*ARGSUSED*/
622*f0089e39SRichard Lowe void
i_ddi_io_swap_rep_get16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)623*f0089e39SRichard Lowe i_ddi_io_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
624*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
625*f0089e39SRichard Lowe {
626*f0089e39SRichard Lowe 	uint16_t *h;
627*f0089e39SRichard Lowe 	uintptr_t port;
628*f0089e39SRichard Lowe 
629*f0089e39SRichard Lowe 	h = host_addr;
630*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
631*f0089e39SRichard Lowe 
632*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
633*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 2)
634*f0089e39SRichard Lowe 			*h++ = ddi_swap16(inw(port));
635*f0089e39SRichard Lowe 	else
636*f0089e39SRichard Lowe 		for (; repcount; repcount--)
637*f0089e39SRichard Lowe 			*h++ = ddi_swap16(inw(port));
638*f0089e39SRichard Lowe }
639*f0089e39SRichard Lowe 
640*f0089e39SRichard Lowe /*ARGSUSED*/
641*f0089e39SRichard Lowe void
i_ddi_vaddr_rep_get32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)642*f0089e39SRichard Lowe i_ddi_vaddr_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
643*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
644*f0089e39SRichard Lowe {
645*f0089e39SRichard Lowe 	uint32_t *h, *d;
646*f0089e39SRichard Lowe 
647*f0089e39SRichard Lowe 	h = host_addr;
648*f0089e39SRichard Lowe 	d = dev_addr;
649*f0089e39SRichard Lowe 
650*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
651*f0089e39SRichard Lowe 		for (; repcount; repcount--)
652*f0089e39SRichard Lowe 			*h++ = *d++;
653*f0089e39SRichard Lowe 	else
654*f0089e39SRichard Lowe 		for (; repcount; repcount--)
655*f0089e39SRichard Lowe 			*h++ = *d;
656*f0089e39SRichard Lowe }
657*f0089e39SRichard Lowe 
658*f0089e39SRichard Lowe /*ARGSUSED*/
659*f0089e39SRichard Lowe void
i_ddi_vaddr_swap_rep_get32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)660*f0089e39SRichard Lowe i_ddi_vaddr_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
661*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
662*f0089e39SRichard Lowe {
663*f0089e39SRichard Lowe 	uint32_t *h, *d;
664*f0089e39SRichard Lowe 
665*f0089e39SRichard Lowe 	h = host_addr;
666*f0089e39SRichard Lowe 	d = dev_addr;
667*f0089e39SRichard Lowe 
668*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
669*f0089e39SRichard Lowe 		for (; repcount; repcount--)
670*f0089e39SRichard Lowe 			*h++ = ddi_swap32(*d++);
671*f0089e39SRichard Lowe 	else
672*f0089e39SRichard Lowe 		for (; repcount; repcount--)
673*f0089e39SRichard Lowe 			*h++ = ddi_swap32(*d);
674*f0089e39SRichard Lowe }
675*f0089e39SRichard Lowe 
676*f0089e39SRichard Lowe /*ARGSUSED*/
677*f0089e39SRichard Lowe void
i_ddi_io_swap_rep_get32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)678*f0089e39SRichard Lowe i_ddi_io_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
679*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
680*f0089e39SRichard Lowe {
681*f0089e39SRichard Lowe 	uint32_t *h;
682*f0089e39SRichard Lowe 	uintptr_t port;
683*f0089e39SRichard Lowe 
684*f0089e39SRichard Lowe 	h = host_addr;
685*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
686*f0089e39SRichard Lowe 
687*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
688*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 4)
689*f0089e39SRichard Lowe 			*h++ = ddi_swap32(inl(port));
690*f0089e39SRichard Lowe 	else
691*f0089e39SRichard Lowe 		for (; repcount; repcount--)
692*f0089e39SRichard Lowe 			*h++ = ddi_swap32(inl(port));
693*f0089e39SRichard Lowe }
694*f0089e39SRichard Lowe 
695*f0089e39SRichard Lowe /*ARGSUSED*/
696*f0089e39SRichard Lowe void
i_ddi_vaddr_rep_get64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t * dev_addr,size_t repcount,uint_t flags)697*f0089e39SRichard Lowe i_ddi_vaddr_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
698*f0089e39SRichard Lowe     uint64_t *dev_addr, size_t repcount, uint_t flags)
699*f0089e39SRichard Lowe {
700*f0089e39SRichard Lowe 	uint64_t *h, *d;
701*f0089e39SRichard Lowe 
702*f0089e39SRichard Lowe 	h = host_addr;
703*f0089e39SRichard Lowe 	d = dev_addr;
704*f0089e39SRichard Lowe 
705*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
706*f0089e39SRichard Lowe 		for (; repcount; repcount--)
707*f0089e39SRichard Lowe 			*h++ = *d++;
708*f0089e39SRichard Lowe 	else
709*f0089e39SRichard Lowe 		for (; repcount; repcount--)
710*f0089e39SRichard Lowe 			*h++ = *d;
711*f0089e39SRichard Lowe }
712*f0089e39SRichard Lowe 
713*f0089e39SRichard Lowe /*ARGSUSED*/
714*f0089e39SRichard Lowe void
i_ddi_vaddr_swap_rep_get64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t * dev_addr,size_t repcount,uint_t flags)715*f0089e39SRichard Lowe i_ddi_vaddr_swap_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
716*f0089e39SRichard Lowe     uint64_t *dev_addr, size_t repcount, uint_t flags)
717*f0089e39SRichard Lowe {
718*f0089e39SRichard Lowe 	uint64_t *h, *d;
719*f0089e39SRichard Lowe 
720*f0089e39SRichard Lowe 	h = host_addr;
721*f0089e39SRichard Lowe 	d = dev_addr;
722*f0089e39SRichard Lowe 
723*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
724*f0089e39SRichard Lowe 		for (; repcount; repcount--)
725*f0089e39SRichard Lowe 			*h++ = ddi_swap64(*d++);
726*f0089e39SRichard Lowe 	else
727*f0089e39SRichard Lowe 		for (; repcount; repcount--)
728*f0089e39SRichard Lowe 			*h++ = ddi_swap64(*d);
729*f0089e39SRichard Lowe }
730*f0089e39SRichard Lowe 
731*f0089e39SRichard Lowe /*ARGSUSED*/
732*f0089e39SRichard Lowe void
i_ddi_vaddr_rep_put8(ddi_acc_impl_t * hdlp,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount,uint_t flags)733*f0089e39SRichard Lowe i_ddi_vaddr_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
734*f0089e39SRichard Lowe     uint8_t *dev_addr, size_t repcount, uint_t flags)
735*f0089e39SRichard Lowe {
736*f0089e39SRichard Lowe 	uint8_t	*h, *d;
737*f0089e39SRichard Lowe 
738*f0089e39SRichard Lowe 	h = host_addr;
739*f0089e39SRichard Lowe 	d = dev_addr;
740*f0089e39SRichard Lowe 
741*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
742*f0089e39SRichard Lowe 		for (; repcount; repcount--)
743*f0089e39SRichard Lowe 			*d++ = *h++;
744*f0089e39SRichard Lowe 	else
745*f0089e39SRichard Lowe 		for (; repcount; repcount--)
746*f0089e39SRichard Lowe 			*d = *h++;
747*f0089e39SRichard Lowe }
748*f0089e39SRichard Lowe 
749*f0089e39SRichard Lowe /*ARGSUSED*/
750*f0089e39SRichard Lowe void
i_ddi_vaddr_rep_put16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)751*f0089e39SRichard Lowe i_ddi_vaddr_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
752*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
753*f0089e39SRichard Lowe {
754*f0089e39SRichard Lowe 	uint16_t *h, *d;
755*f0089e39SRichard Lowe 
756*f0089e39SRichard Lowe 	h = host_addr;
757*f0089e39SRichard Lowe 	d = dev_addr;
758*f0089e39SRichard Lowe 
759*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
760*f0089e39SRichard Lowe 		for (; repcount; repcount--)
761*f0089e39SRichard Lowe 			*d++ = *h++;
762*f0089e39SRichard Lowe 	else
763*f0089e39SRichard Lowe 		for (; repcount; repcount--)
764*f0089e39SRichard Lowe 			*d = *h++;
765*f0089e39SRichard Lowe }
766*f0089e39SRichard Lowe 
767*f0089e39SRichard Lowe /*ARGSUSED*/
768*f0089e39SRichard Lowe void
i_ddi_vaddr_swap_rep_put16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)769*f0089e39SRichard Lowe i_ddi_vaddr_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
770*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
771*f0089e39SRichard Lowe {
772*f0089e39SRichard Lowe 	uint16_t *h, *d;
773*f0089e39SRichard Lowe 
774*f0089e39SRichard Lowe 	h = host_addr;
775*f0089e39SRichard Lowe 	d = dev_addr;
776*f0089e39SRichard Lowe 
777*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
778*f0089e39SRichard Lowe 		for (; repcount; repcount--)
779*f0089e39SRichard Lowe 			*d++ = ddi_swap16(*h++);
780*f0089e39SRichard Lowe 	else
781*f0089e39SRichard Lowe 		for (; repcount; repcount--)
782*f0089e39SRichard Lowe 			*d = ddi_swap16(*h++);
783*f0089e39SRichard Lowe }
784*f0089e39SRichard Lowe 
785*f0089e39SRichard Lowe /*ARGSUSED*/
786*f0089e39SRichard Lowe void
i_ddi_io_swap_rep_put16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)787*f0089e39SRichard Lowe i_ddi_io_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
788*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
789*f0089e39SRichard Lowe {
790*f0089e39SRichard Lowe 	uint16_t *h;
791*f0089e39SRichard Lowe 	uintptr_t port;
792*f0089e39SRichard Lowe 
793*f0089e39SRichard Lowe 	h = host_addr;
794*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
795*f0089e39SRichard Lowe 
796*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
797*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 2)
798*f0089e39SRichard Lowe 			outw(port, ddi_swap16(*h++));
799*f0089e39SRichard Lowe 	else
800*f0089e39SRichard Lowe 		for (; repcount; repcount--)
801*f0089e39SRichard Lowe 			outw(port, ddi_swap16(*h++));
802*f0089e39SRichard Lowe }
803*f0089e39SRichard Lowe 
804*f0089e39SRichard Lowe /*ARGSUSED*/
805*f0089e39SRichard Lowe void
i_ddi_vaddr_rep_put32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)806*f0089e39SRichard Lowe i_ddi_vaddr_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
807*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
808*f0089e39SRichard Lowe {
809*f0089e39SRichard Lowe 	uint32_t *h, *d;
810*f0089e39SRichard Lowe 
811*f0089e39SRichard Lowe 	h = host_addr;
812*f0089e39SRichard Lowe 	d = dev_addr;
813*f0089e39SRichard Lowe 
814*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
815*f0089e39SRichard Lowe 		for (; repcount; repcount--)
816*f0089e39SRichard Lowe 			*d++ = *h++;
817*f0089e39SRichard Lowe 	else
818*f0089e39SRichard Lowe 		for (; repcount; repcount--)
819*f0089e39SRichard Lowe 			*d = *h++;
820*f0089e39SRichard Lowe }
821*f0089e39SRichard Lowe 
822*f0089e39SRichard Lowe /*ARGSUSED*/
823*f0089e39SRichard Lowe void
i_ddi_vaddr_swap_rep_put32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)824*f0089e39SRichard Lowe i_ddi_vaddr_swap_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
825*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
826*f0089e39SRichard Lowe {
827*f0089e39SRichard Lowe 	uint32_t *h, *d;
828*f0089e39SRichard Lowe 
829*f0089e39SRichard Lowe 	h = host_addr;
830*f0089e39SRichard Lowe 	d = dev_addr;
831*f0089e39SRichard Lowe 
832*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
833*f0089e39SRichard Lowe 		for (; repcount; repcount--)
834*f0089e39SRichard Lowe 			*d++ = ddi_swap32(*h++);
835*f0089e39SRichard Lowe 	else
836*f0089e39SRichard Lowe 		for (; repcount; repcount--)
837*f0089e39SRichard Lowe 			*d = ddi_swap32(*h++);
838*f0089e39SRichard Lowe }
839*f0089e39SRichard Lowe 
840*f0089e39SRichard Lowe /*ARGSUSED*/
841*f0089e39SRichard Lowe void
i_ddi_io_swap_rep_put32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)842*f0089e39SRichard Lowe i_ddi_io_swap_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
843*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
844*f0089e39SRichard Lowe {
845*f0089e39SRichard Lowe 	uint32_t *h;
846*f0089e39SRichard Lowe 	uintptr_t port;
847*f0089e39SRichard Lowe 
848*f0089e39SRichard Lowe 	h = host_addr;
849*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
850*f0089e39SRichard Lowe 
851*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
852*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 4)
853*f0089e39SRichard Lowe 			outl(port, ddi_swap32(*h++));
854*f0089e39SRichard Lowe 	else
855*f0089e39SRichard Lowe 		for (; repcount; repcount--)
856*f0089e39SRichard Lowe 			outl(port, ddi_swap32(*h++));
857*f0089e39SRichard Lowe }
858*f0089e39SRichard Lowe 
859*f0089e39SRichard Lowe /*ARGSUSED*/
860*f0089e39SRichard Lowe void
i_ddi_vaddr_rep_put64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t * dev_addr,size_t repcount,uint_t flags)861*f0089e39SRichard Lowe i_ddi_vaddr_rep_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
862*f0089e39SRichard Lowe     uint64_t *dev_addr, size_t repcount, uint_t flags)
863*f0089e39SRichard Lowe {
864*f0089e39SRichard Lowe 	uint64_t *h, *d;
865*f0089e39SRichard Lowe 
866*f0089e39SRichard Lowe 	h = host_addr;
867*f0089e39SRichard Lowe 	d = dev_addr;
868*f0089e39SRichard Lowe 
869*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
870*f0089e39SRichard Lowe 		for (; repcount; repcount--)
871*f0089e39SRichard Lowe 			*d++ = *h++;
872*f0089e39SRichard Lowe 	else
873*f0089e39SRichard Lowe 		for (; repcount; repcount--)
874*f0089e39SRichard Lowe 			*d = *h++;
875*f0089e39SRichard Lowe }
876*f0089e39SRichard Lowe 
877*f0089e39SRichard Lowe /*ARGSUSED*/
878*f0089e39SRichard Lowe void
i_ddi_vaddr_swap_rep_put64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t * dev_addr,size_t repcount,uint_t flags)879*f0089e39SRichard Lowe i_ddi_vaddr_swap_rep_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
880*f0089e39SRichard Lowe     uint64_t *dev_addr, size_t repcount, uint_t flags)
881*f0089e39SRichard Lowe {
882*f0089e39SRichard Lowe 	uint64_t *h, *d;
883*f0089e39SRichard Lowe 
884*f0089e39SRichard Lowe 	h = host_addr;
885*f0089e39SRichard Lowe 	d = dev_addr;
886*f0089e39SRichard Lowe 
887*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
888*f0089e39SRichard Lowe 		for (; repcount; repcount--)
889*f0089e39SRichard Lowe 			*d++ = ddi_swap64(*h++);
890*f0089e39SRichard Lowe 	else
891*f0089e39SRichard Lowe 		for (; repcount; repcount--)
892*f0089e39SRichard Lowe 			*d = ddi_swap64(*h++);
893*f0089e39SRichard Lowe }
894*f0089e39SRichard Lowe 
895*f0089e39SRichard Lowe /*ARGSUSED*/
896*f0089e39SRichard Lowe uint64_t
i_ddi_io_get64(ddi_acc_impl_t * hdlp,uint64_t * addr)897*f0089e39SRichard Lowe i_ddi_io_get64(ddi_acc_impl_t *hdlp, uint64_t *addr)
898*f0089e39SRichard Lowe {
899*f0089e39SRichard Lowe 	panic("ddi_get64 from i/o space");
900*f0089e39SRichard Lowe 	/*NOTREACHED*/
901*f0089e39SRichard Lowe 	return (0);
902*f0089e39SRichard Lowe }
903*f0089e39SRichard Lowe 
904*f0089e39SRichard Lowe /*ARGSUSED*/
905*f0089e39SRichard Lowe void
i_ddi_io_put64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t value)906*f0089e39SRichard Lowe i_ddi_io_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr, uint64_t value)
907*f0089e39SRichard Lowe {
908*f0089e39SRichard Lowe 	panic("ddi_put64 to i/o space");
909*f0089e39SRichard Lowe 	/*NOTREACHED*/
910*f0089e39SRichard Lowe }
911*f0089e39SRichard Lowe 
912*f0089e39SRichard Lowe void
do_scan(ddi_acc_impl_t * hdlp)913*f0089e39SRichard Lowe do_scan(ddi_acc_impl_t *hdlp)
914*f0089e39SRichard Lowe {
915*f0089e39SRichard Lowe 	ddi_fm_error_t de;
916*f0089e39SRichard Lowe 	ndi_err_t *errp = (ndi_err_t *)hdlp->ahi_err;
917*f0089e39SRichard Lowe 
918*f0089e39SRichard Lowe 	bzero(&de, sizeof (ddi_fm_error_t));
919*f0089e39SRichard Lowe 	de.fme_version = DDI_FME_VERSION;
920*f0089e39SRichard Lowe 	de.fme_ena = fm_ena_generate(0, FM_ENA_FMT1);
921*f0089e39SRichard Lowe 	de.fme_flag = DDI_FM_ERR_UNEXPECTED;
922*f0089e39SRichard Lowe 
923*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_err_mutexp);
924*f0089e39SRichard Lowe 	hdlp->ahi_scan(hdlp->ahi_scan_dip, &de);
925*f0089e39SRichard Lowe 	if (de.fme_status != DDI_FM_OK) {
926*f0089e39SRichard Lowe 		errp->err_ena = de.fme_ena;
927*f0089e39SRichard Lowe 		errp->err_expected = de.fme_flag;
928*f0089e39SRichard Lowe 		errp->err_status = DDI_FM_NONFATAL;
929*f0089e39SRichard Lowe 	}
930*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_err_mutexp);
931*f0089e39SRichard Lowe }
932*f0089e39SRichard Lowe 
933*f0089e39SRichard Lowe /*ARGSUSED*/
934*f0089e39SRichard Lowe uint8_t
i_ddi_prot_vaddr_get8(ddi_acc_impl_t * hdlp,uint8_t * addr)935*f0089e39SRichard Lowe i_ddi_prot_vaddr_get8(ddi_acc_impl_t *hdlp, uint8_t *addr)
936*f0089e39SRichard Lowe {
937*f0089e39SRichard Lowe 	uint8_t val;
938*f0089e39SRichard Lowe 
939*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
940*f0089e39SRichard Lowe 	val = *addr;
941*f0089e39SRichard Lowe 	if (val == 0xff)
942*f0089e39SRichard Lowe 		do_scan(hdlp);
943*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
944*f0089e39SRichard Lowe 
945*f0089e39SRichard Lowe 	return (val);
946*f0089e39SRichard Lowe }
947*f0089e39SRichard Lowe 
948*f0089e39SRichard Lowe /*ARGSUSED*/
949*f0089e39SRichard Lowe uint16_t
i_ddi_prot_vaddr_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)950*f0089e39SRichard Lowe i_ddi_prot_vaddr_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
951*f0089e39SRichard Lowe {
952*f0089e39SRichard Lowe 	uint16_t val;
953*f0089e39SRichard Lowe 
954*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
955*f0089e39SRichard Lowe 	val = *addr;
956*f0089e39SRichard Lowe 	if (val == 0xffff)
957*f0089e39SRichard Lowe 		do_scan(hdlp);
958*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
959*f0089e39SRichard Lowe 
960*f0089e39SRichard Lowe 	return (val);
961*f0089e39SRichard Lowe }
962*f0089e39SRichard Lowe 
963*f0089e39SRichard Lowe /*ARGSUSED*/
964*f0089e39SRichard Lowe uint32_t
i_ddi_prot_vaddr_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)965*f0089e39SRichard Lowe i_ddi_prot_vaddr_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
966*f0089e39SRichard Lowe {
967*f0089e39SRichard Lowe 	uint32_t val;
968*f0089e39SRichard Lowe 
969*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
970*f0089e39SRichard Lowe 	val = *addr;
971*f0089e39SRichard Lowe 	if (val == 0xffffffff)
972*f0089e39SRichard Lowe 		do_scan(hdlp);
973*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
974*f0089e39SRichard Lowe 
975*f0089e39SRichard Lowe 	return (val);
976*f0089e39SRichard Lowe }
977*f0089e39SRichard Lowe 
978*f0089e39SRichard Lowe /*ARGSUSED*/
979*f0089e39SRichard Lowe uint64_t
i_ddi_prot_vaddr_get64(ddi_acc_impl_t * hdlp,uint64_t * addr)980*f0089e39SRichard Lowe i_ddi_prot_vaddr_get64(ddi_acc_impl_t *hdlp, uint64_t *addr)
981*f0089e39SRichard Lowe {
982*f0089e39SRichard Lowe 	uint64_t val;
983*f0089e39SRichard Lowe 
984*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
985*f0089e39SRichard Lowe 	val = *addr;
986*f0089e39SRichard Lowe 	if (val == 0xffffffffffffffff)
987*f0089e39SRichard Lowe 		do_scan(hdlp);
988*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
989*f0089e39SRichard Lowe 
990*f0089e39SRichard Lowe 	return (val);
991*f0089e39SRichard Lowe }
992*f0089e39SRichard Lowe 
993*f0089e39SRichard Lowe /*ARGSUSED*/
994*f0089e39SRichard Lowe uint8_t
i_ddi_prot_io_get8(ddi_acc_impl_t * hdlp,uint8_t * addr)995*f0089e39SRichard Lowe i_ddi_prot_io_get8(ddi_acc_impl_t *hdlp, uint8_t *addr)
996*f0089e39SRichard Lowe {
997*f0089e39SRichard Lowe 	uint8_t val;
998*f0089e39SRichard Lowe 
999*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1000*f0089e39SRichard Lowe 	val = inb((uintptr_t)addr);
1001*f0089e39SRichard Lowe 	if (val == 0xff)
1002*f0089e39SRichard Lowe 		do_scan(hdlp);
1003*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1004*f0089e39SRichard Lowe 
1005*f0089e39SRichard Lowe 	return (val);
1006*f0089e39SRichard Lowe }
1007*f0089e39SRichard Lowe 
1008*f0089e39SRichard Lowe /*ARGSUSED*/
1009*f0089e39SRichard Lowe uint16_t
i_ddi_prot_io_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)1010*f0089e39SRichard Lowe i_ddi_prot_io_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
1011*f0089e39SRichard Lowe {
1012*f0089e39SRichard Lowe 	uint16_t val;
1013*f0089e39SRichard Lowe 
1014*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1015*f0089e39SRichard Lowe 	val = inw((uintptr_t)addr);
1016*f0089e39SRichard Lowe 	if (val == 0xffff)
1017*f0089e39SRichard Lowe 		do_scan(hdlp);
1018*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1019*f0089e39SRichard Lowe 
1020*f0089e39SRichard Lowe 	return (val);
1021*f0089e39SRichard Lowe }
1022*f0089e39SRichard Lowe 
1023*f0089e39SRichard Lowe /*ARGSUSED*/
1024*f0089e39SRichard Lowe uint32_t
i_ddi_prot_io_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)1025*f0089e39SRichard Lowe i_ddi_prot_io_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
1026*f0089e39SRichard Lowe {
1027*f0089e39SRichard Lowe 	uint32_t val;
1028*f0089e39SRichard Lowe 
1029*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1030*f0089e39SRichard Lowe 	val = inl((uintptr_t)addr);
1031*f0089e39SRichard Lowe 	if (val == 0xffffffff)
1032*f0089e39SRichard Lowe 		do_scan(hdlp);
1033*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1034*f0089e39SRichard Lowe 
1035*f0089e39SRichard Lowe 	return (val);
1036*f0089e39SRichard Lowe }
1037*f0089e39SRichard Lowe 
1038*f0089e39SRichard Lowe /*ARGSUSED*/
1039*f0089e39SRichard Lowe uint16_t
i_ddi_prot_vaddr_swap_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)1040*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
1041*f0089e39SRichard Lowe {
1042*f0089e39SRichard Lowe 	uint16_t val;
1043*f0089e39SRichard Lowe 
1044*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1045*f0089e39SRichard Lowe 	val = ddi_swap16(*addr);
1046*f0089e39SRichard Lowe 	if (val == 0xffff)
1047*f0089e39SRichard Lowe 		do_scan(hdlp);
1048*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1049*f0089e39SRichard Lowe 
1050*f0089e39SRichard Lowe 	return (val);
1051*f0089e39SRichard Lowe }
1052*f0089e39SRichard Lowe 
1053*f0089e39SRichard Lowe /*ARGSUSED*/
1054*f0089e39SRichard Lowe uint16_t
i_ddi_prot_io_swap_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)1055*f0089e39SRichard Lowe i_ddi_prot_io_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
1056*f0089e39SRichard Lowe {
1057*f0089e39SRichard Lowe 	uint16_t val;
1058*f0089e39SRichard Lowe 
1059*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1060*f0089e39SRichard Lowe 	val = ddi_swap16(inw((uintptr_t)addr));
1061*f0089e39SRichard Lowe 	if (val == 0xffff)
1062*f0089e39SRichard Lowe 		do_scan(hdlp);
1063*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1064*f0089e39SRichard Lowe 
1065*f0089e39SRichard Lowe 	return (val);
1066*f0089e39SRichard Lowe }
1067*f0089e39SRichard Lowe 
1068*f0089e39SRichard Lowe /*ARGSUSED*/
1069*f0089e39SRichard Lowe uint32_t
i_ddi_prot_vaddr_swap_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)1070*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
1071*f0089e39SRichard Lowe {
1072*f0089e39SRichard Lowe 	uint32_t val;
1073*f0089e39SRichard Lowe 
1074*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1075*f0089e39SRichard Lowe 	val = ddi_swap32(*addr);
1076*f0089e39SRichard Lowe 	if (val == 0xffffffff)
1077*f0089e39SRichard Lowe 		do_scan(hdlp);
1078*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1079*f0089e39SRichard Lowe 
1080*f0089e39SRichard Lowe 	return (val);
1081*f0089e39SRichard Lowe }
1082*f0089e39SRichard Lowe 
1083*f0089e39SRichard Lowe /*ARGSUSED*/
1084*f0089e39SRichard Lowe uint32_t
i_ddi_prot_io_swap_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)1085*f0089e39SRichard Lowe i_ddi_prot_io_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
1086*f0089e39SRichard Lowe {
1087*f0089e39SRichard Lowe 	uint32_t val;
1088*f0089e39SRichard Lowe 
1089*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1090*f0089e39SRichard Lowe 	val = ddi_swap32(inl((uintptr_t)addr));
1091*f0089e39SRichard Lowe 	if (val == 0xffffffff)
1092*f0089e39SRichard Lowe 		do_scan(hdlp);
1093*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1094*f0089e39SRichard Lowe 
1095*f0089e39SRichard Lowe 	return (val);
1096*f0089e39SRichard Lowe }
1097*f0089e39SRichard Lowe 
1098*f0089e39SRichard Lowe /*ARGSUSED*/
1099*f0089e39SRichard Lowe uint64_t
i_ddi_prot_vaddr_swap_get64(ddi_acc_impl_t * hdlp,uint64_t * addr)1100*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_get64(ddi_acc_impl_t *hdlp, uint64_t *addr)
1101*f0089e39SRichard Lowe {
1102*f0089e39SRichard Lowe 	uint64_t val;
1103*f0089e39SRichard Lowe 
1104*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1105*f0089e39SRichard Lowe 	val = ddi_swap64(*addr);
1106*f0089e39SRichard Lowe 	if (val == 0xffffffffffffffff)
1107*f0089e39SRichard Lowe 		do_scan(hdlp);
1108*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1109*f0089e39SRichard Lowe 
1110*f0089e39SRichard Lowe 	return (val);
1111*f0089e39SRichard Lowe }
1112*f0089e39SRichard Lowe 
1113*f0089e39SRichard Lowe /*ARGSUSED*/
1114*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_put8(ddi_acc_impl_t * hdlp,uint8_t * addr,uint8_t value)1115*f0089e39SRichard Lowe i_ddi_prot_vaddr_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value)
1116*f0089e39SRichard Lowe {
1117*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1118*f0089e39SRichard Lowe 	*addr = value;
1119*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1120*f0089e39SRichard Lowe }
1121*f0089e39SRichard Lowe 
1122*f0089e39SRichard Lowe /*ARGSUSED*/
1123*f0089e39SRichard Lowe void
i_ddi_prot_io_put8(ddi_acc_impl_t * hdlp,uint8_t * addr,uint8_t value)1124*f0089e39SRichard Lowe i_ddi_prot_io_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value)
1125*f0089e39SRichard Lowe {
1126*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1127*f0089e39SRichard Lowe 	outb((uintptr_t)addr, value);
1128*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1129*f0089e39SRichard Lowe }
1130*f0089e39SRichard Lowe 
1131*f0089e39SRichard Lowe /*ARGSUSED*/
1132*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)1133*f0089e39SRichard Lowe i_ddi_prot_vaddr_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value)
1134*f0089e39SRichard Lowe {
1135*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1136*f0089e39SRichard Lowe 	*addr = value;
1137*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1138*f0089e39SRichard Lowe }
1139*f0089e39SRichard Lowe 
1140*f0089e39SRichard Lowe /*ARGSUSED*/
1141*f0089e39SRichard Lowe void
i_ddi_prot_io_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)1142*f0089e39SRichard Lowe i_ddi_prot_io_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value)
1143*f0089e39SRichard Lowe {
1144*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1145*f0089e39SRichard Lowe 	outw((uintptr_t)addr, value);
1146*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1147*f0089e39SRichard Lowe }
1148*f0089e39SRichard Lowe 
1149*f0089e39SRichard Lowe /*ARGSUSED*/
1150*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)1151*f0089e39SRichard Lowe i_ddi_prot_vaddr_put32(ddi_acc_impl_t *hdlp, uint32_t *addr,
1152*f0089e39SRichard Lowe     uint32_t value)
1153*f0089e39SRichard Lowe {
1154*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1155*f0089e39SRichard Lowe 	*addr = value;
1156*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1157*f0089e39SRichard Lowe }
1158*f0089e39SRichard Lowe 
1159*f0089e39SRichard Lowe /*ARGSUSED*/
1160*f0089e39SRichard Lowe void
i_ddi_prot_io_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)1161*f0089e39SRichard Lowe i_ddi_prot_io_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value)
1162*f0089e39SRichard Lowe {
1163*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1164*f0089e39SRichard Lowe 	outl((uintptr_t)addr, value);
1165*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1166*f0089e39SRichard Lowe }
1167*f0089e39SRichard Lowe 
1168*f0089e39SRichard Lowe /*ARGSUSED*/
1169*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_put64(ddi_acc_impl_t * hdlp,uint64_t * addr,uint64_t value)1170*f0089e39SRichard Lowe i_ddi_prot_vaddr_put64(ddi_acc_impl_t *hdlp, uint64_t *addr,
1171*f0089e39SRichard Lowe     uint64_t value)
1172*f0089e39SRichard Lowe {
1173*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1174*f0089e39SRichard Lowe 	*addr = value;
1175*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1176*f0089e39SRichard Lowe }
1177*f0089e39SRichard Lowe 
1178*f0089e39SRichard Lowe /*ARGSUSED*/
1179*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_swap_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)1180*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr,
1181*f0089e39SRichard Lowe     uint16_t value)
1182*f0089e39SRichard Lowe {
1183*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1184*f0089e39SRichard Lowe 	*addr = ddi_swap16(value);
1185*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1186*f0089e39SRichard Lowe }
1187*f0089e39SRichard Lowe 
1188*f0089e39SRichard Lowe /*ARGSUSED*/
1189*f0089e39SRichard Lowe void
i_ddi_prot_io_swap_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)1190*f0089e39SRichard Lowe i_ddi_prot_io_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value)
1191*f0089e39SRichard Lowe {
1192*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1193*f0089e39SRichard Lowe 	outw((uintptr_t)addr, ddi_swap16(value));
1194*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1195*f0089e39SRichard Lowe }
1196*f0089e39SRichard Lowe 
1197*f0089e39SRichard Lowe /*ARGSUSED*/
1198*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_swap_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)1199*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr,
1200*f0089e39SRichard Lowe     uint32_t value)
1201*f0089e39SRichard Lowe {
1202*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1203*f0089e39SRichard Lowe 	*addr = ddi_swap32(value);
1204*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1205*f0089e39SRichard Lowe }
1206*f0089e39SRichard Lowe 
1207*f0089e39SRichard Lowe /*ARGSUSED*/
1208*f0089e39SRichard Lowe void
i_ddi_prot_io_swap_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)1209*f0089e39SRichard Lowe i_ddi_prot_io_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value)
1210*f0089e39SRichard Lowe {
1211*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1212*f0089e39SRichard Lowe 	outl((uintptr_t)addr, ddi_swap32(value));
1213*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1214*f0089e39SRichard Lowe }
1215*f0089e39SRichard Lowe 
1216*f0089e39SRichard Lowe /*ARGSUSED*/
1217*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_swap_put64(ddi_acc_impl_t * hdlp,uint64_t * addr,uint64_t value)1218*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_put64(ddi_acc_impl_t *hdlp, uint64_t *addr,
1219*f0089e39SRichard Lowe     uint64_t value)
1220*f0089e39SRichard Lowe {
1221*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1222*f0089e39SRichard Lowe 	*addr = ddi_swap64(value);
1223*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1224*f0089e39SRichard Lowe }
1225*f0089e39SRichard Lowe 
1226*f0089e39SRichard Lowe /*ARGSUSED*/
1227*f0089e39SRichard Lowe void
i_ddi_prot_io_rep_get8(ddi_acc_impl_t * hdlp,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount,uint_t flags)1228*f0089e39SRichard Lowe i_ddi_prot_io_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
1229*f0089e39SRichard Lowe     uint8_t *dev_addr, size_t repcount, uint_t flags)
1230*f0089e39SRichard Lowe {
1231*f0089e39SRichard Lowe 	int fail = 0;
1232*f0089e39SRichard Lowe 	uint8_t	*h;
1233*f0089e39SRichard Lowe 	uintptr_t port;
1234*f0089e39SRichard Lowe 
1235*f0089e39SRichard Lowe 	h = host_addr;
1236*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
1237*f0089e39SRichard Lowe 
1238*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1239*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1240*f0089e39SRichard Lowe 		for (; repcount; repcount--, port++)
1241*f0089e39SRichard Lowe 			if ((*h++ = inb(port)) == 0xff)
1242*f0089e39SRichard Lowe 				fail = 1;
1243*f0089e39SRichard Lowe 	} else {
1244*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1245*f0089e39SRichard Lowe 			if ((*h++ = inb(port)) == 0xff)
1246*f0089e39SRichard Lowe 				fail = 1;
1247*f0089e39SRichard Lowe 	}
1248*f0089e39SRichard Lowe 	if (fail == 1)
1249*f0089e39SRichard Lowe 		do_scan(hdlp);
1250*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1251*f0089e39SRichard Lowe }
1252*f0089e39SRichard Lowe 
1253*f0089e39SRichard Lowe /*ARGSUSED*/
1254*f0089e39SRichard Lowe void
i_ddi_prot_io_rep_get16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)1255*f0089e39SRichard Lowe i_ddi_prot_io_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1256*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
1257*f0089e39SRichard Lowe {
1258*f0089e39SRichard Lowe 	int fail = 0;
1259*f0089e39SRichard Lowe 	uint16_t *h;
1260*f0089e39SRichard Lowe 	uintptr_t port;
1261*f0089e39SRichard Lowe 
1262*f0089e39SRichard Lowe 	h = host_addr;
1263*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
1264*f0089e39SRichard Lowe 
1265*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1266*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1267*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 2)
1268*f0089e39SRichard Lowe 			if ((*h++ = inw(port)) == 0xffff)
1269*f0089e39SRichard Lowe 				fail = 1;
1270*f0089e39SRichard Lowe 	} else {
1271*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1272*f0089e39SRichard Lowe 			if ((*h++ = inw(port)) == 0xffff)
1273*f0089e39SRichard Lowe 				fail = 1;
1274*f0089e39SRichard Lowe 	}
1275*f0089e39SRichard Lowe 	if (fail == 1)
1276*f0089e39SRichard Lowe 		do_scan(hdlp);
1277*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1278*f0089e39SRichard Lowe }
1279*f0089e39SRichard Lowe 
1280*f0089e39SRichard Lowe /*ARGSUSED*/
1281*f0089e39SRichard Lowe void
i_ddi_prot_io_rep_get32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)1282*f0089e39SRichard Lowe i_ddi_prot_io_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1283*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
1284*f0089e39SRichard Lowe {
1285*f0089e39SRichard Lowe 	int fail = 0;
1286*f0089e39SRichard Lowe 	uint32_t *h;
1287*f0089e39SRichard Lowe 	uintptr_t port;
1288*f0089e39SRichard Lowe 
1289*f0089e39SRichard Lowe 	h = host_addr;
1290*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
1291*f0089e39SRichard Lowe 
1292*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1293*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1294*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 4)
1295*f0089e39SRichard Lowe 			if ((*h++ = inl(port)) == 0xffffffff)
1296*f0089e39SRichard Lowe 				fail = 1;
1297*f0089e39SRichard Lowe 	} else {
1298*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1299*f0089e39SRichard Lowe 			if ((*h++ = inl(port)) == 0xffffffff)
1300*f0089e39SRichard Lowe 				fail = 1;
1301*f0089e39SRichard Lowe 	}
1302*f0089e39SRichard Lowe 	if (fail == 1)
1303*f0089e39SRichard Lowe 		do_scan(hdlp);
1304*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1305*f0089e39SRichard Lowe }
1306*f0089e39SRichard Lowe 
1307*f0089e39SRichard Lowe /*ARGSUSED*/
1308*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_rep_get8(ddi_acc_impl_t * hdlp,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount,uint_t flags)1309*f0089e39SRichard Lowe i_ddi_prot_vaddr_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
1310*f0089e39SRichard Lowe     uint8_t *dev_addr, size_t repcount, uint_t flags)
1311*f0089e39SRichard Lowe {
1312*f0089e39SRichard Lowe 	int fail = 0;
1313*f0089e39SRichard Lowe 	uint8_t	*h, *d;
1314*f0089e39SRichard Lowe 
1315*f0089e39SRichard Lowe 	h = host_addr;
1316*f0089e39SRichard Lowe 	d = dev_addr;
1317*f0089e39SRichard Lowe 
1318*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1319*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1320*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1321*f0089e39SRichard Lowe 			if ((*h++ = *d++) == 0xff)
1322*f0089e39SRichard Lowe 				fail = 1;
1323*f0089e39SRichard Lowe 	} else {
1324*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1325*f0089e39SRichard Lowe 			if ((*h++ = *d) == 0xff)
1326*f0089e39SRichard Lowe 				fail = 1;
1327*f0089e39SRichard Lowe 	}
1328*f0089e39SRichard Lowe 	if (fail == 1)
1329*f0089e39SRichard Lowe 		do_scan(hdlp);
1330*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1331*f0089e39SRichard Lowe }
1332*f0089e39SRichard Lowe 
1333*f0089e39SRichard Lowe /*ARGSUSED*/
1334*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_rep_get16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)1335*f0089e39SRichard Lowe i_ddi_prot_vaddr_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1336*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
1337*f0089e39SRichard Lowe {
1338*f0089e39SRichard Lowe 	int fail = 0;
1339*f0089e39SRichard Lowe 	uint16_t *h, *d;
1340*f0089e39SRichard Lowe 
1341*f0089e39SRichard Lowe 	h = host_addr;
1342*f0089e39SRichard Lowe 	d = dev_addr;
1343*f0089e39SRichard Lowe 
1344*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1345*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1346*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1347*f0089e39SRichard Lowe 			if ((*h++ = *d++) == 0xffff)
1348*f0089e39SRichard Lowe 				fail = 1;
1349*f0089e39SRichard Lowe 	} else {
1350*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1351*f0089e39SRichard Lowe 			if ((*h++ = *d) == 0xffff)
1352*f0089e39SRichard Lowe 				fail = 1;
1353*f0089e39SRichard Lowe 	}
1354*f0089e39SRichard Lowe 	if (fail == 1)
1355*f0089e39SRichard Lowe 		do_scan(hdlp);
1356*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1357*f0089e39SRichard Lowe }
1358*f0089e39SRichard Lowe 
1359*f0089e39SRichard Lowe /*ARGSUSED*/
1360*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_swap_rep_get16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)1361*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1362*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
1363*f0089e39SRichard Lowe {
1364*f0089e39SRichard Lowe 	int fail = 0;
1365*f0089e39SRichard Lowe 	uint16_t *h, *d;
1366*f0089e39SRichard Lowe 
1367*f0089e39SRichard Lowe 	h = host_addr;
1368*f0089e39SRichard Lowe 	d = dev_addr;
1369*f0089e39SRichard Lowe 
1370*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1371*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1372*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1373*f0089e39SRichard Lowe 			if ((*h++ = ddi_swap16(*d++)) == 0xffff)
1374*f0089e39SRichard Lowe 				fail = 1;
1375*f0089e39SRichard Lowe 	} else {
1376*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1377*f0089e39SRichard Lowe 			if ((*h++ = ddi_swap16(*d)) == 0xffff)
1378*f0089e39SRichard Lowe 				fail = 1;
1379*f0089e39SRichard Lowe 	}
1380*f0089e39SRichard Lowe 	if (fail == 1)
1381*f0089e39SRichard Lowe 		do_scan(hdlp);
1382*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1383*f0089e39SRichard Lowe }
1384*f0089e39SRichard Lowe 
1385*f0089e39SRichard Lowe /*ARGSUSED*/
1386*f0089e39SRichard Lowe void
i_ddi_prot_io_swap_rep_get16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)1387*f0089e39SRichard Lowe i_ddi_prot_io_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1388*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
1389*f0089e39SRichard Lowe {
1390*f0089e39SRichard Lowe 	int fail = 0;
1391*f0089e39SRichard Lowe 	uint16_t *h;
1392*f0089e39SRichard Lowe 	uintptr_t port;
1393*f0089e39SRichard Lowe 
1394*f0089e39SRichard Lowe 	h = host_addr;
1395*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
1396*f0089e39SRichard Lowe 
1397*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1398*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1399*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 2)
1400*f0089e39SRichard Lowe 			if ((*h++ = ddi_swap16(inw(port))) == 0xffff)
1401*f0089e39SRichard Lowe 				fail = 1;
1402*f0089e39SRichard Lowe 	} else {
1403*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1404*f0089e39SRichard Lowe 			if ((*h++ = ddi_swap16(inw(port))) == 0xffff)
1405*f0089e39SRichard Lowe 				fail = 1;
1406*f0089e39SRichard Lowe 	}
1407*f0089e39SRichard Lowe 	if (fail == 1)
1408*f0089e39SRichard Lowe 		do_scan(hdlp);
1409*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1410*f0089e39SRichard Lowe }
1411*f0089e39SRichard Lowe 
1412*f0089e39SRichard Lowe /*ARGSUSED*/
1413*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_rep_get32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)1414*f0089e39SRichard Lowe i_ddi_prot_vaddr_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1415*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
1416*f0089e39SRichard Lowe {
1417*f0089e39SRichard Lowe 	int fail = 0;
1418*f0089e39SRichard Lowe 	uint32_t *h, *d;
1419*f0089e39SRichard Lowe 
1420*f0089e39SRichard Lowe 	h = host_addr;
1421*f0089e39SRichard Lowe 	d = dev_addr;
1422*f0089e39SRichard Lowe 
1423*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1424*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1425*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1426*f0089e39SRichard Lowe 			if ((*h++ = *d++) == 0xffffffff)
1427*f0089e39SRichard Lowe 				fail = 1;
1428*f0089e39SRichard Lowe 	} else {
1429*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1430*f0089e39SRichard Lowe 			if ((*h++ = *d) == 0xffffffff)
1431*f0089e39SRichard Lowe 				fail = 1;
1432*f0089e39SRichard Lowe 	}
1433*f0089e39SRichard Lowe 	if (fail == 1)
1434*f0089e39SRichard Lowe 		do_scan(hdlp);
1435*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1436*f0089e39SRichard Lowe }
1437*f0089e39SRichard Lowe 
1438*f0089e39SRichard Lowe /*ARGSUSED*/
1439*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_swap_rep_get32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)1440*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1441*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
1442*f0089e39SRichard Lowe {
1443*f0089e39SRichard Lowe 	int fail = 0;
1444*f0089e39SRichard Lowe 	uint32_t *h, *d;
1445*f0089e39SRichard Lowe 
1446*f0089e39SRichard Lowe 	h = host_addr;
1447*f0089e39SRichard Lowe 	d = dev_addr;
1448*f0089e39SRichard Lowe 
1449*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1450*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1451*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1452*f0089e39SRichard Lowe 			if ((*h++ = ddi_swap32(*d++)) == 0xffffffff)
1453*f0089e39SRichard Lowe 				fail = 1;
1454*f0089e39SRichard Lowe 	} else {
1455*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1456*f0089e39SRichard Lowe 			if ((*h++ = ddi_swap32(*d)) == 0xffffffff)
1457*f0089e39SRichard Lowe 				fail = 1;
1458*f0089e39SRichard Lowe 	}
1459*f0089e39SRichard Lowe 	if (fail == 1)
1460*f0089e39SRichard Lowe 		do_scan(hdlp);
1461*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1462*f0089e39SRichard Lowe }
1463*f0089e39SRichard Lowe 
1464*f0089e39SRichard Lowe /*ARGSUSED*/
1465*f0089e39SRichard Lowe void
i_ddi_prot_io_swap_rep_get32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)1466*f0089e39SRichard Lowe i_ddi_prot_io_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1467*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
1468*f0089e39SRichard Lowe {
1469*f0089e39SRichard Lowe 	int fail = 0;
1470*f0089e39SRichard Lowe 	uint32_t *h;
1471*f0089e39SRichard Lowe 	uintptr_t port;
1472*f0089e39SRichard Lowe 
1473*f0089e39SRichard Lowe 	h = host_addr;
1474*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
1475*f0089e39SRichard Lowe 
1476*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1477*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1478*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 4)
1479*f0089e39SRichard Lowe 			if ((*h++ = ddi_swap32(inl(port))) == 0xffffffff)
1480*f0089e39SRichard Lowe 				fail = 1;
1481*f0089e39SRichard Lowe 	} else {
1482*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1483*f0089e39SRichard Lowe 			if ((*h++ = ddi_swap32(inl(port))) == 0xffffffff)
1484*f0089e39SRichard Lowe 				fail = 1;
1485*f0089e39SRichard Lowe 	}
1486*f0089e39SRichard Lowe 	if (fail == 1)
1487*f0089e39SRichard Lowe 		do_scan(hdlp);
1488*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1489*f0089e39SRichard Lowe }
1490*f0089e39SRichard Lowe 
1491*f0089e39SRichard Lowe /*ARGSUSED*/
1492*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_rep_get64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t * dev_addr,size_t repcount,uint_t flags)1493*f0089e39SRichard Lowe i_ddi_prot_vaddr_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
1494*f0089e39SRichard Lowe     uint64_t *dev_addr, size_t repcount, uint_t flags)
1495*f0089e39SRichard Lowe {
1496*f0089e39SRichard Lowe 	int fail = 0;
1497*f0089e39SRichard Lowe 	uint64_t *h, *d;
1498*f0089e39SRichard Lowe 
1499*f0089e39SRichard Lowe 	h = host_addr;
1500*f0089e39SRichard Lowe 	d = dev_addr;
1501*f0089e39SRichard Lowe 
1502*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1503*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1504*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1505*f0089e39SRichard Lowe 			if ((*h++ = *d++) == 0xffffffffffffffff)
1506*f0089e39SRichard Lowe 				fail = 1;
1507*f0089e39SRichard Lowe 	} else {
1508*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1509*f0089e39SRichard Lowe 			if ((*h++ = *d) == 0xffffffffffffffff)
1510*f0089e39SRichard Lowe 				fail = 1;
1511*f0089e39SRichard Lowe 	}
1512*f0089e39SRichard Lowe 	if (fail == 1)
1513*f0089e39SRichard Lowe 		do_scan(hdlp);
1514*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1515*f0089e39SRichard Lowe }
1516*f0089e39SRichard Lowe 
1517*f0089e39SRichard Lowe /*ARGSUSED*/
1518*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_swap_rep_get64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t * dev_addr,size_t repcount,uint_t flags)1519*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
1520*f0089e39SRichard Lowe     uint64_t *dev_addr, size_t repcount, uint_t flags)
1521*f0089e39SRichard Lowe {
1522*f0089e39SRichard Lowe 	int fail = 0;
1523*f0089e39SRichard Lowe 	uint64_t *h, *d;
1524*f0089e39SRichard Lowe 
1525*f0089e39SRichard Lowe 	h = host_addr;
1526*f0089e39SRichard Lowe 	d = dev_addr;
1527*f0089e39SRichard Lowe 
1528*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1529*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR) {
1530*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1531*f0089e39SRichard Lowe 			if ((*h++ = ddi_swap64(*d++)) == 0xffffffffffffffff)
1532*f0089e39SRichard Lowe 				fail = 1;
1533*f0089e39SRichard Lowe 	} else {
1534*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1535*f0089e39SRichard Lowe 			if ((*h++ = ddi_swap64(*d)) == 0xffffffffffffffff)
1536*f0089e39SRichard Lowe 				fail = 1;
1537*f0089e39SRichard Lowe 	}
1538*f0089e39SRichard Lowe 	if (fail == 1)
1539*f0089e39SRichard Lowe 		do_scan(hdlp);
1540*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1541*f0089e39SRichard Lowe }
1542*f0089e39SRichard Lowe 
1543*f0089e39SRichard Lowe /*ARGSUSED*/
1544*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_rep_put8(ddi_acc_impl_t * hdlp,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount,uint_t flags)1545*f0089e39SRichard Lowe i_ddi_prot_vaddr_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
1546*f0089e39SRichard Lowe     uint8_t *dev_addr, size_t repcount, uint_t flags)
1547*f0089e39SRichard Lowe {
1548*f0089e39SRichard Lowe 	uint8_t	*h, *d;
1549*f0089e39SRichard Lowe 
1550*f0089e39SRichard Lowe 	h = host_addr;
1551*f0089e39SRichard Lowe 	d = dev_addr;
1552*f0089e39SRichard Lowe 
1553*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1554*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1555*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1556*f0089e39SRichard Lowe 			*d++ = *h++;
1557*f0089e39SRichard Lowe 	else
1558*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1559*f0089e39SRichard Lowe 			*d = *h++;
1560*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1561*f0089e39SRichard Lowe }
1562*f0089e39SRichard Lowe 
1563*f0089e39SRichard Lowe /*ARGSUSED*/
1564*f0089e39SRichard Lowe void
i_ddi_prot_io_rep_put8(ddi_acc_impl_t * hdlp,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount,uint_t flags)1565*f0089e39SRichard Lowe i_ddi_prot_io_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
1566*f0089e39SRichard Lowe     uint8_t *dev_addr, size_t repcount, uint_t flags)
1567*f0089e39SRichard Lowe {
1568*f0089e39SRichard Lowe 	uint8_t	*h;
1569*f0089e39SRichard Lowe 	uintptr_t port;
1570*f0089e39SRichard Lowe 
1571*f0089e39SRichard Lowe 	h = host_addr;
1572*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
1573*f0089e39SRichard Lowe 
1574*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1575*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1576*f0089e39SRichard Lowe 		for (; repcount; repcount--, port++)
1577*f0089e39SRichard Lowe 			outb(port, *h++);
1578*f0089e39SRichard Lowe 	else
1579*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1580*f0089e39SRichard Lowe 			outb(port, *h++);
1581*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1582*f0089e39SRichard Lowe }
1583*f0089e39SRichard Lowe 
1584*f0089e39SRichard Lowe /*ARGSUSED*/
1585*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_rep_put16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)1586*f0089e39SRichard Lowe i_ddi_prot_vaddr_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1587*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
1588*f0089e39SRichard Lowe {
1589*f0089e39SRichard Lowe 	uint16_t *h, *d;
1590*f0089e39SRichard Lowe 
1591*f0089e39SRichard Lowe 	h = host_addr;
1592*f0089e39SRichard Lowe 	d = dev_addr;
1593*f0089e39SRichard Lowe 
1594*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1595*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1596*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1597*f0089e39SRichard Lowe 			*d++ = *h++;
1598*f0089e39SRichard Lowe 	else
1599*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1600*f0089e39SRichard Lowe 			*d = *h++;
1601*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1602*f0089e39SRichard Lowe }
1603*f0089e39SRichard Lowe 
1604*f0089e39SRichard Lowe /*ARGSUSED*/
1605*f0089e39SRichard Lowe void
i_ddi_prot_io_rep_put16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)1606*f0089e39SRichard Lowe i_ddi_prot_io_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1607*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
1608*f0089e39SRichard Lowe {
1609*f0089e39SRichard Lowe 	uint16_t *h;
1610*f0089e39SRichard Lowe 	uintptr_t port;
1611*f0089e39SRichard Lowe 
1612*f0089e39SRichard Lowe 	h = host_addr;
1613*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
1614*f0089e39SRichard Lowe 
1615*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1616*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1617*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 2)
1618*f0089e39SRichard Lowe 			outw(port, *h++);
1619*f0089e39SRichard Lowe 	else
1620*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1621*f0089e39SRichard Lowe 			outw(port, *h++);
1622*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1623*f0089e39SRichard Lowe }
1624*f0089e39SRichard Lowe 
1625*f0089e39SRichard Lowe /*ARGSUSED*/
1626*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_swap_rep_put16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)1627*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1628*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
1629*f0089e39SRichard Lowe {
1630*f0089e39SRichard Lowe 	uint16_t *h, *d;
1631*f0089e39SRichard Lowe 
1632*f0089e39SRichard Lowe 	h = host_addr;
1633*f0089e39SRichard Lowe 	d = dev_addr;
1634*f0089e39SRichard Lowe 
1635*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1636*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1637*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1638*f0089e39SRichard Lowe 			*d++ = ddi_swap16(*h++);
1639*f0089e39SRichard Lowe 	else
1640*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1641*f0089e39SRichard Lowe 			*d = ddi_swap16(*h++);
1642*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1643*f0089e39SRichard Lowe }
1644*f0089e39SRichard Lowe 
1645*f0089e39SRichard Lowe /*ARGSUSED*/
1646*f0089e39SRichard Lowe void
i_ddi_prot_io_swap_rep_put16(ddi_acc_impl_t * hdlp,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount,uint_t flags)1647*f0089e39SRichard Lowe i_ddi_prot_io_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1648*f0089e39SRichard Lowe     uint16_t *dev_addr, size_t repcount, uint_t flags)
1649*f0089e39SRichard Lowe {
1650*f0089e39SRichard Lowe 	uint16_t *h;
1651*f0089e39SRichard Lowe 	uintptr_t port;
1652*f0089e39SRichard Lowe 
1653*f0089e39SRichard Lowe 	h = host_addr;
1654*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
1655*f0089e39SRichard Lowe 
1656*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1657*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1658*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 2)
1659*f0089e39SRichard Lowe 			outw(port, ddi_swap16(*h++));
1660*f0089e39SRichard Lowe 	else
1661*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1662*f0089e39SRichard Lowe 			outw(port, ddi_swap16(*h++));
1663*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1664*f0089e39SRichard Lowe }
1665*f0089e39SRichard Lowe 
1666*f0089e39SRichard Lowe /*ARGSUSED*/
1667*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_rep_put32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)1668*f0089e39SRichard Lowe i_ddi_prot_vaddr_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1669*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
1670*f0089e39SRichard Lowe {
1671*f0089e39SRichard Lowe 	uint32_t *h, *d;
1672*f0089e39SRichard Lowe 
1673*f0089e39SRichard Lowe 	h = host_addr;
1674*f0089e39SRichard Lowe 	d = dev_addr;
1675*f0089e39SRichard Lowe 
1676*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1677*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1678*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1679*f0089e39SRichard Lowe 			*d++ = *h++;
1680*f0089e39SRichard Lowe 	else
1681*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1682*f0089e39SRichard Lowe 			*d = *h++;
1683*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1684*f0089e39SRichard Lowe }
1685*f0089e39SRichard Lowe 
1686*f0089e39SRichard Lowe /*ARGSUSED*/
1687*f0089e39SRichard Lowe void
i_ddi_prot_io_rep_put32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)1688*f0089e39SRichard Lowe i_ddi_prot_io_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1689*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
1690*f0089e39SRichard Lowe {
1691*f0089e39SRichard Lowe 	uint32_t *h;
1692*f0089e39SRichard Lowe 	uintptr_t port;
1693*f0089e39SRichard Lowe 
1694*f0089e39SRichard Lowe 	h = host_addr;
1695*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
1696*f0089e39SRichard Lowe 
1697*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1698*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1699*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 4)
1700*f0089e39SRichard Lowe 			outl(port, *h++);
1701*f0089e39SRichard Lowe 	else
1702*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1703*f0089e39SRichard Lowe 			outl(port, *h++);
1704*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1705*f0089e39SRichard Lowe }
1706*f0089e39SRichard Lowe 
1707*f0089e39SRichard Lowe /*ARGSUSED*/
1708*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_swap_rep_put32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)1709*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1710*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
1711*f0089e39SRichard Lowe {
1712*f0089e39SRichard Lowe 	uint32_t *h, *d;
1713*f0089e39SRichard Lowe 
1714*f0089e39SRichard Lowe 	h = host_addr;
1715*f0089e39SRichard Lowe 	d = dev_addr;
1716*f0089e39SRichard Lowe 
1717*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1718*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1719*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1720*f0089e39SRichard Lowe 			*d++ = ddi_swap32(*h++);
1721*f0089e39SRichard Lowe 	else
1722*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1723*f0089e39SRichard Lowe 			*d = ddi_swap32(*h++);
1724*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1725*f0089e39SRichard Lowe }
1726*f0089e39SRichard Lowe 
1727*f0089e39SRichard Lowe /*ARGSUSED*/
1728*f0089e39SRichard Lowe void
i_ddi_prot_io_swap_rep_put32(ddi_acc_impl_t * hdlp,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount,uint_t flags)1729*f0089e39SRichard Lowe i_ddi_prot_io_swap_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1730*f0089e39SRichard Lowe     uint32_t *dev_addr, size_t repcount, uint_t flags)
1731*f0089e39SRichard Lowe {
1732*f0089e39SRichard Lowe 	uint32_t *h;
1733*f0089e39SRichard Lowe 	uintptr_t port;
1734*f0089e39SRichard Lowe 
1735*f0089e39SRichard Lowe 	h = host_addr;
1736*f0089e39SRichard Lowe 	port = (uintptr_t)dev_addr;
1737*f0089e39SRichard Lowe 
1738*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1739*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1740*f0089e39SRichard Lowe 		for (; repcount; repcount--, port += 4)
1741*f0089e39SRichard Lowe 			outl(port, ddi_swap32(*h++));
1742*f0089e39SRichard Lowe 	else
1743*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1744*f0089e39SRichard Lowe 			outl(port, ddi_swap32(*h++));
1745*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1746*f0089e39SRichard Lowe }
1747*f0089e39SRichard Lowe 
1748*f0089e39SRichard Lowe /*ARGSUSED*/
1749*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_rep_put64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t * dev_addr,size_t repcount,uint_t flags)1750*f0089e39SRichard Lowe i_ddi_prot_vaddr_rep_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
1751*f0089e39SRichard Lowe     uint64_t *dev_addr, size_t repcount, uint_t flags)
1752*f0089e39SRichard Lowe {
1753*f0089e39SRichard Lowe 	uint64_t *h, *d;
1754*f0089e39SRichard Lowe 
1755*f0089e39SRichard Lowe 	h = host_addr;
1756*f0089e39SRichard Lowe 	d = dev_addr;
1757*f0089e39SRichard Lowe 
1758*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1759*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1760*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1761*f0089e39SRichard Lowe 			*d++ = *h++;
1762*f0089e39SRichard Lowe 	else
1763*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1764*f0089e39SRichard Lowe 			*d = *h++;
1765*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1766*f0089e39SRichard Lowe }
1767*f0089e39SRichard Lowe 
1768*f0089e39SRichard Lowe /*ARGSUSED*/
1769*f0089e39SRichard Lowe void
i_ddi_prot_vaddr_swap_rep_put64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t * dev_addr,size_t repcount,uint_t flags)1770*f0089e39SRichard Lowe i_ddi_prot_vaddr_swap_rep_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
1771*f0089e39SRichard Lowe     uint64_t *dev_addr, size_t repcount, uint_t flags)
1772*f0089e39SRichard Lowe {
1773*f0089e39SRichard Lowe 	uint64_t *h, *d;
1774*f0089e39SRichard Lowe 
1775*f0089e39SRichard Lowe 	h = host_addr;
1776*f0089e39SRichard Lowe 	d = dev_addr;
1777*f0089e39SRichard Lowe 
1778*f0089e39SRichard Lowe 	mutex_enter(hdlp->ahi_peekpoke_mutexp);
1779*f0089e39SRichard Lowe 	if (flags == DDI_DEV_AUTOINCR)
1780*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1781*f0089e39SRichard Lowe 			*d++ = ddi_swap64(*h++);
1782*f0089e39SRichard Lowe 	else
1783*f0089e39SRichard Lowe 		for (; repcount; repcount--)
1784*f0089e39SRichard Lowe 			*d = ddi_swap64(*h++);
1785*f0089e39SRichard Lowe 	mutex_exit(hdlp->ahi_peekpoke_mutexp);
1786*f0089e39SRichard Lowe }
1787*f0089e39SRichard Lowe 
1788*f0089e39SRichard Lowe void
ddi_io_rep_get8(ddi_acc_handle_t handle,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount)1789*f0089e39SRichard Lowe ddi_io_rep_get8(ddi_acc_handle_t handle,
1790*f0089e39SRichard Lowe     uint8_t *host_addr, uint8_t *dev_addr, size_t repcount)
1791*f0089e39SRichard Lowe {
1792*f0089e39SRichard Lowe 	(((ddi_acc_impl_t *)handle)->ahi_rep_get8)
1793*f0089e39SRichard Lowe 	    ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
1794*f0089e39SRichard Lowe 	    repcount, DDI_DEV_NO_AUTOINCR);
1795*f0089e39SRichard Lowe }
1796*f0089e39SRichard Lowe 
1797*f0089e39SRichard Lowe void
ddi_io_rep_get16(ddi_acc_handle_t handle,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount)1798*f0089e39SRichard Lowe ddi_io_rep_get16(ddi_acc_handle_t handle,
1799*f0089e39SRichard Lowe     uint16_t *host_addr, uint16_t *dev_addr, size_t repcount)
1800*f0089e39SRichard Lowe {
1801*f0089e39SRichard Lowe 	(((ddi_acc_impl_t *)handle)->ahi_rep_get16)
1802*f0089e39SRichard Lowe 	    ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
1803*f0089e39SRichard Lowe 	    repcount, DDI_DEV_NO_AUTOINCR);
1804*f0089e39SRichard Lowe }
1805*f0089e39SRichard Lowe 
1806*f0089e39SRichard Lowe void
ddi_io_rep_get32(ddi_acc_handle_t handle,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount)1807*f0089e39SRichard Lowe ddi_io_rep_get32(ddi_acc_handle_t handle,
1808*f0089e39SRichard Lowe     uint32_t *host_addr, uint32_t *dev_addr, size_t repcount)
1809*f0089e39SRichard Lowe {
1810*f0089e39SRichard Lowe 	(((ddi_acc_impl_t *)handle)->ahi_rep_get32)
1811*f0089e39SRichard Lowe 	    ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
1812*f0089e39SRichard Lowe 	    repcount, DDI_DEV_NO_AUTOINCR);
1813*f0089e39SRichard Lowe }
1814*f0089e39SRichard Lowe 
1815*f0089e39SRichard Lowe /*ARGSUSED*/
1816*f0089e39SRichard Lowe void
i_ddi_io_rep_get64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t * dev_addr,size_t repcount,uint_t flags)1817*f0089e39SRichard Lowe i_ddi_io_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
1818*f0089e39SRichard Lowe     uint64_t *dev_addr, size_t repcount, uint_t flags)
1819*f0089e39SRichard Lowe {
1820*f0089e39SRichard Lowe 	cmn_err(CE_PANIC, "ddi_rep_get64 from i/o space");
1821*f0089e39SRichard Lowe }
1822*f0089e39SRichard Lowe 
1823*f0089e39SRichard Lowe void
ddi_io_rep_put8(ddi_acc_handle_t handle,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount)1824*f0089e39SRichard Lowe ddi_io_rep_put8(ddi_acc_handle_t handle,
1825*f0089e39SRichard Lowe     uint8_t *host_addr, uint8_t *dev_addr, size_t repcount)
1826*f0089e39SRichard Lowe {
1827*f0089e39SRichard Lowe 	(((ddi_acc_impl_t *)handle)->ahi_rep_put8)
1828*f0089e39SRichard Lowe 	    ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
1829*f0089e39SRichard Lowe 	    repcount, DDI_DEV_NO_AUTOINCR);
1830*f0089e39SRichard Lowe }
1831*f0089e39SRichard Lowe 
1832*f0089e39SRichard Lowe void
ddi_io_rep_put16(ddi_acc_handle_t handle,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount)1833*f0089e39SRichard Lowe ddi_io_rep_put16(ddi_acc_handle_t handle,
1834*f0089e39SRichard Lowe     uint16_t *host_addr, uint16_t *dev_addr, size_t repcount)
1835*f0089e39SRichard Lowe {
1836*f0089e39SRichard Lowe 	(((ddi_acc_impl_t *)handle)->ahi_rep_put16)
1837*f0089e39SRichard Lowe 	    ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
1838*f0089e39SRichard Lowe 	    repcount, DDI_DEV_NO_AUTOINCR);
1839*f0089e39SRichard Lowe }
1840*f0089e39SRichard Lowe 
1841*f0089e39SRichard Lowe void
ddi_io_rep_put32(ddi_acc_handle_t handle,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount)1842*f0089e39SRichard Lowe ddi_io_rep_put32(ddi_acc_handle_t handle,
1843*f0089e39SRichard Lowe     uint32_t *host_addr, uint32_t *dev_addr, size_t repcount)
1844*f0089e39SRichard Lowe {
1845*f0089e39SRichard Lowe 	(((ddi_acc_impl_t *)handle)->ahi_rep_put32)
1846*f0089e39SRichard Lowe 	    ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
1847*f0089e39SRichard Lowe 	    repcount, DDI_DEV_NO_AUTOINCR);
1848*f0089e39SRichard Lowe }
1849*f0089e39SRichard Lowe 
1850*f0089e39SRichard Lowe /*ARGSUSED*/
1851*f0089e39SRichard Lowe void
i_ddi_io_rep_put64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t * dev_addr,size_t repcount,uint_t flags)1852*f0089e39SRichard Lowe i_ddi_io_rep_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
1853*f0089e39SRichard Lowe     uint64_t *dev_addr, size_t repcount, uint_t flags)
1854*f0089e39SRichard Lowe {
1855*f0089e39SRichard Lowe 	cmn_err(CE_PANIC, "ddi_rep_put64 to i/o space");
1856*f0089e39SRichard Lowe }
1857*f0089e39SRichard Lowe 
1858*f0089e39SRichard Lowe /*
1859*f0089e39SRichard Lowe  * These next two functions could be translated into assembler someday
1860*f0089e39SRichard Lowe  */
1861*f0089e39SRichard Lowe int
ddi_check_acc_handle(ddi_acc_handle_t handle)1862*f0089e39SRichard Lowe ddi_check_acc_handle(ddi_acc_handle_t handle)
1863*f0089e39SRichard Lowe {
1864*f0089e39SRichard Lowe 	ddi_acc_impl_t *hdlp = (ddi_acc_impl_t *)handle;
1865*f0089e39SRichard Lowe 	return (((*hdlp->ahi_fault_check)(hdlp) == DDI_SUCCESS) ? DDI_SUCCESS :
1866*f0089e39SRichard Lowe 	    DDI_FAILURE);
1867*f0089e39SRichard Lowe }
1868*f0089e39SRichard Lowe 
1869*f0089e39SRichard Lowe int
i_ddi_acc_fault_check(ddi_acc_impl_t * hdlp)1870*f0089e39SRichard Lowe i_ddi_acc_fault_check(ddi_acc_impl_t *hdlp)
1871*f0089e39SRichard Lowe {
1872*f0089e39SRichard Lowe 	/* Default version, just returns flag value */
1873*f0089e39SRichard Lowe 	return (hdlp->ahi_fault);
1874*f0089e39SRichard Lowe }
1875*f0089e39SRichard Lowe 
1876*f0089e39SRichard Lowe /*ARGSUSED*/
1877*f0089e39SRichard Lowe void
i_ddi_acc_fault_notify(ddi_acc_impl_t * hdlp)1878*f0089e39SRichard Lowe i_ddi_acc_fault_notify(ddi_acc_impl_t *hdlp)
1879*f0089e39SRichard Lowe {
1880*f0089e39SRichard Lowe 	/* Default version, does nothing for now */
1881*f0089e39SRichard Lowe }
1882*f0089e39SRichard Lowe 
1883*f0089e39SRichard Lowe void
i_ddi_acc_set_fault(ddi_acc_handle_t handle)1884*f0089e39SRichard Lowe i_ddi_acc_set_fault(ddi_acc_handle_t handle)
1885*f0089e39SRichard Lowe {
1886*f0089e39SRichard Lowe 	ddi_acc_impl_t *hdlp = (ddi_acc_impl_t *)handle;
1887*f0089e39SRichard Lowe 
1888*f0089e39SRichard Lowe 	if (!hdlp->ahi_fault) {
1889*f0089e39SRichard Lowe 		hdlp->ahi_fault = 1;
1890*f0089e39SRichard Lowe 		(*hdlp->ahi_fault_notify)(hdlp);
1891*f0089e39SRichard Lowe 	}
1892*f0089e39SRichard Lowe }
1893*f0089e39SRichard Lowe 
1894*f0089e39SRichard Lowe void
i_ddi_acc_clr_fault(ddi_acc_handle_t handle)1895*f0089e39SRichard Lowe i_ddi_acc_clr_fault(ddi_acc_handle_t handle)
1896*f0089e39SRichard Lowe {
1897*f0089e39SRichard Lowe 	ddi_acc_impl_t *hdlp = (ddi_acc_impl_t *)handle;
1898*f0089e39SRichard Lowe 
1899*f0089e39SRichard Lowe 	if (hdlp->ahi_fault) {
1900*f0089e39SRichard Lowe 		hdlp->ahi_fault = 0;
1901*f0089e39SRichard Lowe 		(*hdlp->ahi_fault_notify)(hdlp);
1902*f0089e39SRichard Lowe 	}
1903*f0089e39SRichard Lowe }
1904