When SCSI IDs are not contiguous, the loader could not find correct

unit number for da device.  This commit fixes this problem.

Submitted by:	IMAI Takeshi <take-i@ceres.dti.ne.jp>
This commit is contained in:
KATO Takenori 1999-03-04 10:48:14 +00:00
parent 4a1bb98b26
commit 72578dfa5a
2 changed files with 14 additions and 9 deletions

View File

@ -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.23 1999/01/25 23:07:02 rnordier Exp $
* $Id: biosdisk.c,v 1.1 1999/02/03 08:39:09 kato Exp $
*/
/*
@ -173,8 +173,12 @@ bd_init(void)
bdinfo[nbdinfo].bd_flags = (unit & 0xf0) == 0x90 ? BD_FLOPPY : 0;
/* XXX add EDD probes */
if (!bd_int13probe(&bdinfo[nbdinfo]))
break;
if (!bd_int13probe(&bdinfo[nbdinfo])){
if ((unit & 0xf0) == 0xa0 && (unit & 0x0f) < 6)
continue; /* Target IDs are not contiguous. */
else
break;
}
if (bdinfo[nbdinfo].bd_flags & BD_FLOPPY){
bdinfo[nbdinfo].bd_drive = 'A' + (unit & 0xf);

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: main.c,v 1.14 1998/11/02 23:28:11 msmith Exp $
* $Id: main.c,v 1.1 1999/02/03 08:39:09 kato Exp $
*/
/*
@ -165,10 +165,11 @@ extract_currdev(void)
* (ie. SCSI when IDE also exists).
*/
#ifdef PC98
if (major == 6)
biosdev = 0x30 + B_UNIT(initial_bootdev);
else
biosdev = (major << 3) + 0x80 + B_UNIT(initial_bootdev);
if ((biosdev == 0) && (B_TYPE(initial_bootdev) != 2)) /* biosdev doesn't match major */
if (B_TYPE(initial_bootdev) == 6)
biosdev = 0x30 + B_UNIT(initial_bootdev);
else
biosdev = (major << 3) + 0x80 + B_UNIT(initial_bootdev);
#else
if ((biosdev == 0) && (B_TYPE(initial_bootdev) != 2)) /* biosdev doesn't match major */
biosdev = 0x80 + B_UNIT(initial_bootdev); /* assume harddisk */