timer2.c File Reference

#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 Documentation

#define TIMER2_TICKS_PER_SEC   1193180U

Definition at line 21 of file timer2.c.

Referenced by timer2_udelay().

#define PPC_PORTB   0x61

Definition at line 24 of file timer2.c.

Referenced by load_timer2(), and timer2_running().

#define PPCB_T2OUT   0x20

Definition at line 27 of file timer2.c.

Referenced by timer2_running().

#define PPCB_SPKR   0x02

Definition at line 28 of file timer2.c.

Referenced by load_timer2().

#define PPCB_T2GATE   0x01

Definition at line 29 of file timer2.c.

Referenced by load_timer2().

#define TIMER2_PORT   0x42

Definition at line 32 of file timer2.c.

Referenced by load_timer2().

#define TIMER_MODE_PORT   0x43

Definition at line 33 of file timer2.c.

Referenced by load_timer2().

#define TIMER0_SEL   0x00

Definition at line 36 of file timer2.c.

#define TIMER1_SEL   0x40

Definition at line 37 of file timer2.c.

#define TIMER2_SEL   0x80

Definition at line 38 of file timer2.c.

Referenced by load_timer2().

#define READBACK_SEL   0xC0

Definition at line 39 of file timer2.c.

#define LATCH_COUNT   0x00

Definition at line 41 of file timer2.c.

#define LOBYTE_ACCESS   0x10

Definition at line 42 of file timer2.c.

#define HIBYTE_ACCESS   0x20

Definition at line 43 of file timer2.c.

#define WORD_ACCESS   0x30

Definition at line 44 of file timer2.c.

Referenced by load_timer2().

#define MODE0   0x00

Definition at line 46 of file timer2.c.

Referenced by load_timer2().

#define MODE1   0x02

Definition at line 47 of file timer2.c.

#define MODE2   0x04

Definition at line 48 of file timer2.c.

#define MODE3   0x06

Definition at line 49 of file timer2.c.

#define MODE4   0x08

Definition at line 50 of file timer2.c.

#define MODE5   0x0A

Definition at line 51 of file timer2.c.

#define BINARY_COUNT   0x00

Definition at line 53 of file timer2.c.

Referenced by load_timer2().

#define BCD_COUNT   0x01

Definition at line 54 of file timer2.c.


Function Documentation

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 }


Generated on Tue Apr 6 20:01:11 2010 for gPXE by  doxygen 1.5.7.1