Changeset e6f327c in rtems


Ignore:
Timestamp:
Mar 29, 2012, 11:52:10 AM (8 years ago)
Author:
Daniel Hellstrom <daniel@…>
Branches:
4.11, master
Children:
d0dbcf8
Parents:
e53aae2
git-author:
Daniel Hellstrom <daniel@…> (03/29/12 11:52:10)
git-committer:
Joel Sherrill <joel.sherrill@…> (03/29/12 16:17:42)
Message:

GRETH: removed the use of rtems_set_clock() in auto-nego timeout

Signed-off-by: Daniel Hellstrom <daniel@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/libchip/network/greth.c

    re53aae2 re6f327c  
    9898#define GRETH_AUTONEGO_TIMEOUT_MS 4000
    9999#endif
     100const struct timespec greth_tan = {
     101   GRETH_AUTONEGO_TIMEOUT_MS/1000,
     102   GRETH_AUTONEGO_TIMEOUT_MS*1000000
     103};
    100104
    101105/* For optimizing the autonegotiation time */
     
    148152   int gbit_mac;
    149153   int auto_neg;
    150    unsigned int auto_neg_time;
     154   struct timespec auto_neg_time;
    151155
    152156   /*
     
    265269        }
    266270#ifdef GRETH_AUTONEGO_PRINT_TIME
    267         if ( sc->auto_neg ){
    268           printf("Autonegotiation Time: %dms\n",sc->auto_neg_time);
     271        if ( sc->auto_neg ) {
     272          printf("Autonegotiation Time: %dms\n", sc->auto_neg_time.tv_sec*1000 +
     273                 sc->auto_neg_time.tv_nsec/1000000);
    269274        }
    270275#endif
     
    285290    int tmp1;
    286291    int tmp2;
    287     unsigned int msecs;
    288     struct timeval tstart, tnow;
     292    struct timespec tstart, tnow;
    289293
    290294    greth_regs *regs;
     
    321325    sc->sp = 0;
    322326    sc->auto_neg = 0;
    323     sc->auto_neg_time = 0;
     327    _Timespec_Set_to_zero(&sc->auto_neg_time);
    324328    if ((phyctrl >> 12) & 1) {
    325329            /*wait for auto negotiation to complete*/
    326             msecs = 0;
    327330            sc->auto_neg = 1;
    328             if ( rtems_clock_get_tod_timeval(&tstart) == RTEMS_NOT_DEFINED){
    329                 /* Not inited, set to epoch */
    330                 rtems_time_of_day time;
    331                 time.year   = 1988;
    332                 time.month  = 1;
    333                 time.day    = 1;
    334                 time.hour   = 0;
    335                 time.minute = 0;
    336                 time.second = 0;
    337                 time.ticks  = 0;
    338                 rtems_clock_set(&time);
    339 
    340                 tstart.tv_sec = 0;
    341                 tstart.tv_usec = 0;
    342                 rtems_clock_get_tod_timeval(&tstart);
    343             }
     331            if (rtems_clock_get_uptime(&tstart) != RTEMS_SUCCESSFUL)
     332                    printk("rtems_clock_get_uptime failed\n");
    344333            while (!(((phystatus = read_mii(phyaddr, 1)) >> 5) & 1)) {
    345                     if ( rtems_clock_get_tod_timeval(&tnow) != RTEMS_SUCCESSFUL )
    346                       printk("rtems_clock_get_tod_timeval failed\n\r");
    347                     msecs = (tnow.tv_sec-tstart.tv_sec)*1000+(tnow.tv_usec-tstart.tv_usec)/1000;
    348                     if ( msecs > GRETH_AUTONEGO_TIMEOUT_MS ){
    349                             sc->auto_neg_time = msecs;
     334                    if (rtems_clock_get_uptime(&tnow) != RTEMS_SUCCESSFUL)
     335                            printk("rtems_clock_get_uptime failed\n");
     336                    _Timespec_Subtract(&tstart, &tnow, &sc->auto_neg_time);
     337                    if (_Timespec_Greater_than(&sc->auto_neg_time, &greth_tan)) {
    350338                            sc->auto_neg = -1; /* Failed */
    351339                            tmp1 = read_mii(phyaddr, 0);
     
    355343                            goto auto_neg_done;
    356344                    }
    357             }
    358             sc->auto_neg_time = msecs;
     345                    /* Wait about 30ms, time is PHY dependent */
     346                    rtems_task_wake_after(rtems_clock_get_ticks_per_second()/32);
     347            }
    359348            sc->phydev.adv = read_mii(phyaddr, 4);
    360349            sc->phydev.part = read_mii(phyaddr, 5);
Note: See TracChangeset for help on using the changeset viewer.