Lines Matching defs:ahci_portp

1305 	ahci_port_t *ahci_portp;
1317 ahci_portp = ahci_ctlp->ahcictl_ports[port];
1319 mutex_enter(&ahci_portp->ahciport_mutex);
1329 (ahci_portp->ahciport_device_type != SATA_DTYPE_PMULT ||
1330 ahci_portp->ahciport_pmult_info == NULL)) {
1335 mutex_exit(&ahci_portp->ahciport_mutex);
1358 ahci_portp, &pmult_addr, sd);
1363 mutex_exit(&ahci_portp->ahciport_mutex);
1368 (void) ahci_probe_pmult(ahci_ctlp, ahci_portp, &addr);
1371 if (ahci_probe_pmport(ahci_ctlp, ahci_portp,
1379 port_state = AHCIPORT_GET_STATE(ahci_portp, &addr);
1415 device_type = AHCIPORT_GET_DEV_TYPE(ahci_portp, &addr);
1442 ASSERT(ahci_portp->ahciport_pmult_info != NULL);
1443 sd->satadev_add_info = ahci_portp->
1485 mutex_exit(&ahci_portp->ahciport_mutex);
1522 ahci_port_t *ahci_portp;
1535 ahci_portp = ahci_ctlp->ahcictl_ports[port];
1537 mutex_enter(&ahci_portp->ahciport_mutex);
1543 if (ahci_portp->ahciport_device_type != SATA_DTYPE_PMULT ||
1544 ahci_portp->ahciport_pmult_info == NULL) {
1554 mutex_exit(&ahci_portp->ahciport_mutex);
1558 if (!(AHCIPORT_GET_STATE(ahci_portp, &addr) &
1562 ahci_portp, &addr) != AHCI_SUCCESS) {
1565 AHCIPORT_GET_DEV_TYPE(ahci_portp, &addr);
1567 AHCIPORT_GET_STATE(ahci_portp, &addr);
1574 mutex_exit(&ahci_portp->ahciport_mutex);
1580 if (AHCIPORT_GET_STATE(ahci_portp, &addr) & SATA_PSTATE_FAILED ||
1581 AHCIPORT_GET_STATE(ahci_portp, &addr) & SATA_PSTATE_SHUTDOWN||
1582 AHCIPORT_GET_STATE(ahci_portp, &addr) & SATA_PSTATE_PWROFF) {
1590 ahci_portp->ahciport_port_state;
1597 mutex_exit(&ahci_portp->ahciport_mutex);
1601 if (AHCIPORT_GET_DEV_TYPE(ahci_portp, &addr) == SATA_DTYPE_NONE) {
1609 ahci_portp->ahciport_port_state;
1615 mutex_exit(&ahci_portp->ahciport_mutex);
1620 if (RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp)) {
1626 mutex_exit(&ahci_portp->ahciport_mutex);
1630 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_HOTPLUG) {
1635 mutex_exit(&ahci_portp->ahciport_mutex);
1657 ahci_portp->ahciport_reset_in_progress = 0;
1663 if (ahci_portp->ahciport_reset_in_progress &&
1670 mutex_exit(&ahci_portp->ahciport_mutex);
1682 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_MOPPING) {
1687 mutex_exit(&ahci_portp->ahciport_mutex);
1694 mutex_exit(&ahci_portp->ahciport_mutex);
1711 mutex_exit(&ahci_portp->ahciport_mutex);
1716 if (ahci_do_sync_start(ahci_ctlp, ahci_portp, &addr,
1722 if (ahci_deliver_satapkt(ahci_ctlp, ahci_portp, &addr, spkt)
1732 mutex_exit(&ahci_portp->ahciport_mutex);
1743 AHCIPORT_GET_DEV_TYPE(ahci_portp, &addr);
1745 AHCIPORT_GET_STATE(ahci_portp, &addr);
1747 mutex_exit(&ahci_portp->ahciport_mutex);
1753 mutex_exit(&ahci_portp->ahciport_mutex);
1767 ahci_do_sync_start(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
1780 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_POLLING;
1781 if ((rval = ahci_deliver_satapkt(ahci_ctlp, ahci_portp,
1783 ahci_portp->ahciport_flags &= ~ AHCI_PORT_FLAG_POLLING;
1791 mutex_exit(&ahci_portp->ahciport_mutex);
1794 ahci_port_intr(ahci_ctlp, ahci_portp, port);
1798 mutex_enter(&ahci_portp->ahciport_mutex);
1805 mutex_exit(&ahci_portp->ahciport_mutex);
1806 ahci_timeout_pkts(ahci_ctlp, ahci_portp,
1808 mutex_enter(&ahci_portp->ahciport_mutex);
1811 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_POLLING;
1815 if ((rval = ahci_deliver_satapkt(ahci_ctlp, ahci_portp,
1824 if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp))
1829 cv_wait(&ahci_portp->ahciport_cv,
1830 &ahci_portp->ahciport_mutex);
1862 ahci_claim_free_slot(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
1872 ahci_portp->ahciport_pending_tags,
1873 ahci_portp->ahciport_pending_ncq_tags);
1882 if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
1890 if (RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp)) {
1899 NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
1906 free_slots = (~ahci_portp->ahciport_pending_tags) &
1910 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
1928 if (AHCIPORT_DEV_TYPE(ahci_portp, addrp) == SATA_DTYPE_PMULT) {
1929 ASSERT(ahci_portp->ahciport_pmult_info != NULL);
1931 NCQ_CMD_IN_PROGRESS(ahci_portp) &&
1932 AHCIPORT_NCQ_PMPORT(ahci_portp) !=
1943 free_slots = (~ahci_portp->ahciport_pending_ncq_tags) &
1944 AHCI_NCQ_SLOT_MASK(ahci_portp);
1965 NON_NCQ_CMD_IN_PROGRESS(ahci_portp),
1966 NCQ_CMD_IN_PROGRESS(ahci_portp),
1993 ahci_portp->ahciport_pending_ncq_tags |= (0x1 << slot);
1995 ASSERT(ahci_portp->ahciport_pmult_info != NULL);
1996 AHCIPORT_NCQ_PMPORT(ahci_portp) = addrp->aa_pmport;
2000 ahci_portp->ahciport_pending_tags |= (0x1 << slot);
2019 ahci_deliver_satapkt(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
2065 if (ahci_portp->ahciport_max_ncq_tags == 0) {
2066 ahci_portp->ahciport_max_ncq_tags = ncq_qdepth;
2071 if (ncq_qdepth != ahci_portp->ahciport_max_ncq_tags) {
2079 ahci_portp->ahciport_max_ncq_tags,
2086 if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp))
2090 if (RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp))
2094 cmd_slot = ahci_claim_free_slot(ahci_ctlp, ahci_portp,
2106 cmd_table = ahci_portp->ahciport_cmd_tables[cmd_slot];
2219 ahci_portp->ahciport_prd_bytecounts[cmd_slot] = 0;
2229 ahci_portp->ahciport_prd_bytecounts[cmd_slot] +=
2235 ahci_portp->ahciport_prd_bytecounts[cmd_slot], cmd_slot);
2244 cmd_header = &ahci_portp->ahciport_cmd_list[cmd_slot];
2288 if (!ERR_RETRI_CMD_IN_PROGRESS(ahci_portp) &&
2289 !RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp))
2290 ahci_portp->ahciport_slot_pkts[cmd_slot] = spkt;
2295 ahci_portp->ahciport_slot_timeout[cmd_slot] = spkt->satapkt_time;
2301 if (ahci_portp->ahciport_slot_timeout[cmd_slot] <=
2303 ahci_portp->ahciport_slot_timeout[cmd_slot] +=
2351 ahci_portp->ahciport_cmd_tables_dma_handle[cmd_slot],
2356 (void) ddi_dma_sync(ahci_portp->ahciport_cmd_list_dma_handle,
2361 if ((ahci_check_dma_handle(ahci_portp->
2363 ahci_check_dma_handle(ahci_portp->
2405 ahci_port_t *ahci_portp;
2420 ahci_portp = ahci_ctlp->ahcictl_ports[port];
2421 mutex_enter(&ahci_portp->ahciport_mutex);
2427 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_MOPPING) {
2431 mutex_exit(&ahci_portp->ahciport_mutex);
2440 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_RDWR_PMULT) {
2444 mutex_exit(&ahci_portp->ahciport_mutex);
2448 if (ahci_portp->ahciport_port_state & SATA_PSTATE_FAILED |
2449 ahci_portp->ahciport_port_state & SATA_PSTATE_SHUTDOWN |
2450 ahci_portp->ahciport_port_state & SATA_PSTATE_PWROFF) {
2458 ahci_portp->ahciport_port_state;
2465 mutex_exit(&ahci_portp->ahciport_mutex);
2469 if (ahci_portp->ahciport_device_type == SATA_DTYPE_NONE) {
2477 ahci_portp->ahciport_port_state;
2483 mutex_exit(&ahci_portp->ahciport_mutex);
2488 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp))
2489 aborted_tags = ahci_portp->ahciport_pending_tags;
2490 else if (NCQ_CMD_IN_PROGRESS(ahci_portp))
2491 aborted_tags = ahci_portp->ahciport_pending_ncq_tags;
2503 if (ahci_portp->ahciport_slot_pkts[tmp_slot] == spkt) {
2516 mutex_exit(&ahci_portp->ahciport_mutex);
2523 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp))
2526 else if (NCQ_CMD_IN_PROGRESS(ahci_portp))
2530 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_MOPPING;
2531 ahci_portp->ahciport_mop_in_progress++;
2543 ahci_portp, port, NULL, NULL);
2553 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp))
2554 finished_tags = ahci_portp->ahciport_pending_tags &
2556 else if (NCQ_CMD_IN_PROGRESS(ahci_portp))
2557 finished_tags = ahci_portp->ahciport_pending_ncq_tags &
2558 ~slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
2563 ahci_portp,
2571 mutex_exit(&ahci_portp->ahciport_mutex);
2585 ahci_port_t *ahci_portp, ahci_addr_t *addrp)
2601 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_MOPPING) {
2608 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
2612 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
2615 reset_tags = slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
2618 if (ahci_software_reset(ahci_ctlp, ahci_portp, addrp)
2623 ret = ahci_port_reset(ahci_ctlp, ahci_portp, addrp);
2632 ahci_portp->ahciport_reset_in_progress = 1;
2634 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_MOPPING;
2635 ahci_portp->ahciport_mop_in_progress++;
2644 mutex_exit(&ahci_portp->ahciport_mutex);
2649 mutex_enter(&ahci_portp->ahciport_mutex);
2655 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp))
2656 finished_tags = ahci_portp->ahciport_pending_tags &
2658 else if (NCQ_CMD_IN_PROGRESS(ahci_portp))
2659 finished_tags = ahci_portp->ahciport_pending_ncq_tags &
2660 ~slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
2665 ahci_portp,
2684 ahci_port_t *ahci_portp, ahci_addr_t *addrp)
2694 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_MOPPING) {
2702 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
2706 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
2709 reset_tags = slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
2713 if (ahci_software_reset(ahci_ctlp, ahci_portp, addrp)
2722 ahci_portp->ahciport_reset_in_progress = 1;
2724 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_MOPPING;
2725 ahci_portp->ahciport_mop_in_progress++;
2737 mutex_exit(&ahci_portp->ahciport_mutex);
2742 mutex_enter(&ahci_portp->ahciport_mutex);
2749 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp))
2750 finished_tags = ahci_portp->ahciport_pending_tags &
2752 else if (NCQ_CMD_IN_PROGRESS(ahci_portp))
2753 finished_tags = ahci_portp->ahciport_pending_ncq_tags &
2754 ~slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
2768 ahci_portp,
2786 ahci_port_t *ahci_portp, ahci_addr_t *addrp)
2800 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_MOPPING) {
2807 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_MOPPING;
2808 ahci_portp->ahciport_mop_in_progress++;
2810 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
2814 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
2817 reset_tags = slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
2821 ahci_portp, port, AHCI_PORT_RESET|AHCI_RESET_NO_EVENTS_UP,
2825 ahci_portp->ahciport_mop_in_progress--;
2826 if (ahci_portp->ahciport_mop_in_progress == 0)
2827 ahci_portp->ahciport_flags &=
2832 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp))
2833 finished_tags = ahci_portp->ahciport_pending_tags &
2835 else if (NCQ_CMD_IN_PROGRESS(ahci_portp))
2836 finished_tags = ahci_portp->ahciport_pending_ncq_tags &
2837 ~slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
2842 ahci_portp,
2859 ahci_port_t *ahci_portp;
2878 ahci_portp = ahci_ctlp->ahcictl_ports[port];
2880 mutex_enter(&ahci_portp->ahciport_mutex);
2881 ahci_portp->ahciport_reset_in_progress = 1;
2882 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
2891 ahci_portp->ahciport_pending_tags);
2892 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
2897 AHCI_NCQ_SLOT_MASK(ahci_portp);
2901 ahci_portp->ahciport_pending_tags);
2903 mutex_exit(&ahci_portp->ahciport_mutex);
2915 ahci_portp = ahci_ctlp->ahcictl_ports[port];
2917 mutex_enter(&ahci_portp->ahciport_mutex);
2922 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_MOPPING) {
2926 mutex_exit(&ahci_portp->ahciport_mutex);
2930 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_MOPPING;
2931 ahci_portp->ahciport_mop_in_progress++;
2933 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp))
2935 ahci_portp->ahciport_pending_tags &
2937 else if (NCQ_CMD_IN_PROGRESS(ahci_portp))
2939 ahci_portp->ahciport_pending_ncq_tags &
2940 ~slot_status[port] & AHCI_NCQ_SLOT_MASK(ahci_portp);
2945 ahci_portp,
2951 mutex_exit(&ahci_portp->ahciport_mutex);
2964 ahci_port_t *ahci_portp;
2974 ahci_portp = ahci_ctlp->ahcictl_ports[port];
2997 ahci_portp = ahci_ctlp->ahcictl_ports[port];
3001 mutex_enter(&ahci_portp->ahciport_mutex);
3002 ret = ahci_reset_port_reject_pkts(ahci_ctlp, ahci_portp, &addr);
3003 mutex_exit(&ahci_portp->ahciport_mutex);
3017 mutex_enter(&ahci_portp->ahciport_mutex);
3023 ahci_portp->ahciport_device_type == SATA_DTYPE_PMULT)
3026 if (ahci_portp->ahciport_port_state & SATA_PSTATE_FAILED |
3027 ahci_portp->ahciport_port_state & SATA_PSTATE_SHUTDOWN |
3028 ahci_portp->ahciport_port_state & SATA_PSTATE_PWROFF) {
3034 sd->satadev_state = ahci_portp->ahciport_port_state;
3040 mutex_exit(&ahci_portp->ahciport_mutex);
3045 if (AHCIPORT_GET_DEV_TYPE(ahci_portp, &addr) ==
3052 sd->satadev_state = AHCIPORT_GET_STATE(ahci_portp,
3058 mutex_exit(&ahci_portp->ahciport_mutex);
3065 ahci_portp, &addr);
3068 ahci_portp, &addr);
3071 mutex_exit(&ahci_portp->ahciport_mutex);
3097 ahci_port_t *ahci_portp;
3110 ahci_portp = ahci_ctlp->ahcictl_ports[port];
3112 mutex_enter(&ahci_portp->ahciport_mutex);
3131 ahci_portp, port,
3139 ahci_portp->ahciport_port_state |= SATA_PSTATE_PWRON;
3140 ahci_portp->ahciport_port_state &= ~SATA_PSTATE_PWROFF;
3141 ahci_portp->ahciport_port_state &= ~SATA_PSTATE_SHUTDOWN;
3146 AHCIPORT_PMSTATE(ahci_portp, &addr) |= SATA_PSTATE_PWRON;
3147 AHCIPORT_PMSTATE(ahci_portp, &addr) &=
3151 satadev->satadev_state = ahci_portp->ahciport_port_state;
3155 mutex_exit(&ahci_portp->ahciport_mutex);
3168 ahci_port_t *ahci_portp;
3182 ahci_portp = ahci_ctlp->ahcictl_ports[port];
3183 mutex_enter(&ahci_portp->ahciport_mutex);
3194 if (ahci_portp->ahciport_device_type != SATA_DTYPE_NONE) {
3197 ahci_reject_all_abort_pkts(ahci_ctlp, ahci_portp, port);
3201 ahci_portp, port);
3215 if (AHCIPORT_GET_DEV_TYPE(ahci_portp, &addr)
3217 ahci_reject_all_abort_pkts(ahci_ctlp, ahci_portp, port);
3224 AHCIPORT_SET_STATE(ahci_portp, &addr, SATA_PSTATE_SHUTDOWN);
3229 mutex_exit(&ahci_portp->ahciport_mutex);
3241 ahci_port_t *ahci_portp, uint8_t port)
3250 if (RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp)) {
3262 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_MOPPING) {
3263 if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp)) {
3276 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
3280 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
3283 abort_tags = slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
3289 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_MOPPING;
3290 ahci_portp->ahciport_mop_in_progress++;
3293 ahci_portp,
3502 ahci_port_t *ahci_portp = ahci_ctlp->ahcictl_ports[port];
3504 if ((ahci_check_dma_handle(ahci_portp->
3506 (ahci_check_dma_handle(ahci_portp->
3508 (ahci_check_acc_handle(ahci_portp->
3510 (ahci_check_acc_handle(ahci_portp->
3516 if (ahci_check_slot_handle(ahci_portp, slot)
3530 ahci_check_slot_handle(ahci_port_t *ahci_portp, int slot)
3532 if ((ahci_check_acc_handle(ahci_portp->
3534 (ahci_check_dma_handle(ahci_portp->
3607 ahci_port_t *ahci_portp;
3615 ahci_portp = ahci_ctlp->ahcictl_ports[port];
3617 mutex_enter(&ahci_portp->ahciport_mutex);
3618 ddi_taskq_wait(ahci_portp->ahciport_event_taskq);
3619 mutex_exit(&ahci_portp->ahciport_mutex);
3638 ahci_port_t *ahci_portp;
3668 ahci_portp = ahci_ctlp->ahcictl_ports[port];
3669 mutex_enter(&ahci_portp->ahciport_mutex);
3677 if (ahci_initialize_port(ahci_ctlp, ahci_portp, &addr)
3686 ahci_portp->ahciport_port_state = SATA_PSTATE_FAILED;
3689 mutex_exit(&ahci_portp->ahciport_mutex);
3708 ahci_port_t *ahci_portp;
3724 ahci_portp = ahci_ctlp->ahcictl_ports[port];
3727 mutex_enter(&ahci_portp->ahciport_mutex);
3738 ahci_portp, port);
3739 mutex_exit(&ahci_portp->ahciport_mutex);
3754 ahci_alloc_pmult(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
3757 uint8_t port = ahci_portp->ahciport_port_num;
3777 if (ahci_portp->ahciport_pmult_info == NULL) {
3778 ahci_portp->ahciport_pmult_info = (ahci_pmult_info_t *)
3782 ASSERT(ahci_portp->ahciport_pmult_info != NULL);
3796 ahci_dealloc_pmult(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
3799 uint8_t port = ahci_portp->ahciport_port_num;
3816 if (ahci_portp->ahciport_pmult_info != NULL) {
3817 kmem_free(ahci_portp->ahciport_pmult_info,
3819 ahci_portp->ahciport_pmult_info = NULL;
3835 ahci_initialize_port(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
3843 ASSERT(mutex_owned(&ahci_portp->ahciport_mutex));
3854 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_HOTPLUG) {
3858 mutex_exit(&ahci_portp->ahciport_mutex);
3863 mutex_enter(&ahci_portp->ahciport_mutex);
3880 ahci_portp->ahciport_rcvd_fis_dma_cookie.dmac_laddress);
3885 ahci_portp->ahciport_cmd_list_dma_cookie.dmac_laddress);
3904 ahci_portp, port);
3911 AHCIPORT_SET_DEV_TYPE(ahci_portp, addrp, SATA_DTYPE_UNKNOWN);
3936 ret = ahci_port_reset(ahci_ctlp, ahci_portp, addrp);
3947 if (AHCIPORT_GET_STATE(ahci_portp, addrp) &
3951 port, ahci_portp->ahciport_port_state);
3955 AHCIPORT_SET_STATE(ahci_portp, addrp, SATA_STATE_READY);
3961 if (!resuming && ahci_portp->ahciport_device_type != SATA_DTYPE_NONE)
3962 ahci_find_dev_signature(ahci_ctlp, ahci_portp, addrp);
3965 if (ahci_portp->ahciport_device_type == SATA_DTYPE_NONE) {
3972 if (ahci_portp->ahciport_device_type == SATA_DTYPE_PMULT) {
3975 ahci_alloc_pmult(ahci_ctlp, ahci_portp);
3979 if (ahci_start_port(ahci_ctlp, ahci_portp, port)
4253 ahci_port_t *ahci_portp;
4267 ahci_portp = ahci_ctlp->ahcictl_ports[port];
4270 ASSERT(mutex_owned(&ahci_portp->ahciport_mutex));
4273 if (ahci_portp->ahciport_device_type != SATA_DTYPE_PMULT)
4301 if (RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp)) {
4304 port, ahci_portp->ahciport_flags);
4308 if (!(ahci_portp->ahciport_flags & AHCI_PORT_FLAG_MOPPING) && (
4309 ERR_RETRI_CMD_IN_PROGRESS(ahci_portp) ||
4310 NCQ_CMD_IN_PROGRESS(ahci_portp) ||
4311 NON_NCQ_CMD_IN_PROGRESS(ahci_portp))) {
4314 port, ahci_portp->ahciport_flags);
4327 if (!(ahci_portp->ahciport_port_state & SATA_STATE_READY)) {
4334 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_RDWR_PMULT;
4345 ahci_portp->ahciport_rdwr_pmult_pkt = spkt;
4353 rval = ahci_do_sync_start(ahci_ctlp, ahci_portp, &pmult_addr, spkt);
4377 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_RDWR_PMULT;
4378 ahci_portp->ahciport_rdwr_pmult_pkt = NULL;
4458 ahci_initialize_pmult(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
4465 ASSERT(mutex_owned(&ahci_portp->ahciport_mutex));
4508 mutex_exit(&ahci_portp->ahciport_mutex);
4510 mutex_enter(&ahci_portp->ahciport_mutex);
4512 ahci_portp->ahciport_pmult_info->ahcipmi_num_dev_ports =
4517 ahci_portp->ahciport_pmult_info->ahcipmi_num_dev_ports);
4520 ahci_portp->ahciport_port_state |= SATA_DSTATE_PMULT_INIT;
4535 ahci_initialize_pmport(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
4549 if (ahci_portp->ahciport_port_state & SATA_PSTATE_FAILED) {
4557 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_HOTPLUG) {
4560 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_HOTPLUG;
4563 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
4567 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
4570 reset_tags = slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
4573 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_MOPPING;
4574 ahci_portp->ahciport_mop_in_progress++;
4577 AHCIPORT_SET_STATE(ahci_portp, addrp, SATA_STATE_UNKNOWN);
4580 AHCIPORT_SET_DEV_TYPE(ahci_portp, addrp, SATA_DTYPE_UNKNOWN);
4585 if (ahci_pmport_reset(ahci_ctlp, ahci_portp, addrp) != AHCI_SUCCESS) {
4594 if (AHCIPORT_GET_STATE(ahci_portp, addrp) &
4599 ahci_portp->ahciport_port_state);
4604 if (AHCIPORT_GET_DEV_TYPE(ahci_portp, addrp)
4614 AHCIPORT_SET_STATE(ahci_portp, addrp, SATA_STATE_READY);
4625 ahci_find_dev_signature(ahci_ctlp, ahci_portp, addrp);
4631 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp))
4632 finished_tags = ahci_portp->ahciport_pending_tags &
4634 else if (NCQ_CMD_IN_PROGRESS(ahci_portp))
4635 finished_tags = ahci_portp->ahciport_pending_ncq_tags &
4636 ~slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
4640 ahci_portp,
4654 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_HOTPLUG;
4669 ahci_probe_pmult(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
4682 port_hotplug_tags = gscr32 & AHCI_PMPORT_MASK(ahci_portp);
4696 if (AHCIPORT_GET_DEV_TYPE(ahci_portp, &pmport_addr)
4737 mutex_exit(&ahci_portp->ahciport_mutex);
4744 mutex_enter(&ahci_portp->ahciport_mutex);
4752 AHCIPORT_SET_STATE(ahci_portp, &pmport_addr,
4758 mutex_exit(&ahci_portp->ahciport_mutex);
4764 mutex_enter(&ahci_portp->ahciport_mutex);
4775 AHCIPORT_SET_STATE(ahci_portp, &pmport_addr,
4777 AHCIPORT_SET_DEV_TYPE(ahci_portp, &pmport_addr,
4780 mutex_exit(&ahci_portp->ahciport_mutex);
4786 mutex_enter(&ahci_portp->ahciport_mutex);
4807 ahci_probe_pmport(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
4822 if (ahci_portp->ahciport_device_type == SATA_DTYPE_NONE ||
4823 ahci_portp->ahciport_device_type != SATA_DTYPE_PMULT) {
4832 port_state = ahci_portp->ahciport_port_state;
4839 ahci_portp, port, AHCI_PORT_RESET, NULL) !=
4855 if (ahci_initialize_pmult(ahci_ctlp, ahci_portp,
4864 port_state = AHCIPORT_GET_STATE(ahci_portp, addrp);
4869 ahci_portp, addrp) != AHCI_SUCCESS)
4891 ahci_software_reset(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
4907 if (ahci_put_port_into_notrunning_state(ahci_ctlp, ahci_portp,
4972 if (ahci_start_port(ahci_ctlp, ahci_portp, port)
4990 cmd_table = ahci_portp->ahciport_cmd_tables[slot];
5001 cmd_header = &ahci_portp->ahciport_cmd_list[slot];
5011 (void) ddi_dma_sync(ahci_portp->ahciport_cmd_tables_dma_handle[slot],
5016 (void) ddi_dma_sync(ahci_portp->ahciport_cmd_list_dma_handle,
5053 cmd_table = ahci_portp->ahciport_cmd_tables[slot];
5063 cmd_header = &ahci_portp->ahciport_cmd_list[slot];
5071 (void) ddi_dma_sync(ahci_portp->ahciport_cmd_tables_dma_handle[slot],
5076 (void) ddi_dma_sync(ahci_portp->ahciport_cmd_list_dma_handle,
5148 ahci_port_reset(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
5163 return (ahci_pmport_reset(ahci_ctlp, ahci_portp, addrp));
5170 ahci_portp->ahciport_port_state = 0;
5184 if (!(ahci_portp->ahciport_flags
5189 ahci_portp->ahciport_flags |=
5198 if (ahci_portp->ahciport_flags &
5203 ahci_portp->ahciport_flags &=
5208 if (!(ahci_portp->ahciport_flags & AHCI_PORT_FLAG_SPINUP)) {
5335 AHCIPORT_SET_DEV_TYPE(ahci_portp, addrp, SATA_DTYPE_NONE);
5354 AHCIPORT_SET_STATE(ahci_portp, addrp, SATA_PSTATE_FAILED);
5415 if (ahci_software_reset(ahci_ctlp, ahci_portp,
5417 AHCIPORT_SET_STATE(ahci_portp, addrp,
5451 port_state = AHCIPORT_GET_STATE(ahci_portp, addrp);
5452 AHCIPORT_SET_STATE(ahci_portp, addrp, port_state|SATA_STATE_READY);
5465 ahci_pmport_reset(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
5480 AHCIPORT_SET_STATE(ahci_portp, addrp, 0);
5563 AHCIPORT_SET_DEV_TYPE(ahci_portp, addrp, SATA_DTYPE_NONE);
5576 AHCIPORT_SET_STATE(ahci_portp, addrp, SATA_PSTATE_FAILED);
5586 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_IGNORE_IPMS;
5608 mutex_exit(&ahci_portp->ahciport_mutex);
5610 mutex_enter(&ahci_portp->ahciport_mutex);
5623 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_IGNORE_IPMS;
5626 port_state = AHCIPORT_GET_STATE(ahci_portp, addrp);
5627 AHCIPORT_SET_STATE(ahci_portp, addrp, port_state|SATA_STATE_READY);
5635 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_IGNORE_IPMS;
5659 ahci_port_t *ahci_portp;
5728 ahci_portp = ahci_ctlp->ahcictl_ports[port];
5729 mutex_enter(&ahci_portp->ahciport_mutex);
5733 if (ahci_restart_port_wait_till_ready(ahci_ctlp, ahci_portp,
5743 ahci_portp->ahciport_port_state = SATA_PSTATE_FAILED;
5746 mutex_exit(&ahci_portp->ahciport_mutex);
5765 ahci_find_dev_signature(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
5808 AHCIPORT_SET_DEV_TYPE(ahci_portp, addrp, SATA_DTYPE_UNKNOWN);
5811 rval = ahci_software_reset(ahci_ctlp, ahci_portp, &dev_addr);
5822 rval = ahci_software_reset(ahci_ctlp, ahci_portp,
5832 AHCIPORT_SET_STATE(ahci_portp, addrp,
5844 ahci_portp, port) != AHCI_SUCCESS) {
5848 ahci_portp->ahciport_port_state = SATA_PSTATE_FAILED;
5876 AHCIPORT_SET_DEV_TYPE(ahci_portp, addrp, SATA_DTYPE_ATADISK);
5882 AHCIPORT_SET_DEV_TYPE(ahci_portp, addrp, SATA_DTYPE_ATAPI);
5890 AHCIPORT_SET_DEV_TYPE(ahci_portp, addrp, SATA_DTYPE_PMULT);
5896 AHCIPORT_SET_DEV_TYPE(ahci_portp, addrp, SATA_DTYPE_UNKNOWN);
5950 ahci_start_port(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp, uint8_t port)
5956 if (ahci_portp->ahciport_port_state & SATA_PSTATE_FAILED) {
5959 port, ahci_portp->ahciport_port_state);
5963 if (ahci_portp->ahciport_device_type == SATA_DTYPE_NONE) {
5989 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_STARTED;
6009 ahci_port_t *ahci_portp;
6012 ahci_portp =
6015 ahci_ctlp->ahcictl_ports[port] = ahci_portp;
6016 ahci_portp->ahciport_port_num = port;
6019 cv_init(&ahci_portp->ahciport_cv, NULL, CV_DRIVER, NULL);
6022 mutex_init(&ahci_portp->ahciport_mutex, NULL, MUTEX_DRIVER,
6025 mutex_enter(&ahci_portp->ahciport_mutex);
6031 if (ahci_alloc_rcvd_fis(ahci_ctlp, ahci_portp, port) != AHCI_SUCCESS) {
6035 if (ahci_alloc_cmd_list(ahci_ctlp, ahci_portp, port) != AHCI_SUCCESS) {
6044 if ((ahci_portp->ahciport_event_taskq = ddi_taskq_create(dip,
6052 ahci_portp->ahciport_event_args =
6055 ahci_portp->ahciport_event_args->ahciea_addrp =
6058 if (ahci_portp->ahciport_event_args == NULL)
6062 ahci_portp->ahciport_doneq = NULL;
6063 ahci_portp->ahciport_doneqtail = &ahci_portp->ahciport_doneq;
6064 ahci_portp->ahciport_doneq_len = 0;
6066 mutex_exit(&ahci_portp->ahciport_mutex);
6071 ddi_taskq_destroy(ahci_portp->ahciport_event_taskq);
6074 ahci_dealloc_cmd_list(ahci_ctlp, ahci_portp);
6077 ahci_dealloc_rcvd_fis(ahci_portp);
6080 mutex_exit(&ahci_portp->ahciport_mutex);
6081 mutex_destroy(&ahci_portp->ahciport_mutex);
6082 cv_destroy(&ahci_portp->ahciport_cv);
6084 kmem_free(ahci_portp, sizeof (ahci_port_t));
6098 ahci_port_t *ahci_portp = ahci_ctlp->ahcictl_ports[port];
6100 ASSERT(ahci_portp != NULL);
6102 mutex_enter(&ahci_portp->ahciport_mutex);
6103 kmem_free(ahci_portp->ahciport_event_args->ahciea_addrp,
6105 ahci_portp->ahciport_event_args->ahciea_addrp = NULL;
6106 kmem_free(ahci_portp->ahciport_event_args, sizeof (ahci_event_arg_t));
6107 ahci_portp->ahciport_event_args = NULL;
6108 ddi_taskq_destroy(ahci_portp->ahciport_event_taskq);
6109 ahci_dealloc_cmd_list(ahci_ctlp, ahci_portp);
6110 ahci_dealloc_rcvd_fis(ahci_portp);
6111 ahci_dealloc_pmult(ahci_ctlp, ahci_portp);
6112 mutex_exit(&ahci_portp->ahciport_mutex);
6114 mutex_destroy(&ahci_portp->ahciport_mutex);
6115 cv_destroy(&ahci_portp->ahciport_cv);
6117 kmem_free(ahci_portp, sizeof (ahci_port_t));
6129 ahci_alloc_rcvd_fis(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
6143 &ahci_portp->ahciport_rcvd_fis_dma_handle) !=
6151 if (ddi_dma_mem_alloc(ahci_portp->ahciport_rcvd_fis_dma_handle,
6157 (caddr_t *)&ahci_portp->ahciport_rcvd_fis,
6159 &ahci_portp->ahciport_rcvd_fis_acc_handle) != NULL) {
6164 ddi_dma_free_handle(&ahci_portp->ahciport_rcvd_fis_dma_handle);
6168 if (ddi_dma_addr_bind_handle(ahci_portp->ahciport_rcvd_fis_dma_handle,
6170 (caddr_t)ahci_portp->ahciport_rcvd_fis,
6175 &ahci_portp->ahciport_rcvd_fis_dma_cookie,
6181 ddi_dma_mem_free(&ahci_portp->ahciport_rcvd_fis_acc_handle);
6182 ddi_dma_free_handle(&ahci_portp->ahciport_rcvd_fis_dma_handle);
6186 bzero((void *)ahci_portp->ahciport_rcvd_fis, rcvd_fis_size);
6191 ahci_portp->ahciport_rcvd_fis_dma_cookie.dmac_laddress);
6194 ahci_portp->ahciport_rcvd_fis_dma_cookie.dmac_laddress);
6196 ahci_portp->ahciport_rcvd_fis_dma_cookie.dmac_address);
6208 ahci_dealloc_rcvd_fis(ahci_port_t *ahci_portp)
6211 (void) ddi_dma_unbind_handle(ahci_portp->ahciport_rcvd_fis_dma_handle);
6214 ddi_dma_mem_free(&ahci_portp->ahciport_rcvd_fis_acc_handle);
6217 ddi_dma_free_handle(&ahci_portp->ahciport_rcvd_fis_dma_handle);
6229 ahci_alloc_cmd_list(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
6244 &ahci_portp->ahciport_cmd_list_dma_handle) != DDI_SUCCESS) {
6251 if (ddi_dma_mem_alloc(ahci_portp->ahciport_cmd_list_dma_handle,
6257 (caddr_t *)&ahci_portp->ahciport_cmd_list,
6259 &ahci_portp->ahciport_cmd_list_acc_handle) != NULL) {
6264 ddi_dma_free_handle(&ahci_portp->ahciport_cmd_list_dma_handle);
6268 if (ddi_dma_addr_bind_handle(ahci_portp->ahciport_cmd_list_dma_handle,
6270 (caddr_t)ahci_portp->ahciport_cmd_list,
6275 &ahci_portp->ahciport_cmd_list_dma_cookie,
6281 ddi_dma_mem_free(&ahci_portp->ahciport_cmd_list_acc_handle);
6282 ddi_dma_free_handle(&ahci_portp->ahciport_cmd_list_dma_handle);
6286 bzero((void *)ahci_portp->ahciport_cmd_list, cmd_list_size);
6291 ahci_portp->ahciport_cmd_list_dma_cookie.dmac_laddress);
6294 ahci_portp->ahciport_cmd_list_dma_cookie.dmac_laddress);
6297 ahci_portp->ahciport_cmd_list_dma_cookie.dmac_address);
6299 if (ahci_alloc_cmd_tables(ahci_ctlp, ahci_portp) != AHCI_SUCCESS) {
6307 (void) ddi_dma_unbind_handle(ahci_portp->ahciport_cmd_list_dma_handle);
6310 ddi_dma_mem_free(&ahci_portp->ahciport_cmd_list_acc_handle);
6313 ddi_dma_free_handle(&ahci_portp->ahciport_cmd_list_dma_handle);
6325 ahci_dealloc_cmd_list(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
6328 ahci_dealloc_cmd_tables(ahci_ctlp, ahci_portp);
6331 (void) ddi_dma_unbind_handle(ahci_portp->ahciport_cmd_list_dma_handle);
6334 ddi_dma_mem_free(&ahci_portp->ahciport_cmd_list_acc_handle);
6337 ddi_dma_free_handle(&ahci_portp->ahciport_cmd_list_dma_handle);
6348 ahci_alloc_cmd_tables(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
6357 ahci_portp->ahciport_port_num);
6365 &ahci_portp->ahciport_cmd_tables_dma_handle[slot]) !=
6375 ahci_portp->ahciport_cmd_tables_dma_handle[slot],
6381 (caddr_t *)&ahci_portp->ahciport_cmd_tables[slot],
6383 &ahci_portp->ahciport_cmd_tables_acc_handle[slot]) !=
6391 &ahci_portp->ahciport_cmd_tables_dma_handle[slot]);
6396 ahci_portp->ahciport_cmd_tables_dma_handle[slot],
6398 (caddr_t)ahci_portp->ahciport_cmd_tables[slot],
6410 &ahci_portp->ahciport_cmd_tables_acc_handle[slot]);
6412 &ahci_portp->ahciport_cmd_tables_dma_handle[slot]);
6416 bzero((void *)ahci_portp->ahciport_cmd_tables[slot],
6421 (&ahci_portp->ahciport_cmd_list[slot]),
6426 (&ahci_portp->ahciport_cmd_list[slot]),
6437 ahci_portp->ahciport_cmd_tables_dma_handle[slot]);
6441 &ahci_portp->ahciport_cmd_tables_acc_handle[slot]);
6445 &ahci_portp->ahciport_cmd_tables_dma_handle[slot]);
6458 ahci_dealloc_cmd_tables(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
6464 ahci_portp->ahciport_port_num);
6469 ahci_portp->ahciport_cmd_tables_dma_handle[slot]);
6473 &ahci_portp->ahciport_cmd_tables_acc_handle[slot]);
6477 &ahci_portp->ahciport_cmd_tables_dma_handle[slot]);
6509 ahci_port_intr(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp, uint8_t port)
6517 mutex_enter(&ahci_portp->ahciport_mutex);
6518 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_POLLING) {
6543 if (!(ahci_portp->ahciport_flags & AHCI_PORT_FLAG_IGNORE_IPMS))
6545 mutex_exit(&ahci_portp->ahciport_mutex);
6582 ahci_portp, port);
6588 ahci_portp, port);
6594 ahci_portp, port);
6600 ahci_ctlp, ahci_portp, port);
6605 (void) ahci_intr_phyrdy_change(ahci_ctlp, ahci_portp,
6625 (void) ahci_intr_non_fatal_error(ahci_ctlp, ahci_portp,
6646 (void) ahci_intr_fatal_error(ahci_ctlp, ahci_portp,
6651 (void) ahci_intr_cold_port_detect(ahci_ctlp, ahci_portp, port);
6679 ahci_port_t *ahci_portp;
6717 ahci_portp = ahci_ctlp->ahcictl_ports[port];
6720 ahci_port_intr(ahci_ctlp, ahci_portp, port);
6758 ahci_port_t *ahci_portp, uint8_t port)
6770 mutex_enter(&ahci_portp->ahciport_mutex);
6772 if (!ERR_RETRI_CMD_IN_PROGRESS(ahci_portp) &&
6773 !RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp) &&
6774 !NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
6778 mutex_exit(&ahci_portp->ahciport_mutex);
6788 mutex_exit(&ahci_portp->ahciport_mutex);
6792 if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp)) {
6799 } else if (RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp)) {
6808 finished_tags = ahci_portp->ahciport_pending_tags &
6815 ahci_portp->ahciport_pending_tags, port_cmd_issue,
6818 if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp) &&
6820 satapkt = ahci_portp->ahciport_err_retri_pkt;
6827 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_COMPLETED);
6831 if (RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp) &&
6833 satapkt = ahci_portp->ahciport_rdwr_pmult_pkt;
6842 rcvd_fisp = &(ahci_portp->ahciport_rcvd_fis->
6849 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_COMPLETED);
6859 satapkt = ahci_portp->ahciport_slot_pkts[finished_slot];
6886 ahci_portp->ahciport_prd_bytecounts[finished_slot];
6889 &ahci_portp->ahciport_cmd_list[finished_slot];
6920 rcvd_fisp = &(ahci_portp->ahciport_rcvd_fis->
6931 CLEAR_BIT(ahci_portp->ahciport_pending_tags, finished_slot);
6933 ahci_portp->ahciport_slot_pkts[finished_slot] = NULL;
6935 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_COMPLETED);
6940 ahci_portp->ahciport_pending_tags);
6942 ahci_flush_doneq(ahci_portp);
6944 mutex_exit(&ahci_portp->ahciport_mutex);
6977 ahci_port_t *ahci_portp, uint8_t port)
6988 (void) ahci_intr_ncq_events(ahci_ctlp, ahci_portp, &addr);
6993 ahci_portp, port);
7009 ahci_port_t *ahci_portp, ahci_addr_t *addrp)
7023 mutex_enter(&ahci_portp->ahciport_mutex);
7024 if (!NCQ_CMD_IN_PROGRESS(ahci_portp)) {
7025 mutex_exit(&ahci_portp->ahciport_mutex);
7036 finished_tags = ahci_portp->ahciport_pending_ncq_tags &
7037 ~port_sactive & AHCI_NCQ_SLOT_MASK(ahci_portp);
7042 ahci_portp->ahciport_pending_ncq_tags, port_sactive);
7054 issued_tags = ahci_portp->ahciport_pending_tags &
7060 mutex_exit(&ahci_portp->ahciport_mutex);
7067 ahci_portp->ahciport_pending_tags, port_cmd_issue);
7081 CLEAR_BIT(ahci_portp->ahciport_pending_tags, issued_slot);
7093 ASSERT(!(ahci_portp->ahciport_pending_tags &
7096 satapkt = ahci_portp->ahciport_slot_pkts[finished_slot];
7103 CLEAR_BIT(ahci_portp->ahciport_pending_ncq_tags, finished_slot);
7105 ahci_portp->ahciport_slot_pkts[finished_slot] = NULL;
7107 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_COMPLETED);
7113 port, ahci_portp->ahciport_pending_ncq_tags,
7114 ahci_portp->ahciport_pending_tags);
7116 ahci_flush_doneq(ahci_portp);
7118 mutex_exit(&ahci_portp->ahciport_mutex);
7133 ahci_intr_pmult_sntf_events(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
7149 mutex_enter(&ahci_portp->ahciport_mutex);
7150 if (ahci_portp->ahciport_device_type != SATA_DTYPE_PMULT) {
7151 mutex_exit(&ahci_portp->ahciport_mutex);
7155 ASSERT(ahci_portp->ahciport_pmult_info != NULL);
7157 ahci_portp->ahciport_pmult_info->ahcipmi_snotif_tags =
7164 if (ahci_portp->ahciport_pmult_info->ahcipmi_snotif_tags == 0) {
7165 mutex_exit(&ahci_portp->ahciport_mutex);
7170 if (RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp)) {
7171 mutex_exit(&ahci_portp->ahciport_mutex);
7175 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_PMULT_SNTF) {
7177 mutex_exit(&ahci_portp->ahciport_mutex);
7181 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_PMULT_SNTF;
7194 if (ahci_portp->ahciport_reset_in_progress == 1) {
7197 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_PMULT_SNTF;
7198 mutex_exit(&ahci_portp->ahciport_mutex);
7204 ahci_portp->ahciport_pmult_info->ahcipmi_snotif_tags);
7218 ahci_reject_all_abort_pkts(ahci_ctlp, ahci_portp, port);
7220 mutex_exit(&ahci_portp->ahciport_mutex);
7225 mutex_enter(&ahci_portp->ahciport_mutex);
7227 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_PMULT_SNTF;
7228 mutex_exit(&ahci_portp->ahciport_mutex);
7253 ahci_port_t *ahci_portp, uint8_t port)
7259 mutex_enter(&ahci_portp->ahciport_mutex);
7275 mutex_exit(&ahci_portp->ahciport_mutex);
7294 ahci_port_t *ahci_portp, uint8_t port)
7305 mutex_enter(&ahci_portp->ahciport_mutex);
7315 mutex_exit(&ahci_portp->ahciport_mutex);
7334 mutex_exit(&ahci_portp->ahciport_mutex);
7360 ahci_port_t *ahci_portp, uint8_t port)
7372 mutex_enter(&ahci_portp->ahciport_mutex);
7376 mutex_exit(&ahci_portp->ahciport_mutex);
7380 (ahci_portp == NULL)) {
7387 mutex_enter(&ahci_portp->ahciport_mutex);
7397 if (ahci_portp->ahciport_device_type != SATA_DTYPE_NONE) {
7401 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_NODEV) {
7402 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_NODEV;
7415 ahci_portp->ahciport_port_state = SATA_PSTATE_PWRON;
7419 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_HOTPLUG;
7427 mutex_exit(&ahci_portp->ahciport_mutex);
7432 mutex_enter(&ahci_portp->ahciport_mutex);
7445 ahci_portp, &port_addr);
7448 if (ahci_start_port(ahci_ctlp, ahci_portp, port)
7457 ahci_portp->ahciport_max_ncq_tags = 0;
7459 mutex_exit(&ahci_portp->ahciport_mutex);
7464 mutex_enter(&ahci_portp->ahciport_mutex);
7474 ahci_reject_all_abort_pkts(ahci_ctlp, ahci_portp, port);
7476 ahci_portp, port);
7478 if (ahci_portp->ahciport_device_type ==
7480 ahci_dealloc_pmult(ahci_ctlp, ahci_portp);
7484 ahci_portp->ahciport_device_type = SATA_DTYPE_NONE;
7485 ahci_portp->ahciport_port_state = SATA_STATE_UNKNOWN;
7487 mutex_exit(&ahci_portp->ahciport_mutex);
7492 mutex_enter(&ahci_portp->ahciport_mutex);
7495 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_HOTPLUG;
7497 mutex_exit(&ahci_portp->ahciport_mutex);
7548 ahci_intr_non_fatal_error(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
7563 mutex_enter(&ahci_portp->ahciport_mutex);
7603 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp) ||
7604 ERR_RETRI_CMD_IN_PROGRESS(ahci_portp)) {
7611 if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp)) {
7612 satapkt = ahci_portp->ahciport_err_retri_pkt;
7616 satapkt = ahci_portp->ahciport_slot_pkts[current_slot];
7622 "cmd 0x%x", ahci_portp->ahciport_pending_tags,
7637 ahci_portp->ahciport_prd_bytecounts[current_slot];
7639 cmd_header = &ahci_portp->
7649 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
7663 ahci_portp->ahciport_pending_ncq_tags,
7666 current_tags = ahci_portp->ahciport_pending_ncq_tags &
7668 AHCI_NCQ_SLOT_MASK(ahci_portp);
7676 satapkt = ahci_portp->ahciport_slot_pkts[current_slot];
7687 mutex_exit(&ahci_portp->ahciport_mutex);
7774 ahci_port_t *ahci_portp, uint8_t port, uint32_t intr_status)
7788 mutex_enter(&ahci_portp->ahciport_mutex);
7794 if (ahci_portp->ahciport_device_type == SATA_DTYPE_NONE) {
7820 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
7832 spkt = ahci_portp->ahciport_slot_pkts[failed_slot];
7856 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
7861 AHCI_NCQ_SLOT_MASK(ahci_portp);
7867 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_ERRPRINT;
7888 args = ahci_portp->ahciport_event_args;
7890 args->ahciea_portp = (void *)ahci_portp;
7895 if ((ddi_taskq_dispatch(ahci_portp->ahciport_event_taskq,
7898 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_ERRPRINT;
7903 mutex_exit(&ahci_portp->ahciport_mutex);
7922 ahci_port_t *ahci_portp, uint8_t port)
7930 mutex_enter(&ahci_portp->ahciport_mutex);
7938 mutex_exit(&ahci_portp->ahciport_mutex);
7954 mutex_exit(&ahci_portp->ahciport_mutex);
7959 mutex_enter(&ahci_portp->ahciport_mutex);
7964 mutex_exit(&ahci_portp->ahciport_mutex);
7969 mutex_enter(&ahci_portp->ahciport_mutex);
7972 mutex_exit(&ahci_portp->ahciport_mutex);
8348 ahci_port_t *ahci_portp, uint8_t port)
8386 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_STARTED;
8439 ahci_port_t *ahci_portp, uint8_t port, int flag, int *reset_flag)
8449 uint32_t previous_dev_type = ahci_portp->ahciport_device_type;
8458 if (ahci_portp->ahciport_device_type != SATA_DTYPE_NONE)
8462 rval = ahci_put_port_into_notrunning_state(ahci_ctlp, ahci_portp,
8496 rval = ahci_port_reset(ahci_ctlp, ahci_portp, &addr_port);
8510 if ((ahci_portp->ahciport_device_type != SATA_DTYPE_NONE) &&
8511 (ahci_portp->ahciport_device_type != SATA_DTYPE_PMULT) &&
8514 ahci_portp->ahciport_reset_in_progress = 1;
8525 mutex_exit(&ahci_portp->ahciport_mutex);
8530 mutex_enter(&ahci_portp->ahciport_mutex);
8536 ahci_portp->ahciport_reset_in_progress = 0;
8540 (void) ahci_start_port(ahci_ctlp, ahci_portp, port);
8558 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_NODEV;
8562 mutex_exit(&ahci_portp->ahciport_mutex);
8563 (void) ahci_intr_phyrdy_change(ahci_ctlp, ahci_portp, port);
8564 mutex_enter(&ahci_portp->ahciport_mutex);
8575 if (ahci_portp->ahciport_device_type == SATA_DTYPE_ATAPI)
8582 ahci_find_dev_signature(ahci_ctlp, ahci_portp, &addr_port);
8588 ahci_portp->ahciport_device_type != SATA_DTYPE_PMULT) {
8590 ahci_dealloc_pmult(ahci_ctlp, ahci_portp);
8591 (void) ahci_start_port(ahci_ctlp, ahci_portp, port);
8597 ahci_portp->ahciport_device_type != SATA_DTYPE_PMULT) {
8612 ahci_dealloc_pmult(ahci_ctlp, ahci_portp);
8613 (void) ahci_start_port(ahci_ctlp, ahci_portp, port);
8624 mutex_exit(&ahci_portp->ahciport_mutex);
8629 mutex_enter(&ahci_portp->ahciport_mutex);
8640 if (ahci_portp->ahciport_device_type == SATA_DTYPE_PMULT) {
8643 ahci_alloc_pmult(ahci_ctlp, ahci_portp);
8645 (void) ahci_start_port(ahci_ctlp, ahci_portp, port);
8647 pminfo = ahci_portp->ahciport_pmult_info;
8655 ahci_portp->ahciport_port_state = SATA_STATE_READY;
8674 ahci_portp->ahciport_reset_in_progress = 1;
8701 ahci_port_t *ahci_portp,
8718 ahci_portp->ahciport_port_num, slot_status);
8731 if (ahci_portp->ahciport_slot_pkts[i] != NULL)
8738 ahci_portp->ahciport_port_num, msg_buf);
8740 (void *)ahci_portp->ahciport_err_retri_pkt,
8741 (void *)ahci_portp->ahciport_rdwr_pmult_pkt);
8745 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
8746 finished_tags = ahci_portp->ahciport_pending_tags &
8755 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
8757 finished_tags = ahci_portp->ahciport_pending_ncq_tags &
8758 ~slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
8761 AHCI_NCQ_SLOT_MASK(ahci_portp) &
8766 } else if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp)) {
8786 ahci_portp->ahciport_port_num, slot_status);
8787 ASSERT(ahci_portp->ahciport_mop_in_progress > 1);
8789 } else if (RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp)) {
8794 ahci_portp->ahciport_port_num);
8812 satapkt = ahci_portp->ahciport_slot_pkts[tmp_slot];
8831 CLEAR_BIT(ahci_portp->ahciport_pending_ncq_tags,
8833 CLEAR_BIT(ahci_portp->ahciport_pending_tags, tmp_slot);
8835 ahci_portp->ahciport_slot_pkts[tmp_slot] = NULL;
8837 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_COMPLETED);
8843 satapkt = ahci_portp->ahciport_err_retri_pkt;
8850 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_DEV_ERROR);
8854 satapkt = ahci_portp->ahciport_rdwr_pmult_pkt;
8860 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_DEV_ERROR);
8869 satapkt = ahci_portp->ahciport_slot_pkts[tmp_slot];
8877 CLEAR_BIT(ahci_portp->ahciport_pending_ncq_tags,
8879 CLEAR_BIT(ahci_portp->ahciport_pending_tags, tmp_slot);
8881 ahci_portp->ahciport_slot_pkts[tmp_slot] = NULL;
8883 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_DEV_ERROR);
8889 satapkt = ahci_portp->ahciport_err_retri_pkt;
8896 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_TIMEOUT);
8900 satapkt = ahci_portp->ahciport_rdwr_pmult_pkt;
8906 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_TIMEOUT);
8915 satapkt = ahci_portp->ahciport_slot_pkts[tmp_slot];
8923 CLEAR_BIT(ahci_portp->ahciport_pending_ncq_tags,
8925 CLEAR_BIT(ahci_portp->ahciport_pending_tags, tmp_slot);
8927 ahci_portp->ahciport_slot_pkts[tmp_slot] = NULL;
8929 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_TIMEOUT);
8935 satapkt = ahci_portp->ahciport_err_retri_pkt;
8942 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_ABORTED);
8946 satapkt = ahci_portp->ahciport_rdwr_pmult_pkt;
8953 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_ABORTED);
8962 satapkt = ahci_portp->ahciport_slot_pkts[tmp_slot];
8970 CLEAR_BIT(ahci_portp->ahciport_pending_ncq_tags,
8972 CLEAR_BIT(ahci_portp->ahciport_pending_tags, tmp_slot);
8974 ahci_portp->ahciport_slot_pkts[tmp_slot] = NULL;
8976 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_ABORTED);
8982 satapkt = ahci_portp->ahciport_rdwr_pmult_pkt;
8989 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_RESET);
8998 satapkt = ahci_portp->ahciport_slot_pkts[tmp_slot];
9006 CLEAR_BIT(ahci_portp->ahciport_pending_ncq_tags,
9008 CLEAR_BIT(ahci_portp->ahciport_pending_tags, tmp_slot);
9010 ahci_portp->ahciport_slot_pkts[tmp_slot] = NULL;
9012 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_RESET);
9022 satapkt = ahci_portp->ahciport_slot_pkts[tmp_slot];
9030 CLEAR_BIT(ahci_portp->ahciport_pending_ncq_tags,
9032 CLEAR_BIT(ahci_portp->ahciport_pending_tags, tmp_slot);
9034 ahci_portp->ahciport_slot_pkts[tmp_slot] = NULL;
9036 ahci_add_doneq(ahci_portp, satapkt, SATA_PKT_RESET);
9039 ahci_portp->ahciport_mop_in_progress--;
9040 ASSERT(ahci_portp->ahciport_mop_in_progress >= 0);
9042 if (ahci_portp->ahciport_mop_in_progress == 0)
9043 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_MOPPING;
9045 ahci_flush_doneq(ahci_portp);
9054 ahci_get_rdlogext_data(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
9105 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_RDLOGEXT;
9111 ahci_portp->ahciport_err_retri_pkt = rdlog_spkt;
9112 (void) ahci_do_sync_start(ahci_ctlp, ahci_portp, &addr, rdlog_spkt);
9113 ahci_portp->ahciport_err_retri_pkt = NULL;
9116 ahci_portp->ahciport_flags &= ~ AHCI_PORT_FLAG_RDLOGEXT;
9141 spkt = ahci_portp->ahciport_slot_pkts[failed_slot];
9173 ahci_get_rqsense_data(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
9227 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_RQSENSE;
9233 ahci_portp->ahciport_err_retri_pkt = rs_spkt;
9234 (void) ahci_do_sync_start(ahci_ctlp, ahci_portp, &addr, rs_spkt);
9235 ahci_portp->ahciport_err_retri_pkt = NULL;
9238 ahci_portp->ahciport_flags &= ~ AHCI_PORT_FLAG_RQSENSE;
9300 ahci_port_t *ahci_portp, ahci_addr_t *addrp, uint32_t intr_status)
9321 if (ahci_portp->ahciport_device_type == SATA_DTYPE_PMULT) {
9323 ahci_pmult_error_recovery_handler(ahci_ctlp, ahci_portp,
9330 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp) ||
9331 ERR_RETRI_CMD_IN_PROGRESS(ahci_portp)) {
9346 if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp)) {
9347 spkt = ahci_portp->ahciport_err_retri_pkt;
9350 spkt = ahci_portp->ahciport_slot_pkts[failed_slot];
9361 if (ahci_portp->ahciport_prd_bytecounts[failed_slot]) {
9363 &ahci_portp->ahciport_cmd_list[failed_slot];
9369 ahci_portp->ahciport_prd_bytecounts[failed_slot]);
9377 ahci_rcvd_fisp = &(ahci_portp->ahciport_rcvd_fis->
9392 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
9407 if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp)) {
9421 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_MOPPING;
9422 ahci_portp->ahciport_mop_in_progress++;
9424 rval = ahci_restart_port_wait_till_ready(ahci_ctlp, ahci_portp,
9427 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_ERRPRINT) {
9428 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_ERRPRINT;
9445 ahci_portp->ahciport_device_type == SATA_DTYPE_NONE ||
9447 ERR_RETRI_CMD_IN_PROGRESS(ahci_portp))
9455 if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
9457 ahci_portp, port);
9466 if (spkt && ahci_portp->ahciport_device_type == SATA_DTYPE_ATAPI)
9467 ahci_get_rqsense_data(ahci_ctlp, ahci_portp, port, spkt);
9473 port, slot_status, ahci_portp->ahciport_pending_tags,
9474 ahci_portp->ahciport_pending_ncq_tags, failed_tags);
9477 ahci_portp,
9498 ahci_port_t *ahci_portp, uint8_t port, uint32_t intr_status)
9535 ahci_portp, 0);
9567 ahci_portp, &addr);
9584 ahci_port_t *ahci_portp;
9592 ahci_portp = ahci_event_arg->ahciea_portp;
9599 ahci_portp->ahciport_port_num, event);
9601 mutex_enter(&ahci_portp->ahciport_mutex);
9607 if (ahci_portp->ahciport_device_type == SATA_DTYPE_NONE) {
9611 ahci_portp->ahciport_port_num);
9613 if (ahci_portp->ahciport_flags & AHCI_PORT_FLAG_ERRPRINT) {
9614 ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_ERRPRINT;
9616 "succeed", instance, ahci_portp->ahciport_port_num);
9626 ahci_fatal_error_recovery_handler(ahci_ctlp, ahci_portp,
9630 mutex_exit(&ahci_portp->ahciport_mutex);
9638 ahci_timeout_pkts(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
9648 mutex_enter(&ahci_portp->ahciport_mutex);
9650 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp) ||
9651 RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp) ||
9652 ERR_RETRI_CMD_IN_PROGRESS(ahci_portp)) {
9656 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
9670 if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp)) {
9677 ahci_portp->ahciport_pending_tags,
9678 ahci_portp->ahciport_pending_ncq_tags);
9680 } else if (RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp)) {
9689 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_MOPPING;
9690 ahci_portp->ahciport_mop_in_progress++;
9692 (void) ahci_restart_port_wait_till_ready(ahci_ctlp, ahci_portp,
9699 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
9700 finished_tags = ahci_portp->ahciport_pending_tags &
9709 slot_status, ahci_portp->ahciport_pending_tags);
9710 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
9711 finished_tags = ahci_portp->ahciport_pending_ncq_tags &
9712 ~slot_status & AHCI_NCQ_SLOT_MASK(ahci_portp);
9720 slot_status, ahci_portp->ahciport_pending_ncq_tags);
9721 } else if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp) ||
9722 RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp)) {
9727 ahci_portp,
9734 mutex_exit(&ahci_portp->ahciport_mutex);
9744 ahci_port_t *ahci_portp;
9766 ahci_portp = ahci_ctlp->ahcictl_ports[port];
9768 mutex_enter(&ahci_portp->ahciport_mutex);
9769 if (ahci_portp->ahciport_device_type == SATA_DTYPE_NONE) {
9770 mutex_exit(&ahci_portp->ahciport_mutex);
9775 if ((ahci_portp->ahciport_flags & AHCI_PORT_FLAG_MOPPING) &&
9776 !(ERR_RETRI_CMD_IN_PROGRESS(ahci_portp))) {
9777 mutex_exit(&ahci_portp->ahciport_mutex);
9785 if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp) ||
9786 RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp)) {
9789 } else if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp)) {
9793 pending_tags = ahci_portp->ahciport_pending_tags;
9794 } else if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
9800 AHCI_NCQ_SLOT_MASK(ahci_portp);
9801 pending_tags = ahci_portp->ahciport_pending_ncq_tags;
9811 if (ERR_RETRI_CMD_IN_PROGRESS(ahci_portp))
9812 spkt = ahci_portp->ahciport_err_retri_pkt;
9813 else if (RDWR_PMULT_CMD_IN_PROGRESS(ahci_portp))
9814 spkt = ahci_portp->ahciport_rdwr_pmult_pkt;
9816 spkt = ahci_portp->ahciport_slot_pkts[tmp_slot];
9825 ahci_portp->ahciport_slot_timeout[tmp_slot] -=
9828 if (ahci_portp->ahciport_slot_timeout[tmp_slot]
9833 if (NCQ_CMD_IN_PROGRESS(ahci_portp)) {
9849 if (NON_NCQ_CMD_IN_PROGRESS(ahci_portp) &&
9851 NCQ_CMD_IN_PROGRESS(ahci_portp) &&
9853 ahci_portp->ahciport_slot_timeout \
9867 mutex_exit(&ahci_portp->ahciport_mutex);
9869 ahci_timeout_pkts(ahci_ctlp, ahci_portp,
9872 mutex_enter(&ahci_portp->ahciport_mutex);
9875 mutex_exit(&ahci_portp->ahciport_mutex);
9988 ahci_port_t *ahci_portp;
9993 ahci_portp = ahci_ctlp->ahcictl_ports[port];
9994 ASSERT(ahci_portp != NULL);
10002 spkt = ahci_portp->ahciport_slot_pkts[tmp_slot];
10228 ahci_port_t *ahci_portp;
10249 ahci_portp = ahci_ctlp->ahcictl_ports[port];
10262 ahci_portp, port);
10275 ahci_add_doneq(ahci_port_t *ahci_portp, sata_pkt_t *satapkt, int reason)
10289 *ahci_portp->ahciport_doneqtail = satapkt;
10290 ahci_portp->ahciport_doneqtail =
10292 ahci_portp->ahciport_doneq_len ++;
10299 cv_broadcast(&ahci_portp->ahciport_cv);
10310 ahci_flush_doneq(ahci_port_t *ahci_portp)
10314 if (ahci_portp->ahciport_doneq) {
10315 satapkt = ahci_portp->ahciport_doneq;
10317 ahci_portp->ahciport_doneq = NULL;
10318 ahci_portp->ahciport_doneqtail = &ahci_portp->ahciport_doneq;
10319 ahci_portp->ahciport_doneq_len = 0;
10321 mutex_exit(&ahci_portp->ahciport_mutex);
10333 mutex_enter(&ahci_portp->ahciport_mutex);