Root/
1 | /* |
2 | * contains various random system calls that have a non-standard |
3 | * calling sequence on the Linux/Blackfin platform. |
4 | * |
5 | * Copyright 2004-2009 Analog Devices Inc. |
6 | * |
7 | * Licensed under the GPL-2 or later |
8 | */ |
9 | |
10 | #include <linux/spinlock.h> |
11 | #include <linux/sem.h> |
12 | #include <linux/msg.h> |
13 | #include <linux/shm.h> |
14 | #include <linux/syscalls.h> |
15 | #include <linux/mman.h> |
16 | #include <linux/file.h> |
17 | #include <linux/fs.h> |
18 | #include <linux/uaccess.h> |
19 | #include <linux/ipc.h> |
20 | #include <linux/unistd.h> |
21 | |
22 | #include <asm/cacheflush.h> |
23 | #include <asm/dma.h> |
24 | #include <asm/cachectl.h> |
25 | #include <asm/ptrace.h> |
26 | |
27 | asmlinkage void *sys_sram_alloc(size_t size, unsigned long flags) |
28 | { |
29 | return sram_alloc_with_lsl(size, flags); |
30 | } |
31 | |
32 | asmlinkage int sys_sram_free(const void *addr) |
33 | { |
34 | return sram_free_with_lsl(addr); |
35 | } |
36 | |
37 | asmlinkage void *sys_dma_memcpy(void *dest, const void *src, size_t len) |
38 | { |
39 | return safe_dma_memcpy(dest, src, len); |
40 | } |
41 | |
42 | #if defined(CONFIG_FB) || defined(CONFIG_FB_MODULE) |
43 | #include <linux/fb.h> |
44 | unsigned long get_fb_unmapped_area(struct file *filp, unsigned long orig_addr, |
45 | unsigned long len, unsigned long pgoff, unsigned long flags) |
46 | { |
47 | struct fb_info *info = filp->private_data; |
48 | return (unsigned long)info->screen_base; |
49 | } |
50 | EXPORT_SYMBOL(get_fb_unmapped_area); |
51 | #endif |
52 | |
53 | /* Needed for legacy userspace atomic emulation */ |
54 | static DEFINE_SPINLOCK(bfin_spinlock_lock); |
55 | |
56 | #ifdef CONFIG_SYS_BFIN_SPINLOCK_L1 |
57 | __attribute__((l1_text)) |
58 | #endif |
59 | asmlinkage int sys_bfin_spinlock(int *p) |
60 | { |
61 | int ret, tmp = 0; |
62 | |
63 | spin_lock(&bfin_spinlock_lock); /* This would also hold kernel preemption. */ |
64 | ret = get_user(tmp, p); |
65 | if (likely(ret == 0)) { |
66 | if (unlikely(tmp)) |
67 | ret = 1; |
68 | else |
69 | put_user(1, p); |
70 | } |
71 | spin_unlock(&bfin_spinlock_lock); |
72 | |
73 | return ret; |
74 | } |
75 | |
76 | SYSCALL_DEFINE3(cacheflush, unsigned long, addr, unsigned long, len, int, op) |
77 | { |
78 | if (is_user_addr_valid(current, addr, len) != 0) |
79 | return -EINVAL; |
80 | |
81 | if (op & DCACHE) |
82 | blackfin_dcache_flush_range(addr, addr + len); |
83 | if (op & ICACHE) |
84 | blackfin_icache_flush_range(addr, addr + len); |
85 | |
86 | return 0; |
87 | } |
88 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9