Commit 340600ab authored by David Brownell's avatar David Brownell Committed by Greg Kroah-Hartman

[PATCH] USB: rndis updates (mostly cleanup)

Some bugfixes and lots of cleanup (net code shrink):

  - On reset, force the RNDIS state machine its initial state

  - Hook up the RNDIS (outgoing) filters to the CDC mechanism

  - Lots of cleanup:
     * Eliminate duplicate copy of OID table;
     * Unify handlying of the OID "query" response data pointer;
     * Reduce code duplication for calculating query response lengths;
     * Remove some checks for "can't happen" errors;
     * Get rid of debugging #ifdefs by making the debug flag an integer level

Most of the patch, by volume, relates to those query response cleanups.
It incidentally shaves off a few hundred bytes of object code.
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 247f3105
...@@ -94,8 +94,9 @@ static const char driver_desc [] = DRIVER_DESC; ...@@ -94,8 +94,9 @@ static const char driver_desc [] = DRIVER_DESC;
#ifdef CONFIG_USB_ETH_RNDIS #ifdef CONFIG_USB_ETH_RNDIS
#include "rndis.h" #include "rndis.h"
#else #else
#define rndis_init() 0 #define rndis_init() 0
#define rndis_exit() do{}while(0) #define rndis_uninit(x) do{}while(0)
#define rndis_exit() do{}while(0)
#endif #endif
/* CDC and RNDIS support the same host-chosen outgoing packet filters. */ /* CDC and RNDIS support the same host-chosen outgoing packet filters. */
...@@ -395,7 +396,8 @@ static inline int BITRATE(struct usb_gadget *g) ...@@ -395,7 +396,8 @@ static inline int BITRATE(struct usb_gadget *g)
#define STRING_SUBSET 8 #define STRING_SUBSET 8
#define STRING_RNDIS 9 #define STRING_RNDIS 9
#define USB_BUFSIZ 256 /* holds our biggest descriptor */ /* holds our biggest descriptor (or RNDIS response) */
#define USB_BUFSIZ 256
/* /*
* This device advertises one configuration, eth_config, unless RNDIS * This device advertises one configuration, eth_config, unless RNDIS
...@@ -1124,6 +1126,7 @@ static void eth_reset_config (struct eth_dev *dev) ...@@ -1124,6 +1126,7 @@ static void eth_reset_config (struct eth_dev *dev)
netif_stop_queue (dev->net); netif_stop_queue (dev->net);
netif_carrier_off (dev->net); netif_carrier_off (dev->net);
rndis_uninit(dev->rndis_config);
/* disable endpoints, forcing (synchronous) completion of /* disable endpoints, forcing (synchronous) completion of
* pending i/o. then free the requests. * pending i/o. then free the requests.
...@@ -2565,7 +2568,7 @@ eth_bind (struct usb_gadget *gadget) ...@@ -2565,7 +2568,7 @@ eth_bind (struct usb_gadget *gadget)
/* these set up a lot of the OIDs that RNDIS needs */ /* these set up a lot of the OIDs that RNDIS needs */
rndis_set_host_mac (dev->rndis_config, dev->host_mac); rndis_set_host_mac (dev->rndis_config, dev->host_mac);
if (rndis_set_param_dev (dev->rndis_config, dev->net, if (rndis_set_param_dev (dev->rndis_config, dev->net,
&dev->stats)) &dev->stats, &dev->cdc_filter))
goto fail0; goto fail0;
if (rndis_set_param_vendor (dev->rndis_config, vendorID, if (rndis_set_param_vendor (dev->rndis_config, vendorID,
manufacturer)) manufacturer))
......
...@@ -47,17 +47,17 @@ struct NDIS_PM_WAKE_UP_CAPABILITIES { ...@@ -47,17 +47,17 @@ struct NDIS_PM_WAKE_UP_CAPABILITIES {
#define NDIS_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE 0x00000004 #define NDIS_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE 0x00000004
struct NDIS_PNP_CAPABILITIES { struct NDIS_PNP_CAPABILITIES {
u32 Flags; __le32 Flags;
struct NDIS_PM_WAKE_UP_CAPABILITIES WakeUpCapabilities; struct NDIS_PM_WAKE_UP_CAPABILITIES WakeUpCapabilities;
}; };
struct NDIS_PM_PACKET_PATTERN { struct NDIS_PM_PACKET_PATTERN {
u32 Priority; __le32 Priority;
u32 Reserved; __le32 Reserved;
u32 MaskSize; __le32 MaskSize;
u32 PatternOffset; __le32 PatternOffset;
u32 PatternSize; __le32 PatternSize;
u32 PatternFlags; __le32 PatternFlags;
}; };
......
This diff is collapsed.
...@@ -69,90 +69,6 @@ ...@@ -69,90 +69,6 @@
#define OID_PNP_ENABLE_WAKE_UP 0xFD010106 #define OID_PNP_ENABLE_WAKE_UP 0xFD010106
/* supported OIDs */
static const u32 oid_supported_list [] =
{
/* the general stuff */
OID_GEN_SUPPORTED_LIST,
OID_GEN_HARDWARE_STATUS,
OID_GEN_MEDIA_SUPPORTED,
OID_GEN_MEDIA_IN_USE,
OID_GEN_MAXIMUM_FRAME_SIZE,
OID_GEN_LINK_SPEED,
OID_GEN_TRANSMIT_BLOCK_SIZE,
OID_GEN_RECEIVE_BLOCK_SIZE,
OID_GEN_VENDOR_ID,
OID_GEN_VENDOR_DESCRIPTION,
OID_GEN_VENDOR_DRIVER_VERSION,
OID_GEN_CURRENT_PACKET_FILTER,
OID_GEN_MAXIMUM_TOTAL_SIZE,
OID_GEN_MEDIA_CONNECT_STATUS,
OID_GEN_PHYSICAL_MEDIUM,
#if 0
OID_GEN_RNDIS_CONFIG_PARAMETER,
#endif
/* the statistical stuff */
OID_GEN_XMIT_OK,
OID_GEN_RCV_OK,
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,
OID_GEN_MULTICAST_FRAMES_XMIT,
OID_GEN_BROADCAST_BYTES_XMIT,
OID_GEN_BROADCAST_FRAMES_XMIT,
OID_GEN_DIRECTED_BYTES_RCV,
OID_GEN_DIRECTED_FRAMES_RCV,
OID_GEN_MULTICAST_BYTES_RCV,
OID_GEN_MULTICAST_FRAMES_RCV,
OID_GEN_BROADCAST_BYTES_RCV,
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 */
OID_802_3_PERMANENT_ADDRESS,
OID_802_3_CURRENT_ADDRESS,
OID_802_3_MULTICAST_LIST,
OID_802_3_MAC_OPTIONS,
OID_802_3_MAXIMUM_LIST_SIZE,
/* the statistical stuff */
OID_802_3_RCV_ERROR_ALIGNMENT,
OID_802_3_XMIT_ONE_COLLISION,
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 */
#ifdef RNDIS_PM
/* 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
};
typedef struct rndis_init_msg_type typedef struct rndis_init_msg_type
{ {
__le32 MessageType; __le32 MessageType;
...@@ -309,15 +225,18 @@ typedef struct rndis_resp_t ...@@ -309,15 +225,18 @@ typedef struct rndis_resp_t
typedef struct rndis_params typedef struct rndis_params
{ {
u8 confignr; u8 confignr;
int used; u8 used;
u16 saved_filter;
enum rndis_state state; enum rndis_state state;
u32 filter;
u32 medium; u32 medium;
u32 speed; u32 speed;
u32 media_state; u32 media_state;
const u8 *host_mac; const u8 *host_mac;
u16 *filter;
struct net_device *dev; struct net_device *dev;
struct net_device_stats *stats; struct net_device_stats *stats;
u32 vendorID; u32 vendorID;
const char *vendorDescr; const char *vendorDescr;
int (*ack) (struct net_device *); int (*ack) (struct net_device *);
...@@ -329,7 +248,8 @@ int rndis_msg_parser (u8 configNr, u8 *buf); ...@@ -329,7 +248,8 @@ int rndis_msg_parser (u8 configNr, u8 *buf);
int rndis_register (int (*rndis_control_ack) (struct net_device *)); int rndis_register (int (*rndis_control_ack) (struct net_device *));
void rndis_deregister (int configNr); void rndis_deregister (int configNr);
int rndis_set_param_dev (u8 configNr, struct net_device *dev, int rndis_set_param_dev (u8 configNr, struct net_device *dev,
struct net_device_stats *stats); struct net_device_stats *stats,
u16 *cdc_filter);
int rndis_set_param_vendor (u8 configNr, u32 vendorID, int rndis_set_param_vendor (u8 configNr, u32 vendorID,
const char *vendorDescr); const char *vendorDescr);
int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed); int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed);
...@@ -338,6 +258,7 @@ int rndis_rm_hdr (struct sk_buff *skb); ...@@ -338,6 +258,7 @@ int rndis_rm_hdr (struct sk_buff *skb);
u8 *rndis_get_next_response (int configNr, u32 *length); u8 *rndis_get_next_response (int configNr, u32 *length);
void rndis_free_response (int configNr, u8 *buf); void rndis_free_response (int configNr, u8 *buf);
void rndis_uninit (int configNr);
int rndis_signal_connect (int configNr); int rndis_signal_connect (int configNr);
int rndis_signal_disconnect (int configNr); int rndis_signal_disconnect (int configNr);
int rndis_state (int configNr); int rndis_state (int configNr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment