immu_devi
immu_devi_t *immu_devi;
immu_devi = immu_devi_get(dip);
immu_devi->imd_dvma_flags |= IMMU_FLAGS_UNITY;
immu_devi->imd_dvma_flags &= ~IMMU_FLAGS_UNITY;
old_premap = immu_devi->imd_use_premap;
immu_devi->imd_use_premap = B_FALSE;
immu_devi->imd_use_premap = B_TRUE;
if (hasmapprop && (immu_devi->imd_dvma_flags ^ immu_global_dvma_flags))
immu_devi->imd_dvma_flags & IMMU_FLAGS_UNITY ?
if (haspreprop && (immu_devi->imd_use_premap != old_premap))
immu_devi->imd_use_premap ? "" : "not ");
immu_devi_t *immu_devi;
immu_devi = immu_devi_get(dip);
if (immu_devi->imd_dvma_flags & IMMU_FLAGS_UNITY)
immu_devi->imd_dvma_flags |= IMMU_FLAGS_UNITY;
immu_devi_t *immu_devi;
immu_devi = immu_devi_get(dip);
if (immu_devi->imd_lpc == B_TRUE) {
immu_devi_t *immu_devi;
immu_devi = immu_devi_get(dip);
if (immu_devi->imd_display == B_TRUE) {
immu_devi->imd_dvma_flags |= IMMU_FLAGS_UNITY;
immu_devi_t *immu_devi;
immu_devi = IMMU_DEVI(ddip);
ASSERT(immu_devi);
if (immu_devi->imd_seg == imarg->ima_seg &&
immu_devi->imd_bus == imarg->ima_bus &&
immu_devi->imd_devfunc == imarg->ima_devfunc) {
immu_devi_t *immu_devi;
immu_devi = immu_devi_get(dip);
fddip = immu_devi->imd_ddip;
fdomain = immu_devi->imd_domain;
immu_devi->imd_ddip = ddip;
immu_devi->imd_domain = domain;
immu_devi_t *immu_devi;
immu_devi = immu_devi_get(rdip);
bdf_domain_insert(immu_devi, domain);
immu_devi_t *immu_devi;
immu_devi = immu_devi_get(dip);
if (immu_devi->imd_pcib_type == IMMU_PCIB_PCI_PCI) {
bdf_domain_lookup(immu_devi_t *immu_devi)
int16_t seg = immu_devi->imd_seg;
int16_t bus = immu_devi->imd_bus;
int16_t devfunc = immu_devi->imd_devfunc;
bdf_domain_insert(immu_devi_t *immu_devi, domain_t *domain)
int16_t seg = immu_devi->imd_seg;
int16_t bus = immu_devi->imd_bus;
int16_t devfunc = immu_devi->imd_devfunc;
immu_devi_t *immu_devi;
immu_devi = list_head(dvap->dva_list);
for (; immu_devi; immu_devi = list_next(dvap->dva_list,
immu_devi)) {
if (immu_devi->imd_dip == pdip) {
immu_devi_t *immu_devi;
immu_devi = IMMU_DEVI(dip);
if (immu_devi->imd_display == B_TRUE) {
} else if (immu_devi->imd_lpc == B_TRUE) {
list_insert_head(spclist, immu_devi);
immu_devi_t *immu_devi;
immu_devi = immu_devi_get(dip);
if (immu_devi != NULL) {
immu_devi_t *immu_devi;
immu_devi = (immu_devi_t *)(uintptr_t)atomic_or_64_nv((uint64_t *)vptr,
return (immu_devi);
immu_devi_t *immu_devi;
immu_devi = IMMU_DEVI(dip);
if (immu_devi->imd_domain->dom_did == IMMU_UNITY_DID)
if (immu_devi->imd_immu->immu_dip == iommulib_iommu_getdip(handle))
immu_devi_t *immu_devi;
immu_devi = NULL;
immu_devi = list_head(list_gfx);
if (immu_devi == NULL) {
ddi_node_name(immu_devi->imd_dip));
return (immu_devi->imd_dip);
immu_devi_t *immu_devi;
immu_devi = immu_devi_get(dip);
if (immu_devi == NULL) {
immu_devi = immu_devi_get(dip);
if (immu_devi->imd_immu) {
immu = immu_devi->imd_immu;
immu_devi = immu_devi_get(dip);
if (immu_devi == NULL) {
if (immu_devi->imd_immu == NULL) {
immu_devi->imd_immu = immu;
if (immu_devi->imd_immu != immu) {
(void *)immu_devi->imd_immu);
immu_devi_t *immu_devi;
immu_devi = kmem_zalloc(sizeof (immu_devi_t), kmflags);
if (immu_devi == NULL) {
immu_devi->imd_dip = rdip;
immu_devi->imd_seg = 0; /* Currently seg can only be 0 */
immu_devi->imd_bus = bus;
immu_devi->imd_pcib_type = IMMU_PCIB_BAD;
immu_devi->imd_pcib_type = IMMU_PCIB_NOBDF;
return (immu_devi);
immu_devi->imd_devfunc = IMMU_PCI_DEVFUNC(dev, func);
immu_devi->imd_sec = 0;
immu_devi->imd_sub = 0;
immu_devi->imd_sec = pci_getb_func(bus, dev, func,
immu_devi->imd_sub = pci_getb_func(bus, dev, func,
immu_devi->imd_pcib_type = IMMU_PCIB_PCIE_PCI;
immu_devi->imd_pcib_type = IMMU_PCIB_PCIE_PCIE;
immu_devi->imd_pcib_type = IMMU_PCIB_PCI_PCI;
immu_devi->imd_pcib_type = IMMU_PCIB_ENDPOINT;
immu_devi->imd_display = device_is_display(classcode);
immu_devi->imd_lpc = ((baseclass == PCI_CLASS_BRIDGE) &&
immu_devi->imd_use_premap = device_use_premap(classcode);
immu_devi->imd_domain = NULL;
immu_devi->imd_dvma_flags = immu_global_dvma_flags;
return (immu_devi);
destroy_immu_devi(immu_devi_t *immu_devi)
kmem_free(immu_devi, sizeof (immu_devi_t));
immu_devi_t *immu_devi;
immu_devi = immu_devi_get(rdip);
if (immu_devi == NULL) {
domain = immu_devi->imd_domain;
ddip = immu_devi->imd_ddip;
static void destroy_immu_devi(immu_devi_t *immu_devi);
immu_devi_t *immu_devi;
immu_devi = immu_devi_get(pdip);
if (immu_devi == NULL) {
immu_devi = immu_devi_get(pdip);
immu = immu_devi->imd_immu;
immu_devi->imd_pcib_type == IMMU_PCIB_PCIE_PCIE) {
if (immu_devi->imd_pcib_type != IMMU_PCIB_BAD &&
immu_devi->imd_pcib_type != IMMU_PCIB_NOBDF) {
ASSERT(immu_devi->imd_bus >= 0);
ASSERT(immu_devi->imd_devfunc >= 0);
if (immu_devi->imd_display == B_TRUE ||
domain = immu_devi->imd_domain;
ddip = immu_devi->imd_ddip;
domain = bdf_domain_lookup(immu_devi);
if (immu_devi->imd_domain != NULL) {
immu_devi_t *immu_devi;
immu_devi = DEVI(dip)->devi_iommu;
if (immu_devi == NULL || immu_devi->imd_pcib_type == IMMU_PCIB_BAD ||
immu_devi->imd_pcib_type == IMMU_PCIB_ENDPOINT) {
immu_devi_t *immu_devi;
immu_devi = DEVI(pdip)->devi_iommu;
ASSERT(immu_devi);
if (immu_devi->imd_pcib_type == IMMU_PCIB_PCIE_PCI) {
sid = (immu_devi->imd_bus << 8) | immu_devi->imd_sec;
sid = (immu_devi->imd_bus << 8) |
immu_devi->imd_devfunc;