#include <Copyright.h>
/********************************************************************************
* platformDeps.c
*
* DESCRIPTION:
*       platform dependent functions
*
* DEPENDENCIES:   Platform.
*
* FILE REVISION NUMBER:
*
*******************************************************************************/

#include <msApi.h>
#include <gtDrvEvents.h>
#include <gtHwCntl.h>
#include <platformDeps.h>

#if 0
/*******************************************************************************
* gtAssignFunctions
*
* DESCRIPTION:
*       Exchange MII access functions and QuarterDeck Int Handler.
*        MII access functions will be called by QuarterDeck driver and
*        QD Int Handler should be called by BSP when BSP sees an interrupt which is related to
*        QD (This interrupt has to be initialized by BSP, since QD has no idea which
*        interrupt is assigned to QD)
*
* INPUTS:
*       fReadMii     - function to read MII registers
*        fWriteMii    - functino to write MII registers
*
* OUTPUTS:
*        None.
*
* RETURNS:
*       GT_TRUE, if input is valid. GT_FALSE, otherwise.
*
* COMMENTS:
*       None.
*
*******************************************************************************/
GT_BOOL gtAssignFunctions
(
   GT_QD_DEV      *dev,
   FGT_READ_MII   fReadMii,
   FGT_WRITE_MII fWriteMii
)
{
    if((fReadMii == NULL) || (fWriteMii == NULL))
        return GT_FALSE;

    dev->fgtReadMii = fReadMii;
    dev->fgtWriteMii = fWriteMii;

    return GT_TRUE;
}

#endif

GT_BOOL defaultMiiRead (unsigned int portNumber , unsigned int miiReg, unsigned int* value)
{
    GT_UNUSED_PARAM(miiReg);

    if (portNumber > GLOBAL_REGS_START_ADDR)
        portNumber -= GLOBAL_REGS_START_ADDR;

    if (portNumber > GLOBAL_REGS_START_ADDR)
        return GT_FALSE;

    *value = 0;

    return GT_TRUE;
}

GT_BOOL defaultMiiWrite (unsigned int portNumber , unsigned int miiReg, unsigned int value)
{
    GT_UNUSED_PARAM(miiReg);

    if (portNumber > GLOBAL_REGS_START_ADDR)
        portNumber -= GLOBAL_REGS_START_ADDR;

    if (portNumber > GLOBAL_REGS_START_ADDR)
        return GT_FALSE;

    value = value;

    return GT_TRUE;
}
