Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
60f63ed0
Commit
60f63ed0
authored
Jan 29, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk/linux-2.6-rmk
into home.osdl.org:/home/torvalds/v2.5/linux
parents
ae05f3fa
87eb058e
Changes
18
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
625 additions
and
727 deletions
+625
-727
arch/arm/configs/cerfcube_defconfig
arch/arm/configs/cerfcube_defconfig
+363
-390
arch/arm/kernel/asm-offsets.c
arch/arm/kernel/asm-offsets.c
+0
-1
arch/arm/kernel/entry-armv.S
arch/arm/kernel/entry-armv.S
+37
-55
arch/arm/kernel/process.c
arch/arm/kernel/process.c
+3
-4
arch/arm/kernel/ptrace.c
arch/arm/kernel/ptrace.c
+3
-2
arch/arm/lib/csumpartial.S
arch/arm/lib/csumpartial.S
+3
-3
arch/arm/lib/csumpartialcopygeneric.S
arch/arm/lib/csumpartialcopygeneric.S
+19
-19
arch/arm/lib/io-readsb.S
arch/arm/lib/io-readsb.S
+28
-28
arch/arm/lib/uaccess.S
arch/arm/lib/uaccess.S
+12
-12
arch/arm/mach-sa1100/cerf.c
arch/arm/mach-sa1100/cerf.c
+50
-28
arch/arm/mach-sa1100/generic.c
arch/arm/mach-sa1100/generic.c
+1
-0
drivers/mtd/maps/sa1100-flash.c
drivers/mtd/maps/sa1100-flash.c
+17
-33
drivers/pcmcia/sa1100_cerf.c
drivers/pcmcia/sa1100_cerf.c
+17
-28
include/asm-arm/arch-sa1100/cerf.h
include/asm-arm/arch-sa1100/cerf.h
+20
-101
include/asm-arm/assembler.h
include/asm-arm/assembler.h
+16
-2
include/asm-arm/bitops.h
include/asm-arm/bitops.h
+19
-19
include/asm-arm/cacheflush.h
include/asm-arm/cacheflush.h
+13
-0
include/asm-arm/thread_info.h
include/asm-arm/thread_info.h
+4
-2
No files found.
arch/arm/configs/cerfcube_defconfig
View file @
60f63ed0
This diff is collapsed.
Click to expand it.
arch/arm/kernel/asm-offsets.c
View file @
60f63ed0
...
@@ -45,7 +45,6 @@
...
@@ -45,7 +45,6 @@
int
main
(
void
)
int
main
(
void
)
{
{
DEFINE
(
TSK_USED_MATH
,
offsetof
(
struct
task_struct
,
used_math
));
DEFINE
(
TSK_ACTIVE_MM
,
offsetof
(
struct
task_struct
,
active_mm
));
DEFINE
(
TSK_ACTIVE_MM
,
offsetof
(
struct
task_struct
,
active_mm
));
BLANK
();
BLANK
();
DEFINE
(
VMA_VM_MM
,
offsetof
(
struct
vm_area_struct
,
vm_mm
));
DEFINE
(
VMA_VM_MM
,
offsetof
(
struct
vm_area_struct
,
vm_mm
));
...
...
arch/arm/kernel/entry-armv.S
View file @
60f63ed0
...
@@ -673,48 +673,6 @@ __und_invalid: sub sp, sp, #S_FRAME_SIZE
...
@@ -673,48 +673,6 @@ __und_invalid: sub sp, sp, #S_FRAME_SIZE
and
r2
,
r6
,
#
31
@
int
mode
and
r2
,
r6
,
#
31
@
int
mode
b
bad_mode
b
bad_mode
#if 1 /* defined CONFIG_FPE_NWFPE || defined CONFIG_FPE_FASTFPE */
/
*
The
FPE
is
always
present
*/
.
equ
fpe_not_present
,
fpundefinstr
#else
wfs_mask_data
:
.
word
0x0e200110
@
WFS
/
RFS
.
word
0x0fef0fff
.
word
0x0d000100
@
LDF
[
sp
]/
STF
[
sp
]
.
word
0x0d000100
@
LDF
[
fp
]/
STF
[
fp
]
.
word
0x0f000f00
/*
We
get
here
if
an
undefined
instruction
happens
and
the
floating
*
point
emulator
is
not
present
.
If
the
offending
instruction
was
*
a
WFS
,
we
just
perform
a
normal
return
as
if
we
had
emulated
the
*
operation
.
This
is
a
hack
to
allow
some
basic
userland
binaries
*
to
run
so
that
the
emulator
module
proper
can
be
loaded
.
--
philb
*/
fpe_not_present
:
adr
r10
,
wfs_mask_data
ldmia
r10
,
{
r4
,
r5
,
r6
,
r7
,
r8
}
ldr
r10
,
[
sp
,
#
S_PC
]
@
Load
PC
sub
r10
,
r10
,
#
4
mask_pc
r10
,
r10
ldrt
r10
,
[
r10
]
@
get
instruction
and
r5
,
r10
,
r5
teq
r5
,
r4
@
Is
it
WFS
?
moveq
pc
,
r9
and
r5
,
r10
,
r8
teq
r5
,
r6
@
Is
it
LDF
/
STF
on
sp
or
fp
?
teqne
r5
,
r7
movne
pc
,
lr
tst
r10
,
#
0x00200000
@
Does
it
have
WB
moveq
pc
,
r9
and
r4
,
r10
,
#
255
@
get
offset
and
r6
,
r10
,
#
0x000f0000
tst
r10
,
#
0x00800000
@
+/-
ldr
r5
,
[
sp
,
r6
,
lsr
#
14
]
@
Load
reg
rsbeq
r4
,
r4
,
#
0
add
r5
,
r5
,
r4
,
lsl
#
2
str
r5
,
[
sp
,
r6
,
lsr
#
14
]
@
Save
reg
mov
pc
,
r9
#endif
/*
/*
*
SVC
mode
handlers
*
SVC
mode
handlers
*/
*/
...
@@ -963,23 +921,46 @@ __und_usr: sub sp, sp, #S_FRAME_SIZE @ Allocate frame size in one go
...
@@ -963,23 +921,46 @@ __und_usr: sub sp, sp, #S_FRAME_SIZE @ Allocate frame size in one go
*
co
-
processor
instructions
.
However
,
we
have
to
watch
out
*
co
-
processor
instructions
.
However
,
we
have
to
watch
out
*
for
the
ARM6
/
ARM7
SWI
bug
.
*
for
the
ARM6
/
ARM7
SWI
bug
.
*
*
*
Emulators
may
wish
to
make
use
of
the
instruction
value
we
*
Emulators
may
wish
to
make
use
of
the
following
registers
:
*
prepared
for
them
in
r0
.
*
r0
-
instruction
opcode
.
*
r10
-
this
threads
thread_info
structure
.
*/
*/
call_fpe
:
enable_irq
r10
@
Enable
interrupts
call_fpe
:
enable_irq
r10
@
Enable
interrupts
tst
r0
,
#
0x08000000
@
only
CDP
/
CPRT
/
LDC
/
STC
have
bit
27
tst
r0
,
#
0x08000000
@
only
CDP
/
CPRT
/
LDC
/
STC
have
bit
27
#if defined(CONFIG_CPU_ARM610) || defined(CONFIG_CPU_ARM710)
#if defined(CONFIG_CPU_ARM610) || defined(CONFIG_CPU_ARM710)
and
r
10
,
r0
,
#
0x0f000000
@
mask
out
op
-
code
bits
and
r
8
,
r0
,
#
0x0f000000
@
mask
out
op
-
code
bits
teqne
r
10
,
#
0x0f000000
@
SWI
(
ARM6
/
7
bug
)?
teqne
r
8
,
#
0x0f000000
@
SWI
(
ARM6
/
7
bug
)?
#endif
#endif
moveq
pc
,
lr
moveq
pc
,
lr
do_fpe
:
get_thread_info
r10
@
get
current
thread
get_thread_info
r10
@
get
current
thread
ldr
r4
,
[
r10
,
#
TI_TASK
]
@
get
current
task
and
r8
,
r0
,
#
0x00000f00
@
mask
out
CP
number
mov
r8
,
#
1
mov
r7
,
#
1
strb
r8
,
[
r4
,
#
TSK_USED_MATH
]
@
set
current
->
used_math
add
r6
,
r10
,
#
TI_USED_CP
ldr
r4
,
.
LCfp
strb
r7
,
[
r6
,
r8
,
lsr
#
8
]
@
set
appropriate
used_cp
[]
add
pc
,
pc
,
r8
,
lsr
#
6
mov
r0
,
r0
mov
pc
,
lr
@
CP
#
0
b
do_fpe
@
CP
#
1
(
FPE
)
b
do_fpe
@
CP
#
2
(
FPE
)
mov
pc
,
lr
@
CP
#
3
mov
pc
,
lr
@
CP
#
4
mov
pc
,
lr
@
CP
#
5
mov
pc
,
lr
@
CP
#
6
mov
pc
,
lr
@
CP
#
7
mov
pc
,
lr
@
CP
#
8
mov
pc
,
lr
@
CP
#
9
mov
pc
,
lr
@
CP
#
10
(
VFP
)
mov
pc
,
lr
@
CP
#
11
(
VFP
)
mov
pc
,
lr
@
CP
#
12
mov
pc
,
lr
@
CP
#
13
mov
pc
,
lr
@
CP
#
14
(
Debug
)
mov
pc
,
lr
@
CP
#
15
(
Control
)
do_fpe
:
ldr
r4
,
.
LCfp
add
r10
,
r10
,
#
TI_FPSTATE
@
r10
=
workspace
add
r10
,
r10
,
#
TI_FPSTATE
@
r10
=
workspace
ldr
pc
,
[
r4
]
@
Call
FP
module
USR
entry
point
ldr
pc
,
[
r4
]
@
Call
FP
module
USR
entry
point
/*
/*
*
The
FP
module
is
called
with
these
registers
set
:
*
The
FP
module
is
called
with
these
registers
set
:
*
r0
=
instruction
*
r0
=
instruction
...
@@ -989,6 +970,11 @@ do_fpe: get_thread_info r10 @ get current thread
...
@@ -989,6 +970,11 @@ do_fpe: get_thread_info r10 @ get current thread
*
lr
=
unrecognised
FP
instruction
return
address
*
lr
=
unrecognised
FP
instruction
return
address
*/
*/
.
data
ENTRY
(
fp_enter
)
.
word
fpundefinstr
.
text
fpundefinstr
:
mov
r0
,
sp
fpundefinstr
:
mov
r0
,
sp
adrsvc
al
,
lr
,
ret_from_exception
adrsvc
al
,
lr
,
ret_from_exception
b
do_undefinstr
b
do_undefinstr
...
@@ -1016,10 +1002,6 @@ ENTRY(ret_from_exception)
...
@@ -1016,10 +1002,6 @@ ENTRY(ret_from_exception)
mov
why
,
#
0
mov
why
,
#
0
b
ret_to_user
b
ret_to_user
.
data
ENTRY
(
fp_enter
)
.
word
fpe_not_present
.
text
/*
/*
*
Register
switch
for
ARMv3
and
ARMv4
processors
*
Register
switch
for
ARMv3
and
ARMv4
processors
*
r0
=
previous
thread_info
,
r1
=
next
thread_info
*
r0
=
previous
thread_info
,
r1
=
next
thread_info
...
...
arch/arm/kernel/process.c
View file @
60f63ed0
...
@@ -307,8 +307,7 @@ void flush_thread(void)
...
@@ -307,8 +307,7 @@ void flush_thread(void)
struct
thread_info
*
thread
=
current_thread_info
();
struct
thread_info
*
thread
=
current_thread_info
();
struct
task_struct
*
tsk
=
current
;
struct
task_struct
*
tsk
=
current
;
tsk
->
used_math
=
0
;
memset
(
thread
->
used_cp
,
0
,
sizeof
(
thread
->
used_cp
));
memset
(
&
tsk
->
thread
.
debug
,
0
,
sizeof
(
struct
debug_info
));
memset
(
&
tsk
->
thread
.
debug
,
0
,
sizeof
(
struct
debug_info
));
fp_init
(
&
thread
->
fpstate
);
fp_init
(
&
thread
->
fpstate
);
}
}
...
@@ -344,12 +343,12 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long stack_start,
...
@@ -344,12 +343,12 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long stack_start,
int
dump_fpu
(
struct
pt_regs
*
regs
,
struct
user_fp
*
fp
)
int
dump_fpu
(
struct
pt_regs
*
regs
,
struct
user_fp
*
fp
)
{
{
struct
thread_info
*
thread
=
current_thread_info
();
struct
thread_info
*
thread
=
current_thread_info
();
int
used_math
=
current
->
used_math
;
int
used_math
=
thread
->
used_cp
[
1
]
|
thread
->
used_cp
[
2
]
;
if
(
used_math
)
if
(
used_math
)
memcpy
(
fp
,
&
thread
->
fpstate
.
soft
,
sizeof
(
*
fp
));
memcpy
(
fp
,
&
thread
->
fpstate
.
soft
,
sizeof
(
*
fp
));
return
used_math
;
return
used_math
!=
0
;
}
}
/*
/*
...
...
arch/arm/kernel/ptrace.c
View file @
60f63ed0
...
@@ -602,8 +602,9 @@ static int ptrace_getfpregs(struct task_struct *tsk, void *ufp)
...
@@ -602,8 +602,9 @@ static int ptrace_getfpregs(struct task_struct *tsk, void *ufp)
*/
*/
static
int
ptrace_setfpregs
(
struct
task_struct
*
tsk
,
void
*
ufp
)
static
int
ptrace_setfpregs
(
struct
task_struct
*
tsk
,
void
*
ufp
)
{
{
tsk
->
used_math
=
1
;
struct
thread_info
*
thread
=
tsk
->
thread_info
;
return
copy_from_user
(
&
tsk
->
thread_info
->
fpstate
,
ufp
,
thread
->
used_cp
[
1
]
=
thread
->
used_cp
[
2
]
=
1
;
return
copy_from_user
(
&
thread
->
fpstate
,
ufp
,
sizeof
(
struct
user_fp
))
?
-
EFAULT
:
0
;
sizeof
(
struct
user_fp
))
?
-
EFAULT
:
0
;
}
}
...
...
arch/arm/lib/csumpartial.S
View file @
60f63ed0
...
@@ -41,7 +41,7 @@ td3 .req lr
...
@@ -41,7 +41,7 @@ td3 .req lr
tst
buf
,
#
1
@
odd
address
?
tst
buf
,
#
1
@
odd
address
?
ldrneb
td0
,
[
buf
],
#
1
ldrneb
td0
,
[
buf
],
#
1
subne
len
,
len
,
#
1
subne
len
,
len
,
#
1
adcnes
sum
,
sum
,
td0
,
lsl
#
byte
(
1
)
adcnes
sum
,
sum
,
td0
,
put_byte_1
.
less4
:
tst
len
,
#
6
.
less4
:
tst
len
,
#
6
beq
.
less8_byte
beq
.
less8_byte
...
@@ -68,7 +68,7 @@ td3 .req lr
...
@@ -68,7 +68,7 @@ td3 .req lr
.
less8_byte
:
tst
len
,
#
1
@
odd
number
of
bytes
.
less8_byte
:
tst
len
,
#
1
@
odd
number
of
bytes
ldrneb
td0
,
[
buf
],
#
1
@
include
last
byte
ldrneb
td0
,
[
buf
],
#
1
@
include
last
byte
adcnes
sum
,
sum
,
td0
,
lsl
#
byte
(
0
)
@
update
checksum
adcnes
sum
,
sum
,
td0
,
put_byte_0
@
update
checksum
.
done
:
adc
r0
,
sum
,
#
0
@
collect
up
the
last
carry
.
done
:
adc
r0
,
sum
,
#
0
@
collect
up
the
last
carry
ldr
td0
,
[
sp
],
#
4
ldr
td0
,
[
sp
],
#
4
...
@@ -80,7 +80,7 @@ td3 .req lr
...
@@ -80,7 +80,7 @@ td3 .req lr
.
not_aligned
:
tst
buf
,
#
1
@
odd
address
.
not_aligned
:
tst
buf
,
#
1
@
odd
address
ldrneb
td0
,
[
buf
],
#
1
@
make
even
ldrneb
td0
,
[
buf
],
#
1
@
make
even
subne
len
,
len
,
#
1
subne
len
,
len
,
#
1
adcnes
sum
,
sum
,
td0
,
lsl
#
byte
(
1
)
@
update
checksum
adcnes
sum
,
sum
,
td0
,
put_byte_1
@
update
checksum
tst
buf
,
#
2
@
32
-
bit
aligned
?
tst
buf
,
#
2
@
32
-
bit
aligned
?
#if __LINUX_ARM_ARCH__ >= 4
#if __LINUX_ARM_ARCH__ >= 4
...
...
arch/arm/lib/csumpartialcopygeneric.S
View file @
60f63ed0
...
@@ -36,16 +36,16 @@ sum .req r3
...
@@ -36,16 +36,16 @@ sum .req r3
load1b
ip
load1b
ip
sub
len
,
len
,
#
1
sub
len
,
len
,
#
1
adcs
sum
,
sum
,
ip
,
lsl
#
byte
(
1
)
@
update
checksum
adcs
sum
,
sum
,
ip
,
put_byte_1
@
update
checksum
strb
ip
,
[
dst
],
#
1
strb
ip
,
[
dst
],
#
1
tst
dst
,
#
2
tst
dst
,
#
2
moveq
pc
,
lr
@
dst
is
now
32
bit
aligned
moveq
pc
,
lr
@
dst
is
now
32
bit
aligned
.
dst_16bit
:
load2b
r8
,
ip
.
dst_16bit
:
load2b
r8
,
ip
sub
len
,
len
,
#
2
sub
len
,
len
,
#
2
adcs
sum
,
sum
,
r8
,
lsl
#
byte
(
0
)
adcs
sum
,
sum
,
r8
,
put_byte_0
strb
r8
,
[
dst
],
#
1
strb
r8
,
[
dst
],
#
1
adcs
sum
,
sum
,
ip
,
lsl
#
byte
(
1
)
adcs
sum
,
sum
,
ip
,
put_byte_1
strb
ip
,
[
dst
],
#
1
strb
ip
,
[
dst
],
#
1
mov
pc
,
lr
@
dst
is
now
32
bit
aligned
mov
pc
,
lr
@
dst
is
now
32
bit
aligned
...
@@ -63,16 +63,16 @@ sum .req r3
...
@@ -63,16 +63,16 @@ sum .req r3
/
*
Align
dst
*/
/
*
Align
dst
*/
load1b
ip
load1b
ip
sub
len
,
len
,
#
1
sub
len
,
len
,
#
1
adcs
sum
,
sum
,
ip
,
lsl
#
byte
(
1
)
@
update
checksum
adcs
sum
,
sum
,
ip
,
put_byte_1
@
update
checksum
strb
ip
,
[
dst
],
#
1
strb
ip
,
[
dst
],
#
1
tst
len
,
#
6
tst
len
,
#
6
beq
.
less8_byteonly
beq
.
less8_byteonly
1
:
load2b
r8
,
ip
1
:
load2b
r8
,
ip
sub
len
,
len
,
#
2
sub
len
,
len
,
#
2
adcs
sum
,
sum
,
r8
,
lsl
#
byte
(
0
)
adcs
sum
,
sum
,
r8
,
put_byte_0
strb
r8
,
[
dst
],
#
1
strb
r8
,
[
dst
],
#
1
adcs
sum
,
sum
,
ip
,
lsl
#
byte
(
1
)
adcs
sum
,
sum
,
ip
,
put_byte_1
strb
ip
,
[
dst
],
#
1
strb
ip
,
[
dst
],
#
1
.
less8_aligned
:
tst
len
,
#
6
.
less8_aligned
:
tst
len
,
#
6
bne
1
b
bne
1
b
...
@@ -80,7 +80,7 @@ sum .req r3
...
@@ -80,7 +80,7 @@ sum .req r3
tst
len
,
#
1
tst
len
,
#
1
beq
.
done
beq
.
done
load1b
r8
load1b
r8
adcs
sum
,
sum
,
r8
,
lsl
#
byte
(
0
)
@
update
checksum
adcs
sum
,
sum
,
r8
,
put_byte_0
@
update
checksum
strb
r8
,
[
dst
],
#
1
strb
r8
,
[
dst
],
#
1
b
.
done
b
.
done
...
@@ -139,17 +139,17 @@ FN_ENTRY
...
@@ -139,17 +139,17 @@ FN_ENTRY
beq
.
done
beq
.
done
load1l
r4
load1l
r4
tst
len
,
#
2
tst
len
,
#
2
mov
r5
,
r4
,
lsr
#
byte
(
0
)
mov
r5
,
r4
,
get_byte_0
beq
.
exit
beq
.
exit
adcs
sum
,
sum
,
r4
,
push
#
16
adcs
sum
,
sum
,
r4
,
push
#
16
strb
r5
,
[
dst
],
#
1
strb
r5
,
[
dst
],
#
1
mov
r5
,
r4
,
lsr
#
byte
(
1
)
mov
r5
,
r4
,
get_byte_1
strb
r5
,
[
dst
],
#
1
strb
r5
,
[
dst
],
#
1
mov
r5
,
r4
,
lsr
#
byte
(
2
)
mov
r5
,
r4
,
get_byte_2
.
exit
:
tst
len
,
#
1
.
exit
:
tst
len
,
#
1
strneb
r5
,
[
dst
],
#
1
strneb
r5
,
[
dst
],
#
1
andne
r5
,
r5
,
#
255
andne
r5
,
r5
,
#
255
adcnes
sum
,
sum
,
r5
,
lsl
#
byte
(
0
)
adcnes
sum
,
sum
,
r5
,
put_byte_0
/
*
/
*
*
If
the
dst
pointer
was
not
16
-
bit
aligned
,
we
*
If
the
dst
pointer
was
not
16
-
bit
aligned
,
we
...
@@ -213,14 +213,14 @@ FN_ENTRY
...
@@ -213,14 +213,14 @@ FN_ENTRY
mov
r4
,
r5
,
pull
#
8
mov
r4
,
r5
,
pull
#
8
4
:
ands
len
,
len
,
#
3
4
:
ands
len
,
len
,
#
3
beq
.
done
beq
.
done
mov
r5
,
r4
,
lsr
#
byte
(
0
)
mov
r5
,
r4
,
get_byte_0
tst
len
,
#
2
tst
len
,
#
2
beq
.
exit
beq
.
exit
adcs
sum
,
sum
,
r4
,
push
#
16
adcs
sum
,
sum
,
r4
,
push
#
16
strb
r5
,
[
dst
],
#
1
strb
r5
,
[
dst
],
#
1
mov
r5
,
r4
,
lsr
#
byte
(
1
)
mov
r5
,
r4
,
get_byte_1
strb
r5
,
[
dst
],
#
1
strb
r5
,
[
dst
],
#
1
mov
r5
,
r4
,
lsr
#
byte
(
2
)
mov
r5
,
r4
,
get_byte_2
b
.
exit
b
.
exit
.
src2_aligned
:
mov
r4
,
r5
,
pull
#
16
.
src2_aligned
:
mov
r4
,
r5
,
pull
#
16
...
@@ -265,12 +265,12 @@ FN_ENTRY
...
@@ -265,12 +265,12 @@ FN_ENTRY
mov
r4
,
r5
,
pull
#
16
mov
r4
,
r5
,
pull
#
16
4
:
ands
len
,
len
,
#
3
4
:
ands
len
,
len
,
#
3
beq
.
done
beq
.
done
mov
r5
,
r4
,
lsr
#
byte
(
0
)
mov
r5
,
r4
,
get_byte_0
tst
len
,
#
2
tst
len
,
#
2
beq
.
exit
beq
.
exit
adcs
sum
,
sum
,
r4
adcs
sum
,
sum
,
r4
strb
r5
,
[
dst
],
#
1
strb
r5
,
[
dst
],
#
1
mov
r5
,
r4
,
lsr
#
byte
(
1
)
mov
r5
,
r4
,
get_byte_1
strb
r5
,
[
dst
],
#
1
strb
r5
,
[
dst
],
#
1
tst
len
,
#
1
tst
len
,
#
1
beq
.
done
beq
.
done
...
@@ -319,14 +319,14 @@ FN_ENTRY
...
@@ -319,14 +319,14 @@ FN_ENTRY
mov
r4
,
r5
,
pull
#
24
mov
r4
,
r5
,
pull
#
24
4
:
ands
len
,
len
,
#
3
4
:
ands
len
,
len
,
#
3
beq
.
done
beq
.
done
mov
r5
,
r4
,
lsr
#
byte
(
0
)
mov
r5
,
r4
,
get_byte_0
tst
len
,
#
2
tst
len
,
#
2
beq
.
exit
beq
.
exit
strb
r5
,
[
dst
],
#
1
strb
r5
,
[
dst
],
#
1
adcs
sum
,
sum
,
r4
adcs
sum
,
sum
,
r4
load1l
r4
load1l
r4
mov
r5
,
r4
,
lsr
#
byte
(
0
)
mov
r5
,
r4
,
get_byte_0
strb
r5
,
[
dst
],
#
1
strb
r5
,
[
dst
],
#
1
adcs
sum
,
sum
,
r4
,
push
#
24
adcs
sum
,
sum
,
r4
,
push
#
24
mov
r5
,
r4
,
lsr
#
byte
(
1
)
mov
r5
,
r4
,
get_byte_1
b
.
exit
b
.
exit
arch/arm/lib/io-readsb.S
View file @
60f63ed0
...
@@ -37,35 +37,35 @@ ENTRY(__raw_readsb)
...
@@ -37,35 +37,35 @@ ENTRY(__raw_readsb)
.
insb_16_lp
:
ldrb
r3
,
[
r0
]
.
insb_16_lp
:
ldrb
r3
,
[
r0
]
ldrb
r4
,
[
r0
]
ldrb
r4
,
[
r0
]
ldrb
r5
,
[
r0
]
ldrb
r5
,
[
r0
]
mov
r3
,
r3
,
lsl
#
byte
(
0
)
mov
r3
,
r3
,
put_byte_0
ldrb
r6
,
[
r0
]
ldrb
r6
,
[
r0
]
orr
r3
,
r3
,
r4
,
lsl
#
byte
(
1
)
orr
r3
,
r3
,
r4
,
put_byte_1
ldrb
r4
,
[
r0
]
ldrb
r4
,
[
r0
]
orr
r3
,
r3
,
r5
,
lsl
#
byte
(
2
)
orr
r3
,
r3
,
r5
,
put_byte_2
ldrb
r5
,
[
r0
]
ldrb
r5
,
[
r0
]
orr
r3
,
r3
,
r6
,
lsl
#
byte
(
3
)
orr
r3
,
r3
,
r6
,
put_byte_3
ldrb
r6
,
[
r0
]
ldrb
r6
,
[
r0
]
mov
r4
,
r4
,
lsl
#
byte
(
0
)
mov
r4
,
r4
,
put_byte_0
ldrb
ip
,
[
r0
]
ldrb
ip
,
[
r0
]
orr
r4
,
r4
,
r5
,
lsl
#
byte
(
1
)
orr
r4
,
r4
,
r5
,
put_byte_1
ldrb
r5
,
[
r0
]
ldrb
r5
,
[
r0
]
orr
r4
,
r4
,
r6
,
lsl
#
byte
(
2
)
orr
r4
,
r4
,
r6
,
put_byte_2
ldrb
r6
,
[
r0
]
ldrb
r6
,
[
r0
]
orr
r4
,
r4
,
ip
,
lsl
#
byte
(
3
)
orr
r4
,
r4
,
ip
,
put_byte_3
ldrb
ip
,
[
r0
]
ldrb
ip
,
[
r0
]
mov
r5
,
r5
,
lsl
#
byte
(
0
)
mov
r5
,
r5
,
put_byte_0
ldrb
lr
,
[
r0
]
ldrb
lr
,
[
r0
]
orr
r5
,
r5
,
r6
,
lsl
#
byte
(
1
)
orr
r5
,
r5
,
r6
,
put_byte_1
ldrb
r6
,
[
r0
]
ldrb
r6
,
[
r0
]
orr
r5
,
r5
,
ip
,
lsl
#
byte
(
2
)
orr
r5
,
r5
,
ip
,
put_byte_2
ldrb
ip
,
[
r0
]
ldrb
ip
,
[
r0
]
orr
r5
,
r5
,
lr
,
lsl
#
byte
(
3
)
orr
r5
,
r5
,
lr
,
put_byte_3
ldrb
lr
,
[
r0
]
ldrb
lr
,
[
r0
]
mov
r6
,
r6
,
lsl
#
byte
(
0
)
mov
r6
,
r6
,
put_byte_0
orr
r6
,
r6
,
ip
,
lsl
#
byte
(
1
)
orr
r6
,
r6
,
ip
,
put_byte_1
ldrb
ip
,
[
r0
]
ldrb
ip
,
[
r0
]
orr
r6
,
r6
,
lr
,
lsl
#
byte
(
2
)
orr
r6
,
r6
,
lr
,
put_byte_2
orr
r6
,
r6
,
ip
,
lsl
#
byte
(
3
)
orr
r6
,
r6
,
ip
,
put_byte_3
stmia
r1
!,
{
r3
-
r6
}
stmia
r1
!,
{
r3
-
r6
}
subs
r2
,
r2
,
#
16
subs
r2
,
r2
,
#
16
...
@@ -80,19 +80,19 @@ ENTRY(__raw_readsb)
...
@@ -80,19 +80,19 @@ ENTRY(__raw_readsb)
ldrb
r3
,
[
r0
]
ldrb
r3
,
[
r0
]
ldrb
r4
,
[
r0
]
ldrb
r4
,
[
r0
]
ldrb
r5
,
[
r0
]
ldrb
r5
,
[
r0
]
mov
r3
,
r3
,
lsl
#
byte
(
0
)
mov
r3
,
r3
,
put_byte_0
ldrb
r6
,
[
r0
]
ldrb
r6
,
[
r0
]
orr
r3
,
r3
,
r4
,
lsl
#
byte
(
1
)
orr
r3
,
r3
,
r4
,
put_byte_1
ldrb
r4
,
[
r0
]
ldrb
r4
,
[
r0
]
orr
r3
,
r3
,
r5
,
lsl
#
byte
(
2
)
orr
r3
,
r3
,
r5
,
put_byte_2
ldrb
r5
,
[
r0
]
ldrb
r5
,
[
r0
]
orr
r3
,
r3
,
r6
,
lsl
#
byte
(
3
)
orr
r3
,
r3
,
r6
,
put_byte_3
ldrb
r6
,
[
r0
]
ldrb
r6
,
[
r0
]
mov
r4
,
r4
,
lsl
#
byte
(
0
)
mov
r4
,
r4
,
put_byte_0
ldrb
ip
,
[
r0
]
ldrb
ip
,
[
r0
]
orr
r4
,
r4
,
r5
,
lsl
#
byte
(
1
)
orr
r4
,
r4
,
r5
,
put_byte_1
orr
r4
,
r4
,
r6
,
lsl
#
byte
(
2
)
orr
r4
,
r4
,
r6
,
put_byte_2
orr
r4
,
r4
,
ip
,
lsl
#
byte
(
3
)
orr
r4
,
r4
,
ip
,
put_byte_3
stmia
r1
!,
{
r3
,
r4
}
stmia
r1
!,
{
r3
,
r4
}
.
insb_no_8
:
tst
r2
,
#
4
.
insb_no_8
:
tst
r2
,
#
4
...
@@ -102,10 +102,10 @@ ENTRY(__raw_readsb)
...
@@ -102,10 +102,10 @@ ENTRY(__raw_readsb)
ldrb
r4
,
[
r0
]
ldrb
r4
,
[
r0
]
ldrb
r5
,
[
r0
]
ldrb
r5
,
[
r0
]
ldrb
r6
,
[
r0
]
ldrb
r6
,
[
r0
]
mov
r3
,
r3
,
lsl
#
byte
(
0
)
mov
r3
,
r3
,
put_byte_0
orr
r3
,
r3
,
r4
,
lsl
#
byte
(
1
)
orr
r3
,
r3
,
r4
,
put_byte_1
orr
r3
,
r3
,
r5
,
lsl
#
byte
(
2
)
orr
r3
,
r3
,
r5
,
put_byte_2
orr
r3
,
r3
,
r6
,
lsl
#
byte
(
3
)
orr
r3
,
r3
,
r6
,
put_byte_3
str
r3
,
[
r1
],
#
4
str
r3
,
[
r1
],
#
4
.
insb_no_4
:
ands
r2
,
r2
,
#
3
.
insb_no_4
:
ands
r2
,
r2
,
#
3
...
...
arch/arm/lib/uaccess.S
View file @
60f63ed0
...
@@ -183,14 +183,14 @@ USER( strt r3, [r0], #4) @ May fault
...
@@ -183,14 +183,14 @@ USER( strt r3, [r0], #4) @ May fault
strnet
r3
,
[
r0
],
#
4
@
Shouldnt
fault
strnet
r3
,
[
r0
],
#
4
@
Shouldnt
fault
ands
ip
,
ip
,
#
3
ands
ip
,
ip
,
#
3
beq
.
c2u_1fupi
beq
.
c2u_1fupi
.
c2u_1nowords
:
mov
r3
,
r7
,
lsr
#
byte
(
1
)
.
c2u_1nowords
:
mov
r3
,
r7
,
get_byte_1
teq
ip
,
#
0
teq
ip
,
#
0
beq
.
c2u_finished
beq
.
c2u_finished
cmp
ip
,
#
2
cmp
ip
,
#
2
USER
(
strbt
r3
,
[
r0
],
#
1
)
@
May
fault
USER
(
strbt
r3
,
[
r0
],
#
1
)
@
May
fault
movge
r3
,
r7
,
lsr
#
byte
(
2
)
movge
r3
,
r7
,
get_byte_2
USER
(
strgebt
r3
,
[
r0
],
#
1
)
@
May
fault
USER
(
strgebt
r3
,
[
r0
],
#
1
)
@
May
fault
movgt
r3
,
r7
,
lsr
#
byte
(
3
)
movgt
r3
,
r7
,
get_byte_3
USER
(
strgtbt
r3
,
[
r0
],
#
1
)
@
May
fault
USER
(
strgtbt
r3
,
[
r0
],
#
1
)
@
May
fault
b
.
c2u_finished
b
.
c2u_finished
...
@@ -250,12 +250,12 @@ USER( strt r3, [r0], #4) @ May fault
...
@@ -250,12 +250,12 @@ USER( strt r3, [r0], #4) @ May fault
strnet
r3
,
[
r0
],
#
4
@
Shouldnt
fault
strnet
r3
,
[
r0
],
#
4
@
Shouldnt
fault
ands
ip
,
ip
,
#
3
ands
ip
,
ip
,
#
3
beq
.
c2u_2fupi
beq
.
c2u_2fupi
.
c2u_2nowords
:
mov
r3
,
r7
,
lsr
#
byte
(
2
)
.
c2u_2nowords
:
mov
r3
,
r7
,
get_byte_2
teq
ip
,
#
0
teq
ip
,
#
0
beq
.
c2u_finished
beq
.
c2u_finished
cmp
ip
,
#
2
cmp
ip
,
#
2
USER
(
strbt
r3
,
[
r0
],
#
1
)
@
May
fault
USER
(
strbt
r3
,
[
r0
],
#
1
)
@
May
fault
movge
r3
,
r7
,
lsr
#
byte
(
3
)
movge
r3
,
r7
,
get_byte_3
USER
(
strgebt
r3
,
[
r0
],
#
1
)
@
May
fault
USER
(
strgebt
r3
,
[
r0
],
#
1
)
@
May
fault
ldrgtb
r3
,
[
r1
],
#
0
ldrgtb
r3
,
[
r1
],
#
0
USER
(
strgtbt
r3
,
[
r0
],
#
1
)
@
May
fault
USER
(
strgtbt
r3
,
[
r0
],
#
1
)
@
May
fault
...
@@ -317,7 +317,7 @@ USER( strt r3, [r0], #4) @ May fault
...
@@ -317,7 +317,7 @@ USER( strt r3, [r0], #4) @ May fault
strnet
r3
,
[
r0
],
#
4
@
Shouldnt
fault
strnet
r3
,
[
r0
],
#
4
@
Shouldnt
fault
ands
ip
,
ip
,
#
3
ands
ip
,
ip
,
#
3
beq
.
c2u_3fupi
beq
.
c2u_3fupi
.
c2u_3nowords
:
mov
r3
,
r7
,
lsr
#
byte
(
3
)
.
c2u_3nowords
:
mov
r3
,
r7
,
get_byte_3
teq
ip
,
#
0
teq
ip
,
#
0
beq
.
c2u_finished
beq
.
c2u_finished
cmp
ip
,
#
2
cmp
ip
,
#
2
...
@@ -496,14 +496,14 @@ USER( ldrnet r7, [r1], #4) @ May fault
...
@@ -496,14 +496,14 @@ USER( ldrnet r7, [r1], #4) @ May fault
strne
r3
,
[
r0
],
#
4
strne
r3
,
[
r0
],
#
4
ands
ip
,
ip
,
#
3
ands
ip
,
ip
,
#
3
beq
.
cfu_1fupi
beq
.
cfu_1fupi
.
cfu_1nowords
:
mov
r3
,
r7
,
lsr
#
byte
(
1
)
.
cfu_1nowords
:
mov
r3
,
r7
,
get_byte_1
teq
ip
,
#
0
teq
ip
,
#
0
beq
.
cfu_finished
beq
.
cfu_finished
cmp
ip
,
#
2
cmp
ip
,
#
2
strb
r3
,
[
r0
],
#
1
strb
r3
,
[
r0
],
#
1
movge
r3
,
r7
,
lsr
#
byte
(
2
)
movge
r3
,
r7
,
get_byte_2
strgeb
r3
,
[
r0
],
#
1
strgeb
r3
,
[
r0
],
#
1
movgt
r3
,
r7
,
lsr
#
byte
(
3
)
movgt
r3
,
r7
,
get_byte_3
strgtb
r3
,
[
r0
],
#
1
strgtb
r3
,
[
r0
],
#
1
b
.
cfu_finished
b
.
cfu_finished
...
@@ -563,12 +563,12 @@ USER( ldrnet r7, [r1], #4) @ May fault
...
@@ -563,12 +563,12 @@ USER( ldrnet r7, [r1], #4) @ May fault
strne
r3
,
[
r0
],
#
4
strne
r3
,
[
r0
],
#
4
ands
ip
,
ip
,
#
3
ands
ip
,
ip
,
#
3
beq
.
cfu_2fupi
beq
.
cfu_2fupi
.
cfu_2nowords
:
mov
r3
,
r7
,
lsr
#
byte
(
2
)
.
cfu_2nowords
:
mov
r3
,
r7
,
get_byte_2
teq
ip
,
#
0
teq
ip
,
#
0
beq
.
cfu_finished
beq
.
cfu_finished
cmp
ip
,
#
2
cmp
ip
,
#
2
strb
r3
,
[
r0
],
#
1
strb
r3
,
[
r0
],
#
1
movge
r3
,
r7
,
lsr
#
byte
(
3
)
movge
r3
,
r7
,
get_byte_3
strgeb
r3
,
[
r0
],
#
1
strgeb
r3
,
[
r0
],
#
1
USER
(
ldrgtbt
r3
,
[
r1
],
#
0
)
@
May
fault
USER
(
ldrgtbt
r3
,
[
r1
],
#
0
)
@
May
fault
strgtb
r3
,
[
r0
],
#
1
strgtb
r3
,
[
r0
],
#
1
...
@@ -630,7 +630,7 @@ USER( ldrnet r7, [r1], #4) @ May fault
...
@@ -630,7 +630,7 @@ USER( ldrnet r7, [r1], #4) @ May fault
strne
r3
,
[
r0
],
#
4
strne
r3
,
[
r0
],
#
4
ands
ip
,
ip
,
#
3
ands
ip
,
ip
,
#
3
beq
.
cfu_3fupi
beq
.
cfu_3fupi
.
cfu_3nowords
:
mov
r3
,
r7
,
lsr
#
byte
(
3
)
.
cfu_3nowords
:
mov
r3
,
r7
,
get_byte_3
teq
ip
,
#
0
teq
ip
,
#
0
beq
.
cfu_finished
beq
.
cfu_finished
cmp
ip
,
#
2
cmp
ip
,
#
2
...
...
arch/arm/mach-sa1100/cerf.c
View file @
60f63ed0
/*
/*
* linux/arch/arm/mach-sa1100/cerf.c
* linux/arch/arm/mach-sa1100/cerf.c
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Apr-2003 : Removed some old PDA crud [FB]
* Oct-2003 : Added uart2 resource [FB]
* Jan-2004 : Removed io map for flash [FB]
*/
*/
#include <linux/config.h>
#include <linux/config.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/tty.h>
#include <linux/tty.h>
#include <linux/device.h>
#include <asm/irq.h>
#include <asm/irq.h>
#include <asm/hardware.h>
#include <asm/hardware.h>
#include <asm/setup.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/map.h>
#include <asm/mach/serial_sa1100.h>
#include <asm/mach/serial_sa1100.h>
#include <asm/arch/cerf.h>
#include "generic.h"
#include "generic.h"
static
struct
resource
cerfuart2_resources
[]
=
{
[
0
]
=
{
.
start
=
0x80030000
,
.
end
=
0x8003ffff
,
.
flags
=
IORESOURCE_MEM
,
},
};
static
struct
platform_device
cerfuart2_device
=
{
.
name
=
"sa11x0-uart"
,
.
id
=
2
,
.
num_resources
=
ARRAY_SIZE
(
cerfuart2_resources
),
.
resource
=
cerfuart2_resources
,
};
static
struct
platform_device
*
cerf_devices
[]
__initdata
=
{
&
cerfuart2_device
,
};
static
void
__init
cerf_init_irq
(
void
)
static
void
__init
cerf_init_irq
(
void
)
{
{
sa1100_init_irq
();
sa1100_init_irq
();
set_irq_type
(
CERF_ETH_IRQ
,
IRQT_RISING
);
/* Need to register these as rising edge interrupts
* For standard 16550 serial driver support
* Basically - I copied it from pfs168.c :)
*/
#ifdef CONFIG_SA1100_CERF_CPLD
/* PDA Full serial port */
set_irq_type
(
IRQ_GPIO3
,
IRQT_RISING
);
/* PDA Bluetooth */
set_irq_type
(
IRQ_GPIO2
,
IRQT_RISING
);
#endif
/* CONFIG_SA1100_CERF_CPLD */
set_irq_type
(
IRQ_GPIO_UCB1200_IRQ
,
IRQT_RISING
);
}
}
static
struct
map_desc
cerf_io_desc
[]
__initdata
=
{
static
struct
map_desc
cerf_io_desc
[]
__initdata
=
{
/* virtual physical length type */
/* virtual physical length type */
{
0xf0000000
,
0x08000000
,
0x00100000
,
MT_DEVICE
}
/* Crystal Ethernet Chip */
{
0xf0000000
,
0x08000000
,
0x00100000
,
MT_DEVICE
}
/* Crystal Ethernet Chip */
#ifdef CONFIG_SA1100_CERF_CPLD
,{
0xf1000000
,
0x40000000
,
0x00100000
,
MT_DEVICE
},
/* CPLD Chip */
{
0xf2000000
,
0x10000000
,
0x00100000
,
MT_DEVICE
},
/* CerfPDA Bluetooth */
{
0xf3000000
,
0x18000000
,
0x00100000
,
MT_DEVICE
}
/* CerfPDA Serial */
#endif
};
};
static
void
__init
cerf_map_io
(
void
)
static
void
__init
cerf_map_io
(
void
)
...
@@ -51,21 +64,30 @@ static void __init cerf_map_io(void)
...
@@ -51,21 +64,30 @@ static void __init cerf_map_io(void)
iotable_init
(
cerf_io_desc
,
ARRAY_SIZE
(
cerf_io_desc
));
iotable_init
(
cerf_io_desc
,
ARRAY_SIZE
(
cerf_io_desc
));
sa1100_register_uart
(
0
,
3
);
sa1100_register_uart
(
0
,
3
);
#ifdef CONFIG_SA1100_CERF_IRDA_ENABLED
sa1100_register_uart
(
1
,
2
);
/* disable this and the uart2 device for sa1100_fir */
sa1100_register_uart
(
1
,
1
);
#else
sa1100_register_uart
(
1
,
2
);
sa1100_register_uart
(
2
,
1
);
sa1100_register_uart
(
2
,
1
);
#endif
/* set some GPDR bits here while it's safe */
/* set some GPDR bits here while it's safe */
GPDR
|=
GPIO_CF_RESET
;
GPDR
|=
CERF_GPIO_CF_RESET
;
#ifdef CONFIG_SA1100_CERF_CPLD
GPDR
|=
GPIO_PWR_SHUTDOWN
;
#endif
}
}
MACHINE_START
(
CERF
,
"Intrinsyc's Cerf Family of Products"
)
static
int
__init
cerf_init
(
void
)
{
int
ret
;
if
(
!
machine_is_cerf
())
return
-
ENODEV
;
ret
=
platform_add_devices
(
cerf_devices
,
ARRAY_SIZE
(
cerf_devices
));
if
(
ret
<
0
)
return
ret
;
return
0
;
}
arch_initcall
(
cerf_init
);
MACHINE_START
(
CERF
,
"Intrinsyc CerfBoard/CerfCube"
)
MAINTAINER
(
"support@intrinsyc.com"
)
MAINTAINER
(
"support@intrinsyc.com"
)
BOOT_MEM
(
0xc0000000
,
0x80000000
,
0xf8000000
)
BOOT_MEM
(
0xc0000000
,
0x80000000
,
0xf8000000
)
MAPIO
(
cerf_map_io
)
MAPIO
(
cerf_map_io
)
...
...
arch/arm/mach-sa1100/generic.c
View file @
60f63ed0
...
@@ -99,6 +99,7 @@ unsigned int sa11x0_getspeed(void)
...
@@ -99,6 +99,7 @@ unsigned int sa11x0_getspeed(void)
{
{
return
cclk_frequency_100khz
[
PPCR
&
0xf
]
*
100
;
return
cclk_frequency_100khz
[
PPCR
&
0xf
]
*
100
;
}
}
EXPORT_SYMBOL
(
sa11x0_getspeed
);
#else
#else
/*
/*
* We still need to provide this so building without cpufreq works.
* We still need to provide this so building without cpufreq works.
...
...
drivers/mtd/maps/sa1100-flash.c
View file @
60f63ed0
...
@@ -154,50 +154,34 @@ static struct mtd_partition badge4_partitions[] = {
...
@@ -154,50 +154,34 @@ static struct mtd_partition badge4_partitions[] = {
#ifdef CONFIG_SA1100_CERF
#ifdef CONFIG_SA1100_CERF
#ifdef CONFIG_SA1100_CERF_FLASH_32MB
#ifdef CONFIG_SA1100_CERF_FLASH_32MB
static
struct
mtd_partition
cerf_partitions
[]
=
{
# define CERF_FLASH_SIZE 0x02000000
{
.
name
=
"firmware"
,
.
size
=
0x00040000
,
.
offset
=
0
,
},
{
.
name
=
"params"
,
.
size
=
0x00040000
,
.
offset
=
0x00040000
,
},
{
.
name
=
"kernel"
,
.
size
=
0x00100000
,
.
offset
=
0x00080000
,
},
{
.
name
=
"rootdisk"
,
.
size
=
0x01E80000
,
.
offset
=
0x00180000
,
}
};
#elif defined CONFIG_SA1100_CERF_FLASH_16MB
#elif defined CONFIG_SA1100_CERF_FLASH_16MB
# define CERF_FLASH_SIZE 0x01000000
#elif defined CONFIG_SA1100_CERF_FLASH_8MB
# define CERF_FLASH_SIZE 0x00800000
#else
# error "Undefined flash size for CERF in sa1100-flash.c"
#endif
static
struct
mtd_partition
cerf_partitions
[]
=
{
static
struct
mtd_partition
cerf_partitions
[]
=
{
{
{
.
name
=
"
firmware
"
,
.
name
=
"
Bootloader
"
,
.
size
=
0x00020000
,
.
size
=
0x00020000
,
.
offset
=
0
,
.
offset
=
0
x00000000
,
},
{
},
{
.
name
=
"
p
arams"
,
.
name
=
"
P
arams"
,
.
size
=
0x000
2
0000
,
.
size
=
0x000
4
0000
,
.
offset
=
0x00020000
,
.
offset
=
0x00020000
,
},
{
},
{
.
name
=
"
k
ernel"
,
.
name
=
"
K
ernel"
,
.
size
=
0x00100000
,
.
size
=
0x00100000
,
.
offset
=
0x000
4
0000
,
.
offset
=
0x000
6
0000
,
},
{
},
{
.
name
=
"
rootdisk
"
,
.
name
=
"
Filesystem
"
,
.
size
=
0x00EC
0000
,
.
size
=
CERF_FLASH_SIZE
-
0x0016
0000
,
.
offset
=
0x001
4
0000
,
.
offset
=
0x001
6
0000
,
}
}
};
};
#elif defined CONFIG_SA1100_CERF_FLASH_8MB
# error "Unwritten type definition"
#else
# error "Undefined memory orientation for CERF in sa1100-flash.c"
#endif
#endif
#endif
#ifdef CONFIG_SA1100_CONSUS
#ifdef CONFIG_SA1100_CONSUS
...
...
drivers/pcmcia/sa1100_cerf.c
View file @
60f63ed0
...
@@ -11,27 +11,25 @@
...
@@ -11,27 +11,25 @@
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/device.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/hardware.h>
#include <asm/hardware.h>
#include <asm/mach-types.h>
#include <asm/mach-types.h>
#include <asm/irq.h>
#include <asm/irq.h>
#include <asm/arch/cerf.h>
#include "sa1100_generic.h"
#include "sa1100_generic.h"
#ifdef CONFIG_SA1100_CERF_CPLD
#define CERF_SOCKET 0
#else
#define CERF_SOCKET 1
#define CERF_SOCKET 1
#endif
static
struct
pcmcia_irqs
irqs
[]
=
{
static
struct
pcmcia_irqs
irqs
[]
=
{
{
CERF_SOCKET
,
IRQ_GPIO_CF_CD
,
"CF_CD"
},
{
CERF_SOCKET
,
CERF_
IRQ_GPIO_CF_CD
,
"CF_CD"
},
{
CERF_SOCKET
,
IRQ_GPIO_CF_BVD2
,
"CF_BVD2"
},
{
CERF_SOCKET
,
CERF_
IRQ_GPIO_CF_BVD2
,
"CF_BVD2"
},
{
CERF_SOCKET
,
IRQ_GPIO_CF_BVD1
,
"CF_BVD1"
}
{
CERF_SOCKET
,
CERF_
IRQ_GPIO_CF_BVD1
,
"CF_BVD1"
}
};
};
static
int
cerf_pcmcia_hw_init
(
struct
sa1100_pcmcia_socket
*
skt
)
static
int
cerf_pcmcia_hw_init
(
struct
sa1100_pcmcia_socket
*
skt
)
{
{
skt
->
irq
=
IRQ_GPIO_CF_IRQ
;
skt
->
irq
=
CERF_
IRQ_GPIO_CF_IRQ
;
return
sa11xx_request_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
return
sa11xx_request_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
}
}
...
@@ -46,13 +44,13 @@ cerf_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *
...
@@ -46,13 +44,13 @@ cerf_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *
{
{
unsigned
long
levels
=
GPLR
;
unsigned
long
levels
=
GPLR
;
state
->
detect
=
((
levels
&
GPIO_CF_CD
)
==
0
)
?
1
:
0
;
state
->
detect
=
(
levels
&
CERF_GPIO_CF_CD
)
?
0
:
1
;
state
->
ready
=
(
levels
&
GPIO_CF_IRQ
)
?
1
:
0
;
state
->
ready
=
(
levels
&
CERF_GPIO_CF_IRQ
)
?
1
:
0
;
state
->
bvd1
=
(
levels
&
GPIO_CF_BVD1
)
?
1
:
0
;
state
->
bvd1
=
(
levels
&
CERF_
GPIO_CF_BVD1
)
?
1
:
0
;
state
->
bvd2
=
(
levels
&
GPIO_CF_BVD2
)
?
1
:
0
;
state
->
bvd2
=
(
levels
&
CERF_
GPIO_CF_BVD2
)
?
1
:
0
;
state
->
wrprot
=
0
;
state
->
wrprot
=
0
;
state
->
vs_3v
=
1
;
state
->
vs_3v
=
1
;
state
->
vs_Xv
=
0
;
state
->
vs_Xv
=
0
;
}
}
static
int
static
int
...
@@ -61,13 +59,8 @@ cerf_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
...
@@ -61,13 +59,8 @@ cerf_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
{
{
switch
(
state
->
Vcc
)
{
switch
(
state
->
Vcc
)
{
case
0
:
case
0
:
break
;
case
50
:
case
50
:
case
33
:
case
33
:
#ifdef CONFIG_SA1100_CERF_CPLD
GPCR
=
GPIO_PWR_SHUTDOWN
;
#endif
break
;
break
;
default:
default:
...
@@ -77,13 +70,9 @@ cerf_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
...
@@ -77,13 +70,9 @@ cerf_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
}
}
if
(
state
->
flags
&
SS_RESET
)
{
if
(
state
->
flags
&
SS_RESET
)
{
#ifdef CONFIG_SA1100_CERF_CPLD
GPSR
=
CERF_GPIO_CF_RESET
;
GPSR
=
GPIO_CF_RESET
;
#endif
}
else
{
}
else
{
#ifdef CONFIG_SA1100_CERF_CPLD
GPCR
=
CERF_GPIO_CF_RESET
;
GPCR
=
GPIO_CF_RESET
;
#endif
}
}
return
0
;
return
0
;
...
@@ -101,8 +90,8 @@ static void cerf_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
...
@@ -101,8 +90,8 @@ static void cerf_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
static
struct
pcmcia_low_level
cerf_pcmcia_ops
=
{
static
struct
pcmcia_low_level
cerf_pcmcia_ops
=
{
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
.
init
=
cerf_pcmcia_hw_init
,
.
hw_init
=
cerf_pcmcia_hw_init
,
.
shutdown
=
cerf_pcmcia_hw_shutdown
,
.
hw_
shutdown
=
cerf_pcmcia_hw_shutdown
,
.
socket_state
=
cerf_pcmcia_socket_state
,
.
socket_state
=
cerf_pcmcia_socket_state
,
.
configure_socket
=
cerf_pcmcia_configure_socket
,
.
configure_socket
=
cerf_pcmcia_configure_socket
,
...
...
include/asm-arm/arch-sa1100/cerf.h
View file @
60f63ed0
/*
* include/asm-arm/arch-sa1100/cerf.h
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Apr-2003 : Removed some old PDA crud [FB]
*/
#ifndef _INCLUDE_CERF_H_
#ifndef _INCLUDE_CERF_H_
#define _INCLUDE_CERF_H_
#define _INCLUDE_CERF_H_
#include <linux/config.h>
#include <linux/config.h>
#ifdef CONFIG_SA1100_CERF_CPLD
#define CERF_ETH_IO 0xf0000000
#define CERF_ETH_IRQ IRQ_GPIO26
#define CERF_GPIO_CF_BVD2 GPIO_GPIO (19)
#define CERF_GPIO_CF_BVD1 GPIO_GPIO (20)
#define CERF_GPIO_CF_RESET GPIO_GPIO (21)
#define CERF_GPIO_CF_IRQ GPIO_GPIO (22)
#define CERF_GPIO_CF_CD GPIO_GPIO (23)
// Map sa1100fb.c to sa1100_frontlight.c - Not pretty, but necessary.
#define CERF_IRQ_GPIO_CF_BVD2 IRQ_GPIO19
#define CERF_BACKLIGHT_ENABLE sa1100_fl_enable
#define CERF_IRQ_GPIO_CF_BVD1 IRQ_GPIO20
#define CERF_BACKLIGHT_DISABLE sa1100_fl_disable
#define CERF_IRQ_GPIO_CF_IRQ IRQ_GPIO22
#define CERF_IRQ_GPIO_CF_CD IRQ_GPIO23
//
// IO Pins for devices
//
#define CERF_PDA_CPLD 0xf1000000
#define CERF_PDA_CPLD_WRCLRINT (0x0)
#define CERF_PDA_CPLD_BACKLIGHT (0x2)
#define CERF_PDA_CPLD_SOUND_FREQ (0x4)
#define CERF_PDA_CPLD_KEYPAD_A (0x6)
#define CERF_PDA_CPLD_BATTFAULT (0x8)
#define CERF_PDA_CPLD_KEYPAD_B (0xa)
#define CERF_PDA_CPLD_SOUND_ENA (0xc)
#define CERF_PDA_CPLD_SOUND_RESET (0xe)
#define GPIO_CF_BVD2 GPIO_GPIO (5)
#define GPIO_CF_BVD1 GPIO_GPIO (6)
#define GPIO_CF_RESET GPIO_GPIO (7)
#define GPIO_CF_IRQ GPIO_GPIO (8)
#define GPIO_CF_CD GPIO_GPIO (9)
#define GPIO_PWR_SHUTDOWN GPIO_GPIO (25)
#define UCB1200_GPIO_CONT_CS 0x0001
#define UCB1200_GPIO_CONT_DOWN 0x0002
#define UCB1200_GPIO_CONT_INC 0x0004
#define UCB1200_GPIO_CONT_ENA 0x0008
#define UCB1200_GPIO_LCD_RESET 0x0010
#define UCB1200_GPIO_IRDA_ENABLE 0x0020
#define UCB1200_GPIO_BT_ENABLE 0x0040
#define UCB1200_GPIO_L3_DATA 0x0080
#define UCB1200_GPIO_L3_CLOCK 0x0100
#define UCB1200_GPIO_L3_MODE 0x0200
//
// IRQ for devices
//
#define IRQ_UCB1200_CONT_CS IRQ_UCB1200_IO0
#define IRQ_UCB1200_CONT_DOWN IRQ_UCB1200_IO1
#define IRQ_UCB1200_CONT_INC IRQ_UCB1200_IO2
#define IRQ_UCB1200_CONT_ENA IRQ_UCB1200_IO3
#define IRQ_UCB1200_LCD_RESET IRQ_UCB1200_IO4
#define IRQ_UCB1200_IRDA_ENABLE IRQ_UCB1200_IO5
#define IRQ_UCB1200_BT_ENABLE IRQ_UCB1200_IO6
#define IRQ_UCB1200_L3_DATA IRQ_UCB1200_IO7
#define IRQ_UCB1200_L3_CLOCK IRQ_UCB1200_IO8
#define IRQ_UCB1200_L3_MODE IRQ_UCB1200_IO9
#define IRQ_GPIO_CF_BVD2 IRQ_GPIO5
#define IRQ_GPIO_CF_BVD1 IRQ_GPIO6
#define IRQ_GPIO_CF_IRQ IRQ_GPIO8
#define IRQ_GPIO_CF_CD IRQ_GPIO9
//
// Device parameters
//
#define CERF_PDA_CPLD_SOUND_FREQ_8000 (0x01)
#define CERF_PDA_CPLD_SOUND_FREQ_11025 (0x05)
#define CERF_PDA_CPLD_SOUND_FREQ_16000 (0x02)
#define CERF_PDA_CPLD_SOUND_FREQ_22050 (0x06)
#define CERF_PDA_CPLD_SOUND_FREQ_32000 (0x03)
#define CERF_PDA_CPLD_SOUND_FREQ_44100 (0x07)
#define CERF_PDA_CPLD_SOUND_FREQ_48000 (0x0b)
//
// General Functions
//
#define CERF_PDA_CPLD_Get(x, y) (*((char*)(CERF_PDA_CPLD + (x))) & (y))
#define CERF_PDA_CPLD_Set(x, y, z) (*((char*)(CERF_PDA_CPLD + (x))) = (*((char*)(CERF_PDA_CPLD + (x))) & ~(z)) | (y))
#define CERF_PDA_CPLD_UnSet(x, y, z) (*((char*)(CERF_PDA_CPLD + (x))) = (*((char*)(CERF_PDA_CPLD + (x))) & ~(z)) & ~(y))
#else // CONFIG_SA1100_CERF_CPLD
#define GPIO_CF_BVD2 GPIO_GPIO (19)
#define GPIO_CF_BVD1 GPIO_GPIO (20)
#define GPIO_CF_RESET 0
#define GPIO_CF_IRQ GPIO_GPIO (22)
#define GPIO_CF_CD GPIO_GPIO (23)
#define GPIO_LCD_RESET GPIO_GPIO (15)
#define IRQ_GPIO_CF_BVD2 IRQ_GPIO19
#define IRQ_GPIO_CF_BVD1 IRQ_GPIO20
#define IRQ_GPIO_CF_IRQ IRQ_GPIO22
#define IRQ_GPIO_CF_CD IRQ_GPIO23
#endif // CONFIG_SA1100_CERF_CPLD
#define GPIO_UCB1200_IRQ GPIO_GPIO (18)
#define IRQ_GPIO_UCB1200_IRQ IRQ_GPIO18
#endif // _INCLUDE_CERF_H_
#endif // _INCLUDE_CERF_H_
include/asm-arm/assembler.h
View file @
60f63ed0
...
@@ -25,11 +25,25 @@
...
@@ -25,11 +25,25 @@
#ifndef __ARMEB__
#ifndef __ARMEB__
#define pull lsr
#define pull lsr
#define push lsl
#define push lsl
#define byte(x) (x*8)
#define get_byte_0 lsl #0
#define get_byte_1 lsr #8
#define get_byte_2 lsr #16
#define get_byte_3 lsr #24
#define put_byte_0 lsl #0
#define put_byte_1 lsl #8
#define put_byte_2 lsl #16
#define put_byte_3 lsl #24
#else
#else
#define pull lsl
#define pull lsl
#define push lsr
#define push lsr
#define byte(x) ((3-x)*8)
#define get_byte_0 lsr #24
#define get_byte_1 lsr #16
#define get_byte_2 lsr #8
#define get_byte_3 lsl #0
#define put_byte_0 lsl #24
#define put_byte_1 lsl #16
#define put_byte_2 lsl #8
#define put_byte_3 lsl #0
#endif
#endif
/*
/*
...
...
include/asm-arm/bitops.h
View file @
60f63ed0
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
*
*
* First, the atomic bitops. These use native endian.
* First, the atomic bitops. These use native endian.
*/
*/
static
inline
void
____atomic_set_bit
(
unsigned
int
bit
,
unsigned
long
*
p
)
static
inline
void
____atomic_set_bit
(
unsigned
int
bit
,
volatile
unsigned
long
*
p
)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
unsigned
long
mask
=
1UL
<<
(
bit
&
31
);
unsigned
long
mask
=
1UL
<<
(
bit
&
31
);
...
@@ -41,7 +41,7 @@ static inline void ____atomic_set_bit(unsigned int bit, unsigned long *p)
...
@@ -41,7 +41,7 @@ static inline void ____atomic_set_bit(unsigned int bit, unsigned long *p)
local_irq_restore
(
flags
);
local_irq_restore
(
flags
);
}
}
static
inline
void
____atomic_clear_bit
(
unsigned
int
bit
,
unsigned
long
*
p
)
static
inline
void
____atomic_clear_bit
(
unsigned
int
bit
,
volatile
unsigned
long
*
p
)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
unsigned
long
mask
=
1UL
<<
(
bit
&
31
);
unsigned
long
mask
=
1UL
<<
(
bit
&
31
);
...
@@ -53,7 +53,7 @@ static inline void ____atomic_clear_bit(unsigned int bit, unsigned long *p)
...
@@ -53,7 +53,7 @@ static inline void ____atomic_clear_bit(unsigned int bit, unsigned long *p)
local_irq_restore
(
flags
);
local_irq_restore
(
flags
);
}
}
static
inline
void
____atomic_change_bit
(
unsigned
int
bit
,
unsigned
long
*
p
)
static
inline
void
____atomic_change_bit
(
unsigned
int
bit
,
volatile
unsigned
long
*
p
)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
unsigned
long
mask
=
1UL
<<
(
bit
&
31
);
unsigned
long
mask
=
1UL
<<
(
bit
&
31
);
...
@@ -66,7 +66,7 @@ static inline void ____atomic_change_bit(unsigned int bit, unsigned long *p)
...
@@ -66,7 +66,7 @@ static inline void ____atomic_change_bit(unsigned int bit, unsigned long *p)
}
}
static
inline
int
static
inline
int
____atomic_test_and_set_bit
(
unsigned
int
bit
,
unsigned
long
*
p
)
____atomic_test_and_set_bit
(
unsigned
int
bit
,
volatile
unsigned
long
*
p
)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
unsigned
int
res
;
unsigned
int
res
;
...
@@ -83,7 +83,7 @@ ____atomic_test_and_set_bit(unsigned int bit, unsigned long *p)
...
@@ -83,7 +83,7 @@ ____atomic_test_and_set_bit(unsigned int bit, unsigned long *p)
}
}
static
inline
int
static
inline
int
____atomic_test_and_clear_bit
(
unsigned
int
bit
,
unsigned
long
*
p
)
____atomic_test_and_clear_bit
(
unsigned
int
bit
,
volatile
unsigned
long
*
p
)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
unsigned
int
res
;
unsigned
int
res
;
...
@@ -100,7 +100,7 @@ ____atomic_test_and_clear_bit(unsigned int bit, unsigned long *p)
...
@@ -100,7 +100,7 @@ ____atomic_test_and_clear_bit(unsigned int bit, unsigned long *p)
}
}
static
inline
int
static
inline
int
____atomic_test_and_change_bit
(
unsigned
int
bit
,
unsigned
long
*
p
)
____atomic_test_and_change_bit
(
unsigned
int
bit
,
volatile
unsigned
long
*
p
)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
unsigned
int
res
;
unsigned
int
res
;
...
@@ -171,7 +171,7 @@ static inline int __test_and_change_bit(int nr, volatile unsigned long *p)
...
@@ -171,7 +171,7 @@ static inline int __test_and_change_bit(int nr, volatile unsigned long *p)
/*
/*
* This routine doesn't need to be atomic.
* This routine doesn't need to be atomic.
*/
*/
static
inline
int
__test_bit
(
int
nr
,
const
unsigned
long
*
p
)
static
inline
int
__test_bit
(
int
nr
,
const
volatile
unsigned
long
*
p
)
{
{
return
(
p
[
nr
>>
5
]
>>
(
nr
&
31
))
&
1UL
;
return
(
p
[
nr
>>
5
]
>>
(
nr
&
31
))
&
1UL
;
}
}
...
@@ -204,24 +204,24 @@ static inline int __test_bit(int nr, const unsigned long * p)
...
@@ -204,24 +204,24 @@ static inline int __test_bit(int nr, const unsigned long * p)
/*
/*
* Little endian assembly bitops. nr = 0 -> byte 0 bit 0.
* Little endian assembly bitops. nr = 0 -> byte 0 bit 0.
*/
*/
extern
void
_set_bit_le
(
int
nr
,
unsigned
long
*
p
);
extern
void
_set_bit_le
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
void
_clear_bit_le
(
int
nr
,
unsigned
long
*
p
);
extern
void
_clear_bit_le
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
void
_change_bit_le
(
int
nr
,
unsigned
long
*
p
);
extern
void
_change_bit_le
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
int
_test_and_set_bit_le
(
int
nr
,
unsigned
long
*
p
);
extern
int
_test_and_set_bit_le
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
int
_test_and_clear_bit_le
(
int
nr
,
unsigned
long
*
p
);
extern
int
_test_and_clear_bit_le
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
int
_test_and_change_bit_le
(
int
nr
,
unsigned
long
*
p
);
extern
int
_test_and_change_bit_le
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
int
_find_first_zero_bit_le
(
void
*
p
,
unsigned
size
);
extern
int
_find_first_zero_bit_le
(
void
*
p
,
unsigned
size
);
extern
int
_find_next_zero_bit_le
(
void
*
p
,
int
size
,
int
offset
);
extern
int
_find_next_zero_bit_le
(
void
*
p
,
int
size
,
int
offset
);
/*
/*
* Big endian assembly bitops. nr = 0 -> byte 3 bit 0.
* Big endian assembly bitops. nr = 0 -> byte 3 bit 0.
*/
*/
extern
void
_set_bit_be
(
int
nr
,
unsigned
long
*
p
);
extern
void
_set_bit_be
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
void
_clear_bit_be
(
int
nr
,
unsigned
long
*
p
);
extern
void
_clear_bit_be
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
void
_change_bit_be
(
int
nr
,
unsigned
long
*
p
);
extern
void
_change_bit_be
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
int
_test_and_set_bit_be
(
int
nr
,
unsigned
long
*
p
);
extern
int
_test_and_set_bit_be
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
int
_test_and_clear_bit_be
(
int
nr
,
unsigned
long
*
p
);
extern
int
_test_and_clear_bit_be
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
int
_test_and_change_bit_be
(
int
nr
,
unsigned
long
*
p
);
extern
int
_test_and_change_bit_be
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
int
_find_first_zero_bit_be
(
void
*
p
,
unsigned
size
);
extern
int
_find_first_zero_bit_be
(
void
*
p
,
unsigned
size
);
extern
int
_find_next_zero_bit_be
(
void
*
p
,
int
size
,
int
offset
);
extern
int
_find_next_zero_bit_be
(
void
*
p
,
int
size
,
int
offset
);
...
...
include/asm-arm/cacheflush.h
View file @
60f63ed0
...
@@ -209,8 +209,21 @@ extern void dmac_flush_range(unsigned long, unsigned long);
...
@@ -209,8 +209,21 @@ extern void dmac_flush_range(unsigned long, unsigned long);
#endif
#endif
/*
* flush_cache_vmap() is used when creating mappings (eg, via vmap,
* vmalloc, ioremap etc) in kernel space for pages. Since the
* direct-mappings of these pages may contain cached data, we need
* to do a full cache flush to ensure that writebacks don't corrupt
* data placed into these pages via the new mappings.
*/
#define flush_cache_vmap(start, end) flush_cache_all()
#define flush_cache_vmap(start, end) flush_cache_all()
#define flush_cache_vunmap(start, end) flush_cache_all()
#define flush_cache_vunmap(start, end) flush_cache_all()
/*
* Copy user data from/to a page which is mapped into a different
* processes address space. Really, we want to allow our "user
* space" model to handle this.
*/
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
do { memcpy(dst, src, len); \
do { memcpy(dst, src, len); \
flush_icache_user_range(vma, page, vaddr, len); \
flush_icache_user_range(vma, page, vaddr, len); \
...
...
include/asm-arm/thread_info.h
View file @
60f63ed0
...
@@ -51,8 +51,9 @@ struct thread_info {
...
@@ -51,8 +51,9 @@ struct thread_info {
__u32
cpu
;
/* cpu */
__u32
cpu
;
/* cpu */
__u32
cpu_domain
;
/* cpu domain */
__u32
cpu_domain
;
/* cpu domain */
struct
cpu_context_save
cpu_context
;
/* cpu context */
struct
cpu_context_save
cpu_context
;
/* cpu context */
struct
restart_block
restart_block
;
__u8
used_cp
[
16
];
/* thread used copro */
union
fp_state
fpstate
;
union
fp_state
fpstate
;
struct
restart_block
restart_block
;
};
};
#define INIT_THREAD_INFO(tsk) \
#define INIT_THREAD_INFO(tsk) \
...
@@ -107,7 +108,8 @@ extern void free_thread_info(struct thread_info *);
...
@@ -107,7 +108,8 @@ extern void free_thread_info(struct thread_info *);
#define TI_CPU 20
#define TI_CPU 20
#define TI_CPU_DOMAIN 24
#define TI_CPU_DOMAIN 24
#define TI_CPU_SAVE 28
#define TI_CPU_SAVE 28
#define TI_FPSTATE 76
#define TI_USED_MATH 76
#define TI_FPSTATE (TI_USED_MATH+16)
#endif
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment