17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate * CDDL HEADER START
37c478bd9Sstevel@tonic-gate *
47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the
54ab75253Smrj * Common Development and Distribution License (the "License").
64ab75253Smrj * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate *
87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate * and limitations under the License.
127c478bd9Sstevel@tonic-gate *
137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate *
197c478bd9Sstevel@tonic-gate * CDDL HEADER END
207c478bd9Sstevel@tonic-gate */
214ab75253Smrj
227c478bd9Sstevel@tonic-gate /*
23837c1ac4SStephen Hanson * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
247c478bd9Sstevel@tonic-gate * Use is subject to license terms.
257c478bd9Sstevel@tonic-gate */
26*b89e420aSGarrett D'Amore /*
27*b89e420aSGarrett D'Amore * Copyright 2014 Garrett D'Amore <garrett@damore.org>
28*b89e420aSGarrett D'Amore */
297c478bd9Sstevel@tonic-gate
307c478bd9Sstevel@tonic-gate #include <sys/conf.h>
317c478bd9Sstevel@tonic-gate #include <sys/kmem.h>
327c478bd9Sstevel@tonic-gate #include <sys/ddi_impldefs.h>
337c478bd9Sstevel@tonic-gate #include <sys/ddi.h>
347c478bd9Sstevel@tonic-gate #include <sys/sunddi.h>
357c478bd9Sstevel@tonic-gate #include <sys/ddifm.h>
3600d0963fSdilpreet #include <sys/fm/io/ddi.h>
37837c1ac4SStephen Hanson #include <sys/fm/protocol.h>
3800d0963fSdilpreet #include <sys/ontrap.h>
397c478bd9Sstevel@tonic-gate
407c478bd9Sstevel@tonic-gate
417c478bd9Sstevel@tonic-gate /*
427c478bd9Sstevel@tonic-gate * DDI DMA Engine functions for x86.
437c478bd9Sstevel@tonic-gate * These functions are more naturally generic, but do not apply to SPARC.
447c478bd9Sstevel@tonic-gate */
457c478bd9Sstevel@tonic-gate
467c478bd9Sstevel@tonic-gate int
ddi_dmae_alloc(dev_info_t * dip,int chnl,int (* dmae_waitfp)(),caddr_t arg)477c478bd9Sstevel@tonic-gate ddi_dmae_alloc(dev_info_t *dip, int chnl, int (*dmae_waitfp)(), caddr_t arg)
487c478bd9Sstevel@tonic-gate {
497c478bd9Sstevel@tonic-gate return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_ACQUIRE,
507c478bd9Sstevel@tonic-gate (off_t *)dmae_waitfp, (size_t *)arg,
517c478bd9Sstevel@tonic-gate (caddr_t *)(uintptr_t)chnl, 0));
527c478bd9Sstevel@tonic-gate }
537c478bd9Sstevel@tonic-gate
547c478bd9Sstevel@tonic-gate int
ddi_dmae_release(dev_info_t * dip,int chnl)557c478bd9Sstevel@tonic-gate ddi_dmae_release(dev_info_t *dip, int chnl)
567c478bd9Sstevel@tonic-gate {
577c478bd9Sstevel@tonic-gate return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_FREE, 0, 0,
587c478bd9Sstevel@tonic-gate (caddr_t *)(uintptr_t)chnl, 0));
597c478bd9Sstevel@tonic-gate }
607c478bd9Sstevel@tonic-gate
617c478bd9Sstevel@tonic-gate int
ddi_dmae_getattr(dev_info_t * dip,ddi_dma_attr_t * attrp)627c478bd9Sstevel@tonic-gate ddi_dmae_getattr(dev_info_t *dip, ddi_dma_attr_t *attrp)
637c478bd9Sstevel@tonic-gate {
647c478bd9Sstevel@tonic-gate return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_GETATTR, 0, 0,
657c478bd9Sstevel@tonic-gate (caddr_t *)attrp, 0));
667c478bd9Sstevel@tonic-gate }
677c478bd9Sstevel@tonic-gate
687c478bd9Sstevel@tonic-gate int
ddi_dmae_1stparty(dev_info_t * dip,int chnl)697c478bd9Sstevel@tonic-gate ddi_dmae_1stparty(dev_info_t *dip, int chnl)
707c478bd9Sstevel@tonic-gate {
717c478bd9Sstevel@tonic-gate return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_1STPTY, 0, 0,
727c478bd9Sstevel@tonic-gate (caddr_t *)(uintptr_t)chnl, 0));
737c478bd9Sstevel@tonic-gate }
747c478bd9Sstevel@tonic-gate
757c478bd9Sstevel@tonic-gate int
ddi_dmae_prog(dev_info_t * dip,struct ddi_dmae_req * dmaereqp,ddi_dma_cookie_t * cookiep,int chnl)767c478bd9Sstevel@tonic-gate ddi_dmae_prog(dev_info_t *dip, struct ddi_dmae_req *dmaereqp,
777c478bd9Sstevel@tonic-gate ddi_dma_cookie_t *cookiep, int chnl)
787c478bd9Sstevel@tonic-gate {
797c478bd9Sstevel@tonic-gate return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_PROG, (off_t *)dmaereqp,
807c478bd9Sstevel@tonic-gate (size_t *)cookiep, (caddr_t *)(uintptr_t)chnl, 0));
817c478bd9Sstevel@tonic-gate }
827c478bd9Sstevel@tonic-gate
837c478bd9Sstevel@tonic-gate int
ddi_dmae_swsetup(dev_info_t * dip,struct ddi_dmae_req * dmaereqp,ddi_dma_cookie_t * cookiep,int chnl)847c478bd9Sstevel@tonic-gate ddi_dmae_swsetup(dev_info_t *dip, struct ddi_dmae_req *dmaereqp,
857c478bd9Sstevel@tonic-gate ddi_dma_cookie_t *cookiep, int chnl)
867c478bd9Sstevel@tonic-gate {
877c478bd9Sstevel@tonic-gate return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_SWSETUP, (off_t *)dmaereqp,
887c478bd9Sstevel@tonic-gate (size_t *)cookiep, (caddr_t *)(uintptr_t)chnl, 0));
897c478bd9Sstevel@tonic-gate }
907c478bd9Sstevel@tonic-gate
917c478bd9Sstevel@tonic-gate int
ddi_dmae_swstart(dev_info_t * dip,int chnl)927c478bd9Sstevel@tonic-gate ddi_dmae_swstart(dev_info_t *dip, int chnl)
937c478bd9Sstevel@tonic-gate {
947c478bd9Sstevel@tonic-gate return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_SWSTART, 0, 0,
957c478bd9Sstevel@tonic-gate (caddr_t *)(uintptr_t)chnl, 0));
967c478bd9Sstevel@tonic-gate }
977c478bd9Sstevel@tonic-gate
987c478bd9Sstevel@tonic-gate int
ddi_dmae_stop(dev_info_t * dip,int chnl)997c478bd9Sstevel@tonic-gate ddi_dmae_stop(dev_info_t *dip, int chnl)
1007c478bd9Sstevel@tonic-gate {
1017c478bd9Sstevel@tonic-gate return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_STOP, 0, 0,
1027c478bd9Sstevel@tonic-gate (caddr_t *)(uintptr_t)chnl, 0));
1037c478bd9Sstevel@tonic-gate }
1047c478bd9Sstevel@tonic-gate
1057c478bd9Sstevel@tonic-gate int
ddi_dmae_enable(dev_info_t * dip,int chnl)1067c478bd9Sstevel@tonic-gate ddi_dmae_enable(dev_info_t *dip, int chnl)
1077c478bd9Sstevel@tonic-gate {
1087c478bd9Sstevel@tonic-gate return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_ENABLE, 0, 0,
1097c478bd9Sstevel@tonic-gate (caddr_t *)(uintptr_t)chnl, 0));
1107c478bd9Sstevel@tonic-gate }
1117c478bd9Sstevel@tonic-gate
1127c478bd9Sstevel@tonic-gate int
ddi_dmae_disable(dev_info_t * dip,int chnl)1137c478bd9Sstevel@tonic-gate ddi_dmae_disable(dev_info_t *dip, int chnl)
1147c478bd9Sstevel@tonic-gate {
1157c478bd9Sstevel@tonic-gate return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_DISABLE, 0, 0,
1167c478bd9Sstevel@tonic-gate (caddr_t *)(uintptr_t)chnl, 0));
1177c478bd9Sstevel@tonic-gate }
1187c478bd9Sstevel@tonic-gate
1197c478bd9Sstevel@tonic-gate int
ddi_dmae_getcnt(dev_info_t * dip,int chnl,int * countp)1207c478bd9Sstevel@tonic-gate ddi_dmae_getcnt(dev_info_t *dip, int chnl, int *countp)
1217c478bd9Sstevel@tonic-gate {
1227c478bd9Sstevel@tonic-gate return (ddi_dma_mctl(dip, dip, 0, DDI_DMA_E_GETCNT, 0, (size_t *)countp,
1237c478bd9Sstevel@tonic-gate (caddr_t *)(uintptr_t)chnl, 0));
1247c478bd9Sstevel@tonic-gate }
1257c478bd9Sstevel@tonic-gate
1267c478bd9Sstevel@tonic-gate /*
1277c478bd9Sstevel@tonic-gate * implementation specific access handle and routines:
1287c478bd9Sstevel@tonic-gate */
1297c478bd9Sstevel@tonic-gate
1307c478bd9Sstevel@tonic-gate static uintptr_t impl_acc_hdl_id = 0;
1317c478bd9Sstevel@tonic-gate
1327c478bd9Sstevel@tonic-gate /*
1337c478bd9Sstevel@tonic-gate * access handle allocator
1347c478bd9Sstevel@tonic-gate */
1357c478bd9Sstevel@tonic-gate ddi_acc_hdl_t *
impl_acc_hdl_get(ddi_acc_handle_t hdl)1367c478bd9Sstevel@tonic-gate impl_acc_hdl_get(ddi_acc_handle_t hdl)
1377c478bd9Sstevel@tonic-gate {
1387c478bd9Sstevel@tonic-gate /*
1397c478bd9Sstevel@tonic-gate * recast to ddi_acc_hdl_t instead of
1407c478bd9Sstevel@tonic-gate * casting to ddi_acc_impl_t and then return the ah_platform_private
1417c478bd9Sstevel@tonic-gate *
1427c478bd9Sstevel@tonic-gate * this optimization based on the ddi_acc_hdl_t is the
1437c478bd9Sstevel@tonic-gate * first member of the ddi_acc_impl_t.
1447c478bd9Sstevel@tonic-gate */
1457c478bd9Sstevel@tonic-gate return ((ddi_acc_hdl_t *)hdl);
1467c478bd9Sstevel@tonic-gate }
1477c478bd9Sstevel@tonic-gate
1487c478bd9Sstevel@tonic-gate ddi_acc_handle_t
impl_acc_hdl_alloc(int (* waitfp)(caddr_t),caddr_t arg)1497c478bd9Sstevel@tonic-gate impl_acc_hdl_alloc(int (*waitfp)(caddr_t), caddr_t arg)
1507c478bd9Sstevel@tonic-gate {
1517c478bd9Sstevel@tonic-gate ddi_acc_impl_t *hp;
15200d0963fSdilpreet on_trap_data_t *otp;
1537c478bd9Sstevel@tonic-gate int sleepflag;
1547c478bd9Sstevel@tonic-gate
1557c478bd9Sstevel@tonic-gate sleepflag = ((waitfp == (int (*)())KM_SLEEP) ? KM_SLEEP : KM_NOSLEEP);
1567c478bd9Sstevel@tonic-gate /*
15700d0963fSdilpreet * Allocate and initialize the data access handle and error status.
1587c478bd9Sstevel@tonic-gate */
15900d0963fSdilpreet if ((hp = kmem_zalloc(sizeof (ddi_acc_impl_t), sleepflag)) == NULL)
16000d0963fSdilpreet goto fail;
16100d0963fSdilpreet if ((hp->ahi_err = (ndi_err_t *)kmem_zalloc(
16200d0963fSdilpreet sizeof (ndi_err_t), sleepflag)) == NULL) {
16300d0963fSdilpreet kmem_free(hp, sizeof (ddi_acc_impl_t));
16400d0963fSdilpreet goto fail;
16500d0963fSdilpreet }
16600d0963fSdilpreet if ((otp = (on_trap_data_t *)kmem_zalloc(
16700d0963fSdilpreet sizeof (on_trap_data_t), sleepflag)) == NULL) {
16800d0963fSdilpreet kmem_free(hp->ahi_err, sizeof (ndi_err_t));
16900d0963fSdilpreet kmem_free(hp, sizeof (ddi_acc_impl_t));
17000d0963fSdilpreet goto fail;
17100d0963fSdilpreet }
17200d0963fSdilpreet hp->ahi_err->err_ontrap = otp;
17300d0963fSdilpreet hp->ahi_common.ah_platform_private = (void *)hp;
17400d0963fSdilpreet
17500d0963fSdilpreet return ((ddi_acc_handle_t)hp);
17600d0963fSdilpreet fail:
1777c478bd9Sstevel@tonic-gate if ((waitfp != (int (*)())KM_SLEEP) &&
1787c478bd9Sstevel@tonic-gate (waitfp != (int (*)())KM_NOSLEEP))
1797c478bd9Sstevel@tonic-gate ddi_set_callback(waitfp, arg, &impl_acc_hdl_id);
1807c478bd9Sstevel@tonic-gate return (NULL);
1817c478bd9Sstevel@tonic-gate }
1827c478bd9Sstevel@tonic-gate
1837c478bd9Sstevel@tonic-gate void
impl_acc_hdl_free(ddi_acc_handle_t handle)1847c478bd9Sstevel@tonic-gate impl_acc_hdl_free(ddi_acc_handle_t handle)
1857c478bd9Sstevel@tonic-gate {
1867c478bd9Sstevel@tonic-gate ddi_acc_impl_t *hp;
1877c478bd9Sstevel@tonic-gate
18800d0963fSdilpreet /*
18900d0963fSdilpreet * The supplied (ddi_acc_handle_t) is actually a (ddi_acc_impl_t *),
19000d0963fSdilpreet * because that's what we allocated in impl_acc_hdl_alloc() above.
19100d0963fSdilpreet */
1927c478bd9Sstevel@tonic-gate hp = (ddi_acc_impl_t *)handle;
1937c478bd9Sstevel@tonic-gate if (hp) {
19400d0963fSdilpreet kmem_free(hp->ahi_err->err_ontrap, sizeof (on_trap_data_t));
19500d0963fSdilpreet kmem_free(hp->ahi_err, sizeof (ndi_err_t));
19600d0963fSdilpreet kmem_free(hp, sizeof (ddi_acc_impl_t));
1977c478bd9Sstevel@tonic-gate if (impl_acc_hdl_id)
1987c478bd9Sstevel@tonic-gate ddi_run_callback(&impl_acc_hdl_id);
1997c478bd9Sstevel@tonic-gate }
2007c478bd9Sstevel@tonic-gate }
2017c478bd9Sstevel@tonic-gate
20200d0963fSdilpreet /*
20300d0963fSdilpreet * Function used to check if a given access handle owns the failing address.
20400d0963fSdilpreet * Called by ndi_fmc_error, when we detect a PIO error.
20500d0963fSdilpreet */
20600d0963fSdilpreet /* ARGSUSED */
20700d0963fSdilpreet static int
impl_acc_check(dev_info_t * dip,const void * handle,const void * addr,const void * not_used)20800d0963fSdilpreet impl_acc_check(dev_info_t *dip, const void *handle, const void *addr,
20900d0963fSdilpreet const void *not_used)
21000d0963fSdilpreet {
21100d0963fSdilpreet pfn_t pfn, fault_pfn;
21200d0963fSdilpreet ddi_acc_hdl_t *hp;
21300d0963fSdilpreet
21400d0963fSdilpreet hp = impl_acc_hdl_get((ddi_acc_handle_t)handle);
21500d0963fSdilpreet
21600d0963fSdilpreet ASSERT(hp);
21700d0963fSdilpreet
21800d0963fSdilpreet if (addr != NULL) {
21900d0963fSdilpreet pfn = hp->ah_pfn;
22000d0963fSdilpreet fault_pfn = mmu_btop(*(uint64_t *)addr);
22100d0963fSdilpreet if (fault_pfn >= pfn && fault_pfn < (pfn + hp->ah_pnum))
22200d0963fSdilpreet return (DDI_FM_NONFATAL);
22300d0963fSdilpreet }
22400d0963fSdilpreet return (DDI_FM_UNKNOWN);
22500d0963fSdilpreet }
22600d0963fSdilpreet
2277c478bd9Sstevel@tonic-gate void
impl_acc_err_init(ddi_acc_hdl_t * handlep)2287c478bd9Sstevel@tonic-gate impl_acc_err_init(ddi_acc_hdl_t *handlep)
2297c478bd9Sstevel@tonic-gate {
23000d0963fSdilpreet int fmcap;
23100d0963fSdilpreet ndi_err_t *errp;
23200d0963fSdilpreet on_trap_data_t *otp;
23300d0963fSdilpreet ddi_acc_impl_t *hp = (ddi_acc_impl_t *)handlep;
23400d0963fSdilpreet
23500d0963fSdilpreet fmcap = ddi_fm_capable(handlep->ah_dip);
23600d0963fSdilpreet
23700d0963fSdilpreet if (handlep->ah_acc.devacc_attr_version < DDI_DEVICE_ATTR_V1 ||
23800d0963fSdilpreet !DDI_FM_ACC_ERR_CAP(fmcap)) {
2397c478bd9Sstevel@tonic-gate handlep->ah_acc.devacc_attr_access = DDI_DEFAULT_ACC;
240837c1ac4SStephen Hanson } else if (handlep->ah_acc.devacc_attr_access == DDI_FLAGERR_ACC &&
241837c1ac4SStephen Hanson hp->ahi_scan == NULL) {
242837c1ac4SStephen Hanson handlep->ah_acc.devacc_attr_access = DDI_DEFAULT_ACC;
24300d0963fSdilpreet } else if (DDI_FM_ACC_ERR_CAP(fmcap)) {
24400d0963fSdilpreet if (handlep->ah_acc.devacc_attr_access == DDI_DEFAULT_ACC) {
245837c1ac4SStephen Hanson if (handlep->ah_xfermodes)
246837c1ac4SStephen Hanson return;
24700d0963fSdilpreet i_ddi_drv_ereport_post(handlep->ah_dip, DVR_EFMCAP,
24800d0963fSdilpreet NULL, DDI_NOSLEEP);
24900d0963fSdilpreet } else {
25000d0963fSdilpreet errp = hp->ahi_err;
25100d0963fSdilpreet otp = (on_trap_data_t *)errp->err_ontrap;
25200d0963fSdilpreet otp->ot_handle = (void *)(hp);
25300d0963fSdilpreet otp->ot_prot = OT_DATA_ACCESS;
25400d0963fSdilpreet errp->err_status = DDI_FM_OK;
25500d0963fSdilpreet errp->err_expected = DDI_FM_ERR_UNEXPECTED;
25600d0963fSdilpreet errp->err_cf = impl_acc_check;
25700d0963fSdilpreet }
25800d0963fSdilpreet }
25900d0963fSdilpreet }
26000d0963fSdilpreet
26100d0963fSdilpreet /* ARGSUSED */
26200d0963fSdilpreet int
impl_dma_check(dev_info_t * dip,const void * handle,const void * pci_hdl,const void * not_used)26300d0963fSdilpreet impl_dma_check(dev_info_t *dip, const void *handle, const void *pci_hdl,
26400d0963fSdilpreet const void *not_used)
26500d0963fSdilpreet {
26600d0963fSdilpreet return (DDI_FM_UNKNOWN);
2677c478bd9Sstevel@tonic-gate }
2687c478bd9Sstevel@tonic-gate
2697c478bd9Sstevel@tonic-gate void
impl_acc_hdl_init(ddi_acc_hdl_t * handlep)2707c478bd9Sstevel@tonic-gate impl_acc_hdl_init(ddi_acc_hdl_t *handlep)
2717c478bd9Sstevel@tonic-gate {
2727c478bd9Sstevel@tonic-gate ddi_acc_impl_t *hp;
27300d0963fSdilpreet int fmcap;
27400d0963fSdilpreet int devacc_attr_access;
2757c478bd9Sstevel@tonic-gate
2767c478bd9Sstevel@tonic-gate if (!handlep)
2777c478bd9Sstevel@tonic-gate return;
27800d0963fSdilpreet fmcap = ddi_fm_capable(handlep->ah_dip);
27900d0963fSdilpreet if (handlep->ah_acc.devacc_attr_version < DDI_DEVICE_ATTR_V1 ||
28000d0963fSdilpreet !DDI_FM_ACC_ERR_CAP(fmcap))
28100d0963fSdilpreet devacc_attr_access = DDI_DEFAULT_ACC;
28200d0963fSdilpreet else
28300d0963fSdilpreet devacc_attr_access = handlep->ah_acc.devacc_attr_access;
2847c478bd9Sstevel@tonic-gate
28500d0963fSdilpreet hp = (ddi_acc_impl_t *)handlep->ah_platform_private;
286837c1ac4SStephen Hanson
287837c1ac4SStephen Hanson /*
288837c1ac4SStephen Hanson * Can only do FLAGERR if scan callback is set up. This should
289837c1ac4SStephen Hanson * also guarantee that the peekpoke_mutex and err_mutex are defined.
290837c1ac4SStephen Hanson */
291837c1ac4SStephen Hanson if (devacc_attr_access == DDI_FLAGERR_ACC && hp->ahi_scan == NULL)
292837c1ac4SStephen Hanson devacc_attr_access = DDI_DEFAULT_ACC;
293837c1ac4SStephen Hanson
29400d0963fSdilpreet switch (devacc_attr_access) {
29500d0963fSdilpreet case DDI_CAUTIOUS_ACC:
29600d0963fSdilpreet hp->ahi_get8 = i_ddi_caut_get8;
29700d0963fSdilpreet hp->ahi_put8 = i_ddi_caut_put8;
29800d0963fSdilpreet hp->ahi_rep_get8 = i_ddi_caut_rep_get8;
29900d0963fSdilpreet hp->ahi_rep_put8 = i_ddi_caut_rep_put8;
30000d0963fSdilpreet hp->ahi_get16 = i_ddi_caut_get16;
30100d0963fSdilpreet hp->ahi_get32 = i_ddi_caut_get32;
30200d0963fSdilpreet hp->ahi_put16 = i_ddi_caut_put16;
30300d0963fSdilpreet hp->ahi_put32 = i_ddi_caut_put32;
30400d0963fSdilpreet hp->ahi_rep_get16 = i_ddi_caut_rep_get16;
30500d0963fSdilpreet hp->ahi_rep_get32 = i_ddi_caut_rep_get32;
30600d0963fSdilpreet hp->ahi_rep_put16 = i_ddi_caut_rep_put16;
30700d0963fSdilpreet hp->ahi_rep_put32 = i_ddi_caut_rep_put32;
30800d0963fSdilpreet hp->ahi_get64 = i_ddi_caut_get64;
30900d0963fSdilpreet hp->ahi_put64 = i_ddi_caut_put64;
31000d0963fSdilpreet hp->ahi_rep_get64 = i_ddi_caut_rep_get64;
31100d0963fSdilpreet hp->ahi_rep_put64 = i_ddi_caut_rep_put64;
31200d0963fSdilpreet break;
313837c1ac4SStephen Hanson case DDI_FLAGERR_ACC:
314837c1ac4SStephen Hanson if (hp->ahi_acc_attr & DDI_ACCATTR_IO_SPACE) {
315837c1ac4SStephen Hanson hp->ahi_get8 = i_ddi_prot_io_get8;
316837c1ac4SStephen Hanson hp->ahi_put8 = i_ddi_prot_io_put8;
317837c1ac4SStephen Hanson hp->ahi_rep_get8 = i_ddi_prot_io_rep_get8;
318837c1ac4SStephen Hanson hp->ahi_rep_put8 = i_ddi_prot_io_rep_put8;
319837c1ac4SStephen Hanson
320837c1ac4SStephen Hanson /* temporary set these 64 functions to no-ops */
321837c1ac4SStephen Hanson hp->ahi_get64 = i_ddi_io_get64;
322837c1ac4SStephen Hanson hp->ahi_put64 = i_ddi_io_put64;
323837c1ac4SStephen Hanson hp->ahi_rep_get64 = i_ddi_io_rep_get64;
324837c1ac4SStephen Hanson hp->ahi_rep_put64 = i_ddi_io_rep_put64;
325837c1ac4SStephen Hanson
326837c1ac4SStephen Hanson /*
327837c1ac4SStephen Hanson * check for BIG endian access
328837c1ac4SStephen Hanson */
329837c1ac4SStephen Hanson if (handlep->ah_acc.devacc_attr_endian_flags ==
330837c1ac4SStephen Hanson DDI_STRUCTURE_BE_ACC) {
331837c1ac4SStephen Hanson hp->ahi_get16 = i_ddi_prot_io_swap_get16;
332837c1ac4SStephen Hanson hp->ahi_get32 = i_ddi_prot_io_swap_get32;
333837c1ac4SStephen Hanson hp->ahi_put16 = i_ddi_prot_io_swap_put16;
334837c1ac4SStephen Hanson hp->ahi_put32 = i_ddi_prot_io_swap_put32;
335837c1ac4SStephen Hanson hp->ahi_rep_get16 =
336837c1ac4SStephen Hanson i_ddi_prot_io_swap_rep_get16;
337837c1ac4SStephen Hanson hp->ahi_rep_get32 =
338837c1ac4SStephen Hanson i_ddi_prot_io_swap_rep_get32;
339837c1ac4SStephen Hanson hp->ahi_rep_put16 =
340837c1ac4SStephen Hanson i_ddi_prot_io_swap_rep_put16;
341837c1ac4SStephen Hanson hp->ahi_rep_put32 =
342837c1ac4SStephen Hanson i_ddi_prot_io_swap_rep_put32;
343837c1ac4SStephen Hanson } else {
344837c1ac4SStephen Hanson hp->ahi_acc_attr |= DDI_ACCATTR_DIRECT;
345837c1ac4SStephen Hanson hp->ahi_get16 = i_ddi_prot_io_get16;
346837c1ac4SStephen Hanson hp->ahi_get32 = i_ddi_prot_io_get32;
347837c1ac4SStephen Hanson hp->ahi_put16 = i_ddi_prot_io_put16;
348837c1ac4SStephen Hanson hp->ahi_put32 = i_ddi_prot_io_put32;
349837c1ac4SStephen Hanson hp->ahi_rep_get16 = i_ddi_prot_io_rep_get16;
350837c1ac4SStephen Hanson hp->ahi_rep_get32 = i_ddi_prot_io_rep_get32;
351837c1ac4SStephen Hanson hp->ahi_rep_put16 = i_ddi_prot_io_rep_put16;
352837c1ac4SStephen Hanson hp->ahi_rep_put32 = i_ddi_prot_io_rep_put32;
353837c1ac4SStephen Hanson }
354837c1ac4SStephen Hanson
355837c1ac4SStephen Hanson } else if (hp->ahi_acc_attr & DDI_ACCATTR_CPU_VADDR) {
356837c1ac4SStephen Hanson
357837c1ac4SStephen Hanson hp->ahi_get8 = i_ddi_prot_vaddr_get8;
358837c1ac4SStephen Hanson hp->ahi_put8 = i_ddi_prot_vaddr_put8;
359837c1ac4SStephen Hanson hp->ahi_rep_get8 = i_ddi_prot_vaddr_rep_get8;
360837c1ac4SStephen Hanson hp->ahi_rep_put8 = i_ddi_prot_vaddr_rep_put8;
361837c1ac4SStephen Hanson
362837c1ac4SStephen Hanson /*
363837c1ac4SStephen Hanson * check for BIG endian access
364837c1ac4SStephen Hanson */
365837c1ac4SStephen Hanson if (handlep->ah_acc.devacc_attr_endian_flags ==
366837c1ac4SStephen Hanson DDI_STRUCTURE_BE_ACC) {
367837c1ac4SStephen Hanson
368837c1ac4SStephen Hanson hp->ahi_get16 = i_ddi_prot_vaddr_swap_get16;
369837c1ac4SStephen Hanson hp->ahi_get32 = i_ddi_prot_vaddr_swap_get32;
370837c1ac4SStephen Hanson hp->ahi_get64 = i_ddi_prot_vaddr_swap_get64;
371837c1ac4SStephen Hanson hp->ahi_put16 = i_ddi_prot_vaddr_swap_put16;
372837c1ac4SStephen Hanson hp->ahi_put32 = i_ddi_prot_vaddr_swap_put32;
373837c1ac4SStephen Hanson hp->ahi_put64 = i_ddi_prot_vaddr_swap_put64;
374837c1ac4SStephen Hanson hp->ahi_rep_get16 =
375837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_get16;
376837c1ac4SStephen Hanson hp->ahi_rep_get32 =
377837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_get32;
378837c1ac4SStephen Hanson hp->ahi_rep_get64 =
379837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_get64;
380837c1ac4SStephen Hanson hp->ahi_rep_put16 =
381837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_put16;
382837c1ac4SStephen Hanson hp->ahi_rep_put32 =
383837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_put32;
384837c1ac4SStephen Hanson hp->ahi_rep_put64 =
385837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_put64;
386837c1ac4SStephen Hanson } else {
387837c1ac4SStephen Hanson hp->ahi_acc_attr |= DDI_ACCATTR_DIRECT;
388837c1ac4SStephen Hanson hp->ahi_get16 = i_ddi_prot_vaddr_get16;
389837c1ac4SStephen Hanson hp->ahi_get32 = i_ddi_prot_vaddr_get32;
390837c1ac4SStephen Hanson hp->ahi_get64 = i_ddi_prot_vaddr_get64;
391837c1ac4SStephen Hanson hp->ahi_put16 = i_ddi_prot_vaddr_put16;
392837c1ac4SStephen Hanson hp->ahi_put32 = i_ddi_prot_vaddr_put32;
393837c1ac4SStephen Hanson hp->ahi_put64 = i_ddi_prot_vaddr_put64;
394837c1ac4SStephen Hanson hp->ahi_rep_get16 = i_ddi_prot_vaddr_rep_get16;
395837c1ac4SStephen Hanson hp->ahi_rep_get32 = i_ddi_prot_vaddr_rep_get32;
396837c1ac4SStephen Hanson hp->ahi_rep_get64 = i_ddi_prot_vaddr_rep_get64;
397837c1ac4SStephen Hanson hp->ahi_rep_put16 = i_ddi_prot_vaddr_rep_put16;
398837c1ac4SStephen Hanson hp->ahi_rep_put32 = i_ddi_prot_vaddr_rep_put32;
399837c1ac4SStephen Hanson hp->ahi_rep_put64 = i_ddi_prot_vaddr_rep_put64;
400837c1ac4SStephen Hanson }
401837c1ac4SStephen Hanson }
402837c1ac4SStephen Hanson break;
40300d0963fSdilpreet case DDI_DEFAULT_ACC:
4047c478bd9Sstevel@tonic-gate if (hp->ahi_acc_attr & DDI_ACCATTR_IO_SPACE) {
4057c478bd9Sstevel@tonic-gate hp->ahi_get8 = i_ddi_io_get8;
4067c478bd9Sstevel@tonic-gate hp->ahi_put8 = i_ddi_io_put8;
4077c478bd9Sstevel@tonic-gate hp->ahi_rep_get8 = i_ddi_io_rep_get8;
4087c478bd9Sstevel@tonic-gate hp->ahi_rep_put8 = i_ddi_io_rep_put8;
4097c478bd9Sstevel@tonic-gate
4107c478bd9Sstevel@tonic-gate /* temporary set these 64 functions to no-ops */
4117c478bd9Sstevel@tonic-gate hp->ahi_get64 = i_ddi_io_get64;
4127c478bd9Sstevel@tonic-gate hp->ahi_put64 = i_ddi_io_put64;
4137c478bd9Sstevel@tonic-gate hp->ahi_rep_get64 = i_ddi_io_rep_get64;
4147c478bd9Sstevel@tonic-gate hp->ahi_rep_put64 = i_ddi_io_rep_put64;
4157c478bd9Sstevel@tonic-gate
4167c478bd9Sstevel@tonic-gate /*
4177c478bd9Sstevel@tonic-gate * check for BIG endian access
4187c478bd9Sstevel@tonic-gate */
4197c478bd9Sstevel@tonic-gate if (handlep->ah_acc.devacc_attr_endian_flags ==
4207c478bd9Sstevel@tonic-gate DDI_STRUCTURE_BE_ACC) {
4217c478bd9Sstevel@tonic-gate hp->ahi_get16 = i_ddi_io_swap_get16;
4227c478bd9Sstevel@tonic-gate hp->ahi_get32 = i_ddi_io_swap_get32;
4237c478bd9Sstevel@tonic-gate hp->ahi_put16 = i_ddi_io_swap_put16;
4247c478bd9Sstevel@tonic-gate hp->ahi_put32 = i_ddi_io_swap_put32;
4257c478bd9Sstevel@tonic-gate hp->ahi_rep_get16 = i_ddi_io_swap_rep_get16;
4267c478bd9Sstevel@tonic-gate hp->ahi_rep_get32 = i_ddi_io_swap_rep_get32;
4277c478bd9Sstevel@tonic-gate hp->ahi_rep_put16 = i_ddi_io_swap_rep_put16;
4287c478bd9Sstevel@tonic-gate hp->ahi_rep_put32 = i_ddi_io_swap_rep_put32;
4297c478bd9Sstevel@tonic-gate } else {
4307c478bd9Sstevel@tonic-gate hp->ahi_acc_attr |= DDI_ACCATTR_DIRECT;
4317c478bd9Sstevel@tonic-gate hp->ahi_get16 = i_ddi_io_get16;
4327c478bd9Sstevel@tonic-gate hp->ahi_get32 = i_ddi_io_get32;
4337c478bd9Sstevel@tonic-gate hp->ahi_put16 = i_ddi_io_put16;
4347c478bd9Sstevel@tonic-gate hp->ahi_put32 = i_ddi_io_put32;
4357c478bd9Sstevel@tonic-gate hp->ahi_rep_get16 = i_ddi_io_rep_get16;
4367c478bd9Sstevel@tonic-gate hp->ahi_rep_get32 = i_ddi_io_rep_get32;
4377c478bd9Sstevel@tonic-gate hp->ahi_rep_put16 = i_ddi_io_rep_put16;
4387c478bd9Sstevel@tonic-gate hp->ahi_rep_put32 = i_ddi_io_rep_put32;
4397c478bd9Sstevel@tonic-gate }
4407c478bd9Sstevel@tonic-gate
4417c478bd9Sstevel@tonic-gate } else if (hp->ahi_acc_attr & DDI_ACCATTR_CPU_VADDR) {
4427c478bd9Sstevel@tonic-gate
4437c478bd9Sstevel@tonic-gate hp->ahi_get8 = i_ddi_vaddr_get8;
4447c478bd9Sstevel@tonic-gate hp->ahi_put8 = i_ddi_vaddr_put8;
4457c478bd9Sstevel@tonic-gate hp->ahi_rep_get8 = i_ddi_vaddr_rep_get8;
4467c478bd9Sstevel@tonic-gate hp->ahi_rep_put8 = i_ddi_vaddr_rep_put8;
4477c478bd9Sstevel@tonic-gate
4487c478bd9Sstevel@tonic-gate /*
4497c478bd9Sstevel@tonic-gate * check for BIG endian access
4507c478bd9Sstevel@tonic-gate */
4517c478bd9Sstevel@tonic-gate if (handlep->ah_acc.devacc_attr_endian_flags ==
4527c478bd9Sstevel@tonic-gate DDI_STRUCTURE_BE_ACC) {
4537c478bd9Sstevel@tonic-gate
4547c478bd9Sstevel@tonic-gate hp->ahi_get16 = i_ddi_vaddr_swap_get16;
4557c478bd9Sstevel@tonic-gate hp->ahi_get32 = i_ddi_vaddr_swap_get32;
4567c478bd9Sstevel@tonic-gate hp->ahi_get64 = i_ddi_vaddr_swap_get64;
4577c478bd9Sstevel@tonic-gate hp->ahi_put16 = i_ddi_vaddr_swap_put16;
4587c478bd9Sstevel@tonic-gate hp->ahi_put32 = i_ddi_vaddr_swap_put32;
4597c478bd9Sstevel@tonic-gate hp->ahi_put64 = i_ddi_vaddr_swap_put64;
4607c478bd9Sstevel@tonic-gate hp->ahi_rep_get16 = i_ddi_vaddr_swap_rep_get16;
4617c478bd9Sstevel@tonic-gate hp->ahi_rep_get32 = i_ddi_vaddr_swap_rep_get32;
4627c478bd9Sstevel@tonic-gate hp->ahi_rep_get64 = i_ddi_vaddr_swap_rep_get64;
4637c478bd9Sstevel@tonic-gate hp->ahi_rep_put16 = i_ddi_vaddr_swap_rep_put16;
4647c478bd9Sstevel@tonic-gate hp->ahi_rep_put32 = i_ddi_vaddr_swap_rep_put32;
4657c478bd9Sstevel@tonic-gate hp->ahi_rep_put64 = i_ddi_vaddr_swap_rep_put64;
4667c478bd9Sstevel@tonic-gate } else {
4677c478bd9Sstevel@tonic-gate hp->ahi_acc_attr |= DDI_ACCATTR_DIRECT;
4687c478bd9Sstevel@tonic-gate hp->ahi_get16 = i_ddi_vaddr_get16;
4697c478bd9Sstevel@tonic-gate hp->ahi_get32 = i_ddi_vaddr_get32;
4707c478bd9Sstevel@tonic-gate hp->ahi_get64 = i_ddi_vaddr_get64;
4717c478bd9Sstevel@tonic-gate hp->ahi_put16 = i_ddi_vaddr_put16;
4727c478bd9Sstevel@tonic-gate hp->ahi_put32 = i_ddi_vaddr_put32;
4737c478bd9Sstevel@tonic-gate hp->ahi_put64 = i_ddi_vaddr_put64;
4747c478bd9Sstevel@tonic-gate hp->ahi_rep_get16 = i_ddi_vaddr_rep_get16;
4757c478bd9Sstevel@tonic-gate hp->ahi_rep_get32 = i_ddi_vaddr_rep_get32;
4767c478bd9Sstevel@tonic-gate hp->ahi_rep_get64 = i_ddi_vaddr_rep_get64;
4777c478bd9Sstevel@tonic-gate hp->ahi_rep_put16 = i_ddi_vaddr_rep_put16;
4787c478bd9Sstevel@tonic-gate hp->ahi_rep_put32 = i_ddi_vaddr_rep_put32;
4797c478bd9Sstevel@tonic-gate hp->ahi_rep_put64 = i_ddi_vaddr_rep_put64;
4807c478bd9Sstevel@tonic-gate }
4817c478bd9Sstevel@tonic-gate }
48200d0963fSdilpreet break;
48300d0963fSdilpreet }
4847c478bd9Sstevel@tonic-gate hp->ahi_fault_check = i_ddi_acc_fault_check;
4857c478bd9Sstevel@tonic-gate hp->ahi_fault_notify = i_ddi_acc_fault_notify;
4867c478bd9Sstevel@tonic-gate hp->ahi_fault = 0;
4877c478bd9Sstevel@tonic-gate impl_acc_err_init(handlep);
4887c478bd9Sstevel@tonic-gate }
4897c478bd9Sstevel@tonic-gate
4907c478bd9Sstevel@tonic-gate /*
4917c478bd9Sstevel@tonic-gate * The followings are low-level routines for data access.
4927c478bd9Sstevel@tonic-gate *
4937c478bd9Sstevel@tonic-gate * All of these routines should be implemented in assembly. Those
4947c478bd9Sstevel@tonic-gate * that have been rewritten be found in ~ml/ddi_i86_asm.s
4957c478bd9Sstevel@tonic-gate */
4967c478bd9Sstevel@tonic-gate
4977c478bd9Sstevel@tonic-gate /*ARGSUSED*/
4987c478bd9Sstevel@tonic-gate uint16_t
i_ddi_vaddr_swap_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)4997c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
5007c478bd9Sstevel@tonic-gate {
5017c478bd9Sstevel@tonic-gate return (ddi_swap16(*addr));
5027c478bd9Sstevel@tonic-gate }
5037c478bd9Sstevel@tonic-gate
5047c478bd9Sstevel@tonic-gate /*ARGSUSED*/
5057c478bd9Sstevel@tonic-gate uint16_t
i_ddi_io_swap_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)5067c478bd9Sstevel@tonic-gate i_ddi_io_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
5077c478bd9Sstevel@tonic-gate {
5087c478bd9Sstevel@tonic-gate return (ddi_swap16(inw((uintptr_t)addr)));
5097c478bd9Sstevel@tonic-gate }
5107c478bd9Sstevel@tonic-gate
5117c478bd9Sstevel@tonic-gate /*ARGSUSED*/
5127c478bd9Sstevel@tonic-gate uint32_t
i_ddi_vaddr_swap_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)5137c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
5147c478bd9Sstevel@tonic-gate {
5157c478bd9Sstevel@tonic-gate return (ddi_swap32(*addr));
5167c478bd9Sstevel@tonic-gate }
5177c478bd9Sstevel@tonic-gate
5187c478bd9Sstevel@tonic-gate /*ARGSUSED*/
5197c478bd9Sstevel@tonic-gate uint32_t
i_ddi_io_swap_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)5207c478bd9Sstevel@tonic-gate i_ddi_io_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
5217c478bd9Sstevel@tonic-gate {
5227c478bd9Sstevel@tonic-gate return (ddi_swap32(inl((uintptr_t)addr)));
5237c478bd9Sstevel@tonic-gate }
5247c478bd9Sstevel@tonic-gate
5257c478bd9Sstevel@tonic-gate /*ARGSUSED*/
5267c478bd9Sstevel@tonic-gate uint64_t
i_ddi_vaddr_swap_get64(ddi_acc_impl_t * hdlp,uint64_t * addr)5277c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_get64(ddi_acc_impl_t *hdlp, uint64_t *addr)
5287c478bd9Sstevel@tonic-gate {
5297c478bd9Sstevel@tonic-gate return (ddi_swap64(*addr));
5307c478bd9Sstevel@tonic-gate }
5317c478bd9Sstevel@tonic-gate
5327c478bd9Sstevel@tonic-gate /*ARGSUSED*/
5337c478bd9Sstevel@tonic-gate void
i_ddi_vaddr_swap_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)5347c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value)
5357c478bd9Sstevel@tonic-gate {
5367c478bd9Sstevel@tonic-gate *addr = ddi_swap16(value);
5377c478bd9Sstevel@tonic-gate }
5387c478bd9Sstevel@tonic-gate
5397c478bd9Sstevel@tonic-gate /*ARGSUSED*/
5407c478bd9Sstevel@tonic-gate void
i_ddi_io_swap_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)5417c478bd9Sstevel@tonic-gate i_ddi_io_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value)
5427c478bd9Sstevel@tonic-gate {
5437c478bd9Sstevel@tonic-gate outw((uintptr_t)addr, ddi_swap16(value));
5447c478bd9Sstevel@tonic-gate }
5457c478bd9Sstevel@tonic-gate
5467c478bd9Sstevel@tonic-gate /*ARGSUSED*/
5477c478bd9Sstevel@tonic-gate void
i_ddi_vaddr_swap_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)5487c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value)
5497c478bd9Sstevel@tonic-gate {
5507c478bd9Sstevel@tonic-gate *addr = ddi_swap32(value);
5517c478bd9Sstevel@tonic-gate }
5527c478bd9Sstevel@tonic-gate
5537c478bd9Sstevel@tonic-gate /*ARGSUSED*/
5547c478bd9Sstevel@tonic-gate void
i_ddi_io_swap_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)5557c478bd9Sstevel@tonic-gate i_ddi_io_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value)
5567c478bd9Sstevel@tonic-gate {
5577c478bd9Sstevel@tonic-gate outl((uintptr_t)addr, ddi_swap32(value));
5587c478bd9Sstevel@tonic-gate }
5597c478bd9Sstevel@tonic-gate
5607c478bd9Sstevel@tonic-gate /*ARGSUSED*/
5617c478bd9Sstevel@tonic-gate void
i_ddi_vaddr_swap_put64(ddi_acc_impl_t * hdlp,uint64_t * addr,uint64_t value)5627c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value)
5637c478bd9Sstevel@tonic-gate {
5647c478bd9Sstevel@tonic-gate *addr = ddi_swap64(value);
5657c478bd9Sstevel@tonic-gate }
5667c478bd9Sstevel@tonic-gate
5677c478bd9Sstevel@tonic-gate /*ARGSUSED*/
5687c478bd9Sstevel@tonic-gate 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)5697c478bd9Sstevel@tonic-gate i_ddi_vaddr_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
5707c478bd9Sstevel@tonic-gate uint8_t *dev_addr, size_t repcount, uint_t flags)
5717c478bd9Sstevel@tonic-gate {
5727c478bd9Sstevel@tonic-gate uint8_t *h, *d;
5737c478bd9Sstevel@tonic-gate
5747c478bd9Sstevel@tonic-gate h = host_addr;
5757c478bd9Sstevel@tonic-gate d = dev_addr;
5767c478bd9Sstevel@tonic-gate
5777c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
5787c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
5797c478bd9Sstevel@tonic-gate *h++ = *d++;
5807c478bd9Sstevel@tonic-gate else
5817c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
5827c478bd9Sstevel@tonic-gate *h++ = *d;
5837c478bd9Sstevel@tonic-gate }
5847c478bd9Sstevel@tonic-gate
5857c478bd9Sstevel@tonic-gate /*ARGSUSED*/
5867c478bd9Sstevel@tonic-gate 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)5877c478bd9Sstevel@tonic-gate i_ddi_vaddr_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
5887c478bd9Sstevel@tonic-gate uint16_t *dev_addr, size_t repcount, uint_t flags)
5897c478bd9Sstevel@tonic-gate {
5907c478bd9Sstevel@tonic-gate uint16_t *h, *d;
5917c478bd9Sstevel@tonic-gate
5927c478bd9Sstevel@tonic-gate h = host_addr;
5937c478bd9Sstevel@tonic-gate d = dev_addr;
5947c478bd9Sstevel@tonic-gate
5957c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
5967c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
5977c478bd9Sstevel@tonic-gate *h++ = *d++;
5987c478bd9Sstevel@tonic-gate else
5997c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
6007c478bd9Sstevel@tonic-gate *h++ = *d;
6017c478bd9Sstevel@tonic-gate }
6027c478bd9Sstevel@tonic-gate
6037c478bd9Sstevel@tonic-gate /*ARGSUSED*/
6047c478bd9Sstevel@tonic-gate 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)6057c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
6067c478bd9Sstevel@tonic-gate uint16_t *dev_addr, size_t repcount, uint_t flags)
6077c478bd9Sstevel@tonic-gate {
6087c478bd9Sstevel@tonic-gate uint16_t *h, *d;
6097c478bd9Sstevel@tonic-gate
6107c478bd9Sstevel@tonic-gate h = host_addr;
6117c478bd9Sstevel@tonic-gate d = dev_addr;
6127c478bd9Sstevel@tonic-gate
6137c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
6147c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
6157c478bd9Sstevel@tonic-gate *h++ = ddi_swap16(*d++);
6167c478bd9Sstevel@tonic-gate else
6177c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
6187c478bd9Sstevel@tonic-gate *h++ = ddi_swap16(*d);
6197c478bd9Sstevel@tonic-gate }
6207c478bd9Sstevel@tonic-gate
6217c478bd9Sstevel@tonic-gate /*ARGSUSED*/
6227c478bd9Sstevel@tonic-gate 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)6237c478bd9Sstevel@tonic-gate i_ddi_io_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
6247c478bd9Sstevel@tonic-gate uint16_t *dev_addr, size_t repcount, uint_t flags)
6257c478bd9Sstevel@tonic-gate {
6267c478bd9Sstevel@tonic-gate uint16_t *h;
6277c478bd9Sstevel@tonic-gate uintptr_t port;
6287c478bd9Sstevel@tonic-gate
6297c478bd9Sstevel@tonic-gate h = host_addr;
6307c478bd9Sstevel@tonic-gate port = (uintptr_t)dev_addr;
6317c478bd9Sstevel@tonic-gate
6327c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
6337c478bd9Sstevel@tonic-gate for (; repcount; repcount--, port += 2)
6347c478bd9Sstevel@tonic-gate *h++ = ddi_swap16(inw(port));
6357c478bd9Sstevel@tonic-gate else
6367c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
6377c478bd9Sstevel@tonic-gate *h++ = ddi_swap16(inw(port));
6387c478bd9Sstevel@tonic-gate }
6397c478bd9Sstevel@tonic-gate
6407c478bd9Sstevel@tonic-gate /*ARGSUSED*/
6417c478bd9Sstevel@tonic-gate 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)6427c478bd9Sstevel@tonic-gate i_ddi_vaddr_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
6437c478bd9Sstevel@tonic-gate uint32_t *dev_addr, size_t repcount, uint_t flags)
6447c478bd9Sstevel@tonic-gate {
6457c478bd9Sstevel@tonic-gate uint32_t *h, *d;
6467c478bd9Sstevel@tonic-gate
6477c478bd9Sstevel@tonic-gate h = host_addr;
6487c478bd9Sstevel@tonic-gate d = dev_addr;
6497c478bd9Sstevel@tonic-gate
6507c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
6517c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
6527c478bd9Sstevel@tonic-gate *h++ = *d++;
6537c478bd9Sstevel@tonic-gate else
6547c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
6557c478bd9Sstevel@tonic-gate *h++ = *d;
6567c478bd9Sstevel@tonic-gate }
6577c478bd9Sstevel@tonic-gate
6587c478bd9Sstevel@tonic-gate /*ARGSUSED*/
6597c478bd9Sstevel@tonic-gate 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)6607c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
6617c478bd9Sstevel@tonic-gate uint32_t *dev_addr, size_t repcount, uint_t flags)
6627c478bd9Sstevel@tonic-gate {
6637c478bd9Sstevel@tonic-gate uint32_t *h, *d;
6647c478bd9Sstevel@tonic-gate
6657c478bd9Sstevel@tonic-gate h = host_addr;
6667c478bd9Sstevel@tonic-gate d = dev_addr;
6677c478bd9Sstevel@tonic-gate
6687c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
6697c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
6707c478bd9Sstevel@tonic-gate *h++ = ddi_swap32(*d++);
6717c478bd9Sstevel@tonic-gate else
6727c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
6737c478bd9Sstevel@tonic-gate *h++ = ddi_swap32(*d);
6747c478bd9Sstevel@tonic-gate }
6757c478bd9Sstevel@tonic-gate
6767c478bd9Sstevel@tonic-gate /*ARGSUSED*/
6777c478bd9Sstevel@tonic-gate 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)6787c478bd9Sstevel@tonic-gate i_ddi_io_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
6797c478bd9Sstevel@tonic-gate uint32_t *dev_addr, size_t repcount, uint_t flags)
6807c478bd9Sstevel@tonic-gate {
6817c478bd9Sstevel@tonic-gate uint32_t *h;
6827c478bd9Sstevel@tonic-gate uintptr_t port;
6837c478bd9Sstevel@tonic-gate
6847c478bd9Sstevel@tonic-gate h = host_addr;
6857c478bd9Sstevel@tonic-gate port = (uintptr_t)dev_addr;
6867c478bd9Sstevel@tonic-gate
6877c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
6887c478bd9Sstevel@tonic-gate for (; repcount; repcount--, port += 4)
6897c478bd9Sstevel@tonic-gate *h++ = ddi_swap32(inl(port));
6907c478bd9Sstevel@tonic-gate else
6917c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
6927c478bd9Sstevel@tonic-gate *h++ = ddi_swap32(inl(port));
6937c478bd9Sstevel@tonic-gate }
6947c478bd9Sstevel@tonic-gate
6957c478bd9Sstevel@tonic-gate /*ARGSUSED*/
6967c478bd9Sstevel@tonic-gate 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)6977c478bd9Sstevel@tonic-gate i_ddi_vaddr_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
6987c478bd9Sstevel@tonic-gate uint64_t *dev_addr, size_t repcount, uint_t flags)
6997c478bd9Sstevel@tonic-gate {
7007c478bd9Sstevel@tonic-gate uint64_t *h, *d;
7017c478bd9Sstevel@tonic-gate
7027c478bd9Sstevel@tonic-gate h = host_addr;
7037c478bd9Sstevel@tonic-gate d = dev_addr;
7047c478bd9Sstevel@tonic-gate
7057c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
7067c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
7077c478bd9Sstevel@tonic-gate *h++ = *d++;
7087c478bd9Sstevel@tonic-gate else
7097c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
7107c478bd9Sstevel@tonic-gate *h++ = *d;
7117c478bd9Sstevel@tonic-gate }
7127c478bd9Sstevel@tonic-gate
7137c478bd9Sstevel@tonic-gate /*ARGSUSED*/
7147c478bd9Sstevel@tonic-gate 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)7157c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
7167c478bd9Sstevel@tonic-gate uint64_t *dev_addr, size_t repcount, uint_t flags)
7177c478bd9Sstevel@tonic-gate {
7187c478bd9Sstevel@tonic-gate uint64_t *h, *d;
7197c478bd9Sstevel@tonic-gate
7207c478bd9Sstevel@tonic-gate h = host_addr;
7217c478bd9Sstevel@tonic-gate d = dev_addr;
7227c478bd9Sstevel@tonic-gate
7237c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
7247c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
7257c478bd9Sstevel@tonic-gate *h++ = ddi_swap64(*d++);
7267c478bd9Sstevel@tonic-gate else
7277c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
7287c478bd9Sstevel@tonic-gate *h++ = ddi_swap64(*d);
7297c478bd9Sstevel@tonic-gate }
7307c478bd9Sstevel@tonic-gate
7317c478bd9Sstevel@tonic-gate /*ARGSUSED*/
7327c478bd9Sstevel@tonic-gate 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)7337c478bd9Sstevel@tonic-gate i_ddi_vaddr_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
7347c478bd9Sstevel@tonic-gate uint8_t *dev_addr, size_t repcount, uint_t flags)
7357c478bd9Sstevel@tonic-gate {
7367c478bd9Sstevel@tonic-gate uint8_t *h, *d;
7377c478bd9Sstevel@tonic-gate
7387c478bd9Sstevel@tonic-gate h = host_addr;
7397c478bd9Sstevel@tonic-gate d = dev_addr;
7407c478bd9Sstevel@tonic-gate
7417c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
7427c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
7437c478bd9Sstevel@tonic-gate *d++ = *h++;
7447c478bd9Sstevel@tonic-gate else
7457c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
7467c478bd9Sstevel@tonic-gate *d = *h++;
7477c478bd9Sstevel@tonic-gate }
7487c478bd9Sstevel@tonic-gate
7497c478bd9Sstevel@tonic-gate /*ARGSUSED*/
7507c478bd9Sstevel@tonic-gate 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)7517c478bd9Sstevel@tonic-gate i_ddi_vaddr_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
7527c478bd9Sstevel@tonic-gate uint16_t *dev_addr, size_t repcount, uint_t flags)
7537c478bd9Sstevel@tonic-gate {
7547c478bd9Sstevel@tonic-gate uint16_t *h, *d;
7557c478bd9Sstevel@tonic-gate
7567c478bd9Sstevel@tonic-gate h = host_addr;
7577c478bd9Sstevel@tonic-gate d = dev_addr;
7587c478bd9Sstevel@tonic-gate
7597c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
7607c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
7617c478bd9Sstevel@tonic-gate *d++ = *h++;
7627c478bd9Sstevel@tonic-gate else
7637c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
7647c478bd9Sstevel@tonic-gate *d = *h++;
7657c478bd9Sstevel@tonic-gate }
7667c478bd9Sstevel@tonic-gate
7677c478bd9Sstevel@tonic-gate /*ARGSUSED*/
7687c478bd9Sstevel@tonic-gate 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)7697c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
7707c478bd9Sstevel@tonic-gate uint16_t *dev_addr, size_t repcount, uint_t flags)
7717c478bd9Sstevel@tonic-gate {
7727c478bd9Sstevel@tonic-gate uint16_t *h, *d;
7737c478bd9Sstevel@tonic-gate
7747c478bd9Sstevel@tonic-gate h = host_addr;
7757c478bd9Sstevel@tonic-gate d = dev_addr;
7767c478bd9Sstevel@tonic-gate
7777c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
7787c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
7797c478bd9Sstevel@tonic-gate *d++ = ddi_swap16(*h++);
7807c478bd9Sstevel@tonic-gate else
7817c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
7827c478bd9Sstevel@tonic-gate *d = ddi_swap16(*h++);
7837c478bd9Sstevel@tonic-gate }
7847c478bd9Sstevel@tonic-gate
7857c478bd9Sstevel@tonic-gate /*ARGSUSED*/
7867c478bd9Sstevel@tonic-gate 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)7877c478bd9Sstevel@tonic-gate i_ddi_io_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
7887c478bd9Sstevel@tonic-gate uint16_t *dev_addr, size_t repcount, uint_t flags)
7897c478bd9Sstevel@tonic-gate {
7907c478bd9Sstevel@tonic-gate uint16_t *h;
7917c478bd9Sstevel@tonic-gate uintptr_t port;
7927c478bd9Sstevel@tonic-gate
7937c478bd9Sstevel@tonic-gate h = host_addr;
7947c478bd9Sstevel@tonic-gate port = (uintptr_t)dev_addr;
7957c478bd9Sstevel@tonic-gate
7967c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
7977c478bd9Sstevel@tonic-gate for (; repcount; repcount--, port += 2)
7987c478bd9Sstevel@tonic-gate outw(port, ddi_swap16(*h++));
7997c478bd9Sstevel@tonic-gate else
8007c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
8017c478bd9Sstevel@tonic-gate outw(port, ddi_swap16(*h++));
8027c478bd9Sstevel@tonic-gate }
8037c478bd9Sstevel@tonic-gate
8047c478bd9Sstevel@tonic-gate /*ARGSUSED*/
8057c478bd9Sstevel@tonic-gate 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)8067c478bd9Sstevel@tonic-gate i_ddi_vaddr_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
8077c478bd9Sstevel@tonic-gate uint32_t *dev_addr, size_t repcount, uint_t flags)
8087c478bd9Sstevel@tonic-gate {
8097c478bd9Sstevel@tonic-gate uint32_t *h, *d;
8107c478bd9Sstevel@tonic-gate
8117c478bd9Sstevel@tonic-gate h = host_addr;
8127c478bd9Sstevel@tonic-gate d = dev_addr;
8137c478bd9Sstevel@tonic-gate
8147c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
8157c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
8167c478bd9Sstevel@tonic-gate *d++ = *h++;
8177c478bd9Sstevel@tonic-gate else
8187c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
8197c478bd9Sstevel@tonic-gate *d = *h++;
8207c478bd9Sstevel@tonic-gate }
8217c478bd9Sstevel@tonic-gate
8227c478bd9Sstevel@tonic-gate /*ARGSUSED*/
8237c478bd9Sstevel@tonic-gate 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)8247c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
8257c478bd9Sstevel@tonic-gate uint32_t *dev_addr, size_t repcount, uint_t flags)
8267c478bd9Sstevel@tonic-gate {
8277c478bd9Sstevel@tonic-gate uint32_t *h, *d;
8287c478bd9Sstevel@tonic-gate
8297c478bd9Sstevel@tonic-gate h = host_addr;
8307c478bd9Sstevel@tonic-gate d = dev_addr;
8317c478bd9Sstevel@tonic-gate
8327c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
8337c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
8347c478bd9Sstevel@tonic-gate *d++ = ddi_swap32(*h++);
8357c478bd9Sstevel@tonic-gate else
8367c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
8377c478bd9Sstevel@tonic-gate *d = ddi_swap32(*h++);
8387c478bd9Sstevel@tonic-gate }
8397c478bd9Sstevel@tonic-gate
8407c478bd9Sstevel@tonic-gate /*ARGSUSED*/
8417c478bd9Sstevel@tonic-gate 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)8427c478bd9Sstevel@tonic-gate i_ddi_io_swap_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
8437c478bd9Sstevel@tonic-gate uint32_t *dev_addr, size_t repcount, uint_t flags)
8447c478bd9Sstevel@tonic-gate {
8457c478bd9Sstevel@tonic-gate uint32_t *h;
8467c478bd9Sstevel@tonic-gate uintptr_t port;
8477c478bd9Sstevel@tonic-gate
8487c478bd9Sstevel@tonic-gate h = host_addr;
8497c478bd9Sstevel@tonic-gate port = (uintptr_t)dev_addr;
8507c478bd9Sstevel@tonic-gate
8517c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
8527c478bd9Sstevel@tonic-gate for (; repcount; repcount--, port += 4)
8537c478bd9Sstevel@tonic-gate outl(port, ddi_swap32(*h++));
8547c478bd9Sstevel@tonic-gate else
8557c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
8567c478bd9Sstevel@tonic-gate outl(port, ddi_swap32(*h++));
8577c478bd9Sstevel@tonic-gate }
8587c478bd9Sstevel@tonic-gate
8597c478bd9Sstevel@tonic-gate /*ARGSUSED*/
8607c478bd9Sstevel@tonic-gate 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)8617c478bd9Sstevel@tonic-gate i_ddi_vaddr_rep_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
8627c478bd9Sstevel@tonic-gate uint64_t *dev_addr, size_t repcount, uint_t flags)
8637c478bd9Sstevel@tonic-gate {
8647c478bd9Sstevel@tonic-gate uint64_t *h, *d;
8657c478bd9Sstevel@tonic-gate
8667c478bd9Sstevel@tonic-gate h = host_addr;
8677c478bd9Sstevel@tonic-gate d = dev_addr;
8687c478bd9Sstevel@tonic-gate
8697c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
8707c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
8717c478bd9Sstevel@tonic-gate *d++ = *h++;
8727c478bd9Sstevel@tonic-gate else
8737c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
8747c478bd9Sstevel@tonic-gate *d = *h++;
8757c478bd9Sstevel@tonic-gate }
8767c478bd9Sstevel@tonic-gate
8777c478bd9Sstevel@tonic-gate /*ARGSUSED*/
8787c478bd9Sstevel@tonic-gate 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)8797c478bd9Sstevel@tonic-gate i_ddi_vaddr_swap_rep_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
8807c478bd9Sstevel@tonic-gate uint64_t *dev_addr, size_t repcount, uint_t flags)
8817c478bd9Sstevel@tonic-gate {
8827c478bd9Sstevel@tonic-gate uint64_t *h, *d;
8837c478bd9Sstevel@tonic-gate
8847c478bd9Sstevel@tonic-gate h = host_addr;
8857c478bd9Sstevel@tonic-gate d = dev_addr;
8867c478bd9Sstevel@tonic-gate
8877c478bd9Sstevel@tonic-gate if (flags == DDI_DEV_AUTOINCR)
8887c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
8897c478bd9Sstevel@tonic-gate *d++ = ddi_swap64(*h++);
8907c478bd9Sstevel@tonic-gate else
8917c478bd9Sstevel@tonic-gate for (; repcount; repcount--)
8927c478bd9Sstevel@tonic-gate *d = ddi_swap64(*h++);
8937c478bd9Sstevel@tonic-gate }
8947c478bd9Sstevel@tonic-gate
8957c478bd9Sstevel@tonic-gate /*ARGSUSED*/
8967c478bd9Sstevel@tonic-gate uint64_t
i_ddi_io_get64(ddi_acc_impl_t * hdlp,uint64_t * addr)8977c478bd9Sstevel@tonic-gate i_ddi_io_get64(ddi_acc_impl_t *hdlp, uint64_t *addr)
8987c478bd9Sstevel@tonic-gate {
8997c478bd9Sstevel@tonic-gate panic("ddi_get64 from i/o space");
9007c478bd9Sstevel@tonic-gate /*NOTREACHED*/
9017c478bd9Sstevel@tonic-gate return (0);
9027c478bd9Sstevel@tonic-gate }
9037c478bd9Sstevel@tonic-gate
9047c478bd9Sstevel@tonic-gate /*ARGSUSED*/
9057c478bd9Sstevel@tonic-gate void
i_ddi_io_put64(ddi_acc_impl_t * hdlp,uint64_t * host_addr,uint64_t value)9067c478bd9Sstevel@tonic-gate i_ddi_io_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr, uint64_t value)
9077c478bd9Sstevel@tonic-gate {
9087c478bd9Sstevel@tonic-gate panic("ddi_put64 to i/o space");
9097c478bd9Sstevel@tonic-gate /*NOTREACHED*/
9107c478bd9Sstevel@tonic-gate }
9117c478bd9Sstevel@tonic-gate
9127c478bd9Sstevel@tonic-gate void
do_scan(ddi_acc_impl_t * hdlp)913837c1ac4SStephen Hanson do_scan(ddi_acc_impl_t *hdlp)
914837c1ac4SStephen Hanson {
915837c1ac4SStephen Hanson ddi_fm_error_t de;
916837c1ac4SStephen Hanson ndi_err_t *errp = (ndi_err_t *)hdlp->ahi_err;
917837c1ac4SStephen Hanson
918837c1ac4SStephen Hanson bzero(&de, sizeof (ddi_fm_error_t));
919837c1ac4SStephen Hanson de.fme_version = DDI_FME_VERSION;
920837c1ac4SStephen Hanson de.fme_ena = fm_ena_generate(0, FM_ENA_FMT1);
921837c1ac4SStephen Hanson de.fme_flag = DDI_FM_ERR_UNEXPECTED;
922837c1ac4SStephen Hanson
923837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_err_mutexp);
924837c1ac4SStephen Hanson hdlp->ahi_scan(hdlp->ahi_scan_dip, &de);
925837c1ac4SStephen Hanson if (de.fme_status != DDI_FM_OK) {
926837c1ac4SStephen Hanson errp->err_ena = de.fme_ena;
927837c1ac4SStephen Hanson errp->err_expected = de.fme_flag;
928837c1ac4SStephen Hanson errp->err_status = DDI_FM_NONFATAL;
929837c1ac4SStephen Hanson }
930837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_err_mutexp);
931837c1ac4SStephen Hanson }
932837c1ac4SStephen Hanson
933837c1ac4SStephen Hanson /*ARGSUSED*/
934837c1ac4SStephen Hanson uint8_t
i_ddi_prot_vaddr_get8(ddi_acc_impl_t * hdlp,uint8_t * addr)935837c1ac4SStephen Hanson i_ddi_prot_vaddr_get8(ddi_acc_impl_t *hdlp, uint8_t *addr)
936837c1ac4SStephen Hanson {
937837c1ac4SStephen Hanson uint8_t val;
938837c1ac4SStephen Hanson
939837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
940837c1ac4SStephen Hanson val = *addr;
941837c1ac4SStephen Hanson if (val == 0xff)
942837c1ac4SStephen Hanson do_scan(hdlp);
943837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
944837c1ac4SStephen Hanson
945837c1ac4SStephen Hanson return (val);
946837c1ac4SStephen Hanson }
947837c1ac4SStephen Hanson
948837c1ac4SStephen Hanson /*ARGSUSED*/
949837c1ac4SStephen Hanson uint16_t
i_ddi_prot_vaddr_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)950837c1ac4SStephen Hanson i_ddi_prot_vaddr_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
951837c1ac4SStephen Hanson {
952837c1ac4SStephen Hanson uint16_t val;
953837c1ac4SStephen Hanson
954837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
955837c1ac4SStephen Hanson val = *addr;
956837c1ac4SStephen Hanson if (val == 0xffff)
957837c1ac4SStephen Hanson do_scan(hdlp);
958837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
959837c1ac4SStephen Hanson
960837c1ac4SStephen Hanson return (val);
961837c1ac4SStephen Hanson }
962837c1ac4SStephen Hanson
963837c1ac4SStephen Hanson /*ARGSUSED*/
964837c1ac4SStephen Hanson uint32_t
i_ddi_prot_vaddr_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)965837c1ac4SStephen Hanson i_ddi_prot_vaddr_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
966837c1ac4SStephen Hanson {
967837c1ac4SStephen Hanson uint32_t val;
968837c1ac4SStephen Hanson
969837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
970837c1ac4SStephen Hanson val = *addr;
971837c1ac4SStephen Hanson if (val == 0xffffffff)
972837c1ac4SStephen Hanson do_scan(hdlp);
973837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
974837c1ac4SStephen Hanson
975837c1ac4SStephen Hanson return (val);
976837c1ac4SStephen Hanson }
977837c1ac4SStephen Hanson
978837c1ac4SStephen Hanson /*ARGSUSED*/
979837c1ac4SStephen Hanson uint64_t
i_ddi_prot_vaddr_get64(ddi_acc_impl_t * hdlp,uint64_t * addr)980837c1ac4SStephen Hanson i_ddi_prot_vaddr_get64(ddi_acc_impl_t *hdlp, uint64_t *addr)
981837c1ac4SStephen Hanson {
982837c1ac4SStephen Hanson uint64_t val;
983837c1ac4SStephen Hanson
984837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
985837c1ac4SStephen Hanson val = *addr;
986837c1ac4SStephen Hanson if (val == 0xffffffffffffffff)
987837c1ac4SStephen Hanson do_scan(hdlp);
988837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
989837c1ac4SStephen Hanson
990837c1ac4SStephen Hanson return (val);
991837c1ac4SStephen Hanson }
992837c1ac4SStephen Hanson
993837c1ac4SStephen Hanson /*ARGSUSED*/
994837c1ac4SStephen Hanson uint8_t
i_ddi_prot_io_get8(ddi_acc_impl_t * hdlp,uint8_t * addr)995837c1ac4SStephen Hanson i_ddi_prot_io_get8(ddi_acc_impl_t *hdlp, uint8_t *addr)
996837c1ac4SStephen Hanson {
997837c1ac4SStephen Hanson uint8_t val;
998837c1ac4SStephen Hanson
999837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1000837c1ac4SStephen Hanson val = inb((uintptr_t)addr);
1001837c1ac4SStephen Hanson if (val == 0xff)
1002837c1ac4SStephen Hanson do_scan(hdlp);
1003837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1004837c1ac4SStephen Hanson
1005837c1ac4SStephen Hanson return (val);
1006837c1ac4SStephen Hanson }
1007837c1ac4SStephen Hanson
1008837c1ac4SStephen Hanson /*ARGSUSED*/
1009837c1ac4SStephen Hanson uint16_t
i_ddi_prot_io_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)1010837c1ac4SStephen Hanson i_ddi_prot_io_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
1011837c1ac4SStephen Hanson {
1012837c1ac4SStephen Hanson uint16_t val;
1013837c1ac4SStephen Hanson
1014837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1015837c1ac4SStephen Hanson val = inw((uintptr_t)addr);
1016837c1ac4SStephen Hanson if (val == 0xffff)
1017837c1ac4SStephen Hanson do_scan(hdlp);
1018837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1019837c1ac4SStephen Hanson
1020837c1ac4SStephen Hanson return (val);
1021837c1ac4SStephen Hanson }
1022837c1ac4SStephen Hanson
1023837c1ac4SStephen Hanson /*ARGSUSED*/
1024837c1ac4SStephen Hanson uint32_t
i_ddi_prot_io_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)1025837c1ac4SStephen Hanson i_ddi_prot_io_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
1026837c1ac4SStephen Hanson {
1027837c1ac4SStephen Hanson uint32_t val;
1028837c1ac4SStephen Hanson
1029837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1030837c1ac4SStephen Hanson val = inl((uintptr_t)addr);
1031837c1ac4SStephen Hanson if (val == 0xffffffff)
1032837c1ac4SStephen Hanson do_scan(hdlp);
1033837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1034837c1ac4SStephen Hanson
1035837c1ac4SStephen Hanson return (val);
1036837c1ac4SStephen Hanson }
1037837c1ac4SStephen Hanson
1038837c1ac4SStephen Hanson /*ARGSUSED*/
1039837c1ac4SStephen Hanson uint16_t
i_ddi_prot_vaddr_swap_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)1040837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
1041837c1ac4SStephen Hanson {
1042837c1ac4SStephen Hanson uint16_t val;
1043837c1ac4SStephen Hanson
1044837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1045837c1ac4SStephen Hanson val = ddi_swap16(*addr);
1046837c1ac4SStephen Hanson if (val == 0xffff)
1047837c1ac4SStephen Hanson do_scan(hdlp);
1048837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1049837c1ac4SStephen Hanson
1050837c1ac4SStephen Hanson return (val);
1051837c1ac4SStephen Hanson }
1052837c1ac4SStephen Hanson
1053837c1ac4SStephen Hanson /*ARGSUSED*/
1054837c1ac4SStephen Hanson uint16_t
i_ddi_prot_io_swap_get16(ddi_acc_impl_t * hdlp,uint16_t * addr)1055837c1ac4SStephen Hanson i_ddi_prot_io_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr)
1056837c1ac4SStephen Hanson {
1057837c1ac4SStephen Hanson uint16_t val;
1058837c1ac4SStephen Hanson
1059837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1060837c1ac4SStephen Hanson val = ddi_swap16(inw((uintptr_t)addr));
1061837c1ac4SStephen Hanson if (val == 0xffff)
1062837c1ac4SStephen Hanson do_scan(hdlp);
1063837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1064837c1ac4SStephen Hanson
1065837c1ac4SStephen Hanson return (val);
1066837c1ac4SStephen Hanson }
1067837c1ac4SStephen Hanson
1068837c1ac4SStephen Hanson /*ARGSUSED*/
1069837c1ac4SStephen Hanson uint32_t
i_ddi_prot_vaddr_swap_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)1070837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
1071837c1ac4SStephen Hanson {
1072837c1ac4SStephen Hanson uint32_t val;
1073837c1ac4SStephen Hanson
1074837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1075837c1ac4SStephen Hanson val = ddi_swap32(*addr);
1076837c1ac4SStephen Hanson if (val == 0xffffffff)
1077837c1ac4SStephen Hanson do_scan(hdlp);
1078837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1079837c1ac4SStephen Hanson
1080837c1ac4SStephen Hanson return (val);
1081837c1ac4SStephen Hanson }
1082837c1ac4SStephen Hanson
1083837c1ac4SStephen Hanson /*ARGSUSED*/
1084837c1ac4SStephen Hanson uint32_t
i_ddi_prot_io_swap_get32(ddi_acc_impl_t * hdlp,uint32_t * addr)1085837c1ac4SStephen Hanson i_ddi_prot_io_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr)
1086837c1ac4SStephen Hanson {
1087837c1ac4SStephen Hanson uint32_t val;
1088837c1ac4SStephen Hanson
1089837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1090837c1ac4SStephen Hanson val = ddi_swap32(inl((uintptr_t)addr));
1091837c1ac4SStephen Hanson if (val == 0xffffffff)
1092837c1ac4SStephen Hanson do_scan(hdlp);
1093837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1094837c1ac4SStephen Hanson
1095837c1ac4SStephen Hanson return (val);
1096837c1ac4SStephen Hanson }
1097837c1ac4SStephen Hanson
1098837c1ac4SStephen Hanson /*ARGSUSED*/
1099837c1ac4SStephen Hanson uint64_t
i_ddi_prot_vaddr_swap_get64(ddi_acc_impl_t * hdlp,uint64_t * addr)1100837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_get64(ddi_acc_impl_t *hdlp, uint64_t *addr)
1101837c1ac4SStephen Hanson {
1102837c1ac4SStephen Hanson uint64_t val;
1103837c1ac4SStephen Hanson
1104837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1105837c1ac4SStephen Hanson val = ddi_swap64(*addr);
1106837c1ac4SStephen Hanson if (val == 0xffffffffffffffff)
1107837c1ac4SStephen Hanson do_scan(hdlp);
1108837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1109837c1ac4SStephen Hanson
1110837c1ac4SStephen Hanson return (val);
1111837c1ac4SStephen Hanson }
1112837c1ac4SStephen Hanson
1113837c1ac4SStephen Hanson /*ARGSUSED*/
1114837c1ac4SStephen Hanson void
i_ddi_prot_vaddr_put8(ddi_acc_impl_t * hdlp,uint8_t * addr,uint8_t value)1115837c1ac4SStephen Hanson i_ddi_prot_vaddr_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value)
1116837c1ac4SStephen Hanson {
1117837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1118837c1ac4SStephen Hanson *addr = value;
1119837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1120837c1ac4SStephen Hanson }
1121837c1ac4SStephen Hanson
1122837c1ac4SStephen Hanson /*ARGSUSED*/
1123837c1ac4SStephen Hanson void
i_ddi_prot_io_put8(ddi_acc_impl_t * hdlp,uint8_t * addr,uint8_t value)1124837c1ac4SStephen Hanson i_ddi_prot_io_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value)
1125837c1ac4SStephen Hanson {
1126837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1127837c1ac4SStephen Hanson outb((uintptr_t)addr, value);
1128837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1129837c1ac4SStephen Hanson }
1130837c1ac4SStephen Hanson
1131837c1ac4SStephen Hanson /*ARGSUSED*/
1132837c1ac4SStephen Hanson void
i_ddi_prot_vaddr_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)1133837c1ac4SStephen Hanson i_ddi_prot_vaddr_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value)
1134837c1ac4SStephen Hanson {
1135837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1136837c1ac4SStephen Hanson *addr = value;
1137837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1138837c1ac4SStephen Hanson }
1139837c1ac4SStephen Hanson
1140837c1ac4SStephen Hanson /*ARGSUSED*/
1141837c1ac4SStephen Hanson void
i_ddi_prot_io_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)1142837c1ac4SStephen Hanson i_ddi_prot_io_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value)
1143837c1ac4SStephen Hanson {
1144837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1145837c1ac4SStephen Hanson outw((uintptr_t)addr, value);
1146837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1147837c1ac4SStephen Hanson }
1148837c1ac4SStephen Hanson
1149837c1ac4SStephen Hanson /*ARGSUSED*/
1150837c1ac4SStephen Hanson void
i_ddi_prot_vaddr_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)1151837c1ac4SStephen Hanson i_ddi_prot_vaddr_put32(ddi_acc_impl_t *hdlp, uint32_t *addr,
1152837c1ac4SStephen Hanson uint32_t value)
1153837c1ac4SStephen Hanson {
1154837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1155837c1ac4SStephen Hanson *addr = value;
1156837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1157837c1ac4SStephen Hanson }
1158837c1ac4SStephen Hanson
1159837c1ac4SStephen Hanson /*ARGSUSED*/
1160837c1ac4SStephen Hanson void
i_ddi_prot_io_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)1161837c1ac4SStephen Hanson i_ddi_prot_io_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value)
1162837c1ac4SStephen Hanson {
1163837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1164837c1ac4SStephen Hanson outl((uintptr_t)addr, value);
1165837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1166837c1ac4SStephen Hanson }
1167837c1ac4SStephen Hanson
1168837c1ac4SStephen Hanson /*ARGSUSED*/
1169837c1ac4SStephen Hanson void
i_ddi_prot_vaddr_put64(ddi_acc_impl_t * hdlp,uint64_t * addr,uint64_t value)1170837c1ac4SStephen Hanson i_ddi_prot_vaddr_put64(ddi_acc_impl_t *hdlp, uint64_t *addr,
1171837c1ac4SStephen Hanson uint64_t value)
1172837c1ac4SStephen Hanson {
1173837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1174837c1ac4SStephen Hanson *addr = value;
1175837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1176837c1ac4SStephen Hanson }
1177837c1ac4SStephen Hanson
1178837c1ac4SStephen Hanson /*ARGSUSED*/
1179837c1ac4SStephen Hanson void
i_ddi_prot_vaddr_swap_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)1180837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr,
1181837c1ac4SStephen Hanson uint16_t value)
1182837c1ac4SStephen Hanson {
1183837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1184837c1ac4SStephen Hanson *addr = ddi_swap16(value);
1185837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1186837c1ac4SStephen Hanson }
1187837c1ac4SStephen Hanson
1188837c1ac4SStephen Hanson /*ARGSUSED*/
1189837c1ac4SStephen Hanson void
i_ddi_prot_io_swap_put16(ddi_acc_impl_t * hdlp,uint16_t * addr,uint16_t value)1190837c1ac4SStephen Hanson i_ddi_prot_io_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value)
1191837c1ac4SStephen Hanson {
1192837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1193837c1ac4SStephen Hanson outw((uintptr_t)addr, ddi_swap16(value));
1194837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1195837c1ac4SStephen Hanson }
1196837c1ac4SStephen Hanson
1197837c1ac4SStephen Hanson /*ARGSUSED*/
1198837c1ac4SStephen Hanson void
i_ddi_prot_vaddr_swap_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)1199837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr,
1200837c1ac4SStephen Hanson uint32_t value)
1201837c1ac4SStephen Hanson {
1202837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1203837c1ac4SStephen Hanson *addr = ddi_swap32(value);
1204837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1205837c1ac4SStephen Hanson }
1206837c1ac4SStephen Hanson
1207837c1ac4SStephen Hanson /*ARGSUSED*/
1208837c1ac4SStephen Hanson void
i_ddi_prot_io_swap_put32(ddi_acc_impl_t * hdlp,uint32_t * addr,uint32_t value)1209837c1ac4SStephen Hanson i_ddi_prot_io_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value)
1210837c1ac4SStephen Hanson {
1211837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1212837c1ac4SStephen Hanson outl((uintptr_t)addr, ddi_swap32(value));
1213837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1214837c1ac4SStephen Hanson }
1215837c1ac4SStephen Hanson
1216837c1ac4SStephen Hanson /*ARGSUSED*/
1217837c1ac4SStephen Hanson void
i_ddi_prot_vaddr_swap_put64(ddi_acc_impl_t * hdlp,uint64_t * addr,uint64_t value)1218837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_put64(ddi_acc_impl_t *hdlp, uint64_t *addr,
1219837c1ac4SStephen Hanson uint64_t value)
1220837c1ac4SStephen Hanson {
1221837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1222837c1ac4SStephen Hanson *addr = ddi_swap64(value);
1223837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1224837c1ac4SStephen Hanson }
1225837c1ac4SStephen Hanson
1226837c1ac4SStephen Hanson /*ARGSUSED*/
1227837c1ac4SStephen Hanson 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)1228837c1ac4SStephen Hanson i_ddi_prot_io_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
1229837c1ac4SStephen Hanson uint8_t *dev_addr, size_t repcount, uint_t flags)
1230837c1ac4SStephen Hanson {
1231837c1ac4SStephen Hanson int fail = 0;
1232837c1ac4SStephen Hanson uint8_t *h;
1233837c1ac4SStephen Hanson uintptr_t port;
1234837c1ac4SStephen Hanson
1235837c1ac4SStephen Hanson h = host_addr;
1236837c1ac4SStephen Hanson port = (uintptr_t)dev_addr;
1237837c1ac4SStephen Hanson
1238837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1239837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1240837c1ac4SStephen Hanson for (; repcount; repcount--, port++)
1241837c1ac4SStephen Hanson if ((*h++ = inb(port)) == 0xff)
1242837c1ac4SStephen Hanson fail = 1;
1243837c1ac4SStephen Hanson } else {
1244837c1ac4SStephen Hanson for (; repcount; repcount--)
1245837c1ac4SStephen Hanson if ((*h++ = inb(port)) == 0xff)
1246837c1ac4SStephen Hanson fail = 1;
1247837c1ac4SStephen Hanson }
1248837c1ac4SStephen Hanson if (fail == 1)
1249837c1ac4SStephen Hanson do_scan(hdlp);
1250837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1251837c1ac4SStephen Hanson }
1252837c1ac4SStephen Hanson
1253837c1ac4SStephen Hanson /*ARGSUSED*/
1254837c1ac4SStephen Hanson 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)1255837c1ac4SStephen Hanson i_ddi_prot_io_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1256837c1ac4SStephen Hanson uint16_t *dev_addr, size_t repcount, uint_t flags)
1257837c1ac4SStephen Hanson {
1258837c1ac4SStephen Hanson int fail = 0;
1259837c1ac4SStephen Hanson uint16_t *h;
1260837c1ac4SStephen Hanson uintptr_t port;
1261837c1ac4SStephen Hanson
1262837c1ac4SStephen Hanson h = host_addr;
1263837c1ac4SStephen Hanson port = (uintptr_t)dev_addr;
1264837c1ac4SStephen Hanson
1265837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1266837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1267837c1ac4SStephen Hanson for (; repcount; repcount--, port += 2)
1268837c1ac4SStephen Hanson if ((*h++ = inw(port)) == 0xffff)
1269837c1ac4SStephen Hanson fail = 1;
1270837c1ac4SStephen Hanson } else {
1271837c1ac4SStephen Hanson for (; repcount; repcount--)
1272837c1ac4SStephen Hanson if ((*h++ = inw(port)) == 0xffff)
1273837c1ac4SStephen Hanson fail = 1;
1274837c1ac4SStephen Hanson }
1275837c1ac4SStephen Hanson if (fail == 1)
1276837c1ac4SStephen Hanson do_scan(hdlp);
1277837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1278837c1ac4SStephen Hanson }
1279837c1ac4SStephen Hanson
1280837c1ac4SStephen Hanson /*ARGSUSED*/
1281837c1ac4SStephen Hanson 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)1282837c1ac4SStephen Hanson i_ddi_prot_io_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1283837c1ac4SStephen Hanson uint32_t *dev_addr, size_t repcount, uint_t flags)
1284837c1ac4SStephen Hanson {
1285837c1ac4SStephen Hanson int fail = 0;
1286837c1ac4SStephen Hanson uint32_t *h;
1287837c1ac4SStephen Hanson uintptr_t port;
1288837c1ac4SStephen Hanson
1289837c1ac4SStephen Hanson h = host_addr;
1290837c1ac4SStephen Hanson port = (uintptr_t)dev_addr;
1291837c1ac4SStephen Hanson
1292837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1293837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1294837c1ac4SStephen Hanson for (; repcount; repcount--, port += 4)
1295837c1ac4SStephen Hanson if ((*h++ = inl(port)) == 0xffffffff)
1296837c1ac4SStephen Hanson fail = 1;
1297837c1ac4SStephen Hanson } else {
1298837c1ac4SStephen Hanson for (; repcount; repcount--)
1299837c1ac4SStephen Hanson if ((*h++ = inl(port)) == 0xffffffff)
1300837c1ac4SStephen Hanson fail = 1;
1301837c1ac4SStephen Hanson }
1302837c1ac4SStephen Hanson if (fail == 1)
1303837c1ac4SStephen Hanson do_scan(hdlp);
1304837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1305837c1ac4SStephen Hanson }
1306837c1ac4SStephen Hanson
1307837c1ac4SStephen Hanson /*ARGSUSED*/
1308837c1ac4SStephen Hanson 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)1309837c1ac4SStephen Hanson i_ddi_prot_vaddr_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
1310837c1ac4SStephen Hanson uint8_t *dev_addr, size_t repcount, uint_t flags)
1311837c1ac4SStephen Hanson {
1312837c1ac4SStephen Hanson int fail = 0;
1313837c1ac4SStephen Hanson uint8_t *h, *d;
1314837c1ac4SStephen Hanson
1315837c1ac4SStephen Hanson h = host_addr;
1316837c1ac4SStephen Hanson d = dev_addr;
1317837c1ac4SStephen Hanson
1318837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1319837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1320837c1ac4SStephen Hanson for (; repcount; repcount--)
1321837c1ac4SStephen Hanson if ((*h++ = *d++) == 0xff)
1322837c1ac4SStephen Hanson fail = 1;
1323837c1ac4SStephen Hanson } else {
1324837c1ac4SStephen Hanson for (; repcount; repcount--)
1325837c1ac4SStephen Hanson if ((*h++ = *d) == 0xff)
1326837c1ac4SStephen Hanson fail = 1;
1327837c1ac4SStephen Hanson }
1328837c1ac4SStephen Hanson if (fail == 1)
1329837c1ac4SStephen Hanson do_scan(hdlp);
1330837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1331837c1ac4SStephen Hanson }
1332837c1ac4SStephen Hanson
1333837c1ac4SStephen Hanson /*ARGSUSED*/
1334837c1ac4SStephen Hanson 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)1335837c1ac4SStephen Hanson i_ddi_prot_vaddr_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1336837c1ac4SStephen Hanson uint16_t *dev_addr, size_t repcount, uint_t flags)
1337837c1ac4SStephen Hanson {
1338837c1ac4SStephen Hanson int fail = 0;
1339837c1ac4SStephen Hanson uint16_t *h, *d;
1340837c1ac4SStephen Hanson
1341837c1ac4SStephen Hanson h = host_addr;
1342837c1ac4SStephen Hanson d = dev_addr;
1343837c1ac4SStephen Hanson
1344837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1345837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1346837c1ac4SStephen Hanson for (; repcount; repcount--)
1347837c1ac4SStephen Hanson if ((*h++ = *d++) == 0xffff)
1348837c1ac4SStephen Hanson fail = 1;
1349837c1ac4SStephen Hanson } else {
1350837c1ac4SStephen Hanson for (; repcount; repcount--)
1351837c1ac4SStephen Hanson if ((*h++ = *d) == 0xffff)
1352837c1ac4SStephen Hanson fail = 1;
1353837c1ac4SStephen Hanson }
1354837c1ac4SStephen Hanson if (fail == 1)
1355837c1ac4SStephen Hanson do_scan(hdlp);
1356837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1357837c1ac4SStephen Hanson }
1358837c1ac4SStephen Hanson
1359837c1ac4SStephen Hanson /*ARGSUSED*/
1360837c1ac4SStephen Hanson 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)1361837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1362837c1ac4SStephen Hanson uint16_t *dev_addr, size_t repcount, uint_t flags)
1363837c1ac4SStephen Hanson {
1364837c1ac4SStephen Hanson int fail = 0;
1365837c1ac4SStephen Hanson uint16_t *h, *d;
1366837c1ac4SStephen Hanson
1367837c1ac4SStephen Hanson h = host_addr;
1368837c1ac4SStephen Hanson d = dev_addr;
1369837c1ac4SStephen Hanson
1370837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1371837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1372837c1ac4SStephen Hanson for (; repcount; repcount--)
1373837c1ac4SStephen Hanson if ((*h++ = ddi_swap16(*d++)) == 0xffff)
1374837c1ac4SStephen Hanson fail = 1;
1375837c1ac4SStephen Hanson } else {
1376837c1ac4SStephen Hanson for (; repcount; repcount--)
1377837c1ac4SStephen Hanson if ((*h++ = ddi_swap16(*d)) == 0xffff)
1378837c1ac4SStephen Hanson fail = 1;
1379837c1ac4SStephen Hanson }
1380837c1ac4SStephen Hanson if (fail == 1)
1381837c1ac4SStephen Hanson do_scan(hdlp);
1382837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1383837c1ac4SStephen Hanson }
1384837c1ac4SStephen Hanson
1385837c1ac4SStephen Hanson /*ARGSUSED*/
1386837c1ac4SStephen Hanson 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)1387837c1ac4SStephen Hanson i_ddi_prot_io_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1388837c1ac4SStephen Hanson uint16_t *dev_addr, size_t repcount, uint_t flags)
1389837c1ac4SStephen Hanson {
1390837c1ac4SStephen Hanson int fail = 0;
1391837c1ac4SStephen Hanson uint16_t *h;
1392837c1ac4SStephen Hanson uintptr_t port;
1393837c1ac4SStephen Hanson
1394837c1ac4SStephen Hanson h = host_addr;
1395837c1ac4SStephen Hanson port = (uintptr_t)dev_addr;
1396837c1ac4SStephen Hanson
1397837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1398837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1399837c1ac4SStephen Hanson for (; repcount; repcount--, port += 2)
1400837c1ac4SStephen Hanson if ((*h++ = ddi_swap16(inw(port))) == 0xffff)
1401837c1ac4SStephen Hanson fail = 1;
1402837c1ac4SStephen Hanson } else {
1403837c1ac4SStephen Hanson for (; repcount; repcount--)
1404837c1ac4SStephen Hanson if ((*h++ = ddi_swap16(inw(port))) == 0xffff)
1405837c1ac4SStephen Hanson fail = 1;
1406837c1ac4SStephen Hanson }
1407837c1ac4SStephen Hanson if (fail == 1)
1408837c1ac4SStephen Hanson do_scan(hdlp);
1409837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1410837c1ac4SStephen Hanson }
1411837c1ac4SStephen Hanson
1412837c1ac4SStephen Hanson /*ARGSUSED*/
1413837c1ac4SStephen Hanson 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)1414837c1ac4SStephen Hanson i_ddi_prot_vaddr_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1415837c1ac4SStephen Hanson uint32_t *dev_addr, size_t repcount, uint_t flags)
1416837c1ac4SStephen Hanson {
1417837c1ac4SStephen Hanson int fail = 0;
1418837c1ac4SStephen Hanson uint32_t *h, *d;
1419837c1ac4SStephen Hanson
1420837c1ac4SStephen Hanson h = host_addr;
1421837c1ac4SStephen Hanson d = dev_addr;
1422837c1ac4SStephen Hanson
1423837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1424837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1425837c1ac4SStephen Hanson for (; repcount; repcount--)
1426837c1ac4SStephen Hanson if ((*h++ = *d++) == 0xffffffff)
1427837c1ac4SStephen Hanson fail = 1;
1428837c1ac4SStephen Hanson } else {
1429837c1ac4SStephen Hanson for (; repcount; repcount--)
1430837c1ac4SStephen Hanson if ((*h++ = *d) == 0xffffffff)
1431837c1ac4SStephen Hanson fail = 1;
1432837c1ac4SStephen Hanson }
1433837c1ac4SStephen Hanson if (fail == 1)
1434837c1ac4SStephen Hanson do_scan(hdlp);
1435837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1436837c1ac4SStephen Hanson }
1437837c1ac4SStephen Hanson
1438837c1ac4SStephen Hanson /*ARGSUSED*/
1439837c1ac4SStephen Hanson 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)1440837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1441837c1ac4SStephen Hanson uint32_t *dev_addr, size_t repcount, uint_t flags)
1442837c1ac4SStephen Hanson {
1443837c1ac4SStephen Hanson int fail = 0;
1444837c1ac4SStephen Hanson uint32_t *h, *d;
1445837c1ac4SStephen Hanson
1446837c1ac4SStephen Hanson h = host_addr;
1447837c1ac4SStephen Hanson d = dev_addr;
1448837c1ac4SStephen Hanson
1449837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1450837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1451837c1ac4SStephen Hanson for (; repcount; repcount--)
1452837c1ac4SStephen Hanson if ((*h++ = ddi_swap32(*d++)) == 0xffffffff)
1453837c1ac4SStephen Hanson fail = 1;
1454837c1ac4SStephen Hanson } else {
1455837c1ac4SStephen Hanson for (; repcount; repcount--)
1456837c1ac4SStephen Hanson if ((*h++ = ddi_swap32(*d)) == 0xffffffff)
1457837c1ac4SStephen Hanson fail = 1;
1458837c1ac4SStephen Hanson }
1459837c1ac4SStephen Hanson if (fail == 1)
1460837c1ac4SStephen Hanson do_scan(hdlp);
1461837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1462837c1ac4SStephen Hanson }
1463837c1ac4SStephen Hanson
1464837c1ac4SStephen Hanson /*ARGSUSED*/
1465837c1ac4SStephen Hanson 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)1466837c1ac4SStephen Hanson i_ddi_prot_io_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1467837c1ac4SStephen Hanson uint32_t *dev_addr, size_t repcount, uint_t flags)
1468837c1ac4SStephen Hanson {
1469837c1ac4SStephen Hanson int fail = 0;
1470837c1ac4SStephen Hanson uint32_t *h;
1471837c1ac4SStephen Hanson uintptr_t port;
1472837c1ac4SStephen Hanson
1473837c1ac4SStephen Hanson h = host_addr;
1474837c1ac4SStephen Hanson port = (uintptr_t)dev_addr;
1475837c1ac4SStephen Hanson
1476837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1477837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1478837c1ac4SStephen Hanson for (; repcount; repcount--, port += 4)
1479837c1ac4SStephen Hanson if ((*h++ = ddi_swap32(inl(port))) == 0xffffffff)
1480837c1ac4SStephen Hanson fail = 1;
1481837c1ac4SStephen Hanson } else {
1482837c1ac4SStephen Hanson for (; repcount; repcount--)
1483837c1ac4SStephen Hanson if ((*h++ = ddi_swap32(inl(port))) == 0xffffffff)
1484837c1ac4SStephen Hanson fail = 1;
1485837c1ac4SStephen Hanson }
1486837c1ac4SStephen Hanson if (fail == 1)
1487837c1ac4SStephen Hanson do_scan(hdlp);
1488837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1489837c1ac4SStephen Hanson }
1490837c1ac4SStephen Hanson
1491837c1ac4SStephen Hanson /*ARGSUSED*/
1492837c1ac4SStephen Hanson 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)1493837c1ac4SStephen Hanson i_ddi_prot_vaddr_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
1494837c1ac4SStephen Hanson uint64_t *dev_addr, size_t repcount, uint_t flags)
1495837c1ac4SStephen Hanson {
1496837c1ac4SStephen Hanson int fail = 0;
1497837c1ac4SStephen Hanson uint64_t *h, *d;
1498837c1ac4SStephen Hanson
1499837c1ac4SStephen Hanson h = host_addr;
1500837c1ac4SStephen Hanson d = dev_addr;
1501837c1ac4SStephen Hanson
1502837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1503837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1504837c1ac4SStephen Hanson for (; repcount; repcount--)
1505837c1ac4SStephen Hanson if ((*h++ = *d++) == 0xffffffffffffffff)
1506837c1ac4SStephen Hanson fail = 1;
1507837c1ac4SStephen Hanson } else {
1508837c1ac4SStephen Hanson for (; repcount; repcount--)
1509837c1ac4SStephen Hanson if ((*h++ = *d) == 0xffffffffffffffff)
1510837c1ac4SStephen Hanson fail = 1;
1511837c1ac4SStephen Hanson }
1512837c1ac4SStephen Hanson if (fail == 1)
1513837c1ac4SStephen Hanson do_scan(hdlp);
1514837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1515837c1ac4SStephen Hanson }
1516837c1ac4SStephen Hanson
1517837c1ac4SStephen Hanson /*ARGSUSED*/
1518837c1ac4SStephen Hanson 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)1519837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
1520837c1ac4SStephen Hanson uint64_t *dev_addr, size_t repcount, uint_t flags)
1521837c1ac4SStephen Hanson {
1522837c1ac4SStephen Hanson int fail = 0;
1523837c1ac4SStephen Hanson uint64_t *h, *d;
1524837c1ac4SStephen Hanson
1525837c1ac4SStephen Hanson h = host_addr;
1526837c1ac4SStephen Hanson d = dev_addr;
1527837c1ac4SStephen Hanson
1528837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1529837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR) {
1530837c1ac4SStephen Hanson for (; repcount; repcount--)
1531837c1ac4SStephen Hanson if ((*h++ = ddi_swap64(*d++)) == 0xffffffffffffffff)
1532837c1ac4SStephen Hanson fail = 1;
1533837c1ac4SStephen Hanson } else {
1534837c1ac4SStephen Hanson for (; repcount; repcount--)
1535837c1ac4SStephen Hanson if ((*h++ = ddi_swap64(*d)) == 0xffffffffffffffff)
1536837c1ac4SStephen Hanson fail = 1;
1537837c1ac4SStephen Hanson }
1538837c1ac4SStephen Hanson if (fail == 1)
1539837c1ac4SStephen Hanson do_scan(hdlp);
1540837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1541837c1ac4SStephen Hanson }
1542837c1ac4SStephen Hanson
1543837c1ac4SStephen Hanson /*ARGSUSED*/
1544837c1ac4SStephen Hanson 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)1545837c1ac4SStephen Hanson i_ddi_prot_vaddr_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
1546837c1ac4SStephen Hanson uint8_t *dev_addr, size_t repcount, uint_t flags)
1547837c1ac4SStephen Hanson {
1548837c1ac4SStephen Hanson uint8_t *h, *d;
1549837c1ac4SStephen Hanson
1550837c1ac4SStephen Hanson h = host_addr;
1551837c1ac4SStephen Hanson d = dev_addr;
1552837c1ac4SStephen Hanson
1553837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1554837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1555837c1ac4SStephen Hanson for (; repcount; repcount--)
1556837c1ac4SStephen Hanson *d++ = *h++;
1557837c1ac4SStephen Hanson else
1558837c1ac4SStephen Hanson for (; repcount; repcount--)
1559837c1ac4SStephen Hanson *d = *h++;
1560837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1561837c1ac4SStephen Hanson }
1562837c1ac4SStephen Hanson
1563837c1ac4SStephen Hanson /*ARGSUSED*/
1564837c1ac4SStephen Hanson 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)1565837c1ac4SStephen Hanson i_ddi_prot_io_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr,
1566837c1ac4SStephen Hanson uint8_t *dev_addr, size_t repcount, uint_t flags)
1567837c1ac4SStephen Hanson {
1568837c1ac4SStephen Hanson uint8_t *h;
1569837c1ac4SStephen Hanson uintptr_t port;
1570837c1ac4SStephen Hanson
1571837c1ac4SStephen Hanson h = host_addr;
1572837c1ac4SStephen Hanson port = (uintptr_t)dev_addr;
1573837c1ac4SStephen Hanson
1574837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1575837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1576837c1ac4SStephen Hanson for (; repcount; repcount--, port++)
1577837c1ac4SStephen Hanson outb(port, *h++);
1578837c1ac4SStephen Hanson else
1579837c1ac4SStephen Hanson for (; repcount; repcount--)
1580837c1ac4SStephen Hanson outb(port, *h++);
1581837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1582837c1ac4SStephen Hanson }
1583837c1ac4SStephen Hanson
1584837c1ac4SStephen Hanson /*ARGSUSED*/
1585837c1ac4SStephen Hanson 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)1586837c1ac4SStephen Hanson i_ddi_prot_vaddr_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1587837c1ac4SStephen Hanson uint16_t *dev_addr, size_t repcount, uint_t flags)
1588837c1ac4SStephen Hanson {
1589837c1ac4SStephen Hanson uint16_t *h, *d;
1590837c1ac4SStephen Hanson
1591837c1ac4SStephen Hanson h = host_addr;
1592837c1ac4SStephen Hanson d = dev_addr;
1593837c1ac4SStephen Hanson
1594837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1595837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1596837c1ac4SStephen Hanson for (; repcount; repcount--)
1597837c1ac4SStephen Hanson *d++ = *h++;
1598837c1ac4SStephen Hanson else
1599837c1ac4SStephen Hanson for (; repcount; repcount--)
1600837c1ac4SStephen Hanson *d = *h++;
1601837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1602837c1ac4SStephen Hanson }
1603837c1ac4SStephen Hanson
1604837c1ac4SStephen Hanson /*ARGSUSED*/
1605837c1ac4SStephen Hanson 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)1606837c1ac4SStephen Hanson i_ddi_prot_io_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1607837c1ac4SStephen Hanson uint16_t *dev_addr, size_t repcount, uint_t flags)
1608837c1ac4SStephen Hanson {
1609837c1ac4SStephen Hanson uint16_t *h;
1610837c1ac4SStephen Hanson uintptr_t port;
1611837c1ac4SStephen Hanson
1612837c1ac4SStephen Hanson h = host_addr;
1613837c1ac4SStephen Hanson port = (uintptr_t)dev_addr;
1614837c1ac4SStephen Hanson
1615837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1616837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1617837c1ac4SStephen Hanson for (; repcount; repcount--, port += 2)
1618837c1ac4SStephen Hanson outw(port, *h++);
1619837c1ac4SStephen Hanson else
1620837c1ac4SStephen Hanson for (; repcount; repcount--)
1621837c1ac4SStephen Hanson outw(port, *h++);
1622837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1623837c1ac4SStephen Hanson }
1624837c1ac4SStephen Hanson
1625837c1ac4SStephen Hanson /*ARGSUSED*/
1626837c1ac4SStephen Hanson 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)1627837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1628837c1ac4SStephen Hanson uint16_t *dev_addr, size_t repcount, uint_t flags)
1629837c1ac4SStephen Hanson {
1630837c1ac4SStephen Hanson uint16_t *h, *d;
1631837c1ac4SStephen Hanson
1632837c1ac4SStephen Hanson h = host_addr;
1633837c1ac4SStephen Hanson d = dev_addr;
1634837c1ac4SStephen Hanson
1635837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1636837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1637837c1ac4SStephen Hanson for (; repcount; repcount--)
1638837c1ac4SStephen Hanson *d++ = ddi_swap16(*h++);
1639837c1ac4SStephen Hanson else
1640837c1ac4SStephen Hanson for (; repcount; repcount--)
1641837c1ac4SStephen Hanson *d = ddi_swap16(*h++);
1642837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1643837c1ac4SStephen Hanson }
1644837c1ac4SStephen Hanson
1645837c1ac4SStephen Hanson /*ARGSUSED*/
1646837c1ac4SStephen Hanson 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)1647837c1ac4SStephen Hanson i_ddi_prot_io_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr,
1648837c1ac4SStephen Hanson uint16_t *dev_addr, size_t repcount, uint_t flags)
1649837c1ac4SStephen Hanson {
1650837c1ac4SStephen Hanson uint16_t *h;
1651837c1ac4SStephen Hanson uintptr_t port;
1652837c1ac4SStephen Hanson
1653837c1ac4SStephen Hanson h = host_addr;
1654837c1ac4SStephen Hanson port = (uintptr_t)dev_addr;
1655837c1ac4SStephen Hanson
1656837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1657837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1658837c1ac4SStephen Hanson for (; repcount; repcount--, port += 2)
1659837c1ac4SStephen Hanson outw(port, ddi_swap16(*h++));
1660837c1ac4SStephen Hanson else
1661837c1ac4SStephen Hanson for (; repcount; repcount--)
1662837c1ac4SStephen Hanson outw(port, ddi_swap16(*h++));
1663837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1664837c1ac4SStephen Hanson }
1665837c1ac4SStephen Hanson
1666837c1ac4SStephen Hanson /*ARGSUSED*/
1667837c1ac4SStephen Hanson 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)1668837c1ac4SStephen Hanson i_ddi_prot_vaddr_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1669837c1ac4SStephen Hanson uint32_t *dev_addr, size_t repcount, uint_t flags)
1670837c1ac4SStephen Hanson {
1671837c1ac4SStephen Hanson uint32_t *h, *d;
1672837c1ac4SStephen Hanson
1673837c1ac4SStephen Hanson h = host_addr;
1674837c1ac4SStephen Hanson d = dev_addr;
1675837c1ac4SStephen Hanson
1676837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1677837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1678837c1ac4SStephen Hanson for (; repcount; repcount--)
1679837c1ac4SStephen Hanson *d++ = *h++;
1680837c1ac4SStephen Hanson else
1681837c1ac4SStephen Hanson for (; repcount; repcount--)
1682837c1ac4SStephen Hanson *d = *h++;
1683837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1684837c1ac4SStephen Hanson }
1685837c1ac4SStephen Hanson
1686837c1ac4SStephen Hanson /*ARGSUSED*/
1687837c1ac4SStephen Hanson 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)1688837c1ac4SStephen Hanson i_ddi_prot_io_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1689837c1ac4SStephen Hanson uint32_t *dev_addr, size_t repcount, uint_t flags)
1690837c1ac4SStephen Hanson {
1691837c1ac4SStephen Hanson uint32_t *h;
1692837c1ac4SStephen Hanson uintptr_t port;
1693837c1ac4SStephen Hanson
1694837c1ac4SStephen Hanson h = host_addr;
1695837c1ac4SStephen Hanson port = (uintptr_t)dev_addr;
1696837c1ac4SStephen Hanson
1697837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1698837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1699837c1ac4SStephen Hanson for (; repcount; repcount--, port += 4)
1700837c1ac4SStephen Hanson outl(port, *h++);
1701837c1ac4SStephen Hanson else
1702837c1ac4SStephen Hanson for (; repcount; repcount--)
1703837c1ac4SStephen Hanson outl(port, *h++);
1704837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1705837c1ac4SStephen Hanson }
1706837c1ac4SStephen Hanson
1707837c1ac4SStephen Hanson /*ARGSUSED*/
1708837c1ac4SStephen Hanson 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)1709837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1710837c1ac4SStephen Hanson uint32_t *dev_addr, size_t repcount, uint_t flags)
1711837c1ac4SStephen Hanson {
1712837c1ac4SStephen Hanson uint32_t *h, *d;
1713837c1ac4SStephen Hanson
1714837c1ac4SStephen Hanson h = host_addr;
1715837c1ac4SStephen Hanson d = dev_addr;
1716837c1ac4SStephen Hanson
1717837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1718837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1719837c1ac4SStephen Hanson for (; repcount; repcount--)
1720837c1ac4SStephen Hanson *d++ = ddi_swap32(*h++);
1721837c1ac4SStephen Hanson else
1722837c1ac4SStephen Hanson for (; repcount; repcount--)
1723837c1ac4SStephen Hanson *d = ddi_swap32(*h++);
1724837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1725837c1ac4SStephen Hanson }
1726837c1ac4SStephen Hanson
1727837c1ac4SStephen Hanson /*ARGSUSED*/
1728837c1ac4SStephen Hanson 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)1729837c1ac4SStephen Hanson i_ddi_prot_io_swap_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr,
1730837c1ac4SStephen Hanson uint32_t *dev_addr, size_t repcount, uint_t flags)
1731837c1ac4SStephen Hanson {
1732837c1ac4SStephen Hanson uint32_t *h;
1733837c1ac4SStephen Hanson uintptr_t port;
1734837c1ac4SStephen Hanson
1735837c1ac4SStephen Hanson h = host_addr;
1736837c1ac4SStephen Hanson port = (uintptr_t)dev_addr;
1737837c1ac4SStephen Hanson
1738837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1739837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1740837c1ac4SStephen Hanson for (; repcount; repcount--, port += 4)
1741837c1ac4SStephen Hanson outl(port, ddi_swap32(*h++));
1742837c1ac4SStephen Hanson else
1743837c1ac4SStephen Hanson for (; repcount; repcount--)
1744837c1ac4SStephen Hanson outl(port, ddi_swap32(*h++));
1745837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1746837c1ac4SStephen Hanson }
1747837c1ac4SStephen Hanson
1748837c1ac4SStephen Hanson /*ARGSUSED*/
1749837c1ac4SStephen Hanson 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)1750837c1ac4SStephen Hanson i_ddi_prot_vaddr_rep_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
1751837c1ac4SStephen Hanson uint64_t *dev_addr, size_t repcount, uint_t flags)
1752837c1ac4SStephen Hanson {
1753837c1ac4SStephen Hanson uint64_t *h, *d;
1754837c1ac4SStephen Hanson
1755837c1ac4SStephen Hanson h = host_addr;
1756837c1ac4SStephen Hanson d = dev_addr;
1757837c1ac4SStephen Hanson
1758837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1759837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1760837c1ac4SStephen Hanson for (; repcount; repcount--)
1761837c1ac4SStephen Hanson *d++ = *h++;
1762837c1ac4SStephen Hanson else
1763837c1ac4SStephen Hanson for (; repcount; repcount--)
1764837c1ac4SStephen Hanson *d = *h++;
1765837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1766837c1ac4SStephen Hanson }
1767837c1ac4SStephen Hanson
1768837c1ac4SStephen Hanson /*ARGSUSED*/
1769837c1ac4SStephen Hanson 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)1770837c1ac4SStephen Hanson i_ddi_prot_vaddr_swap_rep_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
1771837c1ac4SStephen Hanson uint64_t *dev_addr, size_t repcount, uint_t flags)
1772837c1ac4SStephen Hanson {
1773837c1ac4SStephen Hanson uint64_t *h, *d;
1774837c1ac4SStephen Hanson
1775837c1ac4SStephen Hanson h = host_addr;
1776837c1ac4SStephen Hanson d = dev_addr;
1777837c1ac4SStephen Hanson
1778837c1ac4SStephen Hanson mutex_enter(hdlp->ahi_peekpoke_mutexp);
1779837c1ac4SStephen Hanson if (flags == DDI_DEV_AUTOINCR)
1780837c1ac4SStephen Hanson for (; repcount; repcount--)
1781837c1ac4SStephen Hanson *d++ = ddi_swap64(*h++);
1782837c1ac4SStephen Hanson else
1783837c1ac4SStephen Hanson for (; repcount; repcount--)
1784837c1ac4SStephen Hanson *d = ddi_swap64(*h++);
1785837c1ac4SStephen Hanson mutex_exit(hdlp->ahi_peekpoke_mutexp);
1786837c1ac4SStephen Hanson }
1787837c1ac4SStephen Hanson
1788837c1ac4SStephen Hanson void
ddi_io_rep_get8(ddi_acc_handle_t handle,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount)17897c478bd9Sstevel@tonic-gate ddi_io_rep_get8(ddi_acc_handle_t handle,
17907c478bd9Sstevel@tonic-gate uint8_t *host_addr, uint8_t *dev_addr, size_t repcount)
17917c478bd9Sstevel@tonic-gate {
17927c478bd9Sstevel@tonic-gate (((ddi_acc_impl_t *)handle)->ahi_rep_get8)
17937c478bd9Sstevel@tonic-gate ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
17947c478bd9Sstevel@tonic-gate repcount, DDI_DEV_NO_AUTOINCR);
17957c478bd9Sstevel@tonic-gate }
17967c478bd9Sstevel@tonic-gate
17977c478bd9Sstevel@tonic-gate void
ddi_io_rep_get16(ddi_acc_handle_t handle,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount)17987c478bd9Sstevel@tonic-gate ddi_io_rep_get16(ddi_acc_handle_t handle,
17997c478bd9Sstevel@tonic-gate uint16_t *host_addr, uint16_t *dev_addr, size_t repcount)
18007c478bd9Sstevel@tonic-gate {
18017c478bd9Sstevel@tonic-gate (((ddi_acc_impl_t *)handle)->ahi_rep_get16)
18027c478bd9Sstevel@tonic-gate ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
18037c478bd9Sstevel@tonic-gate repcount, DDI_DEV_NO_AUTOINCR);
18047c478bd9Sstevel@tonic-gate }
18057c478bd9Sstevel@tonic-gate
18067c478bd9Sstevel@tonic-gate void
ddi_io_rep_get32(ddi_acc_handle_t handle,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount)18077c478bd9Sstevel@tonic-gate ddi_io_rep_get32(ddi_acc_handle_t handle,
18087c478bd9Sstevel@tonic-gate uint32_t *host_addr, uint32_t *dev_addr, size_t repcount)
18097c478bd9Sstevel@tonic-gate {
18107c478bd9Sstevel@tonic-gate (((ddi_acc_impl_t *)handle)->ahi_rep_get32)
18117c478bd9Sstevel@tonic-gate ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
18127c478bd9Sstevel@tonic-gate repcount, DDI_DEV_NO_AUTOINCR);
18137c478bd9Sstevel@tonic-gate }
18147c478bd9Sstevel@tonic-gate
18157c478bd9Sstevel@tonic-gate /*ARGSUSED*/
18167c478bd9Sstevel@tonic-gate 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)18177c478bd9Sstevel@tonic-gate i_ddi_io_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
18187c478bd9Sstevel@tonic-gate uint64_t *dev_addr, size_t repcount, uint_t flags)
18197c478bd9Sstevel@tonic-gate {
18207c478bd9Sstevel@tonic-gate cmn_err(CE_PANIC, "ddi_rep_get64 from i/o space");
18217c478bd9Sstevel@tonic-gate }
18227c478bd9Sstevel@tonic-gate
18237c478bd9Sstevel@tonic-gate void
ddi_io_rep_put8(ddi_acc_handle_t handle,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount)18247c478bd9Sstevel@tonic-gate ddi_io_rep_put8(ddi_acc_handle_t handle,
18257c478bd9Sstevel@tonic-gate uint8_t *host_addr, uint8_t *dev_addr, size_t repcount)
18267c478bd9Sstevel@tonic-gate {
18277c478bd9Sstevel@tonic-gate (((ddi_acc_impl_t *)handle)->ahi_rep_put8)
18287c478bd9Sstevel@tonic-gate ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
18297c478bd9Sstevel@tonic-gate repcount, DDI_DEV_NO_AUTOINCR);
18307c478bd9Sstevel@tonic-gate }
18317c478bd9Sstevel@tonic-gate
18327c478bd9Sstevel@tonic-gate void
ddi_io_rep_put16(ddi_acc_handle_t handle,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount)18337c478bd9Sstevel@tonic-gate ddi_io_rep_put16(ddi_acc_handle_t handle,
18347c478bd9Sstevel@tonic-gate uint16_t *host_addr, uint16_t *dev_addr, size_t repcount)
18357c478bd9Sstevel@tonic-gate {
18367c478bd9Sstevel@tonic-gate (((ddi_acc_impl_t *)handle)->ahi_rep_put16)
18377c478bd9Sstevel@tonic-gate ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
18387c478bd9Sstevel@tonic-gate repcount, DDI_DEV_NO_AUTOINCR);
18397c478bd9Sstevel@tonic-gate }
18407c478bd9Sstevel@tonic-gate
18417c478bd9Sstevel@tonic-gate void
ddi_io_rep_put32(ddi_acc_handle_t handle,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount)18427c478bd9Sstevel@tonic-gate ddi_io_rep_put32(ddi_acc_handle_t handle,
18437c478bd9Sstevel@tonic-gate uint32_t *host_addr, uint32_t *dev_addr, size_t repcount)
18447c478bd9Sstevel@tonic-gate {
18457c478bd9Sstevel@tonic-gate (((ddi_acc_impl_t *)handle)->ahi_rep_put32)
18467c478bd9Sstevel@tonic-gate ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
18477c478bd9Sstevel@tonic-gate repcount, DDI_DEV_NO_AUTOINCR);
18487c478bd9Sstevel@tonic-gate }
18497c478bd9Sstevel@tonic-gate
18507c478bd9Sstevel@tonic-gate /*ARGSUSED*/
18517c478bd9Sstevel@tonic-gate 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)18527c478bd9Sstevel@tonic-gate i_ddi_io_rep_put64(ddi_acc_impl_t *hdlp, uint64_t *host_addr,
18537c478bd9Sstevel@tonic-gate uint64_t *dev_addr, size_t repcount, uint_t flags)
18547c478bd9Sstevel@tonic-gate {
18557c478bd9Sstevel@tonic-gate cmn_err(CE_PANIC, "ddi_rep_put64 to i/o space");
18567c478bd9Sstevel@tonic-gate }
18577c478bd9Sstevel@tonic-gate
18587c478bd9Sstevel@tonic-gate /*
18594ab75253Smrj * We need to separate the old interfaces from the new ones and leave them
18604ab75253Smrj * in here for a while. Previous versions of the OS defined the new interfaces
18614ab75253Smrj * to the old interfaces. This way we can fix things up so that we can
18624ab75253Smrj * eventually remove these interfaces.
18634ab75253Smrj * e.g. A 3rd party module/driver using ddi_io_rep_get8 and built against S10
18644ab75253Smrj * or earlier will actually have a reference to ddi_io_rep_getb in the binary.
18654ab75253Smrj */
18664ab75253Smrj #ifdef _ILP32
18674ab75253Smrj void
ddi_io_rep_getb(ddi_acc_handle_t handle,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount)18684ab75253Smrj ddi_io_rep_getb(ddi_acc_handle_t handle,
18694ab75253Smrj uint8_t *host_addr, uint8_t *dev_addr, size_t repcount)
18704ab75253Smrj {
18714ab75253Smrj (((ddi_acc_impl_t *)handle)->ahi_rep_get8)
18724ab75253Smrj ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
18734ab75253Smrj repcount, DDI_DEV_NO_AUTOINCR);
18744ab75253Smrj }
18754ab75253Smrj
18764ab75253Smrj void
ddi_io_rep_getw(ddi_acc_handle_t handle,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount)18774ab75253Smrj ddi_io_rep_getw(ddi_acc_handle_t handle,
18784ab75253Smrj uint16_t *host_addr, uint16_t *dev_addr, size_t repcount)
18794ab75253Smrj {
18804ab75253Smrj (((ddi_acc_impl_t *)handle)->ahi_rep_get16)
18814ab75253Smrj ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
18824ab75253Smrj repcount, DDI_DEV_NO_AUTOINCR);
18834ab75253Smrj }
18844ab75253Smrj
18854ab75253Smrj void
ddi_io_rep_getl(ddi_acc_handle_t handle,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount)18864ab75253Smrj ddi_io_rep_getl(ddi_acc_handle_t handle,
18874ab75253Smrj uint32_t *host_addr, uint32_t *dev_addr, size_t repcount)
18884ab75253Smrj {
18894ab75253Smrj (((ddi_acc_impl_t *)handle)->ahi_rep_get32)
18904ab75253Smrj ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
18914ab75253Smrj repcount, DDI_DEV_NO_AUTOINCR);
18924ab75253Smrj }
18934ab75253Smrj
18944ab75253Smrj void
ddi_io_rep_putb(ddi_acc_handle_t handle,uint8_t * host_addr,uint8_t * dev_addr,size_t repcount)18954ab75253Smrj ddi_io_rep_putb(ddi_acc_handle_t handle,
18964ab75253Smrj uint8_t *host_addr, uint8_t *dev_addr, size_t repcount)
18974ab75253Smrj {
18984ab75253Smrj (((ddi_acc_impl_t *)handle)->ahi_rep_put8)
18994ab75253Smrj ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
19004ab75253Smrj repcount, DDI_DEV_NO_AUTOINCR);
19014ab75253Smrj }
19024ab75253Smrj
19034ab75253Smrj void
ddi_io_rep_putw(ddi_acc_handle_t handle,uint16_t * host_addr,uint16_t * dev_addr,size_t repcount)19044ab75253Smrj ddi_io_rep_putw(ddi_acc_handle_t handle,
19054ab75253Smrj uint16_t *host_addr, uint16_t *dev_addr, size_t repcount)
19064ab75253Smrj {
19074ab75253Smrj (((ddi_acc_impl_t *)handle)->ahi_rep_put16)
19084ab75253Smrj ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
19094ab75253Smrj repcount, DDI_DEV_NO_AUTOINCR);
19104ab75253Smrj }
19114ab75253Smrj
19124ab75253Smrj void
ddi_io_rep_putl(ddi_acc_handle_t handle,uint32_t * host_addr,uint32_t * dev_addr,size_t repcount)19134ab75253Smrj ddi_io_rep_putl(ddi_acc_handle_t handle,
19144ab75253Smrj uint32_t *host_addr, uint32_t *dev_addr, size_t repcount)
19154ab75253Smrj {
19164ab75253Smrj (((ddi_acc_impl_t *)handle)->ahi_rep_put32)
19174ab75253Smrj ((ddi_acc_impl_t *)handle, host_addr, dev_addr,
19184ab75253Smrj repcount, DDI_DEV_NO_AUTOINCR);
19194ab75253Smrj }
19204ab75253Smrj #endif /* _ILP32 */
19214ab75253Smrj
19224ab75253Smrj /*
19237c478bd9Sstevel@tonic-gate * These next two functions could be translated into assembler someday
19247c478bd9Sstevel@tonic-gate */
19257c478bd9Sstevel@tonic-gate int
ddi_check_acc_handle(ddi_acc_handle_t handle)19267c478bd9Sstevel@tonic-gate ddi_check_acc_handle(ddi_acc_handle_t handle)
19277c478bd9Sstevel@tonic-gate {
19287c478bd9Sstevel@tonic-gate ddi_acc_impl_t *hdlp = (ddi_acc_impl_t *)handle;
19297c478bd9Sstevel@tonic-gate return (((*hdlp->ahi_fault_check)(hdlp) == DDI_SUCCESS) ? DDI_SUCCESS :
19307c478bd9Sstevel@tonic-gate DDI_FAILURE);
19317c478bd9Sstevel@tonic-gate }
19327c478bd9Sstevel@tonic-gate
19337c478bd9Sstevel@tonic-gate int
i_ddi_acc_fault_check(ddi_acc_impl_t * hdlp)19347c478bd9Sstevel@tonic-gate i_ddi_acc_fault_check(ddi_acc_impl_t *hdlp)
19357c478bd9Sstevel@tonic-gate {
19367c478bd9Sstevel@tonic-gate /* Default version, just returns flag value */
19377c478bd9Sstevel@tonic-gate return (hdlp->ahi_fault);
19387c478bd9Sstevel@tonic-gate }
19397c478bd9Sstevel@tonic-gate
19407c478bd9Sstevel@tonic-gate /*ARGSUSED*/
19417c478bd9Sstevel@tonic-gate void
i_ddi_acc_fault_notify(ddi_acc_impl_t * hdlp)19427c478bd9Sstevel@tonic-gate i_ddi_acc_fault_notify(ddi_acc_impl_t *hdlp)
19437c478bd9Sstevel@tonic-gate {
19447c478bd9Sstevel@tonic-gate /* Default version, does nothing for now */
19457c478bd9Sstevel@tonic-gate }
19467c478bd9Sstevel@tonic-gate
19477c478bd9Sstevel@tonic-gate void
i_ddi_acc_set_fault(ddi_acc_handle_t handle)19487c478bd9Sstevel@tonic-gate i_ddi_acc_set_fault(ddi_acc_handle_t handle)
19497c478bd9Sstevel@tonic-gate {
19507c478bd9Sstevel@tonic-gate ddi_acc_impl_t *hdlp = (ddi_acc_impl_t *)handle;
19517c478bd9Sstevel@tonic-gate
19527c478bd9Sstevel@tonic-gate if (!hdlp->ahi_fault) {
19537c478bd9Sstevel@tonic-gate hdlp->ahi_fault = 1;
19547c478bd9Sstevel@tonic-gate (*hdlp->ahi_fault_notify)(hdlp);
19557c478bd9Sstevel@tonic-gate }
19567c478bd9Sstevel@tonic-gate }
19577c478bd9Sstevel@tonic-gate
19587c478bd9Sstevel@tonic-gate void
i_ddi_acc_clr_fault(ddi_acc_handle_t handle)19597c478bd9Sstevel@tonic-gate i_ddi_acc_clr_fault(ddi_acc_handle_t handle)
19607c478bd9Sstevel@tonic-gate {
19617c478bd9Sstevel@tonic-gate ddi_acc_impl_t *hdlp = (ddi_acc_impl_t *)handle;
19627c478bd9Sstevel@tonic-gate
19637c478bd9Sstevel@tonic-gate if (hdlp->ahi_fault) {
19647c478bd9Sstevel@tonic-gate hdlp->ahi_fault = 0;
19657c478bd9Sstevel@tonic-gate (*hdlp->ahi_fault_notify)(hdlp);
19667c478bd9Sstevel@tonic-gate }
19677c478bd9Sstevel@tonic-gate }
1968