pci_dma.h revision d0662dbfa1a7064416d570c479c4dc3a0782a4f8
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_PCI_DMA_H
#define _SYS_PCI_DMA_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
{ \
(cp)->dmac_notused = 0; \
}
#define PCI_DMA_HAT_NUM_CB_COOKIES 5
typedef struct pci_dma_hdl {
struct pci_dma_impl { /* forthdebug only, keep in sync with ddi_dma_impl_t */
void *dmai_pfnlst;
void *dmai_winlst;
int dmai_fault;
};
/*
* flags for overloading dmai_inuse field of the dma request
* structure:
*/
#define dmai_flags dmai_inuse
#define dmai_tte dmai_nexus_private
#define dmai_fdvma dmai_nexus_private
#define dmai_pfnlst dmai_iopte
#define dmai_winlst dmai_minfo
#define dmai_roffset dmai_pool
#define MP_HAT_CB_COOKIE_PTR(mp, i) \
((i < PCI_DMA_HAT_NUM_CB_COOKIES)? \
(p)->dma_attr_addr_lo = (lo); \
(p)->dma_attr_addr_hi = (hi); \
(p)->dma_attr_seg = (nocross); \
(p)->dma_attr_count_max = (cntmax);
#define SET_DMAALIGN(p, align) \
(p)->dma_attr_align = (align);
#define DMAI_FLAGS_INUSE 0x1
#define DMAI_FLAGS_BYPASSREQ 0x2
#define DMAI_FLAGS_PEER_ONLY 0x4
#define DMAI_FLAGS_NOCTX 0x8
#define DMAI_FLAGS_DVMA 0x10
#define DMAI_FLAGS_BYPASS 0x20
#define DMAI_FLAGS_PEER_TO_PEER 0x40
#define DMAI_FLAGS_CONTEXT 0x100
#define DMAI_FLAGS_FASTTRACK 0x200
#define DMAI_FLAGS_VMEMCACHE 0x400
#define DMAI_FLAGS_PGPFN 0x800
#define DMAI_FLAGS_NOSYSLIMIT 0x1000
#define DMAI_FLAGS_NOFASTLIMIT 0x2000
#define DMAI_FLAGS_NOSYNC 0x4000
#define DMAI_FLAGS_RELOC 0x8000
#define DMAI_FLAGS_MAPPED 0x10000
#define PCI_SYNC_FLAG_SZSHIFT 6
#define PCI_SYNC_FLAG_FAILED 1
#define PCI_SYNC_FLAG_LOCKED 2
((align_pg) <= pci_dvma_page_cache_clustsz))
#define PCI_DMA_CURWIN(mp) \
#ifdef PCI_DMA_PROF
/* collect fast track failure statistics */
#define PCI_DVMA_FASTTRAK_PROF(mp) { \
pci_dvmaft_npages++; \
else if (!HAS_NOFASTLIMIT(mp)) \
pci_dvmaft_limit++; \
}
#else /* !PCI_DMA_PROF */
#define PCI_DVMA_FASTTRAK_PROF(mp)
#endif /* PCI_DMA_PROF */
typedef struct pci_dma_win {
struct pci_dma_win *win_next;
/* cookie table: sizeof (ddi_dma_cookie_t) * win_ncookies */
/* dvma debug records */
struct dvma_rec {
char *dvma_addr;
};
ddi_dma_impl_t *mp);
ddi_dma_impl_t *mp);
int vmemcache);
#define PCI_GET_MP_TTE(tte) \
} else \
}
}
#if defined(DEBUG)
#else
#endif
#ifdef __cplusplus
}
#endif
#endif /* _SYS_PCI_DMA_H */