/**
 * @file IxOsalTypes.h
 *
 * @brief Define OSAL basic data types.
 *
 * This file contains fundamental data types used by OSAL.
 *
 * @par
 * IXP400 SW Release version 2.0
 *
 * -- Copyright Notice --
 *
 * @par
 * Copyright 2001-2005, Intel Corporation.
 * All rights reserved.
 *
 * @par
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the Intel Corporation nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * @par
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * @par
 * -- End of Copyright Notice --
 */


#ifndef IxOsalTypes_H
#define IxOsalTypes_H

#include <config.h>
#include <common.h>

#define __ixp42X			/* sr: U-Boot needs this define */
#define IXP425_EXP_CFG_BASE	0xC4000000
#define diag_printf		debug

#undef SIMSPARCSOLARIS
#define SIMSPARCSOLARIS		0xaffe	/* sr: U-Boot gets confused with this solaris define */

/*
 * Include the OS-specific type definitions
 */
#include "IxOsalOsTypes.h"
/**
 * @defgroup IxOsalTypes Osal basic data types.
 *
 * @brief Basic data types for Osal
 *
 * @{
 */

/**
 * @brief OSAL status
 *
 * @note Possible OSAL return status include IX_SUCCESS and IX_FAIL.
 */
typedef UINT32 IX_STATUS;

/**
 * @brief VUINT32
 *
 * @note volatile UINT32
 */
typedef volatile UINT32 VUINT32;

/**
 * @brief VINT32
 *
 * @note volatile INT32
 */
typedef volatile INT32 VINT32;


#ifndef NUMELEMS
#define NUMELEMS(x) (sizeof(x) / sizeof((x)[0]))
#endif


/**
 * @ingroup IxOsalTypes
 *
 * @def IX_OSAL_BILLION
 *
 * @brief  Alias for 1,000,000,000
 *
 */
#define IX_OSAL_BILLION (1000000000)

#ifndef TRUE
#define TRUE       1L
#endif

#if TRUE != 1
#error TRUE is not defined to 1
#endif

#ifndef FALSE
#define FALSE      0L
#endif

#if FALSE != 0
#error FALSE is not defined to 0
#endif

#ifndef NULL
#define NULL       0L
#endif

/**
 * @ingroup IxOsalTypes
 *
 * @def IX_SUCCESS
 *
 * @brief Success status
 *
 */
#ifndef IX_SUCCESS
#define IX_SUCCESS 0L /**< #defined as 0L */
#endif

/**
 * @ingroup IxOsalTypes
 *
 * @def IX_FAIL
 *
 * @brief Failure status
 *
 */
#ifndef IX_FAIL
#define IX_FAIL    1L /**< #defined as 1L */
#endif


#ifndef PRIVATE
#ifdef IX_PRIVATE_OFF
#define PRIVATE			/* nothing */
#else
#define PRIVATE static	/**< #defined as static, except for debug builds */
#endif /* IX_PRIVATE_OFF */
#endif /* PRIVATE */


/**
 * @ingroup IxOsalTypes
 *
 * @def IX_OSAL_INLINE
 *
 * @brief Alias for __inline
 *
 */
#ifndef IX_OSAL_INLINE
#define IX_OSAL_INLINE __inline
#endif /* IX_OSAL_INLINE */


#ifndef __inline__
#define __inline__	IX_OSAL_INLINE
#endif


/* Each OS can define its own PUBLIC, otherwise it will be empty. */
#ifndef PUBLIC
#define PUBLIC
#endif /* PUBLIC */


/**
 * @ingroup IxOsalTypes
 *
 * @def IX_OSAL_INLINE_EXTERN
 *
 * @brief Alias for __inline extern
 *
 */
#ifndef IX_OSAL_INLINE_EXTERN
#define IX_OSAL_INLINE_EXTERN IX_OSAL_INLINE extern
#endif

/**
 * @ingroup IxOsalTypes
 * @enum IxOsalLogDevice
 * @brief This is an emum for OSAL log devices.
 */
typedef enum
{
    IX_OSAL_LOG_DEV_STDOUT = 0,	       /**< standard output (implemented by default) */
    IX_OSAL_LOG_DEV_STDERR = 1,	       /**< standard error (implemented */
    IX_OSAL_LOG_DEV_HEX_DISPLAY = 2,   /**< hexadecimal display (not implemented) */
    IX_OSAL_LOG_DEV_ASCII_DISPLAY = 3  /**< ASCII-capable display (not implemented) */
} IxOsalLogDevice;


/**
 * @ingroup IxOsalTypes
 *
 * @def IX_OSAL_LOG_ERROR
 *
 * @brief Alias for -1, used as log function error status
 *
 */
#define IX_OSAL_LOG_ERROR (-1)

/**
 * @ingroup IxOsalTypes
 * @enum IxOsalLogLevel
 * @brief This is an emum for OSAL log trace level.
 */
typedef enum
{
    IX_OSAL_LOG_LVL_NONE = 0,	 /**<No trace level */
    IX_OSAL_LOG_LVL_USER = 1,	 /**<Set trace level to user */
    IX_OSAL_LOG_LVL_FATAL = 2,	 /**<Set trace level to fatal */
    IX_OSAL_LOG_LVL_ERROR = 3,	 /**<Set trace level to error */
    IX_OSAL_LOG_LVL_WARNING = 4, /**<Set trace level to warning */
    IX_OSAL_LOG_LVL_MESSAGE = 5, /**<Set trace level to message */
    IX_OSAL_LOG_LVL_DEBUG1 = 6,	 /**<Set trace level to debug1 */
    IX_OSAL_LOG_LVL_DEBUG2 = 7,	 /**<Set trace level to debug2 */
    IX_OSAL_LOG_LVL_DEBUG3 = 8,	 /**<Set trace level to debug3 */
    IX_OSAL_LOG_LVL_ALL	/**<Set trace level to all */
} IxOsalLogLevel;


/**
 * @ingroup IxOsalTypes
 * @brief Void function pointer prototype
 *
 * @note accepts a void pointer parameter
 * and does not return a value.
 */
typedef void (*IxOsalVoidFnVoidPtr) (void *);

typedef void (*IxOsalVoidFnPtr) (void);


/**
 * @brief Timeval structure
 *
 * @note Contain subfields of seconds and nanoseconds..
 */
typedef struct
{
    UINT32 secs;		/**< seconds */
    UINT32 nsecs;		/**< nanoseconds */
} IxOsalTimeval;


/**
 * @ingroup IxOsalTypes
 * @brief IxOsalTimer
 *
 * @note OSAL timer handle
 *
 */
typedef UINT32 IxOsalTimer;


/**
 * @ingroup IxOsalTypes
 *
 * @def IX_OSAL_WAIT_FOREVER
 *
 * @brief Definition for timeout forever, OS-specific.
 *
 */
#define IX_OSAL_WAIT_FOREVER IX_OSAL_OS_WAIT_FOREVER

/**
 * @ingroup IxOsalTypes
 *
 * @def IX_OSAL_WAIT_NONE
 *
 * @brief Definition for timeout 0, OS-specific.
 *
 */
#define IX_OSAL_WAIT_NONE    IX_OSAL_OS_WAIT_NONE


/**
 * @ingroup IxOsalTypes
 * @brief IxOsalMutex
 *
 * @note Mutex handle, OS-specific
 *
 */
typedef IxOsalOsMutex IxOsalMutex;

/**
 * @ingroup IxOsalTypes
 * @brief IxOsalFastMutex
 *
 * @note FastMutex handle, OS-specific
 *
 */
typedef IxOsalOsFastMutex IxOsalFastMutex;

/**
 * @ingroup IxOsalTypes
 * @brief IxOsalThread
 *
 * @note Thread handle, OS-specific
 *
 */
typedef IxOsalOsThread IxOsalThread;

/**
 * @ingroup IxOsalTypes
 * @brief IxOsalSemaphore
 *
 * @note Semaphore handle, OS-specific
 *
 */
typedef IxOsalOsSemaphore IxOsalSemaphore;

/**
 * @ingroup IxOsalTypes
 * @brief IxOsalMessageQueue
 *
 * @note Message Queue handle, OS-specific
 *
 */
typedef IxOsalOsMessageQueue IxOsalMessageQueue;


/**
 * @brief Thread Attribute
 * @note Default thread attribute
 */
typedef struct
{
    char *name;        /**< name */
    UINT32 stackSize;  /**< stack size */
    UINT32 priority;   /**< priority */
} IxOsalThreadAttr;

/**
 * @ingroup IxOsalTypes
 *
 * @def IX_OSAL_THREAD_DEFAULT_STACK_SIZE
 *
 * @brief Default thread stack size, OS-specific.
 *
 */
#define IX_OSAL_THREAD_DEFAULT_STACK_SIZE (IX_OSAL_OS_THREAD_DEFAULT_STACK_SIZE)

/**
 * @ingroup IxOsalTypes
 *
 * @def IX_OSAL_THREAD_MAX_STACK_SIZE
 *
 * @brief Max stack size, OS-specific.
 *
 */
#define IX_OSAL_THREAD_MAX_STACK_SIZE (IX_OSAL_OS_THREAD_MAX_STACK_SIZE)

/**
 * @ingroup IxOsalTypes
 *
 * @def IX_OSAL_DEFAULT_THREAD_PRIORITY
 *
 * @brief Default thread priority, OS-specific.
 *
 */
#define IX_OSAL_DEFAULT_THREAD_PRIORITY (IX_OSAL_OS_DEFAULT_THREAD_PRIORITY)

/**
 * @ingroup IxOsalTypes
 *
 * @def IX_OSAL_MAX_THREAD_PRIORITY
 *
 * @brief Max thread priority, OS-specific.
 *
 */
#define IX_OSAL_MAX_THREAD_PRIORITY (IX_OSAL_OS_MAX_THREAD_PRIORITY)

/**
 * @} IxOsalTypes
 */


#endif /* IxOsalTypes_H */
