Lines Matching refs:ac

143 static int amr_enquiry_mapcmd(struct amr_command *ac, uint32_t data_size);
144 static void amr_enquiry_unmapcmd(struct amr_command *ac);
145 static int amr_mapcmd(struct amr_command *ac, int (*callback)(), caddr_t arg);
146 static void amr_unmapcmd(struct amr_command *ac);
156 static int amr_poll_command(struct amr_command *ac);
716 register struct amr_command *ac; in amr_periodic() local
744 ac = softs->busycmd[i]; in amr_periodic()
745 ac->ac_next = NULL; in amr_periodic()
756 pkt = ac->pkt; in amr_periodic()
929 struct amr_command ac; in amr_enquiry() local
934 bzero(&ac, sizeof (struct amr_command)); in amr_enquiry()
935 ac.ac_softs = softs; in amr_enquiry()
938 ac.ac_flags |= AMR_CMD_DATAOUT; in amr_enquiry()
941 ac.mailbox.mb_command = cmd; in amr_enquiry()
942 ac.mailbox.mb_cmdsub = cmdsub; in amr_enquiry()
943 ac.mailbox.mb_cmdqual = cmdqual; in amr_enquiry()
945 if (amr_enquiry_mapcmd(&ac, bufsize) != DDI_SUCCESS) in amr_enquiry()
948 if (amr_poll_command(&ac) || ac.ac_status != 0) { in amr_enquiry()
950 amr_enquiry_unmapcmd(&ac); in amr_enquiry()
957 bcopy(ac.ac_data, result, bufsize); in amr_enquiry()
959 amr_enquiry_unmapcmd(&ac); in amr_enquiry()
969 struct amr_command ac; in amr_flush() local
972 bzero(&ac, sizeof (struct amr_command)); in amr_flush()
973 ac.ac_softs = softs; in amr_flush()
975 ac.ac_flags |= AMR_CMD_DATAOUT; in amr_flush()
978 ac.mailbox.mb_command = AMR_CMD_FLUSH; in amr_flush()
981 if (error = amr_poll_command(&ac)) { in amr_flush()
994 amr_poll_command(struct amr_command *ac) in amr_poll_command() argument
996 struct amr_softs *softs = ac->ac_softs; in amr_poll_command()
1000 (void *)&ac->mailbox, in amr_poll_command()
1013 if ((ac->mailbox.mb_command == AMR_CMD_LREAD) || in amr_poll_command()
1014 (ac->mailbox.mb_command == AMR_CMD_LWRITE)) { in amr_poll_command()
1015 bcopy(ac->sgtable, in amr_poll_command()
1023 ac->mailbox.mb_physaddr = in amr_poll_command()
1027 bcopy(&ac->mailbox, (void *)softs->mailbox, AMR_MBOX_CMDSIZE); in amr_poll_command()
1052 ac->ac_status = softs->mailbox->mb_status; in amr_poll_command()
1073 return (ac->ac_status != AMR_STATUS_SUCCESS); in amr_poll_command()
1177 amr_setup_dmamap(struct amr_command *ac, ddi_dma_cookie_t *buffer_dma_cookiep, in amr_setup_dmamap() argument
1183 sg = ac->sgtable; in amr_setup_dmamap()
1187 ac->mailbox.mb_nsgelem = (uint8_t)nsegments; in amr_setup_dmamap()
1198 if ((ac->current_cookie + i + 1) != ac->num_of_cookie) in amr_setup_dmamap()
1199 ddi_dma_nextcookie(ac->buffer_dma_handle, in amr_setup_dmamap()
1203 ac->transfer_size = size; in amr_setup_dmamap()
1204 ac->data_transfered += size; in amr_setup_dmamap()
1212 amr_enquiry_mapcmd(struct amr_command *ac, uint32_t data_size) in amr_enquiry_mapcmd() argument
1214 struct amr_softs *softs = ac->ac_softs; in amr_enquiry_mapcmd()
1219 (void *)ac, ac->ac_flags)); in amr_enquiry_mapcmd()
1221 if (ac->ac_flags & AMR_CMD_DATAOUT) { in amr_enquiry_mapcmd()
1232 &ac->buffer_dma_handle) != in amr_enquiry_mapcmd()
1240 if (ddi_dma_mem_alloc(ac->buffer_dma_handle, in amr_enquiry_mapcmd()
1246 (caddr_t *)&ac->ac_data, in amr_enquiry_mapcmd()
1248 &ac->buffer_acc_handle) != in amr_enquiry_mapcmd()
1257 ac->buffer_dma_handle, in amr_enquiry_mapcmd()
1258 NULL, ac->ac_data, len, dma_flags, in amr_enquiry_mapcmd()
1259 DDI_DMA_SLEEP, NULL, &ac->buffer_dma_cookie, in amr_enquiry_mapcmd()
1260 &ac->num_of_cookie)) != DDI_DMA_MAPPED) { in amr_enquiry_mapcmd()
1267 ac->ac_dataphys = (&ac->buffer_dma_cookie)->dmac_address; in amr_enquiry_mapcmd()
1269 ((struct amr_mailbox *)&(ac->mailbox))->mb_param = 0; in amr_enquiry_mapcmd()
1270 ac->mailbox.mb_nsgelem = 0; in amr_enquiry_mapcmd()
1271 ac->mailbox.mb_physaddr = ac->ac_dataphys; in amr_enquiry_mapcmd()
1273 ac->ac_flags |= AMR_CMD_MAPPED; in amr_enquiry_mapcmd()
1278 if (ac->num_of_cookie) in amr_enquiry_mapcmd()
1279 (void) ddi_dma_unbind_handle(ac->buffer_dma_handle); in amr_enquiry_mapcmd()
1280 if (ac->buffer_acc_handle) { in amr_enquiry_mapcmd()
1281 ddi_dma_mem_free(&ac->buffer_acc_handle); in amr_enquiry_mapcmd()
1282 ac->buffer_acc_handle = NULL; in amr_enquiry_mapcmd()
1284 if (ac->buffer_dma_handle) { in amr_enquiry_mapcmd()
1285 (void) ddi_dma_free_handle(&ac->buffer_dma_handle); in amr_enquiry_mapcmd()
1286 ac->buffer_dma_handle = NULL; in amr_enquiry_mapcmd()
1296 amr_enquiry_unmapcmd(struct amr_command *ac) in amr_enquiry_unmapcmd() argument
1299 (void *)ac)); in amr_enquiry_unmapcmd()
1302 if ((ac->ac_flags & AMR_CMD_MAPPED) && ac->ac_data) { in amr_enquiry_unmapcmd()
1303 if (ac->buffer_dma_handle) in amr_enquiry_unmapcmd()
1305 ac->buffer_dma_handle); in amr_enquiry_unmapcmd()
1306 if (ac->buffer_acc_handle) { in amr_enquiry_unmapcmd()
1307 ddi_dma_mem_free(&ac->buffer_acc_handle); in amr_enquiry_unmapcmd()
1308 ac->buffer_acc_handle = NULL; in amr_enquiry_unmapcmd()
1310 if (ac->buffer_dma_handle) { in amr_enquiry_unmapcmd()
1312 &ac->buffer_dma_handle); in amr_enquiry_unmapcmd()
1313 ac->buffer_dma_handle = NULL; in amr_enquiry_unmapcmd()
1317 ac->ac_flags &= ~AMR_CMD_MAPPED; in amr_enquiry_unmapcmd()
1324 amr_mapcmd(struct amr_command *ac, int (*callback)(), caddr_t arg) in amr_mapcmd() argument
1333 (void *)ac, ac->ac_flags)); in amr_mapcmd()
1335 if (ac->ac_flags & AMR_CMD_DATAOUT) { in amr_mapcmd()
1341 if (ac->ac_flags & AMR_CMD_PKT_CONSISTENT) { in amr_mapcmd()
1344 if (ac->ac_flags & AMR_CMD_PKT_DMA_PARTIAL) { in amr_mapcmd()
1348 if ((!(ac->ac_flags & AMR_CMD_MAPPED)) && (ac->ac_buf == NULL)) { in amr_mapcmd()
1349 ac->ac_flags |= AMR_CMD_MAPPED; in amr_mapcmd()
1356 if (!(ac->ac_flags & AMR_CMD_MAPPED)) { in amr_mapcmd()
1358 error = ddi_dma_buf_bind_handle(ac->buffer_dma_handle, in amr_mapcmd()
1359 ac->ac_buf, in amr_mapcmd()
1363 &ac->buffer_dma_cookie, in amr_mapcmd()
1364 &ac->num_of_cookie); in amr_mapcmd()
1367 if (ddi_dma_numwin(ac->buffer_dma_handle, in amr_mapcmd()
1368 &ac->num_of_win) == DDI_FAILURE) { in amr_mapcmd()
1373 ac->buffer_dma_handle); in amr_mapcmd()
1375 &ac->buffer_dma_handle); in amr_mapcmd()
1376 ac->buffer_dma_handle = NULL; in amr_mapcmd()
1379 ac->current_win = 0; in amr_mapcmd()
1383 ac->num_of_win = 1; in amr_mapcmd()
1384 ac->current_win = 0; in amr_mapcmd()
1392 &ac->buffer_dma_handle); in amr_mapcmd()
1393 ac->buffer_dma_handle = NULL; in amr_mapcmd()
1397 ac->current_cookie = 0; in amr_mapcmd()
1399 ac->ac_flags |= AMR_CMD_MAPPED; in amr_mapcmd()
1400 } else if (ac->current_cookie == AMR_LAST_COOKIE_TAG) { in amr_mapcmd()
1402 ac->current_win++; in amr_mapcmd()
1403 (void) ddi_dma_getwin(ac->buffer_dma_handle, in amr_mapcmd()
1404 ac->current_win, &off, &len, in amr_mapcmd()
1405 &ac->buffer_dma_cookie, in amr_mapcmd()
1406 &ac->num_of_cookie); in amr_mapcmd()
1407 ac->current_cookie = 0; in amr_mapcmd()
1410 if ((ac->num_of_cookie - ac->current_cookie) > AMR_NSEG) { in amr_mapcmd()
1411 amr_setup_dmamap(ac, &ac->buffer_dma_cookie, AMR_NSEG); in amr_mapcmd()
1412 ac->current_cookie += AMR_NSEG; in amr_mapcmd()
1414 amr_setup_dmamap(ac, &ac->buffer_dma_cookie, in amr_mapcmd()
1415 ac->num_of_cookie - ac->current_cookie); in amr_mapcmd()
1416 ac->current_cookie = AMR_LAST_COOKIE_TAG; in amr_mapcmd()
1426 amr_unmapcmd(struct amr_command *ac) in amr_unmapcmd() argument
1429 (void *)ac)); in amr_unmapcmd()
1432 if ((ac->ac_flags & AMR_CMD_MAPPED) && in amr_unmapcmd()
1433 ac->ac_buf && ac->buffer_dma_handle) in amr_unmapcmd()
1434 (void) ddi_dma_unbind_handle(ac->buffer_dma_handle); in amr_unmapcmd()
1436 ac->ac_flags &= ~AMR_CMD_MAPPED; in amr_unmapcmd()
1501 struct amr_command *ac; in amr_tran_start() local
1515 ac = (struct amr_command *)pkt->pkt_ha_private; in amr_tran_start()
1516 bp = ac->ac_buf; in amr_tran_start()
1530 (void) amr_poll_command(ac); in amr_tran_start()
1541 ac->ac_prev = NULL; in amr_tran_start()
1542 ac->ac_next = NULL; in amr_tran_start()
1543 softs->waiting_q_head = ac; in amr_tran_start()
1544 softs->waiting_q_tail = ac; in amr_tran_start()
1546 ac->ac_next = NULL; in amr_tran_start()
1547 ac->ac_prev = softs->waiting_q_tail; in amr_tran_start()
1548 softs->waiting_q_tail->ac_next = ac; in amr_tran_start()
1549 softs->waiting_q_tail = ac; in amr_tran_start()
1587 amr_unmapcmd(ac); in amr_tran_start()
1614 amr_unmapcmd(ac); in amr_tran_start()
1633 amr_unmapcmd(ac); in amr_tran_start()
1655 amr_unmapcmd(ac); in amr_tran_start()
1674 amr_unmapcmd(ac); in amr_tran_start()
1847 struct amr_command *ac; in amr_tran_init_pkt() local
1876 ac = (struct amr_command *)pkt->pkt_ha_private; in amr_tran_init_pkt()
1877 ac->ac_buf = bp; in amr_tran_init_pkt()
1878 ac->cmdlen = cmdlen; in amr_tran_init_pkt()
1879 ac->ac_softs = softs; in amr_tran_init_pkt()
1880 ac->pkt = pkt; in amr_tran_init_pkt()
1881 ac->ac_flags &= ~AMR_CMD_GOT_SLOT; in amr_tran_init_pkt()
1882 ac->ac_flags &= ~AMR_CMD_BUSY; in amr_tran_init_pkt()
1890 &ac->buffer_dma_handle) != DDI_SUCCESS) { in amr_tran_init_pkt()
1903 ac = (struct amr_command *)pkt->pkt_ha_private; in amr_tran_init_pkt()
1906 ASSERT(ac != NULL); in amr_tran_init_pkt()
1909 ac->ac_flags |= AMR_CMD_DATAOUT; in amr_tran_init_pkt()
1911 ac->ac_flags |= AMR_CMD_DATAIN; in amr_tran_init_pkt()
1915 ac->ac_flags |= AMR_CMD_PKT_CONSISTENT; in amr_tran_init_pkt()
1919 ac->ac_flags |= AMR_CMD_PKT_DMA_PARTIAL; in amr_tran_init_pkt()
1922 if (amr_mapcmd(ac, callback, arg) != DDI_SUCCESS) { in amr_tran_init_pkt()
1927 pkt->pkt_resid = bp->b_bcount - ac->data_transfered; in amr_tran_init_pkt()
1932 ac->data_transfered)); in amr_tran_init_pkt()
1942 struct amr_command *ac = (struct amr_command *)pkt->pkt_ha_private; in amr_tran_destroy_pkt() local
1944 amr_unmapcmd(ac); in amr_tran_destroy_pkt()
1946 if (ac->buffer_dma_handle) { in amr_tran_destroy_pkt()
1947 (void) ddi_dma_free_handle(&ac->buffer_dma_handle); in amr_tran_destroy_pkt()
1948 ac->buffer_dma_handle = NULL; in amr_tran_destroy_pkt()
1959 struct amr_command *ac = (struct amr_command *)pkt->pkt_ha_private; in amr_tran_sync_pkt() local
1961 if (ac->buffer_dma_handle) { in amr_tran_sync_pkt()
1962 (void) ddi_dma_sync(ac->buffer_dma_handle, 0, 0, in amr_tran_sync_pkt()
1963 (ac->ac_flags & AMR_CMD_DATAIN) ? in amr_tran_sync_pkt()
1972 struct amr_command *ac = (struct amr_command *)pkt->pkt_ha_private; in amr_tran_dmafree() local
1974 if (ac->ac_flags & AMR_CMD_MAPPED) { in amr_tran_dmafree()
1975 (void) ddi_dma_unbind_handle(ac->buffer_dma_handle); in amr_tran_dmafree()
1976 (void) ddi_dma_free_handle(&ac->buffer_dma_handle); in amr_tran_dmafree()
1977 ac->buffer_dma_handle = NULL; in amr_tran_dmafree()
1978 ac->ac_flags &= ~AMR_CMD_MAPPED; in amr_tran_dmafree()
1987 struct amr_command *ac = (struct amr_command *)pkt->pkt_ha_private; in amr_rw_command() local
1991 if (ac->ac_flags & AMR_CMD_DATAOUT) { in amr_rw_command()
1997 ac->mailbox.mb_command = cmd; in amr_rw_command()
1998 ac->mailbox.mb_blkcount = in amr_rw_command()
1999 (ac->transfer_size + AMR_BLKSIZE - 1)/AMR_BLKSIZE; in amr_rw_command()
2000 ac->mailbox.mb_lba = (ac->cmdlen == 10) ? in amr_rw_command()
2002 ac->mailbox.mb_drive = (uint8_t)target; in amr_rw_command()
2079 struct amr_command *ac; in amr_start_waiting_queue() local
2087 while ((ac = softs->waiting_q_head) != NULL) { in amr_start_waiting_queue()
2104 ac->ac_timestamp = ddi_get_time(); in amr_start_waiting_queue()
2106 if (!(ac->ac_flags & AMR_CMD_GOT_SLOT)) { in amr_start_waiting_queue()
2108 softs->busycmd[slot] = ac; in amr_start_waiting_queue()
2109 ac->ac_slot = slot; in amr_start_waiting_queue()
2112 bcopy(ac->sgtable, in amr_start_waiting_queue()
2121 ac->mailbox.mb_physaddr = in amr_start_waiting_queue()
2126 softs->waiting_q_head = ac->ac_next; in amr_start_waiting_queue()
2128 ac->mailbox.mb_ident = ac->ac_slot + 1; in amr_start_waiting_queue()
2129 ac->mailbox.mb_busy = 1; in amr_start_waiting_queue()
2130 ac->ac_next = NULL; in amr_start_waiting_queue()
2131 ac->ac_prev = NULL; in amr_start_waiting_queue()
2132 ac->ac_flags |= AMR_CMD_GOT_SLOT; in amr_start_waiting_queue()
2150 bcopy(&ac->mailbox, (void *)softs->mailbox, in amr_start_waiting_queue()
2152 ac->ac_flags |= AMR_CMD_BUSY; in amr_start_waiting_queue()
2185 struct amr_command *ac, *head, *tail; in amr_done() local
2224 ac = softs->busycmd[idx]; in amr_done()
2226 if (ac != NULL) { in amr_done()
2234 ac->ac_flags &= ~AMR_CMD_BUSY; in amr_done()
2235 ac->ac_flags &= ~AMR_CMD_GOT_SLOT; in amr_done()
2236 ac->ac_status = mbox->mb_status; in amr_done()
2240 tail->ac_next = ac; in amr_done()
2241 tail = ac; in amr_done()
2244 tail = head = ac; in amr_done()
2245 ac->ac_next = NULL; in amr_done()
2273 register struct amr_command *ac, *localhead; in amr_call_pkt_comp() local
2278 ac = localhead; in amr_call_pkt_comp()
2279 localhead = ac->ac_next; in amr_call_pkt_comp()
2280 ac->ac_next = NULL; in amr_call_pkt_comp()
2282 pkt = ac->pkt; in amr_call_pkt_comp()
2285 if (ac->ac_status == AMR_STATUS_SUCCESS) { in amr_call_pkt_comp()