/* ARGSUSED */ static int ppb_close(dev_t dev, int flags, int otyp, cred_t *credp) { int instance = PCI_MINOR_NUM_TO_INSTANCE(getminor(dev)); ppb_devstate_t *ppb_p = ddi_get_soft_state(ppb_state, instance); if (otyp != OTYP_CHR) return (EINVAL); if (ppb_p == NULL) return (ENXIO); mutex_enter(&ppb_p->ppb_mutex); /* * Ioctls will be handled by SPARC PCI Express framework for all * PCIe platforms */ if (ppb_p->parent_bus == PCIE_PCIECAP_DEV_TYPE_PCIE_DEV) { int rv; rv = pcie_close(ppb_p->dip, dev, flags, otyp, credp); mutex_exit(&ppb_p->ppb_mutex); return (rv); } else if (ppb_p->hotplug_capable == B_TRUE) { mutex_exit(&ppb_p->ppb_mutex); return ((pcihp_get_cb_ops())->cb_close(dev, flags, otyp, credp)); } ppb_p->ppb_soft_state = PCI_SOFT_STATE_CLOSED; mutex_exit(&ppb_p->ppb_mutex); return (0); }
/* ARGSUSED */ static int px_close(dev_t dev, int flags, int otyp, cred_t *credp) { px_t *px_p = PX_DEV_TO_SOFTSTATE(dev); int minor = getminor(dev); int rval; if (otyp != OTYP_CHR) return (EINVAL); if (px_p == NULL) return (ENXIO); DBG(DBG_CLOSE, px_p->px_dip, "dev=%x: flags=%x\n", dev, flags); mutex_enter(&px_p->px_mutex); switch (PCI_MINOR_NUM_TO_PCI_DEVNUM(minor)) { case PCI_TOOL_REG_MINOR_NUM: case PCI_TOOL_INTR_MINOR_NUM: break; default: /* To handle devctl and hotplug related ioctls */ if (rval = pcie_close(px_p->px_dip, dev, flags, otyp, credp)) { mutex_exit(&px_p->px_mutex); return (rval); } } px_p->px_soft_state = PCI_SOFT_STATE_CLOSED; mutex_exit(&px_p->px_mutex); return (0); }
/* ARGSUSED */ static int ppb_close(dev_t dev, int flags, int otyp, cred_t *credp) { int instance = PCI_MINOR_NUM_TO_INSTANCE(getminor(dev)); ppb_devstate_t *ppb_p = ddi_get_soft_state(ppb_state, instance); int rv; if (ppb_p == NULL) return (ENXIO); mutex_enter(&ppb_p->ppb_mutex); /* * Ioctls will be handled by PCI Express framework for all * PCIe platforms */ if (ppb_p->parent_bus == PCIE_PCIECAP_DEV_TYPE_PCIE_DEV) { rv = pcie_close(ppb_p->dip, dev, flags, otyp, credp); mutex_exit(&ppb_p->ppb_mutex); return (rv); } mutex_exit(&ppb_p->ppb_mutex); return ((pcihp_get_cb_ops())->cb_close(dev, flags, otyp, credp)); }