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