コード例 #1
0
ファイル: rtl8201.c プロジェクト: KarenHung/ecosgit
void PhyReset(void)
{
    static int init_done=0;
    unsigned Status;

    if (init_done)
	return;

    init_done=1;

    debug2_printf("Phy addr %d\n",RTL8201_ADDR);
    // first software reset the RTL8201      
    MiiStationWrite(RTL8201_CNTL_REG, RTL8201_ADDR, RTL8201_CNTL_RESET);
    MiiStationWrite(RTL8201_CNTL_REG, RTL8201_ADDR, 0);

    // initialize auto-negotiation capabilities
    MiiStationWrite(RTL8201_ANA_REG,RTL8201_ADDR, 
                    RTL8201_ANA_100TX_FULL+
                    RTL8201_ANA_100TX+
                    RTL8201_ANA_10T_FULL+
                    RTL8201_ANA_10T+
                    RTL8201_ANA_SEL_802_3);
    // Now start an auto negotiation
    debug1_printf("Start auto negotiation\n");
    MiiStationWrite(RTL8201_CNTL_REG, RTL8201_ADDR, 
                    RTL8201_CNTL_AN+
                    RTL8201_CNTL_RSTRT_AN);
}
コード例 #2
0
ファイル: lxt970.c プロジェクト: LucidOne/Rovio
void PhyReset(void)
{
    // first software reset the LX970      
    MiiStationWrite(LX970_CNTL_REG, LX970_ADDR, LX970_CNTL_RESET);
    MiiStationWrite(LX970_CNTL_REG, LX970_ADDR, 0);

    // set low level drive for MII lines, enable interrupt output
    MiiStationWrite(17, LX970_ADDR, BIT3+BIT1);
   
    // default values for 100M encryption are wrong, so fix them
    // and configure LEDC to be activity indicator
     MiiStationWrite(19, LX970_ADDR, BIT7);
  
    // initialize auto-negotiation capabilities
    MiiStationWrite(LX970_ANA_REG,LX970_ADDR, 
                    LX970_ANA_PAUSE_ENA+
                    LX970_ANA_100T4+
                    LX970_ANA_100TX_FULL+
                    LX970_ANA_100TX+
                    LX970_ANA_10T_FULL+
                    LX970_ANA_10T+
                    LX970_ANA_SEL_802_3);
#if 1
    // Now start an auto negotiation
    MiiStationWrite(LX970_CNTL_REG, LX970_ADDR, 
                    LX970_CNTL_AN+
                    LX970_CNTL_RSTRT_AN);
#else
    // force to 10M full duplex
    MiiStationWrite(LX970_CNTL_REG, LX970_ADDR,
                    LX970_CNTL_FULL_DUP);
#endif
}
コード例 #3
0
ファイル: lxt972.c プロジェクト: 0xCA5A/dd-wrt
void PhyReset(void)
{
    unsigned CtrlRegData;
    // First software reset the LX972
    MiiStationWrite(LX972_CTRL_REG, LX972_ADDR, LX972_CTRL_RESET);
    MiiStationWrite(LX972_CTRL_REG, LX972_ADDR, 0);

    // Wait until the LX972 reset cycle has completed
    // The Control register will read 0x7FFF until the reset cycle has completed
    CtrlRegData = 0x7FFF;
    while (CtrlRegData == 0x7FFF)
    {
        CtrlRegData = MiiStationRead(LX972_CTRL_REG, LX972_ADDR);
    }

    // Set up the LEDs' modes
    MiiStationWrite(LX972_LED_CONFIG_REG, LX972_ADDR,
                    (CYGPKG_DEVS_ETH_ARM_KS32C5000_PHY_LXT972_LED1 << LX972_LED_CONFIG_LED1SHIFT)
                  | (CYGPKG_DEVS_ETH_ARM_KS32C5000_PHY_LXT972_LED2 << LX972_LED_CONFIG_LED2SHIFT)
                  | (CYGPKG_DEVS_ETH_ARM_KS32C5000_PHY_LXT972_LED3 << LX972_LED_CONFIG_LED3SHIFT)
                  | LX972_LED_CONFIG_STRETCH_100MS
                  | LX972_LED_CONFIG_ENAB_LED_STRETCH);

    // Set MII drive strength
    MiiStationWrite(LX972_DIG_CONFIG_REG, LX972_ADDR, 0);

    // Enable interrupts
    MiiStationWrite(LX972_INT_ENAB_REG, LX972_ADDR,
                    LX972_INT_ENAB_ANMSK
                  | LX972_INT_ENAB_SPEEDMSK
                  | LX972_INT_ENAB_DUPLEXMSK
                  | LX972_INT_ENAB_LINKMSK
                  | LX972_INT_ENAB_INTEN);

    // Initialize auto-negotiation capabilities
    // Next page not enabled
    MiiStationWrite(LX972_AN_ADVRT_REG, LX972_ADDR,
                    LX972_AN_ADVRT_PAUSE_ENA
                  | LX972_AN_ADVRT_100T4
                  | LX972_AN_ADVRT_100TX_FULL
                  | LX972_AN_ADVRT_100TX
                  | LX972_AN_ADVRT_10T_FULL
                  | LX972_AN_ADVRT_10T
                  | LX972_AN_ADVRT_SEL_802_3);
#if 1
    // Now start an auto negotiation
    MiiStationWrite(LX972_CTRL_REG, LX972_ADDR,
                    LX972_CTRL_AN
                  | LX972_CTRL_RSTRT_AN);
#else
    // force to 10M full duplex
    MiiStationWrite(LX972_CTRL_REG, LX972_ADDR,
                    LX972_CTRL_FULL_DUP);
#endif
}