[syslinux:master] diskio: expand most fields; cache the number of total tracks
syslinux-bot for H. Peter Anvin
hpa at linux.intel.com
Fri Jul 16 16:36:02 PDT 2010
Commit-ID: 174d92a09a250c64451d8340219a89593172b056
Gitweb: http://syslinux.zytor.com/commit/174d92a09a250c64451d8340219a89593172b056
Author: H. Peter Anvin <hpa at linux.intel.com>
AuthorDate: Fri, 16 Jul 2010 16:33:39 -0700
Committer: H. Peter Anvin <hpa at linux.intel.com>
CommitDate: Fri, 16 Jul 2010 16:33:39 -0700
diskio: expand most fields; cache the number of total tracks
Expand most fields in struct disk to 32 bits -- it makes the code
smaller in general, and struct disk is not a common data element.
Add a field for the number of tracks (number of heads*sectors).
Signed-off-by: H. Peter Anvin <hpa at linux.intel.com>
---
core/fs/diskio.c | 3 ++-
core/include/disk.h | 15 +++++++--------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/core/fs/diskio.c b/core/fs/diskio.c
index 51f2f39..55a9df4 100644
--- a/core/fs/diskio.c
+++ b/core/fs/diskio.c
@@ -11,7 +11,7 @@
static inline sector_t chs_max(const struct disk *disk)
{
- return (disk->h * disk->s) << 10;
+ return disk->t << 10;
}
static int chs_rdwr_sectors(struct disk *disk, void *buf,
@@ -393,6 +393,7 @@ struct disk *disk_init(uint8_t devno, bool cdrom, sector_t part_start,
disk.sector_size = sector_size;
disk.sector_shift = ilog2(sector_size);
disk.part_start = part_start;
+ disk.t = disk.h * disk.s;
disk.rdwr_sectors = ebios ? edd_rdwr_sectors : chs_rdwr_sectors;
if (!MaxTransfer || MaxTransfer > hard_max_transfer)
diff --git a/core/include/disk.h b/core/include/disk.h
index df0476a..f433fa9 100644
--- a/core/include/disk.h
+++ b/core/include/disk.h
@@ -13,17 +13,16 @@ typedef uint64_t block_t;
* contains the I/O function.
*/
struct disk {
- uint8_t disk_number; /* in BIOS style */
- uint8_t type; /* CHS or EDD */
- uint16_t sector_size; /* gener512B or 2048B */
- uint8_t sector_shift;
+ unsigned int disk_number; /* in BIOS style */
+ unsigned int type; /* CHS or EDD */
+ unsigned int sector_size; /* gener512B or 2048B */
+ unsigned int sector_shift;
- uint8_t h, s; /* CHS geometry */
- uint8_t pad;
+ unsigned int h, s; /* CHS geometry */
+ unsigned int t; /* h*s */
+ uint32_t maxtransfer; /* Max sectors per transfer */
sector_t part_start; /* the start address of this partition(in sectors) */
-
- uint32_t maxtransfer; /* Max sectors per transfer */
int (*rdwr_sectors)(struct disk *, void *, sector_t, size_t, bool);
};
More information about the Syslinux-commits
mailing list