Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
blackfin
kernel
sys_bfin.c
Go to the documentation of this file.
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
#include <linux/export.h>
45
unsigned
long
get_fb_unmapped_area
(
struct
file
*filp,
unsigned
long
orig_addr,
46
unsigned
long
len,
unsigned
long
pgoff,
unsigned
long
flags
)
47
{
48
struct
fb_info
*
info
= filp->
private_data
;
49
return
(
unsigned
long
)info->
screen_base
;
50
}
51
EXPORT_SYMBOL
(
get_fb_unmapped_area
);
52
#endif
53
54
/* Needed for legacy userspace atomic emulation */
55
static
DEFINE_SPINLOCK
(bfin_spinlock_lock);
56
57
#ifdef CONFIG_SYS_BFIN_SPINLOCK_L1
58
__attribute__
((l1_text))
59
#endif
60
asmlinkage
int
sys_bfin_spinlock
(
int
*
p
)
61
{
62
int
ret
,
tmp
= 0;
63
64
spin_lock(&bfin_spinlock_lock);
/* This would also hold kernel preemption. */
65
ret =
get_user
(tmp, p);
66
if
(
likely
(ret == 0)) {
67
if
(
unlikely
(tmp))
68
ret = 1;
69
else
70
put_user
(1, p);
71
}
72
spin_unlock(&bfin_spinlock_lock);
73
74
return
ret
;
75
}
76
77
SYSCALL_DEFINE3
(cacheflush,
unsigned
long
,
addr
,
unsigned
long
, len,
int
,
op
)
78
{
79
if
(
is_user_addr_valid
(
current
,
addr
, len) != 0)
80
return
-
EINVAL
;
81
82
if
(
op
&
DCACHE
)
83
blackfin_dcache_flush_range
(
addr
,
addr
+ len);
84
if
(
op
&
ICACHE
)
85
blackfin_icache_flush_range
(
addr
,
addr
+ len);
86
87
return
0;
88
}
Generated on Thu Jan 10 2013 13:04:24 for Linux Kernel by
1.8.2