diff --git a/src/core/serial.c b/src/core/serial.c index f6d0ecbb..a5b3f913 100644 --- a/src/core/serial.c +++ b/src/core/serial.c @@ -263,6 +263,6 @@ struct startup_fn serial_startup_fn __startup_fn ( STARTUP_NORMAL ) = { * early debug messages. It is safe to call serial_init() multiple * times. */ -struct init_fn serial_init_fn __init_fn ( INIT_EARLY ) = { +struct init_fn serial_init_fn __init_fn ( INIT_CONSOLE ) = { .initialise = serial_init, }; diff --git a/src/core/timer.c b/src/core/timer.c index e736f528..ef80c044 100644 --- a/src/core/timer.c +++ b/src/core/timer.c @@ -22,7 +22,6 @@ #include #include #include -#include static struct timer ts_table[0] __table_start ( struct timer, timers ); @@ -53,48 +52,64 @@ static void timer_init(void) struct timer *ts; for (ts = ts_table; ts < ts_table_end; ts++) { - if (ts->init && ts->init() >= 0) { + if ( ts->init() == 0 ) { used_ts = ts; - break; + return; } } - assert(used_ts); + /* No timer found; we cannot continue */ + assert ( 0 ); + while ( 1 ) {}; } struct init_fn ts_init_fn __init_fn ( INIT_NORMAL ) = { .initialise = timer_init, }; -/* Functions for public use. */ - -tick_t currticks(void) -{ +/** + * Read current time + * + * @ret ticks Current time, in ticks + */ +tick_t currticks ( void ) { tick_t ct; assert(used_ts); ct = used_ts->currticks(); - DBG("currticks: %ld seconds and %06ld microseconds\n", ct/USECS_IN_SEC, ct%USECS_IN_SEC); + DBG ( "currticks: %ld.%06ld seconds\n", + ct / USECS_IN_SEC, ct % USECS_IN_SEC ); return ct; } -void udelay(unsigned int usecs) -{ - used_ts->udelay(usecs); +/** + * Delay + * + * @v usecs Time to delay, in microseconds + */ +void udelay ( unsigned int usecs ) { + assert(used_ts); + used_ts->udelay ( usecs ); } -void mdelay(unsigned int msecs) -{ - while(msecs--) - used_ts->udelay(USECS_IN_MSEC); +/** + * Delay + * + * @v msecs Time to delay, in milliseconds + */ +void mdelay ( unsigned int msecs ) { + while ( msecs-- ) + udelay ( USECS_IN_MSEC ); } -unsigned int sleep(unsigned int secs) -{ - while (secs--) - mdelay(MSECS_IN_SEC); - +/** + * Delay + * + * @v secs Time to delay, in seconds + */ +unsigned int sleep ( unsigned int secs ) { + while ( secs-- ) + mdelay ( MSECS_IN_SEC ); return 0; } - diff --git a/src/include/gpxe/init.h b/src/include/gpxe/init.h index a5caa3e0..d83aa5e5 100644 --- a/src/include/gpxe/init.h +++ b/src/include/gpxe/init.h @@ -22,7 +22,8 @@ struct init_fn { */ #define INIT_EARLY 01 /**< Early initialisation */ -#define INIT_NORMAL 02 /**< Normal initialisation */ +#define INIT_CONSOLE 02 /**< Console initialisation */ +#define INIT_NORMAL 03 /**< Normal initialisation */ /** @} */ @@ -54,14 +55,6 @@ struct startup_fn { /** @} */ -/* Use double digits to avoid problems with "10" < "9" on alphabetic sort */ -#define INIT_CONSOLE 02 -#define INIT_GDBSYM 03 -#define INIT_CPU 04 -#define INIT_TIMERS 05 -#define INIT_LOADBUF 08 -#define INIT_PCMCIA 09 - extern void initialise ( void ); extern void startup ( void ); extern void shutdown ( void ); diff --git a/src/include/gpxe/timer.h b/src/include/gpxe/timer.h index 4a4cf5b2..ecd30001 100644 --- a/src/include/gpxe/timer.h +++ b/src/include/gpxe/timer.h @@ -3,7 +3,7 @@ #include -typedef uint32_t tick_t; +typedef unsigned long tick_t; #define MSECS_IN_SEC (1000) #define USECS_IN_SEC (1000*1000) @@ -11,22 +11,30 @@ typedef uint32_t tick_t; #define TICKS_PER_SEC USECS_IN_SEC -tick_t currticks(void); +extern tick_t currticks ( void ); -void generic_currticks_udelay(unsigned int usecs); +extern void generic_currticks_udelay ( unsigned int usecs ); +/** A timer */ struct timer { - /* Returns zero on successful initialisation. */ - int (*init) (void); - - /* Return the current time, int mictoseconds since the beginning. */ - tick_t (*currticks) (void); - - /* Sleep for a few useconds. */ - void (*udelay) (unsigned int useconds); + /** Initialise timer + * + * @ret rc Return status code + */ + int ( * init ) ( void ); + /** Read current time + * + * @ret ticks Current time, in ticks + */ + tick_t ( * currticks ) ( void ); + /** Delay + * + * @v usecs Time to delay, in microseconds + */ + void ( * udelay ) ( unsigned int usecs ); }; -#define __timer(order) __table (struct timer, timers, order) +#define __timer( order ) __table ( struct timer, timers, order ) #endif /* GPXE_TIMER_H */