Resuming the host made transmisison work again.  Other
than that, no problems.

So I'm poking at this driver a bit more ... that "filter flags" patch, from this morning, might help you.

But then I noticed there are a lot of OIDs in there which
are either optional (notably, for statistics) or not even
listed in the spec ... including some that aren't even found
in the "I support these OIDs" list in rndis.h!  Hence the
attached patch.

When you and Benedikt wrote this, did you actually see these
coming over the wire?  Looked to me like cut'n'paste from
some context where those OIDs were needed.  Most of them just
print a message and then fail.  This patch removes those OIDs.

Plus, some of the statistics were completely made up; it's not
Aunt Tilly's shoe size that matters, but the results of the
(non-existent) output filter!  In this patch, I removed all
those optional statistics unless someone #defines a flag,
in which case it'll also include the other statistics.  (It
turns out that RNDIS and CDC Ethernet define exactly the
same set of optional statistics.)

I also defined the OIDs related to the (mandatory) power
management and wakeup features; currently #ifdeffed out.

- Dave


rndis.c | 150 ++++++++++++---------------------------------------------------- rndis.h | 41 +++++++++++++++-- 2 files changed, 67 insertions(+), 124 deletions(-)

--- 1.7/drivers/usb/gadget/rndis.c      Mon May 17 12:38:09 2004
+++ edited/drivers/usb/gadget/rndis.c   Mon May 17 15:15:59 2004
@@ -97,6 +97,9 @@
        if (!resp) return -ENOMEM;
        
        switch (OID) {
+
+       /* general oids (table 4-1) */
+
        /* mandatory */
        case OID_GEN_SUPPORTED_LIST:
                DEBUG ("%s: OID_GEN_SUPPORTED_LIST\n", __FUNCTION__);
@@ -135,11 +138,7 @@
                *((u32 *) resp + 6) = rndis_per_dev_params [configNr].medium;
                retval = 0;
                break;
-               
-       case OID_GEN_MAXIMUM_LOOKAHEAD:
-               DEBUG("%s: OID_GEN_MAXIMUM_LOOKAHEAD\n", __FUNCTION__);
-               break;
-               
+
        /* mandatory */
        case OID_GEN_MAXIMUM_FRAME_SIZE:
                DEBUG("%s: OID_GEN_MAXIMUM_FRAME_SIZE\n", __FUNCTION__);
@@ -165,18 +164,7 @@
                    *((u32 *) resp + 6) = rndis_per_dev_params [configNr].speed;
                retval = 0;
                break;
-               
-       case OID_GEN_TRANSMIT_BUFFER_SPACE:
-               DEBUG("%s: OID_GEN_TRANSMIT_BUFFER_SPACE\n", __FUNCTION__);
-               length = 4;
-               *((u32 *) resp + 6) = 0;
-               retval = 0;
-               break;
-               
-       case OID_GEN_RECEIVE_BUFFER_SPACE:
-               DEBUG("%s: OID_GEN_RECEIVE_BUFFER_SPACE\n", __FUNCTION__);
-               break;
-               
+
        /* mandatory */
        case OID_GEN_TRANSMIT_BLOCK_SIZE:
                DEBUG("%s: OID_GEN_TRANSMIT_BLOCK_SIZE\n", __FUNCTION__);
@@ -216,6 +204,13 @@
                retval = 0;
                break;
 
+       case OID_GEN_VENDOR_DRIVER_VERSION:
+               DEBUG("%s: OID_GEN_VENDOR_DRIVER_VERSION\n", __FUNCTION__);
+               length = 4;
+               *((u32 *) resp + 6) = rndis_driver_version;
+               retval = 0;
+               break;
+
        /* mandatory */
        case OID_GEN_CURRENT_PACKET_FILTER:
                DEBUG("%s: OID_GEN_CURRENT_PACKET_FILTER\n", __FUNCTION__);
@@ -239,19 +234,7 @@
                *((u32 *) resp + 6) = RNDIS_MAX_TOTAL_SIZE;
                retval = 0;
                break;
-               
-       case OID_GEN_PROTOCOL_OPTIONS:
-               DEBUG("%s: OID_GEN_PROTOCOL_OPTIONS\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_MAC_OPTIONS:
-               DEBUG("%s: OID_GEN_MAC_OPTIONS\n", __FUNCTION__);
-               length = 4;
-               *((u32 *) resp + 6) = NDIS_MAC_OPTION_RECEIVE_SERIALIZED | 
-                   NDIS_MAC_OPTION_FULL_DUPLEX;
-               retval = 0;
-               break;
-               
+
        /* mandatory */
        case OID_GEN_MEDIA_CONNECT_STATUS:
                DEBUG("%s: OID_GEN_MEDIA_CONNECT_STATUS\n", __FUNCTION__);
@@ -261,55 +244,14 @@
                retval = 0;
                break;
                
-       case OID_GEN_MAXIMUM_SEND_PACKETS:
-               DEBUG("%s: OID_GEN_MAXIMUM_SEND_PACKETS\n", __FUNCTION__);
-               break;
-               
-       /* mandatory */
-       case OID_GEN_VENDOR_DRIVER_VERSION:
-               DEBUG("%s: OID_GEN_VENDOR_DRIVER_VERSION\n", __FUNCTION__);
-               length = 4;
-               *((u32 *) resp + 6) = rndis_driver_version;
-               retval = 0;
-               break;
-               
-       case OID_GEN_SUPPORTED_GUIDS:
-               DEBUG("%s: OID_GEN_SUPPORTED_GUIDS\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_NETWORK_LAYER_ADDRESSES:
-               DEBUG("%s: OID_GEN_NETWORK_LAYER_ADDRESSES\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_TRANSPORT_HEADER_OFFSET:
-               DEBUG("%s: OID_GEN_TRANSPORT_HEADER_OFFSET\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_MACHINE_NAME:
-               DEBUG("%s: OID_GEN_MACHINE_NAME\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_RNDIS_CONFIG_PARAMETER:
-               DEBUG("%s: OID_GEN_RNDIS_CONFIG_PARAMETER\n", __FUNCTION__);
-               length = 4;
-               *((u32 *) resp + 6) = 0;
-               retval = 0;
-               break;
-               
-       case OID_GEN_VLAN_ID:
-               DEBUG("%s: OID_GEN_VLAN_ID\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_MEDIA_CAPABILITIES:
-               DEBUG("%s: OID_GEN_MEDIA_CAPABILITIES\n", __FUNCTION__);
-               break;
-               
        case OID_GEN_PHYSICAL_MEDIUM:
                DEBUG("%s: OID_GEN_PHYSICAL_MEDIUM\n", __FUNCTION__);
                length = 4;
                *((u32 *) resp + 6) = 0;
                retval = 0;
                break;
+
+       /* statistics OIDs (table 4-2) */
                
        /* mandatory */
        case OID_GEN_XMIT_OK:
@@ -326,7 +268,7 @@
                        retval = 0;
                }
                break;
-               
+
        /* mandatory */
        case OID_GEN_RCV_OK:
                DEBUG("%s: OID_GEN_RCV_OK\n", __FUNCTION__);
@@ -382,7 +324,8 @@
                        retval = 0;
                }
                break;
-               
+
+#ifdef RNDIS_OPTIONAL_STATS
        case OID_GEN_DIRECTED_BYTES_XMIT:
                DEBUG("%s: OID_GEN_DIRECTED_BYTES_XMIT\n", __FUNCTION__);
                /* 
@@ -546,47 +489,10 @@
                *((u32 *) resp + 6) = 0;
                retval = 0;
                break;
-               
-       case OID_GEN_GET_TIME_CAPS:
-               DEBUG("%s: OID_GEN_GET_TIME_CAPS\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_GET_NETCARD_TIME:
-               DEBUG("%s: OID_GEN_GET_NETCARD_TIME\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_NETCARD_LOAD:
-               DEBUG("%s: OID_GEN_NETCARD_LOAD\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_DEVICE_PROFILE:
-               DEBUG("%s: OID_GEN_DEVICE_PROFILE\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_INIT_TIME_MS:
-               DEBUG("%s: OID_GEN_INIT_TIME_MS\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_RESET_COUNTS:
-               DEBUG("%s: OID_GEN_RESET_COUNTS\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_MEDIA_SENSE_COUNTS:
-               DEBUG("%s: OID_GEN_MEDIA_SENSE_COUNTS\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_FRIENDLY_NAME:
-               DEBUG("%s: OID_GEN_FRIENDLY_NAME\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_MINIPORT_INFO:
-               DEBUG("%s: OID_GEN_MINIPORT_INFO\n", __FUNCTION__);
-               break;
-               
-       case OID_GEN_RESET_VERIFY_PARAMETERS:
-               DEBUG("%s: OID_GEN_RESET_VERIFY_PARAMETERS\n", __FUNCTION__);
-               break;
-               
+#endif /* RNDIS_OPTIONAL_STATS */
+
+       /* ieee802.3 OIDs (table 4-3) */
+
        /* mandatory */
        case OID_802_3_PERMANENT_ADDRESS:
                DEBUG("%s: OID_802_3_PERMANENT_ADDRESS\n", __FUNCTION__);
@@ -631,11 +537,13 @@
                *((u32 *) resp + 6) = 1;
                retval = 0;
                break;
-               
+
        case OID_802_3_MAC_OPTIONS:
                DEBUG("%s: OID_802_3_MAC_OPTIONS\n", __FUNCTION__);
                break;
-               
+
+       /* ieee802.3 statistics OIDs (table 4-4) */
+
        /* mandatory */
        case OID_802_3_RCV_ERROR_ALIGNMENT:
                DEBUG("%s: OID_802_3_RCV_ERROR_ALIGNMENT\n", __FUNCTION__);
@@ -664,6 +572,7 @@
                retval = 0;
                break;
                
+#ifdef RNDIS_OPTIONAL_STATS
        case OID_802_3_XMIT_DEFERRED:
                DEBUG("%s: OID_802_3_XMIT_DEFERRED\n", __FUNCTION__);
                /* TODO */
@@ -698,6 +607,7 @@
                DEBUG("%s: OID_802_3_XMIT_LATE_COLLISIONS\n", __FUNCTION__);
                /* TODO */
                break;          
+#endif /* RNDIS_OPTIONAL_STATS */
                
        default: printk (KERN_ERR "%s: unknown OID 0x%08X\n", 
                         __FUNCTION__, OID);
@@ -763,7 +673,7 @@
                DEBUG("%s: OID_802_3_MULTICAST_LIST\n", __FUNCTION__);
                retval = 0;
                break;
-               
+#if 0          
        case OID_GEN_RNDIS_CONFIG_PARAMETER:
                DEBUG("%s: OID_GEN_RNDIS_CONFIG_PARAMETER\n", __FUNCTION__);
                param = (struct rndis_config_parameter *) buf;
@@ -777,7 +687,7 @@
                
                retval = 0;
                break;
-               
+#endif
        default: printk (KERN_ERR "%s: unknown OID 0x%08X\n", 
                         __FUNCTION__, OID);
        }
--- 1.6/drivers/usb/gadget/rndis.h      Mon May 17 12:37:53 2004
+++ edited/drivers/usb/gadget/rndis.h   Mon May 17 15:16:36 2004
@@ -59,10 +59,18 @@
 
 #define RNDIS_MEDIUM_802_3             0x00000000U
 
+/* from drivers/net/sk98lin/h/skgepnmi.h */
+#define OID_PNP_CAPABILITIES                   0xFD010100
+#define OID_PNP_SET_POWER                      0xFD010101
+#define OID_PNP_QUERY_POWER                    0xFD010102
+#define OID_PNP_ADD_WAKE_UP_PATTERN            0xFD010103
+#define OID_PNP_REMOVE_WAKE_UP_PATTERN         0xFD010104
+#define OID_PNP_ENABLE_WAKE_UP                 0xFD010106
+
+
 /* supported OIDs */
 static const u32 oid_supported_list [] = 
 {
-       /* mandatory general */
        /* the general stuff */
        OID_GEN_SUPPORTED_LIST,
        OID_GEN_HARDWARE_STATUS,
@@ -70,7 +78,6 @@
        OID_GEN_MEDIA_IN_USE,
        OID_GEN_MAXIMUM_FRAME_SIZE,
        OID_GEN_LINK_SPEED,
-       OID_GEN_TRANSMIT_BUFFER_SPACE,
        OID_GEN_TRANSMIT_BLOCK_SIZE,
        OID_GEN_RECEIVE_BLOCK_SIZE,
        OID_GEN_VENDOR_ID,
@@ -78,10 +85,11 @@
        OID_GEN_VENDOR_DRIVER_VERSION,
        OID_GEN_CURRENT_PACKET_FILTER,
        OID_GEN_MAXIMUM_TOTAL_SIZE,
-       OID_GEN_MAC_OPTIONS,
        OID_GEN_MEDIA_CONNECT_STATUS,
        OID_GEN_PHYSICAL_MEDIUM,
+#if 0
        OID_GEN_RNDIS_CONFIG_PARAMETER,
+#endif
        
        /* the statistical stuff */
        OID_GEN_XMIT_OK,
@@ -89,6 +97,7 @@
        OID_GEN_XMIT_ERROR,
        OID_GEN_RCV_ERROR,
        OID_GEN_RCV_NO_BUFFER,
+#ifdef RNDIS_OPTIONAL_STATS
        OID_GEN_DIRECTED_BYTES_XMIT,
        OID_GEN_DIRECTED_FRAMES_XMIT,
        OID_GEN_MULTICAST_BYTES_XMIT,
@@ -103,6 +112,7 @@
        OID_GEN_BROADCAST_FRAMES_RCV,
        OID_GEN_RCV_CRC_ERROR,
        OID_GEN_TRANSMIT_QUEUE_LENGTH,
+#endif /* RNDIS_OPTIONAL_STATS */
 
        /* mandatory 802.3 */
        /* the general stuff */
@@ -115,7 +125,30 @@
        /* the statistical stuff */
        OID_802_3_RCV_ERROR_ALIGNMENT,
        OID_802_3_XMIT_ONE_COLLISION,
-       OID_802_3_XMIT_MORE_COLLISIONS
+       OID_802_3_XMIT_MORE_COLLISIONS,
+#ifdef RNDIS_OPTIONAL_STATS
+       OID_802_3_XMIT_DEFERRED,
+       OID_802_3_XMIT_MAX_COLLISIONS,
+       OID_802_3_RCV_OVERRUN,
+       OID_802_3_XMIT_UNDERRUN,
+       OID_802_3_XMIT_HEARTBEAT_FAILURE,
+       OID_802_3_XMIT_TIMES_CRS_LOST,
+       OID_802_3_XMIT_LATE_COLLISIONS,
+#endif /* RNDIS_OPTIONAL_STATS */
+
+#if 0
+       /* PM and wakeup are mandatory for USB: */
+
+       /* power management */
+       OID_PNP_CAPABILITIES,
+       OID_PNP_QUERY_POWER,
+       OID_PNP_SET_POWER,
+
+       /* wake up host */
+       OID_PNP_ENABLE_WAKE_UP,
+       OID_PNP_ADD_WAKE_UP_PATTERN,
+       OID_PNP_REMOVE_WAKE_UP_PATTERN,
+#endif
 };
 
 

Reply via email to