Add common ata identify sequence; improve debugging.

Use a single path to set variables from the identify commands.
Report contents of word0 and word2 in debug level 3.
Only show drive mappings at debug level 3.
diff --git a/src/ata.c b/src/ata.c
index 00a1415..968add8 100644
--- a/src/ata.c
+++ b/src/ata.c
@@ -611,13 +611,15 @@
  * ATA detect and init
  ****************************************************************/
 
+// Extract common information from IDENTIFY commands.
 static void
-extract_model(int driveid, u16 *buffer)
+extract_identify(int driveid, u16 *buffer)
 {
-    char *model = ATA.devices[driveid].model;
-    int maxsize = ARRAY_SIZE(ATA.devices[driveid].model);
+    dprintf(3, "Identify w0=%x w2=%x\n", buffer[0], buffer[2]);
 
     // Read model name
+    char *model = ATA.devices[driveid].model;
+    int maxsize = ARRAY_SIZE(ATA.devices[driveid].model);
     int i;
     for (i=0; i<maxsize/2; i++) {
         u16 v = buffer[27+i];
@@ -626,20 +628,23 @@
     }
     model[maxsize-1] = 0x00;
 
-    // Trim trailing spaces
+    // Trim trailing spaces from model name.
     for (i=maxsize-2; i>0 && model[i] == 0x20; i--)
         model[i] = 0x00;
-}
 
-static u8
-get_ata_version(u16 *buffer)
-{
+    // Extract ATA/ATAPI version.
     u16 ataversion = buffer[80];
     u8 version;
     for (version=15; version>0; version--)
         if (ataversion & (1<<version))
             break;
-    return version;
+    ATA.devices[driveid].version = version;
+
+    // Common flags.
+    SET_GLOBAL(ATA.devices[driveid].removable, (buffer[0] & 0x80) ? 1 : 0);
+    // XXX - what is buffer[48]?
+    SET_GLOBAL(ATA.devices[driveid].mode
+               , buffer[48] ? ATA_MODE_PIO32 : ATA_MODE_PIO16);
 }
 
 static int
@@ -659,17 +664,10 @@
         return ret;
 
     // Success - setup as ATAPI.
+    extract_identify(driveid, buffer);
     SET_GLOBAL(ATA.devices[driveid].type, ATA_TYPE_ATAPI);
-
-    u8 type      = (buffer[0] >> 8) & 0x1f;
-    u8 removable = (buffer[0] & 0x80) ? 1 : 0;
-    u8 mode      = buffer[48] ? ATA_MODE_PIO32 : ATA_MODE_PIO16;
-    u16 blksize  = CDROM_SECTOR_SIZE;
-
-    SET_GLOBAL(ATA.devices[driveid].device, type);
-    SET_GLOBAL(ATA.devices[driveid].removable, removable);
-    SET_GLOBAL(ATA.devices[driveid].mode, mode);
-    SET_GLOBAL(ATA.devices[driveid].blksize, blksize);
+    SET_GLOBAL(ATA.devices[driveid].device, (buffer[0] >> 8) & 0x1f);
+    SET_GLOBAL(ATA.devices[driveid].blksize, CDROM_SECTOR_SIZE);
 
     // fill cdidmap
     u8 cdcount = GET_GLOBAL(ATA.cdcount);
@@ -679,11 +677,10 @@
     // Report drive info to user.
     u8 channel = driveid / 2;
     u8 slave = driveid % 2;
-    u8 version = get_ata_version(buffer);
-    extract_model(driveid, buffer);
     printf("ata%d-%d: %s ATAPI-%d %s\n", channel, slave
-           , ATA.devices[driveid].model, version
-           , type == ATA_DEVICE_CDROM ? "CD-Rom/DVD-Rom" : "Device");
+           , ATA.devices[driveid].model, ATA.devices[driveid].version
+           , (ATA.devices[driveid].type == ATA_DEVICE_CDROM
+              ? "CD-Rom/DVD-Rom" : "Device"));
 
     return 0;
 }
@@ -705,29 +702,20 @@
         return ret;
 
     // Success - setup as ATA.
+    extract_identify(driveid, buffer);
     SET_GLOBAL(ATA.devices[driveid].type, ATA_TYPE_ATA);
+    SET_GLOBAL(ATA.devices[driveid].device, ATA_DEVICE_HD);
+    SET_GLOBAL(ATA.devices[driveid].blksize, IDE_SECTOR_SIZE);
 
-    u8 removable  = (buffer[0] & 0x80) ? 1 : 0;
-    u8 mode       = buffer[48] ? ATA_MODE_PIO32 : ATA_MODE_PIO16;
-    u16 blksize   = IDE_SECTOR_SIZE;
-
-    u16 cylinders = buffer[1];
-    u16 heads     = buffer[3];
-    u16 spt       = buffer[6];
+    SET_GLOBAL(ATA.devices[driveid].pchs.cylinders, buffer[1]);
+    SET_GLOBAL(ATA.devices[driveid].pchs.heads, buffer[3]);
+    SET_GLOBAL(ATA.devices[driveid].pchs.spt, buffer[6]);
 
     u64 sectors;
     if (buffer[83] & (1 << 10)) // word 83 - lba48 support
         sectors = *(u64*)&buffer[100]; // word 100-103
     else
         sectors = *(u32*)&buffer[60]; // word 60 and word 61
-
-    SET_GLOBAL(ATA.devices[driveid].device, ATA_DEVICE_HD);
-    SET_GLOBAL(ATA.devices[driveid].removable, removable);
-    SET_GLOBAL(ATA.devices[driveid].mode, mode);
-    SET_GLOBAL(ATA.devices[driveid].blksize, blksize);
-    SET_GLOBAL(ATA.devices[driveid].pchs.heads, heads);
-    SET_GLOBAL(ATA.devices[driveid].pchs.cylinders, cylinders);
-    SET_GLOBAL(ATA.devices[driveid].pchs.spt, spt);
     SET_GLOBAL(ATA.devices[driveid].sectors, sectors);
 
     // Setup disk geometry translation.
@@ -736,10 +724,9 @@
     // Report drive info to user.
     u8 channel = driveid / 2;
     u8 slave = driveid % 2;
-    u8 version = get_ata_version(buffer);
-    extract_model(driveid, buffer);
     char *model = ATA.devices[driveid].model;
-    printf("ata%d-%d: %s ATA-%d Hard-Disk ", channel, slave, model, version);
+    printf("ata%d-%d: %s ATA-%d Hard-Disk ", channel, slave, model
+           , ATA.devices[driveid].version);
     u64 sizeinmb = sectors >> 11;
     if (sizeinmb < (1 << 16))
         printf("(%u MiBytes)\n", (u32)sizeinmb);
@@ -934,7 +921,7 @@
 {
     // fill hdidmap
     u8 hdcount = GET_BDA(hdcount);
-    dprintf(1, "Mapping driveid %d to %d\n", driveid, hdcount);
+    dprintf(3, "Mapping driveid %d to %d\n", driveid, hdcount);
     SET_GLOBAL(ATA.idmap[0][hdcount], driveid);
     SET_BDA(hdcount, hdcount + 1);
 
diff --git a/src/disk.h b/src/disk.h
index a857497..2774cde 100644
--- a/src/disk.h
+++ b/src/disk.h
@@ -176,6 +176,7 @@
     u8  removable;    // Removable device flag
     u8  mode;         // transfer mode : PIO 16/32 bits - IRQ - ISADMA - PCIDMA
     u16 blksize;      // block size
+    u8  version;      // ATA/ATAPI version
 
     char model[41];