Improve the IDE HD geometry auto detection algorithm.
PATCH 1/5 Improve the IDE HD geometry auto detection algorithm.
Improve the IDE HD geometry auto detection algorithm.
Signed-off-by Nitin A Kamble <[email protected]>
Signed-off-by Asit K Mallick <[email protected]>
Signed-off-by Arun Sharma <[email protected]>
tools/ioemu/hw/ide.c +10 -2
@@ -1850,7 +1850,11 @@a cylinder boundary */ s->heads = p->end_head +1 ; s->sectors = p->end_sector &63 ; +if (s->sectors ==0 ) +continue ; s->cylinders = s->nb_sectors / (s->heads * s->sectors); +if (s->cylinders <1 || s->cylinders >16383 ) +continue ;#if 0 printf ("guessed partition: CHS=%d %d %d\n" , s->cylinders, s->heads, s->sectors);
@@ -1884,8 +1888,12 @@ s->sectors = secs; }else {ide_guess_geometry (s); -if (s->cylinders ==0 ) { -/* if no geometry, use a LBA compatible one */ + +/* if heads > 16, it means that a BIOS LBA +translation was active, so the default +hardware geometry is OK */ +if ((s->heads >16 ) || (s->cylinders ==0 )) { +/* if no geometry, use a standard physical disk geometry */ cylinders = nb_sectors / (16 *63 );if (cylinders >16383 ) cylinders =16383 ;