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

Reply via email to