Example

diff -ur linux-2.4.28-pre1/arch/i386/boot/compressed/misc.c linux-2.4.28-pre1-zen/arch/i386/boot/compressed/misc.c
--- linux-2.4.28-pre1/arch/i386/boot/compressed/misc.c	Wed Aug 25 20:19:11 2004
+++ linux-2.4.28-pre1-zen/arch/i386/boot/compressed/misc.c	Wed Aug 25 20:09:12 2004
@@ -321,7 +321,12 @@
 #ifdef STANDARD_MEMORY_BIOS_CALL
 	if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory.\n");
 #else
-	if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory.\n");
+//	if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory.\n");
+// Novell ZENworks
+// We know that we will be running on a machine with enough memory and this check
+// fails on some machines where int 15h fn 88h fails when himem.sys is loaded
+// these same machines fail on int 15h fn e801h
+// when this fails, this check returns 0 K available, which is not right.
 #endif	
 	mv->low_buffer_start = output_data = (char *)LOW_BUFFER_START;
 	low_buffer_end = ((unsigned int)real_mode > LOW_BUFFER_MAX
@@ -369,8 +374,11 @@
 	else setup_output_buffer_if_we_run_high(mv);
 
 	makecrc();
-	putstr("Uncompressing Linux... ");
-	gunzip();
+	// ZENworks Imaging (Novell)
+        // changes made to display correct output message
+        putstr("Uncompressing and Loading ZENworks Imaging.  Please wait...\n");
+//	putstr("Uncompressing Linux... ");
+        gunzip();
 	putstr("Ok, booting the kernel.\n");
 	if (high_loaded) close_output_buffer_if_we_run_high(mv);
 	return high_loaded;
diff -ur linux-2.4.28-pre1/arch/i386/kernel/setup.c linux-2.4.28-pre1-zen/arch/i386/kernel/setup.c
--- linux-2.4.28-pre1/arch/i386/kernel/setup.c	Sun Aug  8 02:26:04 2004
+++ linux-2.4.28-pre1-zen/arch/i386/kernel/setup.c	Wed Aug 25 20:21:18 2004
@@ -1206,8 +1206,7 @@
 	setup_memory_region();
 	copy_edd();
 
-	if (!MOUNT_ROOT_RDONLY)
-		root_mountflags &= ~MS_RDONLY;
+	root_mountflags &= ~MS_RDONLY;
 	init_mm.start_code = (unsigned long) &_text;
 	init_mm.end_code = (unsigned long) &_etext;
 	init_mm.end_data = (unsigned long) &_edata;
diff -ur linux-2.4.28-pre1/drivers/ide/ide.c linux-2.4.28-pre1-zen/drivers/ide/ide.c
--- linux-2.4.28-pre1/drivers/ide/ide.c	Sun Aug  8 02:26:04 2004
+++ linux-2.4.28-pre1-zen/drivers/ide/ide.c	Wed Aug 25 19:32:40 2004
@@ -1763,6 +1763,42 @@
 
 	ide_init_drive_cmd (&rq);
 	switch (cmd) {
+
+/* 
+ * ZENworks Imaging (Novell)
+ * pdb -- Mon Oct 18 11:43:16 MDT 1999
+ * 
+ * Needed to add this ioctl() in order to get the actual geometry
+ * as reported by the BIOS (Int 0x41/0x46).  When using HDIO_GET_GEO on
+ * some older systems, it reports the physical geometry which is not
+ * necessarily the geometry used to build partition tables used by
+ * DOS or Windows.
+ */
+/* Begin 'get bios geometry' changes */
+		case HDIO_GETBIOSGEO:  
+		{  
+			extern struct		drive_info_struct drive_info;    
+			byte			*BIOS = (byte *)&drive_info;    
+			unsigned		unit = DEVICE_NR(inode->i_rdev);    
+			struct hd_geometry 	*loc = (struct hd_geometry *) arg;
+
+			if (!loc
+				|| (drive->media != ide_disk && drive->media != ide_floppy)
+				|| (unit >= MAX_DRIVES)) {
+					return -EINVAL;
+			}
+			if (unit==1) {
+				BIOS+=16;
+			}
+			if (put_user(*(BIOS+2), (byte *) &loc->heads)) return -EFAULT;
+			if (put_user(*(BIOS+14), (byte *) &loc->sectors)) return -EFAULT;
+			if (put_user(*(unsigned short *)BIOS, (unsigned short *) &loc->cylinders)) return -EFAULT;
+			if (put_user((unsigned)drive->part[MINOR(inode->i_rdev)&PARTN_MASK].start_sect,
+				(unsigned long *) &loc->start)) return -EFAULT;
+			return 0;  
+		}    
+/* End 'get bios geometry' changes */
+
 		case HDIO_GETGEO:
 		{
 			struct hd_geometry *loc = (struct hd_geometry *) arg;
diff -ur linux-2.4.28-pre1/include/linux/hdreg.h linux-2.4.28-pre1-zen/include/linux/hdreg.h
--- linux-2.4.28-pre1/include/linux/hdreg.h	Fri Jun 13 17:51:38 2003
+++ linux-2.4.28-pre1-zen/include/linux/hdreg.h	Wed Aug 25 19:32:40 2004
@@ -411,6 +411,11 @@
 
 /* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x030n/0x031n */
 #define HDIO_GETGEO		0x0301	/* get device geometry */
+/* 
+ * ZENworks Imaging (Novell)
+ * Added new ioctl (HDIO_GETBIOS_GEO)
+ */
+#define HDIO_GETBIOSGEO		0x0303	/* get device geometry */
 #define HDIO_GET_UNMASKINTR	0x0302	/* get current unmask setting */
 #define HDIO_GET_MULTCOUNT	0x0304	/* get current IDE blockmode setting */
 #define HDIO_GET_QDMA		0x0305	/* get use-qdma flag */