Revision 7d8406be hw/scsi-disk.c
b/hw/scsi-disk.c | ||
---|---|---|
245 | 245 |
s->buf_len = 4; |
246 | 246 |
break; |
247 | 247 |
case 0x12: |
248 |
DPRINTF("Inquiry (len %d)\n", len);
|
|
248 |
DPRINTF("Inquiry (len %d)\n", len);
|
|
249 | 249 |
if (len < 36) { |
250 | 250 |
BADF("Inquiry buffer too small (%d)\n", len); |
251 | 251 |
} |
... | ... | |
253 | 253 |
if (bdrv_get_type_hint(s->bdrv) == BDRV_TYPE_CDROM) { |
254 | 254 |
s->buf[0] = 5; |
255 | 255 |
s->buf[1] = 0x80; |
256 |
memcpy(&s->buf[16], "QEMU CDROM ", 16);
|
|
256 |
memcpy(&s->buf[16], "QEMU CD-ROM ", 16);
|
|
257 | 257 |
} else { |
258 | 258 |
s->buf[0] = 0; |
259 | 259 |
memcpy(&s->buf[16], "QEMU HARDDISK ", 16); |
260 | 260 |
} |
261 | 261 |
memcpy(&s->buf[8], "QEMU ", 8); |
262 |
memcpy(&s->buf[32], QEMU_VERSION, 4); |
|
262 | 263 |
s->buf[2] = 3; /* SCSI-3 */ |
263 | 264 |
s->buf[3] = 2; /* Format 2 */ |
264 | 265 |
s->buf[4] = 32; |
... | ... | |
275 | 276 |
goto fail; |
276 | 277 |
break; |
277 | 278 |
case 0x1a: |
278 |
DPRINTF("Mode Sense(6) (page %d, len %d)\n", buf[2], len); |
|
279 |
memset(s->buf, 0, 4); |
|
280 |
s->buf[0] = 0x16; /* Mode data length (4 + 0x12). */ |
|
281 |
s->buf[1] = 0; /* Default media type. */ |
|
282 |
s->buf[2] = 0; /* Write enabled. */ |
|
283 |
s->buf[3] = 0; /* Block descriptor length. */ |
|
284 |
/* Caching page. */ |
|
285 |
s->buf[4 + 0] = 8; |
|
286 |
s->buf[4 + 1] = 0x12; |
|
287 |
s->buf[4 + 2] = 4; /* WCE */ |
|
288 |
if (len > 0x16) |
|
289 |
len = 0x16; |
|
279 |
case 0x5a: |
|
280 |
DPRINTF("Mode Sense (page %d, len %d)\n", buf[2], len); |
|
281 |
if (bdrv_get_type_hint(s->bdrv) == BDRV_TYPE_CDROM) { |
|
282 |
memset(s->buf, 0, 4); |
|
283 |
s->buf[0] = 4; /* Mode data length. */ |
|
284 |
s->buf[1] = 0; /* Default media type. */ |
|
285 |
s->buf[2] = 0x80; /* Readonly. */ |
|
286 |
s->buf[3] = 0; /* Block descriptor length. */ |
|
287 |
} else { |
|
288 |
memset(s->buf, 0, 0x16); |
|
289 |
s->buf[0] = 0x16; /* Mode data length (4 + 0x12). */ |
|
290 |
s->buf[1] = 0; /* Default media type. */ |
|
291 |
s->buf[2] = 0; /* Write enabled. */ |
|
292 |
s->buf[3] = 0; /* Block descriptor length. */ |
|
293 |
/* Caching page. */ |
|
294 |
s->buf[4 + 0] = 8; |
|
295 |
s->buf[4 + 1] = 0x12; |
|
296 |
s->buf[4 + 2] = 4; /* WCE */ |
|
297 |
if (len > 0x16) |
|
298 |
len = 0x16; |
|
299 |
} |
|
290 | 300 |
s->buf_len = len; |
291 | 301 |
break; |
292 | 302 |
case 0x25: |
... | ... | |
317 | 327 |
s->sector_count = len * s->cluster_size; |
318 | 328 |
is_write = 1; |
319 | 329 |
break; |
330 |
case 0x35: |
|
331 |
DPRINTF("Syncronise cache (sector %d, count %d)\n", lba, len); |
|
332 |
/* ??? Extend block layer and use fsync to implement this. */ |
|
333 |
break; |
|
320 | 334 |
case 0x43: |
321 | 335 |
{ |
322 | 336 |
int start_track, format, msf, toclen; |
Also available in: Unified diff