]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/usb/storage/isd200.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[linux-2.6-omap-h63xx.git] / drivers / usb / storage / isd200.c
index 7308e8cbe8f972320c7dfcc76b6fabd1dca520c3..49ba6c0ff1e8b4272247bcb935f216acdf08fe76 100644 (file)
@@ -3,7 +3,7 @@
  * $Id: isd200.c,v 1.16 2002/04/22 03:39:43 mdharm Exp $
  *
  * Current development and maintenance:
- *   (C) 2001-2002 Björn Stenberg (bjorn@haxx.se)
+ *   (C) 2001-2002 Björn Stenberg (bjorn@haxx.se)
  *
  * Developed with the assistance of:
  *   (C) 2002 Alan Stern <stern@rowland.org>
@@ -977,6 +977,109 @@ static int isd200_manual_enum(struct us_data *us)
        return(retStatus);
 }
 
+/*
+ *     We are the last non IDE user of the legacy IDE ident structures
+ *     and we thus want to keep a private copy of this function so the
+ *     driver can be used without the obsolete drivers/ide layer
+ */
+
+static void isd200_fix_driveid (struct hd_driveid *id)
+{
+#ifndef __LITTLE_ENDIAN
+# ifdef __BIG_ENDIAN
+       int i;
+       u16 *stringcast;
+
+       id->config         = __le16_to_cpu(id->config);
+       id->cyls           = __le16_to_cpu(id->cyls);
+       id->reserved2      = __le16_to_cpu(id->reserved2);
+       id->heads          = __le16_to_cpu(id->heads);
+       id->track_bytes    = __le16_to_cpu(id->track_bytes);
+       id->sector_bytes   = __le16_to_cpu(id->sector_bytes);
+       id->sectors        = __le16_to_cpu(id->sectors);
+       id->vendor0        = __le16_to_cpu(id->vendor0);
+       id->vendor1        = __le16_to_cpu(id->vendor1);
+       id->vendor2        = __le16_to_cpu(id->vendor2);
+       stringcast = (u16 *)&id->serial_no[0];
+       for (i = 0; i < (20/2); i++)
+               stringcast[i] = __le16_to_cpu(stringcast[i]);
+       id->buf_type       = __le16_to_cpu(id->buf_type);
+       id->buf_size       = __le16_to_cpu(id->buf_size);
+       id->ecc_bytes      = __le16_to_cpu(id->ecc_bytes);
+       stringcast = (u16 *)&id->fw_rev[0];
+       for (i = 0; i < (8/2); i++)
+               stringcast[i] = __le16_to_cpu(stringcast[i]);
+       stringcast = (u16 *)&id->model[0];
+       for (i = 0; i < (40/2); i++)
+               stringcast[i] = __le16_to_cpu(stringcast[i]);
+       id->dword_io       = __le16_to_cpu(id->dword_io);
+       id->reserved50     = __le16_to_cpu(id->reserved50);
+       id->field_valid    = __le16_to_cpu(id->field_valid);
+       id->cur_cyls       = __le16_to_cpu(id->cur_cyls);
+       id->cur_heads      = __le16_to_cpu(id->cur_heads);
+       id->cur_sectors    = __le16_to_cpu(id->cur_sectors);
+       id->cur_capacity0  = __le16_to_cpu(id->cur_capacity0);
+       id->cur_capacity1  = __le16_to_cpu(id->cur_capacity1);
+       id->lba_capacity   = __le32_to_cpu(id->lba_capacity);
+       id->dma_1word      = __le16_to_cpu(id->dma_1word);
+       id->dma_mword      = __le16_to_cpu(id->dma_mword);
+       id->eide_pio_modes = __le16_to_cpu(id->eide_pio_modes);
+       id->eide_dma_min   = __le16_to_cpu(id->eide_dma_min);
+       id->eide_dma_time  = __le16_to_cpu(id->eide_dma_time);
+       id->eide_pio       = __le16_to_cpu(id->eide_pio);
+       id->eide_pio_iordy = __le16_to_cpu(id->eide_pio_iordy);
+       for (i = 0; i < 2; ++i)
+               id->words69_70[i] = __le16_to_cpu(id->words69_70[i]);
+       for (i = 0; i < 4; ++i)
+               id->words71_74[i] = __le16_to_cpu(id->words71_74[i]);
+       id->queue_depth    = __le16_to_cpu(id->queue_depth);
+       for (i = 0; i < 4; ++i)
+               id->words76_79[i] = __le16_to_cpu(id->words76_79[i]);
+       id->major_rev_num  = __le16_to_cpu(id->major_rev_num);
+       id->minor_rev_num  = __le16_to_cpu(id->minor_rev_num);
+       id->command_set_1  = __le16_to_cpu(id->command_set_1);
+       id->command_set_2  = __le16_to_cpu(id->command_set_2);
+       id->cfsse          = __le16_to_cpu(id->cfsse);
+       id->cfs_enable_1   = __le16_to_cpu(id->cfs_enable_1);
+       id->cfs_enable_2   = __le16_to_cpu(id->cfs_enable_2);
+       id->csf_default    = __le16_to_cpu(id->csf_default);
+       id->dma_ultra      = __le16_to_cpu(id->dma_ultra);
+       id->trseuc         = __le16_to_cpu(id->trseuc);
+       id->trsEuc         = __le16_to_cpu(id->trsEuc);
+       id->CurAPMvalues   = __le16_to_cpu(id->CurAPMvalues);
+       id->mprc           = __le16_to_cpu(id->mprc);
+       id->hw_config      = __le16_to_cpu(id->hw_config);
+       id->acoustic       = __le16_to_cpu(id->acoustic);
+       id->msrqs          = __le16_to_cpu(id->msrqs);
+       id->sxfert         = __le16_to_cpu(id->sxfert);
+       id->sal            = __le16_to_cpu(id->sal);
+       id->spg            = __le32_to_cpu(id->spg);
+       id->lba_capacity_2 = __le64_to_cpu(id->lba_capacity_2);
+       for (i = 0; i < 22; i++)
+               id->words104_125[i]   = __le16_to_cpu(id->words104_125[i]);
+       id->last_lun       = __le16_to_cpu(id->last_lun);
+       id->word127        = __le16_to_cpu(id->word127);
+       id->dlf            = __le16_to_cpu(id->dlf);
+       id->csfo           = __le16_to_cpu(id->csfo);
+       for (i = 0; i < 26; i++)
+               id->words130_155[i] = __le16_to_cpu(id->words130_155[i]);
+       id->word156        = __le16_to_cpu(id->word156);
+       for (i = 0; i < 3; i++)
+               id->words157_159[i] = __le16_to_cpu(id->words157_159[i]);
+       id->cfa_power      = __le16_to_cpu(id->cfa_power);
+       for (i = 0; i < 14; i++)
+               id->words161_175[i] = __le16_to_cpu(id->words161_175[i]);
+       for (i = 0; i < 31; i++)
+               id->words176_205[i] = __le16_to_cpu(id->words176_205[i]);
+       for (i = 0; i < 48; i++)
+               id->words206_254[i] = __le16_to_cpu(id->words206_254[i]);
+       id->integrity_word  = __le16_to_cpu(id->integrity_word);
+# else
+#  error "Please fix <asm/byteorder.h>"
+# endif
+#endif
+}
+
 
 /**************************************************************************
  * isd200_get_inquiry_data
@@ -1018,7 +1121,7 @@ static int isd200_get_inquiry_data( struct us_data *us )
                                int i;
                                __be16 *src;
                                __u16 *dest;
-                               ide_fix_driveid(id);
+                               isd200_fix_driveid(id);
 
                                US_DEBUGP("   Identify Data Structure:\n");
                                US_DEBUGP("      config = 0x%x\n", id->config);
@@ -1382,7 +1485,7 @@ static int isd200_init_info(struct us_data *us)
        } else
                US_DEBUGP("ERROR - kmalloc failure\n");
 
-       return(retStatus);
+       return retStatus;
 }
 
 /**************************************************************************