OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [arch/] [arm/] [lib/] [copy_from_user.S] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 xianfeng
/*
2
 *  linux/arch/arm/lib/copy_from_user.S
3
 *
4
 *  Author:     Nicolas Pitre
5
 *  Created:    Sep 29, 2005
6
 *  Copyright:  MontaVista Software, Inc.
7
 *
8
 *  This program is free software; you can redistribute it and/or modify
9
 *  it under the terms of the GNU General Public License version 2 as
10
 *  published by the Free Software Foundation.
11
 */
12
 
13
#include 
14
#include 
15
 
16
/*
17
 * Prototype:
18
 *
19
 *      size_t __copy_from_user(void *to, const void *from, size_t n)
20
 *
21
 * Purpose:
22
 *
23
 *      copy a block to kernel memory from user memory
24
 *
25
 * Params:
26
 *
27
 *      to = kernel memory
28
 *      from = user memory
29
 *      n = number of bytes to copy
30
 *
31
 * Return value:
32
 *
33
 *      Number of bytes NOT copied.
34
 */
35
 
36
        .macro ldr1w ptr reg abort
37
100:    ldrt \reg, [\ptr], #4
38
        .section __ex_table, "a"
39
        .long 100b, \abort
40
        .previous
41
        .endm
42
 
43
        .macro ldr4w ptr reg1 reg2 reg3 reg4 abort
44
        ldr1w \ptr, \reg1, \abort
45
        ldr1w \ptr, \reg2, \abort
46
        ldr1w \ptr, \reg3, \abort
47
        ldr1w \ptr, \reg4, \abort
48
        .endm
49
 
50
        .macro ldr8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort
51
        ldr4w \ptr, \reg1, \reg2, \reg3, \reg4, \abort
52
        ldr4w \ptr, \reg5, \reg6, \reg7, \reg8, \abort
53
        .endm
54
 
55
        .macro ldr1b ptr reg cond=al abort
56
100:    ldr\cond\()bt \reg, [\ptr], #1
57
        .section __ex_table, "a"
58
        .long 100b, \abort
59
        .previous
60
        .endm
61
 
62
        .macro str1w ptr reg abort
63
        str \reg, [\ptr], #4
64
        .endm
65
 
66
        .macro str8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort
67
        stmia \ptr!, {\reg1, \reg2, \reg3, \reg4, \reg5, \reg6, \reg7, \reg8}
68
        .endm
69
 
70
        .macro str1b ptr reg cond=al abort
71
        str\cond\()b \reg, [\ptr], #1
72
        .endm
73
 
74
        .macro enter reg1 reg2
75
        mov     r3, #0
76
        stmdb   sp!, {r0, r2, r3, \reg1, \reg2}
77
        .endm
78
 
79
        .macro exit reg1 reg2
80
        add     sp, sp, #8
81
        ldmfd   sp!, {r0, \reg1, \reg2}
82
        .endm
83
 
84
        .text
85
 
86
ENTRY(__copy_from_user)
87
 
88
#include "copy_template.S"
89
 
90
        .section .fixup,"ax"
91
        .align 0
92
        copy_abort_preamble
93
        ldmfd   sp!, {r1, r2}
94
        sub     r3, r0, r1
95
        rsb     r1, r3, r2
96
        str     r1, [sp]
97
        bl      __memzero
98
        ldr     r0, [sp], #4
99
        copy_abort_end
100
        .previous
101
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.