Greg KH wrote:
On Mon, Jun 07, 2004 at 02:22:03PM -0700, David Brownell wrote:
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!
Hm, this patch does not apply. Care to rediff it again against my
latest tree, which has the other 3 patches from you in it?
Odd -- well, here you go. This swept a couple other minor
deltas, but almost all the volume is the byteswap changes.
- Dave
Add byteswapping. Original version partially worked on PPC with Net2280,
this version applies to the latest RNDIS code but hasn't been retested 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]>
A handful of other things from my BK: track suspend/resume (to eventually
implement wake-on-lan), give a better rndis error message, and add missing
declarations for PM-related OIDs (usage is #ifdeffed out by previous patch).
Signed-off-by: David Brownell <[EMAIL PROTECTED]>
--- 1.25/drivers/usb/gadget/ether.c Sun Jun 6 06:34:51 2004
+++ edited/drivers/usb/gadget/ether.c Mon Jun 7 18:32:18 2004
@@ -118,6 +118,7 @@
unsigned zlp:1;
unsigned cdc:1;
unsigned rndis:1;
+ unsigned suspended:1;
u16 cdc_filter;
unsigned long todo;
#define WORK_RX_MEMORY 0
@@ -1355,11 +1356,13 @@
static void rndis_command_complete (struct usb_ep *ep, struct usb_request *req)
{
struct eth_dev *dev = ep->driver_data;
+ int status;
/* received RNDIS command from CDC_SEND_ENCAPSULATED_COMMAND */
spin_lock(&dev->lock);
- if (rndis_msg_parser (dev->rndis_config, (u8 *) req->buf))
- ERROR(dev, "%s: rndis parse error\n", __FUNCTION__ );
+ status = rndis_msg_parser (dev->rndis_config, (u8 *) req->buf);
+ if (status < 0)
+ ERROR(dev, "%s: rndis parse error %d\n", __FUNCTION__, status);
spin_unlock(&dev->lock);
}
@@ -2561,6 +2564,26 @@
/*-------------------------------------------------------------------------*/
+static void
+eth_suspend (struct usb_gadget *gadget)
+{
+ struct eth_dev *dev = get_gadget_data (gadget);
+
+ DEBUG (dev, "suspend\n");
+ dev->suspended = 1;
+}
+
+static void
+eth_resume (struct usb_gadget *gadget)
+{
+ struct eth_dev *dev = get_gadget_data (gadget);
+
+ DEBUG (dev, "resume\n");
+ dev->suspended = 0;
+}
+
+/*-------------------------------------------------------------------------*/
+
static struct usb_gadget_driver eth_driver = {
#ifdef CONFIG_USB_GADGET_DUALSPEED
.speed = USB_SPEED_HIGH,
@@ -2573,6 +2596,9 @@
.setup = eth_setup,
.disconnect = eth_disconnect,
+
+ .suspend = eth_suspend,
+ .resume = eth_resume,
.driver = {
.name = (char *) shortname,
--- 1.1/drivers/usb/gadget/ndis.h Sat Mar 27 17:42:32 2004
+++ edited/drivers/usb/gadget/ndis.h Mon Jun 7 18:30:16 2004
@@ -26,10 +26,40 @@
#define NDIS_STATUS_MULTICAST_EXISTS 0xC001000A
#define NDIS_STATUS_MULTICAST_NOT_FOUND 0xC001000B
+enum NDIS_DEVICE_POWER_STATE {
+ NdisDeviceStateUnspecified = 0,
+ NdisDeviceStateD0,
+ NdisDeviceStateD1,
+ NdisDeviceStateD2,
+ NdisDeviceStateD3,
+ NdisDeviceStateMaximum
+};
+
+struct NDIS_PM_WAKE_UP_CAPABILITIES {
+ enum NDIS_DEVICE_POWER_STATE MinMagicPacketWakeUp;
+ enum NDIS_DEVICE_POWER_STATE MinPatternWakeUp;
+ enum NDIS_DEVICE_POWER_STATE MinLinkChangeWakeUp;
+};
+
/* NDIS_PNP_CAPABILITIES.Flags constants */
#define NDIS_DEVICE_WAKE_UP_ENABLE 0x00000001
#define NDIS_DEVICE_WAKE_ON_PATTERN_MATCH_ENABLE 0x00000002
#define NDIS_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE 0x00000004
+
+struct NDIS_PNP_CAPABILITIES {
+ u32 Flags;
+ struct NDIS_PM_WAKE_UP_CAPABILITIES WakeUpCapabilities;
+};
+
+struct NDIS_PM_PACKET_PATTERN {
+ u32 Priority;
+ u32 Reserved;
+ u32 MaskSize;
+ u32 PatternOffset;
+ u32 PatternSize;
+ u32 PatternFlags;
+};
+
/* Required Object IDs (OIDs) */
#define OID_GEN_SUPPORTED_LIST 0x00010101
--- 1.7/drivers/usb/gadget/rndis.c Mon Jun 7 07:04:50 2004
+++ edited/drivers/usb/gadget/rndis.c Mon Jun 7 18:30:16 2004
@@ -52,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) \
@@ -98,6 +94,8 @@
{
int retval = -ENOTSUPP;
u32 length = 0;
+ u32 *tmp;
+ int i, count;
rndis_query_cmplt_type *resp;
if (!r) return -ENOMEM;
@@ -113,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;
@@ -127,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;
@@ -135,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;
@@ -144,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;
@@ -168,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;
@@ -179,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;
@@ -190,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;
@@ -200,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;
@@ -216,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;
@@ -224,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;
@@ -232,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;
@@ -240,15 +248,16 @@
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;
@@ -266,19 +275,19 @@
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;
@@ -288,13 +297,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;
@@ -304,11 +313,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;
@@ -317,11 +327,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;
@@ -330,11 +341,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;
@@ -349,14 +361,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;
@@ -366,14 +381,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;
@@ -381,11 +399,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;
@@ -393,11 +412,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;
@@ -405,11 +425,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;
@@ -417,35 +438,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;
@@ -453,11 +476,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;
@@ -465,11 +489,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;
@@ -477,11 +502,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;
@@ -489,18 +515,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 */
@@ -517,7 +544,7 @@
length);
retval = 0;
} else {
- *((u32 *) resp + 6) = 0;
+ *((u32 *) resp + 6) = __constant_cpu_to_le32 (0);
retval = 0;
}
break;
@@ -539,7 +566,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;
@@ -548,10 +575,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;
@@ -564,8 +591,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;
@@ -574,7 +602,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;
@@ -582,7 +610,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;
@@ -658,9 +686,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;
}
@@ -671,7 +699,6 @@
rndis_set_cmplt_type *resp;
int i, retval = -ENOTSUPP;
struct rndis_params *params;
- u8 *cp;
if (!r)
return -ENOMEM;
@@ -679,8 +706,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: "
@@ -711,7 +736,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);
@@ -743,7 +768,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;
}
@@ -794,22 +819,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 (
@@ -823,7 +850,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;
/*
@@ -837,17 +864,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 (
@@ -857,6 +885,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;
@@ -866,30 +895,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;
}
@@ -905,10 +936,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 (
@@ -929,10 +961,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 (
@@ -960,11 +993,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 (
@@ -1005,8 +1039,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;
@@ -1158,10 +1192,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;
}
@@ -1221,14 +1255,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++)