PERFORCE change 102112 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Sat Jul 22 07:27:04 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=102112
Change 102112 by hselasky at hselasky_mini_itx on 2006/07/22 07:26:22
Factorize "usbd_m_copy_in" into using "m_apply()".
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/usb_subr.c#9 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/usb_subr.c#9 (text+ko) ====
@@ -1681,39 +1681,30 @@
return;
}
-
/*---------------------------------------------------------------------------*
- * usbd_m_copy_in - copy a mbuf chain directly to DMA-able memory
+ * usbd_m_copy_in - copy a mbuf chain directly into DMA-able memory
*---------------------------------------------------------------------------*/
+struct usbd_m_copy_in_arg {
+ struct usbd_page_cache *cache;
+ u_int32_t dst_offset;
+};
+
+static int32_t
+usbd_m_copy_in_cb(void *arg, void *src, u_int32_t count)
+{
+ register struct usbd_m_copy_in_arg *ua = arg;
+ usbd_copy_in(ua->cache, ua->dst_offset, src, count);
+ ua->dst_offset += count;
+ return 0;
+}
+
void
usbd_m_copy_in(struct usbd_page_cache *cache, u_int32_t dst_offset,
struct mbuf *m, u_int32_t src_offset, u_int32_t src_len)
{
- u_int32_t count;
-
- while (src_offset > 0) {
- __KASSERT(m != NULL, ("usbd_m_copy_in, offset > "
- "size of mbuf chain"));
- if (src_offset < m->m_len) {
- break;
- }
- src_offset -= m->m_len;
- m = m->m_next;
- }
-
- while (src_len > 0) {
- __KASSERT(m != NULL, ("usbd_m_copy_in, length > "
- "size of mbuf chain"));
- count = min(m->m_len - src_offset, src_len);
-
- usbd_copy_in(cache, dst_offset, ((caddr_t)(m->m_data)) +
- src_offset, count);
-
- src_len -= count;
- dst_offset += count;
- src_offset = 0;
- m = m->m_next;
- }
+ struct usbd_m_copy_in_arg arg = { cache, dst_offset };
+ register int error;
+ error = m_apply(m, src_offset, src_len, &usbd_m_copy_in_cb, &arg);
return;
}
More information about the p4-projects
mailing list