Lines Matching refs:hsc
194 hsc_state_t *hsc; in hsc_connect() local
256 hsc = hsp->hsc; in hsc_connect()
257 hsc->hsp_last = hsp; in hsc_connect()
299 hsc_state_t *hsc; in hsc_disconnect() local
338 hsc = hsp->hsc; in hsc_disconnect()
339 if (hsc->hsp_last == hsp) in hsc_disconnect()
340 hsc->hsp_last = NULL; in hsc_disconnect()
357 (scsb_enable_enum(hsp->hsc) == DDI_SUCCESS)) { in hsc_insert()
375 (scsb_disable_enum(hsp->hsc, SCSB_HSC_FORCE_REMOVE) in hsc_remove()
519 hsc_state_t *hsc = hsp->hsc; in hsc_set_config_state() local
537 if ((hsc->state & HSC_ATTACHED) == HSC_ATTACHED && in hsc_set_config_state()
552 if (hsc->hsp_last == hsp) in hsc_set_config_state()
553 hsc->hsp_last = NULL; in hsc_set_config_state()
564 if (((hsc->state & HSC_ENUM_ENABLED) && in hsc_set_config_state()
566 (((hsc->state & HSC_ENUM_ENABLED) != HSC_ENUM_ENABLED) && in hsc_set_config_state()
603 hsc->regDone == B_FALSE && in hsc_set_config_state()
604 scsb_hsc_numReg < hsc->n_registered_occupants) { in hsc_set_config_state()
611 if (((hsc->state & HSC_ATTACHED) == HSC_ATTACHED) && in hsc_set_config_state()
612 (scsb_hsc_numReg == hsc->n_registered_occupants)) { in hsc_set_config_state()
613 hsc->regDone = B_TRUE; in hsc_set_config_state()
614 if (hsc->hotswap_mode == HSC_HOTSWAP_MODE_FULL) { in hsc_set_config_state()
618 ddi_driver_name(hsc->dip), in hsc_set_config_state()
619 ddi_get_instance(hsc->dip), in hsc_set_config_state()
620 hsc->n_registered_occupants); in hsc_set_config_state()
622 if (scsb_enable_enum(hsc) != DDI_SUCCESS) { in hsc_set_config_state()
625 ddi_driver_name(hsc->dip), in hsc_set_config_state()
626 ddi_get_instance(hsc->dip)); in hsc_set_config_state()
653 hsc_state_t *hsc; in hsc_autoconfig() local
661 (void) ddi_prop_update_string(DDI_DEV_T_NONE, hsp->hsc->dip, in hsc_autoconfig()
663 if ((res = scsb_enable_enum(hsp->hsc)) == DDI_SUCCESS) { in hsc_autoconfig()
668 (void) ddi_prop_update_string(DDI_DEV_T_NONE, hsp->hsc->dip, in hsc_autoconfig()
671 hsc = hsp->hsc; in hsc_autoconfig()
672 if (hsc->state & HSC_ATTACHED) { in hsc_autoconfig()
675 for (i = 0; i < hsc->slot_table_size; i++) { in hsc_autoconfig()
679 slotnum = hsc->slot_table_prop[i].pslotnum; in hsc_autoconfig()
684 ddi_driver_name(hsc->dip), in hsc_autoconfig()
685 ddi_get_instance(hsc->dip), in hsc_autoconfig()
695 (void) scsb_disable_enum(hsc, in hsc_autoconfig()
798 return (scsb_enable_enum(hsp->hsc)); in hsc_control()
801 return (scsb_disable_enum(hsp->hsc, 0)); in hsc_control()
822 (void) ddi_prop_update_string(DDI_DEV_T_NONE, hsp->hsc->dip, in scsb_hsc_disable_slot()
843 (void) ddi_prop_remove(DDI_DEV_T_NONE, hsp->hsc->dip, in scsb_hsc_enable_slot()
927 hsc_state_t *hsc, in hsc_slot_register() argument
949 hsp->hs_hpchandle = hsc->scsb_handle; /* handle for call backs */ in hsc_slot_register()
950 hsp->hsc = hsc; in hsc_slot_register()
952 rc = scsb_hsc_init_slot_state(hsc, hsp); in hsc_slot_register()
957 if (hsc->hotswap_mode == HSC_HOTSWAP_MODE_FULL) in hsc_slot_register()
970 rc = hpc_slot_register(hsc->dip, in hsc_slot_register()
980 ddi_driver_name(hsc->dip), ddi_get_instance(hsc->dip), in hsc_slot_register()
1016 if ((hsp->hsc->state & HSC_ATTACHED) != HSC_ATTACHED && in hsc_slot_unregister()
1018 hsp->hsc->n_registered_occupants--; in hsc_slot_unregister()
1027 scsb_hsc_init_slot_state(hsc_state_t *hsc, hsc_slot_t *hsp) in scsb_hsc_init_slot_state() argument
1031 scsb_state_t *scsb = (scsb_state_t *)hsc->scsb_handle; in scsb_hsc_init_slot_state()
1033 rc = scsb_get_slot_state(hsc->scsb_handle, slot_number, &rstate); in scsb_hsc_init_slot_state()
1050 (void) scsb_reset_slot(hsc->scsb_handle, slot_number, in scsb_hsc_init_slot_state()
1069 (void) scsb_reset_slot(hsc->scsb_handle, in scsb_hsc_init_slot_state()
1121 hsc_get_slot_info(hsc_state_t *hsc, int pci_devno) in hsc_get_slot_info() argument
1125 for (i = 0; i < hsc->slot_table_size; i++) { in hsc_get_slot_info()
1127 if (hsc->slot_table_prop[i].pci_devno == pci_devno) in hsc_get_slot_info()
1129 hsc->slot_table_prop[i].pslotnum)); in hsc_get_slot_info()
1227 ddi_driver_name(hsp->hsc->dip), in hsc_slot_occupancy()
1228 ddi_get_instance(hsp->hsc->dip), in hsc_slot_occupancy()
1232 ddi_driver_name(hsp->hsc->dip), in hsc_slot_occupancy()
1233 ddi_get_instance(hsp->hsc->dip)); in hsc_slot_occupancy()
1262 hsc_state_t *hsc; in scsb_hsc_board_healthy() local
1272 hsc = hsp->hsc; in scsb_hsc_board_healthy()
1276 "empty slot %d", ddi_driver_name(hsc->dip), in scsb_hsc_board_healthy()
1277 ddi_get_instance(hsc->dip), in scsb_hsc_board_healthy()
1304 ddi_driver_name(hsc->dip), in scsb_hsc_board_healthy()
1305 ddi_get_instance(hsc->dip), slot_number, in scsb_hsc_board_healthy()
1316 ddi_driver_name(hsc->dip), in scsb_hsc_board_healthy()
1317 ddi_get_instance(hsc->dip), slot_number, in scsb_hsc_board_healthy()
1332 ddi_driver_name(hsc->dip), in scsb_hsc_board_healthy()
1333 ddi_get_instance(hsc->dip), in scsb_hsc_board_healthy()
1345 hsc_state_t *hsc = hsp->hsc; in hsc_slot_autoconnect() local
1354 if (((hsc->state & HSC_ENUM_ENABLED) == HSC_ENUM_ENABLED) && in hsc_slot_autoconnect()
1357 hsc->hsp_last = hsp; in hsc_slot_autoconnect()
1365 hsc->hsp_last = NULL; in hsc_slot_autoconnect()
1412 scsb_enable_enum(hsc_state_t *hsc) in scsb_enable_enum() argument
1416 if ((hsc->state & HSC_ENUM_ENABLED) == HSC_ENUM_ENABLED) in scsb_enable_enum()
1418 if ((hsc->state & HSC_ATTACHED) != HSC_ATTACHED) in scsb_enable_enum()
1421 if (ddi_add_intr(hsc->dip, 1, NULL, NULL, in scsb_enable_enum()
1422 hsc_enum_intr, (caddr_t)hsc) != DDI_SUCCESS) { in scsb_enable_enum()
1424 ddi_driver_name(hsc->dip), ddi_get_instance(hsc->dip)); in scsb_enable_enum()
1428 "Full Hotswap Mode\n", ddi_driver_name(hsc->dip), in scsb_enable_enum()
1429 ddi_get_instance(hsc->dip)); in scsb_enable_enum()
1430 hsc->state |= HSC_ENUM_ENABLED; in scsb_enable_enum()
1431 (void) ddi_prop_update_string(DDI_DEV_T_NONE, hsc->dip, in scsb_enable_enum()
1439 scsb_disable_enum(hsc_state_t *hsc, int op) in scsb_disable_enum() argument
1454 if ((hsc->state & HSC_ENUM_ENABLED) == HSC_ENUM_ENABLED) { in scsb_disable_enum()
1456 ddi_remove_intr(hsc->dip, 1, NULL); in scsb_disable_enum()
1457 hsc->state &= ~HSC_ENUM_ENABLED; in scsb_disable_enum()
1460 ddi_driver_name(hsc->dip), in scsb_disable_enum()
1461 ddi_get_instance(hsc->dip)); in scsb_disable_enum()
1463 (void) ddi_prop_update_string(DDI_DEV_T_NONE, hsc->dip, in scsb_disable_enum()
1473 hsc_clear_all_enum(hsc_state_t *hsc) in hsc_clear_all_enum() argument
1478 for (i = 0; i < hsc->slot_table_size; i++) { in hsc_clear_all_enum()
1480 hsp = hsc_find_slot(hsc->slot_table_prop[i].pslotnum); in hsc_clear_all_enum()
1489 hsc->slot_table_prop[i].pslotnum); in hsc_clear_all_enum()
1502 hsc_state_t *hsc; in scsb_hsc_attach() local
1541 hsc = (hsc_state_t *)ddi_get_soft_state(hsc_state, instance); in scsb_hsc_attach()
1542 hsc->scsb_handle = scsb_handle; in scsb_hsc_attach()
1543 hsc->dip = dip; in scsb_hsc_attach()
1544 hsc->instance = instance; in scsb_hsc_attach()
1545 hsc->n_registered_occupants = 0; in scsb_hsc_attach()
1546 hsc->regDone = B_FALSE; in scsb_hsc_attach()
1555 hsc->hotswap_mode = HSC_HOTSWAP_MODE_FULL; in scsb_hsc_attach()
1557 hsc->hotswap_mode = HSC_HOTSWAP_MODE_BASIC; in scsb_hsc_attach()
1565 hsc->hotswap_mode = HSC_HOTSWAP_MODE_FULL; in scsb_hsc_attach()
1567 hsc->hotswap_mode = HSC_HOTSWAP_MODE_BASIC; in scsb_hsc_attach()
1595 hsc->slot_table_size = n / 4; in scsb_hsc_attach()
1597 hsc->slot_table_size = hpc_slot_table_size / in scsb_hsc_attach()
1615 hsc->slot_table_size -= 1; in scsb_hsc_attach()
1617 DEBUG1("hsc_attach: %d hotplug slots on bus\n", hsc->slot_table_size); in scsb_hsc_attach()
1622 hsc->slot_table_prop = (hsc_slot_table_t *) in scsb_hsc_attach()
1623 kmem_zalloc(hsc->slot_table_size * in scsb_hsc_attach()
1628 for (i = 0; i < hsc->slot_table_size; i++) { in scsb_hsc_attach()
1661 hsc->slot_table_prop[i].pslotnum = atoi(phys_slotname); in scsb_hsc_attach()
1662 hsc->slot_table_prop[i].ga = atoi(ga); in scsb_hsc_attach()
1663 hsc->slot_table_prop[i].pci_devno = atoi(pcidev); in scsb_hsc_attach()
1664 (void) strcpy(hsc->slot_table_prop[i].nexus, nexus); in scsb_hsc_attach()
1668 for (i = 0; i < hsc->slot_table_size; i++, hpstp++) { in scsb_hsc_attach()
1674 hsc->slot_table_prop[i].pslotnum = hpstp->pslotnum; in scsb_hsc_attach()
1675 hsc->slot_table_prop[i].ga = hpstp->ga; in scsb_hsc_attach()
1676 hsc->slot_table_prop[i].pci_devno = hpstp->pci_devno; in scsb_hsc_attach()
1679 hsc->slot_table_prop[i].nexus, in scsb_hsc_attach()
1680 sizeof (hsc->slot_table_prop[i].nexus)) in scsb_hsc_attach()
1685 kmem_free(hsc->slot_table_prop, in scsb_hsc_attach()
1686 (hsc->slot_table_size * in scsb_hsc_attach()
1701 kmem_free(hsc->slot_table_prop, in scsb_hsc_attach()
1702 (hsc->slot_table_size * in scsb_hsc_attach()
1715 for (i = 0; i < hsc->slot_table_size; i++) { in scsb_hsc_attach()
1717 hsc->slot_table_prop[i].pslotnum, &rstate) != in scsb_hsc_attach()
1721 hsc->n_registered_occupants++; in scsb_hsc_attach()
1724 mutex_init(&hsc->hsc_mutex, NULL, MUTEX_DRIVER, NULL); in scsb_hsc_attach()
1725 for (i = 0; i < hsc->slot_table_size; i++) { in scsb_hsc_attach()
1728 hsc->slot_table_prop[i].nexus, in scsb_hsc_attach()
1729 hsc->slot_table_prop[i].pci_devno); in scsb_hsc_attach()
1731 if (hsc_slot_register(hsc, hsc->slot_table_prop[i].nexus, in scsb_hsc_attach()
1732 hsc->slot_table_prop[i].pci_devno, in scsb_hsc_attach()
1733 hsc->slot_table_prop[i].pslotnum, B_FALSE) != in scsb_hsc_attach()
1740 n = hsc->slot_table_prop[i].pslotnum; in scsb_hsc_attach()
1750 mutex_destroy(&hsc->hsc_mutex); in scsb_hsc_attach()
1751 kmem_free(hsc->slot_table_prop, (hsc->slot_table_size * in scsb_hsc_attach()
1759 hsc->hsp_last = NULL; in scsb_hsc_attach()
1760 hsc->hsc_intr_counter = 0; in scsb_hsc_attach()
1762 (void) ddi_prop_update_string(DDI_DEV_T_NONE, hsc->dip, in scsb_hsc_attach()
1764 hsc->state |= (HSC_ATTACHED|HSC_SCB_CONNECTED); in scsb_hsc_attach()
1769 if ((hsc->regDone == B_FALSE && hsc->n_registered_occupants == 0) || in scsb_hsc_attach()
1770 scsb_hsc_numReg == hsc->n_registered_occupants) { in scsb_hsc_attach()
1771 hsc->regDone = B_TRUE; in scsb_hsc_attach()
1772 if (hsc->hotswap_mode == HSC_HOTSWAP_MODE_FULL) { in scsb_hsc_attach()
1773 if (scsb_enable_enum(hsc) != DDI_SUCCESS) { in scsb_hsc_attach()
1788 hsc_state_t *hsc; in scsb_hsc_detach() local
1792 hsc = (hsc_state_t *)ddi_get_soft_state(hsc_state, instance); in scsb_hsc_detach()
1793 if (hsc == NULL) { in scsb_hsc_detach()
1799 if ((hsc->state & HSC_ATTACHED) != HSC_ATTACHED) in scsb_hsc_detach()
1804 for (i = 0; i < hsc->slot_table_size; i++) { in scsb_hsc_detach()
1808 hsp = hsc_find_slot(hsc->slot_table_prop[i].pslotnum); in scsb_hsc_detach()
1827 (void) ddi_prop_remove(DDI_DEV_T_NONE, hsc->dip, in scsb_hsc_detach()
1829 if (hsc_slot_unregister(hsc->slot_table_prop[i].pslotnum) in scsb_hsc_detach()
1834 hsc->slot_table_prop[i].pslotnum); in scsb_hsc_detach()
1838 kmem_free(hsc->slot_table_prop, (hsc->slot_table_size * in scsb_hsc_detach()
1840 if ((hsc->state & HSC_ENUM_ENABLED) == HSC_ENUM_ENABLED) { in scsb_hsc_detach()
1841 ddi_remove_intr(hsc->dip, 1, hsc->enum_iblock); in scsb_hsc_detach()
1842 hsc->state &= ~HSC_ENUM_ENABLED; in scsb_hsc_detach()
1844 mutex_destroy(&hsc->hsc_mutex); in scsb_hsc_detach()
1845 (void) ddi_prop_remove(DDI_DEV_T_NONE, hsc->dip, HOTSWAP_MODE_PROP); in scsb_hsc_detach()
1846 hsc->state &= ~(HSC_ATTACHED|HSC_SCB_CONNECTED); in scsb_hsc_detach()
1858 hsc_state_t *hsc; in scsb_hsc_freeze() local
1863 hsc = (hsc_state_t *)ddi_get_soft_state(hsc_state, instance); in scsb_hsc_freeze()
1864 if (hsc == NULL) { in scsb_hsc_freeze()
1869 if ((hsc->state & HSC_ATTACHED) != HSC_ATTACHED) in scsb_hsc_freeze()
1871 hsc->state &= ~HSC_SCB_CONNECTED; in scsb_hsc_freeze()
1873 for (i = 0; i < hsc->slot_table_size; i++) { in scsb_hsc_freeze()
1874 hsp = hsc_find_slot(hsc->slot_table_prop[i].pslotnum); in scsb_hsc_freeze()
1879 hsc->slot_table_prop[i].pslotnum); in scsb_hsc_freeze()
1893 ddi_driver_name(hsc->dip), in scsb_hsc_freeze()
1894 ddi_get_instance(hsc->dip), in scsb_hsc_freeze()
1912 hsc_state_t *hsc; in scsb_hsc_restore() local
1916 hsc = (hsc_state_t *)ddi_get_soft_state(hsc_state, instance); in scsb_hsc_restore()
1917 if (hsc == NULL) { in scsb_hsc_restore()
1923 if ((hsc->state & HSC_ATTACHED) != HSC_ATTACHED) in scsb_hsc_restore()
1925 hsc->state |= HSC_SCB_CONNECTED; in scsb_hsc_restore()
1926 for (i = 0; i < hsc->slot_table_size; i++) { in scsb_hsc_restore()
1927 hsp = hsc_find_slot(hsc->slot_table_prop[i].pslotnum); in scsb_hsc_restore()
1932 ddi_driver_name(hsc->dip), in scsb_hsc_restore()
1933 ddi_get_instance(hsc->dip), in scsb_hsc_restore()
1934 hsc->slot_table_prop[i].pslotnum); in scsb_hsc_restore()
1944 ddi_driver_name(hsc->dip), in scsb_hsc_restore()
1945 ddi_get_instance(hsc->dip), in scsb_hsc_restore()
1950 if (scsb_hsc_init_slot_state(hsc, hsp) != DDI_SUCCESS) { in scsb_hsc_restore()
1954 ddi_driver_name(hsc->dip), in scsb_hsc_restore()
1955 ddi_get_instance(hsc->dip), in scsb_hsc_restore()
1967 hsc_state_t *hsc; in scsb_hsc_freeze_check() local
1970 hsc = (hsc_state_t *)ddi_get_soft_state(hsc_state, instance); in scsb_hsc_freeze_check()
1971 if (hsc == NULL) { in scsb_hsc_freeze_check()
1976 if ((hsc->state & HSC_ATTACHED) != HSC_ATTACHED) in scsb_hsc_freeze_check()
1989 hsc_state_t *hsc; in hsc_ac_op() local
1991 hsc = (hsc_state_t *)ddi_get_soft_state(hsc_state, instance); in hsc_ac_op()
1992 if (hsc == NULL) { in hsc_ac_op()
1994 ddi_driver_name(hsc->dip), ddi_get_instance(hsc->dip)); in hsc_ac_op()
2001 ddi_driver_name(hsc->dip), ddi_get_instance(hsc->dip)); in hsc_ac_op()
2011 if (hsc->state & HSC_ENUM_ENABLED) in hsc_ac_op()
2028 hsc_state_t *hsc = (hsc_state_t *)iarg; in hsc_enum_intr() local
2032 if ((hsc->state & HSC_ATTACHED) == 0) in hsc_enum_intr()
2035 hsp = hsc_find_slot(hsc->slot_table_prop[0].pslotnum); in hsc_enum_intr()
2053 hsc->hsc_intr_counter, hsc->hsp_last); in hsc_enum_intr()
2054 hsc->hsc_intr_counter ++; in hsc_enum_intr()
2055 if (hsc->hsc_intr_counter == scsb_hsc_max_intr_count) { in hsc_enum_intr()
2056 if (!hsc->hsp_last) { in hsc_enum_intr()
2059 ddi_driver_name(hsc->dip), in hsc_enum_intr()
2060 ddi_get_instance(hsc->dip)); in hsc_enum_intr()
2061 hsc->hsc_intr_counter = 0; in hsc_enum_intr()
2064 hsp = hsc->hsp_last; in hsc_enum_intr()
2067 ddi_driver_name(hsc->dip), in hsc_enum_intr()
2068 ddi_get_instance(hsc->dip), in hsc_enum_intr()
2084 ddi_driver_name(hsc->dip), in hsc_enum_intr()
2085 ddi_get_instance(hsc->dip)); in hsc_enum_intr()
2089 hsc->hsc_intr_counter = 0; in hsc_enum_intr()
2093 hsc->hsc_intr_counter = 0; in hsc_enum_intr()
2098 hsp = hsc_get_slot_info(hsc, rc); in hsc_enum_intr()
2101 "dev %x", ddi_driver_name(hsc->dip), in hsc_enum_intr()
2102 ddi_get_instance(hsc->dip), rc); in hsc_enum_intr()