From owner-p4-projects@FreeBSD.ORG Sat Jan 20 22:34:20 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 42EAD16A405; Sat, 20 Jan 2007 22:34:20 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 20DAD16A400 for ; Sat, 20 Jan 2007 22:34:20 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 1079513C442 for ; Sat, 20 Jan 2007 22:34:20 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id l0KMYKHH034449 for ; Sat, 20 Jan 2007 22:34:20 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id l0KMYJOv034446 for perforce@freebsd.org; Sat, 20 Jan 2007 22:34:19 GMT (envelope-from hselasky@FreeBSD.org) Date: Sat, 20 Jan 2007 22:34:19 GMT Message-Id: <200701202234.l0KMYJOv034446@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 113228 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: Sat, 20 Jan 2007 22:34:20 -0000 http://perforce.freebsd.org/chv.cgi?CH=113228 Change 113228 by hselasky@hselasky_mini_itx on 2007/01/20 22:34:11 Remove some unused functions. Reverse the order of BUS_DMASYNC_PREXXX and BUS_DMASYNC_POSTXXX which was introduced by change 113175. Two new functions, usbd_page_dma_exit and usbd_page_dma_enter, handle the exiting and entering from the context where the USB host controller can read/write to the DMA-able memory. By default memory allocated by usbd_mem_alloc_sub is entered into the DMA-read/write context. usbd_mem_free_sub will by default exit the memory from the DMA-read/write context. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/ehci.c#19 edit .. //depot/projects/usb/src/sys/dev/usb/ohci.c#15 edit .. //depot/projects/usb/src/sys/dev/usb/uhci.c#16 edit .. //depot/projects/usb/src/sys/dev/usb/usb_subr.c#26 edit .. //depot/projects/usb/src/sys/dev/usb/usb_subr.h#29 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/ehci.c#19 (text+ko) ==== @@ -197,7 +197,7 @@ sc->sc_eintrs = EHCI_NORMAL_INTRS; - usbd_page_sync(&(sc->sc_hw_page), BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(&(sc->sc_hw_page)); for(i = 0; i < EHCI_VIRTUAL_FRAMELIST_COUNT; i++) { @@ -323,7 +323,7 @@ sc->sc_async_p_last = &(hw_ptr->async_start); - usbd_page_sync(&(sc->sc_hw_page), BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(&(sc->sc_hw_page)); #ifdef USB_DEBUG if(ehcidebug) @@ -686,11 +686,11 @@ ehci_dump_sqtd(ehci_qtd_t *sqtd) { uint8_t temp; - usbd_page_sync(sqtd->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(sqtd->page); printf("QTD(%p) at 0x%08x:\n", sqtd, le32toh(sqtd->qtd_self)); ehci_dump_qtd(sqtd); temp = (sqtd->qtd_next & htole32(EHCI_LINK_TERMINATE)) ? 1 : 0; - usbd_page_sync(sqtd->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(sqtd->page); return temp; } @@ -717,7 +717,7 @@ { u_int32_t endp, endphub; - usbd_page_sync(qh->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(qh->page); printf("QH(%p) at 0x%08x:\n", qh, le32toh(qh->qh_self) & ~0x1F); printf(" link="); ehci_dump_link(qh->qh_link, 1); printf("\n"); endp = le32toh(qh->qh_endp); @@ -738,14 +738,14 @@ printf(" curqtd="); ehci_dump_link(qh->qh_curqtd, 0); printf("\n"); printf("Overlay qTD:\n"); ehci_dump_qtd((void *)&qh->qh_qtd); - usbd_page_sync(qh->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(qh->page); return; } static void ehci_dump_sitd(ehci_sitd_t *sitd) { - usbd_page_sync(sitd->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(sitd->page); printf("SITD(%p) at 0x%08x\n", sitd, le32toh(sitd->sitd_self) & ~0x1F); printf(" next=0x%08x\n", le32toh(sitd->sitd_next)); printf(" portaddr=0x%08x dir=%s addr=%d endpt=0x%x port=0x%x huba=0x%x\n", @@ -766,14 +766,14 @@ le32toh(sitd->sitd_bp[1]), le32toh(sitd->sitd_bp_hi[0]), le32toh(sitd->sitd_bp_hi[1])); - usbd_page_sync(sitd->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(sitd->page); return; } static void ehci_dump_itd(ehci_itd_t *itd) { - usbd_page_sync(itd->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(itd->page); printf("ITD(%p) at 0x%08x\n", itd, le32toh(itd->itd_self) & ~0x1F); printf(" next=0x%08x\n", le32toh(itd->itd_next)); printf(" status[0]=0x%08x; <%s>\n", le32toh(itd->itd_status[0]), @@ -815,7 +815,7 @@ le32toh(itd->itd_bp_hi[4]), le32toh(itd->itd_bp_hi[5]), le32toh(itd->itd_bp_hi[6])); - usbd_page_sync(itd->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(itd->page); return; } @@ -859,15 +859,15 @@ /* (sc->sc_bus.mtx) must be locked */ - usbd_page_sync(std->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(std->page); std->next = last->next; std->sitd_next = last->sitd_next; std->prev = last; - usbd_page_sync(std->page, BUS_DMASYNC_POSTWRITE); - usbd_page_sync(last->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_enter(std->page); + usbd_page_dma_exit(last->page); /* the last->next->prev is never followed: * std->next->prev = std; @@ -875,7 +875,7 @@ last->next = std; last->sitd_next = std->sitd_self; - usbd_page_sync(last->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(last->page); return(std); } @@ -888,15 +888,15 @@ /* (sc->sc_bus.mtx) must be locked */ - usbd_page_sync(std->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(std->page); std->next = last->next; std->itd_next = last->itd_next; std->prev = last; - usbd_page_sync(std->page, BUS_DMASYNC_POSTWRITE); - usbd_page_sync(last->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_enter(std->page); + usbd_page_dma_exit(last->page); /* the last->next->prev is never followed: * std->next->prev = std; @@ -904,7 +904,7 @@ last->next = std; last->itd_next = std->itd_self; - usbd_page_sync(last->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(last->page); return(std); } @@ -917,15 +917,15 @@ /* (sc->sc_bus.mtx) must be locked */ - usbd_page_sync(sqh->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(sqh->page); sqh->next = last->next; sqh->qh_link = last->qh_link; sqh->prev = last; - usbd_page_sync(sqh->page, BUS_DMASYNC_POSTWRITE); - usbd_page_sync(last->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_enter(sqh->page); + usbd_page_dma_exit(last->page); /* the last->next->prev is never followed: * sqh->next->prev = sqh; @@ -934,7 +934,7 @@ last->next = sqh; last->qh_link = sqh->qh_self; - usbd_page_sync(last->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(last->page); #ifdef USB_DEBUG if(ehcidebug > 5) @@ -954,16 +954,18 @@ /* (sc->sc_bus.mtx) must be locked */ - usbd_page_sync(std->prev->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(std->prev->page); std->prev->next = std->next; std->prev->sitd_next = std->sitd_next; - usbd_page_sync(std->prev->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(std->prev->page); if(std->next) { + usbd_page_dma_exit(std->next->page); std->next->prev = std->prev; + usbd_page_dma_enter(std->next->page); } return((last == std) ? std->prev : last); } @@ -976,16 +978,18 @@ /* (sc->sc_bus.mtx) must be locked */ - usbd_page_sync(std->prev->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(std->prev->page); std->prev->next = std->next; std->prev->itd_next = std->itd_next; - usbd_page_sync(std->prev->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(std->prev->page); if(std->next) { + usbd_page_dma_exit(std->next->page); std->next->prev = std->prev; + usbd_page_dma_enter(std->next->page); } return((last == std) ? std->prev : last); } @@ -1001,19 +1005,21 @@ /* only remove if not removed from a queue */ if(sqh->prev) { - usbd_page_sync(sqh->prev->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(sqh->prev->page); sqh->prev->next = sqh->next; sqh->prev->qh_link = sqh->qh_link; - usbd_page_sync(sqh->prev->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(sqh->prev->page); if(sqh->next) { + usbd_page_dma_exit(sqh->next->page); sqh->next->prev = sqh->prev; + usbd_page_dma_enter(sqh->next->page); } - usbd_page_sync(sqh->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(sqh->page); /* set the Terminate-bit in the e_next of the QH, * in case the transferred packet was short so @@ -1022,7 +1028,7 @@ sqh->qh_qtd.qtd_next = htole32(EHCI_LINK_TERMINATE); - usbd_page_sync(sqh->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(sqh->page); last = ((last == sqh) ? sqh->prev : last); @@ -1058,9 +1064,9 @@ td != NULL; td = td->obj_next) { - usbd_page_sync(td->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td->page); temp = le32toh(td->qtd_status); - usbd_page_sync(td->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td->page); if (temp & EHCI_QTD_ACTIVE) { @@ -1150,11 +1156,11 @@ /* isochronous full speed transfer */ - usbd_page_sync(td->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td->page); status = le32toh(td->sitd_status); - usbd_page_sync(td->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td->page); if (!(status & EHCI_SITD_ACTIVE)) { ehci_device_done(xfer, USBD_NORMAL_COMPLETION); @@ -1167,7 +1173,7 @@ /* isochronous high speed transfer */ - usbd_page_sync(td->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td->page); status = ((!(td->itd_status[0] & htole32(EHCI_ITD_ACTIVE))) && (!(td->itd_status[1] & htole32(EHCI_ITD_ACTIVE))) && @@ -1178,7 +1184,7 @@ (!(td->itd_status[6] & htole32(EHCI_ITD_ACTIVE))) && (!(td->itd_status[7] & htole32(EHCI_ITD_ACTIVE)))); - usbd_page_sync(td->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td->page); if (status) { ehci_device_done(xfer, USBD_NORMAL_COMPLETION); @@ -1199,11 +1205,11 @@ td != NULL; td = td->obj_next) { - usbd_page_sync(td->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td->page); status = le32toh(td->qtd_status); - usbd_page_sync(td->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td->page); /* if there is an active TD * the transfer isn't done @@ -1545,7 +1551,7 @@ */ xfer->pipe->toggle_next = 1; - usbd_page_sync(td->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(td->page); /* SETUP message */ @@ -1577,7 +1583,7 @@ td_last->qtd_altnext = htole32(EHCI_LINK_TERMINATE); } - usbd_page_sync(td_last->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(td_last->page); } else { @@ -1641,7 +1647,7 @@ "than there is in the buffer!", __FUNCTION__); } - usbd_page_sync(td->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(td->page); /* fill out current TD */ @@ -1684,12 +1690,12 @@ td_last->qtd_altnext = htole32(EHCI_LINK_TERMINATE); } - usbd_page_sync(td_last->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(td_last->page); } if(xfer->pipe->methods == &ehci_device_ctrl_methods) { - usbd_page_sync(td->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(td->page); /* STATUS message */ @@ -1711,17 +1717,17 @@ td->len = 0; td_last = td; - usbd_page_sync(td_last->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(td_last->page); } - usbd_page_sync(td_last->page, BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td_last->page); /* the last TD terminates the transfer: */ td_last->qtd_next = htole32(EHCI_LINK_TERMINATE); td_last->qtd_altnext = htole32(EHCI_LINK_TERMINATE); td_last->qtd_status |= htole32(EHCI_QTD_IOC); - usbd_page_sync(td_last->page, BUS_DMASYNC_POSTWRITE|BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td_last->page); /* must have at least one frame! */ @@ -1738,7 +1744,7 @@ qh = xfer->qh_start; - usbd_page_sync(qh->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(qh->page); /* the "qh_link" field is filled when the QH is added */ @@ -1802,7 +1808,7 @@ qh->qh_qtd.qtd_next = td->qtd_self; qh->qh_qtd.qtd_altnext = htole32(EHCI_LINK_TERMINATE); - usbd_page_sync(qh->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(qh->page); EHCI_APPEND_QH(qh, *qh_last); return; @@ -1880,9 +1886,9 @@ ehci_dump_sitd(td); } #endif - usbd_page_sync(td->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td->page); status = le32toh(td->sitd_status); - usbd_page_sync(td->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td->page); /* check for active transfers */ if (status & EHCI_SITD_ACTIVE) { @@ -1952,9 +1958,9 @@ } #endif - usbd_page_sync(td->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td->page); status = le32toh(td->itd_status[td_no]); - usbd_page_sync(td->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td->page); if (status & EHCI_ITD_ACTIVE) { need_delay = 1; @@ -2392,7 +2398,7 @@ for(td = xfer->td_start; td; td = td->obj_next) { - usbd_page_sync(td->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(td->page); td->sitd_portaddr = sitd_portaddr; @@ -2421,7 +2427,7 @@ } td->sitd_back = htole32(EHCI_LINK_TERMINATE); - usbd_page_sync(td->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(td->page); } return; } @@ -2521,7 +2527,7 @@ *plen = xfer->max_frame_size; } - usbd_page_sync(td->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(td->page); td->sitd_bp[0] = htole32(buf_res.physaddr); @@ -2550,7 +2556,7 @@ (EHCI_SITD_ACTIVE| EHCI_SITD_SET_LEN(*plen)); } - usbd_page_sync(td->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(td->page); #ifdef USB_DEBUG if(ehcidebug > 15) @@ -2620,7 +2626,7 @@ for(td = xfer->td_start; td; td = td->obj_next) { - usbd_page_sync(td->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(td->page); /* set TD inactive */ td->itd_status[0] = 0; @@ -2651,7 +2657,7 @@ /* set transfer multiplier */ td->itd_bp[2] = htole32(xfer->max_packet_count & 3); - usbd_page_sync(td->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(td->page); } return; } @@ -2757,7 +2763,7 @@ if(td_no == 0) { - usbd_page_sync(td->page, BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td->page); /* update page address */ td->itd_bp[page_no] &= htole32(0xFFF); @@ -2841,7 +2847,7 @@ if((td_no == 8) || (nframes == 0)) { - usbd_page_sync(td->page, BUS_DMASYNC_POSTWRITE|BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td->page); #ifdef USB_DEBUG if(ehcidebug > 15) { @@ -3816,7 +3822,7 @@ usbd_page_get_info(page_ptr, size[1], &page_info); - usbd_page_sync(page_info.page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(page_info.page); td = page_info.buffer; @@ -3827,7 +3833,7 @@ last_obj = td; - usbd_page_sync(page_info.page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(page_info.page); } size[1] += sizeof(ehci_itd_t); } @@ -3844,7 +3850,7 @@ usbd_page_get_info(page_ptr, size[1], &page_info); - usbd_page_sync(page_info.page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(page_info.page); td = page_info.buffer; @@ -3855,7 +3861,7 @@ last_obj = td; - usbd_page_sync(page_info.page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(page_info.page); } size[1] += sizeof(ehci_sitd_t); } @@ -3872,7 +3878,7 @@ usbd_page_get_info(page_ptr, size[1], &page_info); - usbd_page_sync(page_info.page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(page_info.page); qtd = page_info.buffer; @@ -3883,7 +3889,7 @@ last_obj = qtd; - usbd_page_sync(page_info.page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(page_info.page); } size[1] += sizeof(ehci_qtd_t); } @@ -3910,7 +3916,7 @@ usbd_page_get_info(page_ptr, size[1], &page_info); - usbd_page_sync(page_info.page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(page_info.page); qh = page_info.buffer; @@ -3921,7 +3927,7 @@ last_obj = qh; - usbd_page_sync(page_info.page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(page_info.page); } size[1] += sizeof(ehci_qh_t); } ==== //depot/projects/usb/src/sys/dev/usb/ohci.c#15 (text+ko) ==== @@ -269,7 +269,7 @@ sc->sc_eintrs = OHCI_NORMAL_INTRS; - usbd_page_sync(&(sc->sc_hw_page), BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(&(sc->sc_hw_page)); /* * setup self pointers @@ -337,7 +337,7 @@ hw_ptr->intr_start[i|(OHCI_NO_EDS/2)].ed_self; } - usbd_page_sync(&(sc->sc_hw_page), BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(&(sc->sc_hw_page)); LIST_INIT(&sc->sc_interrupt_list_head); @@ -515,11 +515,11 @@ hw_ptr = sc->sc_hw_ptr; - usbd_page_sync(&(sc->sc_hw_page), BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(&(sc->sc_hw_page)); DPRINTF((" HCCA: frame_number=0x%04x done_head=0x%08x\n", le32toh(hw_ptr->hcca.hcca_frame_number), le32toh(hw_ptr->hcca.hcca_done_head))); - usbd_page_sync(&(sc->sc_hw_page), BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(&(sc->sc_hw_page)); return; } static void @@ -540,7 +540,7 @@ uint32_t td_flags; uint8_t temp; - usbd_page_sync(std->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(std->page); td_flags = le32toh(std->td_flags); temp = (std->td_next == 0); @@ -560,7 +560,7 @@ le32toh(std->td_next), le32toh(std->td_be)); - usbd_page_sync(std->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(std->page); return temp; } @@ -571,7 +571,7 @@ uint16_t i; uint8_t temp; - usbd_page_sync(sitd->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(sitd->page); itd_flags = le32toh(sitd->itd_flags); temp = (sitd->itd_next == 0); @@ -593,7 +593,7 @@ } printf("\n"); - usbd_page_sync(sitd->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(sitd->page); return temp; } @@ -615,7 +615,7 @@ uint32_t ed_flags; u_int32_t ed_headp; - usbd_page_sync(sed->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(sed->page); ed_flags = le32toh(sed->ed_flags); ed_headp = le32toh(sed->ed_headp); @@ -637,7 +637,7 @@ le32toh(sed->ed_headp), le32toh(sed->ed_next)); - usbd_page_sync(sed->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(sed->page); return; } #endif @@ -651,7 +651,7 @@ /* (sc->sc_bus.mtx) must be locked */ - usbd_page_sync(sed->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(sed->page); sed->next = last->next; sed->ed_next = last->ed_next; @@ -660,8 +660,8 @@ sed->prev = last; - usbd_page_sync(sed->page, BUS_DMASYNC_POSTWRITE); - usbd_page_sync(last->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_enter(sed->page); + usbd_page_dma_exit(last->page); /* the last->next->prev is never followed: * sed->next->prev = sed; @@ -670,7 +670,7 @@ last->next = sed; last->ed_next = sed->ed_self; - usbd_page_sync(last->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(last->page); return(sed); } @@ -686,19 +686,21 @@ /* only remove if not removed from a queue */ if(sed->prev) { - usbd_page_sync(sed->prev->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(sed->prev->page); sed->prev->next = sed->next; sed->prev->ed_next = sed->ed_next; - usbd_page_sync(sed->prev->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(sed->prev->page); if(sed->next) { + usbd_page_dma_exit(sed->next->page); sed->next->prev = sed->prev; + usbd_page_dma_enter(sed->next->page); } - usbd_page_sync(sed->page, BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(sed->page); /* terminate transfer in case the * transferred packet was short so @@ -708,7 +710,7 @@ sed->ed_flags |= htole32(OHCI_ED_SKIP); sed->ed_headp = sed->ed_tailp; - usbd_page_sync(sed->page, BUS_DMASYNC_POSTWRITE|BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(sed->page); last = ((last == sed) ? sed->prev : last); @@ -745,7 +747,7 @@ ohci_dump_itd(td); } #endif - usbd_page_sync(td->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td->page); nframes = td->frames; olen = &td->itd_offset[0]; @@ -777,7 +779,7 @@ olen++; } - usbd_page_sync(td->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td->page); if(((void *)td) == xfer->td_transfer_last) { @@ -847,7 +849,7 @@ __FUNCTION__, __LINE__); } - usbd_page_sync(td->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td->page); phy_start = le32toh(td->td_cbp); td_flags = le32toh(td->td_flags); @@ -871,7 +873,7 @@ } } - usbd_page_sync(td->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td->page); DPRINTFN(10, ("len=%d\n", len)); @@ -927,11 +929,11 @@ DPRINTFN(12, ("xfer=%p checking transfer\n", xfer)); - usbd_page_sync(ed->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(ed->page); ed_flags = le32toh(ed->ed_flags); ed_headp = le32toh(ed->ed_headp); ed_tailp = le32toh(ed->ed_tailp); - usbd_page_sync(ed->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(ed->page); if ((ed_flags & OHCI_ED_SKIP) || (ed_headp & OHCI_HALTED) || @@ -1047,7 +1049,7 @@ status = 0; - usbd_page_sync(&(sc->sc_hw_page), BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(&(sc->sc_hw_page)); done = le32toh(hw_ptr->hcca.hcca_done_head); /* The LSb of done is used to inform the HC Driver that an interrupt @@ -1079,7 +1081,7 @@ status = OREAD4(sc, OHCI_INTERRUPT_STATUS) & ~OHCI_WDH; } - usbd_page_sync(&(sc->sc_hw_page), BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(&(sc->sc_hw_page)); if(status == 0) /* nothing to be done (PCI shared interrupt) */ { @@ -1290,7 +1292,7 @@ */ xfer->pipe->toggle_next = 1; - usbd_page_sync(td->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(td->page); /* SETUP message */ @@ -1317,7 +1319,7 @@ td_last->td_next = td->td_self; } - usbd_page_sync(td_last->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(td_last->page); } else { @@ -1391,7 +1393,7 @@ "than there is in the buffer!", __FUNCTION__); } - usbd_page_sync(td->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(td->page); /* fill out TD */ @@ -1428,12 +1430,12 @@ td_last->td_next = td->td_self; } - usbd_page_sync(td_last->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(td_last->page); } if(xfer->pipe->methods == &ohci_device_ctrl_methods) { - usbd_page_sync(td->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(td->page); /* STATUS message */ @@ -1453,16 +1455,16 @@ td_last = td; - usbd_page_sync(td_last->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(td_last->page); } - usbd_page_sync(td_last->page, BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td_last->page); td_last->td_next = 0; td_last->td_flags &= htole32(~OHCI_TD_INTR_MASK); td_last->td_flags |= htole32(OHCI_TD_SET_DI(1)); - usbd_page_sync(td_last->page, BUS_DMASYNC_POSTWRITE|BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td_last->page); /* must have at least one frame! */ @@ -1479,7 +1481,7 @@ ed = xfer->qh_start; - usbd_page_sync(ed->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(ed->page); ed_flags = (OHCI_ED_SET_FA(xfer->address)| OHCI_ED_SET_EN(UE_GET_ADDR(xfer->endpoint))| @@ -1493,7 +1495,7 @@ ed->ed_flags = htole32(ed_flags); - usbd_page_sync(ed->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(ed->page); td = xfer->td_transfer_first; @@ -1574,7 +1576,7 @@ for(ed = xfer->qh_start; ed; ed = ed->obj_next) { - usbd_page_sync(ed->page, BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(ed->page); if((!(ed->ed_flags & htole32(OHCI_ED_SKIP))) && (!(ed->ed_headp & htole32(OHCI_HALTED))) && @@ -1583,7 +1585,7 @@ need_delay = 1; } - usbd_page_sync(ed->page, BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(ed->page); } if(xfer->pipe->methods == &ohci_device_bulk_methods) @@ -1890,9 +1892,9 @@ DPRINTFN(5,("xfer=%p next=%d nframes=%d\n", xfer, xfer->pipe->isoc_next, xfer->nframes)); - usbd_page_sync(&(sc->sc_hw_page), BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(&(sc->sc_hw_page)); nframes = le32toh(hw_ptr->hcca.hcca_frame_number); - usbd_page_sync(&(sc->sc_hw_page), BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(&(sc->sc_hw_page)); if((((nframes - xfer->pipe->isoc_next) & ((1<<16)-1)) < xfer->nframes) || (((xfer->pipe->isoc_next - nframes) & ((1<<16)-1)) >= 256)) @@ -1958,7 +1960,7 @@ (OHCI_PAGE(buf_res.physaddr) != bp0) || (nframes == 0)) { - usbd_page_sync(td->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(td->page); /* fill current ITD */ td->itd_flags = htole32( @@ -1991,18 +1993,18 @@ td_last->itd_next = td->itd_self; } - usbd_page_sync(td_last->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(td_last->page); } } - usbd_page_sync(td_last->page, BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD); + usbd_page_dma_exit(td_last->page); /* update the last TD */ td_last->itd_flags &= htole32(~OHCI_ITD_NOINTR); td_last->itd_flags |= htole32(OHCI_ITD_SET_DI(0)); td_last->itd_next = 0; - usbd_page_sync(td_last->page, BUS_DMASYNC_POSTWRITE|BUS_DMASYNC_POSTREAD); + usbd_page_dma_enter(td_last->page); xfer->td_transfer_last = td_last; @@ -2015,7 +2017,7 @@ #endif ed = xfer->qh_start; - usbd_page_sync(ed->page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(ed->page); if(UE_GET_DIR(xfer->endpoint) == UE_DIR_IN) ed_flags = (OHCI_ED_DIR_IN|OHCI_ED_FORMAT_ISO); @@ -2033,7 +2035,7 @@ ed->ed_flags = htole32(ed_flags); - usbd_page_sync(ed->page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(ed->page); td = xfer->td_transfer_first; @@ -2849,7 +2851,7 @@ usbd_page_get_info(page_ptr, size[1], &page_info); - usbd_page_sync(page_info.page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(page_info.page); td = page_info.buffer; @@ -2860,7 +2862,7 @@ last_obj = td; - usbd_page_sync(page_info.page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(page_info.page); } size[1] += sizeof(ohci_td_t); } @@ -2877,7 +2879,7 @@ usbd_page_get_info(page_ptr, size[1], &page_info); - usbd_page_sync(page_info.page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(page_info.page); itd = page_info.buffer; @@ -2888,7 +2890,7 @@ last_obj = itd; - usbd_page_sync(page_info.page, BUS_DMASYNC_POSTWRITE); + usbd_page_dma_enter(page_info.page); } size[1] += sizeof(ohci_itd_t); } @@ -2912,7 +2914,7 @@ usbd_page_get_info(page_ptr, size[1], &page_info); - usbd_page_sync(page_info.page, BUS_DMASYNC_PREWRITE); + usbd_page_dma_exit(page_info.page); ed = page_info.buffer; >>> TRUNCATED FOR MAIL (1000 lines) <<<