    /*====================================================================
     * os_convert.h
     *
     * Copyright 1995, Silicon Graphics, Inc.
     * All Rights Reserved.
     *
     * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
     * Inc.; the contents of this file may not be disclosed to third
     * parties, copied or duplicated in any form, in whole or in part,
     * without the prior written permission of Silicon Graphics, Inc.
     *
     * RESTRICTED RIGHTS LEGEND:
     * Use, duplication or disclosure by the Government is subject to
     * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
     * in Technical Data and Computer Software clause at DFARS
     * 252.227-7013, and/or in similar or successor clauses in the FAR,
     * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
     * Copyright Laws of the United States.
     *====================================================================*/

    /*---------------------------------------------------------------------*
            Copyright (C) 1998 Nintendo. (Originated by SGI)

            $RCSfile: os_convert.h,v $
            $Revision: 1.1 $
            $Date: 1998/10/09 08:01:05 $
     *---------------------------------------------------------------------*/

    #ifndef _OS_CONVERT_H_
    #define	_OS_CONVERT_H_

    #ifdef _LANGUAGE_C_PLUS_PLUS
    extern "C" {
    #endif

    #include <PR/ultratypes.h>

    #if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)

    /**************************************************************************
     *
     * Type definitions
     *
     */

    #endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */

    /**************************************************************************
     *
     * Global definitions
     *
     */

    #define	OS_CLOCK_RATE		62500000LL
    #define	OS_CPU_COUNTER		(OS_CLOCK_RATE*3/4)

    #if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)

    /**************************************************************************
     *
     * Macro definitions
     *
     */

    #define OS_NSEC_TO_CYCLES(n)	(((u64)(n)*(OS_CPU_COUNTER/15625000LL))/(1000000000LL/15625000LL))
    #define OS_USEC_TO_CYCLES(n)	(((u64)(n)*(OS_CPU_COUNTER/15625LL))/(1000000LL/15625LL))
    #define OS_CYCLES_TO_NSEC(c)	(((u64)(c)*(1000000000LL/15625000LL))/(OS_CPU_COUNTER/15625000LL))
    #define OS_CYCLES_TO_USEC(c)	(((u64)(c)*(1000000LL/15625LL))/(OS_CPU_COUNTER/15625LL))

    #define	OS_K0_TO_PHYSICAL(x)	(u32)(((char *)(x)-0x80000000))
    #define	OS_K1_TO_PHYSICAL(x)	(u32)(((char *)(x)-0xa0000000))

    #define	OS_PHYSICAL_TO_K0(x)	(void *)(((u32)(x)+0x80000000))
    #define	OS_PHYSICAL_TO_K1(x)	(void *)(((u32)(x)+0xa0000000))

    /**************************************************************************
     *
     * Extern variables
     *
     */

    /**************************************************************************
     *
     * Function prototypes
     *
     */

    /* Address translation routines and macros */

    extern u32		 osVirtualToPhysical(void *);
    extern void *		 osPhysicalToVirtual(u32);

    #endif  /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */

    #ifdef _LANGUAGE_C_PLUS_PLUS
    }
    #endif

    #endif /* !_OS_CONVERT_H_ */