Lines Matching refs:cmd

264 scsa1394_attach(dev_info_t *dip, ddi_attach_cmd_t cmd)  in scsa1394_attach()  argument
269 switch (cmd) { in scsa1394_attach()
341 scsa1394_detach(dev_info_t *dip, ddi_detach_cmd_t cmd) in scsa1394_detach() argument
350 switch (cmd) { in scsa1394_detach()
1078 uchar_t cmd, uint_t addr, uint_t cnt) in scsa1394_probe_g0_nodata() argument
1090 (void) scsi_setup_cdb((union scsi_cdb *)pkt->pkt_cdbp, cmd, addr, cnt, in scsa1394_probe_g0_nodata()
1262 scsa1394_cmd_t *cmd = PKT2CMD(pkt); in scsa1394_scsi_sync_pkt() local
1264 if (cmd->sc_flags & SCSA1394_CMD_DMA_BUF_VALID) { in scsa1394_scsi_sync_pkt()
1265 (void) ddi_dma_sync(cmd->sc_buf_dma_hdl, 0, 0, in scsa1394_scsi_sync_pkt()
1266 (cmd->sc_flags & SCSA1394_CMD_READ) ? in scsa1394_scsi_sync_pkt()
1283 scsa1394_cmd_t *cmd; in scsa1394_scsi_init_pkt() local
1297 if ((cmd = kmem_cache_alloc(sp->s_cmd_cache, kf)) == NULL) { in scsa1394_scsi_init_pkt()
1302 pkt = &cmd->sc_scsi_pkt; in scsa1394_scsi_init_pkt()
1303 pkt->pkt_ha_private = cmd; in scsa1394_scsi_init_pkt()
1305 pkt->pkt_private = cmd->sc_priv; in scsa1394_scsi_init_pkt()
1306 pkt->pkt_scbp = (uchar_t *)&cmd->sc_scb; in scsa1394_scsi_init_pkt()
1307 pkt->pkt_cdbp = (uchar_t *)&cmd->sc_pkt_cdb; in scsa1394_scsi_init_pkt()
1310 cmd->sc_lun = lp; in scsa1394_scsi_init_pkt()
1311 cmd->sc_pkt = pkt; in scsa1394_scsi_init_pkt()
1312 cmd->sc_cdb_len = cmdlen; in scsa1394_scsi_init_pkt()
1313 cmd->sc_scb_len = statuslen; in scsa1394_scsi_init_pkt()
1314 cmd->sc_priv_len = tgtlen; in scsa1394_scsi_init_pkt()
1317 if ((cmdlen > sizeof (cmd->sc_pkt_cdb)) || in scsa1394_scsi_init_pkt()
1318 (statuslen > sizeof (cmd->sc_scb)) || in scsa1394_scsi_init_pkt()
1319 (tgtlen > sizeof (cmd->sc_priv))) { in scsa1394_scsi_init_pkt()
1320 if (scsa1394_cmd_ext_alloc(sp, cmd, kf) != in scsa1394_scsi_init_pkt()
1322 kmem_cache_free(sp->s_cmd_cache, cmd); in scsa1394_scsi_init_pkt()
1329 if (scsa1394_cmd_cdb_dma_alloc(sp, cmd, flags, callback, arg) != in scsa1394_scsi_init_pkt()
1336 cmd = PKT2CMD(pkt); in scsa1394_scsi_init_pkt()
1339 cmd->sc_flags &= ~SCSA1394_CMD_RDWR; in scsa1394_scsi_init_pkt()
1343 if ((cmd->sc_flags & SCSA1394_CMD_DMA_BUF_VALID) == 0) { in scsa1394_scsi_init_pkt()
1344 if (scsa1394_cmd_buf_dma_alloc(sp, cmd, flags, callback, in scsa1394_scsi_init_pkt()
1352 if (scsa1394_cmd_buf_dma_move(sp, cmd) != DDI_SUCCESS) { in scsa1394_scsi_init_pkt()
1357 ASSERT(cmd->sc_win_len > 0); in scsa1394_scsi_init_pkt()
1358 pkt->pkt_resid = bp->b_bcount - cmd->sc_win_len; in scsa1394_scsi_init_pkt()
1367 ((cmd->sc_flags & SCSA1394_CMD_DMA_BUF_MAPIN) == 0)) { in scsa1394_scsi_init_pkt()
1369 cmd->sc_flags |= SCSA1394_CMD_DMA_BUF_MAPIN; in scsa1394_scsi_init_pkt()
1379 scsa1394_cmd_t *cmd = PKT2CMD(pkt); in scsa1394_scsi_destroy_pkt() local
1381 if (cmd->sc_flags & SCSA1394_CMD_DMA_BUF_VALID) { in scsa1394_scsi_destroy_pkt()
1382 scsa1394_cmd_buf_dma_free(sp, cmd); in scsa1394_scsi_destroy_pkt()
1384 if (cmd->sc_flags & SCSA1394_CMD_DMA_CDB_VALID) { in scsa1394_scsi_destroy_pkt()
1385 scsa1394_cmd_cdb_dma_free(sp, cmd); in scsa1394_scsi_destroy_pkt()
1387 if (cmd->sc_flags & SCSA1394_CMD_DMA_BUF_MAPIN) { in scsa1394_scsi_destroy_pkt()
1388 bp_mapout(cmd->sc_bp); in scsa1394_scsi_destroy_pkt()
1389 cmd->sc_flags &= ~SCSA1394_CMD_DMA_BUF_MAPIN; in scsa1394_scsi_destroy_pkt()
1391 if (cmd->sc_flags & SCSA1394_CMD_EXT) { in scsa1394_scsi_destroy_pkt()
1392 scsa1394_cmd_ext_free(sp, cmd); in scsa1394_scsi_destroy_pkt()
1395 kmem_cache_free(sp->s_cmd_cache, cmd); in scsa1394_scsi_destroy_pkt()
1402 scsa1394_cmd_t *cmd = PKT2CMD(pkt); in scsa1394_scsi_dmafree() local
1404 if (cmd->sc_flags & SCSA1394_CMD_DMA_BUF_VALID) { in scsa1394_scsi_dmafree()
1405 scsa1394_cmd_buf_dma_free(sp, cmd); in scsa1394_scsi_dmafree()
1407 if (cmd->sc_flags & SCSA1394_CMD_DMA_BUF_MAPIN) { in scsa1394_scsi_dmafree()
1408 bp_mapout(cmd->sc_bp); in scsa1394_scsi_dmafree()
1409 cmd->sc_flags &= ~SCSA1394_CMD_DMA_BUF_MAPIN; in scsa1394_scsi_dmafree()
1417 scsa1394_cmd_t *cmd = buf; in scsa1394_cmd_cache_constructor() local
1420 cmd->sc_task.ts_drv_priv = cmd; in scsa1394_cmd_cache_constructor()
1436 scsa1394_cmd_ext_alloc(scsa1394_state_t *sp, scsa1394_cmd_t *cmd, int kf) in scsa1394_cmd_ext_alloc() argument
1438 struct scsi_pkt *pkt = cmd->sc_pkt; in scsa1394_cmd_ext_alloc()
1441 if (cmd->sc_cdb_len > sizeof (cmd->sc_pkt_cdb)) { in scsa1394_cmd_ext_alloc()
1442 if ((buf = kmem_zalloc(cmd->sc_cdb_len, kf)) == NULL) { in scsa1394_cmd_ext_alloc()
1446 cmd->sc_flags |= SCSA1394_CMD_CDB_EXT; in scsa1394_cmd_ext_alloc()
1449 if (cmd->sc_scb_len > sizeof (cmd->sc_scb)) { in scsa1394_cmd_ext_alloc()
1450 if ((buf = kmem_zalloc(cmd->sc_scb_len, kf)) == NULL) { in scsa1394_cmd_ext_alloc()
1451 scsa1394_cmd_ext_free(sp, cmd); in scsa1394_cmd_ext_alloc()
1455 cmd->sc_flags |= SCSA1394_CMD_SCB_EXT; in scsa1394_cmd_ext_alloc()
1458 if (cmd->sc_priv_len > sizeof (cmd->sc_priv)) { in scsa1394_cmd_ext_alloc()
1459 if ((buf = kmem_zalloc(cmd->sc_priv_len, kf)) == NULL) { in scsa1394_cmd_ext_alloc()
1460 scsa1394_cmd_ext_free(sp, cmd); in scsa1394_cmd_ext_alloc()
1464 cmd->sc_flags |= SCSA1394_CMD_PRIV_EXT; in scsa1394_cmd_ext_alloc()
1472 scsa1394_cmd_ext_free(scsa1394_state_t *sp, scsa1394_cmd_t *cmd) in scsa1394_cmd_ext_free() argument
1474 struct scsi_pkt *pkt = cmd->sc_pkt; in scsa1394_cmd_ext_free()
1476 if (cmd->sc_flags & SCSA1394_CMD_CDB_EXT) { in scsa1394_cmd_ext_free()
1477 kmem_free(pkt->pkt_cdbp, cmd->sc_cdb_len); in scsa1394_cmd_ext_free()
1479 if (cmd->sc_flags & SCSA1394_CMD_SCB_EXT) { in scsa1394_cmd_ext_free()
1480 kmem_free(pkt->pkt_scbp, cmd->sc_scb_len); in scsa1394_cmd_ext_free()
1482 if (cmd->sc_flags & SCSA1394_CMD_PRIV_EXT) { in scsa1394_cmd_ext_free()
1483 kmem_free(pkt->pkt_private, cmd->sc_priv_len); in scsa1394_cmd_ext_free()
1485 cmd->sc_flags &= ~SCSA1394_CMD_EXT; in scsa1394_cmd_ext_free()
1490 scsa1394_cmd_cdb_dma_alloc(scsa1394_state_t *sp, scsa1394_cmd_t *cmd, in scsa1394_cmd_cdb_dma_alloc() argument
1493 if (sbp2_task_orb_alloc(cmd->sc_lun->l_lun, &cmd->sc_task, in scsa1394_cmd_cdb_dma_alloc()
1498 cmd->sc_flags |= SCSA1394_CMD_DMA_CDB_VALID; in scsa1394_cmd_cdb_dma_alloc()
1504 scsa1394_cmd_cdb_dma_free(scsa1394_state_t *sp, scsa1394_cmd_t *cmd) in scsa1394_cmd_cdb_dma_free() argument
1506 sbp2_task_orb_free(cmd->sc_lun->l_lun, &cmd->sc_task); in scsa1394_cmd_cdb_dma_free()
1507 cmd->sc_flags &= ~SCSA1394_CMD_DMA_CDB_VALID; in scsa1394_cmd_cdb_dma_free()
1514 scsa1394_cmd_buf_dma_alloc(scsa1394_state_t *sp, scsa1394_cmd_t *cmd, in scsa1394_cmd_buf_dma_alloc() argument
1517 scsa1394_lun_t *lp = cmd->sc_lun; in scsa1394_cmd_buf_dma_alloc()
1525 cmd->sc_bp = bp; in scsa1394_cmd_buf_dma_alloc()
1528 NULL, &cmd->sc_buf_dma_hdl)) != DDI_SUCCESS) { in scsa1394_cmd_buf_dma_alloc()
1533 cmd->sc_flags &= ~SCSA1394_CMD_RDWR; in scsa1394_cmd_buf_dma_alloc()
1536 cmd->sc_flags |= SCSA1394_CMD_READ; in scsa1394_cmd_buf_dma_alloc()
1539 cmd->sc_flags |= SCSA1394_CMD_WRITE; in scsa1394_cmd_buf_dma_alloc()
1548 ret = ddi_dma_buf_bind_handle(cmd->sc_buf_dma_hdl, bp, dma_flags, in scsa1394_cmd_buf_dma_alloc()
1553 cmd->sc_nwin = 1; in scsa1394_cmd_buf_dma_alloc()
1554 cmd->sc_curwin = 0; in scsa1394_cmd_buf_dma_alloc()
1555 cmd->sc_win_offset = 0; in scsa1394_cmd_buf_dma_alloc()
1556 cmd->sc_win_len = bp->b_bcount; in scsa1394_cmd_buf_dma_alloc()
1561 cmd->sc_curwin = 0; in scsa1394_cmd_buf_dma_alloc()
1562 if ((ddi_dma_numwin(cmd->sc_buf_dma_hdl, &cmd->sc_nwin) != in scsa1394_cmd_buf_dma_alloc()
1564 (ddi_dma_getwin(cmd->sc_buf_dma_hdl, cmd->sc_curwin, in scsa1394_cmd_buf_dma_alloc()
1565 &cmd->sc_win_offset, &cmd->sc_win_len, &dmac, &ccount) != in scsa1394_cmd_buf_dma_alloc()
1567 (void) ddi_dma_unbind_handle(cmd->sc_buf_dma_hdl); in scsa1394_cmd_buf_dma_alloc()
1568 ddi_dma_free_handle(&cmd->sc_buf_dma_hdl); in scsa1394_cmd_buf_dma_alloc()
1589 ddi_dma_free_handle(&cmd->sc_buf_dma_hdl); in scsa1394_cmd_buf_dma_alloc()
1592 cmd->sc_flags |= SCSA1394_CMD_DMA_BUF_BIND_VALID; in scsa1394_cmd_buf_dma_alloc()
1600 cmd->sc_buf_nsegs = 1; in scsa1394_cmd_buf_dma_alloc()
1601 cmd->sc_buf_seg_mem.ss_len = dmac.dmac_size; in scsa1394_cmd_buf_dma_alloc()
1602 cmd->sc_buf_seg_mem.ss_daddr = dmac.dmac_address; in scsa1394_cmd_buf_dma_alloc()
1603 cmd->sc_buf_seg = &cmd->sc_buf_seg_mem; in scsa1394_cmd_buf_dma_alloc()
1606 if (scsa1394_cmd_dmac2seg(sp, cmd, &dmac, ccount, kf) != in scsa1394_cmd_buf_dma_alloc()
1608 scsa1394_cmd_buf_dma_free(sp, cmd); in scsa1394_cmd_buf_dma_alloc()
1614 if (scsa1394_cmd_pt_dma_alloc(sp, cmd, callback, arg, in scsa1394_cmd_buf_dma_alloc()
1615 cmd->sc_buf_nsegs) != DDI_SUCCESS) { in scsa1394_cmd_buf_dma_alloc()
1616 scsa1394_cmd_buf_dma_free(sp, cmd); in scsa1394_cmd_buf_dma_alloc()
1623 if (scsa1394_cmd_buf_addr_alloc(sp, cmd) != DDI_SUCCESS) { in scsa1394_cmd_buf_dma_alloc()
1624 scsa1394_cmd_buf_dma_free(sp, cmd); in scsa1394_cmd_buf_dma_alloc()
1633 scsa1394_cmd_buf_dma_free(scsa1394_state_t *sp, scsa1394_cmd_t *cmd) in scsa1394_cmd_buf_dma_free() argument
1635 scsa1394_cmd_buf_addr_free(sp, cmd); in scsa1394_cmd_buf_dma_free()
1636 if (cmd->sc_flags & SCSA1394_CMD_DMA_BUF_PT_VALID) { in scsa1394_cmd_buf_dma_free()
1637 scsa1394_cmd_pt_dma_free(sp, cmd); in scsa1394_cmd_buf_dma_free()
1639 scsa1394_cmd_seg_free(sp, cmd); in scsa1394_cmd_buf_dma_free()
1640 if (cmd->sc_flags & SCSA1394_CMD_DMA_BUF_BIND_VALID) { in scsa1394_cmd_buf_dma_free()
1641 (void) ddi_dma_unbind_handle(cmd->sc_buf_dma_hdl); in scsa1394_cmd_buf_dma_free()
1642 ddi_dma_free_handle(&cmd->sc_buf_dma_hdl); in scsa1394_cmd_buf_dma_free()
1644 cmd->sc_flags &= ~(SCSA1394_CMD_DMA_BUF_VALID | SCSA1394_CMD_RDWR); in scsa1394_cmd_buf_dma_free()
1652 scsa1394_cmd_dmac2seg(scsa1394_state_t *sp, scsa1394_cmd_t *cmd, in scsa1394_cmd_dmac2seg() argument
1655 scsa1394_lun_t *lp = cmd->sc_lun; in scsa1394_cmd_dmac2seg()
1668 nsegs = max(ccount, cmd->sc_win_len / SBP2_PT_SEGSIZE_MAX) * 2; in scsa1394_cmd_dmac2seg()
1676 howmany(cmd->sc_win_len, scsa1394_symbios_page_size) + 1; in scsa1394_cmd_dmac2seg()
1680 if (nsegs > cmd->sc_buf_nsegs_alloc) { in scsa1394_cmd_dmac2seg()
1681 if ((cmd->sc_buf_seg = scsa1394_kmem_realloc(cmd->sc_buf_seg, in scsa1394_cmd_dmac2seg()
1682 cmd->sc_buf_nsegs_alloc, nsegs, in scsa1394_cmd_dmac2seg()
1684 cmd->sc_buf_nsegs_alloc = 0; in scsa1394_cmd_dmac2seg()
1687 cmd->sc_buf_nsegs_alloc = nsegs; in scsa1394_cmd_dmac2seg()
1691 cmd->sc_buf_nsegs = 0; in scsa1394_cmd_dmac2seg()
1698 if (cmd->sc_buf_nsegs >= cmd->sc_buf_nsegs_alloc) { in scsa1394_cmd_dmac2seg()
1699 if ((cmd->sc_buf_seg = scsa1394_kmem_realloc( in scsa1394_cmd_dmac2seg()
1700 cmd->sc_buf_seg, in scsa1394_cmd_dmac2seg()
1701 cmd->sc_buf_nsegs_alloc, in scsa1394_cmd_dmac2seg()
1702 cmd->sc_buf_nsegs_alloc + ccount, in scsa1394_cmd_dmac2seg()
1706 cmd->sc_buf_nsegs_alloc += ccount; in scsa1394_cmd_dmac2seg()
1709 seg = &cmd->sc_buf_seg[cmd->sc_buf_nsegs]; in scsa1394_cmd_dmac2seg()
1714 cmd->sc_buf_nsegs++; in scsa1394_cmd_dmac2seg()
1722 ddi_dma_nextcookie(cmd->sc_buf_dma_hdl, dmac); in scsa1394_cmd_dmac2seg()
1725 if (cmd->sc_buf_nsegs > lp->l_stat.stat_cmd_buf_max_nsegs) { in scsa1394_cmd_dmac2seg()
1726 lp->l_stat.stat_cmd_buf_max_nsegs = cmd->sc_buf_nsegs; in scsa1394_cmd_dmac2seg()
1734 scsa1394_cmd_seg_free(scsa1394_state_t *sp, scsa1394_cmd_t *cmd) in scsa1394_cmd_seg_free() argument
1736 if (cmd->sc_buf_nsegs_alloc > 0) { in scsa1394_cmd_seg_free()
1737 kmem_free(cmd->sc_buf_seg, cmd->sc_buf_nsegs_alloc * in scsa1394_cmd_seg_free()
1740 cmd->sc_buf_seg = NULL; in scsa1394_cmd_seg_free()
1741 cmd->sc_buf_nsegs = 0; in scsa1394_cmd_seg_free()
1742 cmd->sc_buf_nsegs_alloc = 0; in scsa1394_cmd_seg_free()
1746 scsa1394_cmd_pt_dma_alloc(scsa1394_state_t *sp, scsa1394_cmd_t *cmd, in scsa1394_cmd_pt_dma_alloc() argument
1749 scsa1394_lun_t *lp = cmd->sc_lun; in scsa1394_cmd_pt_dma_alloc()
1757 callback, NULL, &cmd->sc_pt_dma_hdl)) != DDI_SUCCESS) { in scsa1394_cmd_pt_dma_alloc()
1762 cmd->sc_pt_ent_alloc = cnt; in scsa1394_cmd_pt_dma_alloc()
1763 len = cmd->sc_pt_ent_alloc * SBP2_PT_ENT_SIZE; in scsa1394_cmd_pt_dma_alloc()
1764 if (ddi_dma_mem_alloc(cmd->sc_pt_dma_hdl, len, in scsa1394_cmd_pt_dma_alloc()
1766 &cmd->sc_pt_kaddr, &rlen, &cmd->sc_pt_acc_hdl) != DDI_SUCCESS) { in scsa1394_cmd_pt_dma_alloc()
1767 ddi_dma_free_handle(&cmd->sc_pt_dma_hdl); in scsa1394_cmd_pt_dma_alloc()
1772 if (ddi_dma_addr_bind_handle(cmd->sc_pt_dma_hdl, NULL, in scsa1394_cmd_pt_dma_alloc()
1773 cmd->sc_pt_kaddr, len, DDI_DMA_READ | DDI_DMA_CONSISTENT, in scsa1394_cmd_pt_dma_alloc()
1774 callback, arg, &cmd->sc_pt_dmac, &ccount) != DDI_DMA_MAPPED) { in scsa1394_cmd_pt_dma_alloc()
1775 ddi_dma_mem_free(&cmd->sc_pt_acc_hdl); in scsa1394_cmd_pt_dma_alloc()
1776 ddi_dma_free_handle(&cmd->sc_pt_dma_hdl); in scsa1394_cmd_pt_dma_alloc()
1785 aa.aa_address = cmd->sc_pt_dmac.dmac_address; in scsa1394_cmd_pt_dma_alloc()
1793 (void) ddi_dma_unbind_handle(cmd->sc_pt_dma_hdl); in scsa1394_cmd_pt_dma_alloc()
1794 ddi_dma_mem_free(&cmd->sc_pt_acc_hdl); in scsa1394_cmd_pt_dma_alloc()
1795 ddi_dma_free_handle(&cmd->sc_pt_dma_hdl); in scsa1394_cmd_pt_dma_alloc()
1800 cmd->sc_pt_baddr = aa.aa_address; in scsa1394_cmd_pt_dma_alloc()
1801 cmd->sc_pt_addr_hdl = aa.aa_hdl; in scsa1394_cmd_pt_dma_alloc()
1803 cmd->sc_flags |= SCSA1394_CMD_DMA_BUF_PT_VALID; in scsa1394_cmd_pt_dma_alloc()
1809 scsa1394_cmd_pt_dma_free(scsa1394_state_t *sp, scsa1394_cmd_t *cmd) in scsa1394_cmd_pt_dma_free() argument
1811 (void) ddi_dma_unbind_handle(cmd->sc_pt_dma_hdl); in scsa1394_cmd_pt_dma_free()
1812 ddi_dma_mem_free(&cmd->sc_pt_acc_hdl); in scsa1394_cmd_pt_dma_free()
1813 ddi_dma_free_handle(&cmd->sc_pt_dma_hdl); in scsa1394_cmd_pt_dma_free()
1814 (void) t1394_free_addr(sp->s_t1394_hdl, &cmd->sc_pt_addr_hdl, 0); in scsa1394_cmd_pt_dma_free()
1815 cmd->sc_flags &= ~SCSA1394_CMD_DMA_BUF_PT_VALID; in scsa1394_cmd_pt_dma_free()
1822 scsa1394_cmd_buf_addr_alloc(scsa1394_state_t *sp, scsa1394_cmd_t *cmd) in scsa1394_cmd_buf_addr_alloc() argument
1824 scsa1394_lun_t *lp = cmd->sc_lun; in scsa1394_cmd_buf_addr_alloc()
1836 if (cmd->sc_flags & SCSA1394_CMD_READ) { in scsa1394_cmd_buf_addr_alloc()
1842 for (i = 0; i < cmd->sc_buf_nsegs; i++) { in scsa1394_cmd_buf_addr_alloc()
1843 seg = &cmd->sc_buf_seg[i]; in scsa1394_cmd_buf_addr_alloc()
1859 cmd->sc_flags |= SCSA1394_CMD_DMA_BUF_ADDR_VALID; in scsa1394_cmd_buf_addr_alloc()
1865 scsa1394_cmd_buf_addr_free(scsa1394_state_t *sp, scsa1394_cmd_t *cmd) in scsa1394_cmd_buf_addr_free() argument
1869 for (i = 0; i < cmd->sc_buf_nsegs; i++) { in scsa1394_cmd_buf_addr_free()
1870 if (cmd->sc_buf_seg[i].ss_addr_hdl) { in scsa1394_cmd_buf_addr_free()
1872 &cmd->sc_buf_seg[i].ss_addr_hdl, 0); in scsa1394_cmd_buf_addr_free()
1875 cmd->sc_flags &= ~SCSA1394_CMD_DMA_BUF_ADDR_VALID; in scsa1394_cmd_buf_addr_free()
1882 scsa1394_cmd_buf_dma_move(scsa1394_state_t *sp, scsa1394_cmd_t *cmd) in scsa1394_cmd_buf_dma_move() argument
1889 if ((cmd->sc_curwin == cmd->sc_nwin) && (cmd->sc_nwin == 1)) { in scsa1394_cmd_buf_dma_move()
1892 if (++cmd->sc_curwin >= cmd->sc_nwin) { in scsa1394_cmd_buf_dma_move()
1895 if (ddi_dma_getwin(cmd->sc_buf_dma_hdl, cmd->sc_curwin, in scsa1394_cmd_buf_dma_move()
1896 &cmd->sc_win_offset, &cmd->sc_win_len, &dmac, &ccount) != in scsa1394_cmd_buf_dma_move()
1901 scsa1394_cmd_buf_addr_free(sp, cmd); in scsa1394_cmd_buf_dma_move()
1910 if (cmd->sc_flags & SCSA1394_CMD_DMA_BUF_PT_VALID) { in scsa1394_cmd_buf_dma_move()
1911 scsa1394_cmd_pt_dma_free(sp, cmd); in scsa1394_cmd_buf_dma_move()
1913 scsa1394_cmd_seg_free(sp, cmd); in scsa1394_cmd_buf_dma_move()
1915 cmd->sc_buf_nsegs = 1; in scsa1394_cmd_buf_dma_move()
1916 cmd->sc_buf_seg_mem.ss_len = dmac.dmac_size; in scsa1394_cmd_buf_dma_move()
1917 cmd->sc_buf_seg_mem.ss_daddr = dmac.dmac_address; in scsa1394_cmd_buf_dma_move()
1918 cmd->sc_buf_seg = &cmd->sc_buf_seg_mem; in scsa1394_cmd_buf_dma_move()
1921 if (scsa1394_cmd_dmac2seg(sp, cmd, &dmac, ccount, KM_NOSLEEP) != in scsa1394_cmd_buf_dma_move()
1927 if (scsa1394_cmd_pt_dma_alloc(sp, cmd, NULL_FUNC, NULL, in scsa1394_cmd_buf_dma_move()
1928 cmd->sc_buf_nsegs) != DDI_SUCCESS) { in scsa1394_cmd_buf_dma_move()
1934 if (scsa1394_cmd_buf_addr_alloc(sp, cmd) != DDI_SUCCESS) { in scsa1394_cmd_buf_dma_move()
1950 scsa1394_cmd_t *cmd = PKT2CMD(pkt); in scsa1394_scsi_start() local
1951 scsa1394_lun_t *lp = cmd->sc_lun; in scsa1394_scsi_start()
1990 if ((ret = scsa1394_cmd_fake_comp(sp, cmd)) == DDI_SUCCESS) { in scsa1394_scsi_start()
1994 scsa1394_cmd_fill_cdb(lp, cmd); in scsa1394_scsi_start()
1996 if (cmd->sc_flags & SCSA1394_CMD_DMA_BUF_PT_VALID) { in scsa1394_scsi_start()
1997 scsa1394_sbp2_seg2pt(lp, cmd); in scsa1394_scsi_start()
2000 scsa1394_sbp2_cmd2orb(lp, cmd); /* convert into ORB */ in scsa1394_scsi_start()
2002 if ((ret = scsa1394_sbp2_start(lp, cmd)) != TRAN_BUSY) { in scsa1394_scsi_start()
2013 scsa1394_cmd_t *cmd = PKT2CMD(pkt); in scsa1394_prepare_pkt() local
2020 if (cmd) { in scsa1394_prepare_pkt()
2021 cmd->sc_timeout = pkt->pkt_time; in scsa1394_prepare_pkt()
2031 cmd->sc_timeout = min(cmd->sc_timeout, in scsa1394_prepare_pkt()
2041 scsa1394_cmd_fill_cdb(scsa1394_lun_t *lp, scsa1394_cmd_t *cmd) in scsa1394_cmd_fill_cdb() argument
2043 cmd->sc_cdb_actual_len = cmd->sc_cdb_len; in scsa1394_cmd_fill_cdb()
2052 scsa1394_cmd_fill_cdb_rbc(lp, cmd); in scsa1394_cmd_fill_cdb()
2055 scsa1394_cmd_fill_cdb_other(lp, cmd); in scsa1394_cmd_fill_cdb()
2063 scsa1394_cmd_fill_cdb_rbc(scsa1394_lun_t *lp, scsa1394_cmd_t *cmd) in scsa1394_cmd_fill_cdb_rbc() argument
2066 struct scsi_pkt *pkt = CMD2PKT(cmd); in scsa1394_cmd_fill_cdb_rbc()
2068 struct buf *bp = cmd->sc_bp; in scsa1394_cmd_fill_cdb_rbc()
2082 cmd->sc_cdb_actual_len = CDB_GROUP1; in scsa1394_cmd_fill_cdb_rbc()
2088 cmd->sc_cdb_actual_len = CDB_GROUP1; in scsa1394_cmd_fill_cdb_rbc()
2122 scsa1394_cmd_fill_cdb_other(lp, cmd); in scsa1394_cmd_fill_cdb_rbc()
2125 cmd->sc_blk_size = blk_size; in scsa1394_cmd_fill_cdb_rbc()
2129 cmd->sc_flags |= SCSA1394_CMD_SYMBIOS_BREAKUP; in scsa1394_cmd_fill_cdb_rbc()
2131 cmd->sc_total_blks = cmd->sc_resid_blks = len; in scsa1394_cmd_fill_cdb_rbc()
2135 cmd->sc_xfer_blks = len; in scsa1394_cmd_fill_cdb_rbc()
2136 cmd->sc_xfer_bytes = len * blk_size; in scsa1394_cmd_fill_cdb_rbc()
2147 bzero(cmd->sc_cdb, cmd->sc_cdb_actual_len); in scsa1394_cmd_fill_cdb_rbc()
2154 bcopy(pkt->pkt_cdbp, cmd->sc_cdb, cmd->sc_cdb_actual_len); in scsa1394_cmd_fill_cdb_rbc()
2158 cmd->sc_cdb[0] = (uchar_t)opcode; in scsa1394_cmd_fill_cdb_rbc()
2159 scsa1394_cmd_fill_cdb_lba(cmd, lba); in scsa1394_cmd_fill_cdb_rbc()
2162 scsa1394_cmd_fill_read_cd_cdb_len(cmd, len); in scsa1394_cmd_fill_cdb_rbc()
2166 scsa1394_cmd_fill_12byte_cdb_len(cmd, len); in scsa1394_cmd_fill_cdb_rbc()
2169 scsa1394_cmd_fill_cdb_len(cmd, len); in scsa1394_cmd_fill_cdb_rbc()
2176 scsa1394_cmd_fill_cdb_other(scsa1394_lun_t *lp, scsa1394_cmd_t *cmd) in scsa1394_cmd_fill_cdb_other() argument
2178 struct scsi_pkt *pkt = CMD2PKT(cmd); in scsa1394_cmd_fill_cdb_other()
2180 cmd->sc_xfer_bytes = cmd->sc_win_len; in scsa1394_cmd_fill_cdb_other()
2181 cmd->sc_xfer_blks = cmd->sc_xfer_bytes / lp->l_lba_size; in scsa1394_cmd_fill_cdb_other()
2182 cmd->sc_total_blks = cmd->sc_xfer_blks; in scsa1394_cmd_fill_cdb_other()
2183 cmd->sc_lba = 0; in scsa1394_cmd_fill_cdb_other()
2185 bcopy(pkt->pkt_cdbp, cmd->sc_cdb, cmd->sc_cdb_len); in scsa1394_cmd_fill_cdb_other()
2192 scsa1394_cmd_fill_cdb_len(scsa1394_cmd_t *cmd, int len) in scsa1394_cmd_fill_cdb_len() argument
2194 cmd->sc_cdb[7] = len >> 8; in scsa1394_cmd_fill_cdb_len()
2195 cmd->sc_cdb[8] = (uchar_t)len; in scsa1394_cmd_fill_cdb_len()
2199 scsa1394_cmd_fill_cdb_lba(scsa1394_cmd_t *cmd, int lba) in scsa1394_cmd_fill_cdb_lba() argument
2201 cmd->sc_cdb[2] = lba >> 24; in scsa1394_cmd_fill_cdb_lba()
2202 cmd->sc_cdb[3] = lba >> 16; in scsa1394_cmd_fill_cdb_lba()
2203 cmd->sc_cdb[4] = lba >> 8; in scsa1394_cmd_fill_cdb_lba()
2204 cmd->sc_cdb[5] = (uchar_t)lba; in scsa1394_cmd_fill_cdb_lba()
2205 cmd->sc_lba = lba; in scsa1394_cmd_fill_cdb_lba()
2209 scsa1394_cmd_fill_12byte_cdb_len(scsa1394_cmd_t *cmd, int len) in scsa1394_cmd_fill_12byte_cdb_len() argument
2211 cmd->sc_cdb[6] = len >> 24; in scsa1394_cmd_fill_12byte_cdb_len()
2212 cmd->sc_cdb[7] = len >> 16; in scsa1394_cmd_fill_12byte_cdb_len()
2213 cmd->sc_cdb[8] = len >> 8; in scsa1394_cmd_fill_12byte_cdb_len()
2214 cmd->sc_cdb[9] = (uchar_t)len; in scsa1394_cmd_fill_12byte_cdb_len()
2218 scsa1394_cmd_fill_read_cd_cdb_len(scsa1394_cmd_t *cmd, int len) in scsa1394_cmd_fill_read_cd_cdb_len() argument
2220 cmd->sc_cdb[6] = len >> 16; in scsa1394_cmd_fill_read_cd_cdb_len()
2221 cmd->sc_cdb[7] = len >> 8; in scsa1394_cmd_fill_read_cd_cdb_len()
2222 cmd->sc_cdb[8] = (uchar_t)len; in scsa1394_cmd_fill_read_cd_cdb_len()
2256 scsa1394_cmd_fake_mode_sense(scsa1394_state_t *sp, scsa1394_cmd_t *cmd) in scsa1394_cmd_fake_mode_sense() argument
2258 struct scsi_pkt *pkt = CMD2PKT(cmd); in scsa1394_cmd_fake_mode_sense()
2287 scsa1394_cmd_fake_inquiry(scsa1394_state_t *sp, scsa1394_cmd_t *cmd) in scsa1394_cmd_fake_inquiry() argument
2289 scsa1394_lun_t *lp = cmd->sc_lun; in scsa1394_cmd_fake_inquiry()
2290 struct scsi_pkt *pkt = CMD2PKT(cmd); in scsa1394_cmd_fake_inquiry()
2294 inq = (struct scsi_inquiry *)cmd->sc_bp->b_un.b_addr; in scsa1394_cmd_fake_inquiry()
2314 scsa1394_cmd_fake_comp(scsa1394_state_t *sp, scsa1394_cmd_t *cmd) in scsa1394_cmd_fake_comp() argument
2316 struct scsi_pkt *pkt = CMD2PKT(cmd); in scsa1394_cmd_fake_comp()
2317 scsa1394_lun_t *lp = cmd->sc_lun; in scsa1394_cmd_fake_comp()
2370 return (scsa1394_cmd_fake_inquiry(sp, cmd)); in scsa1394_cmd_fake_comp()
2378 return (scsa1394_cmd_fake_mode_sense(sp, cmd)); in scsa1394_cmd_fake_comp()
2406 scsa1394_cmd_setup_next_xfer(scsa1394_lun_t *lp, scsa1394_cmd_t *cmd) in scsa1394_cmd_setup_next_xfer() argument
2408 struct scsi_pkt *pkt = CMD2PKT(cmd); in scsa1394_cmd_setup_next_xfer()
2410 ASSERT(cmd->sc_flags & SCSA1394_CMD_SYMBIOS_BREAKUP); in scsa1394_cmd_setup_next_xfer()
2412 cmd->sc_resid_blks -= cmd->sc_xfer_blks; in scsa1394_cmd_setup_next_xfer()
2413 if (cmd->sc_resid_blks <= 0) { in scsa1394_cmd_setup_next_xfer()
2418 scsa1394_cmd_adjust_cdb(lp, cmd); in scsa1394_cmd_setup_next_xfer()
2420 scsa1394_sbp2_seg2pt(lp, cmd); in scsa1394_cmd_setup_next_xfer()
2422 scsa1394_sbp2_cmd2orb(lp, cmd); in scsa1394_cmd_setup_next_xfer()
2424 if (scsa1394_sbp2_start(lp, cmd) != TRAN_ACCEPT) { in scsa1394_cmd_setup_next_xfer()
2425 pkt->pkt_resid = cmd->sc_resid_blks * cmd->sc_blk_size; in scsa1394_cmd_setup_next_xfer()
2437 scsa1394_cmd_adjust_cdb(scsa1394_lun_t *lp, scsa1394_cmd_t *cmd) in scsa1394_cmd_adjust_cdb() argument
2441 ASSERT(cmd->sc_flags & SCSA1394_CMD_SYMBIOS_BREAKUP); in scsa1394_cmd_adjust_cdb()
2443 cmd->sc_lba += cmd->sc_xfer_blks; in scsa1394_cmd_adjust_cdb()
2444 len = cmd->sc_resid_blks; in scsa1394_cmd_adjust_cdb()
2447 if (len * cmd->sc_blk_size > scsa1394_symbios_size_max) { in scsa1394_cmd_adjust_cdb()
2448 len = scsa1394_symbios_size_max / cmd->sc_blk_size; in scsa1394_cmd_adjust_cdb()
2451 switch (cmd->sc_cdb[0]) { in scsa1394_cmd_adjust_cdb()
2453 scsa1394_cmd_fill_read_cd_cdb_len(cmd, len); in scsa1394_cmd_adjust_cdb()
2457 scsa1394_cmd_fill_12byte_cdb_len(cmd, len); in scsa1394_cmd_adjust_cdb()
2462 scsa1394_cmd_fill_cdb_len(cmd, len); in scsa1394_cmd_adjust_cdb()
2465 scsa1394_cmd_fill_cdb_lba(cmd, cmd->sc_lba); in scsa1394_cmd_adjust_cdb()
2467 cmd->sc_xfer_blks = len; in scsa1394_cmd_adjust_cdb()
2468 cmd->sc_xfer_bytes = len * cmd->sc_blk_size; in scsa1394_cmd_adjust_cdb()
2472 scsa1394_cmd_status_proc(scsa1394_lun_t *lp, scsa1394_cmd_t *cmd) in scsa1394_cmd_status_proc() argument
2474 struct scsi_pkt *pkt = CMD2PKT(cmd); in scsa1394_cmd_status_proc()
2478 (cmd->sc_flags & SCSA1394_CMD_SYMBIOS_BREAKUP)) { in scsa1394_cmd_status_proc()
2479 if (scsa1394_cmd_setup_next_xfer(lp, cmd) == DDI_SUCCESS) { in scsa1394_cmd_status_proc()
2483 cmd->sc_flags &= ~SCSA1394_CMD_SYMBIOS_BREAKUP; in scsa1394_cmd_status_proc()
2487 scsa1394_cmd_status_wrka(lp, cmd); in scsa1394_cmd_status_proc()
2512 scsa1394_cmd_status_wrka(scsa1394_lun_t *lp, scsa1394_cmd_t *cmd) in scsa1394_cmd_status_wrka() argument
2514 struct scsi_pkt *pkt = CMD2PKT(cmd); in scsa1394_cmd_status_wrka()
2522 inq = (struct scsi_inquiry *)cmd->sc_bp->b_un.b_addr; in scsa1394_cmd_status_wrka()
2541 capacity_buf = (uint32_t *)cmd->sc_bp->b_un.b_addr; in scsa1394_cmd_status_wrka()