Lines Matching refs:tr

435 twa_request_wait_handler(struct twa_request *tr)  in twa_request_wait_handler()  argument
438 wakeup(tr); in twa_request_wait_handler()
483 twa_release_request(struct twa_request *tr) in twa_release_request() argument
488 sc = tr->tr_sc; in twa_release_request()
490 if ((tr->tr_flags & TWA_CMD_AEN) == 0) { in twa_release_request()
492 TAILQ_INSERT_TAIL(&tr->tr_sc->twa_free, tr, tr_link); in twa_release_request()
494 if (__predict_false((tr->tr_sc->twa_sc_flags & in twa_release_request()
496 tr->tr_sc->twa_sc_flags &= ~TWA_STATE_REQUEST_WAIT; in twa_release_request()
500 tr->tr_flags &= ~TWA_CMD_AEN_BUSY; in twa_release_request()
504 twa_unmap_request(struct twa_request *tr) in twa_unmap_request() argument
506 struct twa_softc *sc = tr->tr_sc; in twa_unmap_request()
511 if (tr->tr_data != NULL) { in twa_unmap_request()
512 if (tr->tr_cmd_pkt_type & TWA_CMD_PKT_TYPE_9K) in twa_unmap_request()
513 cmd_status = tr->tr_command->command.cmd_pkt_9k.status; in twa_unmap_request()
516 tr->tr_command->command.cmd_pkt_7k.generic.status; in twa_unmap_request()
518 if (tr->tr_flags & TWA_CMD_DATA_OUT) { in twa_unmap_request()
519 bus_dmamap_sync(tr->tr_sc->twa_dma_tag, tr->tr_dma_map, in twa_unmap_request()
520 0, tr->tr_length, BUS_DMASYNC_POSTREAD); in twa_unmap_request()
525 if (tr->tr_flags & TWA_CMD_DATA_COPY_NEEDED) in twa_unmap_request()
527 memcpy(tr->tr_real_data, tr->tr_data, in twa_unmap_request()
528 tr->tr_real_length); in twa_unmap_request()
530 if (tr->tr_flags & TWA_CMD_DATA_IN) in twa_unmap_request()
531 bus_dmamap_sync(tr->tr_sc->twa_dma_tag, tr->tr_dma_map, in twa_unmap_request()
532 0, tr->tr_length, BUS_DMASYNC_POSTWRITE); in twa_unmap_request()
534 bus_dmamap_unload(sc->twa_dma_tag, tr->tr_dma_map); in twa_unmap_request()
538 if (tr->tr_flags & TWA_CMD_DATA_COPY_NEEDED) { in twa_unmap_request()
540 uvm_km_kmem_free(kmem_va_arena, (vaddr_t)tr->tr_data, in twa_unmap_request()
541 tr->tr_length); in twa_unmap_request()
543 tr->tr_data = tr->tr_real_data; in twa_unmap_request()
544 tr->tr_length = tr->tr_real_length; in twa_unmap_request()
560 twa_wait_request(struct twa_request *tr, uint32_t timeout) in twa_wait_request() argument
566 tr->tr_flags |= TWA_CMD_SLEEP_ON_REQUEST; in twa_wait_request()
567 tr->tr_callback = twa_request_wait_handler; in twa_wait_request()
568 tr->tr_status = TWA_CMD_BUSY; in twa_wait_request()
570 rv = twa_map_request(tr); in twa_wait_request()
579 while (tr->tr_status != TWA_CMD_COMPLETE) { in twa_wait_request()
580 rv = tr->tr_error; in twa_wait_request()
583 if ((rv = tsleep(tr, PRIBIO, "twawait", timeout * hz)) == 0) in twa_wait_request()
596 if (tr->tr_status == TWA_CMD_BUSY) in twa_wait_request()
597 twa_reset(tr->tr_sc); in twa_wait_request()
601 TAILQ_REMOVE(&tr->tr_sc->twa_pending, tr, in twa_wait_request()
605 twa_unmap_request(tr); in twa_wait_request()
606 if (tr->tr_data) in twa_wait_request()
607 free(tr->tr_data, M_DEVBUF); in twa_wait_request()
609 twa_release_request(tr); in twa_wait_request()
637 twa_immediate_request(struct twa_request *tr, uint32_t timeout) in twa_immediate_request() argument
642 rv = twa_map_request(tr); in twa_immediate_request()
654 rv = tr->tr_error; in twa_immediate_request()
658 twa_done(tr->tr_sc); in twa_immediate_request()
660 if (tr->tr_status == TWA_CMD_COMPLETE) in twa_immediate_request()
676 if (tr->tr_status == TWA_CMD_BUSY) in twa_immediate_request()
677 twa_reset(tr->tr_sc); in twa_immediate_request()
681 TAILQ_REMOVE(&tr->tr_sc->twa_pending, tr, tr_link); in twa_immediate_request()
683 twa_unmap_request(tr); in twa_immediate_request()
684 if (tr->tr_data) in twa_immediate_request()
685 free(tr->tr_data, M_DEVBUF); in twa_immediate_request()
687 twa_release_request(tr); in twa_immediate_request()
693 twa_inquiry(struct twa_request *tr, int lunid) in twa_inquiry() argument
698 if (tr->tr_data == NULL) in twa_inquiry()
701 memset(tr->tr_data, 0, TWA_SECTOR_SIZE); in twa_inquiry()
703 tr->tr_length = TWA_SECTOR_SIZE; in twa_inquiry()
704 tr->tr_cmd_pkt_type = TWA_CMD_PKT_TYPE_9K; in twa_inquiry()
705 tr->tr_flags |= TWA_CMD_DATA_IN | TWA_CMD_DATA_OUT; in twa_inquiry()
707 tr_9k_cmd = &tr->tr_command->command.cmd_pkt_9k; in twa_inquiry()
711 tr_9k_cmd->request_id = tr->tr_request_id; in twa_inquiry()
724 ((struct scsipi_inquiry_data *)tr->tr_data)->device = in twa_inquiry()
727 error = twa_immediate_request(tr, TWA_REQUEST_TIMEOUT_PERIOD); in twa_inquiry()
731 if (((struct scsipi_inquiry_data *)tr->tr_data)->device == in twa_inquiry()
749 twa_read_capacity(struct twa_request *tr, int lunid) in twa_read_capacity() argument
755 if (tr->tr_data == NULL) in twa_read_capacity()
758 memset(tr->tr_data, 0, TWA_SECTOR_SIZE); in twa_read_capacity()
760 tr->tr_length = TWA_SECTOR_SIZE; in twa_read_capacity()
761 tr->tr_cmd_pkt_type = TWA_CMD_PKT_TYPE_9K; in twa_read_capacity()
762 tr->tr_flags |= TWA_CMD_DATA_OUT; in twa_read_capacity()
764 tr_9k_cmd = &tr->tr_command->command.cmd_pkt_9k; in twa_read_capacity()
768 tr_9k_cmd->request_id = tr->tr_request_id; in twa_read_capacity()
776 error = twa_immediate_request(tr, TWA_REQUEST_TIMEOUT_PERIOD); in twa_read_capacity()
781 ((struct scsipi_read_capacity_16_data *)tr->tr_data)->addr) + 1); in twa_read_capacity()
784 tr->tr_data)->addr) + 1; in twa_read_capacity()
791 twa_request_sense(struct twa_request *tr, int lunid) in twa_request_sense() argument
796 if (tr->tr_data == NULL) in twa_request_sense()
799 memset(tr->tr_data, 0, TWA_SECTOR_SIZE); in twa_request_sense()
801 tr->tr_length = TWA_SECTOR_SIZE; in twa_request_sense()
802 tr->tr_cmd_pkt_type = TWA_CMD_PKT_TYPE_9K; in twa_request_sense()
803 tr->tr_flags |= TWA_CMD_DATA_OUT; in twa_request_sense()
805 tr_9k_cmd = &tr->tr_command->command.cmd_pkt_9k; in twa_request_sense()
809 tr_9k_cmd->request_id = tr->tr_request_id; in twa_request_sense()
822 if ((tr->tr_flags & TWA_CMD_AEN) != 0) in twa_request_sense()
823 error = twa_map_request(tr); in twa_request_sense()
825 error = twa_immediate_request(tr, TWA_REQUEST_TIMEOUT_PERIOD); in twa_request_sense()
833 struct twa_request *tr; in twa_alloc_req_pkts() local
899 tr = &(sc->twa_req_buf[i]); in twa_alloc_req_pkts()
900 tr->tr_command = tc; in twa_alloc_req_pkts()
901 tr->tr_cmd_phys = sc->twa_cmd_pkt_phys + in twa_alloc_req_pkts()
903 tr->tr_request_id = i; in twa_alloc_req_pkts()
904 tr->tr_sc = sc; in twa_alloc_req_pkts()
915 &tr->tr_dma_map)) != 0) { in twa_alloc_req_pkts()
923 sc->twa_lookup[i] = tr; in twa_alloc_req_pkts()
924 twa_release_request(tr); in twa_alloc_req_pkts()
926 tr->tr_flags |= TWA_CMD_AEN; in twa_alloc_req_pkts()
978 struct twa_request *tr; in twa_request_bus_scan() local
986 if ((tr = twa_get_request(sc, 0)) == NULL) { in twa_request_bus_scan()
991 tr->tr_cmd_pkt_type |= TWA_CMD_PKT_TYPE_INTERNAL; in twa_request_bus_scan()
993 tr->tr_data = malloc(TWA_SECTOR_SIZE, M_DEVBUF, M_WAITOK); in twa_request_bus_scan()
997 if (twa_inquiry(tr, unit) == 0) { in twa_request_bus_scan()
1000 ((struct scsipi_inquiry_data *)tr->tr_data)); in twa_request_bus_scan()
1003 twa_read_capacity(tr, unit); in twa_request_bus_scan()
1026 free(tr->tr_data, M_DEVBUF); in twa_request_bus_scan()
1028 twa_release_request(tr); in twa_request_bus_scan()
1038 twa_check_busy_q(struct twa_request *tr) in twa_check_busy_q() argument
1041 struct twa_softc *sc = tr->tr_sc; in twa_check_busy_q()
1044 if (tr->tr_request_id == rq->tr_request_id) { in twa_check_busy_q()
1046 } else if (tr->bp == rq->bp && tr->bp != 0) { in twa_check_busy_q()
1061 twa_start(struct twa_request *tr) in twa_start() argument
1063 struct twa_softc *sc = tr->tr_sc; in twa_start()
1082 TWA_WRITE_COMMAND_QUEUE_LOW(sc, tr->tr_cmd_phys + in twa_start()
1092 if (tr->tr_status != TWA_CMD_PENDING) { in twa_start()
1093 tr->tr_status = TWA_CMD_PENDING; in twa_start()
1094 TAILQ_INSERT_TAIL(&tr->tr_sc->twa_pending, in twa_start()
1095 tr, tr_link); in twa_start()
1102 (char *)tr->tr_command - (char *)sc->twa_cmds, in twa_start()
1111 TWA_WRITE_COMMAND_QUEUE_HIGH(sc, tr->tr_cmd_phys + in twa_start()
1115 TWA_WRITE_COMMAND_QUEUE(sc, tr->tr_cmd_phys + in twa_start()
1120 tr->tr_status = TWA_CMD_BUSY; in twa_start()
1123 twa_check_busy_q(tr); in twa_start()
1127 TAILQ_INSERT_TAIL(&tr->tr_sc->twa_busy, tr, tr_link); in twa_start()
1185 struct twa_request *tr; in twa_drain_busy_queue() local
1189 while ((tr = TAILQ_FIRST(&sc->twa_busy)) != NULL) { in twa_drain_busy_queue()
1190 TAILQ_REMOVE(&sc->twa_busy, tr, tr_link); in twa_drain_busy_queue()
1192 twa_unmap_request(tr); in twa_drain_busy_queue()
1193 if ((tr->tr_cmd_pkt_type & TWA_CMD_PKT_TYPE_INTERNAL) || in twa_drain_busy_queue()
1194 (tr->tr_cmd_pkt_type & TWA_CMD_PKT_TYPE_IOCTL)) { in twa_drain_busy_queue()
1196 if (tr->tr_data) in twa_drain_busy_queue()
1197 free(tr->tr_data, M_DEVBUF); in twa_drain_busy_queue()
1198 twa_release_request(tr); in twa_drain_busy_queue()
1201 tr->tr_command->command.cmd_pkt_9k.status = EIO; in twa_drain_busy_queue()
1202 if (tr->tr_callback) in twa_drain_busy_queue()
1203 tr->tr_callback(tr); in twa_drain_busy_queue()
1211 struct twa_request *tr; in twa_drain_pending_queue() local
1218 while ((tr = TAILQ_FIRST(&sc->twa_pending)) != NULL) { in twa_drain_pending_queue()
1219 TAILQ_REMOVE(&sc->twa_pending, tr, tr_link); in twa_drain_pending_queue()
1221 if ((error = twa_start(tr))) { in twa_drain_pending_queue()
1223 tr->tr_status = TWA_CMD_PENDING; in twa_drain_pending_queue()
1226 TAILQ_INSERT_HEAD(&tr->tr_sc->twa_pending, in twa_drain_pending_queue()
1227 tr, tr_link); in twa_drain_pending_queue()
1231 if (tr->tr_flags & TWA_CMD_SLEEP_ON_REQUEST) { in twa_drain_pending_queue()
1232 tr->tr_error = error; in twa_drain_pending_queue()
1233 tr->tr_callback(tr); in twa_drain_pending_queue()
1248 struct twa_request *tr; in twa_drain_aen_queue() local
1254 if ((tr = twa_get_request(sc, 0)) == NULL) { in twa_drain_aen_queue()
1258 tr->tr_cmd_pkt_type |= TWA_CMD_PKT_TYPE_INTERNAL; in twa_drain_aen_queue()
1259 tr->tr_callback = NULL; in twa_drain_aen_queue()
1261 tr->tr_data = malloc(TWA_SECTOR_SIZE, M_DEVBUF, M_NOWAIT); in twa_drain_aen_queue()
1263 if (tr->tr_data == NULL) { in twa_drain_aen_queue()
1268 if (twa_request_sense(tr, 0) != 0) { in twa_drain_aen_queue()
1281 twa_done(tr->tr_sc); in twa_drain_aen_queue()
1283 if (tr->tr_status != TWA_CMD_BUSY) in twa_drain_aen_queue()
1288 if (tr->tr_status != TWA_CMD_COMPLETE) { in twa_drain_aen_queue()
1293 if ((error = tr->tr_command->command.cmd_pkt_9k.status)) in twa_drain_aen_queue()
1296 cmd_hdr = (struct twa_command_header *)(tr->tr_data); in twa_drain_aen_queue()
1302 free(tr->tr_data, M_DEVBUF); in twa_drain_aen_queue()
1303 twa_release_request(tr); in twa_drain_aen_queue()
1306 if (tr) { in twa_drain_aen_queue()
1307 if (tr->tr_data) in twa_drain_aen_queue()
1308 free(tr->tr_data, M_DEVBUF); in twa_drain_aen_queue()
1310 twa_release_request(tr); in twa_drain_aen_queue()
1318 twa_check_response_q(struct twa_request *tr, int clear)
1334 req = tr;
1336 if ((tr->tr_cmd_pkt_type & TWA_CMD_PKT_TYPE_EXTERNAL) != 0) {
1338 if (req->tr_request_id == tr->tr_request_id)
1340 tr->tr_request_id);
1343 if (tr->bp == hist[j])
1345 tr->tr_request_id);
1347 req = tr;
1357 struct twa_request *tr; in twa_done() local
1369 tr = sc->sc_twa_request + rq.u.response_id; in twa_done()
1371 twa_check_response_q(tr, 0); in twa_done()
1374 twa_unmap_request(tr); in twa_done()
1376 tr->tr_status = TWA_CMD_COMPLETE; in twa_done()
1377 TAILQ_REMOVE(&tr->tr_sc->twa_busy, tr, tr_link); in twa_done()
1379 if (tr->tr_callback) in twa_done()
1380 tr->tr_callback(tr); in twa_done()
1704 twa_submit_io(struct twa_request *tr) in twa_submit_io() argument
1708 if ((error = twa_start(tr))) { in twa_submit_io()
1712 tr->tr_error = error; in twa_submit_io()
1736 struct twa_request *tr = (struct twa_request *)arg; in twa_setup_data_dmamap() local
1737 struct twa_command_packet *cmdpkt = tr->tr_command; in twa_setup_data_dmamap()
1743 if (tr->tr_cmd_pkt_type & TWA_CMD_PKT_TYPE_9K) { in twa_setup_data_dmamap()
1758 if (tr->tr_flags & TWA_CMD_DATA_IN) in twa_setup_data_dmamap()
1759 bus_dmamap_sync(tr->tr_sc->twa_dma_tag, tr->tr_dma_map, 0, in twa_setup_data_dmamap()
1760 tr->tr_length, BUS_DMASYNC_PREWRITE); in twa_setup_data_dmamap()
1761 if (tr->tr_flags & TWA_CMD_DATA_OUT) { in twa_setup_data_dmamap()
1766 if (tr->tr_flags & TWA_CMD_DATA_COPY_NEEDED) in twa_setup_data_dmamap()
1767 memcpy(tr->tr_data, tr->tr_real_data, in twa_setup_data_dmamap()
1768 tr->tr_real_length); in twa_setup_data_dmamap()
1769 bus_dmamap_sync(tr->tr_sc->twa_dma_tag, tr->tr_dma_map, 0, in twa_setup_data_dmamap()
1770 tr->tr_length, BUS_DMASYNC_PREREAD); in twa_setup_data_dmamap()
1772 error = twa_submit_io(tr); in twa_setup_data_dmamap()
1775 twa_unmap_request(tr); in twa_setup_data_dmamap()
1782 if (tr->tr_callback) in twa_setup_data_dmamap()
1783 twa_release_request(tr); in twa_setup_data_dmamap()
1799 twa_map_request(struct twa_request *tr) in twa_map_request() argument
1801 struct twa_softc *sc = tr->tr_sc; in twa_map_request()
1805 if (tr->tr_data != NULL) { in twa_map_request()
1807 if (((u_long)tr->tr_data & (511)) != 0) { in twa_map_request()
1808 tr->tr_flags |= TWA_CMD_DATA_COPY_NEEDED; in twa_map_request()
1809 tr->tr_real_data = tr->tr_data; in twa_map_request()
1810 tr->tr_real_length = tr->tr_length; in twa_map_request()
1813 tr->tr_length, (VM_NOSLEEP | VM_INSTANTFIT), in twa_map_request()
1814 (vmem_addr_t *)&tr->tr_data); in twa_map_request()
1818 tr->tr_data = tr->tr_real_data; in twa_map_request()
1819 tr->tr_length = tr->tr_real_length; in twa_map_request()
1822 if ((tr->tr_flags & TWA_CMD_DATA_IN) != 0) in twa_map_request()
1823 memcpy(tr->tr_data, tr->tr_real_data, in twa_map_request()
1824 tr->tr_length); in twa_map_request()
1830 rv = bus_dmamap_load(sc->twa_dma_tag, tr->tr_dma_map, in twa_map_request()
1831 tr->tr_data, tr->tr_length, NULL, in twa_map_request()
1835 if ((tr->tr_flags & TWA_CMD_DATA_COPY_NEEDED) != 0) { in twa_map_request()
1838 (vaddr_t)tr->tr_data, tr->tr_length); in twa_map_request()
1844 if ((rv = twa_setup_data_dmamap(tr, in twa_map_request()
1845 tr->tr_dma_map->dm_segs, in twa_map_request()
1846 tr->tr_dma_map->dm_nsegs))) { in twa_map_request()
1848 if (tr->tr_flags & TWA_CMD_DATA_COPY_NEEDED) { in twa_map_request()
1851 (vaddr_t)tr->tr_data, tr->tr_length); in twa_map_request()
1853 tr->tr_data = tr->tr_real_data; in twa_map_request()
1854 tr->tr_length = tr->tr_real_length; in twa_map_request()
1859 if ((rv = twa_submit_io(tr))) in twa_map_request()
1860 twa_unmap_request(tr); in twa_map_request()
1976 struct twa_request *tr = 0; in twaioctl() local
1990 tr = twa_get_request_wait(sc, 0); in twaioctl()
1991 KASSERT(tr != NULL); in twaioctl()
1999 if ((tr->tr_length = data_buf_size_adjusted)) { in twaioctl()
2000 if ((tr->tr_data = malloc(data_buf_size_adjusted, in twaioctl()
2007 (void *) (tr->tr_data), in twaioctl()
2011 tr->tr_flags |= TWA_CMD_DATA_IN | TWA_CMD_DATA_OUT; in twaioctl()
2013 tr->tr_cmd_pkt_type |= TWA_CMD_PKT_TYPE_IOCTL; in twaioctl()
2014 cmdpkt = tr->tr_command; in twaioctl()
2020 tr->tr_request_id; in twaioctl()
2023 if ((error = twa_wait_request(tr, TWA_REQUEST_TIMEOUT_PERIOD))) { in twaioctl()
2034 if (tr->tr_length) in twaioctl()
2035 error = copyout(tr->tr_data, user_buf->pdata, in twaioctl()
2039 if (tr->tr_data) in twaioctl()
2040 free(tr->tr_data, M_DEVBUF); in twaioctl()
2042 if (tr) in twaioctl()
2043 twa_release_request(tr); in twaioctl()
2315 size_t param_size, void (* callback)(struct twa_request *tr), in twa_get_param() argument
2319 struct twa_request *tr; in twa_get_param() local
2323 if ((tr = twa_get_request(sc, 0)) == NULL) { in twa_get_param()
2328 tr->tr_cmd_pkt_type |= TWA_CMD_PKT_TYPE_INTERNAL; in twa_get_param()
2338 tr->tr_data = *param; in twa_get_param()
2339 tr->tr_length = TWA_SECTOR_SIZE; in twa_get_param()
2340 tr->tr_flags = TWA_CMD_DATA_IN | TWA_CMD_DATA_OUT; in twa_get_param()
2343 cmd = &(tr->tr_command->command.cmd_pkt_7k); in twa_get_param()
2345 tr->tr_command->cmd_hdr.header_desc.size_header = 128; in twa_get_param()
2350 cmd->param.request_id = tr->tr_request_id; in twa_get_param()
2362 rv = twa_immediate_request(tr, TWA_REQUEST_TIMEOUT_PERIOD); in twa_get_param()
2371 twa_release_request(tr); in twa_get_param()
2375 tr->tr_callback = callback; in twa_get_param()
2376 rv = twa_map_request(tr); in twa_get_param()
2380 if (tr) in twa_get_param()
2381 twa_release_request(tr); in twa_get_param()
2401 void *data, void (* callback)(struct twa_request *tr)) in twa_set_param() argument
2403 struct twa_request *tr; in twa_set_param() local
2408 tr = twa_get_request(sc, 0); in twa_set_param()
2409 if (tr == NULL) in twa_set_param()
2412 tr->tr_cmd_pkt_type |= TWA_CMD_PKT_TYPE_INTERNAL; in twa_set_param()
2419 tr->tr_data = param; in twa_set_param()
2420 tr->tr_length = TWA_SECTOR_SIZE; in twa_set_param()
2421 tr->tr_flags = TWA_CMD_DATA_IN | TWA_CMD_DATA_OUT; in twa_set_param()
2424 cmd = &(tr->tr_command->command.cmd_pkt_7k); in twa_set_param()
2426 tr->tr_command->cmd_hdr.header_desc.size_header = 128; in twa_set_param()
2431 cmd->param.request_id = tr->tr_request_id; in twa_set_param()
2444 error = twa_immediate_request(tr, TWA_REQUEST_TIMEOUT_PERIOD); in twa_set_param()
2458 twa_release_request(tr); in twa_set_param()
2462 tr->tr_callback = callback; in twa_set_param()
2463 if ((error = twa_map_request(tr))) in twa_set_param()
2471 if (tr) in twa_set_param()
2472 twa_release_request(tr); in twa_set_param()
2516 struct twa_request *tr; in twa_init_connection() local
2521 if ((tr = twa_get_request(sc, 0)) == NULL) in twa_init_connection()
2523 tr->tr_cmd_pkt_type |= TWA_CMD_PKT_TYPE_INTERNAL; in twa_init_connection()
2525 init_connect = &(tr->tr_command->command.cmd_pkt_7k.init_connect); in twa_init_connection()
2527 tr->tr_command->cmd_hdr.header_desc.size_header = 128; in twa_init_connection()
2530 init_connect->request_id = tr->tr_request_id; in twa_init_connection()
2548 error = twa_immediate_request(tr, TWA_REQUEST_TIMEOUT_PERIOD); in twa_init_connection()
2564 twa_release_request(tr); in twa_init_connection()
2568 if (tr) in twa_init_connection()
2569 twa_release_request(tr); in twa_init_connection()
2701 struct twa_request *tr; in twa_fetch_aen() local
2706 if ((tr = twa_get_request(sc, TWA_CMD_AEN)) == NULL) { in twa_fetch_aen()
2710 tr->tr_cmd_pkt_type |= TWA_CMD_PKT_TYPE_INTERNAL; in twa_fetch_aen()
2711 tr->tr_callback = twa_aen_callback; in twa_fetch_aen()
2712 tr->tr_data = malloc(TWA_SECTOR_SIZE, M_DEVBUF, M_NOWAIT); in twa_fetch_aen()
2713 if (twa_request_sense(tr, 0) != 0) { in twa_fetch_aen()
2714 if (tr->tr_data) in twa_fetch_aen()
2715 free(tr->tr_data, M_DEVBUF); in twa_fetch_aen()
2716 twa_release_request(tr); in twa_fetch_aen()
2733 twa_aen_callback(struct twa_request *tr) in twa_aen_callback() argument
2737 struct twa_softc *sc = tr->tr_sc; in twa_aen_callback()
2739 (struct twa_command_header *)(tr->tr_data); in twa_aen_callback()
2741 &(tr->tr_command->command.cmd_pkt_9k); in twa_aen_callback()
2744 if ((tr->tr_cmd_pkt_type & TWA_CMD_PKT_TYPE_9K) && in twa_aen_callback()
2752 printf("%x\t", tr->tr_command->cmd_hdr.sense_data[i]); in twa_aen_callback()
2756 printf("%x\t", ((int8_t *)(tr->tr_data))[i]); in twa_aen_callback()
2759 if (tr->tr_data) in twa_aen_callback()
2760 free(tr->tr_data, M_DEVBUF); in twa_aen_callback()
2761 twa_release_request(tr); in twa_aen_callback()
2878 twa_request_init(struct twa_request *tr, int flags) in twa_request_init() argument
2880 tr->tr_data = NULL; in twa_request_init()
2881 tr->tr_real_data = NULL; in twa_request_init()
2882 tr->tr_length = 0; in twa_request_init()
2883 tr->tr_real_length = 0; in twa_request_init()
2884 tr->tr_status = TWA_CMD_SETUP;/* command is in setup phase */ in twa_request_init()
2885 tr->tr_flags = flags; in twa_request_init()
2886 tr->tr_error = 0; in twa_request_init()
2887 tr->tr_callback = NULL; in twa_request_init()
2888 tr->tr_cmd_pkt_type = 0; in twa_request_init()
2889 tr->bp = 0; in twa_request_init()
2897 if (tr->tr_command->command.cmd_pkt_9k.status) in twa_request_init()
2898 memset(tr->tr_command, 0, in twa_request_init()
2901 memset(&(tr->tr_command->command), 0, 28); in twa_request_init()
2907 struct twa_request *tr; in twa_get_request_wait() local
2913 while ((tr = TAILQ_FIRST(&sc->twa_free)) == NULL) { in twa_get_request_wait()
2917 TAILQ_REMOVE(&sc->twa_free, tr, tr_link); in twa_get_request_wait()
2921 twa_request_init(tr, flags); in twa_get_request_wait()
2923 return(tr); in twa_get_request_wait()
2930 struct twa_request *tr; in twa_get_request() local
2937 tr = sc->sc_twa_request; in twa_get_request()
2944 if (__predict_false((tr = in twa_get_request()
2949 TAILQ_REMOVE(&sc->twa_free, tr, tr_link); in twa_get_request()
2953 twa_request_init(tr, flags); in twa_get_request()
2955 return(tr); in twa_get_request()