diff options
author | Alexey Zaytsev | 2007-12-01 05:07:01 +0100 |
---|---|---|
committer | Alexey Zaytsev | 2008-03-02 01:15:07 +0100 |
commit | 4006d229e50204c93c1aa04c58385ce2e66d597e (patch) | |
tree | 1c07ed3523e40304e0c4b81aaa33c6316d1bd11a /src/include | |
parent | [DHCP] Fix RFC4390 client identifier constructions. (diff) | |
download | ipxe-4006d229e50204c93c1aa04c58385ce2e66d597e.tar.gz ipxe-4006d229e50204c93c1aa04c58385ce2e66d597e.tar.xz ipxe-4006d229e50204c93c1aa04c58385ce2e66d597e.zip |
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 <alexey.zaytsev@gmail.com>
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/gpxe/timer.h | 32 | ||||
-rw-r--r-- | src/include/timer.h | 70 | ||||
-rw-r--r-- | src/include/unistd.h | 8 |
3 files changed, 57 insertions, 53 deletions
diff --git a/src/include/gpxe/timer.h b/src/include/gpxe/timer.h new file mode 100644 index 00000000..4a4cf5b2 --- /dev/null +++ b/src/include/gpxe/timer.h @@ -0,0 +1,32 @@ +#ifndef GPXE_TIMER_H +#define GPXE_TIMER_H + +#include <stddef.h> + +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 0044d0c0..cd1b2821 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 <stddef.h> +/* +#warning Please fix me. I'm abusing the deprecated include/timer.h +*/ +#include <unistd.h> -/* 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 35dcf584..7c44a0ce 100644 --- a/src/include/unistd.h +++ b/src/include/unistd.h @@ -4,7 +4,7 @@ #include <stddef.h> #include <stdarg.h> -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 */ |