From owner-p4-projects@FreeBSD.ORG Sun Nov 25 13:59:39 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9925C16A469; Sun, 25 Nov 2007 13:59:39 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4C5EF16A419 for ; Sun, 25 Nov 2007 13:59:39 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 39ABB13C4DD for ; Sun, 25 Nov 2007 13:59:39 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id lAPDxdYu099176 for ; Sun, 25 Nov 2007 13:59:39 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id lAPDxcoA099173 for perforce@freebsd.org; Sun, 25 Nov 2007 13:59:38 GMT (envelope-from hselasky@FreeBSD.org) Date: Sun, 25 Nov 2007 13:59:38 GMT Message-Id: <200711251359.lAPDxcoA099173@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 129506 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 25 Nov 2007 13:59:39 -0000 http://perforce.freebsd.org/chv.cgi?CH=129506 Change 129506 by hselasky@hselasky_laptop001 on 2007/11/25 13:58:45 Temporary patches to get loading for virtual buffers working. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/usb_subr.c#56 edit .. //depot/projects/usb/src/sys/dev/usb/usb_subr.h#61 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/usb_subr.c#56 (text+ko) ==== @@ -2088,7 +2088,7 @@ uint32_t alignment = (1 << align_power); void *ptr; - tag = usbd_dma_tag_alloc(parent, size, alignment, size); + tag = usbd_dma_tag_alloc(parent, size, alignment, size, 1); if (tag == NULL) { return (NULL); @@ -2127,12 +2127,11 @@ bus_dmamap_load_callback(void *arg, bus_dma_segment_t *segs, int nseg, int error) { - *((bus_size_t *)arg) = nseg ? segs->ds_addr : 0; + __KASSERT(nseg == 1, ("Invalid number of segments, %d!\n", nseg)); + __KASSERT(error == 0, ("Could not load memory into DMA!\n")); + + *((bus_size_t *)arg) = segs->ds_addr; - if (error) { - printf("%s: %s: error=%d\n", - __FILE__, __FUNCTION__, error); - } return; } @@ -2141,7 +2140,7 @@ *------------------------------------------------------------------------*/ bus_dma_tag_t usbd_dma_tag_alloc(bus_dma_tag_t parent, uint32_t seg_size, - uint32_t alignment, uint32_t max_size) + uint32_t alignment, uint32_t max_size, uint8_t single_seg) { bus_dma_tag_t tag; @@ -2154,7 +2153,7 @@ /* filter */ NULL, /* filterarg */ NULL, /* maxsize */ max_size, - /* nsegments */ 1, + /* nsegments */ (single_seg ? 1 : ((16 * 1024 * 1024) / USB_PAGE_SIZE)), /* maxsegsz */ seg_size, /* flags */ 0, /* lock */ NULL, @@ -2352,6 +2351,9 @@ mtx_lock(xfer->priv_mtx); if (error) { + printf("%s: %s: error=%d\n", + __FILE__, __FUNCTION__, error); + xfer->flags_int.bdma_error = 1; } else { __KASSERT(nseg > 0, ("Invalid number of segments!\n")); @@ -2450,7 +2452,7 @@ bus_dma_tag_t usbd_dma_tag_alloc(bus_dma_tag_t parent, uint32_t seg_size, - uint32_t alignment, uint32_t max_size) + uint32_t alignment, uint32_t max_size, uint8_t single_seg) { /* FreeBSD specific */ return (parent); @@ -3141,15 +3143,14 @@ } } bus->dma_tag_1b = - usbd_dma_tag_alloc(parent_tag, USB_PAGE_SIZE, 1, - 0 - 1); + usbd_dma_tag_alloc(parent_tag, USB_PAGE_SIZE, 1, 0 - 1, 0); if (bus->dma_tag_1b == NULL) { goto error; } bus->dma_tag_ps = - usbd_dma_tag_alloc(parent_tag, USB_PAGE_SIZE, USB_PAGE_SIZE, - USB_PAGE_SIZE); + usbd_dma_tag_alloc(parent_tag, USB_PAGE_SIZE, + USB_PAGE_SIZE, USB_PAGE_SIZE, 1); if (bus->dma_tag_ps == NULL) { goto error; ==== //depot/projects/usb/src/sys/dev/usb/usb_subr.h#61 (text+ko) ==== @@ -706,7 +706,7 @@ uint32_t usbd_page_fit_obj(uint32_t size, uint32_t obj_len); void *usbd_mem_alloc(bus_dma_tag_t parent, struct usbd_page *page, uint32_t size, uint8_t align_power); void usbd_mem_free(struct usbd_page *page); -bus_dma_tag_t usbd_dma_tag_alloc(bus_dma_tag_t parent, uint32_t seg_size, uint32_t alignment, uint32_t max_size); +bus_dma_tag_t usbd_dma_tag_alloc(bus_dma_tag_t parent, uint32_t seg_size, uint32_t alignment, uint32_t max_size, uint8_t single_seg); void usbd_dma_tag_free(bus_dma_tag_t tag); void *usbd_mem_alloc_sub(bus_dma_tag_t tag, struct usbd_page *page, uint32_t size, uint32_t alignment); void usbd_mem_free_sub(struct usbd_page *page);