diff options
-rw-r--r-- | include/linux/swiotlb.h | 1 | ||||
-rw-r--r-- | lib/swiotlb.c | 48 |
2 files changed, 31 insertions, 18 deletions
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h index 81a4e213c6cf..b406261d8887 100644 --- a/include/linux/swiotlb.h +++ b/include/linux/swiotlb.h | |||
@@ -23,6 +23,7 @@ extern int swiotlb_force; | |||
23 | #define IO_TLB_SHIFT 11 | 23 | #define IO_TLB_SHIFT 11 |
24 | 24 | ||
25 | extern void swiotlb_init(int verbose); | 25 | extern void swiotlb_init(int verbose); |
26 | extern void swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose); | ||
26 | 27 | ||
27 | extern void | 28 | extern void |
28 | *swiotlb_alloc_coherent(struct device *hwdev, size_t size, | 29 | *swiotlb_alloc_coherent(struct device *hwdev, size_t size, |
diff --git a/lib/swiotlb.c b/lib/swiotlb.c index 783aff00024c..ec61e1507d0a 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c | |||
@@ -140,28 +140,14 @@ void swiotlb_print_info(void) | |||
140 | (unsigned long long)pend); | 140 | (unsigned long long)pend); |
141 | } | 141 | } |
142 | 142 | ||
143 | /* | 143 | void __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose) |
144 | * Statically reserve bounce buffer space and initialize bounce buffer data | ||
145 | * structures for the software IO TLB used to implement the DMA API. | ||
146 | */ | ||
147 | void __init | ||
148 | swiotlb_init_with_default_size(size_t default_size, int verbose) | ||
149 | { | 144 | { |
150 | unsigned long i, bytes; | 145 | unsigned long i, bytes; |
151 | 146 | ||
152 | if (!io_tlb_nslabs) { | 147 | bytes = nslabs << IO_TLB_SHIFT; |
153 | io_tlb_nslabs = (default_size >> IO_TLB_SHIFT); | ||
154 | io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE); | ||
155 | } | ||
156 | 148 | ||
157 | bytes = io_tlb_nslabs << IO_TLB_SHIFT; | 149 | io_tlb_nslabs = nslabs; |
158 | 150 | io_tlb_start = tlb; | |
159 | /* | ||
160 | * Get IO TLB memory from the low pages | ||
161 | */ | ||
162 | io_tlb_start = alloc_bootmem_low_pages(bytes); | ||
163 | if (!io_tlb_start) | ||
164 | panic("Cannot allocate SWIOTLB buffer"); | ||
165 | io_tlb_end = io_tlb_start + bytes; | 151 | io_tlb_end = io_tlb_start + bytes; |
166 | 152 | ||
167 | /* | 153 | /* |
@@ -185,6 +171,32 @@ swiotlb_init_with_default_size(size_t default_size, int verbose) | |||
185 | swiotlb_print_info(); | 171 | swiotlb_print_info(); |
186 | } | 172 | } |
187 | 173 | ||
174 | /* | ||
175 | * Statically reserve bounce buffer space and initialize bounce buffer data | ||
176 | * structures for the software IO TLB used to implement the DMA API. | ||
177 | */ | ||
178 | void __init | ||
179 | swiotlb_init_with_default_size(size_t default_size, int verbose) | ||
180 | { | ||
181 | unsigned long bytes; | ||
182 | |||
183 | if (!io_tlb_nslabs) { | ||
184 | io_tlb_nslabs = (default_size >> IO_TLB_SHIFT); | ||
185 | io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE); | ||
186 | } | ||
187 | |||
188 | bytes = io_tlb_nslabs << IO_TLB_SHIFT; | ||
189 | |||
190 | /* | ||
191 | * Get IO TLB memory from the low pages | ||
192 | */ | ||
193 | io_tlb_start = alloc_bootmem_low_pages(bytes); | ||
194 | if (!io_tlb_start) | ||
195 | panic("Cannot allocate SWIOTLB buffer"); | ||
196 | |||
197 | swiotlb_init_with_tbl(io_tlb_start, io_tlb_nslabs, verbose); | ||
198 | } | ||
199 | |||
188 | void __init | 200 | void __init |
189 | swiotlb_init(int verbose) | 201 | swiotlb_init(int verbose) |
190 | { | 202 | { |