Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2fc42814 authored by Russell King's avatar Russell King
Browse files

Merge branch 'pending-dma-streaming' (early part) into devel

parents c6baa196 29cb8d0d
Loading
Loading
Loading
Loading
+18 −3
Original line number Original line Diff line number Diff line
@@ -342,6 +342,22 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
}
}
EXPORT_SYMBOL(dma_map_single);
EXPORT_SYMBOL(dma_map_single);


/*
 * see if a mapped address was really a "safe" buffer and if so, copy
 * the data from the safe buffer back to the unsafe buffer and free up
 * the safe buffer.  (basically return things back to the way they
 * should be)
 */
void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
		enum dma_data_direction dir)
{
	dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
		__func__, (void *) dma_addr, size, dir);

	unmap_single(dev, dma_addr, size, dir);
}
EXPORT_SYMBOL(dma_unmap_single);

dma_addr_t dma_map_page(struct device *dev, struct page *page,
dma_addr_t dma_map_page(struct device *dev, struct page *page,
		unsigned long offset, size_t size, enum dma_data_direction dir)
		unsigned long offset, size_t size, enum dma_data_direction dir)
{
{
@@ -366,8 +382,7 @@ EXPORT_SYMBOL(dma_map_page);
 * the safe buffer.  (basically return things back to the way they
 * the safe buffer.  (basically return things back to the way they
 * should be)
 * should be)
 */
 */

void dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size,
void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
		enum dma_data_direction dir)
		enum dma_data_direction dir)
{
{
	dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
	dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
@@ -375,7 +390,7 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,


	unmap_single(dev, dma_addr, size, dir);
	unmap_single(dev, dma_addr, size, dir);
}
}
EXPORT_SYMBOL(dma_unmap_single);
EXPORT_SYMBOL(dma_unmap_page);


int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr,
int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr,
		unsigned long off, size_t sz, enum dma_data_direction dir)
		unsigned long off, size_t sz, enum dma_data_direction dir)
+14 −12
Original line number Original line Diff line number Diff line
@@ -15,20 +15,15 @@
 * must not be used by drivers.
 * must not be used by drivers.
 */
 */
#ifndef __arch_page_to_dma
#ifndef __arch_page_to_dma

#if !defined(CONFIG_HIGHMEM)
static inline dma_addr_t page_to_dma(struct device *dev, struct page *page)
static inline dma_addr_t page_to_dma(struct device *dev, struct page *page)
{
{
	return (dma_addr_t)__virt_to_bus((unsigned long)page_address(page));
	return (dma_addr_t)__pfn_to_bus(page_to_pfn(page));
}
}
#elif defined(__pfn_to_bus)

static inline dma_addr_t page_to_dma(struct device *dev, struct page *page)
static inline struct page *dma_to_page(struct device *dev, dma_addr_t addr)
{
{
	return (dma_addr_t)__pfn_to_bus(page_to_pfn(page));
	return pfn_to_page(__bus_to_pfn(addr));
}
}
#else
#error "this machine class needs to define __arch_page_to_dma to use HIGHMEM"
#endif


static inline void *dma_to_virt(struct device *dev, dma_addr_t addr)
static inline void *dma_to_virt(struct device *dev, dma_addr_t addr)
{
{
@@ -45,6 +40,11 @@ static inline dma_addr_t page_to_dma(struct device *dev, struct page *page)
	return __arch_page_to_dma(dev, page);
	return __arch_page_to_dma(dev, page);
}
}


static inline struct page *dma_to_page(struct device *dev, dma_addr_t addr)
{
	return __arch_dma_to_page(dev, addr);
}

static inline void *dma_to_virt(struct device *dev, dma_addr_t addr)
static inline void *dma_to_virt(struct device *dev, dma_addr_t addr)
{
{
	return __arch_dma_to_virt(dev, addr);
	return __arch_dma_to_virt(dev, addr);
@@ -257,9 +257,11 @@ extern int dma_needs_bounce(struct device*, dma_addr_t, size_t);
 */
 */
extern dma_addr_t dma_map_single(struct device *, void *, size_t,
extern dma_addr_t dma_map_single(struct device *, void *, size_t,
		enum dma_data_direction);
		enum dma_data_direction);
extern void dma_unmap_single(struct device *, dma_addr_t, size_t,
		enum dma_data_direction);
extern dma_addr_t dma_map_page(struct device *, struct page *,
extern dma_addr_t dma_map_page(struct device *, struct page *,
		unsigned long, size_t, enum dma_data_direction);
		unsigned long, size_t, enum dma_data_direction);
extern void dma_unmap_single(struct device *, dma_addr_t, size_t,
extern void dma_unmap_page(struct device *, dma_addr_t, size_t,
		enum dma_data_direction);
		enum dma_data_direction);


/*
/*
@@ -352,7 +354,6 @@ static inline void dma_unmap_single(struct device *dev, dma_addr_t handle,
{
{
	/* nothing to do */
	/* nothing to do */
}
}
#endif /* CONFIG_DMABOUNCE */


/**
/**
 * dma_unmap_page - unmap a buffer previously mapped through dma_map_page()
 * dma_unmap_page - unmap a buffer previously mapped through dma_map_page()
@@ -371,8 +372,9 @@ static inline void dma_unmap_single(struct device *dev, dma_addr_t handle,
static inline void dma_unmap_page(struct device *dev, dma_addr_t handle,
static inline void dma_unmap_page(struct device *dev, dma_addr_t handle,
		size_t size, enum dma_data_direction dir)
		size_t size, enum dma_data_direction dir)
{
{
	dma_unmap_single(dev, handle, size, dir);
	/* nothing to do */
}
}
#endif /* CONFIG_DMABOUNCE */


/**
/**
 * dma_sync_single_range_for_cpu
 * dma_sync_single_range_for_cpu
+8 −6
Original line number Original line Diff line number Diff line
@@ -136,6 +136,12 @@
#define	__phys_to_pfn(paddr)	((paddr) >> PAGE_SHIFT)
#define	__phys_to_pfn(paddr)	((paddr) >> PAGE_SHIFT)
#define	__pfn_to_phys(pfn)	((pfn) << PAGE_SHIFT)
#define	__pfn_to_phys(pfn)	((pfn) << PAGE_SHIFT)


/*
 * Convert a page to/from a physical address
 */
#define page_to_phys(page)	(__pfn_to_phys(page_to_pfn(page)))
#define phys_to_page(phys)	(pfn_to_page(__phys_to_pfn(phys)))

#ifndef __ASSEMBLY__
#ifndef __ASSEMBLY__


/*
/*
@@ -196,7 +202,8 @@ static inline void *phys_to_virt(unsigned long x)
#ifndef __virt_to_bus
#ifndef __virt_to_bus
#define __virt_to_bus	__virt_to_phys
#define __virt_to_bus	__virt_to_phys
#define __bus_to_virt	__phys_to_virt
#define __bus_to_virt	__phys_to_virt
#define __pfn_to_bus(x)	((x) << PAGE_SHIFT)
#define __pfn_to_bus(x)	__pfn_to_phys(x)
#define __bus_to_pfn(x)	__phys_to_pfn(x)
#endif
#endif


static inline __deprecated unsigned long virt_to_bus(void *x)
static inline __deprecated unsigned long virt_to_bus(void *x)
@@ -294,11 +301,6 @@ static inline __deprecated void *bus_to_virt(unsigned long x)


#endif /* !CONFIG_DISCONTIGMEM */
#endif /* !CONFIG_DISCONTIGMEM */


/*
 * For BIO.  "will die".  Kill me when bio_to_phys() and bvec_to_phys() die.
 */
#define page_to_phys(page)	(page_to_pfn(page) << PAGE_SHIFT)

/*
/*
 * Optional coherency support.  Currently used only by selected
 * Optional coherency support.  Currently used only by selected
 * Intel XSC3-based systems.
 * Intel XSC3-based systems.
+2 −0
Original line number Original line Diff line number Diff line
@@ -64,6 +64,8 @@ static inline unsigned long __lbus_to_virt(dma_addr_t x)
		(dma_addr_t)page_to_phys(page);				\
		(dma_addr_t)page_to_phys(page);				\
	})
	})


#define __arch_dma_to_page(dev, addr)	phys_to_page(addr)

#endif /* CONFIG_ARCH_IOP13XX */
#endif /* CONFIG_ARCH_IOP13XX */
#endif /* !ASSEMBLY */
#endif /* !ASSEMBLY */


+7 −0
Original line number Original line Diff line number Diff line
@@ -41,6 +41,13 @@ extern struct bus_type platform_bus_type;
		__dma = __dma - PHYS_OFFSET + KS8695_PCIMEM_PA; \
		__dma = __dma - PHYS_OFFSET + KS8695_PCIMEM_PA; \
	   __dma; })
	   __dma; })


#define __arch_dma_to_page(dev, x)	\
	({ dma_addr_t __dma = x;				\
	   if (!is_lbus_device(dev))				\
		__dma += PHYS_OFFSET - KS8695_PCIMEM_PA;	\
	   phys_to_page(__dma);					\
	})

#endif
#endif


#endif
#endif
Loading