- Don't assume that SCSI ID numbers of HDD units are contiguous. That
is, don't assume that SCSI ID corresponds to a unit number of da device. Unit number of da device is provided by 2nd stage loader and 3rd stage loader now use it. - Fix drive letter to display. Submitted by: IMAI Takeshi <take-i@ceres.dti.ne.jp>
This commit is contained in:
parent
13e87d2d60
commit
538c6e3378
|
@ -23,7 +23,7 @@
|
|||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: biosdisk.c,v 1.3 1999/03/04 16:38:12 kato Exp $
|
||||
* $Id: biosdisk.c,v 1.4 1999/08/05 03:12:20 kato Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -94,7 +94,7 @@ static struct bdinfo
|
|||
int bd_flags;
|
||||
int bd_type; /* BIOS 'drive type' (floppy only) */
|
||||
#ifdef PC98
|
||||
int bd_drive;
|
||||
int bd_da_unit; /* kernel unit number for da */
|
||||
#endif
|
||||
} bdinfo [MAXBDDEV];
|
||||
static int nbdinfo = 0;
|
||||
|
@ -165,7 +165,7 @@ bd_init(void)
|
|||
int base, unit;
|
||||
|
||||
#ifdef PC98
|
||||
int hd_drive=0, n=-0x10;
|
||||
int da_drive=0, n=-0x10;
|
||||
/* sequence 0x90, 0x80, 0xa0 */
|
||||
for (base = 0x90; base <= 0xa0; base += n, n += 0x30) {
|
||||
for (unit = base; (nbdinfo < MAXBDDEV) || ((unit & 0x0f) < 4); unit++) {
|
||||
|
@ -182,7 +182,6 @@ bd_init(void)
|
|||
}
|
||||
|
||||
if (bdinfo[nbdinfo].bd_flags & BD_FLOPPY){
|
||||
bdinfo[nbdinfo].bd_drive = 'A' + (unit & 0xf);
|
||||
/* available 1.44MB access? */
|
||||
if (*(u_char *)PTOV(0xA15AE) & (1<<(unit & 0xf))){
|
||||
/* boot media 1.2MB FD? */
|
||||
|
@ -190,11 +189,13 @@ bd_init(void)
|
|||
bdinfo[nbdinfo].bd_unit = 0x30 + (unit & 0xf);
|
||||
}
|
||||
}
|
||||
else
|
||||
bdinfo[nbdinfo].bd_drive = 'C' + hd_drive++;
|
||||
else {
|
||||
if ((unit & 0xa0) == 0xa0)
|
||||
bdinfo[nbdinfo].bd_da_unit = da_drive++;
|
||||
}
|
||||
/* XXX we need "disk aliases" to make this simpler */
|
||||
printf("BIOS drive %c: is disk%d\n",
|
||||
bdinfo[nbdinfo].bd_drive, nbdinfo);
|
||||
'A' + nbdinfo, nbdinfo);
|
||||
nbdinfo++;
|
||||
}
|
||||
}
|
||||
|
@ -273,8 +274,7 @@ bd_print(int verbose)
|
|||
|
||||
for (i = 0; i < nbdinfo; i++) {
|
||||
#ifdef PC98
|
||||
sprintf(line, " disk%d: BIOS drive %c:\n", i,
|
||||
bdinfo[i].bd_drive);
|
||||
sprintf(line, " disk%d: BIOS drive %c:\n", i, 'A' + i);
|
||||
#else
|
||||
sprintf(line, " disk%d: BIOS drive %c:\n", i,
|
||||
(bdinfo[i].bd_unit < 0x80) ? ('A' + bdinfo[i].bd_unit) : ('C' + bdinfo[i].bd_unit - 0x80));
|
||||
|
@ -992,7 +992,10 @@ bd_getdev(struct i386_devdesc *dev)
|
|||
unit = i;
|
||||
} else {
|
||||
#ifdef PC98
|
||||
unit = biosdev & 0xf; /* allow for #wd compenstation in da case */
|
||||
if ((biosdev & 0xf0) == 0xa0)
|
||||
unit = bdinfo[dev->d_kind.biosdisk.unit].bd_da_unit;
|
||||
else
|
||||
unit = biosdev & 0xf;
|
||||
#else
|
||||
unit = (biosdev & 0x7f) - unitofs; /* allow for #wd compenstation in da case */
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue