ChangeSet 1.1068.7.3, 2003/03/05 11:44:45-08:00, [EMAIL PROTECTED]

[PATCH] io_edgeport.c diff to fix endianess bugs

attached a fix for the io_edgeport usb serial driver
This diff fixes endianess issues which prevented the driver to work on
bigendian machines (e.g. sparc).


 drivers/usb/serial/io_edgeport.c |   45 +++++++++++++++++++--------------------
 1 files changed, 23 insertions(+), 22 deletions(-)


diff -Nru a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
--- a/drivers/usb/serial/io_edgeport.c  Thu Mar  6 16:08:25 2003
+++ b/drivers/usb/serial/io_edgeport.c  Thu Mar  6 16:08:25 2003
@@ -522,7 +522,7 @@
                case EDGE_DOWNLOAD_FILE_I930:
                        BootMajorVersion        = 
BootCodeImageVersion_GEN1.MajorVersion;
                        BootMinorVersion        = 
BootCodeImageVersion_GEN1.MinorVersion;
-                       BootBuildNumber         = 
BootCodeImageVersion_GEN1.BuildNumber;
+                       BootBuildNumber         = 
cpu_to_le16(BootCodeImageVersion_GEN1.BuildNumber);
                        BootImage               = &BootCodeImage_GEN1[0];
                        BootSize                = sizeof( BootCodeImage_GEN1 );
                        break;
@@ -530,7 +530,7 @@
                case EDGE_DOWNLOAD_FILE_80251:
                        BootMajorVersion        = 
BootCodeImageVersion_GEN2.MajorVersion;
                        BootMinorVersion        = 
BootCodeImageVersion_GEN2.MinorVersion;
-                       BootBuildNumber         = 
BootCodeImageVersion_GEN2.BuildNumber;
+                       BootBuildNumber         = 
cpu_to_le16(BootCodeImageVersion_GEN2.BuildNumber);
                        BootImage               = &BootCodeImage_GEN2[0];
                        BootSize                = sizeof( BootCodeImage_GEN2 );
                        break;
@@ -542,26 +542,26 @@
        // Check Boot Image Version
        BootCurVer = (edge_serial->boot_descriptor.MajorVersion << 24) +
                     (edge_serial->boot_descriptor.MinorVersion << 16) +
-                     edge_serial->boot_descriptor.BuildNumber;
+                     le16_to_cpu(edge_serial->boot_descriptor.BuildNumber);
 
        BootNewVer = (BootMajorVersion << 24) +
                     (BootMinorVersion << 16) +
-                     BootBuildNumber;
+                     le16_to_cpu(BootBuildNumber);
 
        dbg("Current Boot Image version %d.%d.%d",
            edge_serial->boot_descriptor.MajorVersion,
            edge_serial->boot_descriptor.MinorVersion,
-           edge_serial->boot_descriptor.BuildNumber);
+           le16_to_cpu(edge_serial->boot_descriptor.BuildNumber));
 
 
        if (BootNewVer > BootCurVer) {
                dbg("**Update Boot Image from %d.%d.%d to %d.%d.%d",
                    edge_serial->boot_descriptor.MajorVersion,
                    edge_serial->boot_descriptor.MinorVersion,
-                   edge_serial->boot_descriptor.BuildNumber,
+                   le16_to_cpu(edge_serial->boot_descriptor.BuildNumber),
                    BootMajorVersion,
                    BootMinorVersion,
-                   BootBuildNumber);
+                   le16_to_cpu(BootBuildNumber));
 
 
                dbg("Downloading new Boot Image");
@@ -570,12 +570,12 @@
 
                for (;;) {
                        record = (struct edge_firmware_image_record *)firmware;
-                       response = rom_write (edge_serial->serial, record->ExtAddr, 
record->Addr, record->Len, &record->Data[0]);
+                       response = rom_write (edge_serial->serial, 
le16_to_cpu(record->ExtAddr), le16_to_cpu(record->Addr), le16_to_cpu(record->Len), 
&record->Data[0]);
                        if (response < 0) {
-                               dev_err(&edge_serial->serial->dev->dev, "sram_write 
failed (%x, %x, %d)\n", record->ExtAddr, record->Addr, record->Len);
+                               dev_err(&edge_serial->serial->dev->dev, "rom_write 
failed (%x, %x, %d)\n", le16_to_cpu(record->ExtAddr), le16_to_cpu(record->Addr), 
le16_to_cpu(record->Len));
                                break;
                        }
-                       firmware += sizeof (struct edge_firmware_image_record) + 
record->Len;
+                       firmware += sizeof (struct edge_firmware_image_record) + 
le16_to_cpu(record->Len);
                        if (firmware >= &BootImage[BootSize]) {
                                break;
                        }
@@ -678,12 +678,12 @@
        if (edge_serial->serial->dev->descriptor.idProduct & 
ION_DEVICE_ID_GENERATION_2) {
                product_info->FirmwareMajorVersion      = 
OperationalCodeImageVersion_GEN2.MajorVersion;
                product_info->FirmwareMinorVersion      = 
OperationalCodeImageVersion_GEN2.MinorVersion;
-               product_info->FirmwareBuildNumber       = 
OperationalCodeImageVersion_GEN2.BuildNumber;
+               product_info->FirmwareBuildNumber       = 
cpu_to_le16(OperationalCodeImageVersion_GEN2.BuildNumber);
                product_info->iDownloadFile             = EDGE_DOWNLOAD_FILE_80251;
        } else {
                product_info->FirmwareMajorVersion      = 
OperationalCodeImageVersion_GEN1.MajorVersion;
                product_info->FirmwareMinorVersion      = 
OperationalCodeImageVersion_GEN1.MinorVersion;
-               product_info->FirmwareBuildNumber       = 
OperationalCodeImageVersion_GEN1.BuildNumber;
+               product_info->FirmwareBuildNumber       = 
cpu_to_le16(OperationalCodeImageVersion_GEN1.BuildNumber);
                product_info->iDownloadFile             = EDGE_DOWNLOAD_FILE_I930;
        }
 
@@ -729,10 +729,10 @@
        dbg("  BoardRev              %x", product_info->BoardRev);
        dbg("  BootMajorVersion      %d.%d.%d", product_info->BootMajorVersion,
            product_info->BootMinorVersion,
-           product_info->BootBuildNumber);
+           le16_to_cpu(product_info->BootBuildNumber));
        dbg("  FirmwareMajorVersion  %d.%d.%d", product_info->FirmwareMajorVersion,
            product_info->FirmwareMinorVersion,
-           product_info->FirmwareBuildNumber);
+           le16_to_cpu(product_info->FirmwareBuildNumber));
        dbg("  ManufactureDescDate   %d/%d/%d", product_info->ManufactureDescDate[0],
            product_info->ManufactureDescDate[1],
            product_info->ManufactureDescDate[2]+1900);
@@ -2326,7 +2326,7 @@
        __u16 current_length;
        unsigned char *transfer_buffer;
 
-//     dbg("%s - %x, %x, %d", __FUNCTION__, extAddr, addr, length);
+       dbg("%s - %x, %x, %d", __FUNCTION__, extAddr, addr, length);
 
        transfer_buffer =  kmalloc (64, GFP_KERNEL);
        if (!transfer_buffer) {
@@ -2811,12 +2811,13 @@
  *     Turns a string from Unicode into ASCII.
  *     Doesn't do a good job with any characters that are outside the normal
  *     ASCII range, but it's only for debugging...
+ *     NOTE: expects the unicode in LE format
  ****************************************************************************/
 static void unicode_to_ascii (char *string, short *unicode, int unicode_size)
 {
        int i;
        for (i = 0; i < unicode_size; ++i) {
-               string[i] = (char)(unicode[i]);
+               string[i] = (char)(le16_to_cpu(unicode[i]));
        }
        string[unicode_size] = 0x00;
 }
@@ -2880,11 +2881,11 @@
                dev_err(&edge_serial->serial->dev->dev, "error in getting boot 
descriptor\n");
        } else {
                dbg("**Boot Descriptor:");
-               dbg("  BootCodeLength: %d", 
edge_serial->boot_descriptor.BootCodeLength);
+               dbg("  BootCodeLength: %d", 
le16_to_cpu(edge_serial->boot_descriptor.BootCodeLength));
                dbg("  MajorVersion:   %d", edge_serial->boot_descriptor.MajorVersion);
                dbg("  MinorVersion:   %d", edge_serial->boot_descriptor.MinorVersion);
-               dbg("  BuildNumber:    %d", edge_serial->boot_descriptor.BuildNumber);
-               dbg("  Capabilities:   0x%x", 
edge_serial->boot_descriptor.Capabilities);
+               dbg("  BuildNumber:    %d", 
le16_to_cpu(edge_serial->boot_descriptor.BuildNumber));
+               dbg("  Capabilities:   0x%x", 
le16_to_cpu(edge_serial->boot_descriptor.Capabilities));
                dbg("  UConfig0:       %d", edge_serial->boot_descriptor.UConfig0);
                dbg("  UConfig1:       %d", edge_serial->boot_descriptor.UConfig1);
        }
@@ -2936,12 +2937,12 @@
 
        for (;;) {
                record = (struct edge_firmware_image_record *)firmware;
-               response = sram_write (edge_serial->serial, record->ExtAddr, 
record->Addr, record->Len, &record->Data[0]);
+               response = sram_write (edge_serial->serial, 
le16_to_cpu(record->ExtAddr), le16_to_cpu(record->Addr), le16_to_cpu(record->Len), 
&record->Data[0]);
                if (response < 0) {
-                       dev_err(&edge_serial->serial->dev->dev, "sram_write failed 
(%x, %x, %d)\n", record->ExtAddr, record->Addr, record->Len);
+                       dev_err(&edge_serial->serial->dev->dev, "sram_write failed 
(%x, %x, %d)\n", le16_to_cpu(record->ExtAddr), le16_to_cpu(record->Addr), record->Len);
                        break;
                }
-               firmware += sizeof (struct edge_firmware_image_record) + record->Len;
+               firmware += sizeof (struct edge_firmware_image_record) + 
le16_to_cpu(record->Len);
                if (firmware >= &FirmwareImage[ImageSize]) {
                        break;
                }



-------------------------------------------------------
This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger 
for complex code. Debugging C/C++ programs can leave you feeling lost and 
disoriented. TotalView can help you find your way. Available on major UNIX 
and Linux platforms. Try it free. www.etnus.com
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to