Rev 6296 | Rev 6935 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6296 | Rev 6660 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | #include |
1 | #include |
2 | #include |
2 | #include |
- | 3 | #include |
|
- | 4 | #include |
|
3 | #include |
5 | #include |
4 | #include |
6 | #include |
5 | #include "i915_drv.h" |
7 | #include "i915_drv.h" |
6 | #include "intel_drv.h" |
8 | #include "intel_drv.h" |
7 | #include |
9 | #include |
Line 173... | Line 175... | ||
173 | 175 | ||
174 | return check_bytes8(start, value, bytes % 8); |
176 | return check_bytes8(start, value, bytes % 8); |
Line 175... | Line -... | ||
175 | } |
- | |
176 | 177 | } |
|
177 | 178 | ||
178 | 179 | ||
179 | int dma_map_sg(struct device *dev, struct scatterlist *sglist, |
180 | int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, |
180 | int nelems, int dir) |
181 | enum dma_data_direction direction) |
Line 181... | Line 182... | ||
181 | { |
182 | { |
182 | struct scatterlist *s; |
183 | struct scatterlist *s; |
183 | int i; |
184 | int i; |
184 | 185 | ||
185 | for_each_sg(sglist, s, nelems, i) { |
186 | for_each_sg(sg, s, nents, i) { |
186 | s->dma_address = (dma_addr_t)sg_phys(s); |
187 | s->dma_address = (dma_addr_t)sg_phys(s); |
Line 187... | Line 188... | ||
187 | #ifdef CONFIG_NEED_SG_DMA_LENGTH |
188 | #ifdef CONFIG_NEED_SG_DMA_LENGTH |
188 | s->dma_length = s->length; |
189 | s->dma_length = s->length; |
Line -... | Line 190... | ||
- | 190 | #endif |
|
- | 191 | } |
|
- | 192 | ||
- | 193 | return nents; |
|
- | 194 | } |
|
Line 189... | Line 195... | ||
189 | #endif |
195 | |
190 | } |
196 | void |
191 | 197 | dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, |
|
Line 259... | Line 265... | ||
259 | memcpy(p, src, len); |
265 | memcpy(p, src, len); |
260 | return p; |
266 | return p; |
261 | } |
267 | } |
Line 262... | Line -... | ||
262 | - | ||
263 | - | ||
264 | #define KMAP_MAX 256 |
- | |
265 | - | ||
266 | static struct mutex kmap_mutex; |
- | |
267 | static struct page* kmap_table[KMAP_MAX]; |
- | |
268 | static int kmap_av; |
- | |
269 | static int kmap_first; |
- | |
270 | static void* kmap_base; |
- | |
271 | - | ||
272 | - | ||
273 | int kmap_init() |
- | |
274 | { |
- | |
275 | kmap_base = AllocKernelSpace(KMAP_MAX*4096); |
- | |
276 | if(kmap_base == NULL) |
- | |
277 | return -1; |
- | |
278 | - | ||
279 | kmap_av = KMAP_MAX; |
- | |
280 | MutexInit(&kmap_mutex); |
- | |
281 | return 0; |
- | |
282 | }; |
- | |
283 | - | ||
284 | void *kmap(struct page *page) |
- | |
285 | { |
- | |
286 | void *vaddr = NULL; |
- | |
287 | int i; |
- | |
288 | - | ||
289 | do |
- | |
290 | { |
- | |
291 | MutexLock(&kmap_mutex); |
- | |
292 | if(kmap_av != 0) |
- | |
293 | { |
- | |
294 | for(i = kmap_first; i < KMAP_MAX; i++) |
- | |
295 | { |
- | |
296 | if(kmap_table[i] == NULL) |
- | |
297 | { |
- | |
298 | kmap_av--; |
- | |
299 | kmap_first = i; |
- | |
300 | kmap_table[i] = page; |
- | |
301 | vaddr = kmap_base + (i<<12); |
- | |
302 | MapPage(vaddr,(addr_t)page,3); |
- | |
303 | break; |
- | |
304 | }; |
- | |
305 | }; |
- | |
306 | }; |
- | |
307 | MutexUnlock(&kmap_mutex); |
- | |
308 | }while(vaddr == NULL); |
- | |
309 | - | ||
310 | return vaddr; |
- | |
311 | }; |
- | |
312 | - | ||
313 | void *kmap_atomic(struct page *page) __attribute__ ((alias ("kmap"))); |
- | |
314 | - | ||
315 | void kunmap(struct page *page) |
- | |
316 | { |
- | |
317 | void *vaddr; |
- | |
318 | int i; |
- | |
319 | - | ||
320 | MutexLock(&kmap_mutex); |
- | |
321 | - | ||
322 | for(i = 0; i < KMAP_MAX; i++) |
- | |
323 | { |
- | |
324 | if(kmap_table[i] == page) |
- | |
325 | { |
- | |
326 | kmap_av++; |
- | |
327 | if(i < kmap_first) |
- | |
328 | kmap_first = i; |
- | |
329 | kmap_table[i] = NULL; |
- | |
330 | vaddr = kmap_base + (i<<12); |
- | |
331 | MapPage(vaddr,0,0); |
- | |
332 | break; |
- | |
333 | }; |
- | |
334 | }; |
- | |
335 | - | ||
336 | MutexUnlock(&kmap_mutex); |
- | |
337 | }; |
- | |
338 | - | ||
339 | void kunmap_atomic(void *vaddr) |
- | |
340 | { |
- | |
341 | int i; |
- | |
342 | - | ||
343 | MapPage(vaddr,0,0); |
- | |
344 | - | ||
345 | i = (vaddr - kmap_base) >> 12; |
- | |
346 | - | ||
347 | MutexLock(&kmap_mutex); |
- | |
348 | - | ||
349 | kmap_av++; |
- | |
350 | if(i < kmap_first) |
- | |
351 | kmap_first = i; |
- | |
352 | kmap_table[i] = NULL; |
- | |
353 | - | ||
Line 354... | Line 268... | ||
354 | MutexUnlock(&kmap_mutex); |
268 | |
355 | } |
269 | |
356 | 270 | ||
357 | void msleep(unsigned int msecs) |
271 | void msleep(unsigned int msecs) |
Line 682... | Line 596... | ||
682 | 596 | ||
683 | return argc; |
597 | return argc; |
Line 684... | Line 598... | ||
684 | }; |
598 | }; |
685 | 599 | ||
686 | 600 | ||
687 | fb_get_options(const char *name, char **option) |
601 | int fb_get_options(const char *name, char **option) |
688 | { |
602 | { |