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

Subversion Repositories or1k_old

[/] [or1k_old/] [trunk/] [rc203soc/] [sw/] [uClinux/] [arch/] [armnommu/] [drivers/] [sound/] [vidc_fill.S] - Blame information for rev 1782

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1622 jcastillo
/*
2
 * sound/vidc_fill.S
3
 *
4
 * Filler routines for DMA buffers
5
 *
6
 * Copyright (C) 1997 Russell King
7
 */
8
#include 
9
#include 
10
 
11
                .text
12
 
13
                .globl  _vidc_fill_1x8_u
14
_vidc_fill_1x8_u:
15
                mov     ip, #0xff00
16
1:              cmp     r0, r1
17
                bge     _vidc_clear
18
                ldrb    r4, [r0], #1
19
                eor     r4, r4, #0x80
20
                and     r4, ip, r4, lsl #8
21
                orr     r4, r4, r4, lsl #16
22
                str     r4, [r2], #4
23
                cmp     r2, r3
24
                blt     1b
25
                mov     pc, lr
26
 
27
                .globl  _vidc_fill_2x8_u
28
 
29
_vidc_fill_2x8_u:
30
                mov     ip, #0xff00
31
1:              cmp     r0, r1
32
                bge     _vidc_clear
33
                ldr     r4, [r0], #2
34
                and     r5, r4, ip
35
                and     r4, ip, r4, lsl #8
36
                orr     r4, r4, r5, lsl #16
37
                orr     r4, r4, r4, lsr #8
38
                str     r4, [r2], #4
39
                cmp     r2, r3
40
                blt     1b
41
                mov     pc, lr
42
 
43
                .globl  _vidc_fill_1x8_s
44
_vidc_fill_1x8_s:
45
                mov     ip, #0xff00
46
1:              cmp     r0, r1
47
                bge     _vidc_clear
48
                ldrb    r4, [r0], #1
49
                and     r4, ip, r4, lsl #8
50
                orr     r4, r4, r4, lsl #16
51
                str     r4, [r2], #4
52
                cmp     r2, r3
53
                blt     1b
54
                mov     pc, lr
55
 
56
                .globl  _vidc_fill_2x8_s
57
_vidc_fill_2x8_s:
58
                mov     ip, #0xff00
59
1:              cmp     r0, r1
60
                bge     _vidc_clear
61
                ldr     r4, [r0], #2
62
                and     r5, r4, ip
63
                and     r4, ip, r4, lsl #8
64
                orr     r4, r4, r5, lsl #16
65
                orr     r4, r4, r4, lsr #8
66
                str     r4, [r2], #4
67
                cmp     r2, r3
68
                blt     1b
69
                mov     pc, lr
70
 
71
                .globl  _vidc_fill_1x16_s
72
_vidc_fill_1x16_s:
73
                mov     ip, #0xff00
74
                orr     ip, ip, ip, lsr #8
75
1:              cmp     r0, r1
76
                bge     _vidc_clear
77
                ldr     r5, [r0], #2
78
                and     r4, r5, ip
79
                orr     r4, r4, r4, lsl #16
80
                str     r4, [r2], #4
81
                cmp     r0, r1
82
                addlt   r0, r0, #2
83
                andlt   r4, r5, ip, lsl #16
84
                orrlt   r4, r4, r4, lsr #16
85
                strlt   r4, [r2], #4
86
                cmp     r2, r3
87
                blt     1b
88
                mov     pc, lr
89
 
90
                .globl  _vidc_fill_2x16_s
91
_vidc_fill_2x16_s:
92
                mov     ip, #0xff00
93
                orr     ip, ip, ip, lsr #8
94
1:              cmp     r0, r1
95
                bge     _vidc_clear
96
                ldr     r4, [r0], #4
97
                str     r4, [r2], #4
98
                cmp     r0, r1
99
                ldrlt   r4, [r0], #4
100
                strlt   r4, [r2], #4
101
                cmp     r2, r3
102
                blt     1b
103
                mov     pc, lr
104
 
105
_vidc_fill_noaudio:
106
                mov     r0, #0
107
                mov     r1, #0
108
2:              mov     r4, #0
109
                mov     r5, #0
110
1:              cmp     r2, r3
111
                stmltia r2!, {r0, r1, r4, r5}
112
                blt     1b
113
                mov     pc, lr
114
 
115
_vidc_clear:    mov     r0, #0
116
                mov     r1, #0
117
                tst     r2, #4
118
                str     r0, [r2], #4
119
                tst     r2, #8
120
                stmia   r2!, {r0, r1}
121
                b       2b
122
 
123
/*
124
 * Call filler routines with:
125
 *  r0 = phys address
126
 *  r1 = phys end
127
 *  r2 = buffer
128
 * Returns:
129
 *  r0 = new buffer address
130
 *  r2 = new buffer finish
131
 *  r4 = corrupted
132
 *  r5 = corrupted
133
 *  ip = corrupted
134
 */
135
 
136
                .globl  _vidc_sound_dma_irq
137
_vidc_sound_dma_irq:
138
                stmfd   sp!, {r4 - r9, lr}
139
                ldr     r9, =_dma_start
140
                ldmia   r9, {r0, r1, r2, r3, r4, r5}
141
                teq     r1, #0
142
                adreq   r4, _vidc_fill_noaudio
143
                moveq   r8, #1 << 31
144
                movne   r8, #0
145
                mov     ip, #IOMD_BASE & 0xff000000
146
                orr     ip, ip, #IOMD_BASE & 0x00ff0000
147
                ldrb    r7, [ip, #IOMD_SD0ST]
148
                tst     r7, #DMA_ST_OFL                 @ Check for overrun
149
                eorne   r7, r7, #DMA_ST_AB
150
                tst     r7, #DMA_ST_AB
151
                moveq   r2, r3                          @ DMAing A, update B
152
                add     r3, r2, r5                      @ End of DMA buffer
153
                add     r1, r1, r0                      @ End of virtual DMA buffer
154
                mov     lr, pc
155
                mov     pc, r4                          @ Call fill routine
156
                sub     r1, r1, r0                      @ Remaining length
157
                stmia   r9, {r0, r1}
158
                mov     r0, #0
159
                tst     r2, #4                          @ Round buffer up to 4 words
160
                strne   r0, [r2], #4
161
                tst     r2, #8
162
                strne   r0, [r2], #4
163
                strne   r0, [r2], #4
164
                sub     r2, r2, #16
165
                mov     r2, r2, lsl #20
166
                movs    r2, r2, lsr #20
167
                orreq   r2, r2, #1 << 30                @ Set L bit
168
                orr     r2, r2, r8
169
                ldmdb   r9, {r3, r4, r5}
170
                tst     r7, #DMA_ST_AB
171
                mov     ip, #IOMD_BASE & 0xff000000
172
                orr     ip, ip, #IOMD_BASE & 0x00ff0000
173
                streq   r4, [ip, #IOMD_SD0CURB]
174
                strne   r5, [ip, #IOMD_SD0CURA]
175
                streq   r2, [ip, #IOMD_SD0ENDB]
176
                strne   r2, [ip, #IOMD_SD0ENDA]
177
                ldr     r6, [ip, #IOMD_SD0ST]
178
                tst     r6, #DMA_ST_OFL
179
                bne     1f
180
                tst     r7, #DMA_ST_AB
181
                strne   r4, [ip, #IOMD_SD0CURB]
182
                streq   r5, [ip, #IOMD_SD0CURA]
183
                strne   r2, [ip, #IOMD_SD0ENDB]
184
                streq   r2, [ip, #IOMD_SD0ENDA]
185
1:              teq     r8, #0
186
                mov     r0, #0x10
187
                strneb  r0, [ip, #IOMD_SD0CR]
188
                teqeq   r1, #0
189
                ldmfd   sp!, {r4 - r9, lr}
190
                moveq   pc, r3                          @ Call interrupt routine
191
                mov     pc, lr
192
 
193
                .data
194
                .globl  _dma_interrupt
195
_dma_interrupt: .long   0
196
                .globl  _dma_pbuf
197
_dma_pbuf:      .long   0
198
                .long   0
199
                .globl  _dma_start
200
_dma_start:     .long   0
201
                .globl  _dma_count
202
_dma_count:     .long   0
203
                .globl  _dma_buf
204
_dma_buf:       .long   0
205
                .long   0
206
                .globl  _vidc_filler
207
_vidc_filler:   .long   _vidc_fill_noaudio
208
                .globl  _dma_bufsize
209
_dma_bufsize:   .long   0x1000

powered by: WebSVN 2.1.0

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