[PATCH] usbmon in 2.6.13: peeking into DMA areas
[pandora-kernel.git] / drivers / usb / mon / mon_text.c
index 26266b3..417464d 100644 (file)
@@ -91,25 +91,11 @@ static inline char mon_text_get_data(struct mon_event_text *ep, struct urb *urb,
     int len, char ev_type)
 {
        int pipe = urb->pipe;
-       unsigned char *data;
-
-       /*
-        * The check to see if it's safe to poke at data has an enormous
-        * number of corner cases, but it seems that the following is
-        * more or less safe.
-        *
-        * We do not even try to look transfer_buffer, because it can
-        * contain non-NULL garbage in case the upper level promised to
-        * set DMA for the HCD.
-        */
-       if (urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
-               return 'D';
 
        if (len <= 0)
                return 'L';
-
-       if ((data = urb->transfer_buffer) == NULL)
-               return 'Z';     /* '0' would be not as pretty. */
+       if (len >= DATA_MAX)
+               len = DATA_MAX;
 
        /*
         * Bulk is easy to shortcut reliably. 
@@ -126,8 +112,21 @@ static inline char mon_text_get_data(struct mon_event_text *ep, struct urb *urb,
                }
        }
 
-       if (len >= DATA_MAX)
-               len = DATA_MAX;
+       /*
+        * The check to see if it's safe to poke at data has an enormous
+        * number of corner cases, but it seems that the following is
+        * more or less safe.
+        *
+        * We do not even try to look transfer_buffer, because it can
+        * contain non-NULL garbage in case the upper level promised to
+        * set DMA for the HCD.
+        */
+       if (urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
+               return mon_dmapeek(ep->data, urb->transfer_dma, len);
+
+       if (urb->transfer_buffer == NULL)
+               return 'Z';     /* '0' would be not as pretty. */
+
        memcpy(ep->data, urb->transfer_buffer, len);
        return 0;
 }