From 4006d229e50204c93c1aa04c58385ce2e66d597e Mon Sep 17 00:00:00 2001 From: Alexey Zaytsev Date: Sat, 1 Dec 2007 07:07:01 +0300 Subject: Introduce the new timer subsystem. Timer subsystem initialization code in core/timer.c Split the BIOS and RTDSC timer drivers from i386_timer.c Split arch/i386/firmware/pcbios/bios.c into the RTSDC timer driver and arch/i386/core/nap.c Split the headers properly: include/unistd.h - delay functions to be used by the gPXE core and drivers. include/gpxe/timer.h - the fimer subsystem interface to be used by the timer drivers and currticks() to be used by the code gPXE subsystems. include/latch.h - removed include/timer.h - scheduled for removal. Some driver are using currticks, which is only for core subsystems. Signed-off-by: Alexey Zaytsev --- src/include/gpxe/timer.h | 32 ++++++++++++++++++++++ src/include/timer.h | 70 +++++++++++++----------------------------------- src/include/unistd.h | 8 +++++- 3 files changed, 57 insertions(+), 53 deletions(-) create mode 100644 src/include/gpxe/timer.h (limited to 'src/include') diff --git a/src/include/gpxe/timer.h b/src/include/gpxe/timer.h new file mode 100644 index 000000000..4a4cf5b2f --- /dev/null +++ b/src/include/gpxe/timer.h @@ -0,0 +1,32 @@ +#ifndef GPXE_TIMER_H +#define GPXE_TIMER_H + +#include + +typedef uint32_t tick_t; + +#define MSECS_IN_SEC (1000) +#define USECS_IN_SEC (1000*1000) +#define USECS_IN_MSEC (1000) + +#define TICKS_PER_SEC USECS_IN_SEC + +tick_t currticks(void); + +void generic_currticks_udelay(unsigned int usecs); + +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); +}; + +#define __timer(order) __table (struct timer, timers, order) + +#endif /* GPXE_TIMER_H */ + diff --git a/src/include/timer.h b/src/include/timer.h index 0044d0c07..cd1b2821a 100644 --- a/src/include/timer.h +++ b/src/include/timer.h @@ -1,61 +1,27 @@ -/* Defines for routines to implement a low-overhead timer for drivers */ - - /* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -#ifndef TIMER_H +#ifndef TIMER_H #define TIMER_H -/* Ports for the 8254 timer chip */ -#define TIMER2_PORT 0x42 -#define TIMER_MODE_PORT 0x43 - -/* Meaning of the mode bits */ -#define TIMER0_SEL 0x00 -#define TIMER1_SEL 0x40 -#define TIMER2_SEL 0x80 -#define READBACK_SEL 0xC0 - -#define LATCH_COUNT 0x00 -#define LOBYTE_ACCESS 0x10 -#define HIBYTE_ACCESS 0x20 -#define WORD_ACCESS 0x30 - -#define MODE0 0x00 -#define MODE1 0x02 -#define MODE2 0x04 -#define MODE3 0x06 -#define MODE4 0x08 -#define MODE5 0x0A - -#define BINARY_COUNT 0x00 -#define BCD_COUNT 0x01 +/* + * This file should be removed as soon as there are no + * currticks() abusers. + */ -/* Timers tick over at this rate */ -#define CLOCK_TICK_RATE 1193180U -#define TICKS_PER_MS (CLOCK_TICK_RATE/1000) +#include +/* +#warning Please fix me. I'm abusing the deprecated include/timer.h +*/ +#include -/* Parallel Peripheral Controller Port B */ -#define PPC_PORTB 0x61 +/* Duplicates include/gpxe/timer.h */ +typedef uint32_t tick_t; -/* Meaning of the port bits */ -#define PPCB_T2OUT 0x20 /* Bit 5 */ -#define PPCB_SPKR 0x02 /* Bit 1 */ -#define PPCB_T2GATE 0x01 /* Bit 0 */ +#define MSECS_IN_SEC (1000) +#define USECS_IN_SEC (1000*1000) +#define USECS_IN_MSEC (1000) -/* Ticks must be between 0 and 65535 (0 == 65536) - because it is a 16 bit counter */ -extern void load_timer2(unsigned int ticks); -extern inline int timer2_running(void); -extern void waiton_timer2(unsigned int ticks); +#define TICKS_PER_SEC USECS_IN_SEC -extern void ndelay(unsigned int nsecs); -extern void udelay(unsigned int usecs); -extern void mdelay(unsigned int msecs); +tick_t currticks(void); +#endif -#endif /* TIMER_H */ diff --git a/src/include/unistd.h b/src/include/unistd.h index 35dcf5845..7c44a0ced 100644 --- a/src/include/unistd.h +++ b/src/include/unistd.h @@ -4,7 +4,7 @@ #include #include -extern unsigned int sleep ( unsigned int seconds ); +unsigned int sleep ( unsigned int seconds ); extern int execv ( const char *command, char * const argv[] ); /** @@ -22,4 +22,10 @@ extern int execv ( const char *command, char * const argv[] ); rc; \ } ) +void udelay(unsigned int usecs); +void mdelay(unsigned int msecs); + +#define usleep(x) udelay(x) + + #endif /* _UNISTD_H */ -- cgit v1.2.3-55-g7522