summaryrefslogtreecommitdiff
path: root/core/fs
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2010-07-16 16:33:39 -0700
committerH. Peter Anvin <hpa@linux.intel.com>2010-07-16 16:33:39 -0700
commit174d92a09a250c64451d8340219a89593172b056 (patch)
tree9703e5fe3163fadd14b727abd15ca727fa3c78ec /core/fs
parentbd23fe1f1d376284bf02556d84e6d6fa8111fd00 (diff)
downloadsyslinux-174d92a09a250c64451d8340219a89593172b056.tar.gz
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@linux.intel.com>
Diffstat (limited to 'core/fs')
-rw-r--r--core/fs/diskio.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/core/fs/diskio.c b/core/fs/diskio.c
index 51f2f39d..55a9df4d 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)