mirror of
https://github.com/ukui/kernel.git
synced 2026-03-09 10:07:04 -07:00
[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: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
247f310563
commit
340600ab4c
@@ -94,8 +94,9 @@ static const char driver_desc [] = DRIVER_DESC;
|
||||
#ifdef CONFIG_USB_ETH_RNDIS
|
||||
#include "rndis.h"
|
||||
#else
|
||||
#define rndis_init() 0
|
||||
#define rndis_exit() do{}while(0)
|
||||
#define rndis_init() 0
|
||||
#define rndis_uninit(x) do{}while(0)
|
||||
#define rndis_exit() do{}while(0)
|
||||
#endif
|
||||
|
||||
/* CDC and RNDIS support the same host-chosen outgoing packet filters. */
|
||||
@@ -395,7 +396,8 @@ static inline int BITRATE(struct usb_gadget *g)
|
||||
#define STRING_SUBSET 8
|
||||
#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
|
||||
@@ -1124,6 +1126,7 @@ static void eth_reset_config (struct eth_dev *dev)
|
||||
|
||||
netif_stop_queue (dev->net);
|
||||
netif_carrier_off (dev->net);
|
||||
rndis_uninit(dev->rndis_config);
|
||||
|
||||
/* disable endpoints, forcing (synchronous) completion of
|
||||
* pending i/o. then free the requests.
|
||||
@@ -2565,7 +2568,7 @@ fail0:
|
||||
/* these set up a lot of the OIDs that RNDIS needs */
|
||||
rndis_set_host_mac (dev->rndis_config, dev->host_mac);
|
||||
if (rndis_set_param_dev (dev->rndis_config, dev->net,
|
||||
&dev->stats))
|
||||
&dev->stats, &dev->cdc_filter))
|
||||
goto fail0;
|
||||
if (rndis_set_param_vendor (dev->rndis_config, vendorID,
|
||||
manufacturer))
|
||||
|
||||
@@ -47,17 +47,17 @@ struct NDIS_PM_WAKE_UP_CAPABILITIES {
|
||||
#define NDIS_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE 0x00000004
|
||||
|
||||
struct NDIS_PNP_CAPABILITIES {
|
||||
u32 Flags;
|
||||
__le32 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;
|
||||
__le32 Priority;
|
||||
__le32 Reserved;
|
||||
__le32 MaskSize;
|
||||
__le32 PatternOffset;
|
||||
__le32 PatternSize;
|
||||
__le32 PatternFlags;
|
||||
};
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -69,90 +69,6 @@
|
||||
#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
|
||||
{
|
||||
__le32 MessageType;
|
||||
@@ -309,15 +225,18 @@ typedef struct rndis_resp_t
|
||||
typedef struct rndis_params
|
||||
{
|
||||
u8 confignr;
|
||||
int used;
|
||||
u8 used;
|
||||
u16 saved_filter;
|
||||
enum rndis_state state;
|
||||
u32 filter;
|
||||
u32 medium;
|
||||
u32 speed;
|
||||
u32 media_state;
|
||||
|
||||
const u8 *host_mac;
|
||||
u16 *filter;
|
||||
struct net_device *dev;
|
||||
struct net_device_stats *stats;
|
||||
|
||||
u32 vendorID;
|
||||
const char *vendorDescr;
|
||||
int (*ack) (struct net_device *);
|
||||
@@ -329,7 +248,8 @@ int rndis_msg_parser (u8 configNr, u8 *buf);
|
||||
int rndis_register (int (*rndis_control_ack) (struct net_device *));
|
||||
void rndis_deregister (int configNr);
|
||||
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,
|
||||
const char *vendorDescr);
|
||||
int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed);
|
||||
@@ -338,6 +258,7 @@ int rndis_rm_hdr (struct sk_buff *skb);
|
||||
u8 *rndis_get_next_response (int configNr, u32 *length);
|
||||
void rndis_free_response (int configNr, u8 *buf);
|
||||
|
||||
void rndis_uninit (int configNr);
|
||||
int rndis_signal_connect (int configNr);
|
||||
int rndis_signal_disconnect (int configNr);
|
||||
int rndis_state (int configNr);
|
||||
|
||||
Reference in New Issue
Block a user