On Sun, Mar 9, 2008 at 11:33 PM, Bean <[EMAIL PROTECTED]> wrote: > On Fri, Mar 7, 2008 at 11:37 PM, Vesa Jääskeläinen <[EMAIL PROTECTED]> wrote: > > > > Bean wrote: > > > Hi, > > > > > > This patch use int 13 func 4B01 to detect cdrom. It also change the > > > name of the cd device to (hdN), where N is the bios drive number. > > > > Hi Bean, > > > > Have you tried to use EDD's functions to query for type of device? > > (references are to EDD3 spec) > > > > 8.24 Get Device Parameters (FN 48h) > > 26 DWord Pointer to the Device Parameter Table Extension (DPTE) > > > > 8.24.3 Device Parameter Table Extension (DPTE) > > 10-11 Word BIOS selected hardware specific option flags > > > > Bits 5 and 6; Removable device, ATAPI device. > > > > This FN 48h can also be used to filter out PCI cards from ATA driver in > > case there is BIOS support for the device already. So use BIOS if there > > is BIOS handler for it, otherwise fall back to ATA driver. > > > > I would prefer that CD's would be counted like (cd0) for first CD-ROM > > device, (cd1) for second CD-ROM device, ... and so on. I think it is OK > > to first allocate BIOS devices for CD's and after that use ATA driver > > for rest of them. Ata driver can of course be accessed with ata name too. > > Hi, > > after some consideration, i think the best way to detect cdrom is to > check the number of bytes per sector. The handling of cdrom assume > sector size of 4096, cdrom that has other block size would not work. > On the other hand, the device don't even needs to be cdrom, as long as > it has 2048 sector size, the current handling works. Therefore, > checking sector size should be sufficient. > > As for the device name, there are some drawbacks by using (cdN), in > init.c, we need to get the root device from bios drive number. > However, as Christian Franke discovers, the drive number can be: > > 0x82 (old Toshiba Laptop with unknown BIOS) > 0x9f (PC with Phoenix-Award BIOS, VMware) > 0xe0 (VirtualBox) > 0xef (PC with AMI BIOS, VirtualPC) > > It' quite tricky to determine whether a drive is cdrom or harddisk. > > And in the multiboot loader, we need to do the oppisite, map the root > device to bios drive number. As names like (cd0) doesn't suggests the > number at all, we need to ask biosdisk for the number. Therefore, > multiboot loader will be depended on biosdisk, which is not a good > idea.
After some testing, i think the new version has some compatible issue, i remember Christian Franke reports that some bios doesn't support int 42 for cdrom, so grub_biosdisk_check_int13_extensions will fail. Would someone check if func 4b01 (the first patch cd.diff) works in such situation ? -- Bean _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel