Hi, i need your feedback about the dynamic_debug patch. For me it is most important. It make digging in to uvc code easier, especially for beginners like me.
Am Sonntag, den 06.03.2011, 11:57 +0100 schrieb Alexey Fisher: > it make possible use of fine tunable system. > We can set exact verbosity. > > Use case: > > this will enablle all message in module uvcvideo: > echo "module uvcvideo +p" > /sys/kernel/debug/dynamic_debug/control > > this will disable message of function uvc_v4l2_do_ioctl: > echo "func uvc_v4l2_do_ioctl -p" > /sys/kernel/debug/dynamic_debug/control > > Signed-off-by: Alexey Fisher <bug-tr...@fisher-privat.net> > --- > drivers/media/video/uvc/uvc_queue.c | 8 ++- > drivers/media/video/uvc/uvc_v4l2.c | 2 + > drivers/media/video/uvc/uvc_video.c | 137 > ++++++++++++++++++++++++++++------- > 3 files changed, 120 insertions(+), 27 deletions(-) > > diff --git a/drivers/media/video/uvc/uvc_queue.c > b/drivers/media/video/uvc/uvc_queue.c > index 36f3c58..19e6cba 100644 > --- a/drivers/media/video/uvc/uvc_queue.c > +++ b/drivers/media/video/uvc/uvc_queue.c > @@ -137,6 +137,9 @@ int uvc_alloc_buffers(struct uvc_video_queue *queue, > unsigned int nbuffers, > void *mem = NULL; > int ret; > > + pr_debug("%s: nbuffers %u; buflength: %u", __func__, > + nbuffers, buflength); > + > if (nbuffers > UVC_MAX_VIDEO_BUFFERS) > nbuffers = UVC_MAX_VIDEO_BUFFERS; > > @@ -347,8 +350,9 @@ int uvc_dequeue_buffer(struct uvc_video_queue *queue, > if ((ret = uvc_queue_waiton(buf, nonblocking)) < 0) > goto done; > > - uvc_trace(UVC_TRACE_CAPTURE, "Dequeuing buffer %u (%u, %u bytes).\n", > - buf->buf.index, buf->state, buf->buf.bytesused); > + pr_debug("%s: Dequeuing buffer %u (%u, %u/%u bytes).", __func__, > + buf->buf.index, buf->state, > + buf->buf.length, buf->buf.bytesused); > > switch (buf->state) { > case UVC_BUF_STATE_ERROR: > diff --git a/drivers/media/video/uvc/uvc_v4l2.c > b/drivers/media/video/uvc/uvc_v4l2.c > index fa89ebf..3ba2563 100644 > --- a/drivers/media/video/uvc/uvc_v4l2.c > +++ b/drivers/media/video/uvc/uvc_v4l2.c > @@ -559,6 +559,8 @@ static long uvc_v4l2_do_ioctl(struct file *file, unsigned > int cmd, void *arg) > struct uvc_streaming *stream = handle->stream; > long ret = 0; > > + pr_debug("%s: cmd: %u", __func__, cmd); > + > switch (cmd) { > /* Query capabilities */ > case VIDIOC_QUERYCAP: > diff --git a/drivers/media/video/uvc/uvc_video.c > b/drivers/media/video/uvc/uvc_video.c > index 43f955e..9a95a62 100644 > --- a/drivers/media/video/uvc/uvc_video.c > +++ b/drivers/media/video/uvc/uvc_video.c > @@ -73,6 +73,8 @@ int uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 > unit, > { > int ret; > > + pr_debug("%s", __func__); > + > ret = __uvc_query_ctrl(dev, query, unit, intfnum, cs, data, size, > UVC_CTRL_CONTROL_TIMEOUT); > if (ret != size) { > @@ -92,6 +94,8 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming > *stream, > struct uvc_frame *frame = NULL; > unsigned int i; > > + pr_debug("%s", __func__); > + > if (ctrl->bFormatIndex <= 0 || > ctrl->bFormatIndex > stream->nformats) > return; > @@ -110,9 +114,13 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming > *stream, > > if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) || > (ctrl->dwMaxVideoFrameSize == 0 && > - stream->dev->uvc_version < 0x0110)) > + stream->dev->uvc_version < 0x0110)) { > + pr_debug("%s: rewrite dwMaxVideoFrameSize=%u to %u.", > + __func__, ctrl->dwMaxVideoFrameSize, > + frame->dwMaxVideoFrameBufferSize); > ctrl->dwMaxVideoFrameSize = > frame->dwMaxVideoFrameBufferSize; > + } > > if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) && > stream->dev->quirks & UVC_QUIRK_FIX_BANDWIDTH && > @@ -146,6 +154,9 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming > *stream, > */ > bandwidth = max_t(u32, bandwidth, 1024); > > + pr_debug("%s: rewrite dwMaxPayloadTransferSize=%u to %u.", > + __func__, ctrl->dwMaxPayloadTransferSize, bandwidth); > + > ctrl->dwMaxPayloadTransferSize = bandwidth; > } > } > @@ -157,6 +168,8 @@ static int uvc_get_video_ctrl(struct uvc_streaming > *stream, > __u16 size; > int ret; > > + pr_debug("%s", __func__); > + > size = stream->dev->uvc_version >= 0x0110 ? 34 : 26; > if ((stream->dev->quirks & UVC_QUIRK_PROBE_DEF) && > query == UVC_GET_DEF) > @@ -233,6 +246,20 @@ static int uvc_get_video_ctrl(struct uvc_streaming > *stream, > uvc_fixup_video_ctrl(stream, ctrl); > ret = 0; > > + pr_debug("%s: bmHint: %u; bFormatIndex: %u; bFrameIndex: %u; " > + "dwFrameInterval: %u; wKeyFrameRate: %u; " > + "wCompQuality: %u; wCompWindowSize: %u; wDelay: %u; " > + "dwMaxVideoFrameSize %u; dwMaxPayloadTransferSize: %u", > + __func__, ctrl->bmHint, > + ctrl->bFormatIndex, > + ctrl->bFrameIndex, > + ctrl->dwFrameInterval, > + ctrl->wKeyFrameRate, > + ctrl->wCompQuality, > + ctrl->wCompWindowSize, > + ctrl->wDelay, > + ctrl->dwMaxVideoFrameSize, > + ctrl->dwMaxPayloadTransferSize); > out: > kfree(data); > return ret; > @@ -245,6 +272,21 @@ static int uvc_set_video_ctrl(struct uvc_streaming > *stream, > __u16 size; > int ret; > > + pr_debug("%s: bmHint: %u; bFormatIndex: %u; bFrameIndex: %u; " > + "dwFrameInterval: %u; wKeyFrameRate: %u; " > + "wCompQuality: %u; wCompWindowSize: %u; wDelay: %u; " > + "dwMaxVideoFrameSize %u; dwMaxPayloadTransferSize: %u", > + __func__, ctrl->bmHint, > + ctrl->bFormatIndex, > + ctrl->bFrameIndex, > + ctrl->dwFrameInterval, > + ctrl->wKeyFrameRate, > + ctrl->wCompQuality, > + ctrl->wCompWindowSize, > + ctrl->wDelay, > + ctrl->dwMaxVideoFrameSize, > + ctrl->dwMaxPayloadTransferSize); > + > size = stream->dev->uvc_version >= 0x0110 ? 34 : 26; > data = kzalloc(size, GFP_KERNEL); > if (data == NULL) > @@ -292,6 +334,8 @@ int uvc_probe_video(struct uvc_streaming *stream, > unsigned int i; > int ret; > > + pr_debug("%s", __func__); > + > /* Perform probing. The device should adjust the requested values > * according to its capabilities. However, some devices, namely the > * first generation UVC Logitech webcams, don't implement the Video > @@ -349,6 +393,7 @@ done: > int uvc_commit_video(struct uvc_streaming *stream, > struct uvc_streaming_control *probe) > { > + pr_debug("%s", __func__); > return uvc_set_video_ctrl(stream, probe, 0); > } > > @@ -406,6 +451,8 @@ static int uvc_video_decode_start(struct uvc_streaming > *stream, > { > __u8 fid; > > + pr_debug("%s", __func__); > + > /* Sanity checks: > * - packet must be at least 2 bytes long > * - bHeaderLength value must be at least 2 bytes (see above) > @@ -416,8 +463,8 @@ static int uvc_video_decode_start(struct uvc_streaming > *stream, > > /* Skip payloads marked with the error bit ("error frames"). */ > if (data[1] & UVC_STREAM_ERR) { > - uvc_trace(UVC_TRACE_FRAME, "Dropping payload (error bit " > - "set).\n"); > + pr_debug("%s: Dropping payload (error bit " > + "set).", __func__); > return -ENODATA; > } > > @@ -449,8 +496,8 @@ static int uvc_video_decode_start(struct uvc_streaming > *stream, > struct timespec ts; > > if (fid == stream->last_fid) { > - uvc_trace(UVC_TRACE_FRAME, "Dropping payload (out of " > - "sync).\n"); > + pr_debug("%s: Dropping payload (out of " > + "sync).", __func__); > if ((stream->dev->quirks & UVC_QUIRK_STREAM_NO_FID) && > (data[1] & UVC_STREAM_EOF)) > stream->last_fid ^= UVC_STREAM_FID; > @@ -486,8 +533,8 @@ static int uvc_video_decode_start(struct uvc_streaming > *stream, > * previous payload had the EOF bit set. > */ > if (fid != stream->last_fid && buf->buf.bytesused != 0) { > - uvc_trace(UVC_TRACE_FRAME, "Frame complete (FID bit " > - "toggled).\n"); > + pr_debug("%s: Frame complete (FID bit " > + "toggled).", __func__); > buf->state = UVC_BUF_STATE_READY; > return -EAGAIN; > } > @@ -504,6 +551,8 @@ static void uvc_video_decode_data(struct uvc_streaming > *stream, > unsigned int maxlen, nbytes; > void *mem; > > + pr_debug("%s", __func__); > + > if (len <= 0) > return; > > @@ -516,7 +565,7 @@ static void uvc_video_decode_data(struct uvc_streaming > *stream, > > /* Complete the current frame if the buffer size was exceeded. */ > if (len > maxlen) { > - uvc_trace(UVC_TRACE_FRAME, "Frame complete (overflow).\n"); > + pr_debug("%s: Frame complete (overflow).", __func__); > buf->state = UVC_BUF_STATE_READY; > } > } > @@ -524,11 +573,14 @@ static void uvc_video_decode_data(struct uvc_streaming > *stream, > static void uvc_video_decode_end(struct uvc_streaming *stream, > struct uvc_buffer *buf, const __u8 *data, int len) > { > + > + pr_debug("%s", __func__); > + > /* Mark the buffer as done if the EOF marker is set. */ > if (data[1] & UVC_STREAM_EOF && buf->buf.bytesused != 0) { > - uvc_trace(UVC_TRACE_FRAME, "Frame complete (EOF found).\n"); > + pr_debug("%s: Frame complete (EOF found).", __func__); > if (data[0] == len) > - uvc_trace(UVC_TRACE_FRAME, "EOF in empty payload.\n"); > + pr_debug("%s: EOF in empty payload.", __func__); > buf->state = UVC_BUF_STATE_READY; > if (stream->dev->quirks & UVC_QUIRK_STREAM_NO_FID) > stream->last_fid ^= UVC_STREAM_FID; > @@ -549,6 +601,8 @@ static void uvc_video_decode_end(struct uvc_streaming > *stream, > static int uvc_video_encode_header(struct uvc_streaming *stream, > struct uvc_buffer *buf, __u8 *data, int len) > { > + pr_debug("%s", __func__); > + > data[0] = 2; /* Header length */ > data[1] = UVC_STREAM_EOH | UVC_STREAM_EOF > | (stream->last_fid & UVC_STREAM_FID); > @@ -562,6 +616,8 @@ static int uvc_video_encode_data(struct uvc_streaming > *stream, > unsigned int nbytes; > void *mem; > > + pr_debug("%s", __func__); > + > /* Copy video data to the URB buffer. */ > mem = queue->mem + buf->buf.m.offset + queue->buf_used; > nbytes = min((unsigned int)len, buf->buf.bytesused - queue->buf_used); > @@ -587,10 +643,13 @@ static void uvc_video_decode_isoc(struct urb *urb, > struct uvc_streaming *stream, > u8 *mem; > int ret, i; > > + pr_debug("%s", __func__); > + > for (i = 0; i < urb->number_of_packets; ++i) { > if (urb->iso_frame_desc[i].status < 0) { > - uvc_trace(UVC_TRACE_FRAME, "USB isochronous frame " > - "lost (%d).\n", urb->iso_frame_desc[i].status); > + pr_debug("%s: USB isochronous frame " > + "lost (%d).", __func__, > + urb->iso_frame_desc[i].status); > /* Mark the buffer as faulty. */ > if (buf != NULL) > buf->error = 1; > @@ -635,6 +694,8 @@ static void uvc_video_decode_bulk(struct urb *urb, struct > uvc_streaming *stream, > u8 *mem; > int len, ret; > > + pr_debug("%s", __func__); > + > if (urb->actual_length == 0) > return; > > @@ -699,6 +760,8 @@ static void uvc_video_encode_bulk(struct urb *urb, struct > uvc_streaming *stream, > u8 *mem = urb->transfer_buffer; > int len = stream->urb_size, ret; > > + pr_debug("%s", __func__); > + > if (buf == NULL) { > urb->transfer_buffer_length = 0; > return; > @@ -744,6 +807,8 @@ static void uvc_video_complete(struct urb *urb) > unsigned long flags; > int ret; > > + pr_debug("%s", __func__); > + > switch (urb->status) { > case 0: > break; > @@ -783,6 +848,8 @@ static void uvc_free_urb_buffers(struct uvc_streaming > *stream) > { > unsigned int i; > > + pr_debug("%s", __func__); > + > for (i = 0; i < UVC_URBS; ++i) { > if (stream->urb_buffer[i]) { > usb_free_coherent(stream->dev->udev, stream->urb_size, > @@ -811,6 +878,8 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming > *stream, > unsigned int npackets; > unsigned int i; > > + pr_debug("%s", __func__); > + > /* Buffers are already allocated, bail out. */ > if (stream->urb_size) > return stream->urb_size / psize; > @@ -836,15 +905,15 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming > *stream, > } > > if (i == UVC_URBS) { > - uvc_trace(UVC_TRACE_VIDEO, "Allocated %u URB buffers " > - "of %ux%u bytes each.\n", UVC_URBS, npackets, > - psize); > + pr_debug("%s: Allocated %u URB buffers " > + "of %ux%u bytes each.", __func__, > + UVC_URBS, npackets, psize); > return npackets; > } > } > > - uvc_trace(UVC_TRACE_VIDEO, "Failed to allocate URB buffers (%u bytes " > - "per packet).\n", psize); > + pr_debug("%s: Failed to allocate URB buffers (%u bytes " > + "per packet).", __func__, psize); > return 0; > } > > @@ -856,6 +925,8 @@ static void uvc_uninit_video(struct uvc_streaming > *stream, int free_buffers) > struct urb *urb; > unsigned int i; > > + pr_debug("%s", __func__); > + > for (i = 0; i < UVC_URBS; ++i) { > urb = stream->urb[i]; > if (urb == NULL) > @@ -882,6 +953,8 @@ static int uvc_init_video_isoc(struct uvc_streaming > *stream, > u16 psize; > u32 size; > > + pr_debug("%s", __func__); > + > psize = le16_to_cpu(ep->desc.wMaxPacketSize); > psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3)); > size = stream->ctrl.dwMaxVideoFrameSize; > @@ -934,6 +1007,8 @@ static int uvc_init_video_bulk(struct uvc_streaming > *stream, > u16 psize; > u32 size; > > + pr_debug("%s", __func__); > + > psize = le16_to_cpu(ep->desc.wMaxPacketSize) & 0x07ff; > size = stream->ctrl.dwMaxPayloadTransferSize; > stream->bulk.max_payload_size = size; > @@ -983,6 +1058,8 @@ static int uvc_init_video(struct uvc_streaming *stream, > gfp_t gfp_flags) > unsigned int i; > int ret; > > + pr_debug("%s", __func__); > + > stream->sequence = -1; > stream->last_fid = -1; > stream->bulk.header_size = 0; > @@ -1000,12 +1077,12 @@ static int uvc_init_video(struct uvc_streaming > *stream, gfp_t gfp_flags) > bandwidth = stream->ctrl.dwMaxPayloadTransferSize; > > if (bandwidth == 0) { > - uvc_trace(UVC_TRACE_VIDEO, "Device requested null " > - "bandwidth, defaulting to lowest.\n"); > + pr_debug("%s: Device requested null " > + "bandwidth, defaulting to lowest.", __func__); > bandwidth = 1; > } else { > - uvc_trace(UVC_TRACE_VIDEO, "Device requested %u " > - "B/frame bandwidth.\n", bandwidth); > + pr_debug("%s: Device requested %u " > + "B/frame bandwidth.", __func__, bandwidth); > } > > for (i = 0; i < intf->num_altsetting; ++i) { > @@ -1029,13 +1106,14 @@ static int uvc_init_video(struct uvc_streaming > *stream, gfp_t gfp_flags) > } > > if (best_ep == NULL) { > - uvc_trace(UVC_TRACE_VIDEO, "No fast enough alt setting " > - "for requested bandwidth.\n"); > + pr_debug("%s: No fast enough alt setting " > + "for requested bandwidth.", __func__); > return -EIO; > } > > - uvc_trace(UVC_TRACE_VIDEO, "Selecting alternate setting %u " > - "(%u B/frame bandwidth).\n", altsetting, best_psize); > + pr_debug("%s: Selecting alternate setting %u " > + "(%u B/frame bandwidth).", __func__, > + altsetting, best_psize); > > ret = usb_set_interface(stream->dev->udev, intfnum, altsetting); > if (ret < 0) > @@ -1082,6 +1160,9 @@ static int uvc_init_video(struct uvc_streaming *stream, > gfp_t gfp_flags) > */ > int uvc_video_suspend(struct uvc_streaming *stream) > { > + > + pr_debug("%s", __func__); > + > if (!uvc_queue_streaming(&stream->queue)) > return 0; > > @@ -1103,6 +1184,8 @@ int uvc_video_resume(struct uvc_streaming *stream) > { > int ret; > > + pr_debug("%s", __func__); > + > stream->frozen = 0; > > ret = uvc_commit_video(stream, &stream->ctrl); > @@ -1143,6 +1226,8 @@ int uvc_video_init(struct uvc_streaming *stream) > unsigned int i; > int ret; > > + pr_debug("%s", __func__); > + > if (stream->nformats == 0) { > uvc_printk(KERN_INFO, "No supported video formats found.\n"); > return -EINVAL; > @@ -1237,6 +1322,8 @@ int uvc_video_enable(struct uvc_streaming *stream, int > enable) > { > int ret; > > + pr_debug("%s", __func__); > + > if (!enable) { > uvc_uninit_video(stream, 1); > usb_set_interface(stream->dev->udev, stream->intfnum, 0); _______________________________________________ Linux-uvc-devel mailing list Linux-uvc-devel@lists.berlios.de https://lists.berlios.de/mailman/listinfo/linux-uvc-devel