public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2.6] EDD: add edd=off and edd=skipmbr options
@ 2004-11-23 23:00 Matt Domsch
  2004-11-24  3:11 ` Randy.Dunlap
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Matt Domsch @ 2004-11-23 23:00 UTC (permalink / raw)
  To: Carl-Daniel Hailfinger, jgarzik, alan, david.balazic, hpa, ak
  Cc: linux-kernel

Carl-Daniel, David, Jeff, Alan:
I'd appreciate your testing of the following EDD code in your system
configurations where your adapter BIOSes would fail.

Peter, Andi: I've built this for x86 and x86-64, and run this on x86.
I'd appreciate your review of the assembly code, and suggestions for
improvement, prior to my submitting it to akpm for 2.6.11.

EDD: add edd=off and edd=skipmbr command line options
    
New command line options
edd=off     (or edd=of)
edd=skipmbr (or edd=sk)
 
runtime options for disabling all EDD int13 calls completely, or for
skipping the int13 READ SECTOR calls, respectively.

These are provided to allow Linux distributions to include CONFIG_EDD=m, yet
allow end-users to disable parts of EDD which may not work well with their
system's BIOS.

Signed-off-by: Matt Domsch <Matt_Domsch@dell.com>
  
 Documentation/kernel-parameters.txt |    5 ++++
 arch/i386/boot/edd.S                |   42 ++++++++++++++++++++++++++++++++++--
 include/linux/edd.h                 |    4 +++
 3 files changed, 49 insertions, 2 deletions

-- 
Matt Domsch
Sr. Software Engineer, Lead Engineer
Dell Linux Solutions linux.dell.com & www.dell.com/linux
Linux on Dell mailing lists @ http://lists.us.dell.com

--- ../linux-2.6/arch/i386/boot/edd.S	Sat Nov 13 20:22:44 2004
+++ linux-2.6-edd-options/arch/i386/boot/edd.S	Tue Nov 23 15:26:28 2004
@@ -1,5 +1,6 @@
 /*
  * BIOS Enhanced Disk Drive support
+ * Copyright (C) 2002, 2003, 2004 Dell, Inc.
  * by Matt Domsch <Matt_Domsch@dell.com> October 2002
  * conformant to T13 Committee www.t13.org
  *   projects 1572D, 1484D, 1386D, 1226DT
@@ -7,14 +8,52 @@
  *	and Andrew Wilks <Andrew_Wilks@dell.com> September 2003, June 2004
  * legacy CHS retreival by Patrick J. LoPresti <patl@users.sourceforge.net>
  *      March 2004
+ * Command line option parsing, Matt Domsch, November 2004
  */
 
 #include <linux/edd.h>
+#include <asm/setup.h>
 
 #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
+	movb	$0, (EDD_MBR_SIG_NR_BUF)	# zero value at EDD_MBR_SIG_NR_BUF
+	movb	$0, (EDDNR)			# zero value at EDDNR
+
+# Check the command line for two options:
+# edd=of  disables EDD completely  (edd=off)
+# edd=sk  skips the MBR test    (edd=skipmbr)
+	pushl	%esi
+    	cmpl	$0, %cs:cmd_line_ptr
+	jz	done_cl
+	movl	%cs:(cmd_line_ptr), %esi
+# ds:esi has the pointer to the command line now
+	movl	$(COMMAND_LINE_SIZE-6), %ecx
+# loop through kernel command line one byte at a time
+cl_loop:
+	cmpl	$EDD_CL_EQUALS, (%si)
+	jz	found_edd_equals
+	incl	%esi
+	loop	cl_loop
+	jmp	done_cl
+found_edd_equals:
+# only looking at first two characters after equals
+    	addl	$4, %esi
+	cmpw	$EDD_CL_OFF, (%si)	# edd=of
+	jz	do_edd_off
+	cmpw	$EDD_CL_SKIP, (%si)	# edd=sk
+	jz	do_edd_skipmbr
+	jmp	done_cl
+do_edd_skipmbr:
+    	popl	%esi
+	jmp	edd_start
+do_edd_off:
+	popl	%esi
+	jmp	edd_done
+done_cl:
+	popl	%esi
+
+    
 # Read the first sector of each BIOS disk device and store the 4-byte signature
 edd_mbr_sig_start:
-	movb	$0, (EDD_MBR_SIG_NR_BUF)	# zero value at EDD_MBR_SIG_NR_BUF
 	movb	$0x80, %dl			# from device 80
 	movw	$EDD_MBR_SIG_BUF, %bx		# store buffer ptr in bx
 edd_mbr_sig_read:
@@ -76,7 +115,6 @@ edd_start:
        						# result buffer for fn48
 	movw	$EDDBUF+EDDEXTSIZE, %si		# in ds:si, fn41 results
 						# kept just before that
-	movb	$0, (EDDNR)			# zero value at EDDNR
 	movb	$0x80, %dl			# BIOS device 0x80
 
 edd_check_ext:
--- ../linux-2.6/include/linux/edd.h	Sat Nov 13 20:22:46 2004
+++ linux-2.6-edd-options/include/linux/edd.h	Tue Nov 23 15:03:51 2004
@@ -49,6 +49,10 @@
 #define EDD_MBR_SIG_MAX 16        /* max number of signatures to store */
 #define EDD_MBR_SIG_NR_BUF 0x1ea  /* addr of number of MBR signtaures at EDD_MBR_SIG_BUF
 				     in boot_params - treat this as 1 byte  */
+#define EDD_CL_EQUALS   0x3d646465     /* "edd=" */
+#define EDD_CL_OFF      0x666f         /* "of" for off  */
+#define EDD_CL_SKIP     0x6b73         /* "sk" for skipmbr */
+
 #ifndef __ASSEMBLY__
 
 #define EDD_EXT_FIXED_DISK_ACCESS           (1 << 0)
--- ../linux-2.6/Documentation/kernel-parameters.txt	Tue Nov 23 10:56:18 2004
+++ linux-2.6-edd-options/Documentation/kernel-parameters.txt	Tue Nov 23 16:28:53 2004
@@ -29,6 +29,7 @@ restrictions referred to are that the re
 	CD	Appropriate CD support is enabled.
 	DEVFS	devfs support is enabled. 
 	DRM	Direct Rendering Management support is enabled. 
+	EDD	BIOS Enhanced Disk Drive Services (EDD) is enabled
 	EFI	EFI Partitioning (GPT) is enabled
 	EIDE	EIDE/ATAPI support is enabled.
 	FB	The frame buffer device is enabled.
@@ -407,6 +408,10 @@ running once the system is up.
 	eda=		[HW,PS2]
 
 	edb=		[HW,PS2]
+
+	edd		[EDD]
+			Format: {"of[f]" | "sk[ipmbr]"}
+			See comment in arch/i386/boot/edd.S
 
 	eicon=		[HW,ISDN] 
 			Format: <id>,<membase>,<irq>


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

end of thread, other threads:[~2004-12-02 19:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-11-23 23:00 [PATCH 2.6] EDD: add edd=off and edd=skipmbr options Matt Domsch
2004-11-24  3:11 ` Randy.Dunlap
2004-11-24 10:39 ` Andi Kleen
2004-12-02 19:25 ` Matt Domsch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox