os.h (21663B)
1 2 /*==================================================================== 3 * os.h 4 * 5 * Copyright 1995, Silicon Graphics, Inc. 6 * All Rights Reserved. 7 * 8 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, 9 * Inc.; the contents of this file may not be disclosed to third 10 * parties, copied or duplicated in any form, in whole or in part, 11 * without the prior written permission of Silicon Graphics, Inc. 12 * 13 * RESTRICTED RIGHTS LEGEND: 14 * Use, duplication or disclosure by the Government is subject to 15 * restrictions as set forth in subdivision (c)(1)(ii) of the Rights 16 * in Technical Data and Computer Software clause at DFARS 17 * 252.227-7013, and/or in similar or successor clauses in the FAR, 18 * DOD or NASA FAR Supplement. Unpublished - rights reserved under the 19 * Copyright Laws of the United States. 20 *====================================================================*/ 21 22 /************************************************************************** 23 * 24 * $Revision: 1.149 $ 25 * $Date: 1997/12/15 04:30:52 $ 26 * $Source: /disk6/Master/cvsmdev2/PR/include/os.h,v $ 27 * 28 **************************************************************************/ 29 30 31 #ifndef _OS_H_ 32 #define _OS_H_ 33 34 #ifdef _LANGUAGE_C_PLUS_PLUS 35 extern "C" { 36 #endif 37 38 #include <PR/ultratypes.h> 39 #include "PR/os_message.h" 40 41 #if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) 42 43 /************************************************************************** 44 * 45 * Type definitions 46 * 47 */ 48 49 /* 50 * Structure for device manager block 51 */ 52 typedef struct { 53 s32 active; /* Status flag */ 54 OSThread *thread; /* Calling thread */ 55 OSMesgQueue *cmdQueue; /* Command queue */ 56 OSMesgQueue *evtQueue; /* Event queue */ 57 OSMesgQueue *acsQueue; /* Access queue */ 58 /* Raw DMA routine */ 59 s32 (*dma)(s32, u32, void *, u32); 60 s32 (*edma)(OSPiHandle *, s32, u32, void *, u32); 61 } OSDevMgr; 62 63 /* 64 * Structure for Profiler 65 */ 66 typedef struct { 67 u16 *histo_base; /* histogram base */ 68 u32 histo_size; /* histogram size */ 69 u32 *text_start; /* start of text segment */ 70 u32 *text_end; /* end of text segment */ 71 } OSProf; 72 73 #endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ 74 75 /************************************************************************** 76 * 77 * Global definitions 78 * 79 */ 80 81 /* Thread states */ 82 83 #define OS_STATE_STOPPED 1 84 #define OS_STATE_RUNNABLE 2 85 #define OS_STATE_RUNNING 4 86 #define OS_STATE_WAITING 8 87 88 /* Flags for debugging purpose */ 89 90 #define OS_FLAG_CPU_BREAK 1 /* Break exception has occurred */ 91 #define OS_FLAG_FAULT 2 /* CPU fault has occurred */ 92 93 /* Interrupt masks */ 94 95 #define OS_IM_NONE 0x00000001 96 #define OS_IM_SW1 0x00000501 97 #define OS_IM_SW2 0x00000601 98 #define OS_IM_CART 0x00000c01 99 #define OS_IM_PRENMI 0x00001401 100 #define OS_IM_RDBWRITE 0x00002401 101 #define OS_IM_RDBREAD 0x00004401 102 #define OS_IM_COUNTER 0x00008401 103 #define OS_IM_CPU 0x0000ff01 104 #define OS_IM_SP 0x00010401 105 #define OS_IM_SI 0x00020401 106 #define OS_IM_AI 0x00040401 107 #define OS_IM_VI 0x00080401 108 #define OS_IM_PI 0x00100401 109 #define OS_IM_DP 0x00200401 110 #define OS_IM_ALL 0x003fff01 111 #define RCP_IMASK 0x003f0000 112 #define RCP_IMASKSHIFT 16 113 114 /* Recommended thread priorities for the system threads */ 115 116 #define OS_PRIORITY_MAX 255 117 #define OS_PRIORITY_VIMGR 254 118 #define OS_PRIORITY_RMON 250 119 #define OS_PRIORITY_RMONSPIN 200 120 #define OS_PRIORITY_PIMGR 150 121 #define OS_PRIORITY_SIMGR 140 122 #define OS_PRIORITY_APPMAX 127 123 #define OS_PRIORITY_IDLE 0 /* Must be 0 */ 124 125 /* Flags to indicate direction of data transfer */ 126 127 #define OS_READ 0 /* device -> RDRAM */ 128 #define OS_WRITE 1 /* device <- RDRAM */ 129 #define OS_OTHERS 2 /* for Leo disk only */ 130 131 /* 132 * I/O message types 133 */ 134 #define OS_MESG_TYPE_BASE (10) 135 #define OS_MESG_TYPE_LOOPBACK (OS_MESG_TYPE_BASE+0) 136 #define OS_MESG_TYPE_DMAREAD (OS_MESG_TYPE_BASE+1) 137 #define OS_MESG_TYPE_DMAWRITE (OS_MESG_TYPE_BASE+2) 138 #define OS_MESG_TYPE_VRETRACE (OS_MESG_TYPE_BASE+3) 139 #define OS_MESG_TYPE_COUNTER (OS_MESG_TYPE_BASE+4) 140 #define OS_MESG_TYPE_EDMAREAD (OS_MESG_TYPE_BASE+5) 141 #define OS_MESG_TYPE_EDMAWRITE (OS_MESG_TYPE_BASE+6) 142 143 /* 144 * I/O message priority 145 */ 146 #define OS_MESG_PRI_NORMAL 0 147 #define OS_MESG_PRI_HIGH 1 148 149 /* 150 * Page size argument for TLB routines 151 */ 152 #define OS_PM_4K 0x0000000 153 #define OS_PM_16K 0x0006000 154 #define OS_PM_64K 0x001e000 155 #define OS_PM_256K 0x007e000 156 #define OS_PM_1M 0x01fe000 157 #define OS_PM_4M 0x07fe000 158 #define OS_PM_16M 0x1ffe000 159 160 /* 161 * Stack size for I/O device managers: PIM (PI Manager), VIM (VI Manager), 162 * SIM (SI Manager) 163 * 164 */ 165 #define OS_PIM_STACKSIZE 4096 166 #define OS_VIM_STACKSIZE 4096 167 #define OS_SIM_STACKSIZE 4096 168 169 #define OS_MIN_STACKSIZE 72 170 171 /* 172 * Values for osTvType 173 */ 174 #define OS_TV_PAL 0 175 #define OS_TV_NTSC 1 176 #define OS_TV_MPAL 2 177 178 /* 179 * Video Interface (VI) mode type 180 */ 181 #define OS_VI_NTSC_LPN1 0 /* NTSC */ 182 #define OS_VI_NTSC_LPF1 1 183 #define OS_VI_NTSC_LAN1 2 184 #define OS_VI_NTSC_LAF1 3 185 #define OS_VI_NTSC_LPN2 4 186 #define OS_VI_NTSC_LPF2 5 187 #define OS_VI_NTSC_LAN2 6 188 #define OS_VI_NTSC_LAF2 7 189 #define OS_VI_NTSC_HPN1 8 190 #define OS_VI_NTSC_HPF1 9 191 #define OS_VI_NTSC_HAN1 10 192 #define OS_VI_NTSC_HAF1 11 193 #define OS_VI_NTSC_HPN2 12 194 #define OS_VI_NTSC_HPF2 13 195 196 #define OS_VI_PAL_LPN1 14 /* PAL */ 197 #define OS_VI_PAL_LPF1 15 198 #define OS_VI_PAL_LAN1 16 199 #define OS_VI_PAL_LAF1 17 200 #define OS_VI_PAL_LPN2 18 201 #define OS_VI_PAL_LPF2 19 202 #define OS_VI_PAL_LAN2 20 203 #define OS_VI_PAL_LAF2 21 204 #define OS_VI_PAL_HPN1 22 205 #define OS_VI_PAL_HPF1 23 206 #define OS_VI_PAL_HAN1 24 207 #define OS_VI_PAL_HAF1 25 208 #define OS_VI_PAL_HPN2 26 209 #define OS_VI_PAL_HPF2 27 210 211 #define OS_VI_MPAL_LPN1 28 /* MPAL - mainly Brazil */ 212 #define OS_VI_MPAL_LPF1 29 213 #define OS_VI_MPAL_LAN1 30 214 #define OS_VI_MPAL_LAF1 31 215 #define OS_VI_MPAL_LPN2 32 216 #define OS_VI_MPAL_LPF2 33 217 #define OS_VI_MPAL_LAN2 34 218 #define OS_VI_MPAL_LAF2 35 219 #define OS_VI_MPAL_HPN1 36 220 #define OS_VI_MPAL_HPF1 37 221 #define OS_VI_MPAL_HAN1 38 222 #define OS_VI_MPAL_HAF1 39 223 #define OS_VI_MPAL_HPN2 40 224 #define OS_VI_MPAL_HPF2 41 225 226 /* 227 * Video Interface (VI) special features 228 */ 229 #define OS_VI_GAMMA_ON 0x0001 230 #define OS_VI_GAMMA_OFF 0x0002 231 #define OS_VI_GAMMA_DITHER_ON 0x0004 232 #define OS_VI_GAMMA_DITHER_OFF 0x0008 233 #define OS_VI_DIVOT_ON 0x0010 234 #define OS_VI_DIVOT_OFF 0x0020 235 #define OS_VI_DITHER_FILTER_ON 0x0040 236 #define OS_VI_DITHER_FILTER_OFF 0x0080 237 238 /* 239 * Video Interface (VI) mode attribute bit 240 */ 241 #define OS_VI_BIT_NONINTERLACE 0x0001 /* lo-res */ 242 #define OS_VI_BIT_INTERLACE 0x0002 /* lo-res */ 243 #define OS_VI_BIT_NORMALINTERLACE 0x0004 /* hi-res */ 244 #define OS_VI_BIT_DEFLICKINTERLACE 0x0008 /* hi-res */ 245 #define OS_VI_BIT_ANTIALIAS 0x0010 246 #define OS_VI_BIT_POINTSAMPLE 0x0020 247 #define OS_VI_BIT_16PIXEL 0x0040 248 #define OS_VI_BIT_32PIXEL 0x0080 249 #define OS_VI_BIT_LORES 0x0100 250 #define OS_VI_BIT_HIRES 0x0200 251 #define OS_VI_BIT_NTSC 0x0400 252 #define OS_VI_BIT_PAL 0x0800 253 254 /* 255 * Leo Disk 256 */ 257 258 /* transfer mode */ 259 260 #define LEO_BLOCK_MODE 1 261 #define LEO_TRACK_MODE 2 262 #define LEO_SECTOR_MODE 3 263 264 /* 265 * Controllers number 266 */ 267 268 #ifndef _HW_VERSION_1 269 #define MAXCONTROLLERS 4 270 #else 271 #define MAXCONTROLLERS 6 272 #endif 273 274 /* controller errors */ 275 #define CONT_NO_RESPONSE_ERROR 0x8 276 #define CONT_OVERRUN_ERROR 0x4 277 #ifdef _HW_VERSION_1 278 #define CONT_FRAME_ERROR 0x2 279 #define CONT_COLLISION_ERROR 0x1 280 #endif 281 282 /* Controller type */ 283 284 #define CONT_ABSOLUTE 0x0001 285 #define CONT_RELATIVE 0x0002 286 #define CONT_JOYPORT 0x0004 287 #define CONT_EEPROM 0x8000 288 #define CONT_EEP16K 0x4000 289 #define CONT_TYPE_MASK 0x1f07 290 #define CONT_TYPE_NORMAL 0x0005 291 #define CONT_TYPE_MOUSE 0x0002 292 293 /* Controller status */ 294 295 #define CONT_CARD_ON 0x01 296 #define CONT_CARD_PULL 0x02 297 #define CONT_ADDR_CRC_ER 0x04 298 #define CONT_EEPROM_BUSY 0x80 299 300 /* EEPROM TYPE */ 301 302 #define EEPROM_TYPE_4K 0x01 303 #define EEPROM_TYPE_16K 0x02 304 305 /* Buttons */ 306 307 #define CONT_A 0x8000 308 #define CONT_B 0x4000 309 #define CONT_G 0x2000 310 #define CONT_START 0x1000 311 #define CONT_UP 0x0800 312 #define CONT_DOWN 0x0400 313 #define CONT_LEFT 0x0200 314 #define CONT_RIGHT 0x0100 315 #define CONT_L 0x0020 316 #define CONT_R 0x0010 317 #define CONT_E 0x0008 318 #define CONT_D 0x0004 319 #define CONT_C 0x0002 320 #define CONT_F 0x0001 321 322 /* Nintendo's official button names */ 323 324 #define A_BUTTON CONT_A 325 #define B_BUTTON CONT_B 326 #define L_TRIG CONT_L 327 #define R_TRIG CONT_R 328 #define Z_TRIG CONT_G 329 #define START_BUTTON CONT_START 330 #define U_JPAD CONT_UP 331 #define L_JPAD CONT_LEFT 332 #define R_JPAD CONT_RIGHT 333 #define D_JPAD CONT_DOWN 334 #define U_CBUTTONS CONT_E 335 #define L_CBUTTONS CONT_C 336 #define R_CBUTTONS CONT_F 337 #define D_CBUTTONS CONT_D 338 339 /* definition for EEPROM */ 340 341 #define EEPROM_MAXBLOCKS 64 342 #define EEP16K_MAXBLOCKS 256 343 #define EEPROM_BLOCK_SIZE 8 344 345 /* 346 * PI/EPI 347 */ 348 #define PI_DOMAIN1 0 349 #define PI_DOMAIN2 1 350 351 /* 352 * Profiler constants 353 */ 354 #define PROF_MIN_INTERVAL 50 /* microseconds */ 355 356 /* 357 * Boot addresses 358 */ 359 #define BOOT_ADDRESS_ULTRA 0x80000400 360 #define BOOT_ADDRESS_COSIM 0x80002000 361 #define BOOT_ADDRESS_EMU 0x20010000 362 #define BOOT_ADDRESS_INDY 0x88100000 363 364 /* 365 * Size of buffer the retains contents after NMI 366 */ 367 #define OS_APP_NMI_BUFSIZE 64 368 369 #if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) 370 371 /************************************************************************** 372 * 373 * Macro definitions 374 * 375 */ 376 377 /* PARTNER-N64 */ 378 #ifdef PTN64 379 #define osReadHost osReadHost_pt 380 #define osWriteHost osWriteHost_pt 381 #endif 382 383 /* Get count of valid messages in queue */ 384 #define MQ_GET_COUNT(mq) ((mq)->validCount) 385 386 /* Figure out if message queue is empty or full */ 387 #define MQ_IS_EMPTY(mq) (MQ_GET_COUNT(mq) == 0) 388 #define MQ_IS_FULL(mq) (MQ_GET_COUNT(mq) >= (mq)->msgCount) 389 390 /* 391 * CPU counter increments at 3/4 of bus clock rate: 392 * 393 * Bus Clock Proc Clock Counter (1/2 Proc Clock) 394 * --------- ---------- ------------------------ 395 * 62.5 Mhz 93.75 Mhz 46.875 Mhz 396 */ 397 extern u64 osClockRate; 398 399 #define OS_CLOCK_RATE 62500000LL 400 #define OS_CPU_COUNTER (OS_CLOCK_RATE*3/4) 401 #define OS_NSEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625000LL))/(1000000000LL/15625000LL)) 402 #define OS_USEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625LL))/(1000000LL/15625LL)) 403 #define OS_CYCLES_TO_NSEC(c) (((u64)(c)*(1000000000LL/15625000LL))/(OS_CPU_COUNTER/15625000LL)) 404 #define OS_CYCLES_TO_USEC(c) (((u64)(c)*(1000000LL/15625LL))/(OS_CPU_COUNTER/15625LL)) 405 406 /************************************************************************** 407 * 408 * Extern variables 409 * 410 */ 411 extern OSViMode osViModeTable[]; /* Global VI mode table */ 412 413 extern OSViMode osViModeNtscLpn1; /* Individual VI NTSC modes */ 414 extern OSViMode osViModeNtscLpf1; 415 extern OSViMode osViModeNtscLan1; 416 extern OSViMode osViModeNtscLaf1; 417 extern OSViMode osViModeNtscLpn2; 418 extern OSViMode osViModeNtscLpf2; 419 extern OSViMode osViModeNtscLan2; 420 extern OSViMode osViModeNtscLaf2; 421 extern OSViMode osViModeNtscHpn1; 422 extern OSViMode osViModeNtscHpf1; 423 extern OSViMode osViModeNtscHan1; 424 extern OSViMode osViModeNtscHaf1; 425 extern OSViMode osViModeNtscHpn2; 426 extern OSViMode osViModeNtscHpf2; 427 428 extern OSViMode osViModePalLpn1; /* Individual VI PAL modes */ 429 extern OSViMode osViModePalLpf1; 430 extern OSViMode osViModePalLan1; 431 extern OSViMode osViModePalLaf1; 432 extern OSViMode osViModePalLpn2; 433 extern OSViMode osViModePalLpf2; 434 extern OSViMode osViModePalLan2; 435 extern OSViMode osViModePalLaf2; 436 extern OSViMode osViModePalHpn1; 437 extern OSViMode osViModePalHpf1; 438 extern OSViMode osViModePalHan1; 439 extern OSViMode osViModePalHaf1; 440 extern OSViMode osViModePalHpn2; 441 extern OSViMode osViModePalHpf2; 442 443 extern OSViMode osViModeMpalLpn1; /* Individual VI MPAL modes */ 444 extern OSViMode osViModeMpalLpf1; 445 extern OSViMode osViModeMpalLan1; 446 extern OSViMode osViModeMpalLaf1; 447 extern OSViMode osViModeMpalLpn2; 448 extern OSViMode osViModeMpalLpf2; 449 extern OSViMode osViModeMpalLan2; 450 extern OSViMode osViModeMpalLaf2; 451 extern OSViMode osViModeMpalHpn1; 452 extern OSViMode osViModeMpalHpf1; 453 extern OSViMode osViModeMpalHan1; 454 extern OSViMode osViModeMpalHaf1; 455 extern OSViMode osViModeMpalHpn2; 456 extern OSViMode osViModeMpalHpf2; 457 458 extern s32 osRomType; /* Bulk or cartridge ROM. 0=cartridge 1=bulk */ 459 extern u32 osRomBase; /* Rom base address of the game image */ 460 extern u32 osTvType; /* 0 = PAL, 1 = NTSC, 2 = MPAL */ 461 extern u32 osResetType; /* 0 = cold reset, 1 = NMI */ 462 extern s32 osCicId; 463 extern s32 osVersion; 464 extern u32 osMemSize; /* Memory Size */ 465 extern s32 osAppNMIBuffer[]; 466 467 extern OSIntMask __OSGlobalIntMask; /* global interrupt mask */ 468 extern OSPiHandle *__osPiTable; /* The head of OSPiHandle link list */ 469 extern OSPiHandle *__osDiskHandle; /* For exceptasm to get disk info*/ 470 471 472 473 /************************************************************************** 474 * 475 * Function prototypes 476 * 477 */ 478 479 /* Thread operations */ 480 481 extern void osCreateThread(OSThread *, OSId, void (*)(void *), 482 void *, void *, OSPri); 483 extern void osDestroyThread(OSThread *); 484 extern void osYieldThread(void); 485 extern void osStartThread(OSThread *); 486 extern void osStopThread(OSThread *); 487 extern OSId osGetThreadId(OSThread *); 488 extern void osSetThreadPri(OSThread *, OSPri); 489 extern OSPri osGetThreadPri(OSThread *); 490 491 /* Message operations */ 492 493 extern void osCreateMesgQueue(OSMesgQueue *, OSMesg *, s32); 494 extern s32 osSendMesg(OSMesgQueue *, OSMesg, s32); 495 extern s32 osJamMesg(OSMesgQueue *, OSMesg, s32); 496 extern s32 osRecvMesg(OSMesgQueue *, OSMesg *, s32); 497 498 /* Event operations */ 499 500 extern void osSetEventMesg(OSEvent, OSMesgQueue *, OSMesg); 501 502 /* Interrupt operations */ 503 504 extern OSIntMask osGetIntMask(void); 505 extern OSIntMask osSetIntMask(OSIntMask); 506 507 /* RDB port operations */ 508 509 extern void osInitRdb(u8 *sendBuf, u32 sendSize); 510 511 /* Cache operations and macros */ 512 513 extern void osInvalDCache(void *, size_t); 514 extern void osInvalICache(void *, size_t); 515 extern void osWritebackDCache(void *, size_t); 516 extern void osWritebackDCacheAll(void); 517 518 #define OS_DCACHE_ROUNDUP_ADDR(x) (void *)(((((u32)(x)+0xf)/0x10)*0x10)) 519 #define OS_DCACHE_ROUNDUP_SIZE(x) (u32)(((((u32)(x)+0xf)/0x10)*0x10)) 520 521 /* TLB management routines */ 522 523 extern void osMapTLB(s32, OSPageMask, void *, u32, u32, s32); 524 extern void osMapTLBRdb(void); 525 extern void osUnmapTLB(s32); 526 extern void osUnmapTLBAll(void); 527 extern void osSetTLBASID(s32); 528 529 /* Address translation routines and macros */ 530 531 extern u32 osVirtualToPhysical(void *); 532 extern void * osPhysicalToVirtual(u32); 533 534 #define OS_K0_TO_PHYSICAL(x) (u32)(((char *)(x)-0x80000000)) 535 #define OS_K1_TO_PHYSICAL(x) (u32)(((char *)(x)-0xa0000000)) 536 537 #define OS_PHYSICAL_TO_K0(x) (void *)(((u32)(x)+0x80000000)) 538 #define OS_PHYSICAL_TO_K1(x) (void *)(((u32)(x)+0xa0000000)) 539 540 /* I/O operations */ 541 542 /* Audio interface (Ai) */ 543 extern u32 osAiGetStatus(void); 544 extern u32 osAiGetLength(void); 545 extern s32 osAiSetFrequency(u32); 546 extern s32 osAiSetNextBuffer(void *, u32); 547 548 /* Display processor interface (Dp) */ 549 extern u32 osDpGetStatus(void); 550 extern void osDpSetStatus(u32); 551 extern void osDpGetCounters(u32 *); 552 extern s32 osDpSetNextBuffer(void *, u64); 553 554 /* Peripheral interface (Pi) */ 555 extern u32 osPiGetStatus(void); 556 extern s32 osPiGetDeviceType(void); 557 extern s32 osPiRawWriteIo(u32, u32); 558 extern s32 osPiRawReadIo(u32, u32 *); 559 extern s32 osPiRawStartDma(s32, u32, void *, u32); 560 extern s32 osPiWriteIo(u32, u32); 561 extern s32 osPiReadIo(u32, u32 *); 562 extern s32 osPiStartDma(OSIoMesg *, s32, s32, u32, void *, u32, 563 OSMesgQueue *); 564 extern void osCreatePiManager(OSPri, OSMesgQueue *, OSMesg *, s32); 565 566 /* Video interface (Vi) */ 567 extern u32 osViGetStatus(void); 568 extern u32 osViGetCurrentMode(void); 569 extern u32 osViGetCurrentLine(void); 570 extern u32 osViGetCurrentField(void); 571 extern void *osViGetCurrentFramebuffer(void); 572 extern void *osViGetNextFramebuffer(void); 573 extern void osViSetXScale(f32); 574 extern void osViSetYScale(f32); 575 extern void osViSetSpecialFeatures(u32); 576 extern void osViSetMode(OSViMode *); 577 extern void osViSetEvent(OSMesgQueue *, OSMesg, u32); 578 extern void osViSwapBuffer(void *); 579 extern void osViBlack(u8); 580 extern void osViFade(u8, u16); 581 extern void osViRepeatLine(u8); 582 extern void osCreateViManager(OSPri); 583 584 /* Timer interface */ 585 586 extern OSTime osGetTime(void); 587 extern void osSetTime(OSTime); 588 extern u32 osSetTimer(OSTimer *, OSTime, OSTime, 589 OSMesgQueue *, OSMesg); 590 extern int osStopTimer(OSTimer *); 591 592 /* Controller interface */ 593 594 extern s32 osContInit(OSMesgQueue *, u8 *, OSContStatus *); 595 extern s32 osContReset(OSMesgQueue *, OSContStatus *); 596 extern s32 osContStartQuery(OSMesgQueue *); 597 extern s32 osContStartReadData(OSMesgQueue *); 598 #ifndef _HW_VERSION_1 599 extern s32 osContSetCh(u8); 600 #endif 601 extern void osContGetQuery(OSContStatus *); 602 extern void osContGetReadData(OSContPad *); 603 604 /* file system interface */ 605 606 extern s32 osPfsInitPak(OSMesgQueue *, OSPfs *, int); 607 extern s32 osPfsRepairId(OSPfs *); 608 extern s32 osPfsInit(OSMesgQueue *, OSPfs *, int); 609 extern s32 osPfsReFormat(OSPfs *, OSMesgQueue *, int); 610 extern s32 osPfsChecker(OSPfs *); 611 extern s32 osPfsAllocateFile(OSPfs *, u16, u32, u8 *, u8 *, int, s32 *); 612 extern s32 osPfsFindFile(OSPfs *, u16, u32, u8 *, u8 *, s32 *); 613 extern s32 osPfsDeleteFile(OSPfs *, u16, u32, u8 *, u8 *); 614 extern s32 osPfsReadWriteFile(OSPfs *, s32, u8, int, int, u8 *); 615 extern s32 osPfsFileState(OSPfs *, s32, OSPfsState *); 616 extern s32 osPfsGetLabel(OSPfs *, u8 *, int *); 617 extern s32 osPfsSetLabel(OSPfs *, u8 *); 618 extern s32 osPfsIsPlug(OSMesgQueue *, u8 *); 619 extern s32 osPfsFreeBlocks(OSPfs *, s32 *); 620 extern s32 osPfsNumFiles(OSPfs *, s32 *, s32 *); 621 622 /* EEPROM interface */ 623 624 extern s32 osEepromProbe(OSMesgQueue *); 625 extern s32 osEepromRead(OSMesgQueue *, u8, u8 *); 626 extern s32 osEepromWrite(OSMesgQueue *, u8, u8 *); 627 extern s32 osEepromLongRead(OSMesgQueue *, u8, u8 *, int); 628 extern s32 osEepromLongWrite(OSMesgQueue *, u8, u8 *, int); 629 630 /* MOTOR interface */ 631 632 extern s32 osMotorInit(OSMesgQueue *, OSPfs *, int); 633 extern s32 osMotorStop(OSPfs *); 634 extern s32 osMotorStart(OSPfs *); 635 636 #ifdef VERSION_CN 637 #define MOTOR_START 1 638 #define MOTOR_STOP 0 639 extern s32 __osMotorAccess(OSPfs *, s32); 640 #endif 641 642 /* Enhanced PI interface */ 643 644 extern OSPiHandle *osCartRomInit(void); 645 extern OSPiHandle *osLeoDiskInit(void); 646 extern OSPiHandle *osDriveRomInit(void); 647 648 extern s32 osEPiDeviceType(OSPiHandle *, OSPiInfo *); 649 extern s32 osEPiRawWriteIo(OSPiHandle *, u32 , u32); 650 extern s32 osEPiRawReadIo(OSPiHandle *, u32 , u32 *); 651 extern s32 osEPiRawStartDma(OSPiHandle *, s32 , u32 , void *, u32 ); 652 extern s32 osEPiWriteIo(OSPiHandle *, u32 , u32 ); 653 extern s32 osEPiReadIo(OSPiHandle *, u32 , u32 *); 654 extern s32 osEPiStartDma(OSPiHandle *, OSIoMesg *, s32); 655 extern s32 osEPiLinkHandle(OSPiHandle *); 656 657 /* Profiler Interface */ 658 659 extern void osProfileInit(OSProf *, u32 profcnt); 660 extern void osProfileStart(u32); 661 extern void osProfileFlush(void); 662 extern void osProfileStop(void); 663 664 /* Game <> Host data transfer functions */ 665 666 extern s32 osTestHost(void); 667 extern void osReadHost(void *, u32); 668 extern void osWriteHost(void *, u32); 669 extern void osAckRamromRead(void); 670 extern void osAckRamromWrite(void); 671 672 673 /* byte string operations */ 674 675 extern void bcopy(const void *, void *, size_t); 676 extern int bcmp(const void *, const void *, int); 677 extern void bzero(void *, size_t); 678 679 /* Miscellaneous operations */ 680 681 extern void osInitialize(void); 682 extern u32 osGetCount(void); 683 extern void osExit(void); 684 extern u32 osGetMemSize(void); 685 686 /* Printf */ 687 688 extern int sprintf(char *s, const char *fmt, ...); 689 extern void osSyncPrintf(const char *fmt, ...); 690 extern void osAsyncPrintf(const char *fmt, ...); 691 extern int osSyncGetChars(char *buf); 692 extern int osAsyncGetChars(char *buf); 693 694 #endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ 695 696 #ifdef _LANGUAGE_C_PLUS_PLUS 697 } 698 #endif 699 700 #endif /* !_OS_H */