|  | /* 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 | 
|  | #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 | 
|  |  | 
|  | /* Timers tick over at this rate */ | 
|  | #define	TICKS_PER_MS	1193 | 
|  |  | 
|  | /* Parallel Peripheral Controller Port B */ | 
|  | #define	PPC_PORTB	0x61 | 
|  |  | 
|  | /* Meaning of the port bits */ | 
|  | #define	PPCB_T2OUT	0x20	/* Bit 5 */ | 
|  | #define	PPCB_SPKR	0x02	/* Bit 1 */ | 
|  | #define	PPCB_T2GATE	0x01	/* Bit 0 */ | 
|  |  | 
|  | /* 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) | 
|  | { | 
|  | return ((inb(PPC_PORTB) & PPCB_T2OUT) == 0); | 
|  | } | 
|  |  | 
|  | extern inline void waiton_timer2(unsigned int ticks) | 
|  | { | 
|  | load_timer2(ticks); | 
|  | while ((inb(PPC_PORTB) & PPCB_T2OUT) == 0) | 
|  | ; | 
|  | } | 
|  |  | 
|  | #endif	/* TIMER_H */ |