From: chaac Date: Sat, 29 Jul 2006 10:11:01 +0000 (+0000) Subject: 2006-07-29 Vesa Jaaskelainen X-Git-Tag: 1.98~1939 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5915059b61e8318265bb10fb44634263c3b92192;p=thirdparty%2Fgrub.git 2006-07-29 Vesa Jaaskelainen * disk/i386/pc/biosdisk.c (struct grub_biosdisk_drp): Moved to ... (struct grub_biosdisk_dap): Likewise. * include/grub/i386/pc/biosdisk.h: ... to here. Also corrected linkage settings for all functions. --- diff --git a/ChangeLog b/ChangeLog index c5a2c3493..54c9cff5f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-07-29 Vesa Jaaskelainen + + * disk/i386/pc/biosdisk.c (struct grub_biosdisk_drp): Moved to ... + (struct grub_biosdisk_dap): Likewise. + + * include/grub/i386/pc/biosdisk.h: ... to here. Also corrected + linkage settings for all functions. + 2006-07-12 Marco Gerards * configure.ac (--enable-mm-debug): Fix typo. diff --git a/disk/i386/pc/biosdisk.c b/disk/i386/pc/biosdisk.c index 3382ab445..3b7ff3914 100644 --- a/disk/i386/pc/biosdisk.c +++ b/disk/i386/pc/biosdisk.c @@ -26,46 +26,6 @@ #include #include -/* Drive Parameters. */ -struct grub_biosdisk_drp -{ - grub_uint16_t size; - grub_uint16_t flags; - grub_uint32_t cylinders; - grub_uint32_t heads; - grub_uint32_t sectors; - grub_uint64_t total_sectors; - grub_uint16_t bytes_per_sector; - /* ver 2.0 or higher */ - grub_uint32_t EDD_configuration_parameters; - /* ver 3.0 or higher */ - grub_uint16_t signature_dpi; - grub_uint8_t length_dpi; - grub_uint8_t reserved[3]; - grub_uint8_t name_of_host_bus[4]; - grub_uint8_t name_of_interface_type[8]; - grub_uint8_t interface_path[8]; - grub_uint8_t device_path[8]; - grub_uint8_t reserved2; - grub_uint8_t checksum; - - /* XXX: This is necessary, because the BIOS of Thinkpad X20 - writes a garbage to the tail of drive parameters, - regardless of a size specified in a caller. */ - grub_uint8_t dummy[16]; -} __attribute__ ((packed)); - -/* Disk Address Packet. */ -struct grub_biosdisk_dap -{ - grub_uint8_t length; - grub_uint8_t reserved; - grub_uint16_t blocks; - grub_uint32_t buffer; - grub_uint64_t block; -} __attribute__ ((packed)); - - static int grub_biosdisk_get_drive (const char *name) { diff --git a/include/grub/i386/pc/biosdisk.h b/include/grub/i386/pc/biosdisk.h index d6a5ee8e2..302ec82fe 100644 --- a/include/grub/i386/pc/biosdisk.h +++ b/include/grub/i386/pc/biosdisk.h @@ -20,6 +20,9 @@ #ifndef GRUB_BIOSDISK_MACHINE_HEADER #define GRUB_BIOSDISK_MACHINE_HEADER 1 +#include +#include + #define GRUB_BIOSDISK_FLAG_LBA 1 struct grub_biosdisk_data @@ -31,16 +34,64 @@ struct grub_biosdisk_data unsigned long flags; }; -int grub_biosdisk_rw_int13_extensions (int ah, int drive, void *dap); -int grub_biosdisk_rw_standard (int ah, int drive, int coff, int hoff, +/* Drive Parameters. */ +struct grub_biosdisk_drp +{ + grub_uint16_t size; + grub_uint16_t flags; + grub_uint32_t cylinders; + grub_uint32_t heads; + grub_uint32_t sectors; + grub_uint64_t total_sectors; + grub_uint16_t bytes_per_sector; + /* ver 2.0 or higher */ + + union + { + grub_uint32_t EDD_configuration_parameters; + + /* Pointer to the Device Parameter Table Extension (ver 3.0+). */ + grub_uint32_t dpte_pointer; + }; + + /* ver 3.0 or higher */ + grub_uint16_t signature_dpi; + grub_uint8_t length_dpi; + grub_uint8_t reserved[3]; + grub_uint8_t name_of_host_bus[4]; + grub_uint8_t name_of_interface_type[8]; + grub_uint8_t interface_path[8]; + grub_uint8_t device_path[8]; + grub_uint8_t reserved2; + grub_uint8_t checksum; + + /* XXX: This is necessary, because the BIOS of Thinkpad X20 + writes a garbage to the tail of drive parameters, + regardless of a size specified in a caller. */ + grub_uint8_t dummy[16]; +} __attribute__ ((packed)); + +/* Disk Address Packet. */ +struct grub_biosdisk_dap +{ + grub_uint8_t length; + grub_uint8_t reserved; + grub_uint16_t blocks; + grub_uint32_t buffer; + grub_uint64_t block; +} __attribute__ ((packed)); + +int EXPORT_FUNC(grub_biosdisk_rw_int13_extensions) (int ah, int drive, void *dap); +int EXPORT_FUNC(grub_biosdisk_rw_standard) (int ah, int drive, int coff, int hoff, int soff, int nsec, int segment); -int grub_biosdisk_check_int13_extensions (int drive); -int grub_biosdisk_get_diskinfo_int13_extensions (int drive, void *drp); -int grub_biosdisk_get_diskinfo_standard (int drive, +int EXPORT_FUNC(grub_biosdisk_check_int13_extensions) (int drive); +int EXPORT_FUNC(grub_biosdisk_get_diskinfo_int13_extensions) (int drive, + void *drp); +int EXPORT_FUNC(grub_biosdisk_get_diskinfo_standard) (int drive, unsigned long *cylinders, unsigned long *heads, unsigned long *sectors); -int grub_biosdisk_get_num_floppies (void); +int EXPORT_FUNC(grub_biosdisk_get_num_floppies) (void); void grub_biosdisk_init (void); void grub_biosdisk_fini (void);