ChangeSet 1.2020.1.42, 2005/03/07 22:57:11-08:00, [EMAIL PROTECTED]
[PATCH] USB: usbnet, cleanups and suspend/resume calls
This has some small updates to the "usbnet" driver:
- Remove an unused debug-only symbol
- Make the net1080 minidriver pass "sparse -Wbitwise"
- Add suspend/resume methods
No functionality changes other than the suspend/resume support.
Signed-off-by: David Brownell <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>
drivers/usb/net/usbnet.c | 70 ++++++++++++++++++++++++++++++++---------------
1 files changed, 48 insertions(+), 22 deletions(-)
diff -Nru a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c
--- a/drivers/usb/net/usbnet.c 2005-03-08 16:52:10 -08:00
+++ b/drivers/usb/net/usbnet.c 2005-03-08 16:52:10 -08:00
@@ -278,9 +278,6 @@
MODULE_PARM_DESC (msg_level, "Initial message level (default = 1)");
-#define RUN_CONTEXT (in_irq () ? "in_irq" \
- : (in_interrupt () ? "in_interrupt" : "can sleep"))
-
#ifdef DEBUG
#define devdbg(usbnet, fmt, arg...) \
printk(KERN_DEBUG "%s: " fmt "\n" , (usbnet)->net->name , ## arg)
@@ -1941,9 +1938,9 @@
*/
struct nc_header { // packed:
- u16 hdr_len; // sizeof nc_header (LE, all)
- u16 packet_len; // payload size (including ethhdr)
- u16 packet_id; // detects dropped packets
+ __le16 hdr_len; // sizeof nc_header (LE, all)
+ __le16 packet_len; // payload size (including ethhdr)
+ __le16 packet_id; // detects dropped packets
#define MIN_HEADER 6
// all else is optional, and must start with:
@@ -1954,7 +1951,7 @@
#define PAD_BYTE ((unsigned char)0xAC)
struct nc_trailer {
- u16 packet_id;
+ __le16 packet_id;
} __attribute__((__packed__));
// packets may use FLAG_FRAMING_NC and optional pad
@@ -2312,6 +2309,7 @@
{
struct nc_header *header;
struct nc_trailer *trailer;
+ u16 hdr_len, packet_len;
if (!(skb->len & 0x01)
|| MIN_FRAMED > skb->len
@@ -2325,50 +2323,50 @@
}
header = (struct nc_header *) skb->data;
- le16_to_cpus (&header->hdr_len);
- le16_to_cpus (&header->packet_len);
- if (FRAMED_SIZE (header->packet_len) > MAX_PACKET) {
+ hdr_len = le16_to_cpup (&header->hdr_len);
+ packet_len = le16_to_cpup (&header->packet_len);
+ if (FRAMED_SIZE (packet_len) > MAX_PACKET) {
dev->stats.rx_frame_errors++;
- dbg ("packet too big, %d", header->packet_len);
+ dbg ("packet too big, %d", packet_len);
nc_ensure_sync (dev);
return 0;
- } else if (header->hdr_len < MIN_HEADER) {
+ } else if (hdr_len < MIN_HEADER) {
dev->stats.rx_frame_errors++;
- dbg ("header too short, %d", header->hdr_len);
+ dbg ("header too short, %d", hdr_len);
nc_ensure_sync (dev);
return 0;
- } else if (header->hdr_len > MIN_HEADER) {
+ } else if (hdr_len > MIN_HEADER) {
// out of band data for us?
- dbg ("header OOB, %d bytes",
- header->hdr_len - MIN_HEADER);
+ dbg ("header OOB, %d bytes", hdr_len - MIN_HEADER);
nc_ensure_sync (dev);
// switch (vendor/product ids) { ... }
}
- skb_pull (skb, header->hdr_len);
+ skb_pull (skb, hdr_len);
trailer = (struct nc_trailer *)
(skb->data + skb->len - sizeof *trailer);
skb_trim (skb, skb->len - sizeof *trailer);
- if ((header->packet_len & 0x01) == 0) {
- if (skb->data [header->packet_len] != PAD_BYTE) {
+ if ((packet_len & 0x01) == 0) {
+ if (skb->data [packet_len] != PAD_BYTE) {
dev->stats.rx_frame_errors++;
dbg ("bad pad");
return 0;
}
skb_trim (skb, skb->len - 1);
}
- if (skb->len != header->packet_len) {
+ if (skb->len != packet_len) {
dev->stats.rx_frame_errors++;
dbg ("bad packet len %d (expected %d)",
- skb->len, header->packet_len);
+ skb->len, packet_len);
nc_ensure_sync (dev);
return 0;
}
if (header->packet_id != get_unaligned (&trailer->packet_id)) {
dev->stats.rx_fifo_errors++;
dbg ("(2+ dropped) rx packet_id mismatch 0x%x 0x%x",
- header->packet_id, trailer->packet_id);
+ le16_to_cpu (header->packet_id),
+ le16_to_cpu (trailer->packet_id));
return 0;
}
#if 0
@@ -3543,6 +3541,32 @@
return status;
}
+/*-------------------------------------------------------------------------*/
+
+#ifdef CONFIG_PM
+
+static int usbnet_suspend (struct usb_interface *intf, u32 state)
+{
+ struct usbnet *dev = usb_get_intfdata(intf);
+
+ netif_device_detach (dev->net);
+ return 0;
+}
+
+static int usbnet_resume (struct usb_interface *intf)
+{
+ struct usbnet *dev = usb_get_intfdata(intf);
+
+ netif_device_attach (dev->net);
+ return 0;
+}
+
+#else /* !CONFIG_PM */
+
+#define usbnet_suspend NULL
+#define usbnet_resume NULL
+
+#endif /* CONFIG_PM */
/*-------------------------------------------------------------------------*/
@@ -3845,6 +3869,8 @@
.id_table = products,
.probe = usbnet_probe,
.disconnect = usbnet_disconnect,
+ .suspend = usbnet_suspend,
+ .resume = usbnet_resume,
};
/* Default ethtool_ops assigned. Devices can override in their bind() routine
*/
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_ide95&alloc_id396&op=click
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel