Lines Matching defs:si_ctlp

520 	si_ctl_state_t *si_ctlp;
541 si_ctlp = ddi_get_soft_state(si_statep, instance);
542 si_ctlp->sictl_devinfop = dip;
547 si_ctlp->fm_capabilities = ddi_getprop(DDI_DEV_T_ANY, dip,
552 si_fm_init(si_ctlp);
557 status = pci_config_setup(dip, &si_ctlp->sictl_pci_conf_handle);
562 si_ctlp->sictl_devid =
563 pci_config_get16(si_ctlp->sictl_pci_conf_handle,
565 switch (si_ctlp->sictl_devid) {
567 si_ctlp->sictl_num_ports = SI3124_MAX_PORTS;
571 si_ctlp->sictl_num_ports = SI3132_MAX_PORTS;
575 si_ctlp->sictl_num_ports = SI3531_MAX_PORTS;
591 (caddr_t *)&si_ctlp->sictl_global_addr,
595 &si_ctlp->sictl_global_acc_handle);
605 (caddr_t *)&si_ctlp->sictl_port_addr,
609 &si_ctlp->sictl_port_acc_handle);
621 si_disable_all_interrupts(si_ctlp);
626 SIDBG_C(SIDBG_INIT, si_ctlp,
631 SIDBG_C(SIDBG_INIT, si_ctlp,
636 SIDBG_C(SIDBG_INIT, si_ctlp,
643 if (si_add_msi_intrs(si_ctlp) == DDI_SUCCESS) {
644 si_ctlp->sictl_intr_type = DDI_INTR_TYPE_MSI;
646 SIDBG_C(SIDBG_INIT, si_ctlp,
649 SIDBG_C(SIDBG_INIT, si_ctlp,
661 SIDBG_C(SIDBG_INIT, si_ctlp,
664 if (si_add_legacy_intrs(si_ctlp) == DDI_SUCCESS) {
665 si_ctlp->sictl_intr_type = DDI_INTR_TYPE_FIXED;
667 SIDBG_C(SIDBG_INIT, si_ctlp,
670 SIDBG_C(SIDBG_INIT, si_ctlp,
677 SIDBG_C(SIDBG_INIT, si_ctlp,
684 mutex_init(&si_ctlp->sictl_mutex, NULL, MUTEX_DRIVER,
685 (void *)(uintptr_t)si_ctlp->sictl_intr_pri);
692 si_ctlp->sictl_flags |= SI_ATTACH;
693 status = si_initialize_controller(si_ctlp);
694 si_ctlp->sictl_flags &= ~SI_ATTACH;
701 if (si_register_sata_hba_tran(si_ctlp)) {
702 SIDBG_C(SIDBG_INIT, si_ctlp,
707 si_ctlp->sictl_timeout_id = timeout(
709 (caddr_t)si_ctlp, si_watchdog_tick);
711 si_ctlp->sictl_power_level = PM_LEVEL_D0;
716 si_ctlp = ddi_get_soft_state(si_statep, instance);
718 status = si_initialize_controller(si_ctlp);
723 si_ctlp->sictl_timeout_id = timeout(
725 (caddr_t)si_ctlp, si_watchdog_tick);
730 if (sata_hba_attach(si_ctlp->sictl_devinfop,
731 si_ctlp->sictl_sata_hba_tran,
743 SIDBG_C(SIDBG_INIT|SIDBG_EVENT, si_ctlp,
746 (void) pm_idle_component(si_ctlp->sictl_devinfop, 0);
748 si_ctlp->sictl_power_level = PM_LEVEL_D0;
759 si_ctlp->sictl_flags |= SI_DETACH;
761 si_deinitialize_controller(si_ctlp);
762 si_ctlp->sictl_flags &= ~SI_DETACH;
766 mutex_destroy(&si_ctlp->sictl_mutex);
770 si_rem_intrs(si_ctlp);
774 ddi_regs_map_free(&si_ctlp->sictl_port_acc_handle);
778 ddi_regs_map_free(&si_ctlp->sictl_global_acc_handle);
782 pci_config_teardown(&si_ctlp->sictl_pci_conf_handle);
786 si_fm_fini(si_ctlp);
805 si_ctl_state_t *si_ctlp;
810 si_ctlp = ddi_get_soft_state(si_statep, instance);
816 mutex_enter(&si_ctlp->sictl_mutex);
819 si_disable_all_interrupts(si_ctlp);
821 mutex_exit(&si_ctlp->sictl_mutex);
823 if (si_unregister_sata_hba_tran(si_ctlp) != SI_SUCCESS) {
824 si_enable_all_interrupts(si_ctlp);
827 mutex_enter(&si_ctlp->sictl_mutex);
830 si_ctlp->sictl_flags |= SI_NO_TIMEOUTS;
831 (void) untimeout(si_ctlp->sictl_timeout_id);
832 si_ctlp->sictl_flags &= ~SI_NO_TIMEOUTS;
835 si_ctlp->sictl_flags |= SI_DETACH;
836 si_deinitialize_controller(si_ctlp);
837 si_ctlp->sictl_flags &= ~SI_DETACH;
840 mutex_exit(&si_ctlp->sictl_mutex);
841 mutex_destroy(&si_ctlp->sictl_mutex);
844 si_rem_intrs(si_ctlp);
847 ddi_regs_map_free(&si_ctlp->sictl_port_acc_handle);
848 ddi_regs_map_free(&si_ctlp->sictl_global_acc_handle);
849 pci_config_teardown(&si_ctlp->sictl_pci_conf_handle);
852 si_fm_fini(si_ctlp);
865 mutex_enter(&si_ctlp->sictl_mutex);
879 if (pm_busy_component(si_ctlp->sictl_devinfop, 0) ==
881 mutex_exit(&si_ctlp->sictl_mutex);
882 (void) pm_raise_power(si_ctlp->sictl_devinfop, 0,
884 mutex_enter(&si_ctlp->sictl_mutex);
887 si_deinitialize_controller(si_ctlp);
889 si_ctlp->sictl_flags |= SI_NO_TIMEOUTS;
890 (void) untimeout(si_ctlp->sictl_timeout_id);
891 si_ctlp->sictl_flags &= ~SI_NO_TIMEOUTS;
893 SIDBG_C(SIDBG_POWER, si_ctlp, "si3124%d: DDI_SUSPEND",
896 mutex_exit(&si_ctlp->sictl_mutex);
914 si_ctl_state_t *si_ctlp;
920 si_ctlp = ddi_get_soft_state(si_statep, instance);
922 if (si_ctlp == NULL) {
926 SIDBG_C(SIDBG_ENTRY, si_ctlp, "si_power enter", NULL);
928 mutex_enter(&si_ctlp->sictl_mutex);
929 old_level = si_ctlp->sictl_power_level;
933 pci_config_put16(si_ctlp->sictl_pci_conf_handle,
934 PM_CSR(si_ctlp->sictl_devid), PCI_PMCSR_D0);
938 si_ctlp->sictl_power_level = PM_LEVEL_D0;
939 (void) pci_restore_config_regs(si_ctlp->sictl_devinfop);
941 SIDBG_C(SIDBG_POWER, si_ctlp,
950 if (si_ctlp->sictl_flags & SI_ATTACH)
953 mutex_exit(&si_ctlp->sictl_mutex);
954 (void) si_initialize_controller(si_ctlp);
955 mutex_enter(&si_ctlp->sictl_mutex);
957 si_ctlp->sictl_timeout_id = timeout(
959 (caddr_t)si_ctlp, si_watchdog_tick);
963 si_ctlp->sictl_sata_hba_tran->sata_tran_hba_dip,
965 SIDBG_C(SIDBG_EVENT|SIDBG_POWER, si_ctlp,
971 if (!(si_ctlp->sictl_flags & SI_DETACH)) {
972 si_ctlp->sictl_flags |= SI_NO_TIMEOUTS;
973 (void) untimeout(si_ctlp->sictl_timeout_id);
974 si_ctlp->sictl_flags &= ~SI_NO_TIMEOUTS;
976 si_deinitialize_controller(si_ctlp);
978 si_ctlp->sictl_power_level = PM_LEVEL_D3;
981 (void) pci_save_config_regs(si_ctlp->sictl_devinfop);
983 pci_config_put16(si_ctlp->sictl_pci_conf_handle,
984 PM_CSR(si_ctlp->sictl_devid), PCI_PMCSR_D3HOT);
986 SIDBG_C(SIDBG_POWER, si_ctlp, "si3124%d: turning power OFF. "
992 SIDBG_C(SIDBG_POWER, si_ctlp, "si3124%d: turning power OFF. "
998 mutex_exit(&si_ctlp->sictl_mutex);
1016 si_ctl_state_t *si_ctlp;
1025 si_ctlp = ddi_get_soft_state(si_statep, instance);
1026 if (si_ctlp != NULL) {
1027 *result = si_ctlp->sictl_devinfop;
1048 si_register_sata_hba_tran(si_ctl_state_t *si_ctlp)
1052 SIDBG_C(SIDBG_ENTRY, si_ctlp,
1055 mutex_enter(&si_ctlp->sictl_mutex);
1061 sata_hba_tran->sata_tran_hba_dip = si_ctlp->sictl_devinfop;
1074 sata_hba_tran->sata_tran_hba_num_cports = si_ctlp->sictl_num_ports;
1086 mutex_exit(&si_ctlp->sictl_mutex);
1089 if (sata_hba_attach(si_ctlp->sictl_devinfop, sata_hba_tran, DDI_ATTACH)
1095 mutex_enter(&si_ctlp->sictl_mutex);
1096 si_ctlp->sictl_sata_hba_tran = sata_hba_tran;
1097 mutex_exit(&si_ctlp->sictl_mutex);
1107 si_unregister_sata_hba_tran(si_ctl_state_t *si_ctlp)
1111 if (sata_hba_detach(si_ctlp->sictl_devinfop, DDI_DETACH) !=
1117 kmem_free((void *)si_ctlp->sictl_sata_hba_tran,
1120 si_ctlp->sictl_sata_hba_tran = NULL;
1137 si_ctl_state_t *si_ctlp;
1145 si_ctlp = ddi_get_soft_state(si_statep, ddi_get_instance(dip));
1147 SIDBG_C(SIDBG_ENTRY, si_ctlp,
1157 mutex_enter(&si_ctlp->sictl_mutex);
1158 si_portp = si_ctlp->sictl_ports[cport];
1159 mutex_exit(&si_ctlp->sictl_mutex);
1210 (void) si_read_portmult_reg(si_ctlp, si_portp, cport,
1212 (void) si_read_portmult_reg(si_ctlp, si_portp, cport,
1214 (void) si_read_portmult_reg(si_ctlp, si_portp, cport,
1216 (void) si_read_portmult_reg(si_ctlp, si_portp, cport,
1219 fill_dev_sregisters(si_ctlp, cport, sd);
1247 si_ctl_state_t *si_ctlp;
1253 si_ctlp = ddi_get_soft_state(si_statep, ddi_get_instance(dip));
1254 mutex_enter(&si_ctlp->sictl_mutex);
1255 si_portp = si_ctlp->sictl_ports[cport];
1256 mutex_exit(&si_ctlp->sictl_mutex);
1271 fill_dev_sregisters(si_ctlp, cport, &spkt->satapkt_device);
1304 if ((slot = si_deliver_satapkt(si_ctlp, si_portp, cport, spkt))
1316 si_poll_cmd(si_ctlp, si_portp, cport, slot, spkt);
1367 si_mop_commands(si_ctl_state_t *si_ctlp,
1420 si_copy_out_regs(&satapkt->satapkt_cmd, si_ctlp,
1467 si_copy_out_regs(&satapkt->satapkt_cmd, si_ctlp,
1478 si_read_log_ext(si_ctlp, si_portp, port);
1589 si_ctl_state_t *si_ctlp;
1592 si_ctlp = ddi_get_soft_state(si_statep, ddi_get_instance(dip));
1593 mutex_enter(&si_ctlp->sictl_mutex);
1594 si_portp = si_ctlp->sictl_ports[port];
1595 mutex_exit(&si_ctlp->sictl_mutex);
1620 fill_dev_sregisters(si_ctlp, port, &spkt->satapkt_device);
1642 fill_dev_sregisters(si_ctlp, port,
1651 slot_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
1652 (uint32_t *)(PORT_SLOT_STATUS(si_ctlp, port)));
1653 (void) si_reset_dport_wait_till_ready(si_ctlp, si_portp,
1667 si_mop_commands(si_ctlp,
1676 fill_dev_sregisters(si_ctlp, port, &spkt->satapkt_device);
1691 si_ctl_state_t *si_ctlp,
1704 slot_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
1705 (uint32_t *)(PORT_SLOT_STATUS(si_ctlp, port)));
1712 si_mop_commands(si_ctlp,
1730 si_ctl_state_t *si_ctlp;
1736 si_ctlp = ddi_get_soft_state(si_statep, ddi_get_instance(dip));
1737 SIDBG_C(SIDBG_RESET, si_ctlp,
1743 mutex_enter(&si_ctlp->sictl_mutex);
1744 si_portp = si_ctlp->sictl_ports[port];
1745 mutex_exit(&si_ctlp->sictl_mutex);
1761 retval = si_reset_dport_wait_till_ready(si_ctlp, si_portp, port,
1763 si_reject_all_reset_pkts(si_ctlp, si_portp, port);
1769 mutex_enter(&si_ctlp->sictl_mutex);
1770 si_portp = si_ctlp->sictl_ports[port];
1771 mutex_exit(&si_ctlp->sictl_mutex);
1794 retval = si_reset_dport_wait_till_ready(si_ctlp, si_portp, port,
1796 si_reject_all_reset_pkts(si_ctlp, si_portp, port);
1802 for (i = 0; i < si_ctlp->sictl_num_ports; i++) {
1803 mutex_enter(&si_ctlp->sictl_mutex);
1804 si_portp = si_ctlp->sictl_ports[i];
1805 mutex_exit(&si_ctlp->sictl_mutex);
1822 retval = si_reset_dport_wait_till_ready(si_ctlp,
1828 si_reject_all_reset_pkts(si_ctlp, si_portp, i);
1856 si_ctl_state_t *si_ctlp;
1860 si_ctlp = ddi_get_soft_state(si_statep, ddi_get_instance(dip));
1862 mutex_enter(&si_ctlp->sictl_mutex);
1863 si_portp = si_ctlp->sictl_ports[port];
1864 mutex_exit(&si_ctlp->sictl_mutex);
1870 si_enable_port_interrupts(si_ctlp, port);
1877 (void) si_reset_dport_wait_till_ready(si_ctlp, si_portp, port,
1884 fill_dev_sregisters(si_ctlp, port, satadev);
1898 si_ctl_state_t *si_ctlp;
1902 si_ctlp = ddi_get_soft_state(si_statep, ddi_get_instance(dip));
1904 mutex_enter(&si_ctlp->sictl_mutex);
1905 si_portp = si_ctlp->sictl_ports[port];
1906 mutex_exit(&si_ctlp->sictl_mutex);
1925 si_disable_port_interrupts(si_ctlp, port);
1929 fill_dev_sregisters(si_ctlp, port, satadev);
1946 si_alloc_port_state(si_ctl_state_t *si_ctlp, int port)
1950 si_ctlp->sictl_ports[port] = (si_port_state_t *)kmem_zalloc(
1953 si_portp = si_ctlp->sictl_ports[port];
1955 (void *)(uintptr_t)si_ctlp->sictl_intr_pri);
1959 if (si_alloc_prbpool(si_ctlp, port)) {
1961 kmem_free(si_ctlp->sictl_ports[port], sizeof (si_port_state_t));
1964 if (si_alloc_sgbpool(si_ctlp, port)) {
1965 si_dealloc_prbpool(si_ctlp, port);
1967 kmem_free(si_ctlp->sictl_ports[port], sizeof (si_port_state_t));
1986 si_dealloc_port_state(si_ctl_state_t *si_ctlp, int port)
1989 si_portp = si_ctlp->sictl_ports[port];
1993 si_dealloc_sgbpool(si_ctlp, port);
1994 si_dealloc_prbpool(si_ctlp, port);
1999 kmem_free(si_ctlp->sictl_ports[port], sizeof (si_port_state_t));
2007 si_alloc_sgbpool(si_ctl_state_t *si_ctlp, int port)
2016 si_portp = si_ctlp->sictl_ports[port];
2019 if (ddi_dma_alloc_handle(si_ctlp->sictl_devinfop,
2069 si_dealloc_sgbpool(si_ctl_state_t *si_ctlp, int port)
2071 si_port_state_t *si_portp = si_ctlp->sictl_ports[port];
2088 si_alloc_prbpool(si_ctl_state_t *si_ctlp, int port)
2096 si_portp = si_ctlp->sictl_ports[port];
2099 if (ddi_dma_alloc_handle(si_ctlp->sictl_devinfop,
2148 si_dealloc_prbpool(si_ctl_state_t *si_ctlp, int port)
2150 si_port_state_t *si_portp = si_ctlp->sictl_ports[port];
2171 si_ctl_state_t *si_ctlp,
2187 slot = si_claim_free_slot(si_ctlp, si_portp, port);
2225 POST_PRB_ADDR(si_ctlp, si_portp, port, slot);
2230 slot_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
2231 (uint32_t *)(PORT_SLOT_STATUS(si_ctlp, port)));
2252 signature = ddi_get32(si_ctlp->sictl_port_acc_handle,
2253 (uint32_t *)(PORT_SIGNATURE_MSB(si_ctlp, port, slot)));
2255 signature |= (0xff & ddi_get32(si_ctlp->sictl_port_acc_handle,
2256 (uint32_t *)(PORT_SIGNATURE_LSB(si_ctlp,
2277 (void) si_enumerate_port_multiplier(si_ctlp,
2281 si_init_port(si_ctlp, port);
2290 si_init_port(si_ctlp, port);
2304 si_init_port(si_ctlp, port);
2333 si_ctl_state_t *si_ctlp,
2354 slot_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
2355 (uint32_t *)(PORT_SLOT_STATUS(si_ctlp, port)));
2394 port_intr_status = ddi_get32(si_ctlp->sictl_global_acc_handle,
2395 (uint32_t *)PORT_INTERRUPT_STATUS(si_ctlp, port));
2403 (void) si_intr_command_error(si_ctlp, si_portp, port);
2433 ddi_put32(si_ctlp->sictl_port_acc_handle,
2434 (uint32_t *)(PORT_INTERRUPT_STATUS(si_ctlp,
2445 si_copy_out_regs(&satapkt->satapkt_cmd, si_ctlp, port, slot);
2481 si_claim_free_slot(si_ctl_state_t *si_ctlp, si_port_state_t *si_portp, int port)
2518 si_ctl_state_t *si_ctlp,
2536 slot = si_claim_free_slot(si_ctlp, si_portp, port);
2553 fill_dev_sregisters(si_ctlp, port, &spkt->satapkt_device);
2816 ddi_put32(si_ctlp->sictl_port_acc_handle,
2817 (uint32_t *)PORT_CONTROL_SET(si_ctlp, port),
2820 ddi_put32(si_ctlp->sictl_port_acc_handle,
2821 (uint32_t *)PORT_CONTROL_CLEAR(si_ctlp, port),
2827 ddi_put32(si_ctlp->sictl_port_acc_handle,
2828 (uint32_t *)PORT_CONTROL_CLEAR(si_ctlp, port),
2876 POST_PRB_ADDR(si_ctlp, si_portp, port, slot);
2892 si_initialize_controller(si_ctl_state_t *si_ctlp)
2901 SIDBG_C(SIDBG_INIT, si_ctlp,
2904 mutex_enter(&si_ctlp->sictl_mutex);
2907 ddi_put32(si_ctlp->sictl_global_acc_handle,
2908 (uint32_t *)GLOBAL_CONTROL_REG(si_ctlp),
2911 for (port = 0; port < si_ctlp->sictl_num_ports; port++) {
2913 if (si_ctlp->sictl_flags & SI_ATTACH) {
2919 if (si_alloc_port_state(si_ctlp, port)) {
2920 mutex_exit(&si_ctlp->sictl_mutex);
2925 si_portp = si_ctlp->sictl_ports[port];
2927 si_portp->siport_ctlp = si_ctlp;
2931 ddi_put32(si_ctlp->sictl_port_acc_handle,
2932 (uint32_t *)PORT_CONTROL_SET(si_ctlp, port),
2934 ddi_put32(si_ctlp->sictl_port_acc_handle,
2935 (uint32_t *)PORT_CONTROL_CLEAR(si_ctlp, port),
2943 ddi_put32(si_ctlp->sictl_port_acc_handle,
2944 (uint32_t *)PORT_INTERRUPT_ENABLE_SET(si_ctlp, port),
2956 si_enable_port_interrupts(si_ctlp, port);
2972 SControl = ddi_get32(si_ctlp->sictl_port_acc_handle,
2973 (uint32_t *)PORT_SCONTROL(si_ctlp, port));
2975 ddi_put32(si_ctlp->sictl_port_acc_handle,
2976 (uint32_t *)(PORT_SCONTROL(si_ctlp, port)),
2986 SControl = ddi_get32(si_ctlp->sictl_port_acc_handle,
2987 (uint32_t *)PORT_SCONTROL(si_ctlp, port));
2989 ddi_put32(si_ctlp->sictl_port_acc_handle,
2990 (uint32_t *)(PORT_SCONTROL(si_ctlp, port)),
3003 SStatus = ddi_get32(si_ctlp->sictl_port_acc_handle,
3004 (uint32_t *)PORT_SSTATUS(si_ctlp, port));
3046 si_ctlp->sictl_ports[port]->siport_port_type =
3055 port_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
3056 (uint32_t *)PORT_STATUS(si_ctlp, port));
3076 if (si_ctlp->sictl_flags & SI_ATTACH) {
3083 si_find_dev_signature(si_ctlp, si_portp, port,
3087 si_ctlp->sictl_ports[port]->siport_port_type =
3092 if (si_check_ctl_handles(si_ctlp) != DDI_SUCCESS ||
3094 ddi_fm_service_impact(si_ctlp->sictl_devinfop,
3097 mutex_exit(&si_ctlp->sictl_mutex);
3104 mutex_exit(&si_ctlp->sictl_mutex);
3115 si_deinitialize_controller(si_ctl_state_t *si_ctlp)
3119 _NOTE(ASSUMING_PROTECTED(si_ctlp))
3121 SIDBG_C(SIDBG_INIT, si_ctlp,
3125 si_disable_all_interrupts(si_ctlp);
3127 if (si_ctlp->sictl_flags & SI_DETACH) {
3131 for (port = 0; port < si_ctlp->sictl_num_ports; port++) {
3132 si_dealloc_port_state(si_ctlp, port);
3145 si_init_port(si_ctl_state_t *si_ctlp, int port)
3148 SIDBG_C(SIDBG_INIT, si_ctlp,
3153 ddi_put32(si_ctlp->sictl_port_acc_handle,
3154 (uint32_t *)PORT_CONTROL_SET(si_ctlp, port),
3163 ddi_put32(si_ctlp->sictl_port_acc_handle,
3164 (uint32_t *)PORT_CONTROL_CLEAR(si_ctlp, port),
3168 ddi_put32(si_ctlp->sictl_port_acc_handle,
3169 (uint32_t *)(PORT_INTERRUPT_STATUS(si_ctlp, port)),
3184 si_ctl_state_t *si_ctlp,
3202 ddi_put32(si_ctlp->sictl_port_acc_handle,
3203 (uint32_t *)PORT_CONTROL_SET(si_ctlp, port),
3210 if (si_read_portmult_reg(si_ctlp, si_portp, port, PORTMULT_CONTROL_PORT,
3226 if (si_read_portmult_reg(si_ctlp, si_portp, port, pmport,
3233 if (si_write_portmult_reg(si_ctlp, si_portp, port, pmport,
3243 if (si_write_portmult_reg(si_ctlp, si_portp, port, pmport,
3251 if (si_read_portmult_reg(si_ctlp, si_portp, port,
3303 if (si_read_portmult_reg(si_ctlp, si_portp, port,
3309 if (si_write_portmult_reg(si_ctlp, si_portp, port,
3316 si_find_dev_signature(si_ctlp, si_portp, port, pmport);
3335 si_ctl_state_t *si_ctlp,
3355 slot = si_claim_free_slot(si_ctlp, si_portp, port);
3390 POST_PRB_ADDR(si_ctlp, si_portp, port, slot);
3394 slot_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
3395 (uint32_t *)(PORT_SLOT_STATUS(si_ctlp, port)));
3422 prb_word_ptr[i] = ddi_get32(si_ctlp->sictl_port_acc_handle,
3423 (uint32_t *)(PORT_LRAM(si_ctlp, port, slot)+i*4));
3426 if (si_check_ctl_handles(si_ctlp) != DDI_SUCCESS ||
3428 ddi_fm_service_impact(si_ctlp->sictl_devinfop,
3456 si_ctl_state_t *si_ctlp,
3477 slot = si_claim_free_slot(si_ctlp, si_portp, port);
3517 POST_PRB_ADDR(si_ctlp, si_portp, port, slot);
3521 slot_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
3522 (uint32_t *)(PORT_SLOT_STATUS(si_ctlp, port)));
3549 prb_word_ptr[i] = ddi_get32(si_ctlp->sictl_port_acc_handle,
3550 (uint32_t *)(PORT_LRAM(si_ctlp, port, slot)+i*4));
3553 if (si_check_ctl_handles(si_ctlp) != DDI_SUCCESS ||
3555 ddi_fm_service_impact(si_ctlp->sictl_devinfop,
3617 si_ctl_state_t *si_ctlp = (si_ctl_state_t *)(void *)arg1;
3623 global_intr_status = ddi_get32(si_ctlp->sictl_global_acc_handle,
3624 (uint32_t *)GLOBAL_INTERRUPT_STATUS(si_ctlp));
3626 SIDBG_C(SIDBG_INTR, si_ctlp,
3630 if (si_check_acc_handle(si_ctlp->sictl_global_acc_handle) !=
3632 ddi_fm_service_impact(si_ctlp->sictl_devinfop,
3643 for (port = 0; port < si_ctlp->sictl_num_ports; port++) {
3650 mutex_enter(&si_ctlp->sictl_mutex);
3651 si_portp = si_ctlp->sictl_ports[port];
3652 mutex_exit(&si_ctlp->sictl_mutex);
3654 port_intr_status = ddi_get32(si_ctlp->sictl_global_acc_handle,
3655 (uint32_t *)PORT_INTERRUPT_STATUS(si_ctlp, port));
3663 (void) si_intr_command_complete(si_ctlp, si_portp,
3667 if (si_check_ctl_handles(si_ctlp) != DDI_SUCCESS ||
3669 ddi_fm_service_impact(si_ctlp->sictl_devinfop,
3671 si_schedule_port_initialize(si_ctlp, si_portp,
3677 ddi_put32(si_ctlp->sictl_port_acc_handle,
3678 (uint32_t *)(PORT_INTERRUPT_STATUS(si_ctlp, port)),
3689 si_schedule_intr_command_error(si_ctlp, si_portp, port);
3693 (void) si_intr_port_ready(si_ctlp, si_portp, port);
3697 (void) si_intr_pwr_change(si_ctlp, si_portp, port);
3701 (void) si_intr_phy_ready_change(si_ctlp, si_portp,
3706 (void) si_intr_comwake_rcvd(si_ctlp, si_portp,
3711 (void) si_intr_unrecognised_fis(si_ctlp, si_portp,
3716 (void) si_intr_dev_xchanged(si_ctlp, si_portp, port);
3720 (void) si_intr_decode_err_threshold(si_ctlp, si_portp,
3725 (void) si_intr_crc_err_threshold(si_ctlp, si_portp,
3730 (void) si_intr_handshake_err_threshold(si_ctlp,
3735 (void) si_intr_set_devbits_notify(si_ctlp, si_portp,
3753 si_ctl_state_t *si_ctlp,
3768 slot_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
3769 (uint32_t *)(PORT_SLOT_STATUS(si_ctlp, port)));
3797 si_copy_out_regs(&satapkt->satapkt_cmd, si_ctlp, port,
3828 si_ctl_state_t *si_ctlp,
3839 "args->si_ctlp != NULL");
3844 args->siea_ctlp = si_ctlp;
3860 si_ctl_state_t *si_ctlp;
3868 si_ctlp = args->siea_ctlp;
3873 (void) si_intr_command_error(si_ctlp, si_portp, port);
3888 si_ctl_state_t *si_ctlp,
3895 command_error = ddi_get32(si_ctlp->sictl_port_acc_handle,
3896 (uint32_t *)(PORT_COMMAND_ERROR(si_ctlp, port)));
3908 slot_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
3909 (uint32_t *)(PORT_SLOT_STATUS(si_ctlp, port)));
3911 si_log_error_message(si_ctlp, port, command_error);
3916 si_error_recovery_DEVICEERROR(si_ctlp, si_portp, port);
3920 si_fm_ereport(si_ctlp, DDI_FM_DEVICE_INTERN_CORR, "SBD error");
3921 si_error_recovery_SDBERROR(si_ctlp, si_portp, port);
3922 ddi_fm_service_impact(si_ctlp->sictl_devinfop,
3927 si_fm_ereport(si_ctlp, DDI_FM_DEVICE_INTERN_CORR,
3929 si_error_recovery_DATAFISERROR(si_ctlp, si_portp, port);
3930 ddi_fm_service_impact(si_ctlp->sictl_devinfop,
3935 si_fm_ereport(si_ctlp, DDI_FM_DEVICE_INTERN_CORR,
3937 si_error_recovery_SENDFISERROR(si_ctlp, si_portp, port);
3938 ddi_fm_service_impact(si_ctlp->sictl_devinfop,
3943 si_fm_ereport(si_ctlp, DDI_FM_DEVICE_INTERN_CORR,
3945 si_error_recovery_default(si_ctlp, si_portp, port);
3946 ddi_fm_service_impact(si_ctlp->sictl_devinfop,
3978 si_mop_commands(si_ctlp,
4011 si_ctl_state_t *si_ctlp,
4026 ddi_put32(si_ctlp->sictl_port_acc_handle,
4027 (uint32_t *)PORT_CONTROL_SET(si_ctlp, port),
4030 port_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
4031 (uint32_t *)PORT_STATUS(si_ctlp, port));
4034 command_error = ddi_get32(si_ctlp->sictl_port_acc_handle,
4035 (uint32_t *)(PORT_COMMAND_ERROR(si_ctlp, port)));
4045 slot_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
4046 (uint32_t *)(PORT_SLOT_STATUS(si_ctlp, port)));
4060 ddi_put32(si_ctlp->sictl_port_acc_handle,
4061 (uint32_t *)PORT_CONTROL_SET(si_ctlp, port),
4064 port_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
4065 (uint32_t *)PORT_STATUS(si_ctlp, port));
4068 si_ctlp->sictl_port_acc_handle,
4069 (uint32_t *)(PORT_COMMAND_ERROR(si_ctlp,
4100 ddi_put32(si_ctlp->sictl_port_acc_handle,
4101 (uint32_t *)PORT_CONTROL_CLEAR(si_ctlp, port),
4116 si_ctl_state_t *si_ctlp,
4130 si_recover_portmult_errors(si_ctlp, si_portp, port);
4132 port_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
4133 (uint32_t *)PORT_STATUS(si_ctlp, port));
4139 (void) si_initialize_port_wait_till_ready(si_ctlp, port);
4152 si_ctl_state_t *si_ctlp,
4166 si_recover_portmult_errors(si_ctlp, si_portp, port);
4168 port_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
4169 (uint32_t *)PORT_STATUS(si_ctlp, port));
4175 (void) si_initialize_port_wait_till_ready(si_ctlp, port);
4187 si_ctl_state_t *si_ctlp,
4202 port_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
4203 (uint32_t *)PORT_STATUS(si_ctlp, port));
4206 (void) si_reset_dport_wait_till_ready(si_ctlp, si_portp, port,
4215 si_error_recovery_DEVICEERROR(si_ctlp, si_portp, port);
4227 si_ctl_state_t *si_ctlp,
4241 si_recover_portmult_errors(si_ctlp, si_portp, port);
4243 port_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
4244 (uint32_t *)PORT_STATUS(si_ctlp, port));
4247 (void) si_reset_dport_wait_till_ready(si_ctlp, si_portp, port,
4260 si_ctl_state_t *si_ctlp,
4273 port_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
4274 (uint32_t *)PORT_STATUS(si_ctlp, port));
4278 (void) si_reset_dport_wait_till_ready(si_ctlp, si_portp, port,
4289 si_read_log_ext(si_ctl_state_t *si_ctlp, si_port_state_t *si_portp, int port)
4304 slot = si_claim_free_slot(si_ctlp, si_portp, port);
4337 POST_PRB_ADDR(si_ctlp, si_portp, port, slot);
4341 slot_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
4342 (uint32_t *)(PORT_SLOT_STATUS(si_ctlp, port)));
4368 (void) si_initialize_port_wait_till_ready(si_ctlp, port);
4381 prb_word_ptr[i] = ddi_get32(si_ctlp->sictl_port_acc_handle,
4382 (uint32_t *)(PORT_LRAM(si_ctlp, port, slot)+i*4));
4385 if (si_check_ctl_handles(si_ctlp) != DDI_SUCCESS ||
4387 ddi_fm_service_impact(si_ctlp->sictl_devinfop,
4403 si_log_error_message(si_ctl_state_t *si_ctlp, int port, uint32_t command_error)
4407 _NOTE(ARGUNUSED(si_ctlp))
4412 si_port_state_t *si_portp = si_ctlp->sictl_ports[port];
4517 _NOTE(ARGUNUSED(si_ctlp))
4535 si_ctl_state_t *si_ctlp,
4552 si_ctl_state_t *si_ctlp,
4566 si_ctl_state_t *si_ctlp,
4578 mutex_enter(&si_ctlp->sictl_mutex);
4579 if ((si_ctlp->sictl_sata_hba_tran == NULL) || (si_portp == NULL)) {
4581 mutex_exit(&si_ctlp->sictl_mutex);
4585 mutex_exit(&si_ctlp->sictl_mutex);
4590 SStatus = ddi_get32(si_ctlp->sictl_port_acc_handle,
4591 (uint32_t *)PORT_SSTATUS(si_ctlp, port));
4625 si_ctlp->sictl_sata_hba_tran->\
4636 si_find_dev_signature(si_ctlp, si_portp, port,
4646 si_ctlp->sictl_sata_hba_tran->\
4663 si_ctlp->sictl_sata_hba_tran->
4692 si_ctl_state_t *si_ctlp,
4710 si_ctl_state_t *si_ctlp,
4728 si_ctl_state_t *si_ctlp,
4747 si_ctl_state_t *si_ctlp,
4765 si_ctl_state_t *si_ctlp,
4783 si_ctl_state_t *si_ctlp,
4801 si_ctl_state_t *si_ctlp,
4818 si_enable_port_interrupts(si_ctl_state_t *si_ctlp, int port)
4821 si_port_state_t *si_portp = si_ctlp->sictl_ports[port];
4824 mask = ddi_get32(si_ctlp->sictl_global_acc_handle,
4825 (uint32_t *)GLOBAL_CONTROL_REG(si_ctlp));
4835 ddi_put32(si_ctlp->sictl_global_acc_handle,
4836 (uint32_t *)GLOBAL_CONTROL_REG(si_ctlp),
4844 si_enable_all_interrupts(si_ctl_state_t *si_ctlp)
4848 for (port = 0; port < si_ctlp->sictl_num_ports; port++) {
4849 si_enable_port_interrupts(si_ctlp, port);
4860 si_disable_port_interrupts(si_ctl_state_t *si_ctlp, int port)
4865 mask = ddi_get32(si_ctlp->sictl_global_acc_handle,
4866 (uint32_t *)GLOBAL_CONTROL_REG(si_ctlp));
4872 ddi_put32(si_ctlp->sictl_global_acc_handle,
4873 (uint32_t *)GLOBAL_CONTROL_REG(si_ctlp),
4882 si_disable_all_interrupts(si_ctl_state_t *si_ctlp)
4886 for (port = 0; port < si_ctlp->sictl_num_ports; port++) {
4887 si_disable_port_interrupts(si_ctlp, port);
4896 fill_dev_sregisters(si_ctl_state_t *si_ctlp, int port, sata_device_t *satadev)
4898 satadev->satadev_scr.sstatus = ddi_get32(si_ctlp->sictl_port_acc_handle,
4899 (uint32_t *)(PORT_SSTATUS(si_ctlp, port)));
4900 satadev->satadev_scr.serror = ddi_get32(si_ctlp->sictl_port_acc_handle,
4901 (uint32_t *)(PORT_SERROR(si_ctlp, port)));
4902 satadev->satadev_scr.sactive = ddi_get32(si_ctlp->sictl_port_acc_handle,
4903 (uint32_t *)(PORT_SACTIVE(si_ctlp, port)));
4905 ddi_get32(si_ctlp->sictl_port_acc_handle,
4906 (uint32_t *)(PORT_SCONTROL(si_ctlp, port)));
4914 si_add_legacy_intrs(si_ctl_state_t *si_ctlp)
4916 dev_info_t *devinfo = si_ctlp->sictl_devinfop;
4920 SIDBG_C(SIDBG_INIT, si_ctlp, "si_add_legacy_intrs", NULL);
4925 SIDBG_C(SIDBG_ERRS, si_ctlp,
4932 si_ctlp->sictl_intr_size = count * sizeof (ddi_intr_handle_t);
4933 si_ctlp->sictl_htable = kmem_zalloc(si_ctlp->sictl_intr_size, KM_SLEEP);
4936 rc = ddi_intr_alloc(devinfo, si_ctlp->sictl_htable, DDI_INTR_TYPE_FIXED,
4940 SIDBG_C(SIDBG_ERRS, si_ctlp,
4942 kmem_free(si_ctlp->sictl_htable, si_ctlp->sictl_intr_size);
4947 SIDBG_C(SIDBG_ERRS, si_ctlp,
4951 (void) ddi_intr_free(si_ctlp->sictl_htable[x]);
4954 kmem_free(si_ctlp->sictl_htable, si_ctlp->sictl_intr_size);
4958 si_ctlp->sictl_intr_cnt = actual;
4961 if (ddi_intr_get_pri(si_ctlp->sictl_htable[0],
4962 &si_ctlp->sictl_intr_pri) != DDI_SUCCESS) {
4963 SIDBG_C(SIDBG_ERRS, si_ctlp,
4967 (void) ddi_intr_free(si_ctlp->sictl_htable[x]);
4970 kmem_free(si_ctlp->sictl_htable, si_ctlp->sictl_intr_size);
4975 if (si_ctlp->sictl_intr_pri >= ddi_intr_get_hilevel_pri()) {
4976 SIDBG_C(SIDBG_ERRS, si_ctlp,
4980 (void) ddi_intr_free(si_ctlp->sictl_htable[x]);
4983 kmem_free(si_ctlp->sictl_htable, sizeof (ddi_intr_handle_t));
4990 if (ddi_intr_add_handler(si_ctlp->sictl_htable[x], si_intr,
4991 (caddr_t)si_ctlp, NULL) != DDI_SUCCESS) {
4992 SIDBG_C(SIDBG_ERRS, si_ctlp,
4996 (void) ddi_intr_free(si_ctlp->sictl_htable[y]);
4999 kmem_free(si_ctlp->sictl_htable,
5000 si_ctlp->sictl_intr_size);
5006 for (x = 0; x < si_ctlp->sictl_intr_cnt; x++) {
5007 (void) ddi_intr_enable(si_ctlp->sictl_htable[x]);
5017 si_add_msi_intrs(si_ctl_state_t *si_ctlp)
5019 dev_info_t *devinfo = si_ctlp->sictl_devinfop;
5023 SIDBG_C(SIDBG_INIT, si_ctlp, "si_add_msi_intrs", NULL);
5028 SIDBG_C(SIDBG_ERRS, si_ctlp,
5037 SIDBG_C(SIDBG_ERRS, si_ctlp,
5044 SIDBG_C(SIDBG_INIT, si_ctlp,
5050 si_ctlp->sictl_intr_size = count * sizeof (ddi_intr_handle_t);
5051 si_ctlp->sictl_htable = kmem_alloc(si_ctlp->sictl_intr_size, KM_SLEEP);
5054 rc = ddi_intr_alloc(devinfo, si_ctlp->sictl_htable, DDI_INTR_TYPE_MSI,
5058 SIDBG_C(SIDBG_ERRS, si_ctlp,
5060 kmem_free(si_ctlp->sictl_htable, si_ctlp->sictl_intr_size);
5066 SIDBG_C(SIDBG_INIT, si_ctlp,
5070 si_ctlp->sictl_intr_cnt = actual;
5075 if (ddi_intr_get_pri(si_ctlp->sictl_htable[0],
5076 &si_ctlp->sictl_intr_pri) != DDI_SUCCESS) {
5077 SIDBG_C(SIDBG_ERRS, si_ctlp, "ddi_intr_get_pri() failed", NULL);
5081 (void) ddi_intr_free(si_ctlp->sictl_htable[y]);
5084 kmem_free(si_ctlp->sictl_htable, si_ctlp->sictl_intr_size);
5089 if (si_ctlp->sictl_intr_pri >= ddi_intr_get_hilevel_pri()) {
5090 SIDBG_C(SIDBG_ERRS, si_ctlp,
5095 (void) ddi_intr_free(si_ctlp->sictl_htable[y]);
5098 kmem_free(si_ctlp->sictl_htable, sizeof (ddi_intr_handle_t));
5105 if (ddi_intr_add_handler(si_ctlp->sictl_htable[x], si_intr,
5106 (caddr_t)si_ctlp, NULL) != DDI_SUCCESS) {
5107 SIDBG_C(SIDBG_ERRS, si_ctlp,
5112 (void) ddi_intr_free(si_ctlp->sictl_htable[y]);
5115 kmem_free(si_ctlp->sictl_htable,
5116 si_ctlp->sictl_intr_size);
5121 (void) ddi_intr_get_cap(si_ctlp->sictl_htable[0],
5122 &si_ctlp->sictl_intr_cap);
5124 if (si_ctlp->sictl_intr_cap & DDI_INTR_FLAG_BLOCK) {
5126 (void) ddi_intr_block_enable(si_ctlp->sictl_htable,
5127 si_ctlp->sictl_intr_cnt);
5130 for (x = 0; x < si_ctlp->sictl_intr_cnt; x++) {
5131 (void) ddi_intr_enable(si_ctlp->sictl_htable[x]);
5143 si_rem_intrs(si_ctl_state_t *si_ctlp)
5147 SIDBG_C(SIDBG_INIT, si_ctlp, "si_rem_intrs entered", NULL);
5150 if ((si_ctlp->sictl_intr_type == DDI_INTR_TYPE_MSI) &&
5151 (si_ctlp->sictl_intr_cap & DDI_INTR_FLAG_BLOCK)) {
5153 (void) ddi_intr_block_disable(si_ctlp->sictl_htable,
5154 si_ctlp->sictl_intr_cnt);
5156 for (x = 0; x < si_ctlp->sictl_intr_cnt; x++) {
5157 (void) ddi_intr_disable(si_ctlp->sictl_htable[x]);
5162 for (x = 0; x < si_ctlp->sictl_intr_cnt; x++) {
5163 (void) ddi_intr_remove_handler(si_ctlp->sictl_htable[x]);
5164 (void) ddi_intr_free(si_ctlp->sictl_htable[x]);
5167 kmem_free(si_ctlp->sictl_htable, si_ctlp->sictl_intr_size);
5186 si_ctl_state_t *si_ctlp,
5201 ddi_put32(si_ctlp->sictl_port_acc_handle,
5202 (uint32_t *)PORT_CONTROL_SET(si_ctlp, port),
5206 ddi_put32(si_ctlp->sictl_port_acc_handle,
5207 (uint32_t *)PORT_CONTROL_CLEAR(si_ctlp, port),
5211 ddi_put32(si_ctlp->sictl_port_acc_handle,
5212 (uint32_t *)PORT_CONTROL_SET(si_ctlp, port),
5235 SControl = ddi_get32(si_ctlp->sictl_port_acc_handle,
5236 (uint32_t *)PORT_SCONTROL(si_ctlp, port));
5238 ddi_put32(si_ctlp->sictl_port_acc_handle,
5239 (uint32_t *)(PORT_SCONTROL(si_ctlp, port)),
5246 SControl = ddi_get32(si_ctlp->sictl_port_acc_handle,
5247 (uint32_t *)PORT_SCONTROL(si_ctlp, port));
5249 ddi_put32(si_ctlp->sictl_port_acc_handle,
5250 (uint32_t *)(PORT_SCONTROL(si_ctlp, port)),
5263 SStatus = ddi_get32(si_ctlp->sictl_port_acc_handle,
5264 (uint32_t *)PORT_SSTATUS(si_ctlp, port));
5297 port_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
5298 (uint32_t *)PORT_STATUS(si_ctlp, port));
5334 if (si_ctlp->sictl_sata_hba_tran) {
5336 si_ctlp->sictl_sata_hba_tran->sata_tran_hba_dip,
5365 ddi_get32(si_ctlp->sictl_port_acc_handle,
5366 (uint32_t *)PORT_INTERRUPT_ENABLE_SET(si_ctlp, port)));
5368 ddi_put32(si_ctlp->sictl_port_acc_handle,
5369 (uint32_t *)PORT_INTERRUPT_ENABLE_SET(si_ctlp, port),
5380 si_enable_port_interrupts(si_ctlp, port);
5385 port_intr_status = ddi_get32(si_ctlp->sictl_global_acc_handle,
5386 (uint32_t *)PORT_INTERRUPT_STATUS(si_ctlp, port));
5388 ddi_put32(si_ctlp->sictl_port_acc_handle,
5389 (uint32_t *)(PORT_INTERRUPT_STATUS(si_ctlp,
5409 si_ctl_state_t *si_ctlp,
5420 "args->si_ctlp != NULL");
5424 args->siea_ctlp = si_ctlp;
5438 si_ctl_state_t *si_ctlp;
5446 si_ctlp = args->siea_ctlp;
5449 (void) si_initialize_port_wait_till_ready(si_ctlp, port);
5468 si_initialize_port_wait_till_ready(si_ctl_state_t *si_ctlp, int port)
5473 si_port_state_t *si_portp = si_ctlp->sictl_ports[port];
5476 ddi_put32(si_ctlp->sictl_port_acc_handle,
5477 (uint32_t *)PORT_CONTROL_SET(si_ctlp, port),
5483 port_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
5484 (uint32_t *)PORT_STATUS(si_ctlp, port));
5506 SStatus = ddi_get32(si_ctlp->sictl_port_acc_handle,
5507 (uint32_t *)PORT_SSTATUS(si_ctlp, port));
5530 si_ctl_state_t *si_ctlp,
5542 slot_status = ddi_get32(si_ctlp->sictl_port_acc_handle,
5543 (uint32_t *)(PORT_SLOT_STATUS(si_ctlp, port)));
5552 (void) si_initialize_port_wait_till_ready(si_ctlp, port);
5567 si_mop_commands(si_ctlp,
5586 si_watchdog_handler(si_ctl_state_t *si_ctlp)
5601 mutex_enter(&si_ctlp->sictl_mutex);
5602 SIDBG_C(SIDBG_ENTRY, si_ctlp,
5605 for (port = 0; port < si_ctlp->sictl_num_ports; port++) {
5607 si_portp = si_ctlp->sictl_ports[port];
5669 mutex_exit(&si_ctlp->sictl_mutex);
5670 si_timeout_pkts(si_ctlp, si_portp, port, timedout_tags);
5671 mutex_enter(&si_ctlp->sictl_mutex);
5679 if (!(si_ctlp->sictl_flags & SI_NO_TIMEOUTS)) {
5680 si_ctlp->sictl_timeout_id =
5682 (caddr_t)si_ctlp, si_watchdog_tick);
5684 mutex_exit(&si_ctlp->sictl_mutex);
5711 si_fm_init(si_ctl_state_t *si_ctlp)
5719 if (si_ctlp->fm_capabilities) {
5730 ddi_fm_init(si_ctlp->sictl_devinfop, &si_ctlp->fm_capabilities,
5733 if (si_ctlp->fm_capabilities == DDI_FM_NOT_CAPABLE)
5740 if (DDI_FM_EREPORT_CAP(si_ctlp->fm_capabilities) ||
5741 DDI_FM_ERRCB_CAP(si_ctlp->fm_capabilities)) {
5742 pci_ereport_setup(si_ctlp->sictl_devinfop);
5748 if (DDI_FM_ERRCB_CAP(si_ctlp->fm_capabilities)) {
5749 ddi_fm_handler_register(si_ctlp->sictl_devinfop,
5750 si_fm_error_cb, (void *) si_ctlp);
5760 si_fm_fini(si_ctl_state_t *si_ctlp)
5763 if (si_ctlp->fm_capabilities) {
5767 if (DDI_FM_ERRCB_CAP(si_ctlp->fm_capabilities)) {
5768 ddi_fm_handler_unregister(si_ctlp->sictl_devinfop);
5774 if (DDI_FM_EREPORT_CAP(si_ctlp->fm_capabilities) ||
5775 DDI_FM_ERRCB_CAP(si_ctlp->fm_capabilities)) {
5776 pci_ereport_teardown(si_ctlp->sictl_devinfop);
5780 ddi_fm_fini(si_ctlp->sictl_devinfop);
5810 si_check_ctl_handles(si_ctl_state_t *si_ctlp)
5812 if ((si_check_acc_handle(si_ctlp->sictl_pci_conf_handle)
5814 (si_check_acc_handle(si_ctlp->sictl_global_acc_handle)
5816 (si_check_acc_handle(si_ctlp->sictl_port_acc_handle)
5846 si_fm_ereport(si_ctl_state_t *si_ctlp, char *detail, char *payload)
5854 if (DDI_FM_EREPORT_CAP(si_ctlp->fm_capabilities)) {
5855 ddi_fm_ereport_post(si_ctlp->sictl_devinfop, buf, ena,
5867 si_log(si_ctl_state_t *si_ctlp, si_port_state_t *si_portp, char *fmt, ...)
5875 if (si_portp == NULL && si_ctlp == NULL) {
5882 if (si_portp == NULL && si_ctlp != NULL) {
5883 sata_vtrace_debug(si_ctlp->sictl_devinfop, fmt, ap);
5890 * si_portp is not NULL, but si_ctlp might be.
5913 si_copy_out_regs(sata_cmd_t *scmd, si_ctl_state_t *si_ctlp, uint8_t port,
5919 si_port_state_t *si_portp = si_ctlp->sictl_ports[port];
5926 prb = &si_ctlp->sictl_ports[port]->siport_prbpool[slot];
5932 si_ctlp->sictl_port_acc_handle,
5933 (uint32_t *)(PORT_LRAM(si_ctlp, port,
6023 si_clear_port(si_ctl_state_t *si_ctlp, int port)
6026 if (si_ctlp == NULL)
6032 ddi_put32(si_ctlp->sictl_port_acc_handle,
6033 (uint32_t *)PORT_CONTROL_SET(si_ctlp, port),
6037 ddi_put32(si_ctlp->sictl_port_acc_handle,
6038 (uint32_t *)PORT_CONTROL_CLEAR(si_ctlp, port),
6055 si_ctl_state_t *si_ctlp;
6060 si_ctlp = ddi_get_soft_state(si_statep, instance);
6061 if (si_ctlp == NULL)
6064 SIDBG_C(SIDBG_ENTRY, si_ctlp, "si_quiesce enter", NULL);
6069 for (port = 0; port < si_ctlp->sictl_num_ports; port++) {
6070 si_disable_port_interrupts(si_ctlp, port);
6071 (void) si_clear_port(si_ctlp, port);