remove iso frames from standard URB

Oliver Neukum <[email protected]>
Newsgroups gmane.linux.usb.devel
Message-ID <[email protected]>
Hi,

as requested, here's a patch that moves the iso frames into
their own allocation. That's a prerequisite to most modifications
of the API currently being discussed.
The name has been changed to something neutral.

	Regards
		Oliver
-----

diff -urp vanilla/drivers/bluetooth/hci_usb.c isotree/drivers/bluetooth/hci_usb.c
--- vanilla/drivers/bluetooth/hci_usb.c	2007-07-04 14:14:27.000000000 +0200
+++ isotree/drivers/bluetooth/hci_usb.c	2007-07-04 14:01:06.000000000 +0200
@@ -214,13 +214,13 @@ static void __fill_isoc_desc(struct urb 
 	BT_DBG("len %d mtu %d", len, mtu);
 
 	for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
-		urb->iso_frame_desc[i].offset = offset;
-		urb->iso_frame_desc[i].length = mtu;
+		urb->iso_packets[i].offset = offset;
+		urb->iso_packets[i].length = mtu;
 		BT_DBG("desc %d offset %d len %d", i, offset, mtu);
 	}
 	if (len && i < HCI_MAX_ISOC_FRAMES) {
-		urb->iso_frame_desc[i].offset = offset;
-		urb->iso_frame_desc[i].length = len;
+		urb->iso_packets[i].offset = offset;
+		urb->iso_packets[i].length = len;
 		BT_DBG("desc %d offset %d len %d", i, offset, len);
 		i++;
 	}
@@ -771,14 +771,14 @@ static void hci_usb_rx_complete(struct u
 		int i;
 		for (i=0; i < urb->number_of_packets; i++) {
 			BT_DBG("desc %d status %d offset %d len %d", i,
-					urb->iso_frame_desc[i].status,
-					urb->iso_frame_desc[i].offset,
-					urb->iso_frame_desc[i].actual_length);
+					urb->iso_packets[i].status,
+					urb->iso_packets[i].offset,
+					urb->iso_packets[i].actual_length);
 	
-			if (!urb->iso_frame_desc[i].status)
+			if (!urb->iso_packets[i].status)
 				__recv_frame(husb, _urb->type, 
-					urb->transfer_buffer + urb->iso_frame_desc[i].offset,
-					urb->iso_frame_desc[i].actual_length);
+					urb->transfer_buffer + urb->iso_packets[i].offset,
+					urb->iso_packets[i].actual_length);
 		}
 #else
 		;
diff -urp vanilla/drivers/isdn/gigaset/bas-gigaset.c isotree/drivers/isdn/gigaset/bas-gigaset.c
--- vanilla/drivers/isdn/gigaset/bas-gigaset.c	2007-07-04 14:09:14.000000000 +0200
+++ isotree/drivers/isdn/gigaset/bas-gigaset.c	2007-07-04 14:01:06.000000000 +0200
@@ -268,12 +268,12 @@ static inline void dump_urb(enum debugle
 			urb->error_count);
 		gig_dbg(level,
 			"  context=0x%08lx, complete=0x%08lx, "
-			"iso_frame_desc[]={",
+			"iso_packets[]={",
 			(unsigned long) urb->context,
 			(unsigned long) urb->complete);
 		for (i = 0; i < urb->number_of_packets; i++) {
 			struct usb_iso_packet_descriptor *pifd
-				= &urb->iso_frame_desc[i];
+				= &urb->iso_packets[i];
 			gig_dbg(level,
 				"    {offset=%u, length=%u, actual_length=%u, "
 				"status=%u}",
@@ -792,13 +792,13 @@ static void read_iso_callback(struct urb
 		/* tasklet still busy, drop data and resubmit URB */
 		ubc->loststatus = urb->status;
 		for (i = 0; i < BAS_NUMFRAMES; i++) {
-			ubc->isoinlost += urb->iso_frame_desc[i].actual_length;
-			if (unlikely(urb->iso_frame_desc[i].status != 0 &&
-				     urb->iso_frame_desc[i].status !=
+			ubc->isoinlost += urb->iso_packets[i].actual_length;
+			if (unlikely(urb->iso_packets[i].status != 0 &&
+				     urb->iso_packets[i].status !=
 								-EINPROGRESS))
-				ubc->loststatus = urb->iso_frame_desc[i].status;
-			urb->iso_frame_desc[i].status = 0;
-			urb->iso_frame_desc[i].actual_length = 0;
+				ubc->loststatus = urb->iso_packets[i].status;
+			urb->iso_packets[i].status = 0;
+			urb->iso_packets[i].actual_length = 0;
 		}
 		if (likely(atomic_read(&ubc->running))) {
 			/* urb->dev is clobbered by USB subsystem */
@@ -893,10 +893,10 @@ static int starturbs(struct bc_state *bc
 		urb->complete = read_iso_callback;
 		urb->context = bcs;
 		for (j = 0; j < BAS_NUMFRAMES; j++) {
-			urb->iso_frame_desc[j].offset = j * BAS_MAXFRAME;
-			urb->iso_frame_desc[j].length = BAS_MAXFRAME;
-			urb->iso_frame_desc[j].status = 0;
-			urb->iso_frame_desc[j].actual_length = 0;
+			urb->iso_packets[j].offset = j * BAS_MAXFRAME;
+			urb->iso_packets[j].length = BAS_MAXFRAME;
+			urb->iso_packets[j].status = 0;
+			urb->iso_packets[j].actual_length = 0;
 		}
 
 		dump_urb(DEBUG_ISO, "Initial isoc read", urb);
@@ -924,10 +924,10 @@ static int starturbs(struct bc_state *bc
 		urb->complete = write_iso_callback;
 		urb->context = &ubc->isoouturbs[k];
 		for (j = 0; j < BAS_NUMFRAMES; ++j) {
-			urb->iso_frame_desc[j].offset = BAS_OUTBUFSIZE;
-			urb->iso_frame_desc[j].length = BAS_NORMFRAME;
-			urb->iso_frame_desc[j].status = 0;
-			urb->iso_frame_desc[j].actual_length = 0;
+			urb->iso_packets[j].offset = BAS_OUTBUFSIZE;
+			urb->iso_packets[j].length = BAS_NORMFRAME;
+			urb->iso_packets[j].status = 0;
+			urb->iso_packets[j].actual_length = 0;
 		}
 		ubc->isoouturbs[k].limit = -1;
 	}
@@ -1001,7 +1001,7 @@ static int submit_iso_write_urb(struct i
 	urb->transfer_buffer_length = sizeof(ubc->isooutbuf->data);
 
 	for (nframe = 0; nframe < BAS_NUMFRAMES; nframe++) {
-		ifd = &urb->iso_frame_desc[nframe];
+		ifd = &urb->iso_packets[nframe];
 
 		/* compute frame length according to flow control */
 		ifd->length = BAS_NORMFRAME;
@@ -1140,7 +1140,7 @@ static void write_iso_tasklet(unsigned l
 			 */
 			offset = done->limit;	/* default (no error) */
 			for (i = 0; i < BAS_NUMFRAMES; i++) {
-				ifd = &urb->iso_frame_desc[i];
+				ifd = &urb->iso_packets[i];
 				if (ifd->status ||
 				    ifd->actual_length != ifd->length) {
 					dev_warn(cs->dev,
@@ -1157,7 +1157,7 @@ static void write_iso_tasklet(unsigned l
 #ifdef CONFIG_GIGASET_DEBUG
 			/* check assumption on remaining frames */
 			for (; i < BAS_NUMFRAMES; i++) {
-				ifd = &urb->iso_frame_desc[i];
+				ifd = &urb->iso_packets[i];
 				if (ifd->status != -EINPROGRESS
 				    || ifd->actual_length != 0) {
 					dev_warn(cs->dev,
@@ -1291,15 +1291,15 @@ static void read_iso_tasklet(unsigned lo
 		rcvbuf = urb->transfer_buffer;
 		totleft = urb->actual_length;
 		for (frame = 0; totleft > 0 && frame < BAS_NUMFRAMES; frame++) {
-			if (unlikely(urb->iso_frame_desc[frame].status)) {
+			if (unlikely(urb->iso_packets[frame].status)) {
 				dev_warn(cs->dev,
 					 "isochronous read: frame %d: %s\n",
 					 frame,
 					 get_usb_statmsg(
-					    urb->iso_frame_desc[frame].status));
+					    urb->iso_packets[frame].status));
 				break;
 			}
-			numbytes = urb->iso_frame_desc[frame].actual_length;
+			numbytes = urb->iso_packets[frame].actual_length;
 			if (unlikely(numbytes > BAS_MAXFRAME)) {
 				dev_warn(cs->dev,
 					 "isochronous read: frame %d: "
@@ -1314,7 +1314,7 @@ static void read_iso_tasklet(unsigned lo
 					 frame, numbytes, totleft);
 				break;
 			}
-			offset = urb->iso_frame_desc[frame].offset;
+			offset = urb->iso_packets[frame].offset;
 			if (unlikely(offset + numbytes > BAS_INBUFSIZE)) {
 				dev_warn(cs->dev,
 					 "isochronous read: frame %d: "
@@ -1334,8 +1334,8 @@ static void read_iso_tasklet(unsigned lo
 	error:
 		/* URB processed, resubmit */
 		for (frame = 0; frame < BAS_NUMFRAMES; frame++) {
-			urb->iso_frame_desc[frame].status = 0;
-			urb->iso_frame_desc[frame].actual_length = 0;
+			urb->iso_packets[frame].status = 0;
+			urb->iso_packets[frame].actual_length = 0;
 		}
 		/* urb->dev is clobbered by USB subsystem */
 		urb->dev = bcs->cs->hw.bas->udev;
diff -urp vanilla/drivers/isdn/hisax/hfc_usb.c isotree/drivers/isdn/hisax/hfc_usb.c
--- vanilla/drivers/isdn/hisax/hfc_usb.c	2007-07-04 14:14:34.000000000 +0200
+++ isotree/drivers/isdn/hisax/hfc_usb.c	2007-07-04 14:01:06.000000000 +0200
@@ -496,9 +496,9 @@ fill_isoc_urb(struct urb *urb, struct us
 	urb->actual_length = 0;
 	urb->interval = interval;
 	for (k = 0; k < num_packets; k++) {
-		urb->iso_frame_desc[k].offset = packet_size * k;
-		urb->iso_frame_desc[k].length = packet_size;
-		urb->iso_frame_desc[k].actual_length = 0;
+		urb->iso_packets[k].offset = packet_size * k;
+		urb->iso_packets[k].length = packet_size;
+		urb->iso_packets[k].actual_length = 0;
 	}
 }
 
@@ -541,10 +541,10 @@ start_isoc_chain(usb_fifo * fifo, int nu
 				/* defining packet delimeters in fifo->buffer */
 				for (k = 0; k < num_packets_per_urb; k++) {
 					fifo->iso[i].purb->
-					    iso_frame_desc[k].offset =
+					    iso_packets[k].offset =
 					    k * packet_size;
 					fifo->iso[i].purb->
-					    iso_frame_desc[k].length =
+					    iso_packets[k].length =
 					    packet_size;
 				}
 			} else {
@@ -670,16 +670,16 @@ tx_iso_complete(struct urb *urb)
 				skb_pull(fifo->skbuff, current_len);
 
 				/* define packet delimeters within the URB buffer */
-				urb->iso_frame_desc[k].offset = tx_offset;
-				urb->iso_frame_desc[k].length =
+				urb->iso_packets[k].offset = tx_offset;
+				urb->iso_packets[k].length =
 				    current_len + 1;
 
 				tx_offset += (current_len + 1);
 			} else {
-				urb->iso_frame_desc[k].offset =
+				urb->iso_packets[k].offset =
 				    tx_offset++;
 
-				urb->iso_frame_desc[k].length = 1;
+				urb->iso_packets[k].length = 1;
 				fifo->bit_line -= sink;	/* we lower data margin every msec */
 
 				if (fifo->bit_line < BITLINE_INF) {
@@ -750,10 +750,10 @@ rx_iso_complete(struct urb *urb)
 		num_isoc_packets = iso_packets[fifon];
 		maxlen = fifo->usb_packet_maxlen;
 		for (k = 0; k < num_isoc_packets; ++k) {
-			len = urb->iso_frame_desc[k].actual_length;
-			offset = urb->iso_frame_desc[k].offset;
+			len = urb->iso_packets[k].actual_length;
+			offset = urb->iso_packets[k].offset;
 			buf = context_iso_urb->buffer + offset;
-			iso_status = urb->iso_frame_desc[k].status;
+			iso_status = urb->iso_packets[k].status;
 #ifdef CONFIG_HISAX_DEBUG
 			if (iso_status && !hfc->disc_flag)
 				DBG(USB_DBG,
diff -urp vanilla/drivers/isdn/hisax/st5481_b.c isotree/drivers/isdn/hisax/st5481_b.c
--- vanilla/drivers/isdn/hisax/st5481_b.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/isdn/hisax/st5481_b.c	2007-07-04 14:01:06.000000000 +0200
@@ -109,8 +109,8 @@ static void usb_b_out(struct st5481_bcs 
 
 	// Prepare the URB
 	for (i = 0, offset = 0; offset < len; i++) {
-		urb->iso_frame_desc[i].offset = offset;
-		urb->iso_frame_desc[i].length = packet_size;
+		urb->iso_packets[i].offset = offset;
+		urb->iso_packets[i].length = packet_size;
 		offset += packet_size;
 		packet_size = SIZE_ISO_PACKETS_B_OUT;
 	}
diff -urp vanilla/drivers/isdn/hisax/st5481_d.c isotree/drivers/isdn/hisax/st5481_d.c
--- vanilla/drivers/isdn/hisax/st5481_d.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/isdn/hisax/st5481_d.c	2007-07-04 14:01:06.000000000 +0200
@@ -338,7 +338,7 @@ static void usb_d_out(struct st5481_adap
 	num_packets = 0;
 	packet_offset = 0;
 	while (packet_offset < len) {
-		desc = &urb->iso_frame_desc[num_packets];
+		desc = &urb->iso_packets[num_packets];
 		desc->offset = packet_offset;
 		desc->length = SIZE_ISO_PACKETS_D_OUT;
 		if (len - packet_offset < desc->length)
@@ -445,8 +445,8 @@ static void dout_start_xmit(struct FsmIn
 // Prepare the URB
 	urb->transfer_buffer_length = len;
 
-	urb->iso_frame_desc[0].offset = 0;
-	urb->iso_frame_desc[0].length = len;
+	urb->iso_packets[0].offset = 0;
+	urb->iso_packets[0].length = len;
 	urb->number_of_packets = 1;
 
 	// Prepare the URB
diff -urp vanilla/drivers/isdn/hisax/st5481.h isotree/drivers/isdn/hisax/st5481.h
--- vanilla/drivers/isdn/hisax/st5481.h	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/isdn/hisax/st5481.h	2007-07-04 14:01:06.000000000 +0200
@@ -483,11 +483,11 @@ dump_iso_packet(const char *name, struct
 	       name,urb->number_of_packets,urb->error_count);
 	for (i = 0; i  < urb->number_of_packets; ++i) {
 		if (urb->pipe & USB_DIR_IN) {
-			len = urb->iso_frame_desc[i].actual_length;
+			len = urb->iso_packets[i].actual_length;
 		} else {
-			len = urb->iso_frame_desc[i].length;
+			len = urb->iso_packets[i].length;
 		}
-		ofs = urb->iso_frame_desc[i].offset;
+		ofs = urb->iso_packets[i].offset;
 		printk(KERN_DEBUG "len=%.2d,ofs=%.3d ",len,ofs);
 		if (len) {
 			data = urb->transfer_buffer+ofs;
diff -urp vanilla/drivers/isdn/hisax/st5481_usb.c isotree/drivers/isdn/hisax/st5481_usb.c
--- vanilla/drivers/isdn/hisax/st5481_usb.c	2007-07-04 14:14:34.000000000 +0200
+++ isotree/drivers/isdn/hisax/st5481_usb.c	2007-07-04 14:01:06.000000000 +0200
@@ -418,9 +418,9 @@ fill_isoc_urb(struct urb *urb, struct us
 	urb->context=context;
 	urb->transfer_flags=URB_ISO_ASAP;
 	for (k = 0; k < num_packets; k++) {
-		urb->iso_frame_desc[k].offset = packet_size * k;
-		urb->iso_frame_desc[k].length = packet_size;
-		urb->iso_frame_desc[k].actual_length = 0;
+		urb->iso_packets[k].offset = packet_size * k;
+		urb->iso_packets[k].length = packet_size;
+		urb->iso_packets[k].actual_length = 0;
 	}
 }
 
@@ -591,8 +591,8 @@ static int st5481_isoc_flatten(struct ur
 	if (urb->status < 0) {
 		return urb->status;
 	}
-	for (pipd = &urb->iso_frame_desc[0],
-		     pend = &urb->iso_frame_desc[urb->number_of_packets],
+	for (pipd = &urb->iso_packets[0],
+		     pend = &urb->iso_packets[urb->number_of_packets],
 		     dst = urb->transfer_buffer; 
 	     pipd < pend; 
 	     pipd++) {
diff -urp vanilla/drivers/media/dvb/b2c2/flexcop-usb.c isotree/drivers/media/dvb/b2c2/flexcop-usb.c
--- vanilla/drivers/media/dvb/b2c2/flexcop-usb.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/media/dvb/b2c2/flexcop-usb.c	2007-07-04 14:01:06.000000000 +0200
@@ -337,18 +337,18 @@ static void flexcop_usb_urb_complete(str
 		deb_ts("urb completed, bufsize: %d actlen; %d\n",urb->transfer_buffer_length, urb->actual_length);
 
 	for (i = 0; i < urb->number_of_packets; i++) {
-		if (urb->iso_frame_desc[i].status < 0) {
-			err("iso frame descriptor %d has an error: %d\n",i,urb->iso_frame_desc[i].status);
+		if (urb->iso_packets[i].status < 0) {
+			err("iso frame descriptor %d has an error: %d\n",i,urb->iso_packets[i].status);
 		} else
-			if (urb->iso_frame_desc[i].actual_length > 0) {
-				deb_ts("passed %d bytes to the demux\n",urb->iso_frame_desc[i].actual_length);
+			if (urb->iso_packets[i].actual_length > 0) {
+				deb_ts("passed %d bytes to the demux\n",urb->iso_packets[i].actual_length);
 
 				flexcop_usb_process_frame(fc_usb,
-					urb->transfer_buffer + urb->iso_frame_desc[i].offset,
-					urb->iso_frame_desc[i].actual_length);
+					urb->transfer_buffer + urb->iso_packets[i].offset,
+					urb->iso_packets[i].actual_length);
 		}
-		urb->iso_frame_desc[i].status = 0;
-		urb->iso_frame_desc[i].actual_length = 0;
+		urb->iso_packets[i].status = 0;
+		urb->iso_packets[i].actual_length = 0;
 	}
 
 	usb_submit_urb(urb,GFP_ATOMIC);
@@ -414,8 +414,8 @@ static int flexcop_usb_transfer_init(str
 		buffer_offset += frame_size * B2C2_USB_FRAMES_PER_ISO;
 		for (j = 0; j < B2C2_USB_FRAMES_PER_ISO; j++) {
 			deb_ts("urb no: %d, frame: %d, frame_offset: %d\n",i,j,frame_offset);
-			urb->iso_frame_desc[j].offset = frame_offset;
-			urb->iso_frame_desc[j].length = frame_size;
+			urb->iso_packets[j].offset = frame_offset;
+			urb->iso_packets[j].length = frame_size;
 			frame_offset += frame_size;
 		}
 
diff -urp vanilla/drivers/media/dvb/dvb-usb/usb-urb.c isotree/drivers/media/dvb/dvb-usb/usb-urb.c
--- vanilla/drivers/media/dvb/dvb-usb/usb-urb.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/media/dvb/dvb-usb/usb-urb.c	2007-07-04 14:01:06.000000000 +0200
@@ -41,13 +41,13 @@ static void usb_urb_complete(struct urb 
 		case PIPE_ISOCHRONOUS:
 			for (i = 0; i < urb->number_of_packets; i++) {
 
-				if (urb->iso_frame_desc[i].status != 0)
-					deb_ts("iso frame descriptor has an error: %d\n",urb->iso_frame_desc[i].status);
-				else if (urb->iso_frame_desc[i].actual_length > 0)
-					stream->complete(stream, b + urb->iso_frame_desc[i].offset, urb->iso_frame_desc[i].actual_length);
+				if (urb->iso_packets[i].status != 0)
+					deb_ts("iso frame descriptor has an error: %d\n",urb->iso_packets[i].status);
+				else if (urb->iso_packets[i].actual_length > 0)
+					stream->complete(stream, b + urb->iso_packets[i].offset, urb->iso_packets[i].actual_length);
 
-				urb->iso_frame_desc[i].status = 0;
-				urb->iso_frame_desc[i].actual_length = 0;
+				urb->iso_packets[i].status = 0;
+				urb->iso_packets[i].actual_length = 0;
 			}
 			debug_dump(b,20,deb_uxfer);
 			break;
@@ -188,8 +188,8 @@ static int usb_isoc_urb_init(struct usb_
 		urb->transfer_dma = stream->dma_addr[i];
 
 		for (j = 0; j < stream->props.u.isoc.framesperurb; j++) {
-			urb->iso_frame_desc[j].offset = frame_offset;
-			urb->iso_frame_desc[j].length = stream->props.u.isoc.framesize;
+			urb->iso_packets[j].offset = frame_offset;
+			urb->iso_packets[j].length = stream->props.u.isoc.framesize;
 			frame_offset += stream->props.u.isoc.framesize;
 		}
 
diff -urp vanilla/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c isotree/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
--- vanilla/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c	2007-07-04 14:09:15.000000000 +0200
+++ isotree/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c	2007-07-04 14:01:06.000000000 +0200
@@ -765,7 +765,7 @@ static void ttusb_iso_irq(struct urb *ur
 				lastj = jiffies;
 				numpkt = 0;
 			}
-			d = &urb->iso_frame_desc[i];
+			d = &urb->iso_packets[i];
 			data = urb->transfer_buffer + d->offset;
 			len = d->actual_length;
 			d->actual_length = 0;
@@ -859,8 +859,8 @@ static int ttusb_start_iso_xfer(struct t
 		buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
 
 		for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
-			urb->iso_frame_desc[j].offset = frame_offset;
-			urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
+			urb->iso_packets[j].offset = frame_offset;
+			urb->iso_packets[j].length = ISO_FRAME_SIZE;
 			frame_offset += ISO_FRAME_SIZE;
 		}
 	}
diff -urp vanilla/drivers/media/dvb/ttusb-dec/ttusb_dec.c isotree/drivers/media/dvb/ttusb-dec/ttusb_dec.c
--- vanilla/drivers/media/dvb/ttusb-dec/ttusb_dec.c	2007-07-04 14:09:15.000000000 +0200
+++ isotree/drivers/media/dvb/ttusb-dec/ttusb_dec.c	2007-07-04 14:01:06.000000000 +0200
@@ -769,7 +769,7 @@ static void ttusb_dec_process_urb(struct
 			int length;
 			struct urb_frame *frame;
 
-			d = &urb->iso_frame_desc[i];
+			d = &urb->iso_packets[i];
 			b = urb->transfer_buffer + d->offset;
 			length = d->actual_length;
 
@@ -824,8 +824,8 @@ static void ttusb_dec_setup_urbs(struct 
 		buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
 
 		for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
-			urb->iso_frame_desc[j].offset = frame_offset;
-			urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
+			urb->iso_packets[j].offset = frame_offset;
+			urb->iso_packets[j].length = ISO_FRAME_SIZE;
 			frame_offset += ISO_FRAME_SIZE;
 		}
 	}
diff -urp vanilla/drivers/media/video/cpia2/cpia2_usb.c isotree/drivers/media/video/cpia2/cpia2_usb.c
--- vanilla/drivers/media/video/cpia2/cpia2_usb.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/media/video/cpia2/cpia2_usb.c	2007-07-04 14:01:06.000000000 +0200
@@ -231,8 +231,8 @@ static void cpia2_usb_complete(struct ur
 	for (i = 0; i < urb->number_of_packets; i++) {
 		u16 checksum, iso_checksum;
 		int j;
-		int n = urb->iso_frame_desc[i].actual_length;
-		int st = urb->iso_frame_desc[i].status;
+		int n = urb->iso_packets[i].actual_length;
+		int st = urb->iso_packets[i].status;
 
 		if(cam->workbuff->status == FRAME_READY) {
 			struct framebuf *ptr;
@@ -261,7 +261,7 @@ static void cpia2_usb_complete(struct ur
 		}
 
 		//DBG("   Packet %d length = %d, status = %d\n", i, n, st);
-		cdata = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
+		cdata = urb->transfer_buffer + urb->iso_packets[i].offset;
 
 		if (st) {
 			LOG("cpia2 data error: [%d] len=%d, status = %d\n",
@@ -673,9 +673,9 @@ static int submit_urbs(struct camera_dat
 			FRAME_SIZE_PER_DESC * FRAMES_PER_DESC;
 
 		for (fx = 0; fx < FRAMES_PER_DESC; fx++) {
-			urb->iso_frame_desc[fx].offset =
+			urb->iso_packets[fx].offset =
 				FRAME_SIZE_PER_DESC * fx;
-			urb->iso_frame_desc[fx].length = FRAME_SIZE_PER_DESC;
+			urb->iso_packets[fx].length = FRAME_SIZE_PER_DESC;
 		}
 	}
 
diff -urp vanilla/drivers/media/video/cpia_usb.c isotree/drivers/media/video/cpia_usb.c
--- vanilla/drivers/media/video/cpia_usb.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/media/video/cpia_usb.c	2007-07-04 14:01:06.000000000 +0200
@@ -129,10 +129,10 @@ static void cpia_usb_complete(struct urb
 	}
 
 	for (i = 0; i < urb->number_of_packets; i++) {
-		int n = urb->iso_frame_desc[i].actual_length;
-		int st = urb->iso_frame_desc[i].status;
+		int n = urb->iso_packets[i].actual_length;
+		int st = urb->iso_packets[i].status;
 
-		cdata = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
+		cdata = urb->transfer_buffer + urb->iso_packets[i].offset;
 
 		if (st)
 			printk(KERN_DEBUG "cpia data error: [%d] len=%d, status=%X\n", i, n, st);
@@ -229,8 +229,8 @@ static int cpia_usb_open(void *privdata)
 	urb->interval = 1;
 	urb->transfer_buffer_length = FRAME_SIZE_PER_DESC * FRAMES_PER_DESC;
 	for (fx = 0; fx < FRAMES_PER_DESC; fx++) {
-		urb->iso_frame_desc[fx].offset = FRAME_SIZE_PER_DESC * fx;
-		urb->iso_frame_desc[fx].length = FRAME_SIZE_PER_DESC;
+		urb->iso_packets[fx].offset = FRAME_SIZE_PER_DESC * fx;
+		urb->iso_packets[fx].length = FRAME_SIZE_PER_DESC;
 	}
 
 	urb = usb_alloc_urb(FRAMES_PER_DESC, GFP_KERNEL);
@@ -251,8 +251,8 @@ static int cpia_usb_open(void *privdata)
 	urb->interval = 1;
 	urb->transfer_buffer_length = FRAME_SIZE_PER_DESC * FRAMES_PER_DESC;
 	for (fx = 0; fx < FRAMES_PER_DESC; fx++) {
-		urb->iso_frame_desc[fx].offset = FRAME_SIZE_PER_DESC * fx;
-		urb->iso_frame_desc[fx].length = FRAME_SIZE_PER_DESC;
+		urb->iso_packets[fx].offset = FRAME_SIZE_PER_DESC * fx;
+		urb->iso_packets[fx].length = FRAME_SIZE_PER_DESC;
 	}
 
 	/* queue the ISO urbs, and resubmit in the completion handler */
diff -urp vanilla/drivers/media/video/dabusb.c isotree/drivers/media/video/dabusb.c
--- vanilla/drivers/media/video/dabusb.c	2007-07-04 14:14:34.000000000 +0200
+++ isotree/drivers/media/video/dabusb.c	2007-07-04 14:01:06.000000000 +0200
@@ -181,17 +181,17 @@ static void dabusb_iso_complete (struct 
 		unsigned int pipe = usb_rcvisocpipe (purb->dev, _DABUSB_ISOPIPE);
 		int pipesize = usb_maxpacket (purb->dev, pipe, usb_pipeout (pipe));
 		for (i = 0; i < purb->number_of_packets; i++)
-			if (!purb->iso_frame_desc[i].status) {
-				len = purb->iso_frame_desc[i].actual_length;
+			if (!purb->iso_packets[i].status) {
+				len = purb->iso_packets[i].actual_length;
 				if (len <= pipesize) {
-					memcpy (buf + dst, buf + purb->iso_frame_desc[i].offset, len);
+					memcpy (buf + dst, buf + purb->iso_packets[i].offset, len);
 					dst += len;
 				}
 				else
 					err("dabusb_iso_complete: invalid len %d", len);
 			}
 			else
-				warn("dabusb_iso_complete: corrupted packet status: %d", purb->iso_frame_desc[i].status);
+				warn("dabusb_iso_complete: corrupted packet status: %d", purb->iso_packets[i].status);
 		if (dst != purb->actual_length)
 			err("dst!=purb->actual_length:%d!=%d", dst, purb->actual_length);
 	}
@@ -247,8 +247,8 @@ static int dabusb_alloc_buffers (pdabusb
 		b->purb->transfer_flags = URB_ISO_ASAP;
 
 		for (i = 0; i < packets; i++) {
-			b->purb->iso_frame_desc[i].offset = i * pipesize;
-			b->purb->iso_frame_desc[i].length = pipesize;
+			b->purb->iso_packets[i].offset = i * pipesize;
+			b->purb->iso_packets[i].length = pipesize;
 		}
 
 		buffers += transfer_buffer_length;
diff -urp vanilla/drivers/media/video/em28xx/em28xx-core.c isotree/drivers/media/video/em28xx/em28xx-core.c
--- vanilla/drivers/media/video/em28xx/em28xx-core.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/media/video/em28xx/em28xx-core.c	2007-07-04 14:01:06.000000000 +0200
@@ -394,8 +394,8 @@ static void em28xx_isoc_dump(struct urb 
 	for (i = 0; i < urb->number_of_packets; i++) {
 		unsigned char *buf =
 				urb->transfer_buffer +
-				urb->iso_frame_desc[i].offset;
-		int alen = urb->iso_frame_desc[i].actual_length;
+				urb->iso_packets[i].offset;
+		int alen = urb->iso_packets[i].actual_length;
 		if (alen > 0) {
 			if (buf[0] == 0x88) {
 				ntrans++;
@@ -411,11 +411,11 @@ static void em28xx_isoc_dump(struct urb 
 				printk(KERN_DEBUG "!\n");
 		}
 		printk(KERN_DEBUG "   n=%d s=%d al=%d %x\n", i,
-		       urb->iso_frame_desc[i].status,
-		       urb->iso_frame_desc[i].actual_length,
+		       urb->iso_packets[i].status,
+		       urb->iso_packets[i].actual_length,
 		       (unsigned int)
 				       *((unsigned char *)(urb->transfer_buffer +
-				       urb->iso_frame_desc[i].
+				       urb->iso_packets[i].
 				       offset)));
 	}
 }
@@ -571,21 +571,21 @@ static void em28xx_isocIrq(struct urb *u
 
 		for (i = 0; i < urb->number_of_packets; i++) {
 			unsigned char *buf = urb->transfer_buffer +
-					urb->iso_frame_desc[i].offset;
-			int len = urb->iso_frame_desc[i].actual_length - 4;
+					urb->iso_packets[i].offset;
+			int len = urb->iso_packets[i].actual_length - 4;
 
-			if (urb->iso_frame_desc[i].status) {
+			if (urb->iso_packets[i].status) {
 				em28xx_isocdbg("data error: [%d] len=%d, status=%d", i,
-					urb->iso_frame_desc[i].actual_length,
-					urb->iso_frame_desc[i].status);
-				if (urb->iso_frame_desc[i].status != -EPROTO)
+					urb->iso_packets[i].actual_length,
+					urb->iso_packets[i].status);
+				if (urb->iso_packets[i].status != -EPROTO)
 					continue;
 			}
-			if (urb->iso_frame_desc[i].actual_length <= 0) {
+			if (urb->iso_packets[i].actual_length <= 0) {
 				em28xx_isocdbg("packet %d is empty",i);
 				continue;
 			}
-			if (urb->iso_frame_desc[i].actual_length >
+			if (urb->iso_packets[i].actual_length >
 						 dev->max_pkt_size) {
 				em28xx_isocdbg("packet bigger than packet size");
 				continue;
@@ -608,8 +608,8 @@ static void em28xx_isocIrq(struct urb *u
 	}
 
 	for (i = 0; i < urb->number_of_packets; i++) {
-		urb->iso_frame_desc[i].status = 0;
-		urb->iso_frame_desc[i].actual_length = 0;
+		urb->iso_packets[i].status = 0;
+		urb->iso_packets[i].actual_length = 0;
 	}
 
 	urb->status = 0;
@@ -688,8 +688,8 @@ int em28xx_init_isoc(struct em28xx *dev)
 		urb->transfer_buffer_length = sb_size;
 		for (j = k = 0; j < EM28XX_NUM_PACKETS;
 				j++, k += dev->max_pkt_size) {
-			urb->iso_frame_desc[j].offset = k;
-			urb->iso_frame_desc[j].length =
+			urb->iso_packets[j].offset = k;
+			urb->iso_packets[j].length =
 				dev->max_pkt_size;
 		}
 		dev->urb[i] = urb;
diff -urp vanilla/drivers/media/video/et61x251/et61x251_core.c isotree/drivers/media/video/et61x251/et61x251_core.c
--- vanilla/drivers/media/video/et61x251/et61x251_core.c	2007-07-04 14:09:16.000000000 +0200
+++ isotree/drivers/media/video/et61x251/et61x251_core.c	2007-07-04 14:01:06.000000000 +0200
@@ -446,9 +446,9 @@ static void et61x251_urb_complete(struct
 		const u8 VOID_BYTES = 6;
 		size_t imglen;
 
-		len = urb->iso_frame_desc[i].actual_length;
-		status = urb->iso_frame_desc[i].status;
-		pos = urb->iso_frame_desc[i].offset + urb->transfer_buffer;
+		len = urb->iso_packets[i].actual_length;
+		status = urb->iso_packets[i].status;
+		pos = urb->iso_packets[i].offset + urb->transfer_buffer;
 
 		if (status) {
 			DBG(3, "Error in isochronous frame");
@@ -580,8 +580,8 @@ static int et61x251_start_transfer(struc
 		urb->transfer_buffer_length = psz * ET61X251_ISO_PACKETS;
 		urb->interval = 1;
 		for (j = 0; j < ET61X251_ISO_PACKETS; j++) {
-			urb->iso_frame_desc[j].offset = psz * j;
-			urb->iso_frame_desc[j].length = psz;
+			urb->iso_packets[j].offset = psz * j;
+			urb->iso_packets[j].length = psz;
 		}
 	}
 
diff -urp vanilla/drivers/media/video/ov511.c isotree/drivers/media/video/ov511.c
--- vanilla/drivers/media/video/ov511.c	2007-07-04 14:09:16.000000000 +0200
+++ isotree/drivers/media/video/ov511.c	2007-07-04 14:01:06.000000000 +0200
@@ -3543,15 +3543,15 @@ ov51x_isoc_irq(struct urb *urb)
 	for (i = 0; i < urb->number_of_packets; i++) {
 		/* Warning: Don't call *_move_data() if no frame active! */
 		if (ov->curframe >= 0) {
-			int n = urb->iso_frame_desc[i].actual_length;
-			int st = urb->iso_frame_desc[i].status;
+			int n = urb->iso_packets[i].actual_length;
+			int st = urb->iso_packets[i].status;
 			unsigned char *cdata;
 
-			urb->iso_frame_desc[i].actual_length = 0;
-			urb->iso_frame_desc[i].status = 0;
+			urb->iso_packets[i].actual_length = 0;
+			urb->iso_packets[i].status = 0;
 
 			cdata = urb->transfer_buffer
-				+ urb->iso_frame_desc[i].offset;
+				+ urb->iso_packets[i].offset;
 
 			if (!n) {
 				PDEBUG(4, "Zero-length packet");
@@ -3676,8 +3676,8 @@ ov51x_init_isoc(struct usb_ov511 *ov)
 		urb->transfer_buffer_length = ov->packet_size * FRAMES_PER_DESC;
 		urb->interval = 1;
 		for (fx = 0; fx < FRAMES_PER_DESC; fx++) {
-			urb->iso_frame_desc[fx].offset = ov->packet_size * fx;
-			urb->iso_frame_desc[fx].length = ov->packet_size;
+			urb->iso_packets[fx].offset = ov->packet_size * fx;
+			urb->iso_packets[fx].length = ov->packet_size;
 		}
 	}
 
diff -urp vanilla/drivers/media/video/pwc/pwc-if.c isotree/drivers/media/video/pwc/pwc-if.c
--- vanilla/drivers/media/video/pwc/pwc-if.c	2007-07-04 14:14:35.000000000 +0200
+++ isotree/drivers/media/video/pwc/pwc-if.c	2007-07-04 14:04:24.000000000 +0200
@@ -746,9 +746,9 @@ static void pwc_isoc_handler(struct urb 
 	 */
 	/* Compact data */
 	for (i = 0; i < urb->number_of_packets; i++) {
-		fst  = urb->iso_frame_desc[i].status;
-		flen = urb->iso_frame_desc[i].actual_length;
-		iso_buf = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
+		fst  = urb->iso_packets[i].status;
+		flen = urb->iso_packets[i].actual_length;
+		iso_buf = urb->transfer_buffer + urb->iso_packets[i].offset;
 		if (fst == 0) {
 			if (flen > 0) { /* if valid data... */
 				if (pdev->vsync > 0) { /* ...and we are not sync-hunting... */
@@ -888,8 +888,8 @@ int pwc_isoc_init(struct pwc_device *pde
 		urb->start_frame = 0;
 		urb->number_of_packets = ISO_FRAMES_PER_DESC;
 		for (j = 0; j < ISO_FRAMES_PER_DESC; j++) {
-			urb->iso_frame_desc[j].offset = j * ISO_MAX_FRAME_SIZE;
-			urb->iso_frame_desc[j].length = pdev->vmax_packet_size;
+			urb->iso_packets[j].offset = j * ISO_MAX_FRAME_SIZE;
+			urb->iso_packets[j].length = pdev->vmax_packet_size;
 		}
 	}
 
diff -urp vanilla/drivers/media/video/sn9c102/sn9c102_core.c isotree/drivers/media/video/sn9c102/sn9c102_core.c
--- vanilla/drivers/media/video/sn9c102/sn9c102_core.c	2007-07-04 14:14:35.000000000 +0200
+++ isotree/drivers/media/video/sn9c102/sn9c102_core.c	2007-07-04 14:01:06.000000000 +0200
@@ -710,9 +710,9 @@ static void sn9c102_urb_complete(struct 
 		unsigned int img, len, status;
 		void *pos, *sof, *eof;
 
-		len = urb->iso_frame_desc[i].actual_length;
-		status = urb->iso_frame_desc[i].status;
-		pos = urb->iso_frame_desc[i].offset + urb->transfer_buffer;
+		len = urb->iso_packets[i].actual_length;
+		status = urb->iso_packets[i].status;
+		pos = urb->iso_packets[i].offset + urb->transfer_buffer;
 
 		if (status) {
 			DBG(3, "Error in isochronous frame");
@@ -899,8 +899,8 @@ static int sn9c102_start_transfer(struct
 		urb->transfer_buffer_length = psz * SN9C102_ISO_PACKETS;
 		urb->interval = 1;
 		for (j = 0; j < SN9C102_ISO_PACKETS; j++) {
-			urb->iso_frame_desc[j].offset = psz * j;
-			urb->iso_frame_desc[j].length = psz;
+			urb->iso_packets[j].offset = psz * j;
+			urb->iso_packets[j].length = psz;
 		}
 	}
 
diff -urp vanilla/drivers/media/video/usbvideo/konicawc.c isotree/drivers/media/video/usbvideo/konicawc.c
--- vanilla/drivers/media/video/usbvideo/konicawc.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/media/video/usbvideo/konicawc.c	2007-07-04 14:01:06.000000000 +0200
@@ -287,10 +287,10 @@ static int konicawc_compress_iso(struct 
 	for (i = 0; i < dataurb->number_of_packets; i++) {
 		int button = cam->buttonsts;
 		unsigned char sts;
-		int n = dataurb->iso_frame_desc[i].actual_length;
-		int st = dataurb->iso_frame_desc[i].status;
+		int n = dataurb->iso_packets[i].actual_length;
+		int st = dataurb->iso_packets[i].status;
 		cdata = dataurb->transfer_buffer +
-			dataurb->iso_frame_desc[i].offset;
+			dataurb->iso_packets[i].offset;
 
 		/* Detect and ignore errored packets */
 		if (st < 0) {
@@ -307,7 +307,7 @@ static int konicawc_compress_iso(struct 
 		}
 
 		/* See what the status data said about the packet */
-		sts = *(status+stsurb->iso_frame_desc[i].offset);
+		sts = *(status+stsurb->iso_packets[i].offset);
 
 		/* sts: 0x80-0xff: frame start with frame number (ie 0-7f)
 		 * otherwise:
@@ -375,7 +375,7 @@ static void resubmit_urb(struct uvd *uvd
 {
 	int i, ret;
 	for (i = 0; i < FRAMES_PER_DESC; i++) {
-		urb->iso_frame_desc[i].status = 0;
+		urb->iso_packets[i].status = 0;
 	}
 	urb->dev = uvd->dev;
 	urb->status = 0;
@@ -475,8 +475,8 @@ static int konicawc_start_data(struct uv
 		urb->number_of_packets = FRAMES_PER_DESC;
 		urb->transfer_buffer_length = pktsz * FRAMES_PER_DESC;
 		for (j=k=0; j < FRAMES_PER_DESC; j++, k += pktsz) {
-			urb->iso_frame_desc[j].offset = k;
-			urb->iso_frame_desc[j].length = pktsz;
+			urb->iso_packets[j].offset = k;
+			urb->iso_packets[j].length = pktsz;
 		}
 
 		urb = cam->sts_urb[i];
@@ -490,8 +490,8 @@ static int konicawc_start_data(struct uv
 		urb->number_of_packets = FRAMES_PER_DESC;
 		urb->transfer_buffer_length = FRAMES_PER_DESC;
 		for (j=0; j < FRAMES_PER_DESC; j++) {
-			urb->iso_frame_desc[j].offset = j;
-			urb->iso_frame_desc[j].length = 1;
+			urb->iso_packets[j].offset = j;
+			urb->iso_packets[j].length = 1;
 		}
 	}
 
diff -urp vanilla/drivers/media/video/usbvideo/quickcam_messenger.c isotree/drivers/media/video/usbvideo/quickcam_messenger.c
--- vanilla/drivers/media/video/usbvideo/quickcam_messenger.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/media/video/usbvideo/quickcam_messenger.c	2007-07-04 14:01:06.000000000 +0200
@@ -582,11 +582,11 @@ static int qcm_compress_iso(struct uvd *
 
 	totlen=0;
 	for (i = 0; i < dataurb->number_of_packets; i++) {
-		int n = dataurb->iso_frame_desc[i].actual_length;
-		int st = dataurb->iso_frame_desc[i].status;
+		int n = dataurb->iso_packets[i].actual_length;
+		int st = dataurb->iso_packets[i].status;
 
 		cdata = dataurb->transfer_buffer +
-			dataurb->iso_frame_desc[i].offset;
+			dataurb->iso_packets[i].offset;
 
 		if (st < 0) {
 			warn("Data error: packet=%d. len=%d. status=%d.",
@@ -672,8 +672,8 @@ static int qcm_start_data(struct uvd *uv
 		urb->number_of_packets = FRAMES_PER_DESC;
 		urb->transfer_buffer_length = pktsz * FRAMES_PER_DESC;
 		for (j=k=0; j < FRAMES_PER_DESC; j++, k += pktsz) {
-			urb->iso_frame_desc[j].offset = k;
-			urb->iso_frame_desc[j].length = pktsz;
+			urb->iso_packets[j].offset = k;
+			urb->iso_packets[j].length = pktsz;
 		}
 	}
 
diff -urp vanilla/drivers/media/video/usbvideo/usbvideo.c isotree/drivers/media/video/usbvideo/usbvideo.c
--- vanilla/drivers/media/video/usbvideo/usbvideo.c	2007-07-04 14:14:35.000000000 +0200
+++ isotree/drivers/media/video/usbvideo/usbvideo.c	2007-07-04 14:01:06.000000000 +0200
@@ -1651,10 +1651,10 @@ static int usbvideo_CompressIsochronous(
 	int i, totlen = 0;
 
 	for (i = 0; i < urb->number_of_packets; i++) {
-		int n = urb->iso_frame_desc[i].actual_length;
-		int st = urb->iso_frame_desc[i].status;
+		int n = urb->iso_packets[i].actual_length;
+		int st = urb->iso_packets[i].status;
 
-		cdata = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
+		cdata = urb->transfer_buffer + urb->iso_packets[i].offset;
 
 		/* Detect and ignore errored packets */
 		if (st < 0) {
@@ -1716,8 +1716,8 @@ static void usbvideo_IsocIrq(struct urb 
 
 urb_done_with:
 	for (i = 0; i < FRAMES_PER_DESC; i++) {
-		urb->iso_frame_desc[i].status = 0;
-		urb->iso_frame_desc[i].actual_length = 0;
+		urb->iso_packets[i].status = 0;
+		urb->iso_packets[i].actual_length = 0;
 	}
 	urb->status = 0;
 	urb->dev = uvd->dev;
@@ -1775,8 +1775,8 @@ static int usbvideo_StartDataPump(struct
 		urb->number_of_packets = FRAMES_PER_DESC;
 		urb->transfer_buffer_length = uvd->iso_packet_len * FRAMES_PER_DESC;
 		for (j=k=0; j < FRAMES_PER_DESC; j++, k += uvd->iso_packet_len) {
-			urb->iso_frame_desc[j].offset = k;
-			urb->iso_frame_desc[j].length = uvd->iso_packet_len;
+			urb->iso_packets[j].offset = k;
+			urb->iso_packets[j].length = uvd->iso_packet_len;
 		}
 	}
 
diff -urp vanilla/drivers/media/video/usbvision/usbvision-core.c isotree/drivers/media/video/usbvision/usbvision-core.c
--- vanilla/drivers/media/video/usbvision/usbvision-core.c	2007-07-04 14:14:35.000000000 +0200
+++ isotree/drivers/media/video/usbvision/usbvision-core.c	2007-07-04 14:01:07.000000000 +0200
@@ -1327,10 +1327,10 @@ static int usbvision_compress_isochronou
 	int i, totlen = 0;
 
 	for (i = 0; i < urb->number_of_packets; i++) {
-		int packet_len = urb->iso_frame_desc[i].actual_length;
-		int packet_stat = urb->iso_frame_desc[i].status;
+		int packet_len = urb->iso_packets[i].actual_length;
+		int packet_stat = urb->iso_packets[i].status;
 
-		packet_data = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
+		packet_data = urb->transfer_buffer + urb->iso_packets[i].offset;
 
 		/* Detect and ignore errored packets */
 		if (packet_stat) {	// packet_stat != 0 ?????????????
@@ -1466,8 +1466,8 @@ static void usbvision_isocIrq(struct urb
 	usbvision->timeInIrq += jiffies - startTime;
 
 	for (i = 0; i < USBVISION_URB_FRAMES; i++) {
-		urb->iso_frame_desc[i].status = 0;
-		urb->iso_frame_desc[i].actual_length = 0;
+		urb->iso_packets[i].status = 0;
+		urb->iso_packets[i].actual_length = 0;
 	}
 
 	urb->status = 0;
@@ -2456,8 +2456,8 @@ int usbvision_init_isoc(struct usb_usbvi
 		    usbvision->isocPacketSize * USBVISION_URB_FRAMES;
 		for (j = k = 0; j < USBVISION_URB_FRAMES; j++,
 		     k += usbvision->isocPacketSize) {
-			urb->iso_frame_desc[j].offset = k;
-			urb->iso_frame_desc[j].length =
+			urb->iso_packets[j].offset = k;
+			urb->iso_packets[j].length =
 				usbvision->isocPacketSize;
 		}
 	}
diff -urp vanilla/drivers/media/video/w9968cf.c isotree/drivers/media/video/w9968cf.c
--- vanilla/drivers/media/video/w9968cf.c	2007-07-04 14:09:18.000000000 +0200
+++ isotree/drivers/media/video/w9968cf.c	2007-07-04 14:01:07.000000000 +0200
@@ -813,9 +813,9 @@ static void w9968cf_urb_complete(struct 
 	}
 
 	for (i = 0; i < urb->number_of_packets; i++) {
-		len = urb->iso_frame_desc[i].actual_length;
-		status = urb->iso_frame_desc[i].status;
-		pos = urb->iso_frame_desc[i].offset + urb->transfer_buffer;
+		len = urb->iso_packets[i].actual_length;
+		status = urb->iso_packets[i].status;
+		pos = urb->iso_packets[i].offset + urb->transfer_buffer;
 
 		if (status && len != 0) {
 			DBG(4, "URB failed, error in data packet "
@@ -931,8 +931,8 @@ static int w9968cf_start_transfer(struct
 		urb->transfer_buffer_length = p_size*W9968CF_ISO_PACKETS;
 		urb->interval = 1;
 		for (j = 0; j < W9968CF_ISO_PACKETS; j++) {
-			urb->iso_frame_desc[j].offset = p_size*j;
-			urb->iso_frame_desc[j].length = p_size;
+			urb->iso_packets[j].offset = p_size*j;
+			urb->iso_packets[j].length = p_size;
 		}
 	}
 
diff -urp vanilla/drivers/media/video/zc0301/zc0301_core.c isotree/drivers/media/video/zc0301/zc0301_core.c
--- vanilla/drivers/media/video/zc0301/zc0301_core.c	2007-07-04 14:09:18.000000000 +0200
+++ isotree/drivers/media/video/zc0301/zc0301_core.c	2007-07-04 14:01:07.000000000 +0200
@@ -350,9 +350,9 @@ static void zc0301_urb_complete(struct u
 		u16* soi;
 		u8 sof;
 
-		len = urb->iso_frame_desc[i].actual_length;
-		status = urb->iso_frame_desc[i].status;
-		pos = urb->iso_frame_desc[i].offset + urb->transfer_buffer;
+		len = urb->iso_packets[i].actual_length;
+		status = urb->iso_packets[i].status;
+		pos = urb->iso_packets[i].offset + urb->transfer_buffer;
 
 		if (status) {
 			DBG(3, "Error in isochronous frame");
@@ -465,8 +465,8 @@ static int zc0301_start_transfer(struct 
 		urb->transfer_buffer_length = psz * ZC0301_ISO_PACKETS;
 		urb->interval = 1;
 		for (j = 0; j < ZC0301_ISO_PACKETS; j++) {
-			urb->iso_frame_desc[j].offset = psz * j;
-			urb->iso_frame_desc[j].length = psz;
+			urb->iso_packets[j].offset = psz * j;
+			urb->iso_packets[j].length = psz;
 		}
 	}
 
diff -urp vanilla/drivers/usb/atm/usbatm.c isotree/drivers/usb/atm/usbatm.c
--- vanilla/drivers/usb/atm/usbatm.c	2007-07-04 14:14:45.000000000 +0200
+++ isotree/drivers/usb/atm/usbatm.c	2007-07-04 14:01:07.000000000 +0200
@@ -542,13 +542,13 @@ static void usbatm_rx_process(unsigned l
 			int i;
 
 			for (i = 0; i < urb->number_of_packets; i++) {
-				if (!urb->iso_frame_desc[i].status) {
-					unsigned int actual_length = urb->iso_frame_desc[i].actual_length;
+				if (!urb->iso_packets[i].status) {
+					unsigned int actual_length = urb->iso_packets[i].actual_length;
 
 					UDSL_ASSERT(actual_length <= packet_size);
 
 					if (!merge_length)
-						merge_start = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset;
+						merge_start = (unsigned char *)urb->transfer_buffer + urb->iso_packets[i].offset;
 					merge_length += actual_length;
 					if (merge_length && (actual_length < packet_size)) {
 						usbatm_extract_cells(instance, merge_start, merge_length);
@@ -1212,8 +1212,8 @@ int usbatm_usb_probe(struct usb_interfac
 			urb->transfer_flags = URB_ISO_ASAP;
 			urb->number_of_packets = iso_packets;
 			for (j = 0; j < iso_packets; j++) {
-				urb->iso_frame_desc[j].offset = channel->packet_size * j;
-				urb->iso_frame_desc[j].length = channel->packet_size;
+				urb->iso_packets[j].offset = channel->packet_size * j;
+				urb->iso_packets[j].length = channel->packet_size;
 			}
 		}
 
diff -urp vanilla/drivers/usb/core/devio.c isotree/drivers/usb/core/devio.c
--- vanilla/drivers/usb/core/devio.c	2007-07-04 14:14:45.000000000 +0200
+++ isotree/drivers/usb/core/devio.c	2007-07-04 14:01:07.000000000 +0200
@@ -1053,8 +1053,8 @@ static int proc_do_submiturb(struct dev_
         as->urb->context = as;
         as->urb->complete = async_completed;
 	for (totlen = u = 0; u < uurb->number_of_packets; u++) {
-		as->urb->iso_frame_desc[u].offset = totlen;
-		as->urb->iso_frame_desc[u].length = isopkt[u].length;
+		as->urb->iso_packets[u].offset = totlen;
+		as->urb->iso_packets[u].length = isopkt[u].length;
 		totlen += isopkt[u].length;
 	}
 	kfree(isopkt);
@@ -1128,10 +1128,10 @@ static int processcompl(struct async *as
 
 	if (usb_pipeisoc(urb->pipe)) {
 		for (i = 0; i < urb->number_of_packets; i++) {
-			if (put_user(urb->iso_frame_desc[i].actual_length,
+			if (put_user(urb->iso_packets[i].actual_length,
 				     &userurb->iso_frame_desc[i].actual_length))
 				return -EFAULT;
-			if (put_user(urb->iso_frame_desc[i].status,
+			if (put_user(urb->iso_packets[i].status,
 				     &userurb->iso_frame_desc[i].status))
 				return -EFAULT;
 		}
@@ -1242,10 +1242,10 @@ static int processcompl_compat(struct as
 
 	if (usb_pipeisoc(urb->pipe)) {
 		for (i = 0; i < urb->number_of_packets; i++) {
-			if (put_user(urb->iso_frame_desc[i].actual_length,
+			if (put_user(urb->iso_packets[i].actual_length,
 				     &userurb->iso_frame_desc[i].actual_length))
 				return -EFAULT;
-			if (put_user(urb->iso_frame_desc[i].status,
+			if (put_user(urb->iso_packets[i].status,
 				     &userurb->iso_frame_desc[i].status))
 				return -EFAULT;
 		}
diff -urp vanilla/drivers/usb/core/urb.c isotree/drivers/usb/core/urb.c
--- vanilla/drivers/usb/core/urb.c	2007-07-04 14:09:34.000000000 +0200
+++ isotree/drivers/usb/core/urb.c	2007-07-04 14:01:07.000000000 +0200
@@ -11,6 +11,7 @@
 static void urb_destroy(struct kref *kref)
 {
 	struct urb *urb = to_urb(kref);
+	kfree(urb->iso_packets);
 	kfree(urb);
 }
 
@@ -56,15 +57,22 @@ void usb_init_urb(struct urb *urb)
 struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags)
 {
 	struct urb *urb;
+	struct usb_iso_packet_descriptor *frames = NULL;
 
-	urb = kmalloc(sizeof(struct urb) +
-		iso_packets * sizeof(struct usb_iso_packet_descriptor),
-		mem_flags);
+	if (iso_packets) {
+		frames = kmalloc(iso_packets * sizeof(struct usb_iso_packet_descriptor), mem_flags);
+		if (!frames)
+			return NULL;
+	}
+
+	urb = kmalloc(sizeof(struct urb), mem_flags);
 	if (!urb) {
 		err("alloc_urb: kmalloc failed");
+		kfree(frames);
 		return NULL;
 	}
-	usb_init_urb(urb);
+	urb->iso_packets = frames;
+
 	return urb;
 }
 
@@ -278,11 +286,11 @@ int usb_submit_urb(struct urb *urb, gfp_
 		if (urb->number_of_packets <= 0)		    
 			return -EINVAL;
 		for (n = 0; n < urb->number_of_packets; n++) {
-			len = urb->iso_frame_desc[n].length;
+			len = urb->iso_packets[n].length;
 			if (len < 0 || len > max) 
 				return -EMSGSIZE;
-			urb->iso_frame_desc[n].status = -EXDEV;
-			urb->iso_frame_desc[n].actual_length = 0;
+			urb->iso_packets[n].status = -EXDEV;
+			urb->iso_packets[n].actual_length = 0;
 		}
 	}
 
diff -urp vanilla/drivers/usb/host/ehci-sched.c isotree/drivers/usb/host/ehci-sched.c
--- vanilla/drivers/usb/host/ehci-sched.c	2007-07-04 14:09:34.000000000 +0200
+++ isotree/drivers/usb/host/ehci-sched.c	2007-07-04 14:01:07.000000000 +0200
@@ -1098,8 +1098,8 @@ itd_sched_init (
 		dma_addr_t		buf;
 		u32			trans;
 
-		length = urb->iso_frame_desc [i].length;
-		buf = dma + urb->iso_frame_desc [i].offset;
+		length = urb->iso_packets[i].length;
+		buf = dma + urb->iso_packets[i].offset;
 
 		trans = EHCI_ISOC_ACTIVE;
 		trans |= buf & 0x0fff;
@@ -1568,7 +1568,7 @@ itd_complete (
 		if (likely (itd->index[uframe] == -1))
 			continue;
 		urb_index = itd->index[uframe];
-		desc = &urb->iso_frame_desc [urb_index];
+		desc = &urb->iso_packets[urb_index];
 
 		t = le32_to_cpup (&itd->hw_transaction [uframe]);
 		itd->hw_transaction [uframe] = 0;
@@ -1721,8 +1721,8 @@ sitd_sched_init (
 		dma_addr_t		buf;
 		u32			trans;
 
-		length = urb->iso_frame_desc [i].length & 0x03ff;
-		buf = dma + urb->iso_frame_desc [i].offset;
+		length = urb->iso_packets[i].length & 0x03ff;
+		buf = dma + urb->iso_packets[i].offset;
 
 		trans = SITD_STS_ACTIVE;
 		if (((i + 1) == urb->number_of_packets)
@@ -1939,7 +1939,7 @@ sitd_complete (
 	struct usb_device			*dev;
 
 	urb_index = sitd->index;
-	desc = &urb->iso_frame_desc [urb_index];
+	desc = &urb->iso_packets[urb_index];
 	t = le32_to_cpup (&sitd->hw_results);
 
 	/* report transfer status */
diff -urp vanilla/drivers/usb/host/ohci-q.c isotree/drivers/usb/host/ohci-q.c
--- vanilla/drivers/usb/host/ohci-q.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/usb/host/ohci-q.c	2007-07-04 14:01:07.000000000 +0200
@@ -686,8 +686,8 @@ static void td_submit_urb (
 			frame += cnt * urb->interval;
 			frame &= 0xffff;
 			td_fill (ohci, TD_CC | TD_ISO | frame,
-				data + urb->iso_frame_desc [cnt].offset,
-				urb->iso_frame_desc [cnt].length, urb, cnt);
+				data + urb->iso_packets[cnt].offset,
+				urb->iso_packets[cnt].length, urb, cnt);
 		}
 		periodic = ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs++ == 0
 			&& ohci_to_hcd(ohci)->self.bandwidth_int_reqs == 0;
@@ -732,7 +732,7 @@ static void td_done (struct ohci_hcd *oh
 			return;
 
 		if (usb_pipeout (urb->pipe))
-			dlen = urb->iso_frame_desc [td->index].length;
+			dlen = urb->iso_packets[td->index].length;
 		else {
 			/* short reads are always OK for ISO */
 			if (cc == TD_DATAUNDERRUN)
@@ -740,8 +740,8 @@ static void td_done (struct ohci_hcd *oh
 			dlen = tdPSW & 0x3ff;
 		}
 		urb->actual_length += dlen;
-		urb->iso_frame_desc [td->index].actual_length = dlen;
-		urb->iso_frame_desc [td->index].status = cc_to_error [cc];
+		urb->iso_packets[td->index].actual_length = dlen;
+		urb->iso_packets[td->index].status = cc_to_error [cc];
 
 		if (cc != TD_CC_NOERROR)
 			ohci_vdbg (ohci,
diff -urp vanilla/drivers/usb/host/uhci-q.c isotree/drivers/usb/host/uhci-q.c
--- vanilla/drivers/usb/host/uhci-q.c	2007-07-04 14:14:45.000000000 +0200
+++ isotree/drivers/usb/host/uhci-q.c	2007-07-04 14:01:07.000000000 +0200
@@ -1305,9 +1305,9 @@ static int uhci_submit_isochronous(struc
 
 		uhci_add_td_to_urbp(td, urbp);
 		uhci_fill_td(td, status, destination |
-				uhci_explen(urb->iso_frame_desc[i].length),
+				uhci_explen(urb->iso_packets[i].length),
 				urb->transfer_dma +
-					urb->iso_frame_desc[i].offset);
+					urb->iso_packets[i].offset);
 	}
 
 	/* Set the interrupt-on-completion flag on the last packet. */
@@ -1321,7 +1321,7 @@ static int uhci_submit_isochronous(struc
 	}
 
 	if (list_empty(&qh->queue)) {
-		qh->iso_packet_desc = &urb->iso_frame_desc[0];
+		qh->iso_packet_desc = urb->iso_packets;
 		qh->iso_frame = urb->start_frame;
 		qh->iso_status = 0;
 	}
@@ -1497,7 +1497,7 @@ __acquires(uhci->lock)
 		struct urb *nurb = list_entry(urbp->node.next,
 				struct urb_priv, node)->urb;
 
-		qh->iso_packet_desc = &nurb->iso_frame_desc[0];
+		qh->iso_packet_desc = nurb->iso_packets;
 		qh->iso_frame = nurb->start_frame;
 		qh->iso_status = 0;
 	}
diff -urp vanilla/drivers/usb/misc/usbtest.c isotree/drivers/usb/misc/usbtest.c
--- vanilla/drivers/usb/misc/usbtest.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/drivers/usb/misc/usbtest.c	2007-07-04 14:01:07.000000000 +0200
@@ -1420,10 +1420,10 @@ static struct urb *iso_alloc_urb (
 	memset (urb->transfer_buffer, 0, bytes);
 	for (i = 0; i < packets; i++) {
 		/* here, only the last packet will be short */
-		urb->iso_frame_desc[i].length = min ((unsigned) bytes, maxp);
-		bytes -= urb->iso_frame_desc[i].length;
+		urb->iso_packets[i].length = min ((unsigned) bytes, maxp);
+		bytes -= urb->iso_packets[i].length;
 
-		urb->iso_frame_desc[i].offset = maxp * i;
+		urb->iso_packets[i].offset = maxp * i;
 	}
 
 	urb->complete = iso_callback;
diff -urp vanilla/drivers/usb/mon/mon_text.c isotree/drivers/usb/mon/mon_text.c
--- vanilla/drivers/usb/mon/mon_text.c	2007-07-04 14:14:46.000000000 +0200
+++ isotree/drivers/usb/mon/mon_text.c	2007-07-04 14:01:07.000000000 +0200
@@ -223,7 +223,7 @@ static void mon_text_event(struct mon_re
 	if (usb_pipeisoc(urb->pipe) && urb->number_of_packets > 0) {
 		if ((ndesc = urb->number_of_packets) > ISODESC_MAX)
 			ndesc = ISODESC_MAX;
-		fp = urb->iso_frame_desc;
+		fp = urb->iso_packets;
 		dp = ep->isodesc;
 		for (i = 0; i < ndesc; i++) {
 			dp->status = fp->status;
diff -urp vanilla/include/linux/usb.h isotree/include/linux/usb.h
--- vanilla/include/linux/usb.h	2007-07-04 14:15:11.000000000 +0200
+++ isotree/include/linux/usb.h	2007-07-04 14:01:07.000000000 +0200
@@ -1152,7 +1152,7 @@ struct urb
 	int error_count;		/* (return) number of ISO errors */
 	void *context;			/* (in) context for completion */
 	usb_complete_t complete;	/* (in) completion routine */
-	struct usb_iso_packet_descriptor iso_frame_desc[0];
+	struct usb_iso_packet_descriptor *iso_packets;
 					/* (in) ISO ONLY */
 };
 
diff -urp vanilla/sound/usb/caiaq/caiaq-audio.c isotree/sound/usb/caiaq/caiaq-audio.c
--- vanilla/sound/usb/caiaq/caiaq-audio.c	2007-07-04 14:15:15.000000000 +0200
+++ isotree/sound/usb/caiaq/caiaq-audio.c	2007-07-04 14:01:07.000000000 +0200
@@ -483,17 +483,17 @@ static void read_completed(struct urb *u
 	/* read the recently received packet and send back one which has
 	 * the same layout */
 	for (frame = 0; frame < FRAMES_PER_URB; frame++) {
-		if (urb->iso_frame_desc[frame].status)
+		if (urb->iso_packets[frame].status)
 			continue;
 
-		len = urb->iso_frame_desc[outframe].actual_length;
-		out->iso_frame_desc[outframe].length = len;
-		out->iso_frame_desc[outframe].actual_length = 0;
-		out->iso_frame_desc[outframe].offset = BYTES_PER_FRAME * frame;
+		len = urb->iso_packets[outframe].actual_length;
+		out->iso_packets[outframe].length = len;
+		out->iso_packets[outframe].actual_length = 0;
+		out->iso_packets[outframe].offset = BYTES_PER_FRAME * frame;
 		
 		if (len > 0) {
-			fill_out_urb(dev, out, &out->iso_frame_desc[outframe]);
-			read_in_urb(dev, urb, &urb->iso_frame_desc[frame]);
+			fill_out_urb(dev, out, &out->iso_packets[outframe]);
+			read_in_urb(dev, urb, &urb->iso_packets[frame]);
 			send_it = 1;
 		}
 
@@ -508,9 +508,9 @@ static void read_completed(struct urb *u
 	
 	/* re-submit inbound urb */
 	for (frame = 0; frame < FRAMES_PER_URB; frame++) {
-		urb->iso_frame_desc[frame].offset = BYTES_PER_FRAME * frame;
-		urb->iso_frame_desc[frame].length = BYTES_PER_FRAME;
-		urb->iso_frame_desc[frame].actual_length = 0;
+		urb->iso_packets[frame].offset = BYTES_PER_FRAME * frame;
+		urb->iso_packets[frame].length = BYTES_PER_FRAME;
+		urb->iso_packets[frame].actual_length = 0;
 	}
 	
 	urb->number_of_packets = FRAMES_PER_URB;
@@ -565,7 +565,7 @@ static struct urb **alloc_urbs(struct sn
 		
 		for (frame = 0; frame < FRAMES_PER_URB; frame++) {
 			struct usb_iso_packet_descriptor *iso = 
-				&urbs[i]->iso_frame_desc[frame];
+				&urbs[i]->iso_packets[frame];
 			
 			iso->offset = BYTES_PER_FRAME * frame;
 			iso->length = BYTES_PER_FRAME;
diff -urp vanilla/sound/usb/usbaudio.c isotree/sound/usb/usbaudio.c
--- vanilla/sound/usb/usbaudio.c	2007-07-04 14:15:15.000000000 +0200
+++ isotree/sound/usb/usbaudio.c	2007-07-04 14:01:07.000000000 +0200
@@ -257,8 +257,8 @@ static int prepare_capture_sync_urb(stru
 	struct snd_urb_ctx *ctx = urb->context;
 
 	urb->dev = ctx->subs->dev; /* we need to set this at each time */
-	urb->iso_frame_desc[0].length = 3;
-	urb->iso_frame_desc[0].offset = 0;
+	urb->iso_packets[0].length = 3;
+	urb->iso_packets[0].offset = 0;
 	cp[0] = subs->freqn >> 2;
 	cp[1] = subs->freqn >> 10;
 	cp[2] = subs->freqn >> 18;
@@ -279,8 +279,8 @@ static int prepare_capture_sync_urb_hs(s
 	struct snd_urb_ctx *ctx = urb->context;
 
 	urb->dev = ctx->subs->dev; /* we need to set this at each time */
-	urb->iso_frame_desc[0].length = 4;
-	urb->iso_frame_desc[0].offset = 0;
+	urb->iso_packets[0].length = 4;
+	urb->iso_packets[0].offset = 0;
 	cp[0] = subs->freqn;
 	cp[1] = subs->freqn >> 8;
 	cp[2] = subs->freqn >> 16;
@@ -319,8 +319,8 @@ static int prepare_capture_urb(struct sn
 	offs = 0;
 	urb->dev = ctx->subs->dev; /* we need to set this at each time */
 	for (i = 0; i < ctx->packets; i++) {
-		urb->iso_frame_desc[i].offset = offs;
-		urb->iso_frame_desc[i].length = subs->curpacksize;
+		urb->iso_packets[i].offset = offs;
+		urb->iso_packets[i].length = subs->curpacksize;
 		offs += subs->curpacksize;
 	}
 	urb->transfer_buffer_length = offs;
@@ -347,12 +347,12 @@ static int retire_capture_urb(struct snd
 	stride = runtime->frame_bits >> 3;
 
 	for (i = 0; i < urb->number_of_packets; i++) {
-		cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset;
-		if (urb->iso_frame_desc[i].status) {
-			snd_printd(KERN_ERR "frame %d active: %d\n", i, urb->iso_frame_desc[i].status);
+		cp = (unsigned char *)urb->transfer_buffer + urb->iso_packets[i].offset;
+		if (urb->iso_packets[i].status) {
+			snd_printd(KERN_ERR "frame %d active: %d\n", i, urb->iso_packets[i].status);
 			// continue;
 		}
-		len = urb->iso_frame_desc[i].actual_length / stride;
+		len = urb->iso_packets[i].actual_length / stride;
 		if (! len)
 			continue;
 		/* update the current pointer */
@@ -406,8 +406,8 @@ static int prepare_playback_sync_urb(str
 	struct snd_urb_ctx *ctx = urb->context;
 
 	urb->dev = ctx->subs->dev; /* we need to set this at each time */
-	urb->iso_frame_desc[0].length = 3;
-	urb->iso_frame_desc[0].offset = 0;
+	urb->iso_packets[0].length = 3;
+	urb->iso_packets[0].offset = 0;
 	return 0;
 }
 
@@ -424,8 +424,8 @@ static int prepare_playback_sync_urb_hs(
 	struct snd_urb_ctx *ctx = urb->context;
 
 	urb->dev = ctx->subs->dev; /* we need to set this at each time */
-	urb->iso_frame_desc[0].length = 4;
-	urb->iso_frame_desc[0].offset = 0;
+	urb->iso_packets[0].length = 4;
+	urb->iso_packets[0].offset = 0;
 	return 0;
 }
 
@@ -442,8 +442,8 @@ static int retire_playback_sync_urb(stru
 	unsigned int f;
 	unsigned long flags;
 
-	if (urb->iso_frame_desc[0].status == 0 &&
-	    urb->iso_frame_desc[0].actual_length == 3) {
+	if (urb->iso_packets[0].status == 0 &&
+	    urb->iso_packets[0].actual_length == 3) {
 		f = combine_triple((u8*)urb->transfer_buffer) << 2;
 		if (f >= subs->freqn - subs->freqn / 8 && f <= subs->freqmax) {
 			spin_lock_irqsave(&subs->lock, flags);
@@ -468,8 +468,8 @@ static int retire_playback_sync_urb_hs(s
 	unsigned int f;
 	unsigned long flags;
 
-	if (urb->iso_frame_desc[0].status == 0 &&
-	    urb->iso_frame_desc[0].actual_length == 4) {
+	if (urb->iso_packets[0].status == 0 &&
+	    urb->iso_packets[0].actual_length == 4) {
 		f = combine_quad((u8*)urb->transfer_buffer) & 0x0fffffff;
 		if (f >= subs->freqn - subs->freqn / 8 && f <= subs->freqmax) {
 			spin_lock_irqsave(&subs->lock, flags);
@@ -511,8 +511,8 @@ static int prepare_nodata_playback_urb(s
 	urb->number_of_packets = subs->packs_per_ms;
 	for (i = 0; i < subs->packs_per_ms; ++i) {
 		counts = snd_usb_audio_next_packet_size(subs);
-		urb->iso_frame_desc[i].offset = offs * stride;
-		urb->iso_frame_desc[i].length = counts * stride;
+		urb->iso_packets[i].offset = offs * stride;
+		urb->iso_packets[i].length = counts * stride;
 		offs += counts;
 	}
 	urb->transfer_buffer_length = offs * stride;
@@ -549,8 +549,8 @@ static int prepare_playback_urb(struct s
 	for (i = 0; i < ctx->packets; i++) {
 		counts = snd_usb_audio_next_packet_size(subs);
 		/* set up descriptor */
-		urb->iso_frame_desc[i].offset = offs * stride;
-		urb->iso_frame_desc[i].length = counts * stride;
+		urb->iso_packets[i].offset = offs * stride;
+		urb->iso_packets[i].length = counts * stride;
 		offs += counts;
 		urb->number_of_packets++;
 		subs->transfer_done += counts;
@@ -563,16 +563,16 @@ static int prepare_playback_urb(struct s
 					 * supported yet */
 					offs -= subs->transfer_done;
 					counts -= subs->transfer_done;
-					urb->iso_frame_desc[i].length =
+					urb->iso_packets[i].length =
 						counts * stride;
 					subs->transfer_done = 0;
 				}
 				i++;
 				if (i < ctx->packets) {
 					/* add a transfer delimiter */
-					urb->iso_frame_desc[i].offset =
+					urb->iso_packets[i].offset =
 						offs * stride;
-					urb->iso_frame_desc[i].length = 0;
+					urb->iso_packets[i].length = 0;
 					urb->number_of_packets++;
 				}
 				break;
diff -urp vanilla/sound/usb/usx2y/usbusx2yaudio.c isotree/sound/usb/usx2y/usbusx2yaudio.c
--- vanilla/sound/usb/usx2y/usbusx2yaudio.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/sound/usb/usx2y/usbusx2yaudio.c	2007-07-04 14:01:07.000000000 +0200
@@ -76,14 +76,14 @@ static int usX2Y_urb_capt_retire(struct 
 	struct usX2Ydev	*usX2Y = subs->usX2Y;
 
 	for (i = 0; i < nr_of_packs(); i++) {
-		cp = (unsigned char*)urb->transfer_buffer + urb->iso_frame_desc[i].offset;
-		if (urb->iso_frame_desc[i].status) { /* active? hmm, skip this */
+		cp = (unsigned char*)urb->transfer_buffer + urb->iso_packets[i].offset;
+		if (urb->iso_packets[i].status) { /* active? hmm, skip this */
 			snd_printk(KERN_ERR "active frame status %i. "
 				   "Most propably some hardware problem.\n",
-				   urb->iso_frame_desc[i].status);
-			return urb->iso_frame_desc[i].status;
+				   urb->iso_packets[i].status);
+			return urb->iso_packets[i].status;
 		}
-		len = urb->iso_frame_desc[i].actual_length / usX2Y->stride;
+		len = urb->iso_packets[i].actual_length / usX2Y->stride;
 		if (! len) {
 			snd_printd("0 == len ERROR!\n");
 			continue;
@@ -134,18 +134,18 @@ static int usX2Y_urb_play_prepare(struct
 	count = 0;
 	for (pack = 0; pack <  nr_of_packs(); pack++) {
 		/* calculate the size of a packet */
-		counts = cap_urb->iso_frame_desc[pack].actual_length / usX2Y->stride;
+		counts = cap_urb->iso_packets[pack].actual_length / usX2Y->stride;
 		count += counts;
 		if (counts < 43 || counts > 50) {
 			snd_printk(KERN_ERR "should not be here with counts=%i\n", counts);
 			return -EPIPE;
 		}
 		/* set up descriptor */
-		urb->iso_frame_desc[pack].offset = pack ?
-			urb->iso_frame_desc[pack - 1].offset +
-			urb->iso_frame_desc[pack - 1].length :
+		urb->iso_packets[pack].offset = pack ?
+			urb->iso_packets[pack - 1].offset +
+			urb->iso_packets[pack - 1].length :
 			0;
-		urb->iso_frame_desc[pack].length = cap_urb->iso_frame_desc[pack].actual_length;
+		urb->iso_packets[pack].length = cap_urb->iso_packets[pack].actual_length;
 	}
 	if (atomic_read(&subs->state) >= state_PRERUNNING)
 		if (subs->hwptr + count > runtime->buffer_size) {
@@ -503,8 +503,8 @@ static int usX2Y_urbs_start(struct snd_u
 			urb->dev = usX2Y->chip.dev;
 			urb->transfer_flags = URB_ISO_ASAP;
 			for (pack = 0; pack < nr_of_packs(); pack++) {
-				urb->iso_frame_desc[pack].offset = subs->maxpacksize * pack;
-				urb->iso_frame_desc[pack].length = subs->maxpacksize;
+				urb->iso_packets[pack].offset = subs->maxpacksize * pack;
+				urb->iso_packets[pack].length = subs->maxpacksize;
 			}
 			urb->transfer_buffer_length = subs->maxpacksize * nr_of_packs(); 
 			if ((err = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
diff -urp vanilla/sound/usb/usx2y/usx2yhwdeppcm.c isotree/sound/usb/usx2y/usx2yhwdeppcm.c
--- vanilla/sound/usb/usx2y/usx2yhwdeppcm.c	2007-02-04 19:44:54.000000000 +0100
+++ isotree/sound/usb/usx2y/usx2yhwdeppcm.c	2007-07-04 14:01:07.000000000 +0200
@@ -72,11 +72,11 @@ static int usX2Y_usbpcm_urb_capt_retire(
 		snd_printdd("cap start %i\n", head);
 	}
 	for (i = 0; i < nr_of_packs(); i++) {
-		if (urb->iso_frame_desc[i].status) { /* active? hmm, skip this */
-			snd_printk(KERN_ERR "activ frame status %i. Most propably some hardware problem.\n", urb->iso_frame_desc[i].status);
-			return urb->iso_frame_desc[i].status;
+		if (urb->iso_packets[i].status) { /* active? hmm, skip this */
+			snd_printk(KERN_ERR "activ frame status %i. Most propably some hardware problem.\n", urb->iso_packets[i].status);
+			return urb->iso_packets[i].status;
 		}
-		lens += urb->iso_frame_desc[i].actual_length / usX2Y->stride;
+		lens += urb->iso_packets[i].actual_length / usX2Y->stride;
 	}
 	if ((hwptr_done += lens) >= runtime->buffer_size)
 		hwptr_done -= runtime->buffer_size;
@@ -131,11 +131,11 @@ static int usX2Y_hwdep_urb_play_prepare(
 			return -EPIPE;
 		}
 		/* set up descriptor */
-		urb->iso_frame_desc[pack].offset = shm->captured_iso[shm->playback_iso_head].offset;
-		urb->iso_frame_desc[pack].length = shm->captured_iso[shm->playback_iso_head].length;
+		urb->iso_packets[pack].offset = shm->captured_iso[shm->playback_iso_head].offset;
+		urb->iso_packets[pack].length = shm->captured_iso[shm->playback_iso_head].length;
 		if (atomic_read(&subs->state) != state_RUNNING)
-			memset((char *)urb->transfer_buffer + urb->iso_frame_desc[pack].offset, 0,
-			       urb->iso_frame_desc[pack].length);
+			memset((char *)urb->transfer_buffer + urb->iso_packets[pack].offset, 0,
+			       urb->iso_packets[pack].length);
 		if (++shm->playback_iso_head >= ARRAY_SIZE(shm->captured_iso))
 			shm->playback_iso_head = 0;
 		count += counts;
@@ -150,7 +150,7 @@ static inline void usX2Y_usbpcm_urb_capt
 {
 	int pack;
 	for (pack = 0; pack < nr_of_packs(); ++pack) {
-		struct usb_iso_packet_descriptor *desc = urb->iso_frame_desc + pack;
+		struct usb_iso_packet_descriptor *desc = urb->iso_packets + pack;
 		if (NULL != subs) {
 			struct snd_usX2Y_hwdep_pcm_shm *shm = subs->usX2Y->hwdep_pcm_shm;
 			int head = shm->captured_iso_head + 1;
@@ -444,8 +444,8 @@ static int usX2Y_usbpcm_urbs_start(struc
 					urb->dev = usX2Y->chip.dev;
 					urb->transfer_flags = URB_ISO_ASAP;
 					for (pack = 0; pack < nr_of_packs(); pack++) {
-						urb->iso_frame_desc[pack].offset = subs->maxpacksize * (pack + u * nr_of_packs());
-						urb->iso_frame_desc[pack].length = subs->maxpacksize;
+						urb->iso_packets[pack].offset = subs->maxpacksize * (pack + u * nr_of_packs());
+						urb->iso_packets[pack].length = subs->maxpacksize;
 					}
 					urb->transfer_buffer_length = subs->maxpacksize * nr_of_packs(); 
 					if ((err = usb_submit_urb(urb, GFP_KERNEL)) < 0) {

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.