Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / arch / ppc / osi_calls.h
1 /*
2  *   Creation Date: <2002/06/16 01:40:57 samuel>
3  *   Time-stamp: <2003/12/26 17:02:09 samuel>
4  *
5  *      <osi_calls.h>
6  *
7  *      OSI call inlines
8  *
9  *   Copyright (C) 2002, 2003 Samuel Rydh (samuel@ibrium.se)
10  *
11  *   This program is free software; you can redistribute it and/or
12  *   modify it under the terms of the GNU General Public License
13  *   as published by the Free Software Foundation
14  *
15  */
16
17 #ifndef _H_OSI_CALLS
18 #define _H_OSI_CALLS
19
20 #include "osi.h"
21
22 /* Old gcc versions have a limit on the number of registers used.
23  * Newer gcc versions (gcc 3.3) require that the clobber list does
24  * not overlap declared registers.
25  */
26 #if __GNUC__ == 2 || ( __GNUC__ == 3 && __GNUC_MINOR__ < 3 )
27 #define SHORT_REGLIST
28 #endif
29
30
31 /************************************************************************/
32 /*      OSI call instantiation macros                                   */
33 /************************************************************************/
34
35 #define dreg(n)                 __oc_##n __asm__ (#n)
36 #define ir(n)                   "r" (__oc_##n)
37 #define rr(n)                   "=r" (__oc_##n)
38
39 #define _oc_head( input_regs... )                               \
40 {                                                               \
41         int _ret=0;                                             \
42         {                                                       \
43                 register unsigned long dreg(r3);                \
44                 register unsigned long dreg(r4);                \
45                 register unsigned long dreg(r5)                 \
46                         ,##input_regs ;
47
48 #define _oc_syscall( number, extra_ret_regs... )                \
49                 __oc_r3 = OSI_SC_MAGIC_R3;                      \
50                 __oc_r4 = OSI_SC_MAGIC_R4;                      \
51                 __oc_r5 = number;                               \
52                 __asm__ __volatile__ (                          \
53                   "sc   " : rr(r3) ,## extra_ret_regs
54
55 #define _oc_input( regs... )                                    \
56                 : ir(r3), ir(r4), ir(r5)                        \
57                 , ## regs                                       \
58                 : "memory" );
59
60 /* the tail memory clobber is necessary since we violate the strict
61  * aliasing rules when we return structs through the registers.
62  */
63 #define _oc_tail                                                \
64                 asm volatile ( "" : : : "memory" );             \
65                 _ret = __oc_r3;                                 \
66         }                                                       \
67         return _ret;                                            \
68 }
69
70
71 /************************************************************************/
72 /*      Alternatives                                                    */
73 /************************************************************************/
74
75 #ifdef SHORT_REGLIST
76 #define _oc_syscall_r10w6( number, inputregs... )               \
77                 __oc_r3 = OSI_SC_MAGIC_R3;                      \
78                 __oc_r4 = OSI_SC_MAGIC_R4;                      \
79                 __oc_r5 = number;                               \
80                 __asm__ __volatile__ (                          \
81                   "sc                   \n"                     \
82                   "stw  4,0(10)         \n"                     \
83                   "stw  5,4(10)         \n"                     \
84                   "stw  6,8(10)         \n"                     \
85                   "stw  7,12(10)        \n"                     \
86                   "stw  8,16(10)        \n"                     \
87                   "stw  9,20(10)        \n"                     \
88                 : rr(r3)                                        \
89                 : ir(r3), ir(r4), ir(r5), ir(r10)               \
90                   ,## inputregs                                 \
91                 : "memory",                                     \
92                    "r4", "r5", "r6", "r7", "r8", "r9" );
93 #endif
94
95
96 /************************************************************************/
97 /*      Common helper functions                                         */
98 /************************************************************************/
99
100 #define _osi_call0( type, name, number )                        \
101 type name( void )                                               \
102         _oc_head()                                              \
103         _oc_syscall( number )                                   \
104         _oc_input()                                             \
105         _oc_tail
106
107 #define _osi_call1( type, name, number, type1, arg1 )           \
108 type name( type1 arg1 )                                         \
109         _oc_head( dreg(r6) )                                    \
110         __oc_r6 = (unsigned long)arg1;                          \
111         _oc_syscall( number )                                   \
112         _oc_input( ir(r6) )                                     \
113         _oc_tail
114
115 #define _osi_call2( type, name, number, t1, a1, t2, a2 )        \
116 type name( t1 a1, t2 a2 )                                       \
117         _oc_head( dreg(r6), dreg(r7) )                          \
118         __oc_r6 = (unsigned long)a1;                            \
119         __oc_r7 = (unsigned long)a2;                            \
120         _oc_syscall( number )                                   \
121         _oc_input( ir(r6), ir(r7) )                             \
122         _oc_tail
123
124 #define _osi_call3( type, name, number, t1, a1, t2, a2, t3, a3 ) \
125 type name( t1 a1, t2 a2, t3 a3 )                                \
126         _oc_head( dreg(r6), dreg(r7), dreg(r8) )                \
127         __oc_r6 = (unsigned long)a1;                            \
128         __oc_r7 = (unsigned long)a2;                            \
129         __oc_r8 = (unsigned long)a3;                            \
130         _oc_syscall( number )                                   \
131         _oc_input( ir(r6), ir(r7), ir(r8) )                     \
132         _oc_tail
133
134 #define _osi_call4( type, name, number, t1, a1, t2, a2, t3, a3, t4, a4 ) \
135 type name( t1 a1, t2 a2, t3 a3, t4 a4 )                         \
136         _oc_head( dreg(r6), dreg(r7), dreg(r8), dreg(r9) )      \
137         __oc_r6 = (unsigned long)a1;                            \
138         __oc_r7 = (unsigned long)a2;                            \
139         __oc_r8 = (unsigned long)a3;                            \
140         __oc_r9 = (unsigned long)a4;                            \
141         _oc_syscall( number )                                   \
142         _oc_input( ir(r6), ir(r7), ir(r8), ir(r9) )             \
143         _oc_tail
144
145 #define _osi_call5( type, name, number, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5 ) \
146 type name( t1 a1, t2 a2, t3 a3, t4 a4, t5 a5 )                          \
147         _oc_head( dreg(r6), dreg(r7), dreg(r8), dreg(r9), dreg(r10) )   \
148         __oc_r6 = (unsigned long)a1;                                    \
149         __oc_r7 = (unsigned long)a2;                                    \
150         __oc_r8 = (unsigned long)a3;                                    \
151         __oc_r9 = (unsigned long)a4;                                    \
152         __oc_r10 = (unsigned long)a5;                                   \
153         _oc_syscall( number )                                           \
154         _oc_input( ir(r6), ir(r7), ir(r8), ir(r9), ir(r10) )            \
155         _oc_tail
156
157 #define _osi_call6( type, name, number, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6 ) \
158 type name( t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6 )                           \
159         _oc_head( dreg(r6), dreg(r7), dreg(r8), dreg(r9), dreg(r10), dreg(r11) )\
160         __oc_r6 = (unsigned long)a1;                                    \
161         __oc_r7 = (unsigned long)a2;                                    \
162         __oc_r8 = (unsigned long)a3;                                    \
163         __oc_r9 = (unsigned long)a4;                                    \
164         __oc_r10 = (unsigned long)a5;                                   \
165         __oc_r11 = (unsigned long)a6;                                   \
166         _oc_syscall( number )                                           \
167         _oc_input( ir(r6), ir(r7), ir(r8), ir(r9), ir(r10), ir(r11) )   \
168         _oc_tail
169
170
171 /************************************************************************/
172 /*      Special                                                         */
173 /************************************************************************/
174
175 /* r4 returned in retarg1 pointer */
176 #define _osi_call0_w1( type, name, number, type1, retarg1 )     \
177 type name( type1 retarg1 )                                      \
178         _oc_head()                                              \
179         _oc_syscall( number, rr(r4) )                           \
180         _oc_input()                                             \
181         *retarg1 = __oc_r4;                                     \
182         _oc_tail
183
184 #define _osi_call0_w2( type, name, number, type1, retarg1 )     \
185 type name( type1 retarg1 )                                      \
186         _oc_head()                                              \
187         _oc_syscall( number, rr(r4), rr(r5) )                   \
188         _oc_input()                                             \
189         ((unsigned long*)retarg1)[0] = __oc_r4;                 \
190         ((unsigned long*)retarg1)[1] = __oc_r5;                 \
191         _oc_tail
192
193 /* r4-r8 returned in retarg1 pointer */
194 #define _osi_call0_w5( type, name, number, type1, retarg1 )     \
195 type name( type1 retarg1 )                                      \
196         _oc_head( dreg(r6), dreg(r7), dreg(r8) )                \
197         _oc_syscall( number,                                    \
198                 rr(r4), rr(r5), rr(r6), rr(r7), rr(r8) )        \
199         _oc_input()                                             \
200         ((unsigned long*)retarg1)[0] = __oc_r4;                 \
201         ((unsigned long*)retarg1)[1] = __oc_r5;                 \
202         ((unsigned long*)retarg1)[2] = __oc_r6;                 \
203         ((unsigned long*)retarg1)[3] = __oc_r7;                 \
204         ((unsigned long*)retarg1)[4] = __oc_r8;                 \
205         _oc_tail
206
207 /* r4 returned in retarg pointer */
208 #define _osi_call1_w1( type, name, number, t1, a1, t2, retarg ) \
209 type name( t1 a1, t2 retarg )                                   \
210         _oc_head( dreg(r6) )                                    \
211         __oc_r6 = (unsigned long)a1;                            \
212         _oc_syscall( number, rr(r4) )                           \
213         _oc_input( ir(r6) )                                     \
214         ((unsigned long*)retarg)[0] = __oc_r4;                  \
215         _oc_tail
216
217 /* r4,r5 returned in retarg1, retarg2 */
218 #define _osi_call1_w1w1( type, name, number, t1, a1, t2, retarg1, t3, retarg2 ) \
219 type name( t1 a1, t2 retarg1, t3 retarg2 )                      \
220         _oc_head( dreg(r6) )                                    \
221         __oc_r6 = (unsigned long)a1;                            \
222         _oc_syscall( number, rr(r4), rr(r5) )                   \
223         _oc_input( ir(r6) )                                     \
224         ((unsigned long*)retarg1)[0] = __oc_r4;                 \
225         ((unsigned long*)retarg2)[0] = __oc_r5;                 \
226         _oc_tail
227
228 /* r4,r5 returned in retarg1, retarg2, retarg3 */
229 #define _osi_call1_w1w1w1( type, name, number, t1, a1, t2, retarg1, t3, retarg2, t4, retarg3 ) \
230 type name( t1 a1, t2 retarg1, t3 retarg2, t4 retarg3 )          \
231         _oc_head( dreg(r6) )                                    \
232         __oc_r6 = (unsigned long)a1;                            \
233         _oc_syscall( number, rr(r4), rr(r5), rr(r6) )           \
234         _oc_input( ir(r6) )                                     \
235         ((unsigned long*)retarg1)[0] = __oc_r4;                 \
236         ((unsigned long*)retarg2)[0] = __oc_r5;                 \
237         ((unsigned long*)retarg3)[0] = __oc_r6;                 \
238         _oc_tail
239
240 /* r4,r5 returned in retarg pointer */
241 #define _osi_call1_w2( type, name, number, t1, a1, t2, retarg ) \
242 type name( t1 a1, t2 retarg )                                   \
243         _oc_head( dreg(r6) )                                    \
244         __oc_r6 = (unsigned long)a1;                            \
245         _oc_syscall( number, rr(r4), rr(r5) )                   \
246         _oc_input( ir(r6) )                                     \
247         ((unsigned long*)retarg)[0] = __oc_r4;                  \
248         ((unsigned long*)retarg)[1] = __oc_r5;                  \
249         _oc_tail
250
251 /* r4-r7 returned in retarg pointer */
252 #define _osi_call1_w4( type, name, number, t1, a1, t2, retarg ) \
253 type name( t1 a1, t2 retarg )                                   \
254         _oc_head( dreg(r6), dreg(r7) )                          \
255         __oc_r6 = (unsigned long)a1;                            \
256         _oc_syscall( number, rr(r4), rr(r5), rr(r6), rr(r7) )   \
257         _oc_input( ir(r6) )                                     \
258         ((unsigned long*)retarg)[0] = __oc_r4;                  \
259         ((unsigned long*)retarg)[1] = __oc_r5;                  \
260         ((unsigned long*)retarg)[2] = __oc_r6;                  \
261         ((unsigned long*)retarg)[3] = __oc_r7;                  \
262         _oc_tail
263
264
265 /* r4-r5 returned in retarg pointer */
266 #define _osi_call2_w2( type, name, number, t1, a1, t2, a2, t3, retarg ) \
267 type name( t1 a1, t2 a2, t3 retarg )                            \
268         _oc_head( dreg(r6), dreg(r7) )                          \
269         __oc_r6 = (unsigned long)a1;                            \
270         __oc_r7 = (unsigned long)a2;                            \
271         _oc_syscall( number, rr(r4), rr(r5) )                   \
272         _oc_input( ir(r6), ir(r7) )                             \
273         ((unsigned long*)retarg)[0] = __oc_r4;                  \
274         ((unsigned long*)retarg)[1] = __oc_r5;                  \
275         _oc_tail
276
277 /* r4-r7 returned in retarg pointer */
278 #define _osi_call2_w4( type, name, number, t1, a1, t2, a2, t3, retarg ) \
279 type name( t1 a1, t2 a2, t3 retarg )                            \
280         _oc_head( dreg(r6), dreg(r7) )                          \
281         __oc_r6 = (unsigned long)a1;                            \
282         __oc_r7 = (unsigned long)a2;                            \
283         _oc_syscall( number, rr(r4), rr(r5), rr(r6), rr(r7) )   \
284         _oc_input( ir(r6), ir(r7) )                             \
285         ((unsigned long*)retarg)[0] = __oc_r4;                  \
286         ((unsigned long*)retarg)[1] = __oc_r5;                  \
287         ((unsigned long*)retarg)[2] = __oc_r6;                  \
288         ((unsigned long*)retarg)[3] = __oc_r7;                  \
289         _oc_tail
290
291 #ifdef SHORT_REGLIST
292 /* r4-r9 returned in retarg pointer */
293 #define _osi_call2_w6( type, name, number, t1, a1, t2, a2, t3, retarg ) \
294 type name( t1 a1, t2 a2, t3 retarg )                            \
295         _oc_head( dreg(r6), dreg(r7), dreg(r10) )               \
296         __oc_r6 = (unsigned long)a1;                            \
297         __oc_r7 = (unsigned long)a2;                            \
298         __oc_r10 = (unsigned long)retarg;                       \
299         _oc_syscall_r10w6( number, ir(r6), ir(r7) )             \
300         _oc_tail
301
302 #else /* SHORT_REGLIST */
303
304 /* r4-r9 returned in retarg pointer */
305 #define _osi_call2_w6( type, name, number, t1, a1, t2, a2, t3, retarg ) \
306 type name( t1 a1, t2 a2, t3 retarg )                            \
307         _oc_head( dreg(r6), dreg(r7), dreg(r8), dreg(r9) )      \
308         __oc_r6 = (unsigned long)a1;                            \
309         __oc_r7 = (unsigned long)a2;                            \
310         _oc_syscall( number, rr(r4), rr(r5), rr(r6), rr(r7), rr(r8), rr(r9) )   \
311         _oc_input( ir(r6), ir(r7) )                             \
312         ((unsigned long*)retarg)[0] = __oc_r4;                  \
313         ((unsigned long*)retarg)[1] = __oc_r5;                  \
314         ((unsigned long*)retarg)[2] = __oc_r6;                  \
315         ((unsigned long*)retarg)[3] = __oc_r7;                  \
316         ((unsigned long*)retarg)[4] = __oc_r8;                  \
317         ((unsigned long*)retarg)[5] = __oc_r9;                  \
318         _oc_tail
319
320 #endif /* SHORT_REGLIST */
321
322
323 /************************************************************************/
324 /*      OSI call inlines                                                */
325 /************************************************************************/
326
327 static inline _osi_call1( int, OSI_CallAvailable, OSI_CALL_AVAILABLE, int, osi_num );
328
329 static inline _osi_call1( int, OSI_PutC, OSI_LOG_PUTC, int, ch );
330
331 static inline _osi_call1( int, OSI_Debugger, OSI_DEBUGGER, int, num );
332 static inline _osi_call0( int, OSI_Exit, OSI_EXIT );
333
334 /* misc */
335 static inline _osi_call0( unsigned long, OSI_GetLocalTime, OSI_GET_LOCALTIME );
336 static inline _osi_call0( unsigned long, OSI_GetGMTTime, OSI_GET_GMT_TIME );
337 static inline _osi_call1( int, OSI_USleep, OSI_USLEEP, int, usecs );
338
339 /* NVRAM */
340 static inline _osi_call0( int, OSI_NVRamSize, OSI_NVRAM_SIZE );
341 static inline _osi_call1( int, OSI_ReadNVRamByte, OSI_READ_NVRAM_BYTE, int, offs );
342 static inline _osi_call2( int, OSI_WriteNVRamByte, OSI_WRITE_NVRAM_BYTE, int, offs,
343                           unsigned char, ch );
344
345 /* keyboard stuff */
346 static inline _osi_call0_w1( int, OSI_GetAdbKey2, OSI_GET_ADB_KEY, int *, raw_key );
347 static inline _osi_call1( int, OSI_KbdCntrl, OSI_KBD_CNTRL, int, cmd );
348
349 static inline int OSI_GetAdbKey( void )
350         { int dummy_raw_key; return OSI_GetAdbKey2( &dummy_raw_key ); }
351 static inline _osi_call2( int, OSI_MapAdbKey, OSI_MAP_ADB_KEY, int, keycode, int, adbkey )
352 static inline _osi_call1( int, OSI_KeycodeToAdb, OSI_KEYCODE_TO_ADB, int, keycode );
353 static inline _osi_call0( int, OSI_SaveKeymapping, OSI_SAVE_KEYMAPPING );
354
355 /* mouse support */
356 struct osi_mouse;
357 static inline _osi_call0_w5( int, OSI_GetMouse, OSI_GET_MOUSE, struct osi_mouse *, ret );
358 static inline _osi_call0( int, OSI_GetMouseDPI, OSI_GET_MOUSE_DPI );
359
360 /* video */
361 static inline _osi_call2( int, OSI_SetVMode_, OSI_SET_VMODE, int, mode, int, depth_mode );
362 struct osi_get_vmode_info;
363 static inline _osi_call2_w6( int, OSI_GetVModeInfo_, OSI_GET_VMODE_INFO, int, mode, int, depth_mode,
364                              struct osi_get_vmode_info *, ret );
365 static inline _osi_call1( int, OSI_SetVPowerState, OSI_SET_VIDEO_POWER, int, power_state );
366 static inline _osi_call2( int, OSI_SetColor, OSI_SET_COLOR, int, index, int, rgb );
367 static inline _osi_call0_w1( int, OSI_VideoAckIRQ, OSI_VIDEO_ACK_IRQ, int *, events );
368
369 static inline void OSI_RefreshPalette( void ) { OSI_SetColor(-1,0); }
370
371 /* PIC (mac-io replacement) */
372 static inline _osi_call1( int, OSI_PICMaskIRQ, OSI_PIC_MASK_IRQ, int, irq );
373 static inline _osi_call1( int, OSI_PICUnmaskIRQ, OSI_PIC_UNMASK_IRQ, int, irq );
374 static inline _osi_call2( int, OSI_PICAckIRQ, OSI_PIC_ACK_IRQ, int, irq, int, mask_it );
375 static inline _osi_call0( int, OSI_PICGetActiveIRQ, OSI_PIC_GET_ACTIVE_IRQ );
376
377 /* sound */
378 static inline _osi_call1( int, OSI_SoundCntl, OSI_SOUND_CNTL, int, cmd );
379 static inline _osi_call2( int, OSI_SoundCntl1, OSI_SOUND_CNTL, int, cmd, int, p1 );
380 static inline _osi_call3( int, OSI_SoundCntl2, OSI_SOUND_CNTL, int, cmd, int, p1, int, p2 );
381 static inline _osi_call0_w2( int, OSI_SoundIRQAck, OSI_SOUND_IRQ_ACK, unsigned long *, timestamp );
382 static inline _osi_call3( int, OSI_SoundWrite, OSI_SOUND_WRITE, int, physbuf, int, len, int, restart );
383 static inline _osi_call3( int, OSI_SoundSetVolume, OSI_SOUND_SET_VOLUME, int, hwvol, int, speakervol, int, mute );
384
385 /* async block driver */
386 struct ablk_disk_info;
387 static inline _osi_call2_w4( int, OSI_ABlkDiskInfo, OSI_ABLK_DISK_INFO, int, channel, int, unit,
388                              struct ablk_disk_info *, retinfo );
389 static inline _osi_call1( int, OSI_ABlkKick, OSI_ABLK_KICK, int, channel );
390 static inline _osi_call1_w1w1w1( int, OSI_ABlkIRQAck, OSI_ABLK_IRQ_ACK, int, channel, int *, req_count,
391                                int *, active, int *, events );
392 static inline _osi_call3( int, OSI_ABlkRingSetup, OSI_ABLK_RING_SETUP, int, channel, int, mphys, int, n_el );
393 static inline _osi_call2( int, OSI_ABlkCntrl, OSI_ABLK_CNTRL, int, channel, int, cmd );
394 static inline _osi_call3( int, OSI_ABlkCntrl1, OSI_ABLK_CNTRL, int, channel, int, cmd, int, param );
395 static inline _osi_call5( int, OSI_ABlkSyncRead, OSI_ABLK_SYNC_READ, int, channel, int, unit,
396                           int, blk, unsigned long, mphys, int, size );
397 static inline _osi_call5( int, OSI_ABlkSyncWrite, OSI_ABLK_SYNC_WRITE, int, channel, int, unit,
398                           int, blk, unsigned long, mphys, int, size );
399 static inline _osi_call2( int, OSI_ABlkBlessDisk, OSI_ABLK_BLESS_DISK, int, channel, int, unit );
400
401 static inline _osi_call0( int, OSI_CMountDrvVol, OSI_CMOUNT_DRV_VOL );
402
403 /* enet2 */
404 static inline _osi_call0( int, OSI_Enet2Open, OSI_ENET2_OPEN );
405 static inline _osi_call0( int, OSI_Enet2Close, OSI_ENET2_CLOSE );
406 static inline _osi_call3( int, OSI_Enet2RingSetup, OSI_ENET2_RING_SETUP, int, which_ring,
407                           int, ring_mphys, int, n_el );
408 static inline _osi_call2( int, OSI_Enet2Cntrl1, OSI_ENET2_CNTRL, int, cmd, int, param );
409 static inline _osi_call1( int, OSI_Enet2Cntrl, OSI_ENET2_CNTRL, int, cmd );
410 static inline _osi_call0( int, OSI_Enet2Kick, OSI_ENET2_KICK );
411
412 static inline _osi_call0_w2( int, OSI_Enet2GetHWAddr__, OSI_ENET2_GET_HWADDR, unsigned long *, retbuf );
413 static inline int OSI_Enet2GetHWAddr( unsigned char *addr ) {
414         int ret;
415         unsigned long buf[2];
416
417         ret = OSI_Enet2GetHWAddr__( buf );
418
419         ((unsigned long*)addr)[0] = buf[0];
420         ((unsigned short*)addr)[2] = (buf[1] >> 16);
421         return ret;
422 }
423 static inline _osi_call2( int, OSI_Enet2IRQAck, OSI_ENET2_IRQ_ACK, int, irq_enable, int, rx_head );
424
425 /* PROM (device-tree) */
426 static inline _osi_call2( int, OSI_PromIface, OSI_PROM_IFACE, int, what, int, ph );
427 static inline _osi_call3( int, OSI_PromIface1, OSI_PROM_IFACE, int, what, int, ph, int, p1 );
428 static inline _osi_call4( int, OSI_PromIface2, OSI_PROM_IFACE, int, what, int, ph, int, p1, int, p2 );
429 static inline _osi_call5( int, OSI_PromIface3, OSI_PROM_IFACE, int, what, int, ph, int, p1, int, p2, int, p3 );
430 static inline _osi_call2( int, OSI_PromPathIface, OSI_PROM_PATH_IFACE, int, what, const char *, p );
431
432 /* emulation acceleration */
433 static inline _osi_call1( int, OSI_MapinMregs, OSI_MAPIN_MREGS, unsigned long, mphys );
434 static inline _osi_call3( int, OSI_EmuAccel, OSI_EMUACCEL, int, emuaccel_flags, int, param, int, inst_addr );
435
436 /* timer frequency */
437 static inline _osi_call1( int, OSI_MticksToUsecs, OSI_MTICKS_TO_USECS, unsigned long, mticks );
438 static inline _osi_call1( int, OSI_UsecsToMticks, OSI_USECS_TO_MTICKS, unsigned long, usecs );
439
440 /* fb info */
441 struct osi_fb_info;
442 static inline _osi_call0_w5( int, OSI_GetFBInfo, OSI_GET_FB_INFO, struct osi_fb_info *, retinfo );
443
444 /* SCSI */
445 static inline _osi_call0( int, OSI_SCSIAck, OSI_SCSI_ACK );
446 static inline _osi_call1( int, OSI_SCSISubmit, OSI_SCSI_SUBMIT, int, req_mphys );
447 static inline _osi_call2( int, OSI_SCSIControl, OSI_SCSI_CNTRL, int, sel, int, param );
448
449 /* TTY */
450 static inline _osi_call0( int, OSI_TTYGetc, OSI_TTY_GETC );
451 static inline _osi_call1( int, OSI_TTYPutc, OSI_TTY_PUTC, int, ch );
452 static inline _osi_call0( int, OSI_TTYIRQAck, OSI_TTY_IRQ_ACK );
453
454 #endif   /* _H_OSI_CALLS */