~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/m68k/ifpsp060/iskeleton.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  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 <linux/linkage.h>
 38 #include <asm/entry.h>
 39 #include <asm/asm-offsets.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         | deliver signals, reschedule etc..
 79         jra     ret_from_exception
 80 
 81 |
 82 | _060_real_chk():
 83 |
 84 | This is an alternate exit point for the Unimplemented Integer
 85 | Instruction exception handler. If the instruction was a "chk2"
 86 | and the operand was out of bounds, then _isp_unimp() creates
 87 | a CHK exception stack frame from the Unimplemented Integer Instrcution
 88 | stack frame and branches to this routine.
 89 |
 90 | Linux/68k: commented out test for tracing
 91 
 92         .global         _060_real_chk
 93 _060_real_chk:
 94 |       tst.b           (%sp)                   | is tracing enabled?
 95 |       bpls            real_chk_end            | no
 96 
 97 |
 98 |           CHK FRAME              TRACE FRAME
 99 |       *****************       *****************
100 |       *   Current PC  *       *   Current PC  *
101 |       *****************       *****************
102 |       * 0x2 *  0x018  *       * 0x2 *  0x024  *
103 |       *****************       *****************
104 |       *     Next      *       *     Next      *
105 |       *      PC       *       *      PC       *
106 |       *****************       *****************
107 |       *      SR       *       *      SR       *
108 |       *****************       *****************
109 |
110 |       move.b          #0x24,0x7(%sp)          | set trace vecno
111 |       bral            _060_real_trace
112 
113 real_chk_end:
114         bral            trap                    | jump to trap handler
115 
116 |
117 | _060_real_divbyzero:
118 |
119 | This is an alternate exit point for the Unimplemented Integer
120 | Instruction exception handler isp_unimp(). If the instruction is a 64-bit
121 | integer divide where the source operand is a zero, then the _isp_unimp()
122 | creates a Divide-by-zero exception stack frame from the Unimplemented
123 | Integer Instruction stack frame and branches to this routine.
124 |
125 | Remember that a trace exception may be pending. The code below performs
126 | no action associated with the "chk" exception. If tracing is enabled,
127 | then it create a Trace exception stack frame from the "chk" exception
128 | stack frame and branches to the _real_trace() entry point.
129 |
130 | Linux/68k: commented out test for tracing
131 
132         .global         _060_real_divbyzero
133 _060_real_divbyzero:
134 |       tst.b           (%sp)                   | is tracing enabled?
135 |       bpls            real_divbyzero_end      | no
136 
137 |
138 |        DIVBYZERO FRAME           TRACE FRAME
139 |       *****************       *****************
140 |       *   Current PC  *       *   Current PC  *
141 |       *****************       *****************
142 |       * 0x2 *  0x014  *       * 0x2 *  0x024  *
143 |       *****************       *****************
144 |       *     Next      *       *     Next      *
145 |       *      PC       *       *      PC       *
146 |       *****************       *****************
147 |       *      SR       *       *      SR       *
148 |       *****************       *****************
149 |
150 |       move.b          #0x24,0x7(%sp)          | set trace vecno
151 |       bral            _060_real_trace
152 
153 real_divbyzero_end:
154         bral            trap                    | jump to trap handler
155 
156 |##########################
157 
158 |
159 | _060_real_cas():
160 |
161 | Entry point for the selected cas emulation code implementation.
162 | If the implementation provided by the 68060ISP is sufficient,
163 | then this routine simply re-enters the package through _isp_cas.
164 |
165         .global         _060_real_cas
166 _060_real_cas:
167         bral            _I_CALL_TOP+0x80+0x08
168 
169 |
170 | _060_real_cas2():
171 |
172 | Entry point for the selected cas2 emulation code implementation.
173 | If the implementation provided by the 68060ISP is sufficient,
174 | then this routine simply re-enters the package through _isp_cas2.
175 |
176         .global         _060_real_cas2
177 _060_real_cas2:
178         bral            _I_CALL_TOP+0x80+0x10
179 
180 |
181 | _060_lock_page():
182 |
183 | Entry point for the operating system`s routine to "lock" a page
184 | from being paged out. This routine is needed by the cas/cas2
185 | algorithms so that no page faults occur within the "core" code
186 | region. Note: the routine must lock two pages if the operand
187 | spans two pages.
188 | NOTE: THE ROUTINE SHOULD RETURN AN FSLW VALUE IN D0 ON FAILURE
189 | SO THAT THE 060SP CAN CREATE A PROPER ACCESS ERROR FRAME.
190 | Arguments:
191 |       a0 = operand address
192 |       d0 = `xxxxxxff -> supervisor; `xxxxxx00 -> user
193 |       d1 = `xxxxxxff -> longword; `xxxxxx00 -> word
194 | Expected outputs:
195 |       d0 = 0 -> success; non-zero -> failure
196 |
197 | Linux/m68k: Make sure the page is properly paged in, so we use
198 | plpaw and handle any exception here. The kernel must not be
199 | preempted until _060_unlock_page(), so that the page stays mapped.
200 |
201         .global         _060_real_lock_page
202 _060_real_lock_page:
203         move.l  %d2,-(%sp)
204         | load sfc/dfc
205         tst.b   %d0
206         jne     1f
207         moveq   #1,%d0
208         jra     2f
209 1:      moveq   #5,%d0
210 2:      movec.l %dfc,%d2
211         movec.l %d0,%dfc
212         movec.l %d0,%sfc
213 
214         clr.l   %d0
215         | prefetch address
216         .chip   68060
217         move.l  %a0,%a1
218 1:      plpaw   (%a1)
219         addq.w  #1,%a0
220         tst.b   %d1
221         jeq     2f
222         addq.w  #2,%a0
223 2:      plpaw   (%a0)
224 3:      .chip   68k
225 
226         | restore sfc/dfc
227         movec.l %d2,%dfc
228         movec.l %d2,%sfc
229         move.l  (%sp)+,%d2
230         rts
231 
232 .section __ex_table,"a"
233         .align  4
234         .long   1b,11f
235         .long   2b,21f
236 .previous
237 .section .fixup,"ax"
238         .even
239 11:     move.l  #0x020003c0,%d0
240         or.l    %d2,%d0
241         swap    %d0
242         jra     3b
243 21:     move.l  #0x02000bc0,%d0
244         or.l    %d2,%d0
245         swap    %d0
246         jra     3b
247 .previous
248 
249 |
250 | _060_unlock_page():
251 |
252 | Entry point for the operating system`s routine to "unlock" a
253 | page that has been "locked" previously with _real_lock_page.
254 | Note: the routine must unlock two pages if the operand spans
255 | two pages.
256 | Arguments:
257 |       a0 = operand address
258 |       d0 = `xxxxxxff -> supervisor; `xxxxxx00 -> user
259 |       d1 = `xxxxxxff -> longword; `xxxxxx00 -> word
260 |
261 | Linux/m68k: perhaps reenable preemption here...
262 
263         .global         _060_real_unlock_page
264 _060_real_unlock_page:
265         clr.l           %d0
266         rts
267 
268 |###########################################################################
269 
270 |#################################
271 | (2) EXAMPLE PACKAGE ENTRY CODE #
272 |#################################
273 
274         .global         _060_isp_unimp
275 _060_isp_unimp:
276         bral            _I_CALL_TOP+0x80+0x00
277 
278         .global         _060_isp_cas
279 _060_isp_cas:
280         bral            _I_CALL_TOP+0x80+0x08
281 
282         .global         _060_isp_cas2
283 _060_isp_cas2:
284         bral            _I_CALL_TOP+0x80+0x10
285 
286         .global         _060_isp_cas_finish
287 _060_isp_cas_finish:
288         bra.l           _I_CALL_TOP+0x80+0x18
289 
290         .global         _060_isp_cas2_finish
291 _060_isp_cas2_finish:
292         bral            _I_CALL_TOP+0x80+0x20
293 
294         .global         _060_isp_cas_inrange
295 _060_isp_cas_inrange:
296         bral            _I_CALL_TOP+0x80+0x28
297 
298         .global         _060_isp_cas_terminate
299 _060_isp_cas_terminate:
300         bral            _I_CALL_TOP+0x80+0x30
301 
302         .global         _060_isp_cas_restart
303 _060_isp_cas_restart:
304         bral            _I_CALL_TOP+0x80+0x38
305 
306 |###########################################################################
307 
308 |###############################
309 | (3) EXAMPLE CALL-OUT SECTION #
310 |###############################
311 
312 | The size of this section MUST be 128 bytes!!!
313 
314 _I_CALL_TOP:
315         .long   _060_real_chk           - _I_CALL_TOP
316         .long   _060_real_divbyzero     - _I_CALL_TOP
317         .long   _060_real_trace         - _I_CALL_TOP
318         .long   _060_real_access        - _I_CALL_TOP
319         .long   _060_isp_done           - _I_CALL_TOP
320 
321         .long   _060_real_cas           - _I_CALL_TOP
322         .long   _060_real_cas2          - _I_CALL_TOP
323         .long   _060_real_lock_page     - _I_CALL_TOP
324         .long   _060_real_unlock_page   - _I_CALL_TOP
325 
326         .long   0x00000000, 0x00000000, 0x00000000, 0x00000000
327         .long   0x00000000, 0x00000000, 0x00000000
328 
329         .long   _060_imem_read          - _I_CALL_TOP
330         .long   _060_dmem_read          - _I_CALL_TOP
331         .long   _060_dmem_write         - _I_CALL_TOP
332         .long   _060_imem_read_word     - _I_CALL_TOP
333         .long   _060_imem_read_long     - _I_CALL_TOP
334         .long   _060_dmem_read_byte     - _I_CALL_TOP
335         .long   _060_dmem_read_word     - _I_CALL_TOP
336         .long   _060_dmem_read_long     - _I_CALL_TOP
337         .long   _060_dmem_write_byte    - _I_CALL_TOP
338         .long   _060_dmem_write_word    - _I_CALL_TOP
339         .long   _060_dmem_write_long    - _I_CALL_TOP
340 
341         .long   0x00000000
342         .long   0x00000000, 0x00000000, 0x00000000, 0x00000000
343 
344 |###########################################################################
345 
346 | 060 INTEGER KERNEL PACKAGE MUST GO HERE!!!
347 #include "isp.sa"

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php