<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">ChangeSet 1.1068.7.3, 2003/03/05 11:44:45-08:00, andre.breiler@null-mx.org

[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		= &amp;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		= &amp;BootCodeImage_GEN2[0];
 			BootSize		= sizeof( BootCodeImage_GEN2 );
 			break;
@@ -542,26 +542,26 @@
 	// Check Boot Image Version
 	BootCurVer = (edge_serial-&gt;boot_descriptor.MajorVersion &lt;&lt; 24) +
 		     (edge_serial-&gt;boot_descriptor.MinorVersion &lt;&lt; 16) +
-		      edge_serial-&gt;boot_descriptor.BuildNumber;
+		      le16_to_cpu(edge_serial-&gt;boot_descriptor.BuildNumber);
 
 	BootNewVer = (BootMajorVersion &lt;&lt; 24) +
 		     (BootMinorVersion &lt;&lt; 16) +
-		      BootBuildNumber;
+		      le16_to_cpu(BootBuildNumber);
 
 	dbg("Current Boot Image version %d.%d.%d",
 	    edge_serial-&gt;boot_descriptor.MajorVersion,
 	    edge_serial-&gt;boot_descriptor.MinorVersion,
-	    edge_serial-&gt;boot_descriptor.BuildNumber);
+	    le16_to_cpu(edge_serial-&gt;boot_descriptor.BuildNumber));
 
 
 	if (BootNewVer &gt; BootCurVer) {
 		dbg("**Update Boot Image from %d.%d.%d to %d.%d.%d",
 		    edge_serial-&gt;boot_descriptor.MajorVersion,
 		    edge_serial-&gt;boot_descriptor.MinorVersion,
-		    edge_serial-&gt;boot_descriptor.BuildNumber,
+		    le16_to_cpu(edge_serial-&gt;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-&gt;serial, record-&gt;ExtAddr, record-&gt;Addr, record-&gt;Len, &amp;record-&gt;Data[0]);
+			response = rom_write (edge_serial-&gt;serial, le16_to_cpu(record-&gt;ExtAddr), le16_to_cpu(record-&gt;Addr), le16_to_cpu(record-&gt;Len), &amp;record-&gt;Data[0]);
 			if (response &lt; 0) {
-				dev_err(&amp;edge_serial-&gt;serial-&gt;dev-&gt;dev, "sram_write failed (%x, %x, %d)\n", record-&gt;ExtAddr, record-&gt;Addr, record-&gt;Len);
+				dev_err(&amp;edge_serial-&gt;serial-&gt;dev-&gt;dev, "rom_write failed (%x, %x, %d)\n", le16_to_cpu(record-&gt;ExtAddr), le16_to_cpu(record-&gt;Addr), le16_to_cpu(record-&gt;Len));
 				break;
 			}
-			firmware += sizeof (struct edge_firmware_image_record) + record-&gt;Len;
+			firmware += sizeof (struct edge_firmware_image_record) + le16_to_cpu(record-&gt;Len);
 			if (firmware &gt;= &amp;BootImage[BootSize]) {
 				break;
 			}
@@ -678,12 +678,12 @@
 	if (edge_serial-&gt;serial-&gt;dev-&gt;descriptor.idProduct &amp; ION_DEVICE_ID_GENERATION_2) {
 		product_info-&gt;FirmwareMajorVersion	= OperationalCodeImageVersion_GEN2.MajorVersion;
 		product_info-&gt;FirmwareMinorVersion	= OperationalCodeImageVersion_GEN2.MinorVersion;
-		product_info-&gt;FirmwareBuildNumber	= OperationalCodeImageVersion_GEN2.BuildNumber;
+		product_info-&gt;FirmwareBuildNumber	= cpu_to_le16(OperationalCodeImageVersion_GEN2.BuildNumber);
 		product_info-&gt;iDownloadFile		= EDGE_DOWNLOAD_FILE_80251;
 	} else {
 		product_info-&gt;FirmwareMajorVersion	= OperationalCodeImageVersion_GEN1.MajorVersion;
 		product_info-&gt;FirmwareMinorVersion	= OperationalCodeImageVersion_GEN1.MinorVersion;
-		product_info-&gt;FirmwareBuildNumber	= OperationalCodeImageVersion_GEN1.BuildNumber;
+		product_info-&gt;FirmwareBuildNumber	= cpu_to_le16(OperationalCodeImageVersion_GEN1.BuildNumber);
 		product_info-&gt;iDownloadFile		= EDGE_DOWNLOAD_FILE_I930;
 	}
 
@@ -729,10 +729,10 @@
 	dbg("  BoardRev              %x", product_info-&gt;BoardRev);
 	dbg("  BootMajorVersion      %d.%d.%d", product_info-&gt;BootMajorVersion,
 	    product_info-&gt;BootMinorVersion,
-	    product_info-&gt;BootBuildNumber);
+	    le16_to_cpu(product_info-&gt;BootBuildNumber));
 	dbg("  FirmwareMajorVersion  %d.%d.%d", product_info-&gt;FirmwareMajorVersion,
 	    product_info-&gt;FirmwareMinorVersion,
-	    product_info-&gt;FirmwareBuildNumber);
+	    le16_to_cpu(product_info-&gt;FirmwareBuildNumber));
 	dbg("  ManufactureDescDate   %d/%d/%d", product_info-&gt;ManufactureDescDate[0],
 	    product_info-&gt;ManufactureDescDate[1],
 	    product_info-&gt;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 &lt; 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(&amp;edge_serial-&gt;serial-&gt;dev-&gt;dev, "error in getting boot descriptor\n");
 	} else {
 		dbg("**Boot Descriptor:");
-		dbg("  BootCodeLength: %d", edge_serial-&gt;boot_descriptor.BootCodeLength);
+		dbg("  BootCodeLength: %d", le16_to_cpu(edge_serial-&gt;boot_descriptor.BootCodeLength));
 		dbg("  MajorVersion:   %d", edge_serial-&gt;boot_descriptor.MajorVersion);
 		dbg("  MinorVersion:   %d", edge_serial-&gt;boot_descriptor.MinorVersion);
-		dbg("  BuildNumber:    %d", edge_serial-&gt;boot_descriptor.BuildNumber);
-		dbg("  Capabilities:   0x%x", edge_serial-&gt;boot_descriptor.Capabilities);
+		dbg("  BuildNumber:    %d", le16_to_cpu(edge_serial-&gt;boot_descriptor.BuildNumber));
+		dbg("  Capabilities:   0x%x", le16_to_cpu(edge_serial-&gt;boot_descriptor.Capabilities));
 		dbg("  UConfig0:       %d", edge_serial-&gt;boot_descriptor.UConfig0);
 		dbg("  UConfig1:       %d", edge_serial-&gt;boot_descriptor.UConfig1);
 	}
@@ -2936,12 +2937,12 @@
 
 	for (;;) {
 		record = (struct edge_firmware_image_record *)firmware;
-		response = sram_write (edge_serial-&gt;serial, record-&gt;ExtAddr, record-&gt;Addr, record-&gt;Len, &amp;record-&gt;Data[0]);
+		response = sram_write (edge_serial-&gt;serial, le16_to_cpu(record-&gt;ExtAddr), le16_to_cpu(record-&gt;Addr), le16_to_cpu(record-&gt;Len), &amp;record-&gt;Data[0]);
 		if (response &lt; 0) {
-			dev_err(&amp;edge_serial-&gt;serial-&gt;dev-&gt;dev, "sram_write failed (%x, %x, %d)\n", record-&gt;ExtAddr, record-&gt;Addr, record-&gt;Len);
+			dev_err(&amp;edge_serial-&gt;serial-&gt;dev-&gt;dev, "sram_write failed (%x, %x, %d)\n", le16_to_cpu(record-&gt;ExtAddr), le16_to_cpu(record-&gt;Addr), record-&gt;Len);
 			break;
 		}
-		firmware += sizeof (struct edge_firmware_image_record) + record-&gt;Len;
+		firmware += sizeof (struct edge_firmware_image_record) + le16_to_cpu(record-&gt;Len);
 		if (firmware &gt;= &amp;FirmwareImage[ImageSize]) {
 			break;
 		}
</pre></body></html>