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 */