hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/include/linux/swiotlb.h
....@@ -5,6 +5,7 @@
55 #include <linux/dma-direction.h>
66 #include <linux/init.h>
77 #include <linux/types.h>
8
+#include <linux/limits.h>
89
910 struct device;
1011 struct page;
....@@ -15,8 +16,6 @@
1516 SWIOTLB_FORCE, /* swiotlb=force */
1617 SWIOTLB_NO_FORCE, /* swiotlb=noforce */
1718 };
18
-
19
-extern enum swiotlb_force swiotlb_force;
2019
2120 /*
2221 * Maximum allowable number of contiguous slabs to map,
....@@ -30,12 +29,14 @@
3029 * controllable.
3130 */
3231 #define IO_TLB_SHIFT 11
32
+#define IO_TLB_SIZE (1 << IO_TLB_SHIFT)
3333
3434 extern void swiotlb_init(int verbose);
3535 int swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose);
3636 extern unsigned long swiotlb_nr_tbl(void);
3737 unsigned long swiotlb_size_or_default(void);
3838 extern int swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs);
39
+extern int swiotlb_late_init_with_default_size(size_t default_size);
3940 extern void __init swiotlb_update_mem_attributes(void);
4041
4142 /*
....@@ -46,18 +47,15 @@
4647 SYNC_FOR_DEVICE = 1,
4748 };
4849
49
-/* define the last possible byte of physical address space as a mapping error */
50
-#define SWIOTLB_MAP_ERROR (~(phys_addr_t)0x0)
51
-
52
-extern phys_addr_t swiotlb_tbl_map_single(struct device *hwdev,
53
- dma_addr_t tbl_dma_addr,
54
- phys_addr_t phys, size_t size,
55
- enum dma_data_direction dir,
56
- unsigned long attrs);
50
+phys_addr_t swiotlb_tbl_map_single(struct device *hwdev, phys_addr_t phys,
51
+ size_t mapping_size, size_t alloc_size,
52
+ enum dma_data_direction dir, unsigned long attrs);
5753
5854 extern void swiotlb_tbl_unmap_single(struct device *hwdev,
5955 phys_addr_t tlb_addr,
60
- size_t size, enum dma_data_direction dir,
56
+ size_t mapping_size,
57
+ size_t alloc_size,
58
+ enum dma_data_direction dir,
6159 unsigned long attrs);
6260
6361 extern void swiotlb_tbl_sync_single(struct device *hwdev,
....@@ -65,65 +63,47 @@
6563 size_t size, enum dma_data_direction dir,
6664 enum dma_sync_target target);
6765
68
-/* Accessory functions. */
69
-
70
-void *swiotlb_alloc(struct device *hwdev, size_t size, dma_addr_t *dma_handle,
71
- gfp_t flags, unsigned long attrs);
72
-void swiotlb_free(struct device *dev, size_t size, void *vaddr,
73
- dma_addr_t dma_addr, unsigned long attrs);
74
-
75
-extern dma_addr_t swiotlb_map_page(struct device *dev, struct page *page,
76
- unsigned long offset, size_t size,
77
- enum dma_data_direction dir,
78
- unsigned long attrs);
79
-extern void swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr,
80
- size_t size, enum dma_data_direction dir,
81
- unsigned long attrs);
82
-
83
-extern int
84
-swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems,
85
- enum dma_data_direction dir,
86
- unsigned long attrs);
87
-
88
-extern void
89
-swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl,
90
- int nelems, enum dma_data_direction dir,
91
- unsigned long attrs);
92
-
93
-extern void
94
-swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
95
- size_t size, enum dma_data_direction dir);
96
-
97
-extern void
98
-swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
99
- int nelems, enum dma_data_direction dir);
100
-
101
-extern void
102
-swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr,
103
- size_t size, enum dma_data_direction dir);
104
-
105
-extern void
106
-swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
107
- int nelems, enum dma_data_direction dir);
108
-
109
-extern int
110
-swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr);
111
-
112
-extern int
113
-swiotlb_dma_supported(struct device *hwdev, u64 mask);
66
+dma_addr_t swiotlb_map(struct device *dev, phys_addr_t phys,
67
+ size_t size, enum dma_data_direction dir, unsigned long attrs);
11468
11569 #ifdef CONFIG_SWIOTLB
116
-extern void __init swiotlb_exit(void);
70
+extern enum swiotlb_force swiotlb_force;
71
+extern phys_addr_t io_tlb_start, io_tlb_end;
72
+
73
+static inline bool is_swiotlb_buffer(phys_addr_t paddr)
74
+{
75
+ return paddr >= io_tlb_start && paddr < io_tlb_end;
76
+}
77
+
78
+void __init swiotlb_exit(void);
11779 unsigned int swiotlb_max_segment(void);
80
+size_t swiotlb_max_mapping_size(struct device *dev);
81
+bool is_swiotlb_active(void);
11882 #else
119
-static inline void swiotlb_exit(void) { }
120
-static inline unsigned int swiotlb_max_segment(void) { return 0; }
121
-#endif
83
+#define swiotlb_force SWIOTLB_NO_FORCE
84
+static inline bool is_swiotlb_buffer(phys_addr_t paddr)
85
+{
86
+ return false;
87
+}
88
+static inline void swiotlb_exit(void)
89
+{
90
+}
91
+static inline unsigned int swiotlb_max_segment(void)
92
+{
93
+ return 0;
94
+}
95
+static inline size_t swiotlb_max_mapping_size(struct device *dev)
96
+{
97
+ return SIZE_MAX;
98
+}
99
+
100
+static inline bool is_swiotlb_active(void)
101
+{
102
+ return false;
103
+}
104
+#endif /* CONFIG_SWIOTLB */
122105
123106 extern void swiotlb_print_info(void);
124
-extern int is_swiotlb_buffer(phys_addr_t paddr);
125107 extern void swiotlb_set_max_segment(unsigned int);
126
-
127
-extern const struct dma_map_ops swiotlb_dma_ops;
128108
129109 #endif /* __LINUX_SWIOTLB_H */