Skip to contentSkip to conversation

cdrom fixes

PATCH New Volker Ruppert 1 participant 1 message Nov 5, 2005

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 cdrom fixes

Hi all,

I tried to run the dos utility CDT in Qemu, but it always reported "no CD in drive" when a CD was present. I have created a patch to make the TOC command work in CDT. I still don't know how to fix the UPC/EAN stuff.
The patch fixes the "mode sense" command and adds a partial implementation of "read subchannel".

--
Bye

Volker

hw/ide.c renamed from home/volker/qemu/hw/ide.c +23 -1
diff -urN /home/volker/qemu/hw/ide.c ./hw/ide.c
@@ -1191,7 +1191,11 @@
                     break;
                 case 0x2a:
                     cpu_to_ube16(&buf[0], 28 + 6);
-                    buf[2] = 0x70;
+                    if (bdrv_is_inserted(s->bs)) {
+                      buf[2] = 0x12;
+                    } else {
+                      buf[2] = 0x70;
+                    }
                     buf[3] = 0;
                     buf[4] = 0;
                     buf[5] = 0;
@@ -1433,6 +1437,24 @@
         padstr8(buf + 32, 4, QEMU_VERSION);
         ide_atapi_cmd_reply(s, 36, max_len);
         break;
+    case GPCMD_READ_SUBCHANNEL:
+        if (!bdrv_is_inserted(s->bs)) {
+            ide_atapi_cmd_error(s, SENSE_NOT_READY, 
+                                ASC_MEDIUM_NOT_PRESENT);
+            break;
+        }
+        if (packet[2] & 0x40) { /* SubQ not supported */
+          ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST, 
+                              ASC_INV_FIELD_IN_CMD_PACKET);
+            break;
+        }
+        max_len = ube16_to_cpu(packet + 7);
+        buf[0] = 0x00;
+        buf[1] = 0x00; /* audio not supported */
+        buf[2] = 0x00;
+        buf[3] = 0x00;
+        ide_atapi_cmd_reply(s, 4, max_len);
+        break;
     default:
         ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST, 
                             ASC_ILLEGAL_OPCODE);