commit 29a64e6b92cac22d472f4b352de5b1535e4afc5f Author: Joachim Wiedorn AuthorDate: Wed Jun 22 22:42:23 2011 +0200 Commit: Joachim Wiedorn CommitDate: Wed Jun 22 22:42:23 2011 +0200 Support for kernel on GPT disks in first 15 partitions diff --git a/CHANGELOG b/CHANGELOG index fac709e..f6d7ebb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,11 @@ Changes for version 23.3 (unreleased) - Joachim Wiedorn -------------- - Update of lilo.conf.5 manpage with some corrections. + Sources + ------- + - Support for kernel images on GPT hard disks in the first 15 + partitions, otherwise set comments (src/geometry.c, src/lilo.h) + General ------- - Fix abort problem in script mkrescue. (thanks to S. R. Wright) diff --git a/src/geometry.c b/src/geometry.c index 58ac4e4..d43fa97 100644 --- a/src/geometry.c +++ b/src/geometry.c @@ -297,10 +297,11 @@ int has_partitions_beta(dev_t dev) (major >= MAJOR_SMART2 && major <= MAJOR_SMART2+7) || (major >= MAJOR_CISS && major <= MAJOR_CISS+7) || major == MAJOR_FTL || major == MAJOR_NFTL || major == MAJOR_DOC || - (major >= MAJOR_SD9 && major <= MAJOR_SD16) + (major >= MAJOR_SD9 && major <= MAJOR_SD16) || + (major >= MAJOR_SATA1 && major <= MAJOR_SATA2) ) return 0xFFFFFFF0; /* 4 bit partition mask */ - if ( major == MAJOR_SATA || major == MAJOR_SATA2 + if ( major == MAJOR_CARM1 || major == MAJOR_CARM2 ) return 0xFFFFFFE0; /* 5 bit partition mask */ if ( major == MAJOR_IBM_iSER || @@ -683,6 +684,14 @@ void geo_query_dev(GEOMETRY *geo,int device,int all) geo->sectors = hdprm.sectors; geo->start = hdprm.start; break; + case MAJOR_SATA1: + case MAJOR_SATA2: + printf("WARNING: SATA partition in the high region (>15):\n"); + printf("LILO needs the kernel in one of the first 15 SATA partitions. If \n"); + printf("you need support for kernel in SATA partitions of the high region \n"); + printf("than try grub2 for this purpose! \n"; + die("Sorry, cannot handle device 0x%04x",device); + break; MASK31: geo->device = 0x80 + last_dev(MAJOR_HD,64) + (MINOR(device) >> 5); if (!get_all) break; @@ -1471,7 +1480,7 @@ int geo_comp_addr(GEOMETRY *geo,int offset,SECTOR_ADDR *addr) break; if (!dm_target) die("device-mapper: Sector outside mapped device? (%d: %u/%"PRIu64")", - geo->base_dev, sector, (uint64_t)(dm_table->target ? + (int) geo->base_dev, sector, (uint64_t)(dm_table->target ? (dm_table->target->start+dm_table->target->length) : 0)); dev = dm_target->device; diff --git a/src/lilo.h b/src/lilo.h index 86d87ca..7ff734e 100644 --- a/src/lilo.h +++ b/src/lilo.h @@ -146,11 +146,16 @@ #define MAJOR_SD16 135 /* SCSI disks -255 */ #define MAJOR_DAC960_8 136 /* Ninth Mylex DAC960 PCI RAID controller */ #define MAJOR_EMD 153 /* Enhanced multi-disk RAID sets */ -#define MAJOR_SATA 160 /* Carmel SATA Disk on first 8-port controller */ -#define MAJOR_SATA2 161 /* Carmel SATA Disk on 2nd 8-port controller */ +#define MAJOR_CARM1 160 /* Carmel SATA Disk on first 8-port controller */ +#define MAJOR_CARM2 161 /* Carmel SATA Disk on 2nd 8-port controller */ + /* don't use the following */ #define MAJOR_MDP 254 /* Enhanced multi-disk RAID sets [experimental?] */ +/* high partitions (>15) on SATA hard disks */ +#define MAJOR_SATA1 259 /* high SATA disk partitions */ +#define MAJOR_SATA2 260 /* high SATA disk partitions */ + #define MAX_TOKEN 1023 /* max device Token length */ #define MAX_IMAGE_NAME 15 /* maximum name length (w/o terminating NUL) */ #define MAX_DESCR_SECTORS 12 /* upper limit on MAX_DESCR_SECS */