152 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**********************************************************************
 | |
| * $Id$		lpc_phy.h			2011-11-20
 | |
| *//**
 | |
| * @file		lpc_phy.h
 | |
| * @brief	Common PHY definitions used with all PHYs
 | |
| * @version	1.0
 | |
| * @date		20 Nov. 2011
 | |
| * @author	NXP MCU SW Application Team
 | |
| * 
 | |
| * Copyright(C) 2011, NXP Semiconductor
 | |
| * All rights reserved.
 | |
| *
 | |
| ***********************************************************************
 | |
| * Software that is described herein is for illustrative purposes only
 | |
| * which provides customers with programming information regarding the
 | |
| * products. This software is supplied "AS IS" without any warranties.
 | |
| * NXP Semiconductors assumes no responsibility or liability for the
 | |
| * use of the software, conveys no license or title under any patent,
 | |
| * copyright, or mask work right to the product. NXP Semiconductors
 | |
| * reserves the right to make changes in the software without
 | |
| * notification. NXP Semiconductors also make no representation or
 | |
| * warranty that such application will be suitable for the specified
 | |
| * use without further testing or modification.
 | |
| **********************************************************************/
 | |
| 
 | |
| #ifndef __LPC_PHY_H_
 | |
| #define __LPC_PHY_H_
 | |
| 
 | |
| #include "lwip/opt.h"
 | |
| #include "lwip/err.h"
 | |
| #include "lwip/netif.h"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C"
 | |
| {
 | |
| #endif
 | |
| 
 | |
| /* These PHY functions are usually part of the EMAC driver */
 | |
| 
 | |
| /** \brief  Phy status update state machine
 | |
|  *
 | |
|  *  This function provides a state machine for maintaining the PHY
 | |
|  *  status without blocking. It must be occasionally called for the
 | |
|  *  PHY status to be maintained.
 | |
|  *
 | |
|  *  \param[in]     netif   NETIF structure
 | |
|  */
 | |
| s32_t lpc_phy_sts_sm(struct netif *netif);
 | |
| 
 | |
| /** \brief  Initialize the PHY
 | |
|  *
 | |
|  *  This function initializes the PHY. It will block until complete.
 | |
|  *  This function is called as part of the EMAC driver
 | |
|  *  initialization. Configuration of the PHY at startup is
 | |
|  *  controlled by setting up configuration defines in lpc_phy.h.
 | |
|  *
 | |
|  *  \param[in]     netif   NETIF structure
 | |
|  *  \param[in]     rmii    If set, configures the PHY for RMII mode
 | |
|  *  \return        ERR_OK if the setup was successful, otherwise ERR_TIMEOUT
 | |
|  */
 | |
| err_t lpc_phy_init(struct netif *netif, int rmii);
 | |
| 
 | |
| /** \brief  Write a value via the MII link (non-blocking)
 | |
|  *
 | |
|  *  This function will write a value on the MII link interface to a PHY
 | |
|  *  or a connected device. The function will return immediately without
 | |
|  *  a status. Status needs to be polled later to determine if the write
 | |
|  *  was successful.
 | |
|  *
 | |
|  *  \param[in]      PhyReg  PHY register to write to
 | |
|  *  \param[in]      Value   Value to write
 | |
|  */
 | |
| void lpc_mii_write_noblock(u32_t PhyReg, u32_t Value);
 | |
| 
 | |
| /** \brief  Write a value via the MII link (blocking)
 | |
|  *
 | |
|  *  This function will write a value on the MII link interface to a PHY
 | |
|  *  or a connected device. The function will block until complete.
 | |
|  *
 | |
|  *  \param[in]      PhyReg  PHY register to write to
 | |
|  *  \param[in]      Value   Value to write
 | |
|  * \returns         0 if the write was successful, otherwise !0
 | |
|  */
 | |
| err_t lpc_mii_write(u32_t PhyReg, u32_t Value);
 | |
| 
 | |
| /** \brief  Reads current MII link busy status
 | |
|  *
 | |
|  *  This function will return the current MII link busy status and is meant to
 | |
|  *  be used with non-blocking functions for monitor PHY status such as
 | |
|  *  connection state.
 | |
|  *
 | |
|  *  \returns         !0 if the MII link is busy, otherwise 0
 | |
|  */
 | |
| u32_t lpc_mii_is_busy(void);
 | |
| 
 | |
| /** \brief  Starts a read operation via the MII link (non-blocking)
 | |
|  *
 | |
|  *  This function returns the current value in the MII data register. It is
 | |
|  *  meant to be used with the non-blocking oeprations. This value should
 | |
|  *  only be read after a non-block read command has been issued and the
 | |
|  *  MII status has been determined to be good.
 | |
|  *
 | |
|  *  \returns          The current value in the MII value register
 | |
|  */
 | |
| u32_t lpc_mii_read_data(void);
 | |
| 
 | |
| /** \brief  Starts a read operation via the MII link (non-blocking)
 | |
|  *
 | |
|  *  This function will start a read operation on the MII link interface
 | |
|  *  from a PHY or a connected device. The function will not block and
 | |
|  *  the status mist be polled until complete. Once complete, the data
 | |
|  *  can be read.
 | |
|  *
 | |
|  *  \param[in]      PhyReg  PHY register to read from
 | |
|  */
 | |
| err_t lpc_mii_read(u32_t PhyReg, u32_t *data);
 | |
| 
 | |
| /** \brief  Read a value via the MII link (blocking)
 | |
|  *
 | |
|  *  This function will read a value on the MII link interface from a PHY
 | |
|  *  or a connected device. The function will block until complete.
 | |
|  * 
 | |
|  *  \param[in]      PhyReg  PHY register to read from
 | |
|  *  \param[in]      data    Pointer to where to save data read via MII
 | |
|  *  \returns         0 if the read was successful, otherwise !0
 | |
|  */
 | |
| void lpc_mii_read_noblock(u32_t PhyReg);
 | |
| 
 | |
| /**
 | |
|  * This function provides a method for the PHY to setup the EMAC
 | |
|  * for the PHY negotiated duplex mode.
 | |
|  *
 | |
|  * @param[in] full_duplex 0 = half duplex, 1 = full duplex
 | |
|  */
 | |
| void lpc_emac_set_duplex(int full_duplex);
 | |
| 
 | |
| /**
 | |
|  * This function provides a method for the PHY to setup the EMAC
 | |
|  * for the PHY negotiated bit rate.
 | |
|  *
 | |
|  * @param[in] mbs_100     0 = 10mbs mode, 1 = 100mbs mode
 | |
|  */
 | |
| void lpc_emac_set_speed(int mbs_100);
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* __LPC_PHY_H_ */
 | |
| 
 | |
| /* --------------------------------- End Of File ------------------------------ */
 | 
