]> Git Repo - qemu.git/blob - hw/scsi/scsi-disk.c
scsi-disk: introduce scsi_disk_req_check_error
[qemu.git] / hw / scsi / scsi-disk.c
1 /*
2  * SCSI Device emulation
3  *
4  * Copyright (c) 2006 CodeSourcery.
5  * Based on code by Fabrice Bellard
6  *
7  * Written by Paul Brook
8  * Modifications:
9  *  2009-Dec-12 Artyom Tarasenko : implemented stamdard inquiry for the case
10  *                                 when the allocation length of CDB is smaller
11  *                                 than 36.
12  *  2009-Oct-13 Artyom Tarasenko : implemented the block descriptor in the
13  *                                 MODE SENSE response.
14  *
15  * This code is licensed under the LGPL.
16  *
17  * Note that this file only handles the SCSI architecture model and device
18  * commands.  Emulation of interface/link layer protocols is handled by
19  * the host adapter emulator.
20  */
21
22 //#define DEBUG_SCSI
23
24 #ifdef DEBUG_SCSI
25 #define DPRINTF(fmt, ...) \
26 do { printf("scsi-disk: " fmt , ## __VA_ARGS__); } while (0)
27 #else
28 #define DPRINTF(fmt, ...) do {} while(0)
29 #endif
30
31 #include "qemu/osdep.h"
32 #include "qapi/error.h"
33 #include "qemu/error-report.h"
34 #include "hw/scsi/scsi.h"
35 #include "block/scsi.h"
36 #include "sysemu/sysemu.h"
37 #include "sysemu/block-backend.h"
38 #include "sysemu/blockdev.h"
39 #include "hw/block/block.h"
40 #include "sysemu/dma.h"
41 #include "qemu/cutils.h"
42
43 #ifdef __linux
44 #include <scsi/sg.h>
45 #endif
46
47 #define SCSI_WRITE_SAME_MAX         524288
48 #define SCSI_DMA_BUF_SIZE           131072
49 #define SCSI_MAX_INQUIRY_LEN        256
50 #define SCSI_MAX_MODE_LEN           256
51
52 #define DEFAULT_DISCARD_GRANULARITY 4096
53 #define DEFAULT_MAX_UNMAP_SIZE      (1 << 30)   /* 1 GB */
54 #define DEFAULT_MAX_IO_SIZE         INT_MAX     /* 2 GB - 1 block */
55
56 #define TYPE_SCSI_DISK_BASE         "scsi-disk-base"
57
58 #define SCSI_DISK_BASE(obj) \
59      OBJECT_CHECK(SCSIDiskState, (obj), TYPE_SCSI_DISK_BASE)
60 #define SCSI_DISK_BASE_CLASS(klass) \
61      OBJECT_CLASS_CHECK(SCSIDiskClass, (klass), TYPE_SCSI_DISK_BASE)
62 #define SCSI_DISK_BASE_GET_CLASS(obj) \
63      OBJECT_GET_CLASS(SCSIDiskClass, (obj), TYPE_SCSI_DISK_BASE)
64
65 typedef struct SCSIDiskClass {
66     SCSIDeviceClass parent_class;
67     DMAIOFunc       *dma_readv;
68     DMAIOFunc       *dma_writev;
69     bool            (*need_fua_emulation)(SCSICommand *cmd);
70 } SCSIDiskClass;
71
72 typedef struct SCSIDiskReq {
73     SCSIRequest req;
74     /* Both sector and sector_count are in terms of qemu 512 byte blocks.  */
75     uint64_t sector;
76     uint32_t sector_count;
77     uint32_t buflen;
78     bool started;
79     bool need_fua_emulation;
80     struct iovec iov;
81     QEMUIOVector qiov;
82     BlockAcctCookie acct;
83 } SCSIDiskReq;
84
85 #define SCSI_DISK_F_REMOVABLE             0
86 #define SCSI_DISK_F_DPOFUA                1
87 #define SCSI_DISK_F_NO_REMOVABLE_DEVOPS   2
88
89 typedef struct SCSIDiskState
90 {
91     SCSIDevice qdev;
92     uint32_t features;
93     bool media_changed;
94     bool media_event;
95     bool eject_request;
96     uint16_t port_index;
97     uint64_t max_unmap_size;
98     uint64_t max_io_size;
99     QEMUBH *bh;
100     char *version;
101     char *serial;
102     char *vendor;
103     char *product;
104     bool tray_open;
105     bool tray_locked;
106 } SCSIDiskState;
107
108 static int scsi_handle_rw_error(SCSIDiskReq *r, int error, bool acct_failed);
109
110 static void scsi_free_request(SCSIRequest *req)
111 {
112     SCSIDiskReq *r = DO_UPCAST(SCSIDiskReq, req, req);
113
114     qemu_vfree(r->iov.iov_base);
115 }
116
117 /* Helper function for command completion with sense.  */
118 static void scsi_check_condition(SCSIDiskReq *r, SCSISense sense)
119 {
120     DPRINTF("Command complete tag=0x%x sense=%d/%d/%d\n",
121             r->req.tag, sense.key, sense.asc, sense.ascq);
122     scsi_req_build_sense(&r->req, sense);
123     scsi_req_complete(&r->req, CHECK_CONDITION);
124 }
125
126 static void scsi_init_iovec(SCSIDiskReq *r, size_t size)
127 {
128     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
129
130     if (!r->iov.iov_base) {
131         r->buflen = size;
132         r->iov.iov_base = blk_blockalign(s->qdev.conf.blk, r->buflen);
133     }
134     r->iov.iov_len = MIN(r->sector_count * 512, r->buflen);
135     qemu_iovec_init_external(&r->qiov, &r->iov, 1);
136 }
137
138 static void scsi_disk_save_request(QEMUFile *f, SCSIRequest *req)
139 {
140     SCSIDiskReq *r = DO_UPCAST(SCSIDiskReq, req, req);
141
142     qemu_put_be64s(f, &r->sector);
143     qemu_put_be32s(f, &r->sector_count);
144     qemu_put_be32s(f, &r->buflen);
145     if (r->buflen) {
146         if (r->req.cmd.mode == SCSI_XFER_TO_DEV) {
147             qemu_put_buffer(f, r->iov.iov_base, r->iov.iov_len);
148         } else if (!req->retry) {
149             uint32_t len = r->iov.iov_len;
150             qemu_put_be32s(f, &len);
151             qemu_put_buffer(f, r->iov.iov_base, r->iov.iov_len);
152         }
153     }
154 }
155
156 static void scsi_disk_load_request(QEMUFile *f, SCSIRequest *req)
157 {
158     SCSIDiskReq *r = DO_UPCAST(SCSIDiskReq, req, req);
159
160     qemu_get_be64s(f, &r->sector);
161     qemu_get_be32s(f, &r->sector_count);
162     qemu_get_be32s(f, &r->buflen);
163     if (r->buflen) {
164         scsi_init_iovec(r, r->buflen);
165         if (r->req.cmd.mode == SCSI_XFER_TO_DEV) {
166             qemu_get_buffer(f, r->iov.iov_base, r->iov.iov_len);
167         } else if (!r->req.retry) {
168             uint32_t len;
169             qemu_get_be32s(f, &len);
170             r->iov.iov_len = len;
171             assert(r->iov.iov_len <= r->buflen);
172             qemu_get_buffer(f, r->iov.iov_base, r->iov.iov_len);
173         }
174     }
175
176     qemu_iovec_init_external(&r->qiov, &r->iov, 1);
177 }
178
179 static bool scsi_disk_req_check_error(SCSIDiskReq *r, int ret, bool acct_failed)
180 {
181     if (r->req.io_canceled) {
182         scsi_req_cancel_complete(&r->req);
183         return true;
184     }
185
186     if (ret < 0) {
187         return scsi_handle_rw_error(r, -ret, acct_failed);
188     }
189
190     return false;
191 }
192
193 static void scsi_aio_complete(void *opaque, int ret)
194 {
195     SCSIDiskReq *r = (SCSIDiskReq *)opaque;
196     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
197
198     assert(r->req.aiocb != NULL);
199     r->req.aiocb = NULL;
200     if (scsi_disk_req_check_error(r, ret, true)) {
201         goto done;
202     }
203
204     block_acct_done(blk_get_stats(s->qdev.conf.blk), &r->acct);
205     scsi_req_complete(&r->req, GOOD);
206
207 done:
208     scsi_req_unref(&r->req);
209 }
210
211 static bool scsi_is_cmd_fua(SCSICommand *cmd)
212 {
213     switch (cmd->buf[0]) {
214     case READ_10:
215     case READ_12:
216     case READ_16:
217     case WRITE_10:
218     case WRITE_12:
219     case WRITE_16:
220         return (cmd->buf[1] & 8) != 0;
221
222     case VERIFY_10:
223     case VERIFY_12:
224     case VERIFY_16:
225     case WRITE_VERIFY_10:
226     case WRITE_VERIFY_12:
227     case WRITE_VERIFY_16:
228         return true;
229
230     case READ_6:
231     case WRITE_6:
232     default:
233         return false;
234     }
235 }
236
237 static void scsi_write_do_fua(SCSIDiskReq *r)
238 {
239     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
240
241     assert(r->req.aiocb == NULL);
242     assert(!r->req.io_canceled);
243
244     if (r->need_fua_emulation) {
245         block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, 0,
246                          BLOCK_ACCT_FLUSH);
247         r->req.aiocb = blk_aio_flush(s->qdev.conf.blk, scsi_aio_complete, r);
248         return;
249     }
250
251     scsi_req_complete(&r->req, GOOD);
252     scsi_req_unref(&r->req);
253 }
254
255 static void scsi_dma_complete_noio(SCSIDiskReq *r, int ret)
256 {
257     assert(r->req.aiocb == NULL);
258     if (scsi_disk_req_check_error(r, ret, false)) {
259         goto done;
260     }
261
262     r->sector += r->sector_count;
263     r->sector_count = 0;
264     if (r->req.cmd.mode == SCSI_XFER_TO_DEV) {
265         scsi_write_do_fua(r);
266         return;
267     } else {
268         scsi_req_complete(&r->req, GOOD);
269     }
270
271 done:
272     scsi_req_unref(&r->req);
273 }
274
275 static void scsi_dma_complete(void *opaque, int ret)
276 {
277     SCSIDiskReq *r = (SCSIDiskReq *)opaque;
278     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
279
280     assert(r->req.aiocb != NULL);
281     r->req.aiocb = NULL;
282
283     if (ret < 0) {
284         block_acct_failed(blk_get_stats(s->qdev.conf.blk), &r->acct);
285     } else {
286         block_acct_done(blk_get_stats(s->qdev.conf.blk), &r->acct);
287     }
288     scsi_dma_complete_noio(r, ret);
289 }
290
291 static void scsi_read_complete(void * opaque, int ret)
292 {
293     SCSIDiskReq *r = (SCSIDiskReq *)opaque;
294     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
295     int n;
296
297     assert(r->req.aiocb != NULL);
298     r->req.aiocb = NULL;
299     if (scsi_disk_req_check_error(r, ret, true)) {
300         goto done;
301     }
302
303     block_acct_done(blk_get_stats(s->qdev.conf.blk), &r->acct);
304     DPRINTF("Data ready tag=0x%x len=%zd\n", r->req.tag, r->qiov.size);
305
306     n = r->qiov.size / 512;
307     r->sector += n;
308     r->sector_count -= n;
309     scsi_req_data(&r->req, r->qiov.size);
310
311 done:
312     scsi_req_unref(&r->req);
313 }
314
315 /* Actually issue a read to the block device.  */
316 static void scsi_do_read(SCSIDiskReq *r, int ret)
317 {
318     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
319     SCSIDiskClass *sdc = (SCSIDiskClass *) object_get_class(OBJECT(s));
320
321     assert (r->req.aiocb == NULL);
322     if (scsi_disk_req_check_error(r, ret, false)) {
323         goto done;
324     }
325
326     /* The request is used as the AIO opaque value, so add a ref.  */
327     scsi_req_ref(&r->req);
328
329     if (r->req.sg) {
330         dma_acct_start(s->qdev.conf.blk, &r->acct, r->req.sg, BLOCK_ACCT_READ);
331         r->req.resid -= r->req.sg->size;
332         r->req.aiocb = dma_blk_io(blk_get_aio_context(s->qdev.conf.blk),
333                                   r->req.sg, r->sector << BDRV_SECTOR_BITS,
334                                   sdc->dma_readv, r, scsi_dma_complete, r,
335                                   DMA_DIRECTION_FROM_DEVICE);
336     } else {
337         scsi_init_iovec(r, SCSI_DMA_BUF_SIZE);
338         block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct,
339                          r->qiov.size, BLOCK_ACCT_READ);
340         r->req.aiocb = sdc->dma_readv(r->sector, &r->qiov,
341                                       scsi_read_complete, r, r);
342     }
343
344 done:
345     scsi_req_unref(&r->req);
346 }
347
348 static void scsi_do_read_cb(void *opaque, int ret)
349 {
350     SCSIDiskReq *r = (SCSIDiskReq *)opaque;
351     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
352
353     assert (r->req.aiocb != NULL);
354     r->req.aiocb = NULL;
355
356     if (ret < 0) {
357         block_acct_failed(blk_get_stats(s->qdev.conf.blk), &r->acct);
358     } else {
359         block_acct_done(blk_get_stats(s->qdev.conf.blk), &r->acct);
360     }
361     scsi_do_read(opaque, ret);
362 }
363
364 /* Read more data from scsi device into buffer.  */
365 static void scsi_read_data(SCSIRequest *req)
366 {
367     SCSIDiskReq *r = DO_UPCAST(SCSIDiskReq, req, req);
368     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
369     bool first;
370
371     DPRINTF("Read sector_count=%d\n", r->sector_count);
372     if (r->sector_count == 0) {
373         /* This also clears the sense buffer for REQUEST SENSE.  */
374         scsi_req_complete(&r->req, GOOD);
375         return;
376     }
377
378     /* No data transfer may already be in progress */
379     assert(r->req.aiocb == NULL);
380
381     /* The request is used as the AIO opaque value, so add a ref.  */
382     scsi_req_ref(&r->req);
383     if (r->req.cmd.mode == SCSI_XFER_TO_DEV) {
384         DPRINTF("Data transfer direction invalid\n");
385         scsi_read_complete(r, -EINVAL);
386         return;
387     }
388
389     if (s->tray_open) {
390         scsi_read_complete(r, -ENOMEDIUM);
391         return;
392     }
393
394     first = !r->started;
395     r->started = true;
396     if (first && r->need_fua_emulation) {
397         block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, 0,
398                          BLOCK_ACCT_FLUSH);
399         r->req.aiocb = blk_aio_flush(s->qdev.conf.blk, scsi_do_read_cb, r);
400     } else {
401         scsi_do_read(r, 0);
402     }
403 }
404
405 /*
406  * scsi_handle_rw_error has two return values.  0 means that the error
407  * must be ignored, 1 means that the error has been processed and the
408  * caller should not do anything else for this request.  Note that
409  * scsi_handle_rw_error always manages its reference counts, independent
410  * of the return value.
411  */
412 static int scsi_handle_rw_error(SCSIDiskReq *r, int error, bool acct_failed)
413 {
414     bool is_read = (r->req.cmd.mode == SCSI_XFER_FROM_DEV);
415     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
416     BlockErrorAction action = blk_get_error_action(s->qdev.conf.blk,
417                                                    is_read, error);
418
419     if (action == BLOCK_ERROR_ACTION_REPORT) {
420         if (acct_failed) {
421             block_acct_failed(blk_get_stats(s->qdev.conf.blk), &r->acct);
422         }
423         switch (error) {
424         case ENOMEDIUM:
425             scsi_check_condition(r, SENSE_CODE(NO_MEDIUM));
426             break;
427         case ENOMEM:
428             scsi_check_condition(r, SENSE_CODE(TARGET_FAILURE));
429             break;
430         case EINVAL:
431             scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));
432             break;
433         case ENOSPC:
434             scsi_check_condition(r, SENSE_CODE(SPACE_ALLOC_FAILED));
435             break;
436         default:
437             scsi_check_condition(r, SENSE_CODE(IO_ERROR));
438             break;
439         }
440     }
441     blk_error_action(s->qdev.conf.blk, action, is_read, error);
442     if (action == BLOCK_ERROR_ACTION_STOP) {
443         scsi_req_retry(&r->req);
444     }
445     return action != BLOCK_ERROR_ACTION_IGNORE;
446 }
447
448 static void scsi_write_complete_noio(SCSIDiskReq *r, int ret)
449 {
450     uint32_t n;
451
452     assert (r->req.aiocb == NULL);
453     if (scsi_disk_req_check_error(r, ret, false)) {
454         goto done;
455     }
456
457     n = r->qiov.size / 512;
458     r->sector += n;
459     r->sector_count -= n;
460     if (r->sector_count == 0) {
461         scsi_write_do_fua(r);
462         return;
463     } else {
464         scsi_init_iovec(r, SCSI_DMA_BUF_SIZE);
465         DPRINTF("Write complete tag=0x%x more=%zd\n", r->req.tag, r->qiov.size);
466         scsi_req_data(&r->req, r->qiov.size);
467     }
468
469 done:
470     scsi_req_unref(&r->req);
471 }
472
473 static void scsi_write_complete(void * opaque, int ret)
474 {
475     SCSIDiskReq *r = (SCSIDiskReq *)opaque;
476     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
477
478     assert (r->req.aiocb != NULL);
479     r->req.aiocb = NULL;
480
481     if (ret < 0) {
482         block_acct_failed(blk_get_stats(s->qdev.conf.blk), &r->acct);
483     } else {
484         block_acct_done(blk_get_stats(s->qdev.conf.blk), &r->acct);
485     }
486     scsi_write_complete_noio(r, ret);
487 }
488
489 static void scsi_write_data(SCSIRequest *req)
490 {
491     SCSIDiskReq *r = DO_UPCAST(SCSIDiskReq, req, req);
492     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
493     SCSIDiskClass *sdc = (SCSIDiskClass *) object_get_class(OBJECT(s));
494
495     /* No data transfer may already be in progress */
496     assert(r->req.aiocb == NULL);
497
498     /* The request is used as the AIO opaque value, so add a ref.  */
499     scsi_req_ref(&r->req);
500     if (r->req.cmd.mode != SCSI_XFER_TO_DEV) {
501         DPRINTF("Data transfer direction invalid\n");
502         scsi_write_complete_noio(r, -EINVAL);
503         return;
504     }
505
506     if (!r->req.sg && !r->qiov.size) {
507         /* Called for the first time.  Ask the driver to send us more data.  */
508         r->started = true;
509         scsi_write_complete_noio(r, 0);
510         return;
511     }
512     if (s->tray_open) {
513         scsi_write_complete_noio(r, -ENOMEDIUM);
514         return;
515     }
516
517     if (r->req.cmd.buf[0] == VERIFY_10 || r->req.cmd.buf[0] == VERIFY_12 ||
518         r->req.cmd.buf[0] == VERIFY_16) {
519         if (r->req.sg) {
520             scsi_dma_complete_noio(r, 0);
521         } else {
522             scsi_write_complete_noio(r, 0);
523         }
524         return;
525     }
526
527     if (r->req.sg) {
528         dma_acct_start(s->qdev.conf.blk, &r->acct, r->req.sg, BLOCK_ACCT_WRITE);
529         r->req.resid -= r->req.sg->size;
530         r->req.aiocb = dma_blk_io(blk_get_aio_context(s->qdev.conf.blk),
531                                   r->req.sg, r->sector << BDRV_SECTOR_BITS,
532                                   sdc->dma_writev, r, scsi_dma_complete, r,
533                                   DMA_DIRECTION_TO_DEVICE);
534     } else {
535         block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct,
536                          r->qiov.size, BLOCK_ACCT_WRITE);
537         r->req.aiocb = sdc->dma_writev(r->sector << BDRV_SECTOR_BITS, &r->qiov,
538                                        scsi_write_complete, r, r);
539     }
540 }
541
542 /* Return a pointer to the data buffer.  */
543 static uint8_t *scsi_get_buf(SCSIRequest *req)
544 {
545     SCSIDiskReq *r = DO_UPCAST(SCSIDiskReq, req, req);
546
547     return (uint8_t *)r->iov.iov_base;
548 }
549
550 static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf)
551 {
552     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, req->dev);
553     int buflen = 0;
554     int start;
555
556     if (req->cmd.buf[1] & 0x1) {
557         /* Vital product data */
558         uint8_t page_code = req->cmd.buf[2];
559
560         outbuf[buflen++] = s->qdev.type & 0x1f;
561         outbuf[buflen++] = page_code ; // this page
562         outbuf[buflen++] = 0x00;
563         outbuf[buflen++] = 0x00;
564         start = buflen;
565
566         switch (page_code) {
567         case 0x00: /* Supported page codes, mandatory */
568         {
569             DPRINTF("Inquiry EVPD[Supported pages] "
570                     "buffer size %zd\n", req->cmd.xfer);
571             outbuf[buflen++] = 0x00; // list of supported pages (this page)
572             if (s->serial) {
573                 outbuf[buflen++] = 0x80; // unit serial number
574             }
575             outbuf[buflen++] = 0x83; // device identification
576             if (s->qdev.type == TYPE_DISK) {
577                 outbuf[buflen++] = 0xb0; // block limits
578                 outbuf[buflen++] = 0xb2; // thin provisioning
579             }
580             break;
581         }
582         case 0x80: /* Device serial number, optional */
583         {
584             int l;
585
586             if (!s->serial) {
587                 DPRINTF("Inquiry (EVPD[Serial number] not supported\n");
588                 return -1;
589             }
590
591             l = strlen(s->serial);
592             if (l > 20) {
593                 l = 20;
594             }
595
596             DPRINTF("Inquiry EVPD[Serial number] "
597                     "buffer size %zd\n", req->cmd.xfer);
598             memcpy(outbuf+buflen, s->serial, l);
599             buflen += l;
600             break;
601         }
602
603         case 0x83: /* Device identification page, mandatory */
604         {
605             const char *str = s->serial ?: blk_name(s->qdev.conf.blk);
606             int max_len = s->serial ? 20 : 255 - 8;
607             int id_len = strlen(str);
608
609             if (id_len > max_len) {
610                 id_len = max_len;
611             }
612             DPRINTF("Inquiry EVPD[Device identification] "
613                     "buffer size %zd\n", req->cmd.xfer);
614
615             outbuf[buflen++] = 0x2; // ASCII
616             outbuf[buflen++] = 0;   // not officially assigned
617             outbuf[buflen++] = 0;   // reserved
618             outbuf[buflen++] = id_len; // length of data following
619             memcpy(outbuf+buflen, str, id_len);
620             buflen += id_len;
621
622             if (s->qdev.wwn) {
623                 outbuf[buflen++] = 0x1; // Binary
624                 outbuf[buflen++] = 0x3; // NAA
625                 outbuf[buflen++] = 0;   // reserved
626                 outbuf[buflen++] = 8;
627                 stq_be_p(&outbuf[buflen], s->qdev.wwn);
628                 buflen += 8;
629             }
630
631             if (s->qdev.port_wwn) {
632                 outbuf[buflen++] = 0x61; // SAS / Binary
633                 outbuf[buflen++] = 0x93; // PIV / Target port / NAA
634                 outbuf[buflen++] = 0;    // reserved
635                 outbuf[buflen++] = 8;
636                 stq_be_p(&outbuf[buflen], s->qdev.port_wwn);
637                 buflen += 8;
638             }
639
640             if (s->port_index) {
641                 outbuf[buflen++] = 0x61; // SAS / Binary
642                 outbuf[buflen++] = 0x94; // PIV / Target port / relative target port
643                 outbuf[buflen++] = 0;    // reserved
644                 outbuf[buflen++] = 4;
645                 stw_be_p(&outbuf[buflen + 2], s->port_index);
646                 buflen += 4;
647             }
648             break;
649         }
650         case 0xb0: /* block limits */
651         {
652             unsigned int unmap_sectors =
653                     s->qdev.conf.discard_granularity / s->qdev.blocksize;
654             unsigned int min_io_size =
655                     s->qdev.conf.min_io_size / s->qdev.blocksize;
656             unsigned int opt_io_size =
657                     s->qdev.conf.opt_io_size / s->qdev.blocksize;
658             unsigned int max_unmap_sectors =
659                     s->max_unmap_size / s->qdev.blocksize;
660             unsigned int max_io_sectors =
661                     s->max_io_size / s->qdev.blocksize;
662
663             if (s->qdev.type == TYPE_ROM) {
664                 DPRINTF("Inquiry (EVPD[%02X] not supported for CDROM\n",
665                         page_code);
666                 return -1;
667             }
668             /* required VPD size with unmap support */
669             buflen = 0x40;
670             memset(outbuf + 4, 0, buflen - 4);
671
672             outbuf[4] = 0x1; /* wsnz */
673
674             /* optimal transfer length granularity */
675             outbuf[6] = (min_io_size >> 8) & 0xff;
676             outbuf[7] = min_io_size & 0xff;
677
678             /* maximum transfer length */
679             outbuf[8] = (max_io_sectors >> 24) & 0xff;
680             outbuf[9] = (max_io_sectors >> 16) & 0xff;
681             outbuf[10] = (max_io_sectors >> 8) & 0xff;
682             outbuf[11] = max_io_sectors & 0xff;
683
684             /* optimal transfer length */
685             outbuf[12] = (opt_io_size >> 24) & 0xff;
686             outbuf[13] = (opt_io_size >> 16) & 0xff;
687             outbuf[14] = (opt_io_size >> 8) & 0xff;
688             outbuf[15] = opt_io_size & 0xff;
689
690             /* max unmap LBA count, default is 1GB */
691             outbuf[20] = (max_unmap_sectors >> 24) & 0xff;
692             outbuf[21] = (max_unmap_sectors >> 16) & 0xff;
693             outbuf[22] = (max_unmap_sectors >> 8) & 0xff;
694             outbuf[23] = max_unmap_sectors & 0xff;
695
696             /* max unmap descriptors, 255 fit in 4 kb with an 8-byte header.  */
697             outbuf[24] = 0;
698             outbuf[25] = 0;
699             outbuf[26] = 0;
700             outbuf[27] = 255;
701
702             /* optimal unmap granularity */
703             outbuf[28] = (unmap_sectors >> 24) & 0xff;
704             outbuf[29] = (unmap_sectors >> 16) & 0xff;
705             outbuf[30] = (unmap_sectors >> 8) & 0xff;
706             outbuf[31] = unmap_sectors & 0xff;
707
708             /* max write same size */
709             outbuf[36] = 0;
710             outbuf[37] = 0;
711             outbuf[38] = 0;
712             outbuf[39] = 0;
713
714             outbuf[40] = (max_io_sectors >> 24) & 0xff;
715             outbuf[41] = (max_io_sectors >> 16) & 0xff;
716             outbuf[42] = (max_io_sectors >> 8) & 0xff;
717             outbuf[43] = max_io_sectors & 0xff;
718             break;
719         }
720         case 0xb2: /* thin provisioning */
721         {
722             buflen = 8;
723             outbuf[4] = 0;
724             outbuf[5] = 0xe0; /* unmap & write_same 10/16 all supported */
725             outbuf[6] = s->qdev.conf.discard_granularity ? 2 : 1;
726             outbuf[7] = 0;
727             break;
728         }
729         default:
730             return -1;
731         }
732         /* done with EVPD */
733         assert(buflen - start <= 255);
734         outbuf[start - 1] = buflen - start;
735         return buflen;
736     }
737
738     /* Standard INQUIRY data */
739     if (req->cmd.buf[2] != 0) {
740         return -1;
741     }
742
743     /* PAGE CODE == 0 */
744     buflen = req->cmd.xfer;
745     if (buflen > SCSI_MAX_INQUIRY_LEN) {
746         buflen = SCSI_MAX_INQUIRY_LEN;
747     }
748
749     outbuf[0] = s->qdev.type & 0x1f;
750     outbuf[1] = (s->features & (1 << SCSI_DISK_F_REMOVABLE)) ? 0x80 : 0;
751
752     strpadcpy((char *) &outbuf[16], 16, s->product, ' ');
753     strpadcpy((char *) &outbuf[8], 8, s->vendor, ' ');
754
755     memset(&outbuf[32], 0, 4);
756     memcpy(&outbuf[32], s->version, MIN(4, strlen(s->version)));
757     /*
758      * We claim conformance to SPC-3, which is required for guests
759      * to ask for modern features like READ CAPACITY(16) or the
760      * block characteristics VPD page by default.  Not all of SPC-3
761      * is actually implemented, but we're good enough.
762      */
763     outbuf[2] = 5;
764     outbuf[3] = 2 | 0x10; /* Format 2, HiSup */
765
766     if (buflen > 36) {
767         outbuf[4] = buflen - 5; /* Additional Length = (Len - 1) - 4 */
768     } else {
769         /* If the allocation length of CDB is too small,
770                the additional length is not adjusted */
771         outbuf[4] = 36 - 5;
772     }
773
774     /* Sync data transfer and TCQ.  */
775     outbuf[7] = 0x10 | (req->bus->info->tcq ? 0x02 : 0);
776     return buflen;
777 }
778
779 static inline bool media_is_dvd(SCSIDiskState *s)
780 {
781     uint64_t nb_sectors;
782     if (s->qdev.type != TYPE_ROM) {
783         return false;
784     }
785     if (!blk_is_inserted(s->qdev.conf.blk)) {
786         return false;
787     }
788     if (s->tray_open) {
789         return false;
790     }
791     blk_get_geometry(s->qdev.conf.blk, &nb_sectors);
792     return nb_sectors > CD_MAX_SECTORS;
793 }
794
795 static inline bool media_is_cd(SCSIDiskState *s)
796 {
797     uint64_t nb_sectors;
798     if (s->qdev.type != TYPE_ROM) {
799         return false;
800     }
801     if (!blk_is_inserted(s->qdev.conf.blk)) {
802         return false;
803     }
804     if (s->tray_open) {
805         return false;
806     }
807     blk_get_geometry(s->qdev.conf.blk, &nb_sectors);
808     return nb_sectors <= CD_MAX_SECTORS;
809 }
810
811 static int scsi_read_disc_information(SCSIDiskState *s, SCSIDiskReq *r,
812                                       uint8_t *outbuf)
813 {
814     uint8_t type = r->req.cmd.buf[1] & 7;
815
816     if (s->qdev.type != TYPE_ROM) {
817         return -1;
818     }
819
820     /* Types 1/2 are only defined for Blu-Ray.  */
821     if (type != 0) {
822         scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));
823         return -1;
824     }
825
826     memset(outbuf, 0, 34);
827     outbuf[1] = 32;
828     outbuf[2] = 0xe; /* last session complete, disc finalized */
829     outbuf[3] = 1;   /* first track on disc */
830     outbuf[4] = 1;   /* # of sessions */
831     outbuf[5] = 1;   /* first track of last session */
832     outbuf[6] = 1;   /* last track of last session */
833     outbuf[7] = 0x20; /* unrestricted use */
834     outbuf[8] = 0x00; /* CD-ROM or DVD-ROM */
835     /* 9-10-11: most significant byte corresponding bytes 4-5-6 */
836     /* 12-23: not meaningful for CD-ROM or DVD-ROM */
837     /* 24-31: disc bar code */
838     /* 32: disc application code */
839     /* 33: number of OPC tables */
840
841     return 34;
842 }
843
844 static int scsi_read_dvd_structure(SCSIDiskState *s, SCSIDiskReq *r,
845                                    uint8_t *outbuf)
846 {
847     static const int rds_caps_size[5] = {
848         [0] = 2048 + 4,
849         [1] = 4 + 4,
850         [3] = 188 + 4,
851         [4] = 2048 + 4,
852     };
853
854     uint8_t media = r->req.cmd.buf[1];
855     uint8_t layer = r->req.cmd.buf[6];
856     uint8_t format = r->req.cmd.buf[7];
857     int size = -1;
858
859     if (s->qdev.type != TYPE_ROM) {
860         return -1;
861     }
862     if (media != 0) {
863         scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));
864         return -1;
865     }
866
867     if (format != 0xff) {
868         if (s->tray_open || !blk_is_inserted(s->qdev.conf.blk)) {
869             scsi_check_condition(r, SENSE_CODE(NO_MEDIUM));
870             return -1;
871         }
872         if (media_is_cd(s)) {
873             scsi_check_condition(r, SENSE_CODE(INCOMPATIBLE_FORMAT));
874             return -1;
875         }
876         if (format >= ARRAY_SIZE(rds_caps_size)) {
877             return -1;
878         }
879         size = rds_caps_size[format];
880         memset(outbuf, 0, size);
881     }
882
883     switch (format) {
884     case 0x00: {
885         /* Physical format information */
886         uint64_t nb_sectors;
887         if (layer != 0) {
888             goto fail;
889         }
890         blk_get_geometry(s->qdev.conf.blk, &nb_sectors);
891
892         outbuf[4] = 1;   /* DVD-ROM, part version 1 */
893         outbuf[5] = 0xf; /* 120mm disc, minimum rate unspecified */
894         outbuf[6] = 1;   /* one layer, read-only (per MMC-2 spec) */
895         outbuf[7] = 0;   /* default densities */
896
897         stl_be_p(&outbuf[12], (nb_sectors >> 2) - 1); /* end sector */
898         stl_be_p(&outbuf[16], (nb_sectors >> 2) - 1); /* l0 end sector */
899         break;
900     }
901
902     case 0x01: /* DVD copyright information, all zeros */
903         break;
904
905     case 0x03: /* BCA information - invalid field for no BCA info */
906         return -1;
907
908     case 0x04: /* DVD disc manufacturing information, all zeros */
909         break;
910
911     case 0xff: { /* List capabilities */
912         int i;
913         size = 4;
914         for (i = 0; i < ARRAY_SIZE(rds_caps_size); i++) {
915             if (!rds_caps_size[i]) {
916                 continue;
917             }
918             outbuf[size] = i;
919             outbuf[size + 1] = 0x40; /* Not writable, readable */
920             stw_be_p(&outbuf[size + 2], rds_caps_size[i]);
921             size += 4;
922         }
923         break;
924      }
925
926     default:
927         return -1;
928     }
929
930     /* Size of buffer, not including 2 byte size field */
931     stw_be_p(outbuf, size - 2);
932     return size;
933
934 fail:
935     return -1;
936 }
937
938 static int scsi_event_status_media(SCSIDiskState *s, uint8_t *outbuf)
939 {
940     uint8_t event_code, media_status;
941
942     media_status = 0;
943     if (s->tray_open) {
944         media_status = MS_TRAY_OPEN;
945     } else if (blk_is_inserted(s->qdev.conf.blk)) {
946         media_status = MS_MEDIA_PRESENT;
947     }
948
949     /* Event notification descriptor */
950     event_code = MEC_NO_CHANGE;
951     if (media_status != MS_TRAY_OPEN) {
952         if (s->media_event) {
953             event_code = MEC_NEW_MEDIA;
954             s->media_event = false;
955         } else if (s->eject_request) {
956             event_code = MEC_EJECT_REQUESTED;
957             s->eject_request = false;
958         }
959     }
960
961     outbuf[0] = event_code;
962     outbuf[1] = media_status;
963
964     /* These fields are reserved, just clear them. */
965     outbuf[2] = 0;
966     outbuf[3] = 0;
967     return 4;
968 }
969
970 static int scsi_get_event_status_notification(SCSIDiskState *s, SCSIDiskReq *r,
971                                               uint8_t *outbuf)
972 {
973     int size;
974     uint8_t *buf = r->req.cmd.buf;
975     uint8_t notification_class_request = buf[4];
976     if (s->qdev.type != TYPE_ROM) {
977         return -1;
978     }
979     if ((buf[1] & 1) == 0) {
980         /* asynchronous */
981         return -1;
982     }
983
984     size = 4;
985     outbuf[0] = outbuf[1] = 0;
986     outbuf[3] = 1 << GESN_MEDIA; /* supported events */
987     if (notification_class_request & (1 << GESN_MEDIA)) {
988         outbuf[2] = GESN_MEDIA;
989         size += scsi_event_status_media(s, &outbuf[size]);
990     } else {
991         outbuf[2] = 0x80;
992     }
993     stw_be_p(outbuf, size - 4);
994     return size;
995 }
996
997 static int scsi_get_configuration(SCSIDiskState *s, uint8_t *outbuf)
998 {
999     int current;
1000
1001     if (s->qdev.type != TYPE_ROM) {
1002         return -1;
1003     }
1004
1005     if (media_is_dvd(s)) {
1006         current = MMC_PROFILE_DVD_ROM;
1007     } else if (media_is_cd(s)) {
1008         current = MMC_PROFILE_CD_ROM;
1009     } else {
1010         current = MMC_PROFILE_NONE;
1011     }
1012
1013     memset(outbuf, 0, 40);
1014     stl_be_p(&outbuf[0], 36); /* Bytes after the data length field */
1015     stw_be_p(&outbuf[6], current);
1016     /* outbuf[8] - outbuf[19]: Feature 0 - Profile list */
1017     outbuf[10] = 0x03; /* persistent, current */
1018     outbuf[11] = 8; /* two profiles */
1019     stw_be_p(&outbuf[12], MMC_PROFILE_DVD_ROM);
1020     outbuf[14] = (current == MMC_PROFILE_DVD_ROM);
1021     stw_be_p(&outbuf[16], MMC_PROFILE_CD_ROM);
1022     outbuf[18] = (current == MMC_PROFILE_CD_ROM);
1023     /* outbuf[20] - outbuf[31]: Feature 1 - Core feature */
1024     stw_be_p(&outbuf[20], 1);
1025     outbuf[22] = 0x08 | 0x03; /* version 2, persistent, current */
1026     outbuf[23] = 8;
1027     stl_be_p(&outbuf[24], 1); /* SCSI */
1028     outbuf[28] = 1; /* DBE = 1, mandatory */
1029     /* outbuf[32] - outbuf[39]: Feature 3 - Removable media feature */
1030     stw_be_p(&outbuf[32], 3);
1031     outbuf[34] = 0x08 | 0x03; /* version 2, persistent, current */
1032     outbuf[35] = 4;
1033     outbuf[36] = 0x39; /* tray, load=1, eject=1, unlocked at powerup, lock=1 */
1034     /* TODO: Random readable, CD read, DVD read, drive serial number,
1035        power management */
1036     return 40;
1037 }
1038
1039 static int scsi_emulate_mechanism_status(SCSIDiskState *s, uint8_t *outbuf)
1040 {
1041     if (s->qdev.type != TYPE_ROM) {
1042         return -1;
1043     }
1044     memset(outbuf, 0, 8);
1045     outbuf[5] = 1; /* CD-ROM */
1046     return 8;
1047 }
1048
1049 static int mode_sense_page(SCSIDiskState *s, int page, uint8_t **p_outbuf,
1050                            int page_control)
1051 {
1052     static const int mode_sense_valid[0x3f] = {
1053         [MODE_PAGE_HD_GEOMETRY]            = (1 << TYPE_DISK),
1054         [MODE_PAGE_FLEXIBLE_DISK_GEOMETRY] = (1 << TYPE_DISK),
1055         [MODE_PAGE_CACHING]                = (1 << TYPE_DISK) | (1 << TYPE_ROM),
1056         [MODE_PAGE_R_W_ERROR]              = (1 << TYPE_DISK) | (1 << TYPE_ROM),
1057         [MODE_PAGE_AUDIO_CTL]              = (1 << TYPE_ROM),
1058         [MODE_PAGE_CAPABILITIES]           = (1 << TYPE_ROM),
1059     };
1060
1061     uint8_t *p = *p_outbuf + 2;
1062     int length;
1063
1064     if ((mode_sense_valid[page] & (1 << s->qdev.type)) == 0) {
1065         return -1;
1066     }
1067
1068     /*
1069      * If Changeable Values are requested, a mask denoting those mode parameters
1070      * that are changeable shall be returned. As we currently don't support
1071      * parameter changes via MODE_SELECT all bits are returned set to zero.
1072      * The buffer was already menset to zero by the caller of this function.
1073      *
1074      * The offsets here are off by two compared to the descriptions in the
1075      * SCSI specs, because those include a 2-byte header.  This is unfortunate,
1076      * but it is done so that offsets are consistent within our implementation
1077      * of MODE SENSE and MODE SELECT.  MODE SELECT has to deal with both
1078      * 2-byte and 4-byte headers.
1079      */
1080     switch (page) {
1081     case MODE_PAGE_HD_GEOMETRY:
1082         length = 0x16;
1083         if (page_control == 1) { /* Changeable Values */
1084             break;
1085         }
1086         /* if a geometry hint is available, use it */
1087         p[0] = (s->qdev.conf.cyls >> 16) & 0xff;
1088         p[1] = (s->qdev.conf.cyls >> 8) & 0xff;
1089         p[2] = s->qdev.conf.cyls & 0xff;
1090         p[3] = s->qdev.conf.heads & 0xff;
1091         /* Write precomp start cylinder, disabled */
1092         p[4] = (s->qdev.conf.cyls >> 16) & 0xff;
1093         p[5] = (s->qdev.conf.cyls >> 8) & 0xff;
1094         p[6] = s->qdev.conf.cyls & 0xff;
1095         /* Reduced current start cylinder, disabled */
1096         p[7] = (s->qdev.conf.cyls >> 16) & 0xff;
1097         p[8] = (s->qdev.conf.cyls >> 8) & 0xff;
1098         p[9] = s->qdev.conf.cyls & 0xff;
1099         /* Device step rate [ns], 200ns */
1100         p[10] = 0;
1101         p[11] = 200;
1102         /* Landing zone cylinder */
1103         p[12] = 0xff;
1104         p[13] =  0xff;
1105         p[14] = 0xff;
1106         /* Medium rotation rate [rpm], 5400 rpm */
1107         p[18] = (5400 >> 8) & 0xff;
1108         p[19] = 5400 & 0xff;
1109         break;
1110
1111     case MODE_PAGE_FLEXIBLE_DISK_GEOMETRY:
1112         length = 0x1e;
1113         if (page_control == 1) { /* Changeable Values */
1114             break;
1115         }
1116         /* Transfer rate [kbit/s], 5Mbit/s */
1117         p[0] = 5000 >> 8;
1118         p[1] = 5000 & 0xff;
1119         /* if a geometry hint is available, use it */
1120         p[2] = s->qdev.conf.heads & 0xff;
1121         p[3] = s->qdev.conf.secs & 0xff;
1122         p[4] = s->qdev.blocksize >> 8;
1123         p[6] = (s->qdev.conf.cyls >> 8) & 0xff;
1124         p[7] = s->qdev.conf.cyls & 0xff;
1125         /* Write precomp start cylinder, disabled */
1126         p[8] = (s->qdev.conf.cyls >> 8) & 0xff;
1127         p[9] = s->qdev.conf.cyls & 0xff;
1128         /* Reduced current start cylinder, disabled */
1129         p[10] = (s->qdev.conf.cyls >> 8) & 0xff;
1130         p[11] = s->qdev.conf.cyls & 0xff;
1131         /* Device step rate [100us], 100us */
1132         p[12] = 0;
1133         p[13] = 1;
1134         /* Device step pulse width [us], 1us */
1135         p[14] = 1;
1136         /* Device head settle delay [100us], 100us */
1137         p[15] = 0;
1138         p[16] = 1;
1139         /* Motor on delay [0.1s], 0.1s */
1140         p[17] = 1;
1141         /* Motor off delay [0.1s], 0.1s */
1142         p[18] = 1;
1143         /* Medium rotation rate [rpm], 5400 rpm */
1144         p[26] = (5400 >> 8) & 0xff;
1145         p[27] = 5400 & 0xff;
1146         break;
1147
1148     case MODE_PAGE_CACHING:
1149         length = 0x12;
1150         if (page_control == 1 || /* Changeable Values */
1151             blk_enable_write_cache(s->qdev.conf.blk)) {
1152             p[0] = 4; /* WCE */
1153         }
1154         break;
1155
1156     case MODE_PAGE_R_W_ERROR:
1157         length = 10;
1158         if (page_control == 1) { /* Changeable Values */
1159             break;
1160         }
1161         p[0] = 0x80; /* Automatic Write Reallocation Enabled */
1162         if (s->qdev.type == TYPE_ROM) {
1163             p[1] = 0x20; /* Read Retry Count */
1164         }
1165         break;
1166
1167     case MODE_PAGE_AUDIO_CTL:
1168         length = 14;
1169         break;
1170
1171     case MODE_PAGE_CAPABILITIES:
1172         length = 0x14;
1173         if (page_control == 1) { /* Changeable Values */
1174             break;
1175         }
1176
1177         p[0] = 0x3b; /* CD-R & CD-RW read */
1178         p[1] = 0; /* Writing not supported */
1179         p[2] = 0x7f; /* Audio, composite, digital out,
1180                         mode 2 form 1&2, multi session */
1181         p[3] = 0xff; /* CD DA, DA accurate, RW supported,
1182                         RW corrected, C2 errors, ISRC,
1183                         UPC, Bar code */
1184         p[4] = 0x2d | (s->tray_locked ? 2 : 0);
1185         /* Locking supported, jumper present, eject, tray */
1186         p[5] = 0; /* no volume & mute control, no
1187                      changer */
1188         p[6] = (50 * 176) >> 8; /* 50x read speed */
1189         p[7] = (50 * 176) & 0xff;
1190         p[8] = 2 >> 8; /* Two volume levels */
1191         p[9] = 2 & 0xff;
1192         p[10] = 2048 >> 8; /* 2M buffer */
1193         p[11] = 2048 & 0xff;
1194         p[12] = (16 * 176) >> 8; /* 16x read speed current */
1195         p[13] = (16 * 176) & 0xff;
1196         p[16] = (16 * 176) >> 8; /* 16x write speed */
1197         p[17] = (16 * 176) & 0xff;
1198         p[18] = (16 * 176) >> 8; /* 16x write speed current */
1199         p[19] = (16 * 176) & 0xff;
1200         break;
1201
1202     default:
1203         return -1;
1204     }
1205
1206     assert(length < 256);
1207     (*p_outbuf)[0] = page;
1208     (*p_outbuf)[1] = length;
1209     *p_outbuf += length + 2;
1210     return length + 2;
1211 }
1212
1213 static int scsi_disk_emulate_mode_sense(SCSIDiskReq *r, uint8_t *outbuf)
1214 {
1215     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
1216     uint64_t nb_sectors;
1217     bool dbd;
1218     int page, buflen, ret, page_control;
1219     uint8_t *p;
1220     uint8_t dev_specific_param;
1221
1222     dbd = (r->req.cmd.buf[1] & 0x8) != 0;
1223     page = r->req.cmd.buf[2] & 0x3f;
1224     page_control = (r->req.cmd.buf[2] & 0xc0) >> 6;
1225     DPRINTF("Mode Sense(%d) (page %d, xfer %zd, page_control %d)\n",
1226         (r->req.cmd.buf[0] == MODE_SENSE) ? 6 : 10, page, r->req.cmd.xfer, page_control);
1227     memset(outbuf, 0, r->req.cmd.xfer);
1228     p = outbuf;
1229
1230     if (s->qdev.type == TYPE_DISK) {
1231         dev_specific_param = s->features & (1 << SCSI_DISK_F_DPOFUA) ? 0x10 : 0;
1232         if (blk_is_read_only(s->qdev.conf.blk)) {
1233             dev_specific_param |= 0x80; /* Readonly.  */
1234         }
1235     } else {
1236         /* MMC prescribes that CD/DVD drives have no block descriptors,
1237          * and defines no device-specific parameter.  */
1238         dev_specific_param = 0x00;
1239         dbd = true;
1240     }
1241
1242     if (r->req.cmd.buf[0] == MODE_SENSE) {
1243         p[1] = 0; /* Default media type.  */
1244         p[2] = dev_specific_param;
1245         p[3] = 0; /* Block descriptor length.  */
1246         p += 4;
1247     } else { /* MODE_SENSE_10 */
1248         p[2] = 0; /* Default media type.  */
1249         p[3] = dev_specific_param;
1250         p[6] = p[7] = 0; /* Block descriptor length.  */
1251         p += 8;
1252     }
1253
1254     blk_get_geometry(s->qdev.conf.blk, &nb_sectors);
1255     if (!dbd && nb_sectors) {
1256         if (r->req.cmd.buf[0] == MODE_SENSE) {
1257             outbuf[3] = 8; /* Block descriptor length  */
1258         } else { /* MODE_SENSE_10 */
1259             outbuf[7] = 8; /* Block descriptor length  */
1260         }
1261         nb_sectors /= (s->qdev.blocksize / 512);
1262         if (nb_sectors > 0xffffff) {
1263             nb_sectors = 0;
1264         }
1265         p[0] = 0; /* media density code */
1266         p[1] = (nb_sectors >> 16) & 0xff;
1267         p[2] = (nb_sectors >> 8) & 0xff;
1268         p[3] = nb_sectors & 0xff;
1269         p[4] = 0; /* reserved */
1270         p[5] = 0; /* bytes 5-7 are the sector size in bytes */
1271         p[6] = s->qdev.blocksize >> 8;
1272         p[7] = 0;
1273         p += 8;
1274     }
1275
1276     if (page_control == 3) {
1277         /* Saved Values */
1278         scsi_check_condition(r, SENSE_CODE(SAVING_PARAMS_NOT_SUPPORTED));
1279         return -1;
1280     }
1281
1282     if (page == 0x3f) {
1283         for (page = 0; page <= 0x3e; page++) {
1284             mode_sense_page(s, page, &p, page_control);
1285         }
1286     } else {
1287         ret = mode_sense_page(s, page, &p, page_control);
1288         if (ret == -1) {
1289             return -1;
1290         }
1291     }
1292
1293     buflen = p - outbuf;
1294     /*
1295      * The mode data length field specifies the length in bytes of the
1296      * following data that is available to be transferred. The mode data
1297      * length does not include itself.
1298      */
1299     if (r->req.cmd.buf[0] == MODE_SENSE) {
1300         outbuf[0] = buflen - 1;
1301     } else { /* MODE_SENSE_10 */
1302         outbuf[0] = ((buflen - 2) >> 8) & 0xff;
1303         outbuf[1] = (buflen - 2) & 0xff;
1304     }
1305     return buflen;
1306 }
1307
1308 static int scsi_disk_emulate_read_toc(SCSIRequest *req, uint8_t *outbuf)
1309 {
1310     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, req->dev);
1311     int start_track, format, msf, toclen;
1312     uint64_t nb_sectors;
1313
1314     msf = req->cmd.buf[1] & 2;
1315     format = req->cmd.buf[2] & 0xf;
1316     start_track = req->cmd.buf[6];
1317     blk_get_geometry(s->qdev.conf.blk, &nb_sectors);
1318     DPRINTF("Read TOC (track %d format %d msf %d)\n", start_track, format, msf >> 1);
1319     nb_sectors /= s->qdev.blocksize / 512;
1320     switch (format) {
1321     case 0:
1322         toclen = cdrom_read_toc(nb_sectors, outbuf, msf, start_track);
1323         break;
1324     case 1:
1325         /* multi session : only a single session defined */
1326         toclen = 12;
1327         memset(outbuf, 0, 12);
1328         outbuf[1] = 0x0a;
1329         outbuf[2] = 0x01;
1330         outbuf[3] = 0x01;
1331         break;
1332     case 2:
1333         toclen = cdrom_read_toc_raw(nb_sectors, outbuf, msf, start_track);
1334         break;
1335     default:
1336         return -1;
1337     }
1338     return toclen;
1339 }
1340
1341 static int scsi_disk_emulate_start_stop(SCSIDiskReq *r)
1342 {
1343     SCSIRequest *req = &r->req;
1344     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, req->dev);
1345     bool start = req->cmd.buf[4] & 1;
1346     bool loej = req->cmd.buf[4] & 2; /* load on start, eject on !start */
1347     int pwrcnd = req->cmd.buf[4] & 0xf0;
1348
1349     if (pwrcnd) {
1350         /* eject/load only happens for power condition == 0 */
1351         return 0;
1352     }
1353
1354     if ((s->features & (1 << SCSI_DISK_F_REMOVABLE)) && loej) {
1355         if (!start && !s->tray_open && s->tray_locked) {
1356             scsi_check_condition(r,
1357                                  blk_is_inserted(s->qdev.conf.blk)
1358                                  ? SENSE_CODE(ILLEGAL_REQ_REMOVAL_PREVENTED)
1359                                  : SENSE_CODE(NOT_READY_REMOVAL_PREVENTED));
1360             return -1;
1361         }
1362
1363         if (s->tray_open != !start) {
1364             blk_eject(s->qdev.conf.blk, !start);
1365             s->tray_open = !start;
1366         }
1367     }
1368     return 0;
1369 }
1370
1371 static void scsi_disk_emulate_read_data(SCSIRequest *req)
1372 {
1373     SCSIDiskReq *r = DO_UPCAST(SCSIDiskReq, req, req);
1374     int buflen = r->iov.iov_len;
1375
1376     if (buflen) {
1377         DPRINTF("Read buf_len=%d\n", buflen);
1378         r->iov.iov_len = 0;
1379         r->started = true;
1380         scsi_req_data(&r->req, buflen);
1381         return;
1382     }
1383
1384     /* This also clears the sense buffer for REQUEST SENSE.  */
1385     scsi_req_complete(&r->req, GOOD);
1386 }
1387
1388 static int scsi_disk_check_mode_select(SCSIDiskState *s, int page,
1389                                        uint8_t *inbuf, int inlen)
1390 {
1391     uint8_t mode_current[SCSI_MAX_MODE_LEN];
1392     uint8_t mode_changeable[SCSI_MAX_MODE_LEN];
1393     uint8_t *p;
1394     int len, expected_len, changeable_len, i;
1395
1396     /* The input buffer does not include the page header, so it is
1397      * off by 2 bytes.
1398      */
1399     expected_len = inlen + 2;
1400     if (expected_len > SCSI_MAX_MODE_LEN) {
1401         return -1;
1402     }
1403
1404     p = mode_current;
1405     memset(mode_current, 0, inlen + 2);
1406     len = mode_sense_page(s, page, &p, 0);
1407     if (len < 0 || len != expected_len) {
1408         return -1;
1409     }
1410
1411     p = mode_changeable;
1412     memset(mode_changeable, 0, inlen + 2);
1413     changeable_len = mode_sense_page(s, page, &p, 1);
1414     assert(changeable_len == len);
1415
1416     /* Check that unchangeable bits are the same as what MODE SENSE
1417      * would return.
1418      */
1419     for (i = 2; i < len; i++) {
1420         if (((mode_current[i] ^ inbuf[i - 2]) & ~mode_changeable[i]) != 0) {
1421             return -1;
1422         }
1423     }
1424     return 0;
1425 }
1426
1427 static void scsi_disk_apply_mode_select(SCSIDiskState *s, int page, uint8_t *p)
1428 {
1429     switch (page) {
1430     case MODE_PAGE_CACHING:
1431         blk_set_enable_write_cache(s->qdev.conf.blk, (p[0] & 4) != 0);
1432         break;
1433
1434     default:
1435         break;
1436     }
1437 }
1438
1439 static int mode_select_pages(SCSIDiskReq *r, uint8_t *p, int len, bool change)
1440 {
1441     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
1442
1443     while (len > 0) {
1444         int page, subpage, page_len;
1445
1446         /* Parse both possible formats for the mode page headers.  */
1447         page = p[0] & 0x3f;
1448         if (p[0] & 0x40) {
1449             if (len < 4) {
1450                 goto invalid_param_len;
1451             }
1452             subpage = p[1];
1453             page_len = lduw_be_p(&p[2]);
1454             p += 4;
1455             len -= 4;
1456         } else {
1457             if (len < 2) {
1458                 goto invalid_param_len;
1459             }
1460             subpage = 0;
1461             page_len = p[1];
1462             p += 2;
1463             len -= 2;
1464         }
1465
1466         if (subpage) {
1467             goto invalid_param;
1468         }
1469         if (page_len > len) {
1470             goto invalid_param_len;
1471         }
1472
1473         if (!change) {
1474             if (scsi_disk_check_mode_select(s, page, p, page_len) < 0) {
1475                 goto invalid_param;
1476             }
1477         } else {
1478             scsi_disk_apply_mode_select(s, page, p);
1479         }
1480
1481         p += page_len;
1482         len -= page_len;
1483     }
1484     return 0;
1485
1486 invalid_param:
1487     scsi_check_condition(r, SENSE_CODE(INVALID_PARAM));
1488     return -1;
1489
1490 invalid_param_len:
1491     scsi_check_condition(r, SENSE_CODE(INVALID_PARAM_LEN));
1492     return -1;
1493 }
1494
1495 static void scsi_disk_emulate_mode_select(SCSIDiskReq *r, uint8_t *inbuf)
1496 {
1497     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
1498     uint8_t *p = inbuf;
1499     int cmd = r->req.cmd.buf[0];
1500     int len = r->req.cmd.xfer;
1501     int hdr_len = (cmd == MODE_SELECT ? 4 : 8);
1502     int bd_len;
1503     int pass;
1504
1505     /* We only support PF=1, SP=0.  */
1506     if ((r->req.cmd.buf[1] & 0x11) != 0x10) {
1507         goto invalid_field;
1508     }
1509
1510     if (len < hdr_len) {
1511         goto invalid_param_len;
1512     }
1513
1514     bd_len = (cmd == MODE_SELECT ? p[3] : lduw_be_p(&p[6]));
1515     len -= hdr_len;
1516     p += hdr_len;
1517     if (len < bd_len) {
1518         goto invalid_param_len;
1519     }
1520     if (bd_len != 0 && bd_len != 8) {
1521         goto invalid_param;
1522     }
1523
1524     len -= bd_len;
1525     p += bd_len;
1526
1527     /* Ensure no change is made if there is an error!  */
1528     for (pass = 0; pass < 2; pass++) {
1529         if (mode_select_pages(r, p, len, pass == 1) < 0) {
1530             assert(pass == 0);
1531             return;
1532         }
1533     }
1534     if (!blk_enable_write_cache(s->qdev.conf.blk)) {
1535         /* The request is used as the AIO opaque value, so add a ref.  */
1536         scsi_req_ref(&r->req);
1537         block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, 0,
1538                          BLOCK_ACCT_FLUSH);
1539         r->req.aiocb = blk_aio_flush(s->qdev.conf.blk, scsi_aio_complete, r);
1540         return;
1541     }
1542
1543     scsi_req_complete(&r->req, GOOD);
1544     return;
1545
1546 invalid_param:
1547     scsi_check_condition(r, SENSE_CODE(INVALID_PARAM));
1548     return;
1549
1550 invalid_param_len:
1551     scsi_check_condition(r, SENSE_CODE(INVALID_PARAM_LEN));
1552     return;
1553
1554 invalid_field:
1555     scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));
1556 }
1557
1558 static inline bool check_lba_range(SCSIDiskState *s,
1559                                    uint64_t sector_num, uint32_t nb_sectors)
1560 {
1561     /*
1562      * The first line tests that no overflow happens when computing the last
1563      * sector.  The second line tests that the last accessed sector is in
1564      * range.
1565      *
1566      * Careful, the computations should not underflow for nb_sectors == 0,
1567      * and a 0-block read to the first LBA beyond the end of device is
1568      * valid.
1569      */
1570     return (sector_num <= sector_num + nb_sectors &&
1571             sector_num + nb_sectors <= s->qdev.max_lba + 1);
1572 }
1573
1574 typedef struct UnmapCBData {
1575     SCSIDiskReq *r;
1576     uint8_t *inbuf;
1577     int count;
1578 } UnmapCBData;
1579
1580 static void scsi_unmap_complete(void *opaque, int ret);
1581
1582 static void scsi_unmap_complete_noio(UnmapCBData *data, int ret)
1583 {
1584     SCSIDiskReq *r = data->r;
1585     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
1586     uint64_t sector_num;
1587     uint32_t nb_sectors;
1588
1589     assert(r->req.aiocb == NULL);
1590     if (scsi_disk_req_check_error(r, ret, false)) {
1591         goto done;
1592     }
1593
1594     if (data->count > 0) {
1595         sector_num = ldq_be_p(&data->inbuf[0]);
1596         nb_sectors = ldl_be_p(&data->inbuf[8]) & 0xffffffffULL;
1597         if (!check_lba_range(s, sector_num, nb_sectors)) {
1598             scsi_check_condition(r, SENSE_CODE(LBA_OUT_OF_RANGE));
1599             goto done;
1600         }
1601
1602         r->req.aiocb = blk_aio_discard(s->qdev.conf.blk,
1603                                        sector_num * (s->qdev.blocksize / 512),
1604                                        nb_sectors * (s->qdev.blocksize / 512),
1605                                        scsi_unmap_complete, data);
1606         data->count--;
1607         data->inbuf += 16;
1608         return;
1609     }
1610
1611     scsi_req_complete(&r->req, GOOD);
1612
1613 done:
1614     scsi_req_unref(&r->req);
1615     g_free(data);
1616 }
1617
1618 static void scsi_unmap_complete(void *opaque, int ret)
1619 {
1620     UnmapCBData *data = opaque;
1621     SCSIDiskReq *r = data->r;
1622
1623     assert(r->req.aiocb != NULL);
1624     r->req.aiocb = NULL;
1625
1626     scsi_unmap_complete_noio(data, ret);
1627 }
1628
1629 static void scsi_disk_emulate_unmap(SCSIDiskReq *r, uint8_t *inbuf)
1630 {
1631     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
1632     uint8_t *p = inbuf;
1633     int len = r->req.cmd.xfer;
1634     UnmapCBData *data;
1635
1636     /* Reject ANCHOR=1.  */
1637     if (r->req.cmd.buf[1] & 0x1) {
1638         goto invalid_field;
1639     }
1640
1641     if (len < 8) {
1642         goto invalid_param_len;
1643     }
1644     if (len < lduw_be_p(&p[0]) + 2) {
1645         goto invalid_param_len;
1646     }
1647     if (len < lduw_be_p(&p[2]) + 8) {
1648         goto invalid_param_len;
1649     }
1650     if (lduw_be_p(&p[2]) & 15) {
1651         goto invalid_param_len;
1652     }
1653
1654     if (blk_is_read_only(s->qdev.conf.blk)) {
1655         scsi_check_condition(r, SENSE_CODE(WRITE_PROTECTED));
1656         return;
1657     }
1658
1659     data = g_new0(UnmapCBData, 1);
1660     data->r = r;
1661     data->inbuf = &p[8];
1662     data->count = lduw_be_p(&p[2]) >> 4;
1663
1664     /* The matching unref is in scsi_unmap_complete, before data is freed.  */
1665     scsi_req_ref(&r->req);
1666     scsi_unmap_complete_noio(data, 0);
1667     return;
1668
1669 invalid_param_len:
1670     scsi_check_condition(r, SENSE_CODE(INVALID_PARAM_LEN));
1671     return;
1672
1673 invalid_field:
1674     scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));
1675 }
1676
1677 typedef struct WriteSameCBData {
1678     SCSIDiskReq *r;
1679     int64_t sector;
1680     int nb_sectors;
1681     QEMUIOVector qiov;
1682     struct iovec iov;
1683 } WriteSameCBData;
1684
1685 static void scsi_write_same_complete(void *opaque, int ret)
1686 {
1687     WriteSameCBData *data = opaque;
1688     SCSIDiskReq *r = data->r;
1689     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
1690
1691     assert(r->req.aiocb != NULL);
1692     r->req.aiocb = NULL;
1693     if (scsi_disk_req_check_error(r, ret, true)) {
1694         goto done;
1695     }
1696
1697     block_acct_done(blk_get_stats(s->qdev.conf.blk), &r->acct);
1698
1699     data->nb_sectors -= data->iov.iov_len / 512;
1700     data->sector += data->iov.iov_len / 512;
1701     data->iov.iov_len = MIN(data->nb_sectors * 512, data->iov.iov_len);
1702     if (data->iov.iov_len) {
1703         block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct,
1704                          data->iov.iov_len, BLOCK_ACCT_WRITE);
1705         /* Reinitialize qiov, to handle unaligned WRITE SAME request
1706          * where final qiov may need smaller size */
1707         qemu_iovec_init_external(&data->qiov, &data->iov, 1);
1708         r->req.aiocb = blk_aio_pwritev(s->qdev.conf.blk,
1709                                        data->sector << BDRV_SECTOR_BITS,
1710                                        &data->qiov, 0,
1711                                        scsi_write_same_complete, data);
1712         return;
1713     }
1714
1715     scsi_req_complete(&r->req, GOOD);
1716
1717 done:
1718     scsi_req_unref(&r->req);
1719     qemu_vfree(data->iov.iov_base);
1720     g_free(data);
1721 }
1722
1723 static void scsi_disk_emulate_write_same(SCSIDiskReq *r, uint8_t *inbuf)
1724 {
1725     SCSIRequest *req = &r->req;
1726     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, req->dev);
1727     uint32_t nb_sectors = scsi_data_cdb_xfer(r->req.cmd.buf);
1728     WriteSameCBData *data;
1729     uint8_t *buf;
1730     int i;
1731
1732     /* Fail if PBDATA=1 or LBDATA=1 or ANCHOR=1.  */
1733     if (nb_sectors == 0 || (req->cmd.buf[1] & 0x16)) {
1734         scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));
1735         return;
1736     }
1737
1738     if (blk_is_read_only(s->qdev.conf.blk)) {
1739         scsi_check_condition(r, SENSE_CODE(WRITE_PROTECTED));
1740         return;
1741     }
1742     if (!check_lba_range(s, r->req.cmd.lba, nb_sectors)) {
1743         scsi_check_condition(r, SENSE_CODE(LBA_OUT_OF_RANGE));
1744         return;
1745     }
1746
1747     if (buffer_is_zero(inbuf, s->qdev.blocksize)) {
1748         int flags = (req->cmd.buf[1] & 0x8) ? BDRV_REQ_MAY_UNMAP : 0;
1749
1750         /* The request is used as the AIO opaque value, so add a ref.  */
1751         scsi_req_ref(&r->req);
1752         block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct,
1753                          nb_sectors * s->qdev.blocksize,
1754                         BLOCK_ACCT_WRITE);
1755         r->req.aiocb = blk_aio_pwrite_zeroes(s->qdev.conf.blk,
1756                                 r->req.cmd.lba * s->qdev.blocksize,
1757                                 nb_sectors * s->qdev.blocksize,
1758                                 flags, scsi_aio_complete, r);
1759         return;
1760     }
1761
1762     data = g_new0(WriteSameCBData, 1);
1763     data->r = r;
1764     data->sector = r->req.cmd.lba * (s->qdev.blocksize / 512);
1765     data->nb_sectors = nb_sectors * (s->qdev.blocksize / 512);
1766     data->iov.iov_len = MIN(data->nb_sectors * 512, SCSI_WRITE_SAME_MAX);
1767     data->iov.iov_base = buf = blk_blockalign(s->qdev.conf.blk,
1768                                               data->iov.iov_len);
1769     qemu_iovec_init_external(&data->qiov, &data->iov, 1);
1770
1771     for (i = 0; i < data->iov.iov_len; i += s->qdev.blocksize) {
1772         memcpy(&buf[i], inbuf, s->qdev.blocksize);
1773     }
1774
1775     scsi_req_ref(&r->req);
1776     block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct,
1777                      data->iov.iov_len, BLOCK_ACCT_WRITE);
1778     r->req.aiocb = blk_aio_pwritev(s->qdev.conf.blk,
1779                                    data->sector << BDRV_SECTOR_BITS,
1780                                    &data->qiov, 0,
1781                                    scsi_write_same_complete, data);
1782 }
1783
1784 static void scsi_disk_emulate_write_data(SCSIRequest *req)
1785 {
1786     SCSIDiskReq *r = DO_UPCAST(SCSIDiskReq, req, req);
1787
1788     if (r->iov.iov_len) {
1789         int buflen = r->iov.iov_len;
1790         DPRINTF("Write buf_len=%d\n", buflen);
1791         r->iov.iov_len = 0;
1792         scsi_req_data(&r->req, buflen);
1793         return;
1794     }
1795
1796     switch (req->cmd.buf[0]) {
1797     case MODE_SELECT:
1798     case MODE_SELECT_10:
1799         /* This also clears the sense buffer for REQUEST SENSE.  */
1800         scsi_disk_emulate_mode_select(r, r->iov.iov_base);
1801         break;
1802
1803     case UNMAP:
1804         scsi_disk_emulate_unmap(r, r->iov.iov_base);
1805         break;
1806
1807     case VERIFY_10:
1808     case VERIFY_12:
1809     case VERIFY_16:
1810         if (r->req.status == -1) {
1811             scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));
1812         }
1813         break;
1814
1815     case WRITE_SAME_10:
1816     case WRITE_SAME_16:
1817         scsi_disk_emulate_write_same(r, r->iov.iov_base);
1818         break;
1819
1820     default:
1821         abort();
1822     }
1823 }
1824
1825 static int32_t scsi_disk_emulate_command(SCSIRequest *req, uint8_t *buf)
1826 {
1827     SCSIDiskReq *r = DO_UPCAST(SCSIDiskReq, req, req);
1828     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, req->dev);
1829     uint64_t nb_sectors;
1830     uint8_t *outbuf;
1831     int buflen;
1832
1833     switch (req->cmd.buf[0]) {
1834     case INQUIRY:
1835     case MODE_SENSE:
1836     case MODE_SENSE_10:
1837     case RESERVE:
1838     case RESERVE_10:
1839     case RELEASE:
1840     case RELEASE_10:
1841     case START_STOP:
1842     case ALLOW_MEDIUM_REMOVAL:
1843     case GET_CONFIGURATION:
1844     case GET_EVENT_STATUS_NOTIFICATION:
1845     case MECHANISM_STATUS:
1846     case REQUEST_SENSE:
1847         break;
1848
1849     default:
1850         if (s->tray_open || !blk_is_inserted(s->qdev.conf.blk)) {
1851             scsi_check_condition(r, SENSE_CODE(NO_MEDIUM));
1852             return 0;
1853         }
1854         break;
1855     }
1856
1857     /*
1858      * FIXME: we shouldn't return anything bigger than 4k, but the code
1859      * requires the buffer to be as big as req->cmd.xfer in several
1860      * places.  So, do not allow CDBs with a very large ALLOCATION
1861      * LENGTH.  The real fix would be to modify scsi_read_data and
1862      * dma_buf_read, so that they return data beyond the buflen
1863      * as all zeros.
1864      */
1865     if (req->cmd.xfer > 65536) {
1866         goto illegal_request;
1867     }
1868     r->buflen = MAX(4096, req->cmd.xfer);
1869
1870     if (!r->iov.iov_base) {
1871         r->iov.iov_base = blk_blockalign(s->qdev.conf.blk, r->buflen);
1872     }
1873
1874     buflen = req->cmd.xfer;
1875     outbuf = r->iov.iov_base;
1876     memset(outbuf, 0, r->buflen);
1877     switch (req->cmd.buf[0]) {
1878     case TEST_UNIT_READY:
1879         assert(!s->tray_open && blk_is_inserted(s->qdev.conf.blk));
1880         break;
1881     case INQUIRY:
1882         buflen = scsi_disk_emulate_inquiry(req, outbuf);
1883         if (buflen < 0) {
1884             goto illegal_request;
1885         }
1886         break;
1887     case MODE_SENSE:
1888     case MODE_SENSE_10:
1889         buflen = scsi_disk_emulate_mode_sense(r, outbuf);
1890         if (buflen < 0) {
1891             goto illegal_request;
1892         }
1893         break;
1894     case READ_TOC:
1895         buflen = scsi_disk_emulate_read_toc(req, outbuf);
1896         if (buflen < 0) {
1897             goto illegal_request;
1898         }
1899         break;
1900     case RESERVE:
1901         if (req->cmd.buf[1] & 1) {
1902             goto illegal_request;
1903         }
1904         break;
1905     case RESERVE_10:
1906         if (req->cmd.buf[1] & 3) {
1907             goto illegal_request;
1908         }
1909         break;
1910     case RELEASE:
1911         if (req->cmd.buf[1] & 1) {
1912             goto illegal_request;
1913         }
1914         break;
1915     case RELEASE_10:
1916         if (req->cmd.buf[1] & 3) {
1917             goto illegal_request;
1918         }
1919         break;
1920     case START_STOP:
1921         if (scsi_disk_emulate_start_stop(r) < 0) {
1922             return 0;
1923         }
1924         break;
1925     case ALLOW_MEDIUM_REMOVAL:
1926         s->tray_locked = req->cmd.buf[4] & 1;
1927         blk_lock_medium(s->qdev.conf.blk, req->cmd.buf[4] & 1);
1928         break;
1929     case READ_CAPACITY_10:
1930         /* The normal LEN field for this command is zero.  */
1931         memset(outbuf, 0, 8);
1932         blk_get_geometry(s->qdev.conf.blk, &nb_sectors);
1933         if (!nb_sectors) {
1934             scsi_check_condition(r, SENSE_CODE(LUN_NOT_READY));
1935             return 0;
1936         }
1937         if ((req->cmd.buf[8] & 1) == 0 && req->cmd.lba) {
1938             goto illegal_request;
1939         }
1940         nb_sectors /= s->qdev.blocksize / 512;
1941         /* Returned value is the address of the last sector.  */
1942         nb_sectors--;
1943         /* Remember the new size for read/write sanity checking. */
1944         s->qdev.max_lba = nb_sectors;
1945         /* Clip to 2TB, instead of returning capacity modulo 2TB. */
1946         if (nb_sectors > UINT32_MAX) {
1947             nb_sectors = UINT32_MAX;
1948         }
1949         outbuf[0] = (nb_sectors >> 24) & 0xff;
1950         outbuf[1] = (nb_sectors >> 16) & 0xff;
1951         outbuf[2] = (nb_sectors >> 8) & 0xff;
1952         outbuf[3] = nb_sectors & 0xff;
1953         outbuf[4] = 0;
1954         outbuf[5] = 0;
1955         outbuf[6] = s->qdev.blocksize >> 8;
1956         outbuf[7] = 0;
1957         break;
1958     case REQUEST_SENSE:
1959         /* Just return "NO SENSE".  */
1960         buflen = scsi_build_sense(NULL, 0, outbuf, r->buflen,
1961                                   (req->cmd.buf[1] & 1) == 0);
1962         if (buflen < 0) {
1963             goto illegal_request;
1964         }
1965         break;
1966     case MECHANISM_STATUS:
1967         buflen = scsi_emulate_mechanism_status(s, outbuf);
1968         if (buflen < 0) {
1969             goto illegal_request;
1970         }
1971         break;
1972     case GET_CONFIGURATION:
1973         buflen = scsi_get_configuration(s, outbuf);
1974         if (buflen < 0) {
1975             goto illegal_request;
1976         }
1977         break;
1978     case GET_EVENT_STATUS_NOTIFICATION:
1979         buflen = scsi_get_event_status_notification(s, r, outbuf);
1980         if (buflen < 0) {
1981             goto illegal_request;
1982         }
1983         break;
1984     case READ_DISC_INFORMATION:
1985         buflen = scsi_read_disc_information(s, r, outbuf);
1986         if (buflen < 0) {
1987             goto illegal_request;
1988         }
1989         break;
1990     case READ_DVD_STRUCTURE:
1991         buflen = scsi_read_dvd_structure(s, r, outbuf);
1992         if (buflen < 0) {
1993             goto illegal_request;
1994         }
1995         break;
1996     case SERVICE_ACTION_IN_16:
1997         /* Service Action In subcommands. */
1998         if ((req->cmd.buf[1] & 31) == SAI_READ_CAPACITY_16) {
1999             DPRINTF("SAI READ CAPACITY(16)\n");
2000             memset(outbuf, 0, req->cmd.xfer);
2001             blk_get_geometry(s->qdev.conf.blk, &nb_sectors);
2002             if (!nb_sectors) {
2003                 scsi_check_condition(r, SENSE_CODE(LUN_NOT_READY));
2004                 return 0;
2005             }
2006             if ((req->cmd.buf[14] & 1) == 0 && req->cmd.lba) {
2007                 goto illegal_request;
2008             }
2009             nb_sectors /= s->qdev.blocksize / 512;
2010             /* Returned value is the address of the last sector.  */
2011             nb_sectors--;
2012             /* Remember the new size for read/write sanity checking. */
2013             s->qdev.max_lba = nb_sectors;
2014             outbuf[0] = (nb_sectors >> 56) & 0xff;
2015             outbuf[1] = (nb_sectors >> 48) & 0xff;
2016             outbuf[2] = (nb_sectors >> 40) & 0xff;
2017             outbuf[3] = (nb_sectors >> 32) & 0xff;
2018             outbuf[4] = (nb_sectors >> 24) & 0xff;
2019             outbuf[5] = (nb_sectors >> 16) & 0xff;
2020             outbuf[6] = (nb_sectors >> 8) & 0xff;
2021             outbuf[7] = nb_sectors & 0xff;
2022             outbuf[8] = 0;
2023             outbuf[9] = 0;
2024             outbuf[10] = s->qdev.blocksize >> 8;
2025             outbuf[11] = 0;
2026             outbuf[12] = 0;
2027             outbuf[13] = get_physical_block_exp(&s->qdev.conf);
2028
2029             /* set TPE bit if the format supports discard */
2030             if (s->qdev.conf.discard_granularity) {
2031                 outbuf[14] = 0x80;
2032             }
2033
2034             /* Protection, exponent and lowest lba field left blank. */
2035             break;
2036         }
2037         DPRINTF("Unsupported Service Action In\n");
2038         goto illegal_request;
2039     case SYNCHRONIZE_CACHE:
2040         /* The request is used as the AIO opaque value, so add a ref.  */
2041         scsi_req_ref(&r->req);
2042         block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, 0,
2043                          BLOCK_ACCT_FLUSH);
2044         r->req.aiocb = blk_aio_flush(s->qdev.conf.blk, scsi_aio_complete, r);
2045         return 0;
2046     case SEEK_10:
2047         DPRINTF("Seek(10) (sector %" PRId64 ")\n", r->req.cmd.lba);
2048         if (r->req.cmd.lba > s->qdev.max_lba) {
2049             goto illegal_lba;
2050         }
2051         break;
2052     case MODE_SELECT:
2053         DPRINTF("Mode Select(6) (len %lu)\n", (long)r->req.cmd.xfer);
2054         break;
2055     case MODE_SELECT_10:
2056         DPRINTF("Mode Select(10) (len %lu)\n", (long)r->req.cmd.xfer);
2057         break;
2058     case UNMAP:
2059         DPRINTF("Unmap (len %lu)\n", (long)r->req.cmd.xfer);
2060         break;
2061     case VERIFY_10:
2062     case VERIFY_12:
2063     case VERIFY_16:
2064         DPRINTF("Verify (bytchk %d)\n", (req->cmd.buf[1] >> 1) & 3);
2065         if (req->cmd.buf[1] & 6) {
2066             goto illegal_request;
2067         }
2068         break;
2069     case WRITE_SAME_10:
2070     case WRITE_SAME_16:
2071         DPRINTF("WRITE SAME %d (len %lu)\n",
2072                 req->cmd.buf[0] == WRITE_SAME_10 ? 10 : 16,
2073                 (long)r->req.cmd.xfer);
2074         break;
2075     default:
2076         DPRINTF("Unknown SCSI command (%2.2x=%s)\n", buf[0],
2077                 scsi_command_name(buf[0]));
2078         scsi_check_condition(r, SENSE_CODE(INVALID_OPCODE));
2079         return 0;
2080     }
2081     assert(!r->req.aiocb);
2082     r->iov.iov_len = MIN(r->buflen, req->cmd.xfer);
2083     if (r->iov.iov_len == 0) {
2084         scsi_req_complete(&r->req, GOOD);
2085     }
2086     if (r->req.cmd.mode == SCSI_XFER_TO_DEV) {
2087         assert(r->iov.iov_len == req->cmd.xfer);
2088         return -r->iov.iov_len;
2089     } else {
2090         return r->iov.iov_len;
2091     }
2092
2093 illegal_request:
2094     if (r->req.status == -1) {
2095         scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));
2096     }
2097     return 0;
2098
2099 illegal_lba:
2100     scsi_check_condition(r, SENSE_CODE(LBA_OUT_OF_RANGE));
2101     return 0;
2102 }
2103
2104 /* Execute a scsi command.  Returns the length of the data expected by the
2105    command.  This will be Positive for data transfers from the device
2106    (eg. disk reads), negative for transfers to the device (eg. disk writes),
2107    and zero if the command does not transfer any data.  */
2108
2109 static int32_t scsi_disk_dma_command(SCSIRequest *req, uint8_t *buf)
2110 {
2111     SCSIDiskReq *r = DO_UPCAST(SCSIDiskReq, req, req);
2112     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, req->dev);
2113     SCSIDiskClass *sdc = (SCSIDiskClass *) object_get_class(OBJECT(s));
2114     uint32_t len;
2115     uint8_t command;
2116
2117     command = buf[0];
2118
2119     if (s->tray_open || !blk_is_inserted(s->qdev.conf.blk)) {
2120         scsi_check_condition(r, SENSE_CODE(NO_MEDIUM));
2121         return 0;
2122     }
2123
2124     len = scsi_data_cdb_xfer(r->req.cmd.buf);
2125     switch (command) {
2126     case READ_6:
2127     case READ_10:
2128     case READ_12:
2129     case READ_16:
2130         DPRINTF("Read (sector %" PRId64 ", count %u)\n", r->req.cmd.lba, len);
2131         if (r->req.cmd.buf[1] & 0xe0) {
2132             goto illegal_request;
2133         }
2134         if (!check_lba_range(s, r->req.cmd.lba, len)) {
2135             goto illegal_lba;
2136         }
2137         r->sector = r->req.cmd.lba * (s->qdev.blocksize / 512);
2138         r->sector_count = len * (s->qdev.blocksize / 512);
2139         break;
2140     case WRITE_6:
2141     case WRITE_10:
2142     case WRITE_12:
2143     case WRITE_16:
2144     case WRITE_VERIFY_10:
2145     case WRITE_VERIFY_12:
2146     case WRITE_VERIFY_16:
2147         if (blk_is_read_only(s->qdev.conf.blk)) {
2148             scsi_check_condition(r, SENSE_CODE(WRITE_PROTECTED));
2149             return 0;
2150         }
2151         DPRINTF("Write %s(sector %" PRId64 ", count %u)\n",
2152                 (command & 0xe) == 0xe ? "And Verify " : "",
2153                 r->req.cmd.lba, len);
2154         if (r->req.cmd.buf[1] & 0xe0) {
2155             goto illegal_request;
2156         }
2157         if (!check_lba_range(s, r->req.cmd.lba, len)) {
2158             goto illegal_lba;
2159         }
2160         r->sector = r->req.cmd.lba * (s->qdev.blocksize / 512);
2161         r->sector_count = len * (s->qdev.blocksize / 512);
2162         break;
2163     default:
2164         abort();
2165     illegal_request:
2166         scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));
2167         return 0;
2168     illegal_lba:
2169         scsi_check_condition(r, SENSE_CODE(LBA_OUT_OF_RANGE));
2170         return 0;
2171     }
2172     r->need_fua_emulation = sdc->need_fua_emulation(&r->req.cmd);
2173     if (r->sector_count == 0) {
2174         scsi_req_complete(&r->req, GOOD);
2175     }
2176     assert(r->iov.iov_len == 0);
2177     if (r->req.cmd.mode == SCSI_XFER_TO_DEV) {
2178         return -r->sector_count * 512;
2179     } else {
2180         return r->sector_count * 512;
2181     }
2182 }
2183
2184 static void scsi_disk_reset(DeviceState *dev)
2185 {
2186     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev.qdev, dev);
2187     uint64_t nb_sectors;
2188
2189     scsi_device_purge_requests(&s->qdev, SENSE_CODE(RESET));
2190
2191     blk_get_geometry(s->qdev.conf.blk, &nb_sectors);
2192     nb_sectors /= s->qdev.blocksize / 512;
2193     if (nb_sectors) {
2194         nb_sectors--;
2195     }
2196     s->qdev.max_lba = nb_sectors;
2197     /* reset tray statuses */
2198     s->tray_locked = 0;
2199     s->tray_open = 0;
2200 }
2201
2202 static void scsi_disk_resize_cb(void *opaque)
2203 {
2204     SCSIDiskState *s = opaque;
2205
2206     /* SPC lists this sense code as available only for
2207      * direct-access devices.
2208      */
2209     if (s->qdev.type == TYPE_DISK) {
2210         scsi_device_report_change(&s->qdev, SENSE_CODE(CAPACITY_CHANGED));
2211     }
2212 }
2213
2214 static void scsi_cd_change_media_cb(void *opaque, bool load)
2215 {
2216     SCSIDiskState *s = opaque;
2217
2218     /*
2219      * When a CD gets changed, we have to report an ejected state and
2220      * then a loaded state to guests so that they detect tray
2221      * open/close and media change events.  Guests that do not use
2222      * GET_EVENT_STATUS_NOTIFICATION to detect such tray open/close
2223      * states rely on this behavior.
2224      *
2225      * media_changed governs the state machine used for unit attention
2226      * report.  media_event is used by GET EVENT STATUS NOTIFICATION.
2227      */
2228     s->media_changed = load;
2229     s->tray_open = !load;
2230     scsi_device_set_ua(&s->qdev, SENSE_CODE(UNIT_ATTENTION_NO_MEDIUM));
2231     s->media_event = true;
2232     s->eject_request = false;
2233 }
2234
2235 static void scsi_cd_eject_request_cb(void *opaque, bool force)
2236 {
2237     SCSIDiskState *s = opaque;
2238
2239     s->eject_request = true;
2240     if (force) {
2241         s->tray_locked = false;
2242     }
2243 }
2244
2245 static bool scsi_cd_is_tray_open(void *opaque)
2246 {
2247     return ((SCSIDiskState *)opaque)->tray_open;
2248 }
2249
2250 static bool scsi_cd_is_medium_locked(void *opaque)
2251 {
2252     return ((SCSIDiskState *)opaque)->tray_locked;
2253 }
2254
2255 static const BlockDevOps scsi_disk_removable_block_ops = {
2256     .change_media_cb = scsi_cd_change_media_cb,
2257     .eject_request_cb = scsi_cd_eject_request_cb,
2258     .is_tray_open = scsi_cd_is_tray_open,
2259     .is_medium_locked = scsi_cd_is_medium_locked,
2260
2261     .resize_cb = scsi_disk_resize_cb,
2262 };
2263
2264 static const BlockDevOps scsi_disk_block_ops = {
2265     .resize_cb = scsi_disk_resize_cb,
2266 };
2267
2268 static void scsi_disk_unit_attention_reported(SCSIDevice *dev)
2269 {
2270     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
2271     if (s->media_changed) {
2272         s->media_changed = false;
2273         scsi_device_set_ua(&s->qdev, SENSE_CODE(MEDIUM_CHANGED));
2274     }
2275 }
2276
2277 static void scsi_realize(SCSIDevice *dev, Error **errp)
2278 {
2279     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
2280     Error *err = NULL;
2281
2282     if (!s->qdev.conf.blk) {
2283         error_setg(errp, "drive property not set");
2284         return;
2285     }
2286
2287     if (!(s->features & (1 << SCSI_DISK_F_REMOVABLE)) &&
2288         !blk_is_inserted(s->qdev.conf.blk)) {
2289         error_setg(errp, "Device needs media, but drive is empty");
2290         return;
2291     }
2292
2293     blkconf_serial(&s->qdev.conf, &s->serial);
2294     blkconf_blocksizes(&s->qdev.conf);
2295     if (dev->type == TYPE_DISK) {
2296         blkconf_geometry(&dev->conf, NULL, 65535, 255, 255, &err);
2297         if (err) {
2298             error_propagate(errp, err);
2299             return;
2300         }
2301     }
2302
2303     if (s->qdev.conf.discard_granularity == -1) {
2304         s->qdev.conf.discard_granularity =
2305             MAX(s->qdev.conf.logical_block_size, DEFAULT_DISCARD_GRANULARITY);
2306     }
2307
2308     if (!s->version) {
2309         s->version = g_strdup(qemu_hw_version());
2310     }
2311     if (!s->vendor) {
2312         s->vendor = g_strdup("QEMU");
2313     }
2314
2315     if (blk_is_sg(s->qdev.conf.blk)) {
2316         error_setg(errp, "unwanted /dev/sg*");
2317         return;
2318     }
2319
2320     if ((s->features & (1 << SCSI_DISK_F_REMOVABLE)) &&
2321             !(s->features & (1 << SCSI_DISK_F_NO_REMOVABLE_DEVOPS))) {
2322         blk_set_dev_ops(s->qdev.conf.blk, &scsi_disk_removable_block_ops, s);
2323     } else {
2324         blk_set_dev_ops(s->qdev.conf.blk, &scsi_disk_block_ops, s);
2325     }
2326     blk_set_guest_block_size(s->qdev.conf.blk, s->qdev.blocksize);
2327
2328     blk_iostatus_enable(s->qdev.conf.blk);
2329 }
2330
2331 static void scsi_hd_realize(SCSIDevice *dev, Error **errp)
2332 {
2333     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
2334     /* can happen for devices without drive. The error message for missing
2335      * backend will be issued in scsi_realize
2336      */
2337     if (s->qdev.conf.blk) {
2338         blkconf_blocksizes(&s->qdev.conf);
2339     }
2340     s->qdev.blocksize = s->qdev.conf.logical_block_size;
2341     s->qdev.type = TYPE_DISK;
2342     if (!s->product) {
2343         s->product = g_strdup("QEMU HARDDISK");
2344     }
2345     scsi_realize(&s->qdev, errp);
2346 }
2347
2348 static void scsi_cd_realize(SCSIDevice *dev, Error **errp)
2349 {
2350     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
2351     s->qdev.blocksize = 2048;
2352     s->qdev.type = TYPE_ROM;
2353     s->features |= 1 << SCSI_DISK_F_REMOVABLE;
2354     if (!s->product) {
2355         s->product = g_strdup("QEMU CD-ROM");
2356     }
2357     scsi_realize(&s->qdev, errp);
2358 }
2359
2360 static void scsi_disk_realize(SCSIDevice *dev, Error **errp)
2361 {
2362     DriveInfo *dinfo;
2363     Error *local_err = NULL;
2364
2365     if (!dev->conf.blk) {
2366         scsi_realize(dev, &local_err);
2367         assert(local_err);
2368         error_propagate(errp, local_err);
2369         return;
2370     }
2371
2372     dinfo = blk_legacy_dinfo(dev->conf.blk);
2373     if (dinfo && dinfo->media_cd) {
2374         scsi_cd_realize(dev, errp);
2375     } else {
2376         scsi_hd_realize(dev, errp);
2377     }
2378 }
2379
2380 static const SCSIReqOps scsi_disk_emulate_reqops = {
2381     .size         = sizeof(SCSIDiskReq),
2382     .free_req     = scsi_free_request,
2383     .send_command = scsi_disk_emulate_command,
2384     .read_data    = scsi_disk_emulate_read_data,
2385     .write_data   = scsi_disk_emulate_write_data,
2386     .get_buf      = scsi_get_buf,
2387 };
2388
2389 static const SCSIReqOps scsi_disk_dma_reqops = {
2390     .size         = sizeof(SCSIDiskReq),
2391     .free_req     = scsi_free_request,
2392     .send_command = scsi_disk_dma_command,
2393     .read_data    = scsi_read_data,
2394     .write_data   = scsi_write_data,
2395     .get_buf      = scsi_get_buf,
2396     .load_request = scsi_disk_load_request,
2397     .save_request = scsi_disk_save_request,
2398 };
2399
2400 static const SCSIReqOps *const scsi_disk_reqops_dispatch[256] = {
2401     [TEST_UNIT_READY]                 = &scsi_disk_emulate_reqops,
2402     [INQUIRY]                         = &scsi_disk_emulate_reqops,
2403     [MODE_SENSE]                      = &scsi_disk_emulate_reqops,
2404     [MODE_SENSE_10]                   = &scsi_disk_emulate_reqops,
2405     [START_STOP]                      = &scsi_disk_emulate_reqops,
2406     [ALLOW_MEDIUM_REMOVAL]            = &scsi_disk_emulate_reqops,
2407     [READ_CAPACITY_10]                = &scsi_disk_emulate_reqops,
2408     [READ_TOC]                        = &scsi_disk_emulate_reqops,
2409     [READ_DVD_STRUCTURE]              = &scsi_disk_emulate_reqops,
2410     [READ_DISC_INFORMATION]           = &scsi_disk_emulate_reqops,
2411     [GET_CONFIGURATION]               = &scsi_disk_emulate_reqops,
2412     [GET_EVENT_STATUS_NOTIFICATION]   = &scsi_disk_emulate_reqops,
2413     [MECHANISM_STATUS]                = &scsi_disk_emulate_reqops,
2414     [SERVICE_ACTION_IN_16]            = &scsi_disk_emulate_reqops,
2415     [REQUEST_SENSE]                   = &scsi_disk_emulate_reqops,
2416     [SYNCHRONIZE_CACHE]               = &scsi_disk_emulate_reqops,
2417     [SEEK_10]                         = &scsi_disk_emulate_reqops,
2418     [MODE_SELECT]                     = &scsi_disk_emulate_reqops,
2419     [MODE_SELECT_10]                  = &scsi_disk_emulate_reqops,
2420     [UNMAP]                           = &scsi_disk_emulate_reqops,
2421     [WRITE_SAME_10]                   = &scsi_disk_emulate_reqops,
2422     [WRITE_SAME_16]                   = &scsi_disk_emulate_reqops,
2423     [VERIFY_10]                       = &scsi_disk_emulate_reqops,
2424     [VERIFY_12]                       = &scsi_disk_emulate_reqops,
2425     [VERIFY_16]                       = &scsi_disk_emulate_reqops,
2426
2427     [READ_6]                          = &scsi_disk_dma_reqops,
2428     [READ_10]                         = &scsi_disk_dma_reqops,
2429     [READ_12]                         = &scsi_disk_dma_reqops,
2430     [READ_16]                         = &scsi_disk_dma_reqops,
2431     [WRITE_6]                         = &scsi_disk_dma_reqops,
2432     [WRITE_10]                        = &scsi_disk_dma_reqops,
2433     [WRITE_12]                        = &scsi_disk_dma_reqops,
2434     [WRITE_16]                        = &scsi_disk_dma_reqops,
2435     [WRITE_VERIFY_10]                 = &scsi_disk_dma_reqops,
2436     [WRITE_VERIFY_12]                 = &scsi_disk_dma_reqops,
2437     [WRITE_VERIFY_16]                 = &scsi_disk_dma_reqops,
2438 };
2439
2440 static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun,
2441                                      uint8_t *buf, void *hba_private)
2442 {
2443     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, d);
2444     SCSIRequest *req;
2445     const SCSIReqOps *ops;
2446     uint8_t command;
2447
2448     command = buf[0];
2449     ops = scsi_disk_reqops_dispatch[command];
2450     if (!ops) {
2451         ops = &scsi_disk_emulate_reqops;
2452     }
2453     req = scsi_req_alloc(ops, &s->qdev, tag, lun, hba_private);
2454
2455 #ifdef DEBUG_SCSI
2456     DPRINTF("Command: lun=%d tag=0x%x data=0x%02x", lun, tag, buf[0]);
2457     {
2458         int i;
2459         for (i = 1; i < scsi_cdb_length(buf); i++) {
2460             printf(" 0x%02x", buf[i]);
2461         }
2462         printf("\n");
2463     }
2464 #endif
2465
2466     return req;
2467 }
2468
2469 #ifdef __linux__
2470 static int get_device_type(SCSIDiskState *s)
2471 {
2472     uint8_t cmd[16];
2473     uint8_t buf[36];
2474     uint8_t sensebuf[8];
2475     sg_io_hdr_t io_header;
2476     int ret;
2477
2478     memset(cmd, 0, sizeof(cmd));
2479     memset(buf, 0, sizeof(buf));
2480     cmd[0] = INQUIRY;
2481     cmd[4] = sizeof(buf);
2482
2483     memset(&io_header, 0, sizeof(io_header));
2484     io_header.interface_id = 'S';
2485     io_header.dxfer_direction = SG_DXFER_FROM_DEV;
2486     io_header.dxfer_len = sizeof(buf);
2487     io_header.dxferp = buf;
2488     io_header.cmdp = cmd;
2489     io_header.cmd_len = sizeof(cmd);
2490     io_header.mx_sb_len = sizeof(sensebuf);
2491     io_header.sbp = sensebuf;
2492     io_header.timeout = 6000; /* XXX */
2493
2494     ret = blk_ioctl(s->qdev.conf.blk, SG_IO, &io_header);
2495     if (ret < 0 || io_header.driver_status || io_header.host_status) {
2496         return -1;
2497     }
2498     s->qdev.type = buf[0];
2499     if (buf[1] & 0x80) {
2500         s->features |= 1 << SCSI_DISK_F_REMOVABLE;
2501     }
2502     return 0;
2503 }
2504
2505 static void scsi_block_realize(SCSIDevice *dev, Error **errp)
2506 {
2507     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
2508     int sg_version;
2509     int rc;
2510
2511     if (!s->qdev.conf.blk) {
2512         error_setg(errp, "drive property not set");
2513         return;
2514     }
2515
2516     /* check we are using a driver managing SG_IO (version 3 and after) */
2517     rc = blk_ioctl(s->qdev.conf.blk, SG_GET_VERSION_NUM, &sg_version);
2518     if (rc < 0) {
2519         error_setg(errp, "cannot get SG_IO version number: %s.  "
2520                      "Is this a SCSI device?",
2521                      strerror(-rc));
2522         return;
2523     }
2524     if (sg_version < 30000) {
2525         error_setg(errp, "scsi generic interface too old");
2526         return;
2527     }
2528
2529     /* get device type from INQUIRY data */
2530     rc = get_device_type(s);
2531     if (rc < 0) {
2532         error_setg(errp, "INQUIRY failed");
2533         return;
2534     }
2535
2536     /* Make a guess for the block size, we'll fix it when the guest sends.
2537      * READ CAPACITY.  If they don't, they likely would assume these sizes
2538      * anyway. (TODO: check in /sys).
2539      */
2540     if (s->qdev.type == TYPE_ROM || s->qdev.type == TYPE_WORM) {
2541         s->qdev.blocksize = 2048;
2542     } else {
2543         s->qdev.blocksize = 512;
2544     }
2545
2546     /* Makes the scsi-block device not removable by using HMP and QMP eject
2547      * command.
2548      */
2549     s->features |= (1 << SCSI_DISK_F_NO_REMOVABLE_DEVOPS);
2550
2551     scsi_realize(&s->qdev, errp);
2552     scsi_generic_read_device_identification(&s->qdev);
2553 }
2554
2555 static bool scsi_block_is_passthrough(SCSIDiskState *s, uint8_t *buf)
2556 {
2557     switch (buf[0]) {
2558     case READ_6:
2559     case READ_10:
2560     case READ_12:
2561     case READ_16:
2562     case VERIFY_10:
2563     case VERIFY_12:
2564     case VERIFY_16:
2565     case WRITE_6:
2566     case WRITE_10:
2567     case WRITE_12:
2568     case WRITE_16:
2569     case WRITE_VERIFY_10:
2570     case WRITE_VERIFY_12:
2571     case WRITE_VERIFY_16:
2572         /* If we are not using O_DIRECT, we might read stale data from the
2573          * host cache if writes were made using other commands than these
2574          * ones (such as WRITE SAME or EXTENDED COPY, etc.).  So, without
2575          * O_DIRECT everything must go through SG_IO.
2576          */
2577         if (!(blk_get_flags(s->qdev.conf.blk) & BDRV_O_NOCACHE)) {
2578             break;
2579         }
2580
2581         /* MMC writing cannot be done via pread/pwrite, because it sometimes
2582          * involves writing beyond the maximum LBA or to negative LBA (lead-in).
2583          * And once you do these writes, reading from the block device is
2584          * unreliable, too.  It is even possible that reads deliver random data
2585          * from the host page cache (this is probably a Linux bug).
2586          *
2587          * We might use scsi_disk_dma_reqops as long as no writing commands are
2588          * seen, but performance usually isn't paramount on optical media.  So,
2589          * just make scsi-block operate the same as scsi-generic for them.
2590          */
2591         if (s->qdev.type != TYPE_ROM) {
2592             return false;
2593         }
2594         break;
2595
2596     default:
2597         break;
2598     }
2599
2600     return true;
2601 }
2602
2603
2604 static SCSIRequest *scsi_block_new_request(SCSIDevice *d, uint32_t tag,
2605                                            uint32_t lun, uint8_t *buf,
2606                                            void *hba_private)
2607 {
2608     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, d);
2609
2610     if (scsi_block_is_passthrough(s, buf)) {
2611         return scsi_req_alloc(&scsi_generic_req_ops, &s->qdev, tag, lun,
2612                               hba_private);
2613     } else {
2614         return scsi_req_alloc(&scsi_disk_dma_reqops, &s->qdev, tag, lun,
2615                               hba_private);
2616     }
2617 }
2618
2619 static int scsi_block_parse_cdb(SCSIDevice *d, SCSICommand *cmd,
2620                                   uint8_t *buf, void *hba_private)
2621 {
2622     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, d);
2623
2624     if (scsi_block_is_passthrough(s, buf)) {
2625         return scsi_bus_parse_cdb(&s->qdev, cmd, buf, hba_private);
2626     } else {
2627         return scsi_req_parse_cdb(&s->qdev, cmd, buf);
2628     }
2629 }
2630
2631 #endif
2632
2633 static
2634 BlockAIOCB *scsi_dma_readv(int64_t offset, QEMUIOVector *iov,
2635                            BlockCompletionFunc *cb, void *cb_opaque,
2636                            void *opaque)
2637 {
2638     SCSIDiskReq *r = opaque;
2639     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
2640     return blk_aio_preadv(s->qdev.conf.blk, offset, iov, 0, cb, cb_opaque);
2641 }
2642
2643 static
2644 BlockAIOCB *scsi_dma_writev(int64_t offset, QEMUIOVector *iov,
2645                             BlockCompletionFunc *cb, void *cb_opaque,
2646                             void *opaque)
2647 {
2648     SCSIDiskReq *r = opaque;
2649     SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
2650     return blk_aio_pwritev(s->qdev.conf.blk, offset, iov, 0, cb, cb_opaque);
2651 }
2652
2653 static void scsi_disk_base_class_initfn(ObjectClass *klass, void *data)
2654 {
2655     DeviceClass *dc = DEVICE_CLASS(klass);
2656     SCSIDiskClass *sdc = SCSI_DISK_BASE_CLASS(klass);
2657
2658     dc->fw_name = "disk";
2659     dc->reset = scsi_disk_reset;
2660     sdc->dma_readv = scsi_dma_readv;
2661     sdc->dma_writev = scsi_dma_writev;
2662     sdc->need_fua_emulation = scsi_is_cmd_fua;
2663 }
2664
2665 static const TypeInfo scsi_disk_base_info = {
2666     .name          = TYPE_SCSI_DISK_BASE,
2667     .parent        = TYPE_SCSI_DEVICE,
2668     .class_init    = scsi_disk_base_class_initfn,
2669     .instance_size = sizeof(SCSIDiskState),
2670     .class_size    = sizeof(SCSIDiskClass),
2671 };
2672
2673 #define DEFINE_SCSI_DISK_PROPERTIES()                                \
2674     DEFINE_BLOCK_PROPERTIES(SCSIDiskState, qdev.conf),               \
2675     DEFINE_PROP_STRING("ver", SCSIDiskState, version),               \
2676     DEFINE_PROP_STRING("serial", SCSIDiskState, serial),             \
2677     DEFINE_PROP_STRING("vendor", SCSIDiskState, vendor),             \
2678     DEFINE_PROP_STRING("product", SCSIDiskState, product)
2679
2680 static Property scsi_hd_properties[] = {
2681     DEFINE_SCSI_DISK_PROPERTIES(),
2682     DEFINE_PROP_BIT("removable", SCSIDiskState, features,
2683                     SCSI_DISK_F_REMOVABLE, false),
2684     DEFINE_PROP_BIT("dpofua", SCSIDiskState, features,
2685                     SCSI_DISK_F_DPOFUA, false),
2686     DEFINE_PROP_UINT64("wwn", SCSIDiskState, qdev.wwn, 0),
2687     DEFINE_PROP_UINT64("port_wwn", SCSIDiskState, qdev.port_wwn, 0),
2688     DEFINE_PROP_UINT16("port_index", SCSIDiskState, port_index, 0),
2689     DEFINE_PROP_UINT64("max_unmap_size", SCSIDiskState, max_unmap_size,
2690                        DEFAULT_MAX_UNMAP_SIZE),
2691     DEFINE_PROP_UINT64("max_io_size", SCSIDiskState, max_io_size,
2692                        DEFAULT_MAX_IO_SIZE),
2693     DEFINE_BLOCK_CHS_PROPERTIES(SCSIDiskState, qdev.conf),
2694     DEFINE_PROP_END_OF_LIST(),
2695 };
2696
2697 static const VMStateDescription vmstate_scsi_disk_state = {
2698     .name = "scsi-disk",
2699     .version_id = 1,
2700     .minimum_version_id = 1,
2701     .fields = (VMStateField[]) {
2702         VMSTATE_SCSI_DEVICE(qdev, SCSIDiskState),
2703         VMSTATE_BOOL(media_changed, SCSIDiskState),
2704         VMSTATE_BOOL(media_event, SCSIDiskState),
2705         VMSTATE_BOOL(eject_request, SCSIDiskState),
2706         VMSTATE_BOOL(tray_open, SCSIDiskState),
2707         VMSTATE_BOOL(tray_locked, SCSIDiskState),
2708         VMSTATE_END_OF_LIST()
2709     }
2710 };
2711
2712 static void scsi_hd_class_initfn(ObjectClass *klass, void *data)
2713 {
2714     DeviceClass *dc = DEVICE_CLASS(klass);
2715     SCSIDeviceClass *sc = SCSI_DEVICE_CLASS(klass);
2716
2717     sc->realize      = scsi_hd_realize;
2718     sc->alloc_req    = scsi_new_request;
2719     sc->unit_attention_reported = scsi_disk_unit_attention_reported;
2720     dc->desc = "virtual SCSI disk";
2721     dc->props = scsi_hd_properties;
2722     dc->vmsd  = &vmstate_scsi_disk_state;
2723 }
2724
2725 static const TypeInfo scsi_hd_info = {
2726     .name          = "scsi-hd",
2727     .parent        = TYPE_SCSI_DISK_BASE,
2728     .class_init    = scsi_hd_class_initfn,
2729 };
2730
2731 static Property scsi_cd_properties[] = {
2732     DEFINE_SCSI_DISK_PROPERTIES(),
2733     DEFINE_PROP_UINT64("wwn", SCSIDiskState, qdev.wwn, 0),
2734     DEFINE_PROP_UINT64("port_wwn", SCSIDiskState, qdev.port_wwn, 0),
2735     DEFINE_PROP_UINT16("port_index", SCSIDiskState, port_index, 0),
2736     DEFINE_PROP_UINT64("max_io_size", SCSIDiskState, max_io_size,
2737                        DEFAULT_MAX_IO_SIZE),
2738     DEFINE_PROP_END_OF_LIST(),
2739 };
2740
2741 static void scsi_cd_class_initfn(ObjectClass *klass, void *data)
2742 {
2743     DeviceClass *dc = DEVICE_CLASS(klass);
2744     SCSIDeviceClass *sc = SCSI_DEVICE_CLASS(klass);
2745
2746     sc->realize      = scsi_cd_realize;
2747     sc->alloc_req    = scsi_new_request;
2748     sc->unit_attention_reported = scsi_disk_unit_attention_reported;
2749     dc->desc = "virtual SCSI CD-ROM";
2750     dc->props = scsi_cd_properties;
2751     dc->vmsd  = &vmstate_scsi_disk_state;
2752 }
2753
2754 static const TypeInfo scsi_cd_info = {
2755     .name          = "scsi-cd",
2756     .parent        = TYPE_SCSI_DISK_BASE,
2757     .class_init    = scsi_cd_class_initfn,
2758 };
2759
2760 #ifdef __linux__
2761 static Property scsi_block_properties[] = {
2762     DEFINE_PROP_DRIVE("drive", SCSIDiskState, qdev.conf.blk),
2763     DEFINE_PROP_END_OF_LIST(),
2764 };
2765
2766 static void scsi_block_class_initfn(ObjectClass *klass, void *data)
2767 {
2768     DeviceClass *dc = DEVICE_CLASS(klass);
2769     SCSIDeviceClass *sc = SCSI_DEVICE_CLASS(klass);
2770
2771     sc->realize      = scsi_block_realize;
2772     sc->alloc_req    = scsi_block_new_request;
2773     sc->parse_cdb    = scsi_block_parse_cdb;
2774     dc->desc = "SCSI block device passthrough";
2775     dc->props = scsi_block_properties;
2776     dc->vmsd  = &vmstate_scsi_disk_state;
2777 }
2778
2779 static const TypeInfo scsi_block_info = {
2780     .name          = "scsi-block",
2781     .parent        = TYPE_SCSI_DISK_BASE,
2782     .class_init    = scsi_block_class_initfn,
2783 };
2784 #endif
2785
2786 static Property scsi_disk_properties[] = {
2787     DEFINE_SCSI_DISK_PROPERTIES(),
2788     DEFINE_PROP_BIT("removable", SCSIDiskState, features,
2789                     SCSI_DISK_F_REMOVABLE, false),
2790     DEFINE_PROP_BIT("dpofua", SCSIDiskState, features,
2791                     SCSI_DISK_F_DPOFUA, false),
2792     DEFINE_PROP_UINT64("wwn", SCSIDiskState, qdev.wwn, 0),
2793     DEFINE_PROP_UINT64("port_wwn", SCSIDiskState, qdev.port_wwn, 0),
2794     DEFINE_PROP_UINT16("port_index", SCSIDiskState, port_index, 0),
2795     DEFINE_PROP_UINT64("max_unmap_size", SCSIDiskState, max_unmap_size,
2796                        DEFAULT_MAX_UNMAP_SIZE),
2797     DEFINE_PROP_UINT64("max_io_size", SCSIDiskState, max_io_size,
2798                        DEFAULT_MAX_IO_SIZE),
2799     DEFINE_PROP_END_OF_LIST(),
2800 };
2801
2802 static void scsi_disk_class_initfn(ObjectClass *klass, void *data)
2803 {
2804     DeviceClass *dc = DEVICE_CLASS(klass);
2805     SCSIDeviceClass *sc = SCSI_DEVICE_CLASS(klass);
2806
2807     sc->realize      = scsi_disk_realize;
2808     sc->alloc_req    = scsi_new_request;
2809     sc->unit_attention_reported = scsi_disk_unit_attention_reported;
2810     dc->fw_name = "disk";
2811     dc->desc = "virtual SCSI disk or CD-ROM (legacy)";
2812     dc->reset = scsi_disk_reset;
2813     dc->props = scsi_disk_properties;
2814     dc->vmsd  = &vmstate_scsi_disk_state;
2815 }
2816
2817 static const TypeInfo scsi_disk_info = {
2818     .name          = "scsi-disk",
2819     .parent        = TYPE_SCSI_DISK_BASE,
2820     .class_init    = scsi_disk_class_initfn,
2821 };
2822
2823 static void scsi_disk_register_types(void)
2824 {
2825     type_register_static(&scsi_disk_base_info);
2826     type_register_static(&scsi_hd_info);
2827     type_register_static(&scsi_cd_info);
2828 #ifdef __linux__
2829     type_register_static(&scsi_block_info);
2830 #endif
2831     type_register_static(&scsi_disk_info);
2832 }
2833
2834 type_init(scsi_disk_register_types)
This page took 0.178542 seconds and 4 git commands to generate.