summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Rechberger <devnull@localhost>2005-10-16 15:50:07 +0000
committerMarkus Rechberger <devnull@localhost>2005-10-16 15:50:07 +0000
commit56d306849e2c38f270dc4bdbea466f93e9f40926 (patch)
tree25e3de9ebae2eddddfeda1d47dd02466ee99b5fd
parent4babd132667ba4b0de2dd181d7e7965dbaf9c985 (diff)
downloadmediapointer-dvb-s2-56d306849e2c38f270dc4bdbea466f93e9f40926.tar.gz
mediapointer-dvb-s2-56d306849e2c38f270dc4bdbea466f93e9f40926.tar.bz2
* ../linux/drivers/usb/media/em2820-core.c: (em2820_init_isoc),
(em2820_uninit_isoc): - replaced kmalloc/kfree with usb_buffer_alloc/usb_buffer_free to get around the kmalloc restrictions Signed-off-by: Markus Rechberger <mrechberger@gmail.com>
-rw-r--r--linux/drivers/media/video/em28xx/em28xx-core.c50
-rw-r--r--linux/drivers/usb/media/em2820-core.c50
-rw-r--r--v4l/ChangeLog9
3 files changed, 59 insertions, 50 deletions
diff --git a/linux/drivers/media/video/em28xx/em28xx-core.c b/linux/drivers/media/video/em28xx/em28xx-core.c
index 986c6babf..3dd25b41b 100644
--- a/linux/drivers/media/video/em28xx/em28xx-core.c
+++ b/linux/drivers/media/video/em28xx/em28xx-core.c
@@ -722,11 +722,12 @@ void em2820_uninit_isoc(struct em2820 *dev)
for (i = 0; i < EM2820_NUM_BUFS; i++) {
if (dev->urb[i]) {
usb_kill_urb(dev->urb[i]);
+ if (dev->transfer_buffer[i]){
+ usb_buffer_free(dev->udev,(EM2820_NUM_PACKETS*dev->max_pkt_size),dev->transfer_buffer[i],dev->urb[i]->transfer_dma);
+ }
usb_free_urb(dev->urb[i]);
}
dev->urb[i] = NULL;
- if (dev->transfer_buffer[i])
- kfree(dev->transfer_buffer[i]);
dev->transfer_buffer[i] = NULL;
}
em2820_capture_start(dev, 0);
@@ -751,7 +752,13 @@ int em2820_init_isoc(struct em2820 *dev)
struct urb *urb;
int j, k;
/* allocate transfer buffer */
- dev->transfer_buffer[i] = kmalloc(sb_size, GFP_KERNEL);
+ urb = usb_alloc_urb(EM2820_NUM_PACKETS, GFP_KERNEL);
+ if (!urb){
+ em2820_errdev("cannot alloc urb %i\n", i);
+ em2820_uninit_isoc(dev);
+ return -ENOMEM;
+ }
+ dev->transfer_buffer[i] = usb_buffer_alloc(dev->udev, sb_size, GFP_KERNEL,&urb->transfer_dma);
if (!dev->transfer_buffer[i]) {
em2820_errdev
("unable to allocate %i bytes for transfer buffer %i\n",
@@ -760,29 +767,22 @@ int em2820_init_isoc(struct em2820 *dev)
return -ENOMEM;
}
memset(dev->transfer_buffer[i], 0, sb_size);
- urb = usb_alloc_urb(EM2820_NUM_PACKETS, GFP_KERNEL);
- if (urb) {
- urb->dev = dev->udev;
- urb->context = dev;
- urb->pipe = usb_rcvisocpipe(dev->udev, 0x82);
- urb->transfer_flags = URB_ISO_ASAP;
- urb->interval = 1;
- urb->transfer_buffer = dev->transfer_buffer[i];
- urb->complete = em2820_isocIrq;
- urb->number_of_packets = EM2820_NUM_PACKETS;
- urb->transfer_buffer_length = sb_size;
- for (j = k = 0; j < EM2820_NUM_PACKETS;
- j++, k += dev->max_pkt_size) {
- urb->iso_frame_desc[j].offset = k;
- urb->iso_frame_desc[j].length =
- dev->max_pkt_size;
- }
- dev->urb[i] = urb;
- } else {
- em2820_errdev("cannot alloc urb %i\n", i);
- em2820_uninit_isoc(dev);
- return -ENOMEM;
+ urb->dev = dev->udev;
+ urb->context = dev;
+ urb->pipe = usb_rcvisocpipe(dev->udev, 0x82);
+ urb->transfer_flags = URB_ISO_ASAP;
+ urb->interval = 1;
+ urb->transfer_buffer = dev->transfer_buffer[i];
+ urb->complete = em2820_isocIrq;
+ urb->number_of_packets = EM2820_NUM_PACKETS;
+ urb->transfer_buffer_length = sb_size;
+ for (j = k = 0; j < EM2820_NUM_PACKETS;
+ j++, k += dev->max_pkt_size) {
+ urb->iso_frame_desc[j].offset = k;
+ urb->iso_frame_desc[j].length =
+ dev->max_pkt_size;
}
+ dev->urb[i] = urb;
}
/* submit urbs */
diff --git a/linux/drivers/usb/media/em2820-core.c b/linux/drivers/usb/media/em2820-core.c
index 986c6babf..3dd25b41b 100644
--- a/linux/drivers/usb/media/em2820-core.c
+++ b/linux/drivers/usb/media/em2820-core.c
@@ -722,11 +722,12 @@ void em2820_uninit_isoc(struct em2820 *dev)
for (i = 0; i < EM2820_NUM_BUFS; i++) {
if (dev->urb[i]) {
usb_kill_urb(dev->urb[i]);
+ if (dev->transfer_buffer[i]){
+ usb_buffer_free(dev->udev,(EM2820_NUM_PACKETS*dev->max_pkt_size),dev->transfer_buffer[i],dev->urb[i]->transfer_dma);
+ }
usb_free_urb(dev->urb[i]);
}
dev->urb[i] = NULL;
- if (dev->transfer_buffer[i])
- kfree(dev->transfer_buffer[i]);
dev->transfer_buffer[i] = NULL;
}
em2820_capture_start(dev, 0);
@@ -751,7 +752,13 @@ int em2820_init_isoc(struct em2820 *dev)
struct urb *urb;
int j, k;
/* allocate transfer buffer */
- dev->transfer_buffer[i] = kmalloc(sb_size, GFP_KERNEL);
+ urb = usb_alloc_urb(EM2820_NUM_PACKETS, GFP_KERNEL);
+ if (!urb){
+ em2820_errdev("cannot alloc urb %i\n", i);
+ em2820_uninit_isoc(dev);
+ return -ENOMEM;
+ }
+ dev->transfer_buffer[i] = usb_buffer_alloc(dev->udev, sb_size, GFP_KERNEL,&urb->transfer_dma);
if (!dev->transfer_buffer[i]) {
em2820_errdev
("unable to allocate %i bytes for transfer buffer %i\n",
@@ -760,29 +767,22 @@ int em2820_init_isoc(struct em2820 *dev)
return -ENOMEM;
}
memset(dev->transfer_buffer[i], 0, sb_size);
- urb = usb_alloc_urb(EM2820_NUM_PACKETS, GFP_KERNEL);
- if (urb) {
- urb->dev = dev->udev;
- urb->context = dev;
- urb->pipe = usb_rcvisocpipe(dev->udev, 0x82);
- urb->transfer_flags = URB_ISO_ASAP;
- urb->interval = 1;
- urb->transfer_buffer = dev->transfer_buffer[i];
- urb->complete = em2820_isocIrq;
- urb->number_of_packets = EM2820_NUM_PACKETS;
- urb->transfer_buffer_length = sb_size;
- for (j = k = 0; j < EM2820_NUM_PACKETS;
- j++, k += dev->max_pkt_size) {
- urb->iso_frame_desc[j].offset = k;
- urb->iso_frame_desc[j].length =
- dev->max_pkt_size;
- }
- dev->urb[i] = urb;
- } else {
- em2820_errdev("cannot alloc urb %i\n", i);
- em2820_uninit_isoc(dev);
- return -ENOMEM;
+ urb->dev = dev->udev;
+ urb->context = dev;
+ urb->pipe = usb_rcvisocpipe(dev->udev, 0x82);
+ urb->transfer_flags = URB_ISO_ASAP;
+ urb->interval = 1;
+ urb->transfer_buffer = dev->transfer_buffer[i];
+ urb->complete = em2820_isocIrq;
+ urb->number_of_packets = EM2820_NUM_PACKETS;
+ urb->transfer_buffer_length = sb_size;
+ for (j = k = 0; j < EM2820_NUM_PACKETS;
+ j++, k += dev->max_pkt_size) {
+ urb->iso_frame_desc[j].offset = k;
+ urb->iso_frame_desc[j].length =
+ dev->max_pkt_size;
}
+ dev->urb[i] = urb;
}
/* submit urbs */
diff --git a/v4l/ChangeLog b/v4l/ChangeLog
index 90ebd3aac..15e05c8ce 100644
--- a/v4l/ChangeLog
+++ b/v4l/ChangeLog
@@ -1,3 +1,12 @@
+2005-10-16 17:42 mrechberger
+
+ * ../linux/drivers/usb/media/em2820-core.c: (em2820_init_isoc),
+ (em2820_uninit_isoc):
+ - replaced kmalloc/kfree with usb_buffer_alloc/usb_buffer_free to get
+ around the kmalloc restrictions
+
+ Signed-off-by: Markus Rechberger <mrechberger@gmail.com>
+
2005-10-16 12:14 mchehab
* ../v4l/scripts/strip-trailing-whitespaces.sh: