busdma_machdep-v4.c (246713) | busdma_machdep-v4.c (246881) |
---|---|
1/*- 2 * Copyright (c) 2012 Ian Lepore 3 * Copyright (c) 2004 Olivier Houchard 4 * Copyright (c) 2002 Peter Grehan 5 * Copyright (c) 1997, 1998 Justin T. Gibbs. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 16 unchanged lines hidden (view full) --- 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * From i386/busdma_machdep.c,v 1.26 2002/04/19 22:58:09 alfred 30 */ 31 32#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2012 Ian Lepore 3 * Copyright (c) 2004 Olivier Houchard 4 * Copyright (c) 2002 Peter Grehan 5 * Copyright (c) 1997, 1998 Justin T. Gibbs. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 16 unchanged lines hidden (view full) --- 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * From i386/busdma_machdep.c,v 1.26 2002/04/19 22:58:09 alfred 30 */ 31 32#include <sys/cdefs.h> |
33__FBSDID("$FreeBSD: head/sys/arm/arm/busdma_machdep.c 246713 2013-02-12 16:57:20Z kib $"); | 33__FBSDID("$FreeBSD: head/sys/arm/arm/busdma_machdep.c 246881 2013-02-16 20:43:16Z ian $"); |
34 35/* 36 * ARM bus dma support routines. 37 * 38 * XXX Things to investigate / fix some day... 39 * - What is the earliest that this API can be called? Could there be any 40 * fallout from changing the SYSINIT() order from SI_SUB_VM to SI_SUB_KMEM? 41 * - The manpage mentions the BUS_DMA_NOWAIT flag only in the context of the --- 866 unchanged lines hidden (view full) --- 908 sgsize = (baddr - curaddr); 909 } 910 if (dmat->ranges) { 911 struct arm32_dma_range *dr; 912 913 dr = _bus_dma_inrange(dmat->ranges, dmat->_nranges, 914 curaddr); 915 if (dr == NULL) | 34 35/* 36 * ARM bus dma support routines. 37 * 38 * XXX Things to investigate / fix some day... 39 * - What is the earliest that this API can be called? Could there be any 40 * fallout from changing the SYSINIT() order from SI_SUB_VM to SI_SUB_KMEM? 41 * - The manpage mentions the BUS_DMA_NOWAIT flag only in the context of the --- 866 unchanged lines hidden (view full) --- 908 sgsize = (baddr - curaddr); 909 } 910 if (dmat->ranges) { 911 struct arm32_dma_range *dr; 912 913 dr = _bus_dma_inrange(dmat->ranges, dmat->_nranges, 914 curaddr); 915 if (dr == NULL) |
916 return (EINVAL); | 916 return (0); |
917 /* 918 * In a valid DMA range. Translate the physical 919 * memory address to an address in the DMA window. 920 */ 921 curaddr = (curaddr - dr->dr_sysbase) + dr->dr_busbase; 922 923 } 924 --- 5 unchanged lines hidden (view full) --- 930 if (seg >= 0 && 931 curaddr == segs[seg].ds_addr + segs[seg].ds_len && 932 (segs[seg].ds_len + sgsize) <= dmat->maxsegsz && 933 (dmat->boundary == 0 || 934 (segs[seg].ds_addr & bmask) == (curaddr & bmask))) { 935 segs[seg].ds_len += sgsize; 936 } else { 937 if (++seg >= dmat->nsegments) | 917 /* 918 * In a valid DMA range. Translate the physical 919 * memory address to an address in the DMA window. 920 */ 921 curaddr = (curaddr - dr->dr_sysbase) + dr->dr_busbase; 922 923 } 924 --- 5 unchanged lines hidden (view full) --- 930 if (seg >= 0 && 931 curaddr == segs[seg].ds_addr + segs[seg].ds_len && 932 (segs[seg].ds_len + sgsize) <= dmat->maxsegsz && 933 (dmat->boundary == 0 || 934 (segs[seg].ds_addr & bmask) == (curaddr & bmask))) { 935 segs[seg].ds_len += sgsize; 936 } else { 937 if (++seg >= dmat->nsegments) |
938 return (EFBIG); | 938 return (0); |
939 segs[seg].ds_addr = curaddr; 940 segs[seg].ds_len = sgsize; 941 } 942 *segp = seg; | 939 segs[seg].ds_addr = curaddr; 940 segs[seg].ds_len = sgsize; 941 } 942 *segp = seg; |
943 return (0); | 943 return (sgsize); |
944} 945 946/* 947 * Utility function to load a physical buffer. segp contains 948 * the starting segment on entrace, and the ending segment on exit. 949 */ 950int 951_bus_dmamap_load_phys(bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t buf, --- 565 unchanged lines hidden --- | 944} 945 946/* 947 * Utility function to load a physical buffer. segp contains 948 * the starting segment on entrace, and the ending segment on exit. 949 */ 950int 951_bus_dmamap_load_phys(bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t buf, --- 565 unchanged lines hidden --- |