|
|
1.1 ! root 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 ([email protected]) ! 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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.