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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [m68k/] [ifpsp060/] [iskeleton.S] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2
|MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
3
|M68000 Hi-Performance Microprocessor Division
4
|M68060 Software Package
5
|Production Release P1.00 -- October 10, 1994
6
|
7
|M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
8
|
9
|THE SOFTWARE is provided on an "AS IS" basis and without warranty.
10
|To the maximum extent permitted by applicable law,
11
|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
12
|INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
13
|and any warranty against infringement with regard to the SOFTWARE
14
|(INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
15
|
16
|To the maximum extent permitted by applicable law,
17
|IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
18
|(INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
19
|BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)
20
|ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
21
|Motorola assumes no responsibility for the maintenance and support of the SOFTWARE.
22
|
23
|You are hereby granted a copyright license to use, modify, and distribute the SOFTWARE
24
|so long as this entire notice is retained without alteration in any modified and/or
25
|redistributed versions, and that such modified versions are clearly identified as such.
26
|No licenses are granted by implication, estoppel or otherwise under any patents
27
|or trademarks of Motorola, Inc.
28
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
29
| iskeleton.s
30
|
31
| This file contains:
32
|       (1) example "Call-out"s
33
|       (2) example package entry code
34
|       (3) example "Call-out" table
35
|
36
 
37
#include 
38
#include 
39
#include "../kernel/m68k_defs.h"
40
 
41
 
42
|################################
43
| (1) EXAMPLE CALL-OUTS         #
44
|                               #
45
| _060_isp_done()               #
46
| _060_real_chk()               #
47
| _060_real_divbyzero()         #
48
|                               #
49
| _060_real_cas()               #
50
| _060_real_cas2()              #
51
| _060_real_lock_page()         #
52
| _060_real_unlock_page()       #
53
|################################
54
 
55
|
56
| _060_isp_done():
57
|
58
| This is and example main exit point for the Unimplemented Integer
59
| Instruction exception handler. For a normal exit, the
60
| _isp_unimp() branches to here so that the operating system
61
| can do any clean-up desired. The stack frame is the
62
| Unimplemented Integer Instruction stack frame with
63
| the PC pointing to the instruction following the instruction
64
| just emulated.
65
| To simply continue execution at the next instruction, just
66
| do an "rte".
67
|
68
| Linux/68k: If returning to user space, check for needed reselections.
69
 
70
        .global         _060_isp_done
71
_060_isp_done:
72
        btst    #0x5,%sp@               | supervisor bit set in saved SR?
73
        beq     .Lnotkern
74
        rte
75
.Lnotkern:
76
        SAVE_ALL_INT
77
        GET_CURRENT(%d0)
78
        tstl    %curptr@(TASK_NEEDRESCHED)
79
        jne     SYMBOL_NAME(ret_from_exception) | deliver signals,
80
                                                | reschedule etc..
81
        RESTORE_ALL
82
 
83
|
84
| _060_real_chk():
85
|
86
| This is an alternate exit point for the Unimplemented Integer
87
| Instruction exception handler. If the instruction was a "chk2"
88
| and the operand was out of bounds, then _isp_unimp() creates
89
| a CHK exception stack frame from the Unimplemented Integer Instrcution
90
| stack frame and branches to this routine.
91
|
92
| Linux/68k: commented out test for tracing
93
 
94
        .global         _060_real_chk
95
_060_real_chk:
96
|       tst.b           (%sp)                   | is tracing enabled?
97
|       bpls            real_chk_end            | no
98
 
99
|
100
|           CHK FRAME              TRACE FRAME
101
|       *****************       *****************
102
|       *   Current PC  *       *   Current PC  *
103
|       *****************       *****************
104
|       * 0x2 *  0x018  *       * 0x2 *  0x024  *
105
|       *****************       *****************
106
|       *     Next      *       *     Next      *
107
|       *      PC       *       *      PC       *
108
|       *****************       *****************
109
|       *      SR       *       *      SR       *
110
|       *****************       *****************
111
|
112
|       move.b          #0x24,0x7(%sp)          | set trace vecno
113
|       bral            _060_real_trace
114
 
115
real_chk_end:
116
        bral            SYMBOL_NAME(trap)       | jump to trap handler
117
 
118
|
119
| _060_real_divbyzero:
120
|
121
| This is an alternate exit point for the Unimplemented Integer
122
| Instruction exception handler isp_unimp(). If the instruction is a 64-bit
123
| integer divide where the source operand is a zero, then the _isp_unimp()
124
| creates a Divide-by-zero exception stack frame from the Unimplemented
125
| Integer Instruction stack frame and branches to this routine.
126
|
127
| Remember that a trace exception may be pending. The code below performs
128
| no action associated with the "chk" exception. If tracing is enabled,
129
| then it create a Trace exception stack frame from the "chk" exception
130
| stack frame and branches to the _real_trace() entry point.
131
|
132
| Linux/68k: commented out test for tracing
133
 
134
        .global         _060_real_divbyzero
135
_060_real_divbyzero:
136
|       tst.b           (%sp)                   | is tracing enabled?
137
|       bpls            real_divbyzero_end      | no
138
 
139
|
140
|        DIVBYZERO FRAME           TRACE FRAME
141
|       *****************       *****************
142
|       *   Current PC  *       *   Current PC  *
143
|       *****************       *****************
144
|       * 0x2 *  0x014  *       * 0x2 *  0x024  *
145
|       *****************       *****************
146
|       *     Next      *       *     Next      *
147
|       *      PC       *       *      PC       *
148
|       *****************       *****************
149
|       *      SR       *       *      SR       *
150
|       *****************       *****************
151
|
152
|       move.b          #0x24,0x7(%sp)          | set trace vecno
153
|       bral            _060_real_trace
154
 
155
real_divbyzero_end:
156
        bral            SYMBOL_NAME(trap)       | jump to trap handler
157
 
158
|##########################
159
 
160
|
161
| _060_real_cas():
162
|
163
| Entry point for the selected cas emulation code implementation.
164
| If the implementation provided by the 68060ISP is sufficient,
165
| then this routine simply re-enters the package through _isp_cas.
166
|
167
        .global         _060_real_cas
168
_060_real_cas:
169
        bral            _I_CALL_TOP+0x80+0x08
170
 
171
|
172
| _060_real_cas2():
173
|
174
| Entry point for the selected cas2 emulation code implementation.
175
| If the implementation provided by the 68060ISP is sufficient,
176
| then this routine simply re-enters the package through _isp_cas2.
177
|
178
        .global         _060_real_cas2
179
_060_real_cas2:
180
        bral            _I_CALL_TOP+0x80+0x10
181
 
182
|
183
| _060_lock_page():
184
|
185
| Entry point for the operating system`s routine to "lock" a page
186
| from being paged out. This routine is needed by the cas/cas2
187
| algorithms so that no page faults occur within the "core" code
188
| region. Note: the routine must lock two pages if the operand
189
| spans two pages.
190
| NOTE: THE ROUTINE SHOULD RETURN AN FSLW VALUE IN D0 ON FAILURE
191
| SO THAT THE 060SP CAN CREATE A PROPER ACCESS ERROR FRAME.
192
| Arguments:
193
|       a0 = operand address
194
|       d0 = `xxxxxxff -> supervisor; `xxxxxx00 -> user
195
|       d1 = `xxxxxxff -> longword; `xxxxxx00 -> word
196
| Expected outputs:
197
|       d0 = 0 -> success; non-zero -> failure
198
|
199
| Linux/68k: As long as ints are disabled, no swapping out should
200
| occur (hopefully...)
201
|
202
        .global         _060_real_lock_page
203
_060_real_lock_page:
204
        clr.l           %d0
205
        rts
206
 
207
|
208
| _060_unlock_page():
209
|
210
| Entry point for the operating system`s routine to "unlock" a
211
| page that has been "locked" previously with _real_lock_page.
212
| Note: the routine must unlock two pages if the operand spans
213
| two pages.
214
| Arguments:
215
|       a0 = operand address
216
|       d0 = `xxxxxxff -> supervisor; `xxxxxx00 -> user
217
|       d1 = `xxxxxxff -> longword; `xxxxxx00 -> word
218
|
219
| Linux/68k: As we do no special locking operation, also no unlocking
220
| is needed...
221
 
222
        .global         _060_real_unlock_page
223
_060_real_unlock_page:
224
        clr.l           %d0
225
        rts
226
 
227
|###########################################################################
228
 
229
|#################################
230
| (2) EXAMPLE PACKAGE ENTRY CODE #
231
|#################################
232
 
233
        .global         _060_isp_unimp
234
_060_isp_unimp:
235
        bral            _I_CALL_TOP+0x80+0x00
236
 
237
        .global         _060_isp_cas
238
_060_isp_cas:
239
        bral            _I_CALL_TOP+0x80+0x08
240
 
241
        .global         _060_isp_cas2
242
_060_isp_cas2:
243
        bral            _I_CALL_TOP+0x80+0x10
244
 
245
        .global         _060_isp_cas_finish
246
_060_isp_cas_finish:
247
        bra.l           _I_CALL_TOP+0x80+0x18
248
 
249
        .global         _060_isp_cas2_finish
250
_060_isp_cas2_finish:
251
        bral            _I_CALL_TOP+0x80+0x20
252
 
253
        .global         _060_isp_cas_inrange
254
_060_isp_cas_inrange:
255
        bral            _I_CALL_TOP+0x80+0x28
256
 
257
        .global         _060_isp_cas_terminate
258
_060_isp_cas_terminate:
259
        bral            _I_CALL_TOP+0x80+0x30
260
 
261
        .global         _060_isp_cas_restart
262
_060_isp_cas_restart:
263
        bral            _I_CALL_TOP+0x80+0x38
264
 
265
|###########################################################################
266
 
267
|###############################
268
| (3) EXAMPLE CALL-OUT SECTION #
269
|###############################
270
 
271
| The size of this section MUST be 128 bytes!!!
272
 
273
_I_CALL_TOP:
274
        .long   _060_real_chk           - _I_CALL_TOP
275
        .long   _060_real_divbyzero     - _I_CALL_TOP
276
        .long   _060_real_trace         - _I_CALL_TOP
277
        .long   _060_real_access        - _I_CALL_TOP
278
        .long   _060_isp_done           - _I_CALL_TOP
279
 
280
        .long   _060_real_cas           - _I_CALL_TOP
281
        .long   _060_real_cas2          - _I_CALL_TOP
282
        .long   _060_real_lock_page     - _I_CALL_TOP
283
        .long   _060_real_unlock_page   - _I_CALL_TOP
284
 
285
        .long   0x00000000, 0x00000000, 0x00000000, 0x00000000
286
        .long   0x00000000, 0x00000000, 0x00000000
287
 
288
        .long   _060_imem_read          - _I_CALL_TOP
289
        .long   _060_dmem_read          - _I_CALL_TOP
290
        .long   _060_dmem_write         - _I_CALL_TOP
291
        .long   _060_imem_read_word     - _I_CALL_TOP
292
        .long   _060_imem_read_long     - _I_CALL_TOP
293
        .long   _060_dmem_read_byte     - _I_CALL_TOP
294
        .long   _060_dmem_read_word     - _I_CALL_TOP
295
        .long   _060_dmem_read_long     - _I_CALL_TOP
296
        .long   _060_dmem_write_byte    - _I_CALL_TOP
297
        .long   _060_dmem_write_word    - _I_CALL_TOP
298
        .long   _060_dmem_write_long    - _I_CALL_TOP
299
 
300
        .long   0x00000000
301
        .long   0x00000000, 0x00000000, 0x00000000, 0x00000000
302
 
303
|###########################################################################
304
 
305
| 060 INTEGER KERNEL PACKAGE MUST GO HERE!!!
306
        .include "isp.sa"

powered by: WebSVN 2.1.0

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