static void  DRV_EXTPHY_WOLInterruptMaskSet(DRV_HANDLE hClientObj,int intStaus)
{
	unsigned short	intmask;
    
	DRV_ETHPHY_SMIReadStart(hClientObj,PHY_REG_INT_MASK);
	intmask=DRV_ETHPHY_SMIReadResultGet(hClientObj)&(~0xFE01);	
    if(intStaus == WOL_INT_ENABLED)
    {
        intmask |= WOL_INT8_EN;
    }
    else
    {
        intmask &= ~WOL_INT8_EN;
    }
	DRV_ETHPHY_SMIWriteStart(hClientObj,PHY_REG_INT_MASK, intmask);
}
Example #2
0
/****************************************************************************
 * Function:        DRV_EXTPHY_MIIConfigure
 *
 * PreCondition:    - Communication to the PHY should have been established.
 *
 * Input:   		handle - A valid open-instance handle, returned from the driver's open routine   
 *					cFlags - the requested configuration flags: ETH_PHY_CFG_RMII/ETH_PHY_CFG_MII
 *
 * Output:          ETH_RES_OK - success,
 *                  an error code otherwise
 *
 *
 * Side Effects:    None
 *
 * Overview:        This function configures the PHY in one of MII/RMII operation modes.
 *
 *****************************************************************************/
ETH_RESULT_CODE DRV_EXTPHY_MIIConfigure(DRV_HANDLE hClientObj,ETHPHY_CONFIG_FLAGS cFlags)
{
	unsigned short	phyReg;
	
	
	DRV_ETHPHY_SMIReadStart(hClientObj,PHY_REG_SPECIAL_MODE, PHY_ADDRESS);
	phyReg=DRV_ETHPHY_SMIReadResultGet(hClientObj)&(_SPECIALMODE_PHYAD_MASK|_SPECIALMODE_MODE_MASK);	// not used bits should be 0
	if(cFlags&ETH_PHY_CFG_RMII)
	{
		phyReg|=_SPECIALMODE_MIIMODE_MASK;
	}
	else
	{
		phyReg&=~_SPECIALMODE_MIIMODE_MASK;
	}
	DRV_ETHPHY_SMIWriteStart(hClientObj,PHY_REG_SPECIAL_MODE, PHY_ADDRESS, phyReg);	// update the Special Modes reg
	

	return ETH_RES_OK;	
}
/****************************************************************************
 * Function:        set_sense_any_pkt
 *
 * PreCondition:    Ethernet Initiazation should be completed.
 *
 * Input:         hClientObj - A valid open-instance handle, returned from the driver's open routine
 *
 * Output:        none
 *
 *
 * Side Effects:    None
 *
 * Overview:       This api is used set any packet  for WOL event
 *                       and is only used for IP101GR PHY driver . 
 *                      
 *
 * Note:            None
 *****************************************************************************/
static void set_sense_any_pkt(DRV_HANDLE hClientObj,int anypkt)
{
    unsigned short wol;
    
    DRV_ETHPHY_SMIWriteStart(hClientObj,PHY_REG_PAGE_SEL, PAGENUM_4);
    DRV_ETHPHY_SMIReadStart(hClientObj,PHY_REG_WOL_CNTRL);
    wol = DRV_ETHPHY_SMIReadResultGet(hClientObj);

    if (anypkt)
    {
        wol =  wol | _WOL_SENSE_ANY_PKT_MASK;  
    }
    else
    {
        wol =  wol & ~_WOL_SENSE_ANY_PKT_MASK;  
    }

    DRV_ETHPHY_SMIWriteStart(hClientObj,PHY_REG_WOL_CNTRL, wol);
    DRV_ETHPHY_SMIWriteStart(hClientObj,PHY_REG_PAGE_SEL, PAGENUM_0);
}
static eWOL_STATE check_wol_status(DRV_HANDLE hClientObj)
{
    WOL_OPERATION_MODE mode;
    unsigned short  status; 
    
    DRV_ETHPHY_SMIWriteStart(hClientObj,PHY_REG_PAGE_SEL, PAGENUM_17);
    DRV_ETHPHY_SMIReadStart(hClientObj,PHY_REG_WOL_STATUS);
    status=DRV_ETHPHY_SMIReadResultGet(hClientObj);

    DRV_ETHPHY_SMIWriteStart(hClientObj,PHY_REG_PAGE_SEL, PAGENUM_0);

    mode = read_wol_mode(hClientObj);
    if (mode == WOL_MODE_MASTER)
    {
        if (status & _WOL_PLUS_SLEEPING_STATUS_MASK) 
            return  WOL_SLEEPING;
        else if(status & _WOL_PLUS_WAKE_STATUS_MASK)
            return WOL_WAKEUP;
        else
            return  WOL_NORMAL;
    }
    else
    { 
        status &= (_WOL_PLUS_SLEEPING_STATUS_MASK | _WOL_PLUS_SLEEP_MASK | _WOL_PLUS_WAKE_STATUS_MASK);     
        if (status == _WOL_PLUS_SLEEP_MASK) 
            return  WOL_RDY4SLP;
        else if (status == (_WOL_PLUS_WAKE_STATUS_MASK |_WOL_PLUS_SLEEPING_STATUS_MASK))
            return  WOL_RDY4WAKE;
        else if(status & _WOL_PLUS_WAKE_STATUS_MASK)
            return WOL_RDY4WAKE;
       /* else if (status & _WOL_PLUS_SLEEPING_STATUS_MASK)
            return  WOL_SLEEPING;
            */
        else
            return  WOL_NORMAL; 
    }
}