All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch] 64 bit disk address support (= 8192EiB disks)
@ 2005-10-21 13:17 Timothy Baldwin
  2005-10-21 22:18 ` Marco Gerards
  0 siblings, 1 reply; 12+ messages in thread
From: Timothy Baldwin @ 2005-10-21 13:17 UTC (permalink / raw)
  To: grub-devel

[-- Attachment #1: Type: text/plain, Size: 30748 bytes --]


Only 16EiB on RISC OS, openfirmware and grub-emu. 

The Linux block device code in util/biosdisk.c still needs fixing or removing. 
I am working on a rewrite of the i386 boot sector code which supports 64bit 
disk addresses and understands partition tables (PC and GPT) and some 
filesystems (maybe only FAT).

RISC OS changes are at:
http://www.majoroak.f2s.com/tim/grub/patches/grub2-patch15.diff.gz

Other changes below and at:
http://www.majoroak.f2s.com/tim/grub/patches/grub2-patch14.diff.gz


2005-10-20  Timothy Baldwin  <T.E.Baldwin99@members.leeds.ac.uk>

        Use 64bit disk addresses.

	* disk/i386/pc/biosdisk.c: Include limits.h.
	(grub_biosdisk_rw): Use grub_lba_t for sector parameter.
	Truncate sector to 32 bits for CHS calculation.
	(grub_biosdisk_read): Use grub_lba_t for sector parameter.
	Avoid 64 bit division calculating len to 100 if
	sector >= 0x100000000.
	(grub_biosdisk_write): Likewise.

	* disk/ieee1275/ofdisk.c (grub_ofdisk_read): Use
	grub_lba_t for disk addresses.
	(grub_ofdisk_write): Likewise.

	* disk/loopback.c (grub_loopback_read): Likewise.
	(grub_loopback_write): Likewise.

	* include/grub/partition.h (struct grub_partition): Likewise.
	(grub_partition_get_start): Likewise.
	(grub_partition_get_len): Likewise.

	* include/grub/disk.h (struct grub_disk_dev): Likewise.
	(struct grub_disk): Likewise.
	(grub_disk_read): Likewise.
	(grub_disk_write): Likewise.

	* include/grub/file.h (struct grub_file): Likewise.

	* kern/disk.c (struct grub_disk_cache): Likewise.
	(grub_disk_cache_invalidate): Likewise.
	(grub_disk_cache_fetch): Likewise.
	(grub_disk_cache_unlock): Likewise.
	(grub_disk_cache_store): Likewise.
	(grub_disk_check_range): Likewise.
	(grub_disk_read): Likewise.
	(grub_disk_write): Likewise.

	* util/i386/pc/biosdisk.c (open_device): Likewise.
	(grub_util_biosdisk_read): Likewise.
	(grub_util_biosdisk_write): Likewise.

	* util/i386/pc/grub-setup.c (save_first_sector): Use
	grub_lba_t for sector parameter.  Error if disk address
	above or equal to 0x100000000.
	(save_blocklists): Likewise, and cast disk addresses
	to unsigned for display.

	* fs/affs.c (grub_affs_read_file): Use grub_lba_t
	for disk address parameter of hook function.
	* fs/ext2.c (grub_ext2_read_file): Likewise.
	* fs/fat.c (grub_fat_read_file): Likewise.
	* fs/fshelp.c (grub_fshelp_read_file): Likewise.
	* fs/hfs.c (grub_hfs_read_file): Likewise.
	* fs/jfs.c (grub_jfs_read_file): Likewise.
	* fs/minux.c (grub_minux_read_file): Likewise.
	* fs/sfs.c (grub_sfs_read_file): Likewise.
	* fs/ufs.c (grub_ufs_read_file): Likewise.
	* fs/xfs.c (grub_xfs_read_file): Likewise.
	* include/grub/fshelp.h (grub_fshelp_read_file): Likewise.

	* partmap/amiga.c (amiga_partition_map_iterate): Use 64 bit
	arithmetic to calculate disk addresses.
	* partmap/sun.c (sun_partition_map_iterate): Likewise.
	* partmap/acorn.c (acorn_partition_map_iterate): Likewise.
	(acorn_partition_map_probe): Likewise.

	* partmap/pc.c (pc_partition_map_iterate): Cast disk addresses
	to unsigned for display.

	* include/grub/types.h (grub_lba_t): New typedef.

diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/disk/i386/pc/biosdisk.c grub2-arm/disk/i386/pc/biosdisk.c
--- grub2-submitted/disk/i386/pc/biosdisk.c	2005-03-02 19:20:35.000000000 +0000
+++ grub2-arm/disk/i386/pc/biosdisk.c	2005-10-20 22:21:20.000000000 +0100
@@ -25,6 +25,7 @@
 #include <grub/misc.h>
 #include <grub/err.h>
 #include <grub/term.h>
+#include <limits.h>
 
 /* Drive Parameters.  */
 struct grub_biosdisk_drp
@@ -162,9 +163,8 @@ grub_biosdisk_open (const char *name, gr
 	    {
 	      data->flags = GRUB_BIOSDISK_FLAG_LBA;
 
-	      /* FIXME: 2TB limit.  */
 	      if (drp->total_sectors)
-		total_sectors = drp->total_sectors & ~0L;
+		total_sectors = drp->total_sectors;
 	      else
                 /* Some buggy BIOSes doesn't return the total sectors
                    correctly but returns zero. So if it is zero, compute
@@ -204,7 +204,7 @@ grub_biosdisk_close (grub_disk_t disk)
 
 static grub_err_t
 grub_biosdisk_rw (int cmd, grub_disk_t disk,
-		  unsigned long sector, unsigned long size,
+		  grub_lba_t sector, unsigned long size,
 		  unsigned segment)
 {
   struct grub_biosdisk_data *data = disk->data;
@@ -234,13 +234,14 @@ grub_biosdisk_rw (int cmd, grub_disk_t d
     {
       unsigned coff, hoff, soff;
       unsigned head;
+      unsigned sector32 = sector;
       
-      soff = sector % data->sectors + 1;
-      head = sector / data->sectors;
+      soff = sector32 % data->sectors + 1;
+      head = sector32 / data->sectors;
       hoff = head % data->heads;
       coff = head / data->heads;
 
-      if (coff >= data->cylinders)
+      if (sector > UINT_MAX || coff >= data->cylinders)
 	return grub_error (GRUB_ERR_OUT_OF_RANGE, "out of disk");
 
       if (grub_biosdisk_rw_standard (cmd + 0x02, data->drive,
@@ -260,7 +261,7 @@ grub_biosdisk_rw (int cmd, grub_disk_t d
 }
 
 static grub_err_t
-grub_biosdisk_read (grub_disk_t disk, unsigned long sector,
+grub_biosdisk_read (grub_disk_t disk, grub_lba_t sector,
 		    unsigned long size, char *buf)
 {
   struct grub_biosdisk_data *data = disk->data;
@@ -269,7 +270,11 @@ grub_biosdisk_read (grub_disk_t disk, un
     {
       unsigned long len;
 
-      len = data->sectors - (sector % data->sectors);
+      if (sector > UINT_MAX)
+	len = 100;
+      else
+	len = data->sectors - ((grub_uint32_t)sector % data->sectors);
+
       if (len > size)
 	len = size;
 
@@ -288,7 +293,7 @@ grub_biosdisk_read (grub_disk_t disk, un
 }
 
 static grub_err_t
-grub_biosdisk_write (grub_disk_t disk, unsigned long sector,
+grub_biosdisk_write (grub_disk_t disk, grub_lba_t sector,
 		     unsigned long size, const char *buf)
 {
   struct grub_biosdisk_data *data = disk->data;
@@ -297,7 +302,11 @@ grub_biosdisk_write (grub_disk_t disk, u
     {
       unsigned long len;
 
-      len = data->sectors - (sector % data->sectors);
+      if (sector > UINT_MAX)
+	len = 100;
+      else
+	len = data->sectors - ((grub_uint32_t)sector % data->sectors);
+
       if (len > size)
 	len = size;
 
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/disk/ieee1275/ofdisk.c grub2-arm/disk/ieee1275/ofdisk.c
--- grub2-submitted/disk/ieee1275/ofdisk.c	2005-08-22 17:58:16.000000000 +0100
+++ grub2-arm/disk/ieee1275/ofdisk.c	2005-10-20 22:21:20.000000000 +0100
@@ -122,7 +122,7 @@ grub_ofdisk_close (grub_disk_t disk)
 }
 
 static grub_err_t
-grub_ofdisk_read (grub_disk_t disk, unsigned long sector,
+grub_ofdisk_read (grub_disk_t disk, grub_lba_t sector,
 		  unsigned long size, char *buf)
 {
   grub_ssize_t status, actual;
@@ -149,7 +149,7 @@ grub_ofdisk_read (grub_disk_t disk, unsi
 
 static grub_err_t
 grub_ofdisk_write (grub_disk_t disk __attribute ((unused)),
-		   unsigned long sector __attribute ((unused)),
+		   grub_lba_t sector __attribute ((unused)),
 		   unsigned long size __attribute ((unused)),
 		   const char *buf __attribute ((unused)))
 {
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/disk/loopback.c grub2-arm/disk/loopback.c
--- grub2-submitted/disk/loopback.c	2005-07-17 21:12:03.000000000 +0100
+++ grub2-arm/disk/loopback.c	2005-10-20 22:21:20.000000000 +0100
@@ -193,7 +193,7 @@ grub_loopback_close (grub_disk_t disk)
 }
 
 static grub_err_t
-grub_loopback_read (grub_disk_t disk, unsigned long sector,
+grub_loopback_read (grub_disk_t disk, grub_lba_t sector,
 		    unsigned long size, char *buf)
 {
   grub_file_t file = (grub_file_t) disk->data;
@@ -220,7 +220,7 @@ grub_loopback_read (grub_disk_t disk, un
 
 static grub_err_t
 grub_loopback_write (grub_disk_t disk __attribute ((unused)),
-		   unsigned long sector __attribute ((unused)),
+		   grub_lba_t sector __attribute ((unused)),
 		   unsigned long size __attribute ((unused)),
 		   const char *buf __attribute ((unused)))
 {
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/fs/affs.c grub2-arm/fs/affs.c
--- grub2-submitted/fs/affs.c	2005-10-07 20:25:46.000000000 +0100
+++ grub2-arm/fs/affs.c	2005-10-20 22:21:20.000000000 +0100
@@ -150,7 +150,7 @@ grub_affs_read_block (grub_fshelp_node_t
    POS.  Return the amount of read bytes in READ.  */
 static grub_ssize_t
 grub_affs_read_file (grub_fshelp_node_t node,
-		     void (*read_hook) (unsigned long sector,
+		     void (*read_hook) (grub_lba_t sector,
 					unsigned offset, unsigned length),
 		     int pos, unsigned int len, char *buf)
 {
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/fs/ext2.c grub2-arm/fs/ext2.c
--- grub2-submitted/fs/ext2.c	2005-07-20 19:38:10.000000000 +0100
+++ grub2-arm/fs/ext2.c	2005-10-20 22:21:20.000000000 +0100
@@ -252,7 +252,7 @@ grub_ext2_read_block (grub_fshelp_node_t
    POS.  Return the amount of read bytes in READ.  */
 static grub_ssize_t
 grub_ext2_read_file (grub_fshelp_node_t node,
-		     void (*read_hook) (unsigned long sector,
+		     void (*read_hook) (grub_lba_t sector,
 					unsigned offset, unsigned length),
 		     int pos, unsigned int len, char *buf)
 {
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/fs/fat.c grub2-arm/fs/fat.c
--- grub2-submitted/fs/fat.c	2005-07-31 17:07:28.000000000 +0100
+++ grub2-arm/fs/fat.c	2005-10-20 22:21:20.000000000 +0100
@@ -310,7 +310,7 @@ grub_fat_mount (grub_disk_t disk)
 
 static grub_ssize_t
 grub_fat_read_data (grub_disk_t disk, struct grub_fat_data *data,
-		    void (*read_hook) (unsigned long sector,
+		    void (*read_hook) (grub_lba_t sector,
 				       unsigned offset, unsigned length),
 		    grub_ssize_t offset, grub_ssize_t len, char *buf)
 {
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/fs/fshelp.c grub2-arm/fs/fshelp.c
--- grub2-submitted/fs/fshelp.c	2005-01-20 17:25:39.000000000 +0000
+++ grub2-arm/fs/fshelp.c	2005-10-20 22:21:20.000000000 +0100
@@ -222,7 +222,7 @@ grub_fshelp_find_file (const char *path,
    blocks have a size of LOG2BLOCKSIZE (in log2).  */
 grub_ssize_t
 grub_fshelp_read_file (grub_disk_t disk, grub_fshelp_node_t node,
-		       void (*read_hook) (unsigned long sector,
+		       void (*read_hook) (grub_lba_t sector,
 					  unsigned offset, unsigned length),
 		       int pos, unsigned int len, char *buf,
 		       int (*get_block) (grub_fshelp_node_t node, int block),
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/fs/hfs.c grub2-arm/fs/hfs.c
--- grub2-submitted/fs/hfs.c	2004-11-01 16:14:16.000000000 +0000
+++ grub2-arm/fs/hfs.c	2005-10-20 22:21:20.000000000 +0100
@@ -256,7 +256,7 @@ grub_hfs_block (struct grub_hfs_data *da
    POS.  Return the amount of read bytes in READ.  */
 static grub_ssize_t
 grub_hfs_read_file (struct grub_hfs_data *data,
-		    void (*read_hook) (unsigned long sector,
+		    void (*read_hook) (grub_lba_t sector,
 				       unsigned offset, unsigned length),
 		     int pos, unsigned int len, char *buf)
 {
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/fs/jfs.c grub2-arm/fs/jfs.c
--- grub2-submitted/fs/jfs.c	2004-11-01 16:14:16.000000000 +0000
+++ grub2-arm/fs/jfs.c	2005-10-20 22:21:20.000000000 +0100
@@ -540,7 +540,7 @@ grub_jfs_getent (struct grub_jfs_diropen
    POS.  Return the amount of read bytes in READ.  */
 static grub_ssize_t
 grub_jfs_read_file (struct grub_jfs_data *data,
-		    void (*read_hook) (unsigned long sector,
+		    void (*read_hook) (grub_lba_t sector,
 				       unsigned offset, unsigned length),
 		    int pos, unsigned int len, char *buf)
 {
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/fs/minix.c grub2-arm/fs/minix.c
--- grub2-submitted/fs/minix.c	2005-01-21 22:34:18.000000000 +0000
+++ grub2-arm/fs/minix.c	2005-10-20 22:21:20.000000000 +0100
@@ -187,7 +187,7 @@ grub_minix_get_file_block (struct grub_m
    POS.  Return the amount of read bytes in READ.  */
 static grub_ssize_t
 grub_minix_read_file (struct grub_minix_data *data,
-		      void (*read_hook) (unsigned long sector,
+		      void (*read_hook) (grub_lba_t sector,
 					 unsigned offset, unsigned length),
 		      int pos, unsigned int len, char *buf)
 {
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/fs/sfs.c grub2-arm/fs/sfs.c
--- grub2-submitted/fs/sfs.c	2005-10-11 17:42:32.000000000 +0100
+++ grub2-arm/fs/sfs.c	2005-10-20 22:21:20.000000000 +0100
@@ -259,7 +259,7 @@ grub_sfs_read_block (grub_fshelp_node_t 
    POS.  Return the amount of read bytes in READ.  */
 static grub_ssize_t
 grub_sfs_read_file (grub_fshelp_node_t node,
-		    void (*read_hook) (unsigned long sector,
+		    void (*read_hook) (grub_lba_t sector,
 				       unsigned offset, unsigned length),
 		    int pos, unsigned int len, char *buf)
 {
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/fs/ufs.c grub2-arm/fs/ufs.c
--- grub2-submitted/fs/ufs.c	2004-11-01 16:14:16.000000000 +0000
+++ grub2-arm/fs/ufs.c	2005-10-20 22:21:20.000000000 +0100
@@ -241,7 +241,7 @@ grub_ufs_get_file_block (struct grub_ufs
    POS.  Return the amount of read bytes in READ.  */
 static grub_ssize_t
 grub_ufs_read_file (struct grub_ufs_data *data,
-		    void (*read_hook) (unsigned long sector,
+		    void (*read_hook) (grub_lba_t sector,
 				       unsigned offset, unsigned length),
 		    int pos, unsigned int len, char *buf)
 {
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/fs/xfs.c grub2-arm/fs/xfs.c
--- grub2-submitted/fs/xfs.c	2005-10-15 10:20:16.000000000 +0100
+++ grub2-arm/fs/xfs.c	2005-10-20 22:21:20.000000000 +0100
@@ -237,7 +237,7 @@ grub_xfs_read_block (grub_fshelp_node_t 
    POS.  Return the amount of read bytes in READ.  */
 static grub_ssize_t
 grub_xfs_read_file (grub_fshelp_node_t node,
-		     void (*read_hook) (unsigned long sector,
+		     void (*read_hook) (grub_lba_t sector,
 					unsigned offset, unsigned length),
 		     int pos, unsigned int len, char *buf)
 {
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/include/grub/disk.h grub2-arm/include/grub/disk.h
--- grub2-submitted/include/grub/disk.h	2005-10-20 14:45:22.000000000 +0100
+++ grub2-arm/include/grub/disk.h	2005-10-20 22:21:20.000000000 +0100
@@ -57,11 +57,11 @@ struct grub_disk_dev
   void (*close) (struct grub_disk *disk);
 
   /* Read SIZE sectors from the sector SECTOR of the disk DISK into BUF.  */
-  grub_err_t (*read) (struct grub_disk *disk, unsigned long sector,
+  grub_err_t (*read) (struct grub_disk *disk, grub_lba_t sector,
 		      unsigned long size, char *buf);
 
   /* Write SIZE sectors from BUF into the sector SECTOR of the disk DISK.  */
-  grub_err_t (*write) (struct grub_disk *disk, unsigned long sector,
+  grub_err_t (*write) (struct grub_disk *disk, grub_lba_t sector,
 		       unsigned long size, const char *buf);
 
   /* The next disk device.  */
@@ -81,7 +81,7 @@ struct grub_disk
   grub_disk_dev_t dev;
 
   /* The total number of sectors.  */
-  unsigned long total_sectors;
+  grub_lba_t total_sectors;
 
   /* If partitions can be stored.  */
   int has_partitions;
@@ -89,11 +89,11 @@ struct grub_disk
   /* The id used by the disk cache manager.  */
   unsigned long id;
   
-  /* The partition information. This is machine-specific.  */
+  /* The partition information. This is partition scheme specific.  */
   struct grub_partition *partition;
 
   /* Called when a sector was read.  */
-  void (*read_hook) (unsigned long sector, unsigned offset, unsigned length);
+  void (*read_hook) (grub_lba_t sector, unsigned offset, unsigned length);
 
   /* Device-specific data.  */
   void *data;
@@ -121,12 +121,12 @@ int EXPORT_FUNC(grub_disk_dev_iterate) (
 grub_disk_t EXPORT_FUNC(grub_disk_open) (const char *name);
 void EXPORT_FUNC(grub_disk_close) (grub_disk_t disk);
 grub_err_t EXPORT_FUNC(grub_disk_read) (grub_disk_t disk,
-					unsigned long sector,
+					grub_lba_t sector,
 					unsigned long offset,
 					unsigned long size,
 					char *buf);
 grub_err_t EXPORT_FUNC(grub_disk_write) (grub_disk_t disk,
-					 unsigned long sector,
+					 grub_lba_t sector,
 					 unsigned long offset,
 					 unsigned long size,
 					 const char *buf);
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/include/grub/file.h grub2-arm/include/grub/file.h
--- grub2-submitted/include/grub/file.h	2004-04-04 14:46:00.000000000 +0100
+++ grub2-arm/include/grub/file.h	2005-10-20 22:21:20.000000000 +0100
@@ -44,7 +44,7 @@ struct grub_file
   void *data;
 
   /* This is called when a sector is read. Used only for a disk device.  */
-  void (*read_hook) (unsigned long sector, unsigned offset, unsigned length);
+  void (*read_hook) (grub_lba_t sector, unsigned offset, unsigned length);
 };
 typedef struct grub_file *grub_file_t;
 
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/include/grub/fshelp.h grub2-arm/include/grub/fshelp.h
--- grub2-submitted/include/grub/fshelp.h	2004-09-11 12:42:43.000000000 +0100
+++ grub2-arm/include/grub/fshelp.h	2005-10-20 22:21:20.000000000 +0100
@@ -64,7 +64,7 @@ EXPORT_FUNC(grub_fshelp_find_file) (cons
    blocks have a size of LOG2BLOCKSIZE (in log2).  */
 grub_ssize_t
 EXPORT_FUNC(grub_fshelp_read_file) (grub_disk_t disk, grub_fshelp_node_t node,
-				    void (*read_hook) (unsigned long sector,
+				    void (*read_hook) (grub_lba_t sector,
 						       unsigned offset,
 						       unsigned length),
 				    int pos, unsigned int len, char *buf,
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/include/grub/partition.h grub2-arm/include/grub/partition.h
--- grub2-submitted/include/grub/partition.h	2005-10-20 14:46:20.000000000 +0100
+++ grub2-arm/include/grub/partition.h	2005-10-20 22:21:20.000000000 +0100
@@ -52,13 +52,13 @@ typedef struct grub_partition_map *grub_
 struct grub_partition
 {
   /* The start sector.  */
-  unsigned long start;
+  grub_lba_t start;
 
   /* The length in sector units.  */
-  unsigned long len;
+  grub_lba_t len;
 
   /* The offset of the partition table.  */
-  unsigned long offset;
+  grub_lba_t offset;
 
   /* The index of this partition in the partition table.  */
   int index;
@@ -96,13 +96,13 @@ void grub_acorn_partition_map_init (void
 void grub_acorn_partition_map_fini (void);
 #endif
 \f
-static inline unsigned long
+static inline grub_lba_t
 grub_partition_get_start (const grub_partition_t p)
 {
   return p->start;
 }
 
-static inline unsigned long
+static inline grub_lba_t
 grub_partition_get_len (const grub_partition_t p)
 {
   return p->len;
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/include/grub/types.h grub2-arm/include/grub/types.h
--- grub2-submitted/include/grub/types.h	2005-10-20 14:45:38.000000000 +0100
+++ grub2-arm/include/grub/types.h	2005-10-20 22:21:20.000000000 +0100
@@ -152,4 +152,7 @@ typedef grub_int32_t	grub_ssize_t;
 # define grub_be_to_cpu64(x)	grub_swap_bytes64(x)
 #endif /* ! WORDS_BIGENDIAN */
 
+/* Data type to hold a disk pointer */
+typedef grub_uint64_t grub_lba_t;
+
 #endif /* ! GRUB_TYPES_HEADER */
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/kern/disk.c grub2-arm/kern/disk.c
--- grub2-submitted/kern/disk.c	2005-10-15 18:20:22.000000000 +0100
+++ grub2-arm/kern/disk.c	2005-10-20 22:21:20.000000000 +0100
@@ -37,7 +37,7 @@ struct grub_disk_cache
 {
   unsigned long dev_id;
   unsigned long disk_id;
-  unsigned long sector;
+  grub_lba_t sector;
   char *data;
   int lock;
 };
@@ -67,12 +67,12 @@ grub_disk_cache_get_index (unsigned long
 
 static void
 grub_disk_cache_invalidate (unsigned long dev_id, unsigned long disk_id,
-			    unsigned long sector)
+			    grub_lba_t sector)
 {
   unsigned index;
   struct grub_disk_cache *cache;
 
-  sector &= ~(GRUB_DISK_CACHE_SIZE - 1);
+  sector &= ~(grub_lba_t)(GRUB_DISK_CACHE_SIZE - 1);
   index = grub_disk_cache_get_index (dev_id, disk_id, sector);
   cache = grub_disk_cache_table + index;
 
@@ -105,7 +105,7 @@ grub_disk_cache_invalidate_all (void)
 
 static char *
 grub_disk_cache_fetch (unsigned long dev_id, unsigned long disk_id,
-		       unsigned long sector)
+		       grub_lba_t sector)
 {
   struct grub_disk_cache *cache;
   unsigned index;
@@ -132,7 +132,7 @@ grub_disk_cache_fetch (unsigned long dev
 
 static void
 grub_disk_cache_unlock (unsigned long dev_id, unsigned long disk_id,
-			unsigned long sector)
+			grub_lba_t sector)
 {
   struct grub_disk_cache *cache;
   unsigned index;
@@ -147,7 +147,7 @@ grub_disk_cache_unlock (unsigned long de
 
 static grub_err_t
 grub_disk_cache_store (unsigned long dev_id, unsigned long disk_id,
-		       unsigned long sector, const char *data)
+		       grub_lba_t sector, const char *data)
 {
   unsigned index;
   struct grub_disk_cache *cache;
@@ -306,7 +306,7 @@ grub_disk_close (grub_disk_t disk)
 }
 
 static grub_err_t
-grub_disk_check_range (grub_disk_t disk, unsigned long *sector,
+grub_disk_check_range (grub_disk_t disk, grub_lba_t *sector,
 		       unsigned long *offset, grub_ssize_t size)
 {
   *sector += *offset >> GRUB_DISK_SECTOR_BITS;
@@ -337,7 +337,7 @@ grub_disk_check_range (grub_disk_t disk,
 
 /* Read data from the disk.  */
 grub_err_t
-grub_disk_read (grub_disk_t disk, unsigned long sector,
+grub_disk_read (grub_disk_t disk, grub_lba_t sector,
 		unsigned long offset, unsigned long size, char *buf)
 {
   char *tmp_buf;
@@ -355,12 +355,12 @@ grub_disk_read (grub_disk_t disk, unsign
   while (size)
     {
       char *data;
-      unsigned long start_sector;
+      grub_lba_t start_sector;
       unsigned long len;
       unsigned long pos;
 
       /* For reading bulk data.  */
-      start_sector = sector & ~(GRUB_DISK_CACHE_SIZE - 1);
+      start_sector = sector & ~(grub_lba_t)(GRUB_DISK_CACHE_SIZE - 1);
       pos = (sector - start_sector) << GRUB_DISK_SECTOR_BITS;
       len = (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS) - pos - offset;
       if (len > size)
@@ -424,7 +424,7 @@ grub_disk_read (grub_disk_t disk, unsign
       /* Call the read hook, if any.  */
       if (disk->read_hook)
 	{
-	  unsigned long s = sector;
+	  grub_lba_t s = sector;
 	  unsigned long l = len;
 	  
 	  while (l)
@@ -457,7 +457,7 @@ grub_disk_read (grub_disk_t disk, unsign
 }
 
 grub_err_t
-grub_disk_write (grub_disk_t disk, unsigned long sector,
+grub_disk_write (grub_disk_t disk, grub_lba_t sector,
 		 unsigned long offset, unsigned long size, const char *buf)
 {
   if (grub_disk_check_range (disk, &sector, &offset, size) != GRUB_ERR_NONE)
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/partmap/acorn.c grub2-arm/partmap/acorn.c
--- grub2-submitted/partmap/acorn.c	2005-10-20 14:46:20.000000000 +0100
+++ grub2-arm/partmap/acorn.c	2005-10-20 22:21:20.000000000 +0100
@@ -113,7 +113,7 @@ acorn_partition_map_iterate (grub_disk_t
 	  && map[i].magic != LINUX_SWAP_MAGIC)
 	return GRUB_ERR_NONE;
 
-      part.start = sector + map[i].start;
+      part.start = (grub_lba_t)sector + map[i].start;
       part.len = map[i].size;
       part.offset = 6;
       part.index = i;
@@ -153,7 +153,7 @@ acorn_partition_map_probe (grub_disk_t d
   if (!p)
     return 0;
 
-  p->start = sector + map[partnum].start;
+  p->start = (grub_lba_t)sector + map[partnum].start;
   p->len = map[partnum].size;
   p->offset = 6;
   p->index = partnum;
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/partmap/amiga.c grub2-arm/partmap/amiga.c
--- grub2-submitted/partmap/amiga.c	2005-08-18 01:08:21.000000000 +0100
+++ grub2-arm/partmap/amiga.c	2005-10-20 22:21:20.000000000 +0100
@@ -121,10 +121,10 @@ amiga_partition_map_iterate (grub_disk_t
 	return grub_errno;
       
       /* Calculate the first block and the size of the partition.  */
-      part.start = (grub_be_to_cpu32 (apart.lowcyl) 
+      part.start = ((grub_lba_t)grub_be_to_cpu32 (apart.lowcyl) 
 		    * grub_be_to_cpu32 (apart.heads)
 		    * grub_be_to_cpu32 (apart.block_per_track));
-      part.len = ((grub_be_to_cpu32 (apart.highcyl)
+      part.len = ((grub_lba_t)(grub_be_to_cpu32 (apart.highcyl)
 		   - grub_be_to_cpu32 (apart.lowcyl) + 1)
 		  * grub_be_to_cpu32 (apart.heads)
 		  * grub_be_to_cpu32 (apart.block_per_track));
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/partmap/pc.c grub2-arm/partmap/pc.c
--- grub2-submitted/partmap/pc.c	2005-08-20 08:14:58.000000000 +0100
+++ grub2-arm/partmap/pc.c	2005-10-20 23:41:22.000000000 +0100
@@ -137,8 +137,9 @@ pc_partition_map_iterate (grub_disk_t di
 	  pcdata.bsd_type = -1;
 
 	  grub_dprintf ("partition",
-			"partition %d: flag 0x%x, type 0x%x, start 0x%lx, len 0x%lx\n",
-			p.index, e->flag, pcdata.dos_type, p.start, p.len);
+			"partition %d: flag 0x%x, type 0x%x, start 0x%x, len 0x%x\n",
+			p.index, e->flag, pcdata.dos_type,
+			(unsigned)p.start, (unsigned)p.len);
 
 	  /* If this partition is a normal one, call the hook.  */
 	  if (! grub_pc_partition_is_empty (e->type)
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/partmap/sun.c grub2-arm/partmap/sun.c
--- grub2-submitted/partmap/sun.c	2005-08-18 01:10:05.000000000 +0100
+++ grub2-arm/partmap/sun.c	2005-10-20 22:21:20.000000000 +0100
@@ -115,7 +115,7 @@ sun_partition_map_iterate (grub_disk_t d
 	  if (block.infos[partnum].id == 0 ||
 	      block.infos[partnum].id == GRUB_PARTMAP_SUN_WHOLE_DISK_ID)
 	    continue;
-	  p->start = grub_be_to_cpu32
+	  p->start = (grub_lba_t)grub_be_to_cpu32
 	    (block.partitions[partnum].start_cylinder)
 	    * grub_be_to_cpu16 (block.ntrks)
 	    * grub_be_to_cpu16 (block.nsect);
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/util/i386/pc/biosdisk.c grub2-arm/util/i386/pc/biosdisk.c
--- grub2-submitted/util/i386/pc/biosdisk.c	2005-08-18 00:44:32.000000000 +0100
+++ grub2-arm/util/i386/pc/biosdisk.c	2005-10-20 22:21:20.000000000 +0100
@@ -285,7 +285,7 @@ linux_find_partition (char *dev, unsigne
 #endif /* __linux__ */
 
 static int
-open_device (const grub_disk_t disk, unsigned long sector, int flags)
+open_device (const grub_disk_t disk, grub_lba_t sector, int flags)
 {
   int fd;
 
@@ -421,7 +421,7 @@ nwrite (int fd, const char *buf, size_t 
 }
 
 static grub_err_t
-grub_util_biosdisk_read (grub_disk_t disk, unsigned long sector,
+grub_util_biosdisk_read (grub_disk_t disk, grub_lba_t sector,
 			 unsigned long size, char *buf)
 {
   int fd;
@@ -458,7 +458,7 @@ grub_util_biosdisk_read (grub_disk_t dis
 }
 
 static grub_err_t
-grub_util_biosdisk_write (grub_disk_t disk, unsigned long sector,
+grub_util_biosdisk_write (grub_disk_t disk, grub_lba_t sector,
 			  unsigned long size, const char *buf)
 {
   int fd;
@@ -726,6 +726,7 @@ grub_util_biosdisk_get_grub_dev (const c
      partition, so mapping them to GRUB devices is not trivial.
      Here, get the start sector of a partition by HDIO_GETGEO, and
      compare it with each partition GRUB recognizes.  */
+  /* FIXME: 64 bit disk addresses.  */
   {
     char *name;
     grub_disk_t disk;
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x CVS grub2-submitted/util/i386/pc/grub-setup.c grub2-arm/util/i386/pc/grub-setup.c
--- grub2-submitted/util/i386/pc/grub-setup.c	2005-08-18 00:34:44.000000000 +0100
+++ grub2-arm/util/i386/pc/grub-setup.c	2005-10-21 10:09:01.000000000 +0100
@@ -101,9 +101,9 @@ setup (const char *prefix, const char *d
   FILE *fp;
   unsigned long first_start = ~0UL;
   
-  auto void save_first_sector (unsigned long sector, unsigned offset,
+  auto void save_first_sector (grub_lba_t sector, unsigned offset,
 			       unsigned length);
-  auto void save_blocklists (unsigned long sector, unsigned offset,
+  auto void save_blocklists (grub_lba_t sector, unsigned offset,
 			     unsigned length);
 
   auto int find_first_partition_start (grub_disk_t disk,
@@ -122,24 +122,31 @@ setup (const char *prefix, const char *d
       return 0;
     }
   
-  void save_first_sector (unsigned long sector, unsigned offset,
+  void save_first_sector (grub_lba_t sector, unsigned offset,
 			  unsigned length)
     {
       grub_util_info ("the fist sector is <%lu,%u,%u>",
 		      sector, offset, length);
       
+      if (sector >= 0x100000000ULL)
+	grub_util_error ("The first sector of the core file is above 2TiB");
+
       if (offset != 0 || length != GRUB_DISK_SECTOR_SIZE)
 	grub_util_error ("The first sector of the core file is not sector-aligned");
 
       first_sector = sector;
     }
 
-  void save_blocklists (unsigned long sector, unsigned offset, unsigned length)
+  void save_blocklists (grub_lba_t sector, unsigned offset, unsigned length)
     {
       struct boot_blocklist *prev = block + 1;
 
-      grub_util_info ("saving <%lu,%u,%u> with the segment 0x%x",
-		      sector, offset, length, (unsigned) current_segment);
+      if (sector >= 0x100000000ULL)
+	grub_util_error ("Part of the core file is above 2TiB");
+
+      grub_util_info ("saving <%u,%u,%u> with the segment 0x%x",
+		      (unsigned) sector, offset, length,
+		      (unsigned) current_segment);
       
       if (offset != 0 || last_length != GRUB_DISK_SECTOR_SIZE)
 	grub_util_error ("Non-sector-aligned data is found in the core file");


-- 
Member AFFS, WYLUG, SWP (UK), UAF, RESPECT, StWC
No to software patents!    Victory to the iraqi resistance!

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [patch] 64 bit disk address support (= 8192EiB disks)
  2005-10-21 13:17 [patch] 64 bit disk address support (= 8192EiB disks) Timothy Baldwin
@ 2005-10-21 22:18 ` Marco Gerards
  2005-10-21 22:24   ` Yoshinori K. Okuji
  2005-10-23 22:15   ` Timothy Baldwin
  0 siblings, 2 replies; 12+ messages in thread
From: Marco Gerards @ 2005-10-21 22:18 UTC (permalink / raw)
  To: The development of GRUB 2

Timothy Baldwin <tim.lists@majoroak.f2s.com> writes:

> Only 16EiB on RISC OS, openfirmware and grub-emu. 
>
> The Linux block device code in util/biosdisk.c still needs fixing or removing. 
> I am working on a rewrite of the i386 boot sector code which supports 64bit 
> disk addresses and understands partition tables (PC and GPT) and some 
> filesystems (maybe only FAT).

Cool.

> 	* include/grub/types.h (grub_lba_t): New typedef.

Why did you choose this name?  What about using grub_sector_t instead
as name?

I still have to look at the RISC OS patches you sent in so far.  I
hope you can still wait a bit, my own hacking already consumes all
time I have... :-/.  Sorry for this very long delay.

Thanks,
Marco




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [patch] 64 bit disk address support (= 8192EiB disks)
  2005-10-21 22:18 ` Marco Gerards
@ 2005-10-21 22:24   ` Yoshinori K. Okuji
  2005-10-21 22:29     ` Marco Gerards
  2005-10-21 23:46     ` Timothy Baldwin
  2005-10-23 22:15   ` Timothy Baldwin
  1 sibling, 2 replies; 12+ messages in thread
From: Yoshinori K. Okuji @ 2005-10-21 22:24 UTC (permalink / raw)
  To: The development of GRUB 2

On Saturday 22 October 2005 12:18 am, Marco Gerards wrote:
> > 	* include/grub/types.h (grub_lba_t): New typedef.
>
> Why did you choose this name?  What about using grub_sector_t instead
> as name?

I think it is better to define grub_off_t as grub_uint64_t, and use 
grub_off_t.

Okuji



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [patch] 64 bit disk address support (= 8192EiB disks)
  2005-10-21 22:24   ` Yoshinori K. Okuji
@ 2005-10-21 22:29     ` Marco Gerards
  2005-10-21 23:46     ` Timothy Baldwin
  1 sibling, 0 replies; 12+ messages in thread
From: Marco Gerards @ 2005-10-21 22:29 UTC (permalink / raw)
  To: The development of GRUB 2

"Yoshinori K. Okuji" <okuji@enbug.org> writes:

> On Saturday 22 October 2005 12:18 am, Marco Gerards wrote:
>> > 	* include/grub/types.h (grub_lba_t): New typedef.
>>
>> Why did you choose this name?  What about using grub_sector_t instead
>> as name?
>
> I think it is better to define grub_off_t as grub_uint64_t, and use 
> grub_off_t.

Fine for me.

--
Marco




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [patch] 64 bit disk address support (= 8192EiB disks)
  2005-10-21 22:24   ` Yoshinori K. Okuji
  2005-10-21 22:29     ` Marco Gerards
@ 2005-10-21 23:46     ` Timothy Baldwin
  2005-10-22  0:06       ` Yoshinori K. Okuji
  1 sibling, 1 reply; 12+ messages in thread
From: Timothy Baldwin @ 2005-10-21 23:46 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 1080 bytes --]

On Friday 21 Oct 2005 23:24, Yoshinori K. Okuji wrote:
> On Saturday 22 October 2005 12:18 am, Marco Gerards wrote:
> > > 	* include/grub/types.h (grub_lba_t): New typedef.
> >
> > Why did you choose this name? 

LBA as an abbreviation of logical block address is in common use. And makes it 
clear that it is a count of sectors not bytes.

> > What about using grub_sector_t instead 
> > as name?

Good. Just not as immediately obvious that it is an address, as opposed 512 
bytes of data, but may be more easier understood.

> I think it is better to define grub_off_t as grub_uint64_t, and use
> grub_off_t.

Misleading as POSIX uses off_t as a byte offset. Also grub_off_t would be 
logical type name for file offsets, which should use a separate type to aid 
changing it.

Also grub_off_t is used in kern/mm.c to count bytes of memory.

And finally I just noticed grub_lba_t (or whatever) should be defined further 
up types.h. 


-- 
Member AFFS, WYLUG, SWP (UK), UAF, RESPECT, StWC
No to software patents!    Victory to the iraqi resistance!

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [patch] 64 bit disk address support (= 8192EiB disks)
  2005-10-21 23:46     ` Timothy Baldwin
@ 2005-10-22  0:06       ` Yoshinori K. Okuji
  2005-10-22 11:53         ` Timothy Baldwin
  0 siblings, 1 reply; 12+ messages in thread
From: Yoshinori K. Okuji @ 2005-10-22  0:06 UTC (permalink / raw)
  To: The development of GRUB 2

On Saturday 22 October 2005 01:46 am, Timothy Baldwin wrote:
> > I think it is better to define grub_off_t as grub_uint64_t, and use
> > grub_off_t.
>
> Misleading as POSIX uses off_t as a byte offset. Also grub_off_t would be
> logical type name for file offsets, which should use a separate type to aid
> changing it.

I disagree. The development environment of GRUB was created to be 
intentionally similar to POSIX. For example, look at the usage of 
grub_size_t. It is rather convenient that one can guess how to program in 
GRUB based on an experience on POSIX.

> Also grub_off_t is used in kern/mm.c to count bytes of memory.

What is bad?

Okuji



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [patch] 64 bit disk address support (= 8192EiB disks)
  2005-10-22  0:06       ` Yoshinori K. Okuji
@ 2005-10-22 11:53         ` Timothy Baldwin
  2005-10-28  3:01           ` Yoshinori K. Okuji
  0 siblings, 1 reply; 12+ messages in thread
From: Timothy Baldwin @ 2005-10-22 11:53 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 977 bytes --]

On Saturday 22 Oct 2005 01:06, Yoshinori K. Okuji wrote:
> On Saturday 22 October 2005 01:46 am, Timothy Baldwin wrote:

> > Misleading as POSIX uses off_t as a byte offset. Also grub_off_t would be
> > logical type name for file offsets, which should use a separate type to
> > aid changing it.
>
> I disagree. The development environment of GRUB was created to be
> intentionally similar to POSIX. For example, look at the usage of
> grub_size_t. It is rather convenient that one can guess how to program in
> GRUB based on an experience on POSIX.

That is exactly my point. POSIX uses off_t as a byte counts into files, the 
type we are discussing the name of is used for sector counts.

> > Also grub_off_t is used in kern/mm.c to count bytes of memory.
>
> What is bad?

It should use grub_size_t for memory, in order follow POSIX.


-- 
Member AFFS, WYLUG, SWP (UK), UAF, RESPECT, StWC
No to software patents!    Victory to the iraqi resistance!

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [patch] 64 bit disk address support (= 8192EiB disks)
  2005-10-21 22:18 ` Marco Gerards
  2005-10-21 22:24   ` Yoshinori K. Okuji
@ 2005-10-23 22:15   ` Timothy Baldwin
  2005-10-24 10:26     ` Marco Gerards
  1 sibling, 1 reply; 12+ messages in thread
From: Timothy Baldwin @ 2005-10-23 22:15 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 848 bytes --]

On Friday 21 Oct 2005 23:18, Marco Gerards wrote:

> Why did you choose this name?  What about using grub_sector_t instead
> as name?

I now see Linux uses sector_t.

Revised patch using grub_sector_t and definition higher up types.h:
http://www.majoroak.f2s.com/tim/grub/patches/grub2-patch14b.diff.gz

It needs testing on PowerPC and SPARC.

> I still have to look at the RISC OS patches you sent in so far.  I
> hope you can still wait a bit, my own hacking already consumes all
> time I have... :-/.  Sorry for this very long delay.

I've merged some bug fixes into the patches they correct, and added rules for
your parser. See: http://www.majoroak.f2s.com/tim/grub/RISC_OS/

Good luck with your exams.


-- 
Member AFFS, WYLUG, SWP (UK), UAF, RESPECT, StWC
No to software patents!    Victory to the iraqi resistance!

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [patch] 64 bit disk address support (= 8192EiB disks)
  2005-10-23 22:15   ` Timothy Baldwin
@ 2005-10-24 10:26     ` Marco Gerards
  2005-10-24 19:14       ` RISC OS patches (was [patch] 64 bit disk address support (= 8192EiB disks)) Timothy Baldwin
  0 siblings, 1 reply; 12+ messages in thread
From: Marco Gerards @ 2005-10-24 10:26 UTC (permalink / raw)
  To: The development of GRUB 2

Timothy Baldwin <tim.lists@majoroak.f2s.com> writes:

>> I still have to look at the RISC OS patches you sent in so far.  I
>> hope you can still wait a bit, my own hacking already consumes all
>> time I have... :-/.  Sorry for this very long delay.
>
> I've merged some bug fixes into the patches they correct, and added rules for
> your parser. See: http://www.majoroak.f2s.com/tim/grub/RISC_OS/

I just committed this patch to CVS.  What are the rules/bug-fixes you
added?

> Good luck with your exams.

Thanks!

--
Marco




^ permalink raw reply	[flat|nested] 12+ messages in thread

* RISC OS patches (was [patch] 64 bit disk address support (= 8192EiB disks))
  2005-10-24 10:26     ` Marco Gerards
@ 2005-10-24 19:14       ` Timothy Baldwin
  0 siblings, 0 replies; 12+ messages in thread
From: Timothy Baldwin @ 2005-10-24 19:14 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 802 bytes --]

On Monday 24 Oct 2005 11:26, Marco Gerards wrote:
> Timothy Baldwin <tim.lists@majoroak.f2s.com> writes:
> >> I still have to look at the RISC OS patches you sent in so far.  I
> >> hope you can still wait a bit, my own hacking already consumes all
> >> time I have... :-/.  Sorry for this very long delay.
> >
> > I've merged some bug fixes into the patches they correct, and added rules
> > for your parser. See: http://www.majoroak.f2s.com/tim/grub/RISC_OS/
>
> I just committed this patch to CVS.  What are the rules/bug-fixes you
> added?

The bug-fixes to RISC OS code I have previously posted to this list, and the 
make rules needed by your parser on RISC OS.


-- 
Member AFFS, WYLUG, SWP (UK), UAF, RESPECT, StWC
No to software patents!    Victory to the iraqi resistance!

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [patch] 64 bit disk address support (= 8192EiB disks)
  2005-10-22 11:53         ` Timothy Baldwin
@ 2005-10-28  3:01           ` Yoshinori K. Okuji
  2005-10-29  1:15             ` Timothy Baldwin
  0 siblings, 1 reply; 12+ messages in thread
From: Yoshinori K. Okuji @ 2005-10-28  3:01 UTC (permalink / raw)
  To: The development of GRUB 2

On Saturday 22 October 2005 01:53 pm, Timothy Baldwin wrote:
> That is exactly my point. POSIX uses off_t as a byte counts into files, the
> type we are discussing the name of is used for sector counts.

OK. That makes sense.

However, I do not like grub_sector_t. For me, this is still an address or an 
offset. So it should be called something like grub_disk_addr_t or 
grub_sector_offset_t.

> > > Also grub_off_t is used in kern/mm.c to count bytes of memory.
> >
> > What is bad?
>
> It should use grub_size_t for memory, in order follow POSIX.

It's true. So we must fix it.

Okuji



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [patch] 64 bit disk address support (= 8192EiB disks)
  2005-10-28  3:01           ` Yoshinori K. Okuji
@ 2005-10-29  1:15             ` Timothy Baldwin
  0 siblings, 0 replies; 12+ messages in thread
From: Timothy Baldwin @ 2005-10-29  1:15 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 3740 bytes --]

On Friday 28 Oct 2005 04:01, Yoshinori K. Okuji wrote:
> On Saturday 22 October 2005 01:53 pm, Timothy Baldwin wrote:
> > That is exactly my point. POSIX uses off_t as a byte counts into files,
> > the type we are discussing the name of is used for sector counts.
>
> OK. That makes sense.
>
> However, I do not like grub_sector_t. For me, this is still an address or
> an offset. So it should be called something like grub_disk_addr_t or
> grub_sector_offset_t.

grub_disk_addr_t then? Revised patch at:
http://www.majoroak.f2s.com/tim/grub/patches/grub2-patch14c.diff.gz

Also fixed a dependency on my RISC OS patches.


2005-10-30  Timothy Baldwin  <T.E.Baldwin99@members.leeds.ac.uk>

        Use 64bit disk addresses.

        * disk/i386/pc/biosdisk.c: Include limits.h.
        (grub_biosdisk_rw): Use grub_disk_addr_t for sector parameter.
        Truncate sector to 32 bits for CHS calculation.
        (grub_biosdisk_read): Use grub_disk_addr_t for sector parameter.
        Avoid 64 bit division calculating len by setting to 100 if
        sector >= 0x100000000.
        (grub_biosdisk_write): Likewise.

        * disk/ieee1275/ofdisk.c (grub_ofdisk_read): Use
        grub_disk_addr_t for disk addresses.
        (grub_ofdisk_write): Likewise.

        * disk/loopback.c (grub_loopback_read): Likewise.
        (grub_loopback_write): Likewise.

        * include/grub/partition.h (struct grub_partition): Likewise.
        (grub_partition_get_start): Likewise.
        (grub_partition_get_len): Likewise.

        * include/grub/disk.h (struct grub_disk_dev): Likewise.
        (struct grub_disk): Likewise.
        (grub_disk_read): Likewise.
        (grub_disk_write): Likewise.

        * include/grub/file.h (struct grub_file): Likewise.

        * kern/disk.c (struct grub_disk_cache): Likewise.
        (grub_disk_cache_invalidate): Likewise.
        (grub_disk_cache_fetch): Likewise.
        (grub_disk_cache_unlock): Likewise.
        (grub_disk_cache_store): Likewise.
        (grub_disk_check_range): Likewise.
        (grub_disk_read): Likewise.
        (grub_disk_write): Likewise.

        * util/i386/pc/biosdisk.c (open_device): Likewise.
        (grub_util_biosdisk_read): Likewise.
        (grub_util_biosdisk_write): Likewise.

        * util/i386/pc/grub-setup.c (save_first_sector): Use
        grub_disk_addr_t for sector parameter.  Error if disk address
        above or equal to 0x100000000.
        (save_blocklists): Likewise, and cast disk addresses
        to unsigned for display.

        * fs/affs.c (grub_affs_read_file): Use grub_disk_addr_t
        for disk address parameter of hook function.
        * fs/ext2.c (grub_ext2_read_file): Likewise.
        * fs/fat.c (grub_fat_read_file): Likewise.
        * fs/fshelp.c (grub_fshelp_read_file): Likewise.
        * fs/hfs.c (grub_hfs_read_file): Likewise.
        * fs/jfs.c (grub_jfs_read_file): Likewise.
        * fs/minux.c (grub_minux_read_file): Likewise.
        * fs/sfs.c (grub_sfs_read_file): Likewise.
        * fs/ufs.c (grub_ufs_read_file): Likewise.
        * fs/xfs.c (grub_xfs_read_file): Likewise.
        * include/grub/fshelp.h (grub_fshelp_read_file): Likewise.

        * partmap/amiga.c (amiga_partition_map_iterate): Use 64 bit
        arithmetic to calculate disk addresses.
        * partmap/sun.c (sun_partition_map_iterate): Likewise.

        * partmap/pc.c (pc_partition_map_iterate): Cast disk addresses
        to unsigned for display.

        * include/grub/types.h (grub_disk_addr_t): New typedef.



-- 
Member AFFS, WYLUG, SWP (UK), UAF, RESPECT, StWC
No to software patents!    Victory to the iraqi resistance!

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2005-10-29  1:16 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-21 13:17 [patch] 64 bit disk address support (= 8192EiB disks) Timothy Baldwin
2005-10-21 22:18 ` Marco Gerards
2005-10-21 22:24   ` Yoshinori K. Okuji
2005-10-21 22:29     ` Marco Gerards
2005-10-21 23:46     ` Timothy Baldwin
2005-10-22  0:06       ` Yoshinori K. Okuji
2005-10-22 11:53         ` Timothy Baldwin
2005-10-28  3:01           ` Yoshinori K. Okuji
2005-10-29  1:15             ` Timothy Baldwin
2005-10-23 22:15   ` Timothy Baldwin
2005-10-24 10:26     ` Marco Gerards
2005-10-24 19:14       ` RISC OS patches (was [patch] 64 bit disk address support (= 8192EiB disks)) Timothy Baldwin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.