aboutsummaryrefslogtreecommitdiff
path: root/util/scsi.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/scsi.c')
-rw-r--r--util/scsi.c90
1 files changed, 0 insertions, 90 deletions
diff --git a/util/scsi.c b/util/scsi.c
deleted file mode 100644
index 472293d59b..0000000000
--- a/util/scsi.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * SCSI helpers
- *
- * Copyright 2017 Red Hat, Inc.
- *
- * Authors:
- * Fam Zheng <famz@redhat.com>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- */
-
-#include "qemu/osdep.h"
-#include "scsi/scsi.h"
-
-int scsi_sense_to_errno(int key, int asc, int ascq)
-{
- switch (key) {
- case 0x00: /* NO SENSE */
- case 0x01: /* RECOVERED ERROR */
- case 0x06: /* UNIT ATTENTION */
- /* These sense keys are not errors */
- return 0;
- case 0x0b: /* COMMAND ABORTED */
- return ECANCELED;
- case 0x02: /* NOT READY */
- case 0x05: /* ILLEGAL REQUEST */
- case 0x07: /* DATA PROTECTION */
- /* Parse ASCQ */
- break;
- default:
- return EIO;
- }
- switch ((asc << 8) | ascq) {
- case 0x1a00: /* PARAMETER LIST LENGTH ERROR */
- case 0x2000: /* INVALID OPERATION CODE */
- case 0x2400: /* INVALID FIELD IN CDB */
- case 0x2600: /* INVALID FIELD IN PARAMETER LIST */
- return EINVAL;
- case 0x2100: /* LBA OUT OF RANGE */
- case 0x2707: /* SPACE ALLOC FAILED */
- return ENOSPC;
- case 0x2500: /* LOGICAL UNIT NOT SUPPORTED */
- return ENOTSUP;
- case 0x3a00: /* MEDIUM NOT PRESENT */
- case 0x3a01: /* MEDIUM NOT PRESENT TRAY CLOSED */
- case 0x3a02: /* MEDIUM NOT PRESENT TRAY OPEN */
- return ENOMEDIUM;
- case 0x2700: /* WRITE PROTECTED */
- return EACCES;
- case 0x0401: /* NOT READY, IN PROGRESS OF BECOMING READY */
- return EAGAIN;
- case 0x0402: /* NOT READY, INITIALIZING COMMAND REQUIRED */
- return ENOTCONN;
- default:
- return EIO;
- }
-}
-
-int scsi_sense_buf_to_errno(const uint8_t *sense, size_t sense_size)
-{
- int key, asc, ascq;
- if (sense_size < 1) {
- return EIO;
- }
- switch (sense[0]) {
- case 0x70: /* Fixed format sense data. */
- if (sense_size < 14) {
- return EIO;
- }
- key = sense[2] & 0xF;
- asc = sense[12];
- ascq = sense[13];
- break;
- case 0x72: /* Descriptor format sense data. */
- if (sense_size < 4) {
- return EIO;
- }
- key = sense[1] & 0xF;
- asc = sense[2];
- ascq = sense[3];
- break;
- default:
- return EIO;
- break;
- }
- return scsi_sense_to_errno(key, asc, ascq);
-}