Deleted Added
full compact
busdma_machdep-v4.c (150860) busdma_machdep-v4.c (150893)
1/*-
2 * Copyright (c) 2004 Olivier Houchard
3 * Copyright (c) 2002 Peter Grehan
4 * Copyright (c) 1997, 1998 Justin T. Gibbs.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 15 unchanged lines hidden (view full) ---

24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 *
28 * From i386/busdma_machdep.c,v 1.26 2002/04/19 22:58:09 alfred
29 */
30
31#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2004 Olivier Houchard
3 * Copyright (c) 2002 Peter Grehan
4 * Copyright (c) 1997, 1998 Justin T. Gibbs.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 15 unchanged lines hidden (view full) ---

24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 *
28 * From i386/busdma_machdep.c,v 1.26 2002/04/19 22:58:09 alfred
29 */
30
31#include <sys/cdefs.h>
32__FBSDID("$FreeBSD: head/sys/arm/arm/busdma_machdep.c 150860 2005-10-03 14:07:57Z cognet $");
32__FBSDID("$FreeBSD: head/sys/arm/arm/busdma_machdep.c 150893 2005-10-03 22:44:54Z cognet $");
33
34/*
35 * MacPPC bus dma support routines
36 */
37
38#define _ARM32_BUS_DMA_PRIVATE
39#include <sys/param.h>
40#include <sys/systm.h>

--- 448 unchanged lines hidden (view full) ---

489 if (pte & L2_L_CACHE_MASK) {
490 map->flags &=
491 ~DMAMAP_COHERENT;
492
493 }
494 } else {
495 curaddr = (pte & L2_S_FRAME) |
496 (vaddr & L2_S_OFFSET);
33
34/*
35 * MacPPC bus dma support routines
36 */
37
38#define _ARM32_BUS_DMA_PRIVATE
39#include <sys/param.h>
40#include <sys/systm.h>

--- 448 unchanged lines hidden (view full) ---

489 if (pte & L2_L_CACHE_MASK) {
490 map->flags &=
491 ~DMAMAP_COHERENT;
492
493 }
494 } else {
495 curaddr = (pte & L2_S_FRAME) |
496 (vaddr & L2_S_OFFSET);
497 pmap_uncache(ptep);
498 map->flags |= DMAMAP_UNCACHED;
499#if 0
500 if (pte & L2_S_CACHE_MASK) {
501 map->flags &=
502 ~DMAMAP_COHERENT;
503 }
497 if (pte & L2_S_CACHE_MASK) {
498 map->flags &=
499 ~DMAMAP_COHERENT;
500 }
504#endif
505 }
506 }
507 } else {
508 curaddr = pmap_extract(pmap, vaddr);
509 map->flags &= ~DMAMAP_COHERENT;
510 }
511
512 if (dmat->ranges) {

--- 256 unchanged lines hidden (view full) ---

769 return (error);
770}
771
772/*
773 * Release the mapping held by map.
774 */
775void
776_bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map)
501 }
502 }
503 } else {
504 curaddr = pmap_extract(pmap, vaddr);
505 map->flags &= ~DMAMAP_COHERENT;
506 }
507
508 if (dmat->ranges) {

--- 256 unchanged lines hidden (view full) ---

765 return (error);
766}
767
768/*
769 * Release the mapping held by map.
770 */
771void
772_bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map)
777{
778 struct mbuf *m;
779 struct uio *uio;
780 int resid;
781 struct iovec *iov;
782
783 if (map->flags & DMAMAP_UNCACHED) {
784 switch(map->flags & DMAMAP_TYPE_MASK) {
785 case DMAMAP_LINEAR:
786 pmap_recache(map->buffer, len);
787 break;
788 case DMAMAP_MBUF:
789 m = map->buffer;
790 while (m) {
791 if (m->m_len > 0)
792 pmap_recache(m->m_data, len);
793 m = m->m_next;
794 }
795 break;
796 case DMAMAP_UIO:
797 uio = map->buffer;
798 iov = uio->uio_iov;
799 resid = uio->uio_resid;
800 for (int i = 0; i < uio->uio_iovcnt && resid != 0; i++) {
801 bus_size_t minlen = resid < iov[i].iov_len ? resid :
802 iov[i].iov_len;
803 if (minlen > 0) {
804 pmap_recache(iov[i].iov_base, minlen);
805 resid -= minlen;
806 }
807 }
808 break;
809 default:
810 break;
811 }
812
813 }
773{
814 map->flags &= ~DMAMAP_TYPE_MASK;
815 return;
816}
817
818static __inline void
819bus_dmamap_sync_buf(void *buf, int len, bus_dmasync_op_t op)
820{
821

--- 13 unchanged lines hidden (view full) ---

835{
836 struct mbuf *m;
837 struct uio *uio;
838 int resid;
839 struct iovec *iov;
840
841 if (!(op & (BUS_DMASYNC_PREWRITE | BUS_DMASYNC_POSTREAD)))
842 return;
774 map->flags &= ~DMAMAP_TYPE_MASK;
775 return;
776}
777
778static __inline void
779bus_dmamap_sync_buf(void *buf, int len, bus_dmasync_op_t op)
780{
781

--- 13 unchanged lines hidden (view full) ---

795{
796 struct mbuf *m;
797 struct uio *uio;
798 int resid;
799 struct iovec *iov;
800
801 if (!(op & (BUS_DMASYNC_PREWRITE | BUS_DMASYNC_POSTREAD)))
802 return;
843 if (map->flags & DMAMAP_COHERENT) {
844 printf("COHERENT\n");
803 if (map->flags & DMAMAP_COHERENT)
845 return;
804 return;
846 }
847 if ((op && BUS_DMASYNC_POSTREAD) && (map->len >= 2 * PAGE_SIZE)) {
848 cpu_dcache_wbinv_all();
849 return;
850 }
851 CTR3(KTR_BUSDMA, "%s: op %x flags %x", __func__, op, map->flags);
852 switch(map->flags & DMAMAP_TYPE_MASK) {
853 case DMAMAP_LINEAR:
854 bus_dmamap_sync_buf(map->buffer, map->len, op);

--- 28 unchanged lines hidden ---
805 if ((op && BUS_DMASYNC_POSTREAD) && (map->len >= 2 * PAGE_SIZE)) {
806 cpu_dcache_wbinv_all();
807 return;
808 }
809 CTR3(KTR_BUSDMA, "%s: op %x flags %x", __func__, op, map->flags);
810 switch(map->flags & DMAMAP_TYPE_MASK) {
811 case DMAMAP_LINEAR:
812 bus_dmamap_sync_buf(map->buffer, map->len, op);

--- 28 unchanged lines hidden ---