Re: [Qemu-devel] cdrom disc type - is this patch correct? (unbreaks recent FreeBSD guest's -cdrom access)

2007-11-19 Thread Jens Axboe
On Mon, Nov 19 2007, Juergen Lock wrote:
 Oops, I seem to have missed this post, sorry for not answering earlier...
 
 In article [EMAIL PROTECTED] you write:
 On Tue, Nov 13 2007, Juergen Lock wrote:
  Hi!
  
   Yesterday I learned that FreeBSD 7.0-BETA2 guests will no longer
  read from the emulated cd drive, apparently because of this commit:
  
 http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/ata/atapi-cd.c.diff?r1=1.193;r2=1.193.2.1
  The following patch file added to the qemu-devel port fixes the issue
  for me, is it also correct?   (making the guest see a dvd in the drive
  when it is inserted, previously it saw the drive as empty.)
  
   The second hunk is already in qemu cvs so remove it if you want to
  test on that.  ISO used for testing:
  
 ftp://ftp.freebsd.org:/pub/FreeBSD/ISO-IMAGES-i386/7.0/7.0-BETA2-i386-disc1.iso
  (test by either selecting fixit-cdrom or by trying to install, just
  booting it will always work because that goes thru the bios.)
  
  Index: qemu/hw/ide.c
  @@ -1339,6 +1341,8 @@
   case 0x2a:
   cpu_to_ube16(buf[0], 28 + 6);
   buf[2] = 0x70;
  +if (bdrv_is_inserted(s-bs))
  +buf[2] = 0x40;
 
 medium type code has been obsoleted since at least 1999. Looking back at
 even older docs, 0x70 is 'door closed, no disc present'. 0x40 is a
 reserved value though, I would not suggest using that. Given that
 freebsd breaks, my suggest change would be the below - keep the 0x70 for
 when no disc is really inserted, but don't set anything if there is.
 
 diff --git a/hw/ide.c b/hw/ide.c
 index 5f76c27..52d4c78 100644
 --- a/hw/ide.c
 +++ b/hw/ide.c
 @@ -1344,7 +1344,10 @@ static void ide_atapi_cmd(IDEState *s)
  break;
  case 0x2a:
  cpu_to_ube16(buf[0], 28 + 6);
 -buf[2] = 0x70;
 +if (!bdrv_is_inserted(s-bs))
 +buf[2] = 0x70;
 +else
 +buf[2] = 0;
  buf[3] = 0;
  buf[4] = 0;
  buf[5] = 0;
 
 
  Well that (0) doesn't work.  The relevant FreeBSD header,
   
 http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/ata/atapi-cd.h?rev=1.46.2.1;content-type=text%2Fx-cvsweb-markup
 , defines the following:
 
 [...]
 /* CDROM Capabilities and Mechanical Status Page */
 struct cappage {
 /* mode page data header */
 u_int16_t   data_length;
 u_int8_tmedium_type;
 #define MST_TYPE_MASK_LOW   0x0f
 #define MST_FMT_NONE0x00
 #define MST_DATA_1200x01
 #define MST_AUDIO_120   0x02
 #define MST_COMB_1200x03
 #define MST_PHOTO_120   0x04
 #define MST_DATA_80 0x05
 #define MST_AUDIO_800x06
 #define MST_COMB_80 0x07
 #define MST_PHOTO_800x08
 
 #define MST_TYPE_MASK_HIGH  0x70
 #define MST_CDROM   0x00
 #define MST_CDR 0x10
 #define MST_CDRW0x20
 #define MST_DVD 0x40
 
 #define MST_NO_DISC 0x70
 #define MST_DOOR_OPEN   0x71
 #define MST_FMT_ERROR   0x72
 
 u_int8_tdev_spec;
 u_int16_t   unused;
 u_int16_t   blk_desc_len;
 
 /* capabilities page */
 u_int8_tpage_code;
 #define ATAPI_CDROM_CAP_PAGE0x2a
 
 u_int8_tparam_len;
 
 u_int16_t   media;
 #define MST_READ_CDR0x0001
 #define MST_READ_CDRW   0x0002
 #define MST_READ_PACKET 0x0004
 #define MST_READ_DVDROM 0x0008
 #define MST_READ_DVDR   0x0010
 #define MST_READ_DVDRAM 0x0020
 #define MST_WRITE_CDR   0x0100
 #define MST_WRITE_CDRW  0x0200
 #define MST_WRITE_TEST  0x0400
 #define MST_WRITE_DVDR  0x1000
 #define MST_WRITE_DVDRAM0x2000
 
 u_int16_t   capabilities;
 #define MST_AUDIO_PLAY  0x0001
 #define MST_COMPOSITE   0x0002
 #define MST_AUDIO_P10x0004
 #define MST_AUDIO_P20x0008
 #define MST_MODE2_f10x0010
 #define MST_MODE2_f20x0020
 #define MST_MULTISESSION0x0040
 #define MST_BURNPROOF   0x0080
 #define MST_READ_CDDA   0x0100
 #define MST_CDDA_STREAM 0x0200
 #define MST_COMBINED_RW 0x0400
 #define MST_CORRECTED_RW0x0800
 #define MST_SUPPORT_C2  0x1000
 #define MST_ISRC0x2000
 #define MST_UPC 0x4000
 
 u_int8_tmechanism;
 #define MST_LOCKABLE0x01
 #define MST_LOCKED  0x02
 #define MST_PREVENT 0x04
 #define MST_EJECT   0x08
 #define MST_MECH_MASK   0xe0
 #define MST_MECH_CADDY  0x00
 #define MST_MECH_TRAY   0x20
 #define MST_MECH_POPUP  0x40
 #define MST_MECH_CHANGER0x80
 #define MST_MECH_CARTRIDGE  0xa0
 
 uint8_t audio;
 #define MST_SEP_VOL  

Re: [Qemu-devel] cdrom disc type - is this patch correct? (unbreaks recent FreeBSD guest's -cdrom access)

2007-11-18 Thread Juergen Lock
Oops, I seem to have missed this post, sorry for not answering earlier...

In article [EMAIL PROTECTED] you write:
On Tue, Nov 13 2007, Juergen Lock wrote:
 Hi!
 
  Yesterday I learned that FreeBSD 7.0-BETA2 guests will no longer
 read from the emulated cd drive, apparently because of this commit:
 
http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/ata/atapi-cd.c.diff?r1=1.193;r2=1.193.2.1
 The following patch file added to the qemu-devel port fixes the issue
 for me, is it also correct?   (making the guest see a dvd in the drive
 when it is inserted, previously it saw the drive as empty.)
 
  The second hunk is already in qemu cvs so remove it if you want to
 test on that.  ISO used for testing:
 
ftp://ftp.freebsd.org:/pub/FreeBSD/ISO-IMAGES-i386/7.0/7.0-BETA2-i386-disc1.iso
 (test by either selecting fixit-cdrom or by trying to install, just
 booting it will always work because that goes thru the bios.)
 
 Index: qemu/hw/ide.c
 @@ -1339,6 +1341,8 @@
  case 0x2a:
  cpu_to_ube16(buf[0], 28 + 6);
  buf[2] = 0x70;
 +if (bdrv_is_inserted(s-bs))
 +buf[2] = 0x40;

medium type code has been obsoleted since at least 1999. Looking back at
even older docs, 0x70 is 'door closed, no disc present'. 0x40 is a
reserved value though, I would not suggest using that. Given that
freebsd breaks, my suggest change would be the below - keep the 0x70 for
when no disc is really inserted, but don't set anything if there is.

diff --git a/hw/ide.c b/hw/ide.c
index 5f76c27..52d4c78 100644
--- a/hw/ide.c
+++ b/hw/ide.c
@@ -1344,7 +1344,10 @@ static void ide_atapi_cmd(IDEState *s)
 break;
 case 0x2a:
 cpu_to_ube16(buf[0], 28 + 6);
-buf[2] = 0x70;
+  if (!bdrv_is_inserted(s-bs))
+  buf[2] = 0x70;
+  else
+  buf[2] = 0;
 buf[3] = 0;
 buf[4] = 0;
 buf[5] = 0;


 Well that (0) doesn't work.  The relevant FreeBSD header,

http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/ata/atapi-cd.h?rev=1.46.2.1;content-type=text%2Fx-cvsweb-markup
, defines the following:

[...]
/* CDROM Capabilities and Mechanical Status Page */
struct cappage {
/* mode page data header */
u_int16_t   data_length;
u_int8_tmedium_type;
#define MST_TYPE_MASK_LOW   0x0f
#define MST_FMT_NONE0x00
#define MST_DATA_1200x01
#define MST_AUDIO_120   0x02
#define MST_COMB_1200x03
#define MST_PHOTO_120   0x04
#define MST_DATA_80 0x05
#define MST_AUDIO_800x06
#define MST_COMB_80 0x07
#define MST_PHOTO_800x08

#define MST_TYPE_MASK_HIGH  0x70
#define MST_CDROM   0x00
#define MST_CDR 0x10
#define MST_CDRW0x20
#define MST_DVD 0x40

#define MST_NO_DISC 0x70
#define MST_DOOR_OPEN   0x71
#define MST_FMT_ERROR   0x72

u_int8_tdev_spec;
u_int16_t   unused;
u_int16_t   blk_desc_len;

/* capabilities page */
u_int8_tpage_code;
#define ATAPI_CDROM_CAP_PAGE0x2a

u_int8_tparam_len;

u_int16_t   media;
#define MST_READ_CDR0x0001
#define MST_READ_CDRW   0x0002
#define MST_READ_PACKET 0x0004
#define MST_READ_DVDROM 0x0008
#define MST_READ_DVDR   0x0010
#define MST_READ_DVDRAM 0x0020
#define MST_WRITE_CDR   0x0100
#define MST_WRITE_CDRW  0x0200
#define MST_WRITE_TEST  0x0400
#define MST_WRITE_DVDR  0x1000
#define MST_WRITE_DVDRAM0x2000

u_int16_t   capabilities;
#define MST_AUDIO_PLAY  0x0001
#define MST_COMPOSITE   0x0002
#define MST_AUDIO_P10x0004
#define MST_AUDIO_P20x0008
#define MST_MODE2_f10x0010
#define MST_MODE2_f20x0020
#define MST_MULTISESSION0x0040
#define MST_BURNPROOF   0x0080
#define MST_READ_CDDA   0x0100
#define MST_CDDA_STREAM 0x0200
#define MST_COMBINED_RW 0x0400
#define MST_CORRECTED_RW0x0800
#define MST_SUPPORT_C2  0x1000
#define MST_ISRC0x2000
#define MST_UPC 0x4000

u_int8_tmechanism;
#define MST_LOCKABLE0x01
#define MST_LOCKED  0x02
#define MST_PREVENT 0x04
#define MST_EJECT   0x08
#define MST_MECH_MASK   0xe0
#define MST_MECH_CADDY  0x00
#define MST_MECH_TRAY   0x20
#define MST_MECH_POPUP  0x40
#define MST_MECH_CHANGER0x80
#define MST_MECH_CARTRIDGE  0xa0

uint8_t audio;
#define MST_SEP_VOL 0x01
#define MST_SEP_MUTE0x02

u_int16_t   max_read_speed; /* max raw data rate in bytes/1000 */
u_int16_t   max_vol_levels; 

Re: [Qemu-devel] cdrom disc type - is this patch correct? (unbreaks recent FreeBSD guest's -cdrom access)

2007-11-14 Thread Jens Axboe
On Tue, Nov 13 2007, Juergen Lock wrote:
 Hi!
 
  Yesterday I learned that FreeBSD 7.0-BETA2 guests will no longer
 read from the emulated cd drive, apparently because of this commit:
   
 http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/ata/atapi-cd.c.diff?r1=1.193;r2=1.193.2.1
 The following patch file added to the qemu-devel port fixes the issue
 for me, is it also correct?   (making the guest see a dvd in the drive
 when it is inserted, previously it saw the drive as empty.)
 
  The second hunk is already in qemu cvs so remove it if you want to
 test on that.  ISO used for testing:
   
 ftp://ftp.freebsd.org:/pub/FreeBSD/ISO-IMAGES-i386/7.0/7.0-BETA2-i386-disc1.iso
 (test by either selecting fixit-cdrom or by trying to install, just
 booting it will always work because that goes thru the bios.)
 
 Index: qemu/hw/ide.c
 @@ -1339,6 +1341,8 @@
  case 0x2a:
  cpu_to_ube16(buf[0], 28 + 6);
  buf[2] = 0x70;
 +if (bdrv_is_inserted(s-bs))
 +buf[2] = 0x40;

medium type code has been obsoleted since at least 1999. Looking back at
even older docs, 0x70 is 'door closed, no disc present'. 0x40 is a
reserved value though, I would not suggest using that. Given that
freebsd breaks, my suggest change would be the below - keep the 0x70 for
when no disc is really inserted, but don't set anything if there is.

diff --git a/hw/ide.c b/hw/ide.c
index 5f76c27..52d4c78 100644
--- a/hw/ide.c
+++ b/hw/ide.c
@@ -1344,7 +1344,10 @@ static void ide_atapi_cmd(IDEState *s)
 break;
 case 0x2a:
 cpu_to_ube16(buf[0], 28 + 6);
-buf[2] = 0x70;
+   if (!bdrv_is_inserted(s-bs))
+   buf[2] = 0x70;
+   else
+   buf[2] = 0;
 buf[3] = 0;
 buf[4] = 0;
 buf[5] = 0;

-- 
Jens Axboe





[Qemu-devel] cdrom disc type - is this patch correct? (unbreaks recent FreeBSD guest's -cdrom access)

2007-11-13 Thread Juergen Lock
Hi!

 Yesterday I learned that FreeBSD 7.0-BETA2 guests will no longer
read from the emulated cd drive, apparently because of this commit:

http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/ata/atapi-cd.c.diff?r1=1.193;r2=1.193.2.1
The following patch file added to the qemu-devel port fixes the issue
for me, is it also correct?   (making the guest see a dvd in the drive
when it is inserted, previously it saw the drive as empty.)

 The second hunk is already in qemu cvs so remove it if you want to
test on that.  ISO used for testing:

ftp://ftp.freebsd.org:/pub/FreeBSD/ISO-IMAGES-i386/7.0/7.0-BETA2-i386-disc1.iso
(test by either selecting fixit-cdrom or by trying to install, just
booting it will always work because that goes thru the bios.)

Index: qemu/hw/ide.c
@@ -1339,6 +1341,8 @@
 case 0x2a:
 cpu_to_ube16(buf[0], 28 + 6);
 buf[2] = 0x70;
+if (bdrv_is_inserted(s-bs))
+buf[2] = 0x40;
 buf[3] = 0;
 buf[4] = 0;
 buf[5] = 0;
@@ -1347,7 +1351,7 @@
 
 buf[8] = 0x2a;
 buf[9] = 0x12;
-buf[10] = 0x00;
+buf[10] = 0x08;
 buf[11] = 0x00;
 
 buf[12] = 0x70;

 Thanx,
Juergen