From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arun Sharma Subject: [PATCH][1/5] Improve the IDE HD geometry auto detection algorithm. Date: Fri, 1 Jul 2005 11:55:41 -0700 Message-ID: <20050701185541.GA32141@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Ian Pratt , Keir Fraser Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Improve the IDE HD geometry auto detection algorithm. Signed-off-by: Nitin A Kamble Signed-off-by: Asit K Mallick Signed-off-by: Arun Sharma diff -r 5bde59907bba -r a7b2638827fa tools/ioemu/hw/ide.c --- a/tools/ioemu/hw/ide.c Thu Jun 30 18:59:08 2005 +++ b/tools/ioemu/hw/ide.c Thu Jun 30 19:25:19 2005 @@ -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;