mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 16:54:20 +08:00
0b9afede3d
Machine vector selection has always been a bit of a hack given how early in system boot it needs to be done. Services like ACPI namespace are not available and there are non-trivial problems to moving them to early boot. However, there's no reason we can't change to a different machvec later in boot when the services we need are available. By adding a entry point for later initialization of the swiotlb, we can add an error path for the hpzx1 machevec initialization and fall back to the DIG machine vector if IOMMU hardware isn't found in the system. Since ia64 uses 4GB for zone DMA (no ISA support), it's trivial to allocate a contiguous range from the slab for bounce buffer usage. Signed-off-by: Alex Williamson <alex.williamson@hp.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
43 lines
1.8 KiB
C
43 lines
1.8 KiB
C
#ifndef _ASM_IA64_MACHVEC_HPZX1_SWIOTLB_h
|
|
#define _ASM_IA64_MACHVEC_HPZX1_SWIOTLB_h
|
|
|
|
extern ia64_mv_setup_t dig_setup;
|
|
extern ia64_mv_dma_alloc_coherent hwsw_alloc_coherent;
|
|
extern ia64_mv_dma_free_coherent hwsw_free_coherent;
|
|
extern ia64_mv_dma_map_single hwsw_map_single;
|
|
extern ia64_mv_dma_unmap_single hwsw_unmap_single;
|
|
extern ia64_mv_dma_map_sg hwsw_map_sg;
|
|
extern ia64_mv_dma_unmap_sg hwsw_unmap_sg;
|
|
extern ia64_mv_dma_supported hwsw_dma_supported;
|
|
extern ia64_mv_dma_mapping_error hwsw_dma_mapping_error;
|
|
extern ia64_mv_dma_sync_single_for_cpu hwsw_sync_single_for_cpu;
|
|
extern ia64_mv_dma_sync_sg_for_cpu hwsw_sync_sg_for_cpu;
|
|
extern ia64_mv_dma_sync_single_for_device hwsw_sync_single_for_device;
|
|
extern ia64_mv_dma_sync_sg_for_device hwsw_sync_sg_for_device;
|
|
|
|
/*
|
|
* This stuff has dual use!
|
|
*
|
|
* For a generic kernel, the macros are used to initialize the
|
|
* platform's machvec structure. When compiling a non-generic kernel,
|
|
* the macros are used directly.
|
|
*/
|
|
#define platform_name "hpzx1_swiotlb"
|
|
|
|
#define platform_setup dig_setup
|
|
#define platform_dma_init machvec_noop
|
|
#define platform_dma_alloc_coherent hwsw_alloc_coherent
|
|
#define platform_dma_free_coherent hwsw_free_coherent
|
|
#define platform_dma_map_single hwsw_map_single
|
|
#define platform_dma_unmap_single hwsw_unmap_single
|
|
#define platform_dma_map_sg hwsw_map_sg
|
|
#define platform_dma_unmap_sg hwsw_unmap_sg
|
|
#define platform_dma_supported hwsw_dma_supported
|
|
#define platform_dma_mapping_error hwsw_dma_mapping_error
|
|
#define platform_dma_sync_single_for_cpu hwsw_sync_single_for_cpu
|
|
#define platform_dma_sync_sg_for_cpu hwsw_sync_sg_for_cpu
|
|
#define platform_dma_sync_single_for_device hwsw_sync_single_for_device
|
|
#define platform_dma_sync_sg_for_device hwsw_sync_sg_for_device
|
|
|
|
#endif /* _ASM_IA64_MACHVEC_HPZX1_SWIOTLB_h */
|