Lines Matching refs:ncq_tfs

650         NCQTransferState *ncq_tfs = &s->dev[port].ncq_tfs[i];  in ahci_reset_port()  local
651 ncq_tfs->halt = false; in ahci_reset_port()
652 if (!ncq_tfs->used) { in ahci_reset_port()
656 if (ncq_tfs->aiocb) { in ahci_reset_port()
657 blk_aio_cancel(ncq_tfs->aiocb); in ahci_reset_port()
658 ncq_tfs->aiocb = NULL; in ahci_reset_port()
662 if (!ncq_tfs->used) { in ahci_reset_port()
666 qemu_sglist_destroy(&ncq_tfs->sglist); in ahci_reset_port()
667 ncq_tfs->used = 0; in ahci_reset_port()
753 static void ahci_write_fis_sdb(AHCIState *s, NCQTransferState *ncq_tfs) in ahci_write_fis_sdb() argument
755 AHCIDevice *ad = ncq_tfs->drive; in ahci_write_fis_sdb()
983 static void ncq_err(NCQTransferState *ncq_tfs) in ncq_err() argument
985 IDEState *ide_state = &ncq_tfs->drive->port.ifs[0]; in ncq_err()
989 qemu_sglist_destroy(&ncq_tfs->sglist); in ncq_err()
990 ncq_tfs->used = 0; in ncq_err()
993 static void ncq_finish(NCQTransferState *ncq_tfs) in ncq_finish() argument
998 if (ncq_tfs->used) { in ncq_finish()
999 ncq_tfs->drive->finished |= (1 << ncq_tfs->tag); in ncq_finish()
1002 ahci_write_fis_sdb(ncq_tfs->drive->hba, ncq_tfs); in ncq_finish()
1004 trace_ncq_finish(ncq_tfs->drive->hba, ncq_tfs->drive->port_no, in ncq_finish()
1005 ncq_tfs->tag); in ncq_finish()
1007 block_acct_done(blk_get_stats(ncq_tfs->drive->port.ifs[0].blk), in ncq_finish()
1008 &ncq_tfs->acct); in ncq_finish()
1009 qemu_sglist_destroy(&ncq_tfs->sglist); in ncq_finish()
1010 ncq_tfs->used = 0; in ncq_finish()
1015 NCQTransferState *ncq_tfs = (NCQTransferState *)opaque; in ncq_cb() local
1016 IDEState *ide_state = &ncq_tfs->drive->port.ifs[0]; in ncq_cb()
1018 ncq_tfs->aiocb = NULL; in ncq_cb()
1021 bool is_read = ncq_tfs->cmd == READ_FPDMA_QUEUED; in ncq_cb()
1025 ncq_tfs->halt = true; in ncq_cb()
1028 ncq_err(ncq_tfs); in ncq_cb()
1035 if (!ncq_tfs->halt) { in ncq_cb()
1036 ncq_finish(ncq_tfs); in ncq_cb()
1055 static void execute_ncq_command(NCQTransferState *ncq_tfs) in execute_ncq_command() argument
1057 AHCIDevice *ad = ncq_tfs->drive; in execute_ncq_command()
1061 g_assert(is_ncq(ncq_tfs->cmd)); in execute_ncq_command()
1062 ncq_tfs->halt = false; in execute_ncq_command()
1064 switch (ncq_tfs->cmd) { in execute_ncq_command()
1066 trace_execute_ncq_command_read(ad->hba, port, ncq_tfs->tag, in execute_ncq_command()
1067 ncq_tfs->sector_count, ncq_tfs->lba); in execute_ncq_command()
1068 dma_acct_start(ide_state->blk, &ncq_tfs->acct, in execute_ncq_command()
1069 &ncq_tfs->sglist, BLOCK_ACCT_READ); in execute_ncq_command()
1070 ncq_tfs->aiocb = dma_blk_read(ide_state->blk, &ncq_tfs->sglist, in execute_ncq_command()
1071 ncq_tfs->lba << BDRV_SECTOR_BITS, in execute_ncq_command()
1073 ncq_cb, ncq_tfs); in execute_ncq_command()
1076 trace_execute_ncq_command_write(ad->hba, port, ncq_tfs->tag, in execute_ncq_command()
1077 ncq_tfs->sector_count, ncq_tfs->lba); in execute_ncq_command()
1078 dma_acct_start(ide_state->blk, &ncq_tfs->acct, in execute_ncq_command()
1079 &ncq_tfs->sglist, BLOCK_ACCT_WRITE); in execute_ncq_command()
1080 ncq_tfs->aiocb = dma_blk_write(ide_state->blk, &ncq_tfs->sglist, in execute_ncq_command()
1081 ncq_tfs->lba << BDRV_SECTOR_BITS, in execute_ncq_command()
1083 ncq_cb, ncq_tfs); in execute_ncq_command()
1087 ncq_tfs->tag, ncq_tfs->cmd); in execute_ncq_command()
1088 ncq_err(ncq_tfs); in execute_ncq_command()
1099 NCQTransferState *ncq_tfs = &ad->ncq_tfs[tag]; in process_ncq_command() local
1103 if (ncq_tfs->used) { in process_ncq_command()
1128 ncq_tfs->used = 1; in process_ncq_command()
1129 ncq_tfs->drive = ad; in process_ncq_command()
1130 ncq_tfs->slot = slot; in process_ncq_command()
1131 ncq_tfs->cmdh = &((AHCICmdHdr *)ad->lst)[slot]; in process_ncq_command()
1132 ncq_tfs->cmd = ncq_fis->command; in process_ncq_command()
1133 ncq_tfs->lba = ((uint64_t)ncq_fis->lba5 << 40) | in process_ncq_command()
1139 ncq_tfs->tag = tag; in process_ncq_command()
1159 ncq_tfs->sector_count = ((ncq_fis->sector_count_high << 8) | in process_ncq_command()
1161 if (!ncq_tfs->sector_count) { in process_ncq_command()
1162 ncq_tfs->sector_count = 0x10000; in process_ncq_command()
1164 size = ncq_tfs->sector_count * BDRV_SECTOR_SIZE; in process_ncq_command()
1165 ahci_populate_sglist(ad, &ncq_tfs->sglist, ncq_tfs->cmdh, size, 0); in process_ncq_command()
1167 if (ncq_tfs->sglist.size < size) { in process_ncq_command()
1170 ncq_tfs->sglist.size, size); in process_ncq_command()
1171 ncq_err(ncq_tfs); in process_ncq_command()
1174 } else if (ncq_tfs->sglist.size != size) { in process_ncq_command()
1176 ncq_tfs->sglist.size, size); in process_ncq_command()
1181 ncq_tfs->lba, in process_ncq_command()
1182 ncq_tfs->lba + ncq_tfs->sector_count - 1); in process_ncq_command()
1183 execute_ncq_command(ncq_tfs); in process_ncq_command()
1456 NCQTransferState *ncq_tfs = &ad->ncq_tfs[i]; in ahci_restart() local
1457 if (ncq_tfs->halt) { in ahci_restart()
1458 execute_ncq_command(ncq_tfs); in ahci_restart()
1694 VMSTATE_STRUCT_ARRAY(ncq_tfs, AHCIDevice, AHCI_MAX_CMDS,
1704 NCQTransferState *ncq_tfs; in ahci_state_post_load() local
1731 ncq_tfs = &ad->ncq_tfs[j]; in ahci_state_post_load()
1732 ncq_tfs->drive = ad; in ahci_state_post_load()
1734 if (ncq_tfs->used != ncq_tfs->halt) { in ahci_state_post_load()
1737 if (!ncq_tfs->halt) { in ahci_state_post_load()
1740 if (!is_ncq(ncq_tfs->cmd)) { in ahci_state_post_load()
1743 if (ncq_tfs->slot != ncq_tfs->tag) { in ahci_state_post_load()
1748 ncq_tfs->cmdh = get_cmd_header(s, i, ncq_tfs->slot); in ahci_state_post_load()
1749 if (!ncq_tfs->cmdh) { in ahci_state_post_load()
1752 ahci_populate_sglist(ncq_tfs->drive, &ncq_tfs->sglist, in ahci_state_post_load()
1753 ncq_tfs->cmdh, in ahci_state_post_load()
1754 ncq_tfs->sector_count * BDRV_SECTOR_SIZE, in ahci_state_post_load()
1756 if (ncq_tfs->sector_count != ncq_tfs->sglist.size >> 9) { in ahci_state_post_load()