Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Aug 1999 22:02:58 -0700
From:      Mike Smith <mike@smith.net.au>
To:        Tom Bartol <bartol@salk.edu>
Cc:        Mike Smith <mike@smith.net.au>, "David E. Cross" <crossd@cs.rpi.edu>, current@FreeBSD.ORG
Subject:   Re: yet more TP 600E fun... 
Message-ID:  <199908140502.WAA00524@dingo.cdrom.com>
In-Reply-To: Your message of "Fri, 13 Aug 1999 21:25:45 PDT." <Pine.BSF.4.10.9908132120530.51300-100000@eccles.salk.edu> 

next in thread | previous in thread | raw e-mail | index | archive | help
> 
> I'd be more than happy to do the pestering if some one could write down
> a detailed description of exactly how the TP's BIOS is non-compliant.
> I don't know enough about the boot process and BIOS to write such a
> description.

It's expected that the BIOS numbers disk units sequentially; floppies 
from 0 upwards, fixed-disk devices from 0x80 upwards.   The loader 
searches upwards from 0 and from 0x80 until it fails to find a unit and 
stops there. It doesn't search all of the unit numbers because 
many BIOS implementations seem to wrap, eg. you may find that unit 0x90 
is the same as unit 0x80.  You can't be sure about where the wrap point 
will be, either.

Normally, when you're booting an El Torito image, the virtual floppy is
substituted for drive 0 (ie. you can't get at the real first floppy
drive). I can see why IBM would move it elsewhere, but 0x8b is just
about the most stupid place they could have put it.

This is the code (in /sys/boot/i386/libi386/biosdisk.c) that probes for 
BIOS disk units.  You try replacing the 'break' with 'continue' and see 
if it finds a device at 0x8b.  If it does, let me know and I'll send 
you some more complete patches that will always probe the claimed boot 
device.

static int
bd_init(void) 
{
    int         base, unit;

    /* sequence 0, 0x80 */
    for (base = 0; base <= 0x80; base += 0x80) {
        for (unit = base; (nbdinfo < MAXBDDEV); unit++) {
            bdinfo[nbdinfo].bd_unit = unit;
            bdinfo[nbdinfo].bd_flags = (unit < 0x80) ? BD_FLOPPY : 0;

            /* XXX add EDD probes */
            if (!bd_int13probe(&bdinfo[nbdinfo]))
                break;

            /* XXX we need "disk aliases" to make this simpler */
            printf("BIOS drive %c: is disk%d\n", 
                   (unit < 0x80) ? ('A' + unit) : ('C' + unit - 0x80), nbdinfo);
            nbdinfo++;
        }
    }
    return(0);
}


> Tom
> 
> 
> On Fri, 13 Aug 1999, Mike Smith wrote:
> 
> > > I attempt to boot a CD off of the TP600E and I get the following errors:
> > > 
> > > "Can't work out which disk we are booting from."
> > > "Guessed BIOS device 0x8b not found by probes, defaulting to disk0:"
> > > 
> > > Then whenever it attmpts to access "disk0:" it goes to the floppy drive.
> > > 
> > > Suggestions?
> > 
> > Known weirdness in the TP's BIOS not handled properly by the 
> > bootloader.  I don't have immediate plans to do anything about this; 
> > you could try hacking the loader to accept the 0x8b value and see if 
> > that actually works.  Or you could pester IBM to DTRT.
> > 
> > -- 
> > \\  The mind's the standard       \\  Mike Smith
> > \\  of the man.                   \\  msmith@freebsd.org
> > \\    -- Joseph Merrick           \\  msmith@cdrom.com
> > 
> > 
> > 
> > 
> > To Unsubscribe: send mail to majordomo@FreeBSD.org
> > with "unsubscribe freebsd-current" in the body of the message
> > 
> 
> 
> 
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-current" in the body of the message
> 

-- 
\\  The mind's the standard       \\  Mike Smith
\\  of the man.                   \\  msmith@freebsd.org
\\    -- Joseph Merrick           \\  msmith@cdrom.com




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199908140502.WAA00524>