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++)

Reply via email to