[SeaBIOS] [PATCH 2/3] edd: Use sectors==-1 to detect removable media.
Kevin O'Connor
kevin at koconnor.net
Sat May 31 02:19:37 CEST 2014
Don't look for DTYPE_ATA_ATAPI to determine if a removable media (such
as a cdrom) is present, instead look for a -1 in the sector count.
This improves the results for cdroms on controllers other than ATA
ATAPI.
Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
---
src/block.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/block.c b/src/block.c
index c8cdf57..4bec603 100644
--- a/src/block.c
+++ b/src/block.c
@@ -337,13 +337,12 @@ fill_edd(u16 seg, struct int13dpt_s *param_far, struct drive_s *drive_gf)
, size, type, npc, nph, nps, (u32)lba, blksize);
SET_FARVAR(seg, param_far->size, 26);
- if (type == DTYPE_ATA_ATAPI) {
+ if (lba == (u64)-1) {
// 0x74 = removable, media change, lockable, max values
SET_FARVAR(seg, param_far->infos, 0x74);
SET_FARVAR(seg, param_far->cylinders, 0xffffffff);
SET_FARVAR(seg, param_far->heads, 0xffffffff);
SET_FARVAR(seg, param_far->spt, 0xffffffff);
- SET_FARVAR(seg, param_far->sector_count, (u64)-1);
} else {
if (lba > (u64)nps*nph*0x3fff) {
SET_FARVAR(seg, param_far->infos, 0x00); // geometry is invalid
@@ -354,8 +353,8 @@ fill_edd(u16 seg, struct int13dpt_s *param_far, struct drive_s *drive_gf)
}
SET_FARVAR(seg, param_far->heads, (u32)nph);
SET_FARVAR(seg, param_far->spt, (u32)nps);
- SET_FARVAR(seg, param_far->sector_count, lba);
}
+ SET_FARVAR(seg, param_far->sector_count, lba);
SET_FARVAR(seg, param_far->blksize, blksize);
if (size < 30 ||
--
1.9.3
More information about the SeaBIOS
mailing list