From owner-svn-src-user@FreeBSD.ORG Sat Sep 25 21:25:16 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 20D6D106566C; Sat, 25 Sep 2010 21:25:16 +0000 (UTC) (envelope-from weongyo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0FA638FC0A; Sat, 25 Sep 2010 21:25:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o8PLPFS9073453; Sat, 25 Sep 2010 21:25:15 GMT (envelope-from weongyo@svn.freebsd.org) Received: (from weongyo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o8PLPFcM073451; Sat, 25 Sep 2010 21:25:15 GMT (envelope-from weongyo@svn.freebsd.org) Message-Id: <201009252125.o8PLPFcM073451@svn.freebsd.org> From: Weongyo Jeong Date: Sat, 25 Sep 2010 21:25:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r213177 - user/weongyo/usb/sys/dev/usb X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Sep 2010 21:25:16 -0000 Author: weongyo Date: Sat Sep 25 21:25:15 2010 New Revision: 213177 URL: http://svn.freebsd.org/changeset/base/213177 Log: style(9); no functional changes. Modified: user/weongyo/usb/sys/dev/usb/usb_busdma.c Modified: user/weongyo/usb/sys/dev/usb/usb_busdma.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/usb_busdma.c Sat Sep 25 21:06:53 2010 (r213176) +++ user/weongyo/usb/sys/dev/usb/usb_busdma.c Sat Sep 25 21:25:15 2010 (r213177) @@ -117,12 +117,9 @@ usbd_copy_in(struct usb_page_cache *cach struct usb_page_search res; while (len != 0) { - usbd_get_page(cache, offset, &res); - - if (res.length > len) { + if (res.length > len) res.length = len; - } /* Checks the buffer boundary */ USB_ASSERT((char *)res.buffer + res.length <= @@ -154,12 +151,9 @@ usbd_copy_in_user(struct usb_page_cache int error; while (len != 0) { - usbd_get_page(cache, offset, &res); - - if (res.length > len) { + if (res.length > len) res.length = len; - } /* Checks the buffer boundary */ USB_ASSERT((char *)res.buffer + res.length <= @@ -221,12 +215,9 @@ usb_uiomove(struct usb_page_cache *pc, s int error = 0; while (len != 0) { - usbd_get_page(pc, pc_offset, &res); - - if (res.length > len) { + if (res.length > len) res.length = len; - } /* Checks the buffer boundary */ USB_ASSERT((char *)res.buffer + res.length <= @@ -239,7 +230,6 @@ usb_uiomove(struct usb_page_cache *pc, s * exiting the mutex and checking things */ error = uiomove(res.buffer, res.length, uio); - if (error) { break; } @@ -260,12 +250,9 @@ usbd_copy_out(struct usb_page_cache *cac struct usb_page_search res; while (len != 0) { - usbd_get_page(cache, offset, &res); - - if (res.length > len) { + if (res.length > len) res.length = len; - } /* Checks the buffer boundary */ USB_ASSERT((char *)res.buffer + res.length <= @@ -297,12 +284,9 @@ usbd_copy_out_user(struct usb_page_cache int error; while (len != 0) { - usbd_get_page(cache, offset, &res); - - if (res.length > len) { + if (res.length > len) res.length = len; - } /* Checks the buffer boundary */ USB_ASSERT((char *)res.buffer + res.length <= @@ -332,12 +316,9 @@ usbd_frame_zero(struct usb_page_cache *c struct usb_page_search res; while (len != 0) { - usbd_get_page(cache, offset, &res); - - if (res.length > len) { + if (res.length > len) res.length = len; - } /* Checks the buffer boundary */ USB_ASSERT((char *)res.buffer + res.length <= @@ -404,6 +385,7 @@ usb_dma_tag_create(struct usb_dma_tag *u static void usb_dma_tag_destroy(struct usb_dma_tag *udt) { + bus_dma_tag_destroy(udt->tag); } @@ -414,6 +396,7 @@ static void usb_pc_alloc_mem_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error) { + usb_pc_common_mem_cb(arg, segs, nseg, error, 0, 1); } @@ -424,6 +407,7 @@ static void usb_pc_load_mem_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error) { + usb_pc_common_mem_cb(arg, segs, nseg, error, 1, 0); } @@ -525,21 +509,18 @@ usb_pc_alloc_mem(struct usb_page_cache * * memory, hence we sometimes to a large number of * small allocations! */ - if (size <= (USB_PAGE_SIZE / 2)) { + if (size <= (USB_PAGE_SIZE / 2)) size *= 2; - } #endif } /* get the correct DMA tag */ utag = usb_dma_tag_find(uptag, size, align); - if (utag == NULL) { + if (utag == NULL) goto error; - } /* allocate memory */ - if (bus_dmamem_alloc( - utag->tag, &ptr, (BUS_DMA_WAITOK | BUS_DMA_COHERENT), &map)) { + if (bus_dmamem_alloc(utag->tag, &ptr, + (BUS_DMA_WAITOK | BUS_DMA_COHERENT), &map)) goto error; - } /* setup page cache */ pc->buffer = ptr; pc->buflen = size; @@ -553,14 +534,13 @@ usb_pc_alloc_mem(struct usb_page_cache * mtx_lock(uptag->mtx); /* load memory into DMA */ - err = bus_dmamap_load( - utag->tag, map, ptr, size, &usb_pc_alloc_mem_cb, + err = bus_dmamap_load(utag->tag, map, ptr, size, &usb_pc_alloc_mem_cb, pc, (BUS_DMA_WAITOK | BUS_DMA_COHERENT)); - if (err == EINPROGRESS) { cv_wait(uptag->cv, uptag->mtx); err = 0; } + mtx_unlock(uptag->mtx); if (err || uptag->dma_error) { @@ -593,12 +573,10 @@ error: void usb_pc_free_mem(struct usb_page_cache *pc) { - if (pc && pc->buffer) { + if (pc && pc->buffer) { bus_dmamap_unload(pc->tag, pc->map); - bus_dmamem_free(pc->tag, pc->buffer, pc->map); - pc->buffer = NULL; pc->buflen = 0; } @@ -614,6 +592,7 @@ usb_pc_free_mem(struct usb_page_cache *p uint8_t usb_pc_load_mem(struct usb_page_cache *pc, usb_size_t size, uint8_t sync) { + /* setup page cache */ pc->page_offset_buf = 0; pc->page_offset_end = size; @@ -637,16 +616,14 @@ usb_pc_load_mem(struct usb_page_cache *p /* * Try to load memory into DMA. */ - err = bus_dmamap_load( - pc->tag, pc->map, pc->buffer, size, - &usb_pc_alloc_mem_cb, pc, BUS_DMA_WAITOK); + err = bus_dmamap_load(pc->tag, pc->map, pc->buffer, + size, &usb_pc_alloc_mem_cb, pc, BUS_DMA_WAITOK); if (err == EINPROGRESS) { cv_wait(uptag->cv, uptag->mtx); err = 0; } - if (err || uptag->dma_error) { + if (err || uptag->dma_error) return (1); - } } else { /* @@ -659,10 +636,8 @@ usb_pc_load_mem(struct usb_page_cache *p * Try to load memory into DMA. The callback * will be called in all cases: */ - if (bus_dmamap_load( - pc->tag, pc->map, pc->buffer, size, - &usb_pc_load_mem_cb, pc, BUS_DMA_WAITOK)) { - } + (void)bus_dmamap_load(pc->tag, pc->map, pc->buffer, + size, &usb_pc_load_mem_cb, pc, BUS_DMA_WAITOK); } } else { if (!sync) { @@ -683,6 +658,7 @@ usb_pc_load_mem(struct usb_page_cache *p void usb_pc_cpu_invalidate(struct usb_page_cache *pc) { + if (pc->page_offset_end == pc->page_offset_buf) { /* nothing has been loaded into this page cache! */ return; @@ -703,6 +679,7 @@ usb_pc_cpu_invalidate(struct usb_page_ca void usb_pc_cpu_flush(struct usb_page_cache *pc) { + if (pc->page_offset_end == pc->page_offset_buf) { /* nothing has been loaded into this page cache! */ return; @@ -723,24 +700,18 @@ usb_pc_dmamap_create(struct usb_page_cac struct usb_xfer_root *info; struct usb_dma_tag *utag; - /* get info */ + /* get info and sanity check */ info = USB_DMATAG_TO_XROOT(pc->tag_parent); - - /* sanity check */ - if (info == NULL) { + if (info == NULL) goto error; - } utag = usb_dma_tag_find(pc->tag_parent, size, 1); - if (utag == NULL) { + if (utag == NULL) goto error; - } /* create DMA map */ - if (bus_dmamap_create(utag->tag, 0, &pc->map)) { + if (bus_dmamap_create(utag->tag, 0, &pc->map)) goto error; - } pc->tag = utag->tag; return 0; /* success */ - error: pc->map = NULL; pc->tag = NULL; @@ -755,6 +726,7 @@ error: void usb_pc_dmamap_destroy(struct usb_page_cache *pc) { + if (pc && pc->tag) { bus_dmamap_destroy(pc->tag, pc->map); pc->tag = NULL; @@ -769,29 +741,23 @@ struct usb_dma_tag * usb_dma_tag_find(struct usb_dma_parent_tag *udpt, usb_size_t size, usb_size_t align) { - struct usb_dma_tag *udt; - uint8_t nudt; + struct usb_dma_tag *udt = udpt->utag_first; + uint8_t nudt = udpt->utag_max; USB_ASSERT(align > 0, ("Invalid parameter align = 0\n")); USB_ASSERT(size > 0, ("Invalid parameter size = 0\n")); - udt = udpt->utag_first; - nudt = udpt->utag_max; - while (nudt--) { - if (udt->align == 0) { usb_dma_tag_create(udt, size, align); - if (udt->tag == NULL) { + if (udt->tag == NULL) return (NULL); - } udt->align = align; udt->size = size; return (udt); } - if ((udt->align == align) && (udt->size == size)) { + if ((udt->align == align) && (udt->size == size)) return (udt); - } udt++; } return (NULL); @@ -801,20 +767,17 @@ usb_dma_tag_find(struct usb_dma_parent_t * usb_dma_tag_setup - initialise USB DMA tags *------------------------------------------------------------------------*/ void -usb_dma_tag_setup(struct usb_dma_parent_tag *udpt, - struct usb_dma_tag *udt, bus_dma_tag_t dmat, - struct mtx *mtx, usb_dma_callback_t *func, +usb_dma_tag_setup(struct usb_dma_parent_tag *udpt, struct usb_dma_tag *udt, + bus_dma_tag_t dmat, struct mtx *mtx, usb_dma_callback_t *func, uint8_t ndmabits, uint8_t nudt) { + bzero(udpt, sizeof(*udpt)); /* sanity checking */ - if ((nudt == 0) || - (ndmabits == 0) || - (mtx == NULL)) { - /* something is corrupt */ + if (nudt == 0 || ndmabits == 0 || mtx == NULL) return; - } + /* initialise condition variable */ cv_init(udpt->cv, "USB DMA CV"); @@ -839,14 +802,10 @@ usb_dma_tag_setup(struct usb_dma_parent_ void usb_dma_tag_unsetup(struct usb_dma_parent_tag *udpt) { - struct usb_dma_tag *udt; - uint8_t nudt; - - udt = udpt->utag_first; - nudt = udpt->utag_max; + struct usb_dma_tag *udt = udpt->utag_first; + uint8_t nudt = udpt->utag_max; while (nudt--) { - if (udt->align) { /* destroy the USB DMA tag */ usb_dma_tag_destroy(udt); @@ -961,7 +920,6 @@ usb_bdma_work_loop(struct usb_xfer_queue return; } if (info->dma_currframe != info->dma_nframes) { - if (info->dma_currframe == 0) { /* special case */ usb_pc_load_mem(xfer->frbuffers, @@ -975,15 +933,12 @@ usb_bdma_work_loop(struct usb_xfer_queue /* advance frame index */ info->dma_currframe++; - return; } /* go ahead */ usb_bdma_pre_sync(xfer); - /* start loading next USB transfer, if any */ usb_command_wrapper(pq, NULL); - /* finally start the hardware */ usbd_pipe_enter(xfer); } @@ -997,9 +952,7 @@ usb_bdma_work_loop(struct usb_xfer_queue void usb_bdma_done_event(struct usb_dma_parent_tag *udpt) { - struct usb_xfer_root *info; - - info = USB_DMATAG_TO_XROOT(udpt); + struct usb_xfer_root *info = USB_DMATAG_TO_XROOT(udpt); mtx_assert(info->xfer_mtx, MA_OWNED); @@ -1034,12 +987,10 @@ usb_bdma_pre_sync(struct usb_xfer *xfer) pc = xfer->frbuffers; while (nframes--) { - - if (pc->isread) { + if (pc->isread) usb_pc_cpu_invalidate(pc); - } else { + else usb_pc_cpu_flush(pc); - } pc++; } } @@ -1067,9 +1018,8 @@ usb_bdma_post_sync(struct usb_xfer *xfer pc = xfer->frbuffers; while (nframes--) { - if (pc->isread) { + if (pc->isread) usb_pc_cpu_invalidate(pc); - } pc++; } }