Jon's patch needed to get synced with the latest RNDIS code,
so testing by someone with a big-endian CPU would be good.
Seemed like more patches would be needed anyway, since that
ppc config would only ping in one direction!
- Dave
Add byteswapping. Original version sort-of-worked on PPC with Net2280,
this version applies to the latest RNDIS code but hasn't been tested on
big-endian. Ping should be working in at least one one direction.
From: Jon Neal <[EMAIL PROTECTED]>
Signed-off-by: David Brownell <[EMAIL PROTECTED]>
--- 1.9/drivers/usb/gadget/rndis.c Mon May 17 20:39:31 2004
+++ edited/drivers/usb/gadget/rndis.c Sun Jun 6 15:54:51 2004
@@ -18,6 +18,9 @@
*
* 03/25/2004 Kai-Uwe Bloem <[EMAIL PROTECTED]>
* Fixed rndis_rm_hdr length bug.
+ *
+ * Copyright (C) 2004 by David Brownell
+ * updates to merge with Linux 2.6, better match RNDIS spec
*/
#include <linux/config.h>
@@ -49,10 +52,6 @@
* and will be happier if you provide the host_addr module parameter.
*/
-#ifndef __LITTLE_ENDIAN
-#warning this code is missing all cpu_to_leXX() calls ...
-#endif
-
#if 0
#define DEBUG(str,args...) do { \
if (rndis_debug) \
@@ -95,6 +94,8 @@
{
int retval = -ENOTSUPP;
u32 length = 0;
+ u32 *tmp;
+ int i, count;
rndis_query_cmplt_type *resp;
if (!r) return -ENOMEM;
@@ -110,7 +111,10 @@
case OID_GEN_SUPPORTED_LIST:
DEBUG ("%s: OID_GEN_SUPPORTED_LIST\n", __FUNCTION__);
length = sizeof (oid_supported_list);
- memcpy ((u8 *) resp + 24, oid_supported_list, length);
+ count = length / sizeof (u32);
+ tmp = (u32 *) ((u8 *)resp + 24);
+ for (i = 0; i < count; i++)
+ tmp[i] = cpu_to_le32 (oid_supported_list[i]);
retval = 0;
break;
@@ -124,7 +128,7 @@
* reddite ergo quae sunt Caesaris Caesari
* et quae sunt Dei Deo!
*/
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
break;
@@ -132,7 +136,8 @@
case OID_GEN_MEDIA_SUPPORTED:
DEBUG("%s: OID_GEN_MEDIA_SUPPORTED\n", __FUNCTION__);
length = 4;
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].medium;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr].medium);
retval = 0;
break;
@@ -141,20 +146,21 @@
DEBUG("%s: OID_GEN_MEDIA_IN_USE\n", __FUNCTION__);
length = 4;
/* one medium, one transport... (maybe you do it better) */
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].medium;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr].medium);
retval = 0;
break;
-
+
/* mandatory */
case OID_GEN_MAXIMUM_FRAME_SIZE:
DEBUG("%s: OID_GEN_MAXIMUM_FRAME_SIZE\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].dev) {
length = 4;
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr]
- .dev->mtu;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr].dev->mtu);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -165,9 +171,10 @@
length = 4;
if (rndis_per_dev_params [configNr].media_state
== NDIS_MEDIA_STATE_DISCONNECTED)
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
else
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].speed;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr].speed);
retval = 0;
break;
@@ -176,8 +183,8 @@
DEBUG("%s: OID_GEN_TRANSMIT_BLOCK_SIZE\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].dev) {
length = 4;
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr]
- .dev->mtu;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr].dev->mtu);
retval = 0;
}
break;
@@ -187,8 +194,8 @@
DEBUG("%s: OID_GEN_RECEIVE_BLOCK_SIZE\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].dev) {
length = 4;
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr]
- .dev->mtu;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr].dev->mtu);
retval = 0;
}
break;
@@ -197,7 +204,8 @@
case OID_GEN_VENDOR_ID:
DEBUG("%s: OID_GEN_VENDOR_ID\n", __FUNCTION__);
length = 4;
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].vendorID;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr].vendorID);
retval = 0;
break;
@@ -213,6 +221,7 @@
case OID_GEN_VENDOR_DRIVER_VERSION:
DEBUG("%s: OID_GEN_VENDOR_DRIVER_VERSION\n", __FUNCTION__);
length = 4;
+ /* Created as LE */
*((u32 *) resp + 6) = rndis_driver_version;
retval = 0;
break;
@@ -221,7 +230,8 @@
case OID_GEN_CURRENT_PACKET_FILTER:
DEBUG("%s: OID_GEN_CURRENT_PACKET_FILTER\n", __FUNCTION__);
length = 4;
- *((u32 *) resp + 6) = rndis_per_dev_params[configNr].filter;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params[configNr].filter);
retval = 0;
break;
@@ -229,7 +239,8 @@
case OID_GEN_MAXIMUM_TOTAL_SIZE:
DEBUG("%s: OID_GEN_MAXIMUM_TOTAL_SIZE\n", __FUNCTION__);
length = 4;
- *((u32 *) resp + 6) = RNDIS_MAX_TOTAL_SIZE;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32(
+ RNDIS_MAX_TOTAL_SIZE);
retval = 0;
break;
@@ -237,32 +248,33 @@
case OID_GEN_MEDIA_CONNECT_STATUS:
DEBUG("%s: OID_GEN_MEDIA_CONNECT_STATUS\n", __FUNCTION__);
length = 4;
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr]
- .media_state;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .media_state);
retval = 0;
break;
-
+
case OID_GEN_PHYSICAL_MEDIUM:
DEBUG("%s: OID_GEN_PHYSICAL_MEDIUM\n", __FUNCTION__);
length = 4;
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
break;
/* statistics OIDs (table 4-2) */
-
+
/* mandatory */
case OID_GEN_XMIT_OK:
DEBUG("%s: OID_GEN_XMIT_OK\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
length = 4;
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr]
- .stats->tx_packets -
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr].stats->tx_packets -
rndis_per_dev_params [configNr].stats->tx_errors -
- rndis_per_dev_params [configNr].stats->tx_dropped;
+ rndis_per_dev_params [configNr].stats->tx_dropped);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -272,13 +284,13 @@
DEBUG("%s: OID_GEN_RCV_OK\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
length = 4;
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->rx_packets -
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr].stats->rx_packets -
rndis_per_dev_params [configNr].stats->rx_errors -
- rndis_per_dev_params [configNr].stats->rx_dropped;
+ rndis_per_dev_params [configNr].stats->rx_dropped);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -288,11 +300,12 @@
DEBUG("%s: OID_GEN_XMIT_ERROR\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
length = 4;
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->tx_errors;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->tx_errors);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -301,11 +314,12 @@
case OID_GEN_RCV_ERROR:
DEBUG("%s: OID_GEN_RCV_ERROR\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->rx_errors;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->rx_errors);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -314,11 +328,12 @@
case OID_GEN_RCV_NO_BUFFER:
DEBUG("%s: OID_GEN_RCV_NO_BUFFER\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->rx_dropped;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->rx_dropped);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -333,14 +348,17 @@
*/
if (rndis_per_dev_params [configNr].stats) {
length = 4;
- *((u32 *) resp + 6) = (rndis_per_dev_params [configNr].
- stats->tx_packets -
- rndis_per_dev_params [configNr].stats->tx_errors -
- rndis_per_dev_params [configNr].stats->tx_dropped)
- *123;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ (rndis_per_dev_params [configNr]
+ .stats->tx_packets -
+ rndis_per_dev_params [configNr]
+ .stats->tx_errors -
+ rndis_per_dev_params [configNr]
+ .stats->tx_dropped)
+ * 123);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -350,14 +368,17 @@
/* dito */
if (rndis_per_dev_params [configNr].stats) {
length = 4;
- *((u32 *) resp + 6) = (rndis_per_dev_params [configNr].
- stats->tx_packets -
- rndis_per_dev_params [configNr].stats->tx_errors -
- rndis_per_dev_params [configNr].stats->tx_dropped)
- /123;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ (rndis_per_dev_params [configNr]
+ .stats->tx_packets -
+ rndis_per_dev_params [configNr]
+ .stats->tx_errors -
+ rndis_per_dev_params [configNr]
+ .stats->tx_dropped)
+ / 123);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -365,11 +386,12 @@
case OID_GEN_MULTICAST_BYTES_XMIT:
DEBUG("%s: OID_GEN_MULTICAST_BYTES_XMIT\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->multicast*1234;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->multicast*1234);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -377,11 +399,12 @@
case OID_GEN_MULTICAST_FRAMES_XMIT:
DEBUG("%s: OID_GEN_MULTICAST_FRAMES_XMIT\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->multicast;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->multicast);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -389,11 +412,12 @@
case OID_GEN_BROADCAST_BYTES_XMIT:
DEBUG("%s: OID_GEN_BROADCAST_BYTES_XMIT\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->tx_packets/42*255;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->tx_packets/42*255);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -401,35 +425,37 @@
case OID_GEN_BROADCAST_FRAMES_XMIT:
DEBUG("%s: OID_GEN_BROADCAST_FRAMES_XMIT\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->tx_packets/42;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->tx_packets/42);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
case OID_GEN_DIRECTED_BYTES_RCV:
DEBUG("%s: OID_GEN_DIRECTED_BYTES_RCV\n", __FUNCTION__);
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
break;
case OID_GEN_DIRECTED_FRAMES_RCV:
DEBUG("%s: OID_GEN_DIRECTED_FRAMES_RCV\n", __FUNCTION__);
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
break;
case OID_GEN_MULTICAST_BYTES_RCV:
DEBUG("%s: OID_GEN_MULTICAST_BYTES_RCV\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->multicast*1111;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->multicast * 1111);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -437,11 +463,12 @@
case OID_GEN_MULTICAST_FRAMES_RCV:
DEBUG("%s: OID_GEN_MULTICAST_FRAMES_RCV\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->multicast;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->multicast);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -449,11 +476,12 @@
case OID_GEN_BROADCAST_BYTES_RCV:
DEBUG("%s: OID_GEN_BROADCAST_BYTES_RCV\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->rx_packets/42*255;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->rx_packets/42*255);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -461,11 +489,12 @@
case OID_GEN_BROADCAST_FRAMES_RCV:
DEBUG("%s: OID_GEN_BROADCAST_FRAMES_RCV\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->rx_packets/42;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->rx_packets/42);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -473,18 +502,19 @@
case OID_GEN_RCV_CRC_ERROR:
DEBUG("%s: OID_GEN_RCV_CRC_ERROR\n", __FUNCTION__);
if (rndis_per_dev_params [configNr].stats) {
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr].
- stats->rx_crc_errors;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->rx_crc_errors);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
case OID_GEN_TRANSMIT_QUEUE_LENGTH:
DEBUG("%s: OID_GEN_TRANSMIT_QUEUE_LENGTH\n", __FUNCTION__);
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
break;
#endif /* RNDIS_OPTIONAL_STATS */
@@ -501,7 +531,7 @@
length);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -523,7 +553,7 @@
DEBUG("%s: OID_802_3_MULTICAST_LIST\n", __FUNCTION__);
length = 4;
/* Multicast base address only */
- *((u32 *) resp + 6) = 0xE0000000;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0xE0000000);
retval = 0;
break;
@@ -532,10 +562,10 @@
DEBUG("%s: OID_802_3_MAXIMUM_LIST_SIZE\n", __FUNCTION__);
length = 4;
/* Multicast base address only */
- *((u32 *) resp + 6) = 1;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (1);
retval = 0;
break;
-
+
case OID_802_3_MAC_OPTIONS:
DEBUG("%s: OID_802_3_MAC_OPTIONS\n", __FUNCTION__);
break;
@@ -548,8 +578,9 @@
if (rndis_per_dev_params [configNr].stats)
{
length = 4;
- *((u32 *) resp + 6) = rndis_per_dev_params [configNr]
- .stats->rx_frame_errors;
+ *((u32 *) resp + 6) = cpu_to_le32 (
+ rndis_per_dev_params [configNr]
+ .stats->rx_frame_errors);
retval = 0;
}
break;
@@ -558,7 +589,7 @@
case OID_802_3_XMIT_ONE_COLLISION:
DEBUG("%s: OID_802_3_XMIT_ONE_COLLISION\n", __FUNCTION__);
length = 4;
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
break;
@@ -566,7 +597,7 @@
case OID_802_3_XMIT_MORE_COLLISIONS:
DEBUG("%s: OID_802_3_XMIT_MORE_COLLISIONS\n", __FUNCTION__);
length = 4;
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
break;
@@ -642,9 +673,9 @@
__FUNCTION__, OID);
}
- resp->InformationBufferOffset = 16;
- resp->InformationBufferLength = length;
- resp->MessageLength = 24 + length;
+ resp->InformationBufferOffset = __constant_cpu_to_le32 (16);
+ resp->InformationBufferLength = cpu_to_le32 (length);
+ resp->MessageLength = cpu_to_le32 (24 + length);
r->length = 24 + length;
return retval;
}
@@ -655,7 +686,6 @@
rndis_set_cmplt_type *resp;
int i, retval = -ENOTSUPP;
struct rndis_params *params;
- u8 *cp;
if (!r)
return -ENOMEM;
@@ -663,8 +693,6 @@
if (!resp)
return -ENOMEM;
- cp = (u8 *)resp;
-
DEBUG("set OID %08x value, len %d:\n", OID, buf_len);
for (i = 0; i < buf_len; i += 16) {
DEBUG ("%03d: "
@@ -695,7 +723,7 @@
* PROMISCUOUS, DIRECTED,
* MULTICAST, ALL_MULTICAST, BROADCAST
*/
- params->filter = *(u32 *)buf;
+ params->filter = cpu_to_le32p((u32 *)buf);
DEBUG("%s: OID_GEN_CURRENT_PACKET_FILTER %08x\n",
__FUNCTION__, params->filter);
@@ -727,7 +755,7 @@
param = (struct rndis_config_parameter *) buf;
DEBUG("%s: OID_GEN_RNDIS_CONFIG_PARAMETER '%*s'\n",
__FUNCTION__,
- param->ParameterNameLength,
+ min(cpu_to_le32(param->ParameterNameLength),80),
buf + param->ParameterNameOffset);
retval = 0;
}
@@ -778,22 +806,24 @@
if (!resp) return -ENOMEM;
- resp->MessageType = REMOTE_NDIS_INITIALIZE_CMPLT;
- resp->MessageLength = 52;
- resp->RequestID = buf->RequestID;
- resp->Status = RNDIS_STATUS_SUCCESS;
- resp->MajorVersion = RNDIS_MAJOR_VERSION;
- resp->MinorVersion = RNDIS_MINOR_VERSION;
- resp->DeviceFlags = RNDIS_DF_CONNECTIONLESS;
- resp->Medium = RNDIS_MEDIUM_802_3;
- resp->MaxPacketsPerTransfer = 1;
- resp->MaxTransferSize = rndis_per_dev_params [configNr].dev->mtu
+ resp->MessageType = __constant_cpu_to_le32 (
+ REMOTE_NDIS_INITIALIZE_CMPLT);
+ resp->MessageLength = __constant_cpu_to_le32 (52);
+ resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
+ resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);
+ resp->MajorVersion = __constant_cpu_to_le32 (RNDIS_MAJOR_VERSION);
+ resp->MinorVersion = __constant_cpu_to_le32 (RNDIS_MINOR_VERSION);
+ resp->DeviceFlags = __constant_cpu_to_le32 (RNDIS_DF_CONNECTIONLESS);
+ resp->Medium = __constant_cpu_to_le32 (RNDIS_MEDIUM_802_3);
+ resp->MaxPacketsPerTransfer = __constant_cpu_to_le32 (1);
+ resp->MaxTransferSize = cpu_to_le32 (
+ rndis_per_dev_params [configNr].dev->mtu
+ sizeof (struct ethhdr)
+ sizeof (struct rndis_packet_msg_type)
- + 22;
- resp->PacketAlignmentFactor = 0;
- resp->AFListOffset = 0;
- resp->AFListSize = 0;
+ + 22);
+ resp->PacketAlignmentFactor = __constant_cpu_to_le32 (0);
+ resp->AFListOffset = __constant_cpu_to_le32 (0);
+ resp->AFListSize = __constant_cpu_to_le32 (0);
if (rndis_per_dev_params [configNr].ack)
rndis_per_dev_params [configNr].ack (
@@ -807,7 +837,7 @@
rndis_query_cmplt_type *resp;
rndis_resp_t *r;
- // DEBUG("%s: OID = %08X\n", __FUNCTION__, buf->OID);
+ // DEBUG("%s: OID = %08X\n", __FUNCTION__, cpu_to_le32(buf->OID));
if (!rndis_per_dev_params [configNr].dev) return -ENOTSUPP;
/*
@@ -821,17 +851,18 @@
if (!resp) return -ENOMEM;
- resp->MessageType = REMOTE_NDIS_QUERY_CMPLT;
- resp->MessageLength = 24;
- resp->RequestID = buf->RequestID;
+ resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_QUERY_CMPLT);
+ resp->MessageLength = __constant_cpu_to_le32 (24);
+ resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
- if (gen_ndis_query_resp (configNr, buf->OID, r)) {
+ if (gen_ndis_query_resp (configNr, cpu_to_le32 (buf->OID), r)) {
/* OID not supported */
- resp->Status = RNDIS_STATUS_NOT_SUPPORTED;
- resp->InformationBufferLength = 0;
- resp->InformationBufferOffset = 0;
+ resp->Status = __constant_cpu_to_le32 (
+ RNDIS_STATUS_NOT_SUPPORTED);
+ resp->InformationBufferLength = __constant_cpu_to_le32 (0);
+ resp->InformationBufferOffset = __constant_cpu_to_le32 (0);
} else
- resp->Status = RNDIS_STATUS_SUCCESS;
+ resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);
if (rndis_per_dev_params [configNr].ack)
rndis_per_dev_params [configNr].ack (
@@ -841,6 +872,7 @@
static int rndis_set_response (int configNr, rndis_set_msg_type *buf)
{
+ u32 BufLength, BufOffset;
rndis_set_cmplt_type *resp;
rndis_resp_t *r;
@@ -850,30 +882,32 @@
resp = (rndis_set_cmplt_type *) r->buf;
if (!resp) return -ENOMEM;
+ BufLength = cpu_to_le32 (buf->InformationBufferLength);
+ BufOffset = cpu_to_le32 (buf->InformationBufferOffset);
+
#ifdef VERBOSE
- DEBUG("%s: Length: %d\n", __FUNCTION__, buf->InformationBufferLength);
- DEBUG("%s: Offset: %d\n", __FUNCTION__, buf->InformationBufferOffset);
+ DEBUG("%s: Length: %d\n", __FUNCTION__, BufLength);
+ DEBUG("%s: Offset: %d\n", __FUNCTION__, BufOffset);
DEBUG("%s: InfoBuffer: ", __FUNCTION__);
- for (i = 0; i < buf->InformationBufferLength; i++) {
- DEBUG ("%02x ", *(((u8 *) buf) + i + 12 +
- buf->InformationBufferOffset));
+ for (i = 0; i < BufLength; i++) {
+ DEBUG ("%02x ", *(((u8 *) buf) + i + 8 + BufOffset));
}
DEBUG ("\n");
#endif
-
- resp->MessageType = REMOTE_NDIS_SET_CMPLT;
- resp->MessageLength = 16;
- resp->RequestID = buf->RequestID;
- if (gen_ndis_set_resp (configNr, buf->OID,
- ((u8 *) buf) + 28,
- buf->InformationBufferLength, r))
- resp->Status = RNDIS_STATUS_NOT_SUPPORTED;
- else resp->Status = RNDIS_STATUS_SUCCESS;
+
+ resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_SET_CMPLT);
+ resp->MessageLength = __constant_cpu_to_le32 (16);
+ resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
+ if (gen_ndis_set_resp (configNr, cpu_to_le32 (buf->OID),
+ ((u8 *) buf) + 8 + BufOffset, BufLength, r))
+ resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_NOT_SUPPORTED);
+ else resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);
if (rndis_per_dev_params [configNr].ack)
- rndis_per_dev_params [configNr].ack (rndis_per_dev_params [configNr].dev);
+ rndis_per_dev_params [configNr].ack (
+ rndis_per_dev_params [configNr].dev);
return 0;
}
@@ -889,10 +923,11 @@
resp = (rndis_reset_cmplt_type *) r->buf;
if (!resp) return -ENOMEM;
- resp->MessageType = REMOTE_NDIS_RESET_CMPLT;
- resp->MessageLength = 16;
- resp->Status = RNDIS_STATUS_SUCCESS;
- resp->AddressingReset = 1; /* resent information */
+ resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_RESET_CMPLT);
+ resp->MessageLength = __constant_cpu_to_le32 (16);
+ resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);
+ /* resent information */
+ resp->AddressingReset = __constant_cpu_to_le32 (1);
if (rndis_per_dev_params [configNr].ack)
rndis_per_dev_params [configNr].ack (
@@ -913,10 +948,11 @@
resp = (rndis_keepalive_cmplt_type *) r->buf;
if (!resp) return -ENOMEM;
- resp->MessageType = REMOTE_NDIS_KEEPALIVE_CMPLT;
- resp->MessageLength = 16;
- resp->RequestID = buf->RequestID;
- resp->Status = RNDIS_STATUS_SUCCESS;
+ resp->MessageType = __constant_cpu_to_le32 (
+ REMOTE_NDIS_KEEPALIVE_CMPLT);
+ resp->MessageLength = __constant_cpu_to_le32 (16);
+ resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
+ resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);
if (rndis_per_dev_params [configNr].ack)
rndis_per_dev_params [configNr].ack (
@@ -944,11 +980,12 @@
resp = (rndis_indicate_status_msg_type *) r->buf;
if (!resp) return -ENOMEM;
- resp->MessageType = REMOTE_NDIS_INDICATE_STATUS_MSG;
- resp->MessageLength = 20;
- resp->Status = status;
- resp->StatusBufferLength = 0;
- resp->StatusBufferOffset = 0;
+ resp->MessageType = __constant_cpu_to_le32 (
+ REMOTE_NDIS_INDICATE_STATUS_MSG);
+ resp->MessageLength = __constant_cpu_to_le32 (20);
+ resp->Status = cpu_to_le32 (status);
+ resp->StatusBufferLength = __constant_cpu_to_le32 (0);
+ resp->StatusBufferOffset = __constant_cpu_to_le32 (0);
if (rndis_per_dev_params [configNr].ack)
rndis_per_dev_params [configNr].ack (
@@ -989,8 +1026,8 @@
return -ENOMEM;
tmp = (u32 *) buf;
- MsgType = *tmp;
- MsgLength = *(tmp + 1);
+ MsgType = cpu_to_le32p(tmp++);
+ MsgLength = cpu_to_le32p(tmp++);
if (configNr >= RNDIS_MAX_CONFIGS)
return -ENOTSUPP;
@@ -1138,10 +1175,10 @@
if (!skb) return;
skb_push (skb, sizeof (struct rndis_packet_msg_type));
memset (skb->data, 0, sizeof (struct rndis_packet_msg_type));
- *((u32 *) skb->data) = 1;
- *((u32 *) skb->data + 1) = skb->len;
- *((u32 *) skb->data + 2) = 36;
- *((u32 *) skb->data + 3) = skb->len - 44;
+ *((u32 *) skb->data) = __constant_cpu_to_le32 (1);
+ *((u32 *) skb->data + 1) = cpu_to_le32(skb->len);
+ *((u32 *) skb->data + 2) = __constant_cpu_to_le32 (36);
+ *((u32 *) skb->data + 3) = cpu_to_le32(skb->len - 44);
return;
}
@@ -1201,14 +1238,16 @@
int rndis_rm_hdr (u8 *buf, u32 *length)
{
- u32 i, messageLen, dataOffset;
+ u32 i, messageLen, dataOffset, *tmp;
+ tmp = (u32 *) buf;
+
if (!buf || !length) return -1;
- if (*((u32 *) buf) != 1) return -1;
-
- messageLen = *((u32 *) buf + 1);
+ if (cpu_to_le32p(tmp++) != 1) return -1;
- dataOffset = *((u32 *) buf + 2) + 8;
+ messageLen = cpu_to_le32p(tmp++);
+ dataOffset = cpu_to_le32p(tmp++) + 8;
+
if (messageLen < dataOffset || messageLen > *length) return -1;
for (i = dataOffset; i < messageLen; i++)