|
@@ -50,10 +50,12 @@ struct mon_iso_desc {
|
|
|
struct mon_event_text {
|
|
|
struct list_head e_link;
|
|
|
int type; /* submit, complete, etc. */
|
|
|
- unsigned int pipe; /* Pipe */
|
|
|
unsigned long id; /* From pointer, most of the time */
|
|
|
unsigned int tstamp;
|
|
|
+ int xfertype;
|
|
|
int busnum;
|
|
|
+ int devnum;
|
|
|
+ int epnum;
|
|
|
int length; /* Depends on type: xfer length or act length */
|
|
|
int status;
|
|
|
int interval;
|
|
@@ -61,6 +63,7 @@ struct mon_event_text {
|
|
|
int error_count;
|
|
|
char setup_flag;
|
|
|
char data_flag;
|
|
|
+ char is_in;
|
|
|
int numdesc; /* Full number */
|
|
|
struct mon_iso_desc isodesc[ISODESC_MAX];
|
|
|
unsigned char setup[SETUP_MAX];
|
|
@@ -121,7 +124,7 @@ static inline char mon_text_get_setup(struct mon_event_text *ep,
|
|
|
struct urb *urb, char ev_type, struct mon_bus *mbus)
|
|
|
{
|
|
|
|
|
|
- if (!usb_pipecontrol(urb->pipe) || ev_type != 'S')
|
|
|
+ if (ep->xfertype != USB_ENDPOINT_XFER_CONTROL || ev_type != 'S')
|
|
|
return '-';
|
|
|
|
|
|
if (urb->dev->bus->uses_dma &&
|
|
@@ -138,14 +141,12 @@ static inline char mon_text_get_setup(struct mon_event_text *ep,
|
|
|
static inline char mon_text_get_data(struct mon_event_text *ep, struct urb *urb,
|
|
|
int len, char ev_type, struct mon_bus *mbus)
|
|
|
{
|
|
|
- int pipe = urb->pipe;
|
|
|
-
|
|
|
if (len <= 0)
|
|
|
return 'L';
|
|
|
if (len >= DATA_MAX)
|
|
|
len = DATA_MAX;
|
|
|
|
|
|
- if (usb_pipein(pipe)) {
|
|
|
+ if (ep->is_in) {
|
|
|
if (ev_type != 'C')
|
|
|
return '<';
|
|
|
} else {
|
|
@@ -203,24 +204,28 @@ static void mon_text_event(struct mon_reader_text *rp, struct urb *urb,
|
|
|
}
|
|
|
|
|
|
ep->type = ev_type;
|
|
|
- ep->pipe = urb->pipe;
|
|
|
ep->id = (unsigned long) urb;
|
|
|
ep->busnum = urb->dev->bus->busnum;
|
|
|
+ ep->devnum = urb->dev->devnum;
|
|
|
+ ep->epnum = usb_endpoint_num(&urb->ep->desc);
|
|
|
+ ep->xfertype = usb_endpoint_type(&urb->ep->desc);
|
|
|
+ ep->is_in = usb_urb_dir_in(urb);
|
|
|
ep->tstamp = stamp;
|
|
|
ep->length = (ev_type == 'S') ?
|
|
|
urb->transfer_buffer_length : urb->actual_length;
|
|
|
/* Collecting status makes debugging sense for submits, too */
|
|
|
ep->status = urb->status;
|
|
|
|
|
|
- if (usb_pipeint(urb->pipe)) {
|
|
|
+ if (ep->xfertype == USB_ENDPOINT_XFER_INT) {
|
|
|
ep->interval = urb->interval;
|
|
|
- } else if (usb_pipeisoc(urb->pipe)) {
|
|
|
+ } else if (ep->xfertype == USB_ENDPOINT_XFER_ISOC) {
|
|
|
ep->interval = urb->interval;
|
|
|
ep->start_frame = urb->start_frame;
|
|
|
ep->error_count = urb->error_count;
|
|
|
}
|
|
|
ep->numdesc = urb->number_of_packets;
|
|
|
- if (usb_pipeisoc(urb->pipe) && urb->number_of_packets > 0) {
|
|
|
+ if (ep->xfertype == USB_ENDPOINT_XFER_ISOC &&
|
|
|
+ urb->number_of_packets > 0) {
|
|
|
if ((ndesc = urb->number_of_packets) > ISODESC_MAX)
|
|
|
ndesc = ISODESC_MAX;
|
|
|
fp = urb->iso_frame_desc;
|
|
@@ -268,9 +273,12 @@ static void mon_text_error(void *data, struct urb *urb, int error)
|
|
|
}
|
|
|
|
|
|
ep->type = 'E';
|
|
|
- ep->pipe = urb->pipe;
|
|
|
ep->id = (unsigned long) urb;
|
|
|
ep->busnum = 0;
|
|
|
+ ep->devnum = urb->dev->devnum;
|
|
|
+ ep->epnum = usb_endpoint_num(&urb->ep->desc);
|
|
|
+ ep->xfertype = usb_endpoint_type(&urb->ep->desc);
|
|
|
+ ep->is_in = usb_urb_dir_in(urb);
|
|
|
ep->tstamp = 0;
|
|
|
ep->length = 0;
|
|
|
ep->status = error;
|
|
@@ -413,10 +421,10 @@ static ssize_t mon_text_read_u(struct file *file, char __user *buf,
|
|
|
mon_text_read_head_u(rp, &ptr, ep);
|
|
|
if (ep->type == 'E') {
|
|
|
mon_text_read_statset(rp, &ptr, ep);
|
|
|
- } else if (usb_pipeisoc(ep->pipe)) {
|
|
|
+ } else if (ep->xfertype == USB_ENDPOINT_XFER_ISOC) {
|
|
|
mon_text_read_isostat(rp, &ptr, ep);
|
|
|
mon_text_read_isodesc(rp, &ptr, ep);
|
|
|
- } else if (usb_pipeint(ep->pipe)) {
|
|
|
+ } else if (ep->xfertype == USB_ENDPOINT_XFER_INT) {
|
|
|
mon_text_read_intstat(rp, &ptr, ep);
|
|
|
} else {
|
|
|
mon_text_read_statset(rp, &ptr, ep);
|
|
@@ -468,18 +476,17 @@ static void mon_text_read_head_t(struct mon_reader_text *rp,
|
|
|
{
|
|
|
char udir, utype;
|
|
|
|
|
|
- udir = usb_pipein(ep->pipe) ? 'i' : 'o';
|
|
|
- switch (usb_pipetype(ep->pipe)) {
|
|
|
- case PIPE_ISOCHRONOUS: utype = 'Z'; break;
|
|
|
- case PIPE_INTERRUPT: utype = 'I'; break;
|
|
|
- case PIPE_CONTROL: utype = 'C'; break;
|
|
|
+ udir = (ep->is_in ? 'i' : 'o');
|
|
|
+ switch (ep->xfertype) {
|
|
|
+ case USB_ENDPOINT_XFER_ISOC: utype = 'Z'; break;
|
|
|
+ case USB_ENDPOINT_XFER_INT: utype = 'I'; break;
|
|
|
+ case USB_ENDPOINT_XFER_CONTROL: utype = 'C'; break;
|
|
|
default: /* PIPE_BULK */ utype = 'B';
|
|
|
}
|
|
|
p->cnt += snprintf(p->pbuf + p->cnt, p->limit - p->cnt,
|
|
|
"%lx %u %c %c%c:%03u:%02u",
|
|
|
ep->id, ep->tstamp, ep->type,
|
|
|
- utype, udir,
|
|
|
- usb_pipedevice(ep->pipe), usb_pipeendpoint(ep->pipe));
|
|
|
+ utype, udir, ep->devnum, ep->epnum);
|
|
|
}
|
|
|
|
|
|
static void mon_text_read_head_u(struct mon_reader_text *rp,
|
|
@@ -487,18 +494,17 @@ static void mon_text_read_head_u(struct mon_reader_text *rp,
|
|
|
{
|
|
|
char udir, utype;
|
|
|
|
|
|
- udir = usb_pipein(ep->pipe) ? 'i' : 'o';
|
|
|
- switch (usb_pipetype(ep->pipe)) {
|
|
|
- case PIPE_ISOCHRONOUS: utype = 'Z'; break;
|
|
|
- case PIPE_INTERRUPT: utype = 'I'; break;
|
|
|
- case PIPE_CONTROL: utype = 'C'; break;
|
|
|
+ udir = (ep->is_in ? 'i' : 'o');
|
|
|
+ switch (ep->xfertype) {
|
|
|
+ case USB_ENDPOINT_XFER_ISOC: utype = 'Z'; break;
|
|
|
+ case USB_ENDPOINT_XFER_INT: utype = 'I'; break;
|
|
|
+ case USB_ENDPOINT_XFER_CONTROL: utype = 'C'; break;
|
|
|
default: /* PIPE_BULK */ utype = 'B';
|
|
|
}
|
|
|
p->cnt += snprintf(p->pbuf + p->cnt, p->limit - p->cnt,
|
|
|
"%lx %u %c %c%c:%d:%03u:%u",
|
|
|
ep->id, ep->tstamp, ep->type,
|
|
|
- utype, udir,
|
|
|
- ep->busnum, usb_pipedevice(ep->pipe), usb_pipeendpoint(ep->pipe));
|
|
|
+ utype, udir, ep->busnum, ep->devnum, ep->epnum);
|
|
|
}
|
|
|
|
|
|
static void mon_text_read_statset(struct mon_reader_text *rp,
|