svn commit: r213149 - user/weongyo/usb/sys/dev/usb

Weongyo Jeong weongyo at FreeBSD.org
Sat Sep 25 00:01:56 UTC 2010


Author: weongyo
Date: Sat Sep 25 00:01:55 2010
New Revision: 213149
URL: http://svn.freebsd.org/changeset/base/213149

Log:
  Records the buffer length also at struct usb_page_cahce.  It'd be used
  to check the buffer boundary.

Modified:
  user/weongyo/usb/sys/dev/usb/usb_busdma.c
  user/weongyo/usb/sys/dev/usb/usb_busdma.h
  user/weongyo/usb/sys/dev/usb/usb_transfer.c

Modified: user/weongyo/usb/sys/dev/usb/usb_busdma.c
==============================================================================
--- user/weongyo/usb/sys/dev/usb/usb_busdma.c	Fri Sep 24 23:56:25 2010	(r213148)
+++ user/weongyo/usb/sys/dev/usb/usb_busdma.c	Sat Sep 25 00:01:55 2010	(r213149)
@@ -503,6 +503,7 @@ usb_pc_alloc_mem(struct usb_page_cache *
 	}
 	/* setup page cache */
 	pc->buffer = ptr;
+	pc->buflen = size;
 	pc->page_start = pg;
 	pc->page_offset_buf = 0;
 	pc->page_offset_end = size;
@@ -536,6 +537,7 @@ usb_pc_alloc_mem(struct usb_page_cache *
 error:
 	/* reset most of the page cache */
 	pc->buffer = NULL;
+	pc->buflen = 0;
 	pc->page_start = NULL;
 	pc->page_offset_buf = 0;
 	pc->page_offset_end = 0;
@@ -559,6 +561,7 @@ usb_pc_free_mem(struct usb_page_cache *p
 		bus_dmamem_free(pc->tag, pc->buffer, pc->map);
 
 		pc->buffer = NULL;
+		pc->buflen = 0;
 	}
 }
 

Modified: user/weongyo/usb/sys/dev/usb/usb_busdma.h
==============================================================================
--- user/weongyo/usb/sys/dev/usb/usb_busdma.h	Fri Sep 24 23:56:25 2010	(r213148)
+++ user/weongyo/usb/sys/dev/usb/usb_busdma.h	Sat Sep 25 00:01:55 2010	(r213149)
@@ -90,6 +90,7 @@ struct usb_page_cache {
 #endif
 	struct usb_dma_parent_tag *tag_parent;	/* always set */
 	void   *buffer;			/* virtual buffer pointer */
+	int     buflen;
 #if USB_HAVE_BUSDMA
 	usb_size_t page_offset_buf;
 	usb_size_t page_offset_end;

Modified: user/weongyo/usb/sys/dev/usb/usb_transfer.c
==============================================================================
--- user/weongyo/usb/sys/dev/usb/usb_transfer.c	Fri Sep 24 23:56:25 2010	(r213148)
+++ user/weongyo/usb/sys/dev/usb/usb_transfer.c	Sat Sep 25 00:01:55 2010	(r213149)
@@ -284,6 +284,7 @@ usbd_transfer_setup_sub_malloc(struct us
 				return (1);	/* failure */
 			}
 			pc->buffer = USB_ADD_BYTES(buf, y * size);
+			pc->buflen = size;
 			pc->page_start = pg;
 
 			mtx_lock(pc->tag_parent->mtx);
@@ -1888,6 +1889,7 @@ usbd_xfer_set_frame_data(struct usb_xfer
 
 	/* set virtual address to load and length */
 	xfer->frbuffers[frindex].buffer = ptr;
+	xfer->frbuffers[frindex].buflen = len;
 	usbd_xfer_set_frame_len(xfer, frindex, len);
 }
 
@@ -1934,6 +1936,7 @@ usbd_xfer_set_frame_offset(struct usb_xf
 	/* set virtual address to load */
 	xfer->frbuffers[frindex].buffer =
 	    USB_ADD_BYTES(xfer->local_buffer, offset);
+	xfer->frbuffers[frindex].buflen = xfer->local_buflen - offset;
 }
 
 void


More information about the svn-src-user mailing list