Commit abe420bf authored by Joerg Roedel's avatar Joerg Roedel Committed by Michael S. Tsirkin

swiotlb: Introduce swiotlb_max_mapping_size()

The function returns the maximum size that can be remapped
by the SWIOTLB implementation. This function will be later
exposed to users through the DMA-API.

Cc: stable@vger.kernel.org
Reviewed-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 1c163f4c
...@@ -76,6 +76,7 @@ bool swiotlb_map(struct device *dev, phys_addr_t *phys, dma_addr_t *dma_addr, ...@@ -76,6 +76,7 @@ bool swiotlb_map(struct device *dev, phys_addr_t *phys, dma_addr_t *dma_addr,
size_t size, enum dma_data_direction dir, unsigned long attrs); size_t size, enum dma_data_direction dir, unsigned long attrs);
void __init swiotlb_exit(void); void __init swiotlb_exit(void);
unsigned int swiotlb_max_segment(void); unsigned int swiotlb_max_segment(void);
size_t swiotlb_max_mapping_size(struct device *dev);
#else #else
#define swiotlb_force SWIOTLB_NO_FORCE #define swiotlb_force SWIOTLB_NO_FORCE
static inline bool is_swiotlb_buffer(phys_addr_t paddr) static inline bool is_swiotlb_buffer(phys_addr_t paddr)
...@@ -95,6 +96,10 @@ static inline unsigned int swiotlb_max_segment(void) ...@@ -95,6 +96,10 @@ static inline unsigned int swiotlb_max_segment(void)
{ {
return 0; return 0;
} }
static inline size_t swiotlb_max_mapping_size(struct device *dev)
{
return SIZE_MAX;
}
#endif /* CONFIG_SWIOTLB */ #endif /* CONFIG_SWIOTLB */
extern void swiotlb_print_info(void); extern void swiotlb_print_info(void);
......
...@@ -662,3 +662,8 @@ swiotlb_dma_supported(struct device *hwdev, u64 mask) ...@@ -662,3 +662,8 @@ swiotlb_dma_supported(struct device *hwdev, u64 mask)
{ {
return __phys_to_dma(hwdev, io_tlb_end - 1) <= mask; return __phys_to_dma(hwdev, io_tlb_end - 1) <= mask;
} }
size_t swiotlb_max_mapping_size(struct device *dev)
{
return ((size_t)1 << IO_TLB_SHIFT) * IO_TLB_SEGSIZE;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment