Lines Matching full:ch
85 static int siis_sata_connect(struct siis_channel *ch);
461 struct siis_channel *ch = device_get_softc(dev); in siis_ch_attach() local
465 ch->dev = dev; in siis_ch_attach()
466 ch->unit = (intptr_t)device_get_ivars(dev); in siis_ch_attach()
467 ch->quirks = ctlr->quirks; in siis_ch_attach()
468 ch->pm_level = 0; in siis_ch_attach()
470 device_get_unit(dev), "pm_level", &ch->pm_level); in siis_ch_attach()
474 ch->user[i].revision = sata_rev; in siis_ch_attach()
475 ch->user[i].mode = 0; in siis_ch_attach()
476 ch->user[i].bytecount = 8192; in siis_ch_attach()
477 ch->user[i].tags = SIIS_MAX_SLOTS; in siis_ch_attach()
478 ch->curr[i] = ch->user[i]; in siis_ch_attach()
479 if (ch->pm_level) in siis_ch_attach()
480 ch->user[i].caps = CTS_SATA_CAPS_H_PMREQ; in siis_ch_attach()
481 ch->user[i].caps |= CTS_SATA_CAPS_H_AN; in siis_ch_attach()
483 mtx_init(&ch->mtx, "SIIS channel lock", NULL, MTX_DEF); in siis_ch_attach()
484 rid = ch->unit; in siis_ch_attach()
485 if (!(ch->r_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, in siis_ch_attach()
491 mtx_lock(&ch->mtx); in siis_ch_attach()
493 if (!(ch->r_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, in siis_ch_attach()
499 if ((bus_setup_intr(dev, ch->r_irq, ATA_INTR_FLAGS, NULL, in siis_ch_attach()
500 siis_ch_intr_locked, dev, &ch->ih))) { in siis_ch_attach()
513 ch->sim = cam_sim_alloc(siisaction, siispoll, "siisch", ch, in siis_ch_attach()
514 device_get_unit(dev), &ch->mtx, 2, SIIS_MAX_SLOTS, devq); in siis_ch_attach()
515 if (ch->sim == NULL) { in siis_ch_attach()
521 if (xpt_bus_register(ch->sim, dev, 0) != CAM_SUCCESS) { in siis_ch_attach()
526 if (xpt_create_path(&ch->path, /*periph*/NULL, cam_sim_path(ch->sim), in siis_ch_attach()
532 mtx_unlock(&ch->mtx); in siis_ch_attach()
533 ch->led = led_create(siis_ch_led, dev, device_get_nameunit(dev)); in siis_ch_attach()
537 xpt_bus_deregister(cam_sim_path(ch->sim)); in siis_ch_attach()
539 cam_sim_free(ch->sim, /*free_devq*/TRUE); in siis_ch_attach()
541 bus_release_resource(dev, SYS_RES_IRQ, ATA_IRQ_RID, ch->r_irq); in siis_ch_attach()
543 bus_release_resource(dev, SYS_RES_MEMORY, ch->unit, ch->r_mem); in siis_ch_attach()
544 mtx_unlock(&ch->mtx); in siis_ch_attach()
545 mtx_destroy(&ch->mtx); in siis_ch_attach()
552 struct siis_channel *ch = device_get_softc(dev); in siis_ch_detach() local
554 led_destroy(ch->led); in siis_ch_detach()
555 mtx_lock(&ch->mtx); in siis_ch_detach()
556 xpt_async(AC_LOST_DEVICE, ch->path, NULL); in siis_ch_detach()
557 xpt_free_path(ch->path); in siis_ch_detach()
558 xpt_bus_deregister(cam_sim_path(ch->sim)); in siis_ch_detach()
559 cam_sim_free(ch->sim, /*free_devq*/TRUE); in siis_ch_detach()
560 mtx_unlock(&ch->mtx); in siis_ch_detach()
562 bus_teardown_intr(dev, ch->r_irq, ch->ih); in siis_ch_detach()
563 bus_release_resource(dev, SYS_RES_IRQ, ATA_IRQ_RID, ch->r_irq); in siis_ch_detach()
569 bus_release_resource(dev, SYS_RES_MEMORY, ch->unit, ch->r_mem); in siis_ch_detach()
570 mtx_destroy(&ch->mtx); in siis_ch_detach()
577 struct siis_channel *ch = device_get_softc(dev); in siis_ch_init() local
580 ATA_OUTL(ch->r_mem, SIIS_P_CTLCLR, SIIS_P_CTL_PORT_RESET); in siis_ch_init()
581 ATA_OUTL(ch->r_mem, SIIS_P_CTLCLR, SIIS_P_CTL_32BIT); in siis_ch_init()
582 if (ch->pm_present) in siis_ch_init()
583 ATA_OUTL(ch->r_mem, SIIS_P_CTLSET, SIIS_P_CTL_PME); in siis_ch_init()
585 ATA_OUTL(ch->r_mem, SIIS_P_CTLCLR, SIIS_P_CTL_PME); in siis_ch_init()
587 ATA_OUTL(ch->r_mem, SIIS_P_IESET, SIIS_P_IX_ENABLED); in siis_ch_init()
594 struct siis_channel *ch = device_get_softc(dev); in siis_ch_deinit() local
597 ATA_OUTL(ch->r_mem, SIIS_P_CTLSET, SIIS_P_CTL_PORT_RESET); in siis_ch_deinit()
604 struct siis_channel *ch = device_get_softc(dev); in siis_ch_suspend() local
606 mtx_lock(&ch->mtx); in siis_ch_suspend()
607 xpt_freeze_simq(ch->sim, 1); in siis_ch_suspend()
608 while (ch->oslots) in siis_ch_suspend()
609 msleep(ch, &ch->mtx, PRIBIO, "siissusp", hz/100); in siis_ch_suspend()
611 mtx_unlock(&ch->mtx); in siis_ch_suspend()
618 struct siis_channel *ch = device_get_softc(dev); in siis_ch_resume() local
620 mtx_lock(&ch->mtx); in siis_ch_resume()
623 xpt_release_simq(ch->sim, TRUE); in siis_ch_resume()
624 mtx_unlock(&ch->mtx); in siis_ch_resume()
649 struct siis_channel *ch; in siis_ch_led() local
652 ch = device_get_softc(dev); in siis_ch_led()
655 ATA_OUTL(ch->r_mem, SIIS_P_CTLCLR, SIIS_P_CTL_LED_ON); in siis_ch_led()
657 ATA_OUTL(ch->r_mem, SIIS_P_CTLSET, SIIS_P_CTL_LED_ON); in siis_ch_led()
668 struct siis_channel *ch = device_get_softc(dev); in siis_dmainit() local
675 0, NULL, NULL, &ch->dma.work_tag)) in siis_dmainit()
677 if (bus_dmamem_alloc(ch->dma.work_tag, (void **)&ch->dma.work, 0, in siis_dmainit()
678 &ch->dma.work_map)) in siis_dmainit()
680 if (bus_dmamap_load(ch->dma.work_tag, ch->dma.work_map, ch->dma.work, in siis_dmainit()
682 bus_dmamem_free(ch->dma.work_tag, ch->dma.work, ch->dma.work_map); in siis_dmainit()
685 ch->dma.work_bus = dcba.maddr; in siis_dmainit()
691 0, busdma_lock_mutex, &ch->mtx, &ch->dma.data_tag)) { in siis_dmainit()
713 struct siis_channel *ch = device_get_softc(dev); in siis_dmafini() local
715 if (ch->dma.data_tag) { in siis_dmafini()
716 bus_dma_tag_destroy(ch->dma.data_tag); in siis_dmafini()
717 ch->dma.data_tag = NULL; in siis_dmafini()
719 if (ch->dma.work_bus) { in siis_dmafini()
720 bus_dmamap_unload(ch->dma.work_tag, ch->dma.work_map); in siis_dmafini()
721 bus_dmamem_free(ch->dma.work_tag, ch->dma.work, ch->dma.work_map); in siis_dmafini()
722 ch->dma.work_bus = 0; in siis_dmafini()
723 ch->dma.work_map = NULL; in siis_dmafini()
724 ch->dma.work = NULL; in siis_dmafini()
726 if (ch->dma.work_tag) { in siis_dmafini()
727 bus_dma_tag_destroy(ch->dma.work_tag); in siis_dmafini()
728 ch->dma.work_tag = NULL; in siis_dmafini()
735 struct siis_channel *ch = device_get_softc(dev); in siis_slotsalloc() local
739 bzero(ch->slot, sizeof(ch->slot)); in siis_slotsalloc()
741 struct siis_slot *slot = &ch->slot[i]; in siis_slotsalloc()
748 callout_init_mtx(&slot->timeout, &ch->mtx, 0); in siis_slotsalloc()
750 if (bus_dmamap_create(ch->dma.data_tag, 0, &slot->dma.data_map)) in siis_slotsalloc()
751 device_printf(ch->dev, "FAILURE - create data_map\n"); in siis_slotsalloc()
758 struct siis_channel *ch = device_get_softc(dev); in siis_slotsfree() local
763 struct siis_slot *slot = &ch->slot[i]; in siis_slotsfree()
767 bus_dmamap_destroy(ch->dma.data_tag, slot->dma.data_map); in siis_slotsfree()
776 struct siis_channel *ch = device_get_softc(dev); in siis_notify_events() local
781 if (ch->quirks & SIIS_Q_SNTF) { in siis_notify_events()
782 status = ATA_INL(ch->r_mem, SIIS_P_SNTF); in siis_notify_events()
783 ATA_OUTL(ch->r_mem, SIIS_P_SNTF, status); in siis_notify_events()
789 status = (ch->pm_present) ? 0x8000 : 0x0001; in siis_notify_events()
797 xpt_path_path_id(ch->path), i, 0) == CAM_REQ_CMP) { in siis_notify_events()
808 struct siis_channel *ch = device_get_softc(dev); in siis_phy_check_events() local
811 if (ch->pm_level == 0) { in siis_phy_check_events()
812 u_int32_t status = ATA_INL(ch->r_mem, SIIS_P_SSTS); in siis_phy_check_events()
827 cam_sim_path(ch->sim), in siis_phy_check_events()
840 struct siis_channel *ch = device_get_softc(dev); in siis_ch_intr_locked() local
842 mtx_lock(&ch->mtx); in siis_ch_intr_locked()
844 mtx_unlock(&ch->mtx); in siis_ch_intr_locked()
851 struct siis_channel *ch = device_get_softc(dev); in siis_ch_intr() local
856 mtx_assert(&ch->mtx, MA_OWNED); in siis_ch_intr()
858 sstatus = ATA_INL(ch->r_mem, SIIS_P_SS); in siis_ch_intr()
859 ok = ch->rslots & ~sstatus; in siis_ch_intr()
863 siis_end_transaction(&ch->slot[i], SIIS_ERR_NONE); in siis_ch_intr()
869 istatus = ATA_INL(ch->r_mem, SIIS_P_IS) & in siis_ch_intr()
871 ATA_OUTL(ch->r_mem, SIIS_P_IS, istatus); in siis_ch_intr()
880 estatus = ATA_INL(ch->r_mem, SIIS_P_CMDERR); in siis_ch_intr()
881 ctx = ATA_INL(ch->r_mem, SIIS_P_CTX); in siis_ch_intr()
885 // __func__, sstatus, istatus, ch->rslots, estatus, ccs, port, in siis_ch_intr()
886 // ATA_INL(ch->r_mem, SIIS_P_SERR)); in siis_ch_intr()
888 if (!ch->recoverycmd && !ch->recovery) { in siis_ch_intr()
889 xpt_freeze_simq(ch->sim, ch->numrslots); in siis_ch_intr()
890 ch->recovery = 1; in siis_ch_intr()
892 if (ch->frozen) { in siis_ch_intr()
893 union ccb *fccb = ch->frozen; in siis_ch_intr()
894 ch->frozen = NULL; in siis_ch_intr()
906 tslots = ch->numtslots[port]; in siis_ch_intr()
909 if (((ch->rslots >> i) & 1) == 0) in siis_ch_intr()
911 if (ch->slot[i].ccb->ccb_h.target_id != port) in siis_ch_intr()
923 siis_end_transaction(&ch->slot[i], et); in siis_ch_intr()
929 if (ch->rslots != 0 && !ch->recoverycmd) in siis_ch_intr()
930 ATA_OUTL(ch->r_mem, SIIS_P_CTLSET, SIIS_P_CTL_RESUME); in siis_ch_intr()
941 if (((ch->rslots >> i) & 1) == 0) in siis_ch_intr()
943 siis_end_transaction(&ch->slot[i], et); in siis_ch_intr()
953 struct siis_channel *ch = device_get_softc(dev); in siis_check_collision() local
955 mtx_assert(&ch->mtx, MA_OWNED); in siis_check_collision()
959 if (((~ch->oslots) & (0x7fffffff >> (31 - in siis_check_collision()
960 ch->curr[ccb->ccb_h.target_id].tags))) == 0) in siis_check_collision()
966 if (ch->numrslots != 0) in siis_check_collision()
970 if (ch->aslots != 0) in siis_check_collision()
979 struct siis_channel *ch = device_get_softc(dev); in siis_begin_transaction() local
983 mtx_assert(&ch->mtx, MA_OWNED); in siis_begin_transaction()
988 tags = ch->curr[ccb->ccb_h.target_id].tags; in siis_begin_transaction()
989 tag = fls((~ch->oslots) & (0x7fffffff >> (31 - tags))) - 1; in siis_begin_transaction()
991 slot = &ch->slot[tag]; in siis_begin_transaction()
994 ch->oslots |= (1 << slot->slot); in siis_begin_transaction()
995 ch->numrslots++; in siis_begin_transaction()
998 ch->numtslots[ccb->ccb_h.target_id]++; in siis_begin_transaction()
1002 ch->aslots |= (1 << slot->slot); in siis_begin_transaction()
1007 bus_dmamap_load_ccb(ch->dma.data_tag, slot->dma.data_map, in siis_begin_transaction()
1018 struct siis_channel *ch = device_get_softc(slot->dev); in siis_dmasetprd() local
1023 mtx_assert(&ch->mtx, MA_OWNED); in siis_dmasetprd()
1026 if (!ch->recoverycmd) in siis_dmasetprd()
1027 xpt_freeze_simq(ch->sim, 1); in siis_dmasetprd()
1035 ctp = (struct siis_cmd *)(ch->dma.work + slot->prb_offset); in siis_dmasetprd()
1047 bus_dmamap_sync(ch->dma.data_tag, slot->dma.data_map, in siis_dmasetprd()
1059 struct siis_channel *ch = device_get_softc(dev); in siis_execute_transaction() local
1064 mtx_assert(&ch->mtx, MA_OWNED); in siis_execute_transaction()
1066 ctp = (struct siis_cmd *)(ch->dma.work + slot->prb_offset); in siis_execute_transaction()
1105 device_printf(ch->dev, "Setting up SATA FIS failed\n"); in siis_execute_transaction()
1106 if (!ch->recoverycmd) in siis_execute_transaction()
1107 xpt_freeze_simq(ch->sim, 1); in siis_execute_transaction()
1111 bus_dmamap_sync(ch->dma.work_tag, ch->dma.work_map, in siis_execute_transaction()
1115 ch->rslots |= (1 << slot->slot); in siis_execute_transaction()
1116 prb_bus = ch->dma.work_bus + slot->prb_offset; in siis_execute_transaction()
1117 ATA_OUTL(ch->r_mem, SIIS_P_CACTL(slot->slot), prb_bus); in siis_execute_transaction()
1118 ATA_OUTL(ch->r_mem, SIIS_P_CACTH(slot->slot), prb_bus >> 32); in siis_execute_transaction()
1129 struct siis_channel *ch = device_get_softc(dev); in siis_process_timeout() local
1132 mtx_assert(&ch->mtx, MA_OWNED); in siis_process_timeout()
1133 if (!ch->recoverycmd && !ch->recovery) { in siis_process_timeout()
1134 xpt_freeze_simq(ch->sim, ch->numrslots); in siis_process_timeout()
1135 ch->recovery = 1; in siis_process_timeout()
1140 if (ch->slot[i].state < SIIS_SLOT_RUNNING) in siis_process_timeout()
1142 siis_end_transaction(&ch->slot[i], SIIS_ERR_TIMEOUT); in siis_process_timeout()
1150 struct siis_channel *ch = device_get_softc(dev); in siis_rearm_timeout() local
1153 mtx_assert(&ch->mtx, MA_OWNED); in siis_rearm_timeout()
1155 struct siis_slot *slot = &ch->slot[i]; in siis_rearm_timeout()
1160 if ((ch->toslots & (1 << i)) == 0) in siis_rearm_timeout()
1174 struct siis_channel *ch = device_get_softc(dev); in siis_timeout() local
1177 mtx_assert(&ch->mtx, MA_OWNED); in siis_timeout()
1186 xpt_freeze_simq(ch->sim, ch->numrslots); in siis_timeout()
1193 __func__, ATA_INL(ch->r_mem, SIIS_P_IS), in siis_timeout()
1194 ATA_INL(ch->r_mem, SIIS_P_SS), ch->rslots, in siis_timeout()
1195 ATA_INL(ch->r_mem, SIIS_P_CMDERR), ATA_INL(ch->r_mem, SIIS_P_STS), in siis_timeout()
1196 ATA_INL(ch->r_mem, SIIS_P_SERR)); in siis_timeout()
1198 if (ch->toslots == 0) in siis_timeout()
1199 xpt_freeze_simq(ch->sim, 1); in siis_timeout()
1200 ch->toslots |= (1 << slot->slot); in siis_timeout()
1201 if ((ch->rslots & ~ch->toslots) == 0) in siis_timeout()
1205 ch->rslots & ~ch->toslots); in siis_timeout()
1213 struct siis_channel *ch = device_get_softc(dev); in siis_end_transaction() local
1217 mtx_assert(&ch->mtx, MA_OWNED); in siis_end_transaction()
1218 bus_dmamap_sync(ch->dma.work_tag, ch->dma.work_map, in siis_end_transaction()
1230 res->status = ATA_INB(ch->r_mem, offs + 2); in siis_end_transaction()
1231 res->error = ATA_INB(ch->r_mem, offs + 3); in siis_end_transaction()
1232 res->lba_low = ATA_INB(ch->r_mem, offs + 4); in siis_end_transaction()
1233 res->lba_mid = ATA_INB(ch->r_mem, offs + 5); in siis_end_transaction()
1234 res->lba_high = ATA_INB(ch->r_mem, offs + 6); in siis_end_transaction()
1235 res->device = ATA_INB(ch->r_mem, offs + 7); in siis_end_transaction()
1236 res->lba_low_exp = ATA_INB(ch->r_mem, offs + 8); in siis_end_transaction()
1237 res->lba_mid_exp = ATA_INB(ch->r_mem, offs + 9); in siis_end_transaction()
1238 res->lba_high_exp = ATA_INB(ch->r_mem, offs + 10); in siis_end_transaction()
1239 res->sector_count = ATA_INB(ch->r_mem, offs + 12); in siis_end_transaction()
1240 res->sector_count_exp = ATA_INB(ch->r_mem, offs + 13); in siis_end_transaction()
1244 ch->numrslots == 1) { in siis_end_transaction()
1246 ATA_INL(ch->r_mem, SIIS_P_LRAM_SLOT(slot->slot) + 4); in siis_end_transaction()
1250 ch->numrslots == 1) { in siis_end_transaction()
1252 ATA_INL(ch->r_mem, SIIS_P_LRAM_SLOT(slot->slot) + 4); in siis_end_transaction()
1256 bus_dmamap_sync(ch->dma.data_tag, slot->dma.data_map, in siis_end_transaction()
1259 bus_dmamap_unload(ch->dma.data_tag, slot->dma.data_map); in siis_end_transaction()
1262 if (et != SIIS_ERR_NONE || ch->recovery) { in siis_end_transaction()
1263 ch->eslots |= (1 << slot->slot); in siis_end_transaction()
1267 if (et != SIIS_ERR_NONE && (!ch->recoverycmd) && in siis_end_transaction()
1280 ch->fatalerr = 1; in siis_end_transaction()
1296 ch->fatalerr = 1; in siis_end_transaction()
1300 ch->fatalerr = 1; in siis_end_transaction()
1307 ch->oslots &= ~(1 << slot->slot); in siis_end_transaction()
1308 ch->rslots &= ~(1 << slot->slot); in siis_end_transaction()
1309 ch->aslots &= ~(1 << slot->slot); in siis_end_transaction()
1313 ch->numrslots--; in siis_end_transaction()
1316 ch->numtslots[ccb->ccb_h.target_id]--; in siis_end_transaction()
1320 lastto = (ch->toslots == (1 << slot->slot)); in siis_end_transaction()
1321 ch->toslots &= ~(1 << slot->slot); in siis_end_transaction()
1323 xpt_release_simq(ch->sim, TRUE); in siis_end_transaction()
1335 ch->hold[slot->slot] = ccb; in siis_end_transaction()
1336 ch->numhslots++; in siis_end_transaction()
1340 if (ch->rslots == 0) { in siis_end_transaction()
1342 if (ch->toslots != 0 || ch->fatalerr) { in siis_end_transaction()
1346 if (ch->eslots != 0) in siis_end_transaction()
1349 if (!ch->recoverycmd && ch->numhslots) in siis_end_transaction()
1353 } else if ((ch->rslots & ~ch->toslots) == 0 && in siis_end_transaction()
1357 if (ch->frozen && !siis_check_collision(dev, ch->frozen)) { in siis_end_transaction()
1358 union ccb *fccb = ch->frozen; in siis_end_transaction()
1359 ch->frozen = NULL; in siis_end_transaction()
1361 xpt_release_simq(ch->sim, TRUE); in siis_end_transaction()
1368 struct siis_channel *ch = device_get_softc(dev); in siis_issue_recovery() local
1376 if (ch->hold[i]) in siis_issue_recovery()
1387 if (ch->hold[i] == NULL) in siis_issue_recovery()
1389 ch->hold[i]->ccb_h.status &= ~CAM_STATUS_MASK; in siis_issue_recovery()
1390 ch->hold[i]->ccb_h.status |= CAM_RESRC_UNAVAIL; in siis_issue_recovery()
1391 xpt_done(ch->hold[i]); in siis_issue_recovery()
1392 ch->hold[i] = NULL; in siis_issue_recovery()
1393 ch->numhslots--; in siis_issue_recovery()
1398 xpt_setup_ccb(&ccb->ccb_h, ch->hold[i]->ccb_h.path, in siis_issue_recovery()
1399 ch->hold[i]->ccb_h.pinfo.priority); in siis_issue_recovery()
1400 if (ch->hold[i]->ccb_h.func_code == XPT_ATA_IO) { in siis_issue_recovery()
1432 csio->data_ptr = (void *)&ch->hold[i]->csio.sense_data; in siis_issue_recovery()
1433 csio->dxfer_len = ch->hold[i]->csio.sense_len; in siis_issue_recovery()
1439 ch->recoverycmd = 1; in siis_issue_recovery()
1446 struct siis_channel *ch = device_get_softc(dev); in siis_process_read_log() local
1451 ch->recoverycmd = 0; in siis_process_read_log()
1456 if (!ch->hold[i]) in siis_process_read_log()
1458 if (ch->hold[i]->ccb_h.target_id != ccb->ccb_h.target_id) in siis_process_read_log()
1461 res = &ch->hold[i]->ataio.res; in siis_process_read_log()
1474 ch->hold[i]->ccb_h.status &= ~CAM_STATUS_MASK; in siis_process_read_log()
1475 ch->hold[i]->ccb_h.status |= CAM_REQUEUE_REQ; in siis_process_read_log()
1477 xpt_done(ch->hold[i]); in siis_process_read_log()
1478 ch->hold[i] = NULL; in siis_process_read_log()
1479 ch->numhslots--; in siis_process_read_log()
1488 if (!ch->hold[i]) in siis_process_read_log()
1490 if (ch->hold[i]->ccb_h.target_id != ccb->ccb_h.target_id) in siis_process_read_log()
1492 xpt_done(ch->hold[i]); in siis_process_read_log()
1493 ch->hold[i] = NULL; in siis_process_read_log()
1494 ch->numhslots--; in siis_process_read_log()
1504 struct siis_channel *ch = device_get_softc(dev); in siis_process_request_sense() local
1507 ch->recoverycmd = 0; in siis_process_request_sense()
1511 ch->hold[i]->ccb_h.status |= CAM_AUTOSNS_VALID; in siis_process_request_sense()
1513 ch->hold[i]->ccb_h.status &= ~CAM_STATUS_MASK; in siis_process_request_sense()
1514 ch->hold[i]->ccb_h.status |= CAM_AUTOSENSE_FAIL; in siis_process_request_sense()
1516 xpt_done(ch->hold[i]); in siis_process_request_sense()
1517 ch->hold[i] = NULL; in siis_process_request_sense()
1518 ch->numhslots--; in siis_process_request_sense()
1525 struct siis_channel *ch = device_get_softc(dev); in siis_portinit() local
1528 ch->eslots = 0; in siis_portinit()
1529 ch->recovery = 0; in siis_portinit()
1530 ATA_OUTL(ch->r_mem, SIIS_P_CTLCLR, SIIS_P_CTL_RESUME); in siis_portinit()
1532 ATA_OUTL(ch->r_mem, SIIS_P_PMPSTS(i), 0), in siis_portinit()
1533 ATA_OUTL(ch->r_mem, SIIS_P_PMPQACT(i), 0); in siis_portinit()
1535 ATA_OUTL(ch->r_mem, SIIS_P_CTLSET, SIIS_P_CTL_PORT_INIT); in siis_portinit()
1542 struct siis_channel *ch = device_get_softc(dev); in siis_devreset() local
1546 ATA_OUTL(ch->r_mem, SIIS_P_CTLSET, SIIS_P_CTL_DEV_RESET); in siis_devreset()
1547 while (((val = ATA_INL(ch->r_mem, SIIS_P_STS)) & in siis_devreset()
1562 struct siis_channel *ch = device_get_softc(dev); in siis_wait_ready() local
1566 while (((val = ATA_INL(ch->r_mem, SIIS_P_STS)) & in siis_wait_ready()
1581 struct siis_channel *ch = device_get_softc(dev); in siis_reset() local
1585 xpt_freeze_simq(ch->sim, 1); in siis_reset()
1588 if (!ch->recoverycmd && !ch->recovery) in siis_reset()
1589 xpt_freeze_simq(ch->sim, ch->numrslots); in siis_reset()
1591 if (ch->frozen) { in siis_reset()
1592 union ccb *fccb = ch->frozen; in siis_reset()
1593 ch->frozen = NULL; in siis_reset()
1605 if (ch->slot[i].state < SIIS_SLOT_RUNNING) in siis_reset()
1608 siis_end_transaction(&ch->slot[i], SIIS_ERR_INNOCENT); in siis_reset()
1612 if (!ch->hold[i]) in siis_reset()
1614 xpt_done(ch->hold[i]); in siis_reset()
1615 ch->hold[i] = NULL; in siis_reset()
1616 ch->numhslots--; in siis_reset()
1618 if (ch->toslots != 0) in siis_reset()
1619 xpt_release_simq(ch->sim, TRUE); in siis_reset()
1620 ch->eslots = 0; in siis_reset()
1621 ch->recovery = 0; in siis_reset()
1622 ch->toslots = 0; in siis_reset()
1623 ch->fatalerr = 0; in siis_reset()
1625 ATA_OUTL(ch->r_mem, SIIS_P_IECLR, 0x0000FFFF); in siis_reset()
1627 sata_rev = ch->user[ch->pm_present ? 15 : 0].revision; in siis_reset()
1636 ATA_OUTL(ch->r_mem, SIIS_P_SCTL, in siis_reset()
1637 ATA_SC_DET_IDLE | val | ((ch->pm_level > 0) ? 0 : in siis_reset()
1642 if (!siis_sata_connect(ch)) { in siis_reset()
1643 ch->devices = 0; in siis_reset()
1645 ATA_OUTL(ch->r_mem, SIIS_P_IESET, SIIS_P_IX_ENABLED); in siis_reset()
1650 xpt_async(AC_BUS_RESET, ch->path, NULL); in siis_reset()
1651 xpt_release_simq(ch->sim, TRUE); in siis_reset()
1660 ATA_OUTL(ch->r_mem, SIIS_P_CTLSET, SIIS_P_CTL_PORT_RESET); in siis_reset()
1663 ATA_OUTL(ch->r_mem, SIIS_P_CTLCLR, SIIS_P_CTL_PORT_RESET); in siis_reset()
1664 ATA_OUTL(ch->r_mem, SIIS_P_CTLCLR, SIIS_P_CTL_32BIT); in siis_reset()
1665 if (ch->pm_present) in siis_reset()
1666 ATA_OUTL(ch->r_mem, SIIS_P_CTLSET, SIIS_P_CTL_PME); in siis_reset()
1668 ATA_OUTL(ch->r_mem, SIIS_P_CTLCLR, SIIS_P_CTL_PME); in siis_reset()
1674 ch->devices = 1; in siis_reset()
1676 ATA_OUTL(ch->r_mem, SIIS_P_IS, 0xFFFFFFFF); in siis_reset()
1677 ATA_OUTL(ch->r_mem, SIIS_P_IESET, SIIS_P_IX_ENABLED); in siis_reset()
1679 device_printf(dev, "SIIS reset done: devices=%08x\n", ch->devices); in siis_reset()
1681 xpt_async(AC_BUS_RESET, ch->path, NULL); in siis_reset()
1682 xpt_release_simq(ch->sim, TRUE); in siis_reset()
1688 struct siis_channel *ch = device_get_softc(dev); in siis_setup_fis() local
1698 ch->curr[ccb->ccb_h.target_id].mode >= ATA_DMA) in siis_setup_fis()
1744 siis_sata_connect(struct siis_channel *ch) in siis_sata_connect() argument
1751 status = ATA_INL(ch->r_mem, SIIS_P_SSTS); in siis_sata_connect()
1760 device_printf(ch->dev, "SATA offline status=%08x\n", in siis_sata_connect()
1771 device_printf(ch->dev, in siis_sata_connect()
1778 device_printf(ch->dev, "SATA connect time=%dus status=%08x\n", in siis_sata_connect()
1782 ATA_OUTL(ch->r_mem, SIIS_P_SERR, 0xffffffff); in siis_sata_connect()
1807 struct siis_channel *ch; in siisaction() local
1812 ch = (struct siis_channel *)cam_sim_softc(sim); in siisaction()
1813 dev = ch->dev; in siisaction()
1814 mtx_assert(&ch->mtx, MA_OWNED); in siisaction()
1821 if (ch->devices == 0 || in siisaction()
1822 (ch->pm_present == 0 && in siisaction()
1831 ch->frozen = ccb; in siisaction()
1833 xpt_freeze_simq(ch->sim, 1); in siisaction()
1850 d = &ch->curr[ccb->ccb_h.target_id]; in siisaction()
1852 d = &ch->user[ccb->ccb_h.target_id]; in siisaction()
1862 ch->pm_present = cts->xport_specific.sata.pm_present; in siisaction()
1863 if (ch->pm_present) in siisaction()
1864 ATA_OUTL(ch->r_mem, SIIS_P_CTLSET, SIIS_P_CTL_PME); in siisaction()
1866 ATA_OUTL(ch->r_mem, SIIS_P_CTLCLR, SIIS_P_CTL_PME); in siisaction()
1885 d = &ch->curr[ccb->ccb_h.target_id]; in siisaction()
1887 d = &ch->user[ccb->ccb_h.target_id]; in siisaction()
1896 (ccb->ccb_h.target_id == 0 && !ch->pm_present))) { in siisaction()
1897 status = ATA_INL(ch->r_mem, SIIS_P_SSTS) & ATA_SS_SPD_MASK; in siisaction()
1905 if (ch->pm_level) in siisaction()
1909 ch->user[ccb->ccb_h.target_id].caps; in siisaction()
1916 (ch->quirks & SIIS_Q_SNTF) == 0) in siisaction()
1924 cts->xport_specific.sata.pm_present = ch->pm_present; in siisaction()
1984 struct siis_channel *ch = (struct siis_channel *)cam_sim_softc(sim); in siispoll() local
1986 siis_ch_intr(ch->dev); in siispoll()