#include <stddef.h>#include <gpxe/timer2.h>#include <gpxe/io.h>Go to the source code of this file.
Defines | |
| #define | TIMER2_TICKS_PER_SEC 1193180U |
| #define | PPC_PORTB 0x61 |
| #define | PPCB_T2OUT 0x20 |
| #define | PPCB_SPKR 0x02 |
| #define | PPCB_T2GATE 0x01 |
| #define | TIMER2_PORT 0x42 |
| #define | TIMER_MODE_PORT 0x43 |
| #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 |
Functions | |
| FILE_LICENCE (GPL2_OR_LATER) | |
| static void | load_timer2 (unsigned int ticks) |
| static int | timer2_running (void) |
| void | timer2_udelay (unsigned long usecs) |
| #define TIMER2_TICKS_PER_SEC 1193180U |
| #define PPC_PORTB 0x61 |
| #define PPCB_T2OUT 0x20 |
| #define PPCB_SPKR 0x02 |
| #define PPCB_T2GATE 0x01 |
| #define TIMER2_PORT 0x42 |
| #define TIMER_MODE_PORT 0x43 |
| #define TIMER2_SEL 0x80 |
| #define WORD_ACCESS 0x30 |
| #define MODE0 0x00 |
| #define BINARY_COUNT 0x00 |
| FILE_LICENCE | ( | GPL2_OR_LATER | ) |
| static void load_timer2 | ( | unsigned int | ticks | ) | [static] |
Definition at line 56 of file timer2.c.
References BINARY_COUNT, inb, MODE0, outb, PPC_PORTB, PPCB_SPKR, PPCB_T2GATE, TIMER2_PORT, TIMER2_SEL, TIMER_MODE_PORT, and WORD_ACCESS.
Referenced by timer2_udelay().
00056 { 00057 /* 00058 * Now let's take care of PPC channel 2 00059 * 00060 * Set the Gate high, program PPC channel 2 for mode 0, 00061 * (interrupt on terminal count mode), binary count, 00062 * load 5 * LATCH count, (LSB and MSB) to begin countdown. 00063 * 00064 * Note some implementations have a bug where the high bits byte 00065 * of channel 2 is ignored. 00066 */ 00067 /* Set up the timer gate, turn off the speaker */ 00068 /* Set the Gate high, disable speaker */ 00069 outb((inb(PPC_PORTB) & ~PPCB_SPKR) | PPCB_T2GATE, PPC_PORTB); 00070 /* binary, mode 0, LSB/MSB, Ch 2 */ 00071 outb(TIMER2_SEL|WORD_ACCESS|MODE0|BINARY_COUNT, TIMER_MODE_PORT); 00072 /* LSB of ticks */ 00073 outb(ticks & 0xFF, TIMER2_PORT); 00074 /* MSB of ticks */ 00075 outb(ticks >> 8, TIMER2_PORT); 00076 }
| static int timer2_running | ( | void | ) | [static] |
Definition at line 78 of file timer2.c.
References inb, PPC_PORTB, and PPCB_T2OUT.
Referenced by timer2_udelay().
00078 { 00079 return ((inb(PPC_PORTB) & PPCB_T2OUT) == 0); 00080 }
| void timer2_udelay | ( | unsigned long | usecs | ) |
Definition at line 82 of file timer2.c.
References load_timer2(), timer2_running(), and TIMER2_TICKS_PER_SEC.
Referenced by rdtsc_udelay(), and TIMER_INLINE().
00082 { 00083 load_timer2 ( ( usecs * TIMER2_TICKS_PER_SEC ) / ( 1000 * 1000 ) ); 00084 while (timer2_running()) { 00085 /* Do nothing */ 00086 } 00087 }
1.5.7.1