Messages in this thread Patch in this message | | | Date | Tue, 23 Nov 2004 17:00:01 -0600 | From | Matt Domsch <> | Subject | [PATCH 2.6] EDD: add edd=off and edd=skipmbr options |
| |
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> - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |