Lines Matching refs:ncq_tfs

683         NCQTransferState *ncq_tfs = &s->dev[port].ncq_tfs[i];  in ahci_reset_port()  local
684 ncq_tfs->halt = false; in ahci_reset_port()
685 if (!ncq_tfs->used) { in ahci_reset_port()
689 if (ncq_tfs->aiocb) { in ahci_reset_port()
690 blk_aio_cancel(ncq_tfs->aiocb); in ahci_reset_port()
691 ncq_tfs->aiocb = NULL; in ahci_reset_port()
695 if (!ncq_tfs->used) { in ahci_reset_port()
699 qemu_sglist_destroy(&ncq_tfs->sglist); in ahci_reset_port()
700 ncq_tfs->used = 0; in ahci_reset_port()
786 static void ahci_write_fis_sdb(AHCIState *s, NCQTransferState *ncq_tfs) in ahci_write_fis_sdb() argument
788 AHCIDevice *ad = ncq_tfs->drive; in ahci_write_fis_sdb()
1015 static void ncq_err(NCQTransferState *ncq_tfs) in ncq_err() argument
1017 IDEState *ide_state = &ncq_tfs->drive->port.ifs[0]; in ncq_err()
1021 qemu_sglist_destroy(&ncq_tfs->sglist); in ncq_err()
1022 ncq_tfs->used = 0; in ncq_err()
1025 static void ncq_finish(NCQTransferState *ncq_tfs) in ncq_finish() argument
1030 if (ncq_tfs->used) { in ncq_finish()
1031 ncq_tfs->drive->finished |= (1 << ncq_tfs->tag); in ncq_finish()
1034 ahci_write_fis_sdb(ncq_tfs->drive->hba, ncq_tfs); in ncq_finish()
1036 trace_ncq_finish(ncq_tfs->drive->hba, ncq_tfs->drive->port_no, in ncq_finish()
1037 ncq_tfs->tag); in ncq_finish()
1039 block_acct_done(blk_get_stats(ncq_tfs->drive->port.ifs[0].blk), in ncq_finish()
1040 &ncq_tfs->acct); in ncq_finish()
1041 qemu_sglist_destroy(&ncq_tfs->sglist); in ncq_finish()
1042 ncq_tfs->used = 0; in ncq_finish()
1047 NCQTransferState *ncq_tfs = (NCQTransferState *)opaque; in ncq_cb() local
1048 IDEState *ide_state = &ncq_tfs->drive->port.ifs[0]; in ncq_cb()
1050 ncq_tfs->aiocb = NULL; in ncq_cb()
1053 bool is_read = ncq_tfs->cmd == READ_FPDMA_QUEUED; in ncq_cb()
1057 ncq_tfs->halt = true; in ncq_cb()
1060 ncq_err(ncq_tfs); in ncq_cb()
1067 if (!ncq_tfs->halt) { in ncq_cb()
1068 ncq_finish(ncq_tfs); in ncq_cb()
1087 static void execute_ncq_command(NCQTransferState *ncq_tfs) in execute_ncq_command() argument
1089 AHCIDevice *ad = ncq_tfs->drive; in execute_ncq_command()
1093 g_assert(is_ncq(ncq_tfs->cmd)); in execute_ncq_command()
1094 ncq_tfs->halt = false; in execute_ncq_command()
1096 switch (ncq_tfs->cmd) { in execute_ncq_command()
1098 trace_execute_ncq_command_read(ad->hba, port, ncq_tfs->tag, in execute_ncq_command()
1099 ncq_tfs->sector_count, ncq_tfs->lba); in execute_ncq_command()
1100 dma_acct_start(ide_state->blk, &ncq_tfs->acct, in execute_ncq_command()
1101 &ncq_tfs->sglist, BLOCK_ACCT_READ); in execute_ncq_command()
1102 ncq_tfs->aiocb = dma_blk_read(ide_state->blk, &ncq_tfs->sglist, in execute_ncq_command()
1103 ncq_tfs->lba << BDRV_SECTOR_BITS, in execute_ncq_command()
1105 ncq_cb, ncq_tfs); in execute_ncq_command()
1108 trace_execute_ncq_command_write(ad->hba, port, ncq_tfs->tag, in execute_ncq_command()
1109 ncq_tfs->sector_count, ncq_tfs->lba); in execute_ncq_command()
1110 dma_acct_start(ide_state->blk, &ncq_tfs->acct, in execute_ncq_command()
1111 &ncq_tfs->sglist, BLOCK_ACCT_WRITE); in execute_ncq_command()
1112 ncq_tfs->aiocb = dma_blk_write(ide_state->blk, &ncq_tfs->sglist, in execute_ncq_command()
1113 ncq_tfs->lba << BDRV_SECTOR_BITS, in execute_ncq_command()
1115 ncq_cb, ncq_tfs); in execute_ncq_command()
1119 ncq_tfs->tag, ncq_tfs->cmd); in execute_ncq_command()
1120 ncq_err(ncq_tfs); in execute_ncq_command()
1131 NCQTransferState *ncq_tfs = &ad->ncq_tfs[tag]; in process_ncq_command() local
1135 if (ncq_tfs->used) { in process_ncq_command()
1160 ncq_tfs->used = 1; in process_ncq_command()
1161 ncq_tfs->drive = ad; in process_ncq_command()
1162 ncq_tfs->slot = slot; in process_ncq_command()
1163 ncq_tfs->cmdh = &((AHCICmdHdr *)ad->lst)[slot]; in process_ncq_command()
1164 ncq_tfs->cmd = ncq_fis->command; in process_ncq_command()
1165 ncq_tfs->lba = ((uint64_t)ncq_fis->lba5 << 40) | in process_ncq_command()
1171 ncq_tfs->tag = tag; in process_ncq_command()
1191 ncq_tfs->sector_count = ((ncq_fis->sector_count_high << 8) | in process_ncq_command()
1193 if (!ncq_tfs->sector_count) { in process_ncq_command()
1194 ncq_tfs->sector_count = 0x10000; in process_ncq_command()
1196 size = ncq_tfs->sector_count * BDRV_SECTOR_SIZE; in process_ncq_command()
1197 ahci_populate_sglist(ad, &ncq_tfs->sglist, ncq_tfs->cmdh, size, 0); in process_ncq_command()
1199 if (ncq_tfs->sglist.size < size) { in process_ncq_command()
1202 ncq_tfs->sglist.size, size); in process_ncq_command()
1203 ncq_err(ncq_tfs); in process_ncq_command()
1206 } else if (ncq_tfs->sglist.size != size) { in process_ncq_command()
1208 ncq_tfs->sglist.size, size); in process_ncq_command()
1213 ncq_tfs->lba, in process_ncq_command()
1214 ncq_tfs->lba + ncq_tfs->sector_count - 1); in process_ncq_command()
1215 execute_ncq_command(ncq_tfs); in process_ncq_command()
1488 NCQTransferState *ncq_tfs = &ad->ncq_tfs[i]; in ahci_restart() local
1489 if (ncq_tfs->halt) { in ahci_restart()
1490 execute_ncq_command(ncq_tfs); in ahci_restart()
1727 VMSTATE_STRUCT_ARRAY(ncq_tfs, AHCIDevice, AHCI_MAX_CMDS,
1737 NCQTransferState *ncq_tfs; in ahci_state_post_load() local
1764 ncq_tfs = &ad->ncq_tfs[j]; in ahci_state_post_load()
1765 ncq_tfs->drive = ad; in ahci_state_post_load()
1767 if (ncq_tfs->used != ncq_tfs->halt) { in ahci_state_post_load()
1770 if (!ncq_tfs->halt) { in ahci_state_post_load()
1773 if (!is_ncq(ncq_tfs->cmd)) { in ahci_state_post_load()
1776 if (ncq_tfs->slot != ncq_tfs->tag) { in ahci_state_post_load()
1781 ncq_tfs->cmdh = get_cmd_header(s, i, ncq_tfs->slot); in ahci_state_post_load()
1782 if (!ncq_tfs->cmdh) { in ahci_state_post_load()
1785 ahci_populate_sglist(ncq_tfs->drive, &ncq_tfs->sglist, in ahci_state_post_load()
1786 ncq_tfs->cmdh, in ahci_state_post_load()
1787 ncq_tfs->sector_count * BDRV_SECTOR_SIZE, in ahci_state_post_load()
1789 if (ncq_tfs->sector_count != ncq_tfs->sglist.size >> 9) { in ahci_state_post_load()