Lines Matching refs:slot
68 static void fsl_sata_execute_transaction(struct fsl_sata_slot *slot);
70 static void fsl_sata_end_transaction(struct fsl_sata_slot *slot, enum fsl_sata_err_type et);
157 #define FSL_SATA_CTP_BUS(ch, slot) \ argument
158 ((ch->dma.work_bus + FSL_SATA_CT_OFFSET + (FSL_SATA_CT_SIZE * slot->slot)))
160 #define FSL_SATA_CTP(ch, slot) \ argument
162 (FSL_SATA_CT_SIZE * slot->slot)))
163 #define FSL_SATA_CLP(ch, slot) \ argument
165 (FSL_SATA_CL_SIZE * slot->slot)))
232 uint8_t slot; /* Number of this slot */ member
265 struct fsl_sata_slot slot[FSL_SATA_MAX_SLOTS]; member
640 bzero(ch->slot, sizeof(ch->slot)); in fsl_sata_slotsalloc()
642 struct fsl_sata_slot *slot = &ch->slot[i]; in fsl_sata_slotsalloc() local
644 slot->ch = ch; in fsl_sata_slotsalloc()
645 slot->slot = i; in fsl_sata_slotsalloc()
646 slot->state = FSL_SATA_SLOT_EMPTY; in fsl_sata_slotsalloc()
647 slot->ccb = NULL; in fsl_sata_slotsalloc()
648 callout_init_mtx(&slot->timeout, &ch->mtx, 0); in fsl_sata_slotsalloc()
650 if (bus_dmamap_create(ch->dma.data_tag, 0, &slot->dma.data_map)) in fsl_sata_slotsalloc()
663 struct fsl_sata_slot *slot = &ch->slot[i]; in fsl_sata_slotsfree() local
665 callout_drain(&slot->timeout); in fsl_sata_slotsfree()
666 if (slot->dma.data_map) { in fsl_sata_slotsfree()
667 bus_dmamap_destroy(ch->dma.data_tag, slot->dma.data_map); in fsl_sata_slotsfree()
668 slot->dma.data_map = NULL; in fsl_sata_slotsfree()
800 if (((ok >> i) & 1) && ch->slot[i].ccb != NULL) in fsl_sata_intr_main()
801 fsl_sata_end_transaction(&ch->slot[i], in fsl_sata_intr_main()
835 if (ch->slot[i].ccb == NULL) in fsl_sata_intr_main()
839 else if ((der & (1 << ch->slot[i].ccb->ccb_h.target_id)) != 0) in fsl_sata_intr_main()
843 fsl_sata_end_transaction(&ch->slot[i], et); in fsl_sata_intr_main()
886 struct fsl_sata_slot *slot; in fsl_sata_begin_transaction() local
906 slot = &ch->slot[tag]; in fsl_sata_begin_transaction()
907 slot->ccb = ccb; in fsl_sata_begin_transaction()
908 slot->ttl = 0; in fsl_sata_begin_transaction()
926 slot->state = FSL_SATA_SLOT_LOADING; in fsl_sata_begin_transaction()
927 bus_dmamap_load_ccb(ch->dma.data_tag, slot->dma.data_map, ccb, in fsl_sata_begin_transaction()
928 fsl_sata_dmasetprd, slot, 0); in fsl_sata_begin_transaction()
930 slot->dma.nsegs = 0; in fsl_sata_begin_transaction()
931 fsl_sata_execute_transaction(slot); in fsl_sata_begin_transaction()
942 struct fsl_sata_slot *slot = arg; in fsl_sata_dmasetprd() local
943 struct fsl_sata_channel *ch = slot->ch; in fsl_sata_dmasetprd()
950 fsl_sata_end_transaction(slot, FSL_SATA_ERR_INVALID); in fsl_sata_dmasetprd()
956 ctp = FSL_SATA_CTP(ch, slot); in fsl_sata_dmasetprd()
962 prd[j].dba = htole32(FSL_SATA_CTP_BUS(ch, slot) + in fsl_sata_dmasetprd()
971 slot->ttl += len; in fsl_sata_dmasetprd()
975 slot->dma.nsegs = j; in fsl_sata_dmasetprd()
979 bus_dmamap_sync(ch->dma.data_tag, slot->dma.data_map, in fsl_sata_dmasetprd()
980 ((slot->ccb->ccb_h.flags & CAM_DIR_IN) ? in fsl_sata_dmasetprd()
982 fsl_sata_execute_transaction(slot); in fsl_sata_dmasetprd()
987 fsl_sata_execute_transaction(struct fsl_sata_slot *slot) in fsl_sata_execute_transaction() argument
989 struct fsl_sata_channel *ch = slot->ch; in fsl_sata_execute_transaction()
992 union ccb *ccb = slot->ccb; in fsl_sata_execute_transaction()
1002 ctp = FSL_SATA_CTP(ch, slot); in fsl_sata_execute_transaction()
1004 if (!(fis_size = fsl_sata_setup_fis(ch, ctp, ccb, slot->slot))) { in fsl_sata_execute_transaction()
1006 fsl_sata_end_transaction(slot, FSL_SATA_ERR_INVALID); in fsl_sata_execute_transaction()
1010 clp = FSL_SATA_CLP(ch, slot); in fsl_sata_execute_transaction()
1012 clp->prd_length = htole16(slot->dma.nsegs); in fsl_sata_execute_transaction()
1030 slot->slot); in fsl_sata_execute_transaction()
1031 clp->ttl = htole32(slot->ttl); in fsl_sata_execute_transaction()
1032 clp->cda = htole32(FSL_SATA_CTP_BUS(ch, slot)); in fsl_sata_execute_transaction()
1036 slot->state = FSL_SATA_SLOT_RUNNING; in fsl_sata_execute_transaction()
1037 ch->rslots |= (1 << slot->slot); in fsl_sata_execute_transaction()
1039 ATA_OUTL(ch->r_mem, FSL_SATA_P_CQR, (1 << slot->slot)); in fsl_sata_execute_transaction()
1055 if ((ATA_INL(ch->r_mem, FSL_SATA_P_CCR) & (1 << slot->slot)) != 0) in fsl_sata_execute_transaction()
1061 slot->slot, port, softreset); in fsl_sata_execute_transaction()
1076 fsl_sata_end_transaction(slot, et); in fsl_sata_execute_transaction()
1080 callout_reset_sbt(&slot->timeout, SBT_1MS * ccb->ccb_h.timeout / 2, in fsl_sata_execute_transaction()
1081 0, fsl_sata_timeout, slot, 0); in fsl_sata_execute_transaction()
1095 if (ch->slot[i].state < FSL_SATA_SLOT_RUNNING) in fsl_sata_process_timeout()
1097 fsl_sata_end_transaction(&ch->slot[i], FSL_SATA_ERR_TIMEOUT); in fsl_sata_process_timeout()
1109 struct fsl_sata_slot *slot = &ch->slot[i]; in fsl_sata_rearm_timeout() local
1112 if (slot->state < FSL_SATA_SLOT_RUNNING) in fsl_sata_rearm_timeout()
1116 callout_reset_sbt(&slot->timeout, in fsl_sata_rearm_timeout()
1117 SBT_1MS * slot->ccb->ccb_h.timeout / 2, 0, in fsl_sata_rearm_timeout()
1118 fsl_sata_timeout, slot, 0); in fsl_sata_rearm_timeout()
1126 struct fsl_sata_slot *slot = arg; in fsl_sata_timeout() local
1127 struct fsl_sata_channel *ch = slot->ch; in fsl_sata_timeout()
1132 if (slot->state < FSL_SATA_SLOT_RUNNING) in fsl_sata_timeout()
1136 if (slot->state < FSL_SATA_SLOT_EXECUTING) { in fsl_sata_timeout()
1139 if ((sstatus & (1 << slot->slot)) != 0) in fsl_sata_timeout()
1140 slot->state = FSL_SATA_SLOT_EXECUTING; in fsl_sata_timeout()
1142 callout_reset_sbt(&slot->timeout, in fsl_sata_timeout()
1143 SBT_1MS * slot->ccb->ccb_h.timeout / 2, 0, in fsl_sata_timeout()
1144 fsl_sata_timeout, slot, 0); in fsl_sata_timeout()
1149 slot->slot, slot->ccb->ccb_h.target_id & 0x0f); in fsl_sata_timeout()
1164 ch->toslots |= (1 << slot->slot); in fsl_sata_timeout()
1174 fsl_sata_end_transaction(struct fsl_sata_slot *slot, enum fsl_sata_err_type et) in fsl_sata_end_transaction() argument
1176 struct fsl_sata_channel *ch = slot->ch; in fsl_sata_end_transaction()
1177 union ccb *ccb = slot->ccb; in fsl_sata_end_transaction()
1184 clp = FSL_SATA_CLP(ch, slot); in fsl_sata_end_transaction()
1191 struct fsl_sata_cmd_tab *ctp = FSL_SATA_CTP(ch, slot); in fsl_sata_end_transaction()
1228 bus_dmamap_sync(ch->dma.data_tag, slot->dma.data_map, in fsl_sata_end_transaction()
1231 bus_dmamap_unload(ch->dma.data_tag, slot->dma.data_map); in fsl_sata_end_transaction()
1234 ch->eslots |= (1 << slot->slot); in fsl_sata_end_transaction()
1287 ch->oslots &= ~(1 << slot->slot); in fsl_sata_end_transaction()
1288 ch->rslots &= ~(1 << slot->slot); in fsl_sata_end_transaction()
1289 ch->aslots &= ~(1 << slot->slot); in fsl_sata_end_transaction()
1290 slot->state = FSL_SATA_SLOT_EMPTY; in fsl_sata_end_transaction()
1291 slot->ccb = NULL; in fsl_sata_end_transaction()
1295 ATA_OUTL(ch->r_mem, FSL_SATA_P_CCR, 1 << slot->slot); in fsl_sata_end_transaction()
1303 lastto = (ch->toslots == (1 << slot->slot)); in fsl_sata_end_transaction()
1304 ch->toslots &= ~(1 << slot->slot); in fsl_sata_end_transaction()
1328 ch->hold[slot->slot] = ccb; in fsl_sata_end_transaction()
1595 if (ch->slot[i].state < FSL_SATA_SLOT_RUNNING) in fsl_sata_reset()
1598 fsl_sata_end_transaction(&ch->slot[i], FSL_SATA_ERR_INNOCENT); in fsl_sata_reset()