1*8044SWilliam.Kucharski@Sun.COM /* Defines for routines to implement a low-overhead timer for drivers */ 2*8044SWilliam.Kucharski@Sun.COM 3*8044SWilliam.Kucharski@Sun.COM /* 4*8044SWilliam.Kucharski@Sun.COM * This program is free software; you can redistribute it and/or 5*8044SWilliam.Kucharski@Sun.COM * modify it under the terms of the GNU General Public License as 6*8044SWilliam.Kucharski@Sun.COM * published by the Free Software Foundation; either version 2, or (at 7*8044SWilliam.Kucharski@Sun.COM * your option) any later version. 8*8044SWilliam.Kucharski@Sun.COM */ 9*8044SWilliam.Kucharski@Sun.COM 10*8044SWilliam.Kucharski@Sun.COM #ifndef TIMER_H 11*8044SWilliam.Kucharski@Sun.COM #define TIMER_H 12*8044SWilliam.Kucharski@Sun.COM 13*8044SWilliam.Kucharski@Sun.COM /* Ports for the 8254 timer chip */ 14*8044SWilliam.Kucharski@Sun.COM #define TIMER2_PORT 0x42 15*8044SWilliam.Kucharski@Sun.COM #define TIMER_MODE_PORT 0x43 16*8044SWilliam.Kucharski@Sun.COM 17*8044SWilliam.Kucharski@Sun.COM /* Meaning of the mode bits */ 18*8044SWilliam.Kucharski@Sun.COM #define TIMER0_SEL 0x00 19*8044SWilliam.Kucharski@Sun.COM #define TIMER1_SEL 0x40 20*8044SWilliam.Kucharski@Sun.COM #define TIMER2_SEL 0x80 21*8044SWilliam.Kucharski@Sun.COM #define READBACK_SEL 0xC0 22*8044SWilliam.Kucharski@Sun.COM 23*8044SWilliam.Kucharski@Sun.COM #define LATCH_COUNT 0x00 24*8044SWilliam.Kucharski@Sun.COM #define LOBYTE_ACCESS 0x10 25*8044SWilliam.Kucharski@Sun.COM #define HIBYTE_ACCESS 0x20 26*8044SWilliam.Kucharski@Sun.COM #define WORD_ACCESS 0x30 27*8044SWilliam.Kucharski@Sun.COM 28*8044SWilliam.Kucharski@Sun.COM #define MODE0 0x00 29*8044SWilliam.Kucharski@Sun.COM #define MODE1 0x02 30*8044SWilliam.Kucharski@Sun.COM #define MODE2 0x04 31*8044SWilliam.Kucharski@Sun.COM #define MODE3 0x06 32*8044SWilliam.Kucharski@Sun.COM #define MODE4 0x08 33*8044SWilliam.Kucharski@Sun.COM #define MODE5 0x0A 34*8044SWilliam.Kucharski@Sun.COM 35*8044SWilliam.Kucharski@Sun.COM #define BINARY_COUNT 0x00 36*8044SWilliam.Kucharski@Sun.COM #define BCD_COUNT 0x01 37*8044SWilliam.Kucharski@Sun.COM 38*8044SWilliam.Kucharski@Sun.COM /* Timers tick over at this rate */ 39*8044SWilliam.Kucharski@Sun.COM #define CLOCK_TICK_RATE 1193180U 40*8044SWilliam.Kucharski@Sun.COM #define TICKS_PER_MS (CLOCK_TICK_RATE/1000) 41*8044SWilliam.Kucharski@Sun.COM 42*8044SWilliam.Kucharski@Sun.COM /* Parallel Peripheral Controller Port B */ 43*8044SWilliam.Kucharski@Sun.COM #define PPC_PORTB 0x61 44*8044SWilliam.Kucharski@Sun.COM 45*8044SWilliam.Kucharski@Sun.COM /* Meaning of the port bits */ 46*8044SWilliam.Kucharski@Sun.COM #define PPCB_T2OUT 0x20 /* Bit 5 */ 47*8044SWilliam.Kucharski@Sun.COM #define PPCB_SPKR 0x02 /* Bit 1 */ 48*8044SWilliam.Kucharski@Sun.COM #define PPCB_T2GATE 0x01 /* Bit 0 */ 49*8044SWilliam.Kucharski@Sun.COM 50*8044SWilliam.Kucharski@Sun.COM /* Ticks must be between 0 and 65535 (0 == 65536) 51*8044SWilliam.Kucharski@Sun.COM because it is a 16 bit counter */ 52*8044SWilliam.Kucharski@Sun.COM extern void load_timer2(unsigned int ticks); 53*8044SWilliam.Kucharski@Sun.COM extern inline int timer2_running(void); 54*8044SWilliam.Kucharski@Sun.COM extern void waiton_timer2(unsigned int ticks); 55*8044SWilliam.Kucharski@Sun.COM extern void __load_timer2(unsigned int ticks); 56*8044SWilliam.Kucharski@Sun.COM 57*8044SWilliam.Kucharski@Sun.COM extern void setup_timers(void); 58*8044SWilliam.Kucharski@Sun.COM extern void ndelay(unsigned int nsecs); 59*8044SWilliam.Kucharski@Sun.COM extern void udelay(unsigned int usecs); 60*8044SWilliam.Kucharski@Sun.COM extern void mdelay(unsigned int msecs); 61*8044SWilliam.Kucharski@Sun.COM //extern unsigned long currticks(void); 62*8044SWilliam.Kucharski@Sun.COM 63*8044SWilliam.Kucharski@Sun.COM struct timeval { 64*8044SWilliam.Kucharski@Sun.COM long tv_sec; 65*8044SWilliam.Kucharski@Sun.COM long tv_usec; 66*8044SWilliam.Kucharski@Sun.COM }; 67*8044SWilliam.Kucharski@Sun.COM 68*8044SWilliam.Kucharski@Sun.COM #endif /* TIMER_H */ 69