1: /* Copyright (c) 1995 Vixie Enterprises
2: *
3: * Permission to use, copy, modify, and distribute this software for any
4: * purpose with or without fee is hereby granted, provided that the above
5: * copyright notice and this permission notice appear in all copies, and that
6: * the name of Vixie Enterprises not be used in advertising or publicity
7: * pertaining to distribution of the document or software without specific,
8: * written prior permission.
9: *
10: * THE SOFTWARE IS PROVIDED "AS IS" AND VIXIE ENTERPRISES DISCLAIMS ALL
11: * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
12: * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL VIXIE ENTERPRISES
13: * BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
14: * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
15: * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
16: * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
17: * SOFTWARE.
18: */
19:
20: #ifndef _PCL720_DEFINED
21: #define _PCL720_DEFINED
22:
23: #define pcl720_data(base,bit) (base+(bit>>3))
24: #define pcl720_data_0_7(base) (base+0)
25: #define pcl720_data_8_15(base) (base+1)
26: #define pcl720_data_16_23(base) (base+2)
27: #define pcl720_data_24_31(base) (base+3)
28: #define pcl720_cntr(base,cntr) (base+4+cntr) /* cntr: 0..2 */
29: #define pcl720_cntr_0(base) (base+4)
30: #define pcl720_cntr_1(base) (base+5)
31: #define pcl720_cntr_2(base) (base+6)
32: #define pcl720_ctrl(base) (base+7)
33:
34: #ifndef DEBUG_PCL720
35: #define pcl720_inb(x) inb(x)
36: #define pcl720_outb(x,y) outb(x,y)
37: #else
38: static unsigned char pcl720_inb(int addr) {
39: unsigned char x = inb(addr);
40: fprintf(DEBUG_PCL720, "inb(0x%x) -> 0x%x\n", addr, x);
41: return (x);
42: }
43: static void pcl720_outb(int addr, unsigned char x) {
44: outb(addr, x);
45: fprintf(DEBUG_PCL720, "outb(0x%x, 0x%x)\n", addr, x);
46: }
47: #endif
48:
49: #define pcl720_load(Base,Cntr,Mode,Val) \
50: ({ register unsigned int b = Base, c = Cntr, v = Val; \
51: i8253_ctrl ctrl; \
52: \
53: ctrl.s.bcd = i8253_binary; \
54: ctrl.s.mode = Mode; \
55: ctrl.s.rl = i8253_lmb; \
56: ctrl.s.cntr = c; \
57: pcl720_outb(pcl720_ctrl(b), ctrl.i); \
58: pcl720_outb(pcl720_cntr(b,c), v); \
59: pcl720_outb(pcl720_cntr(b,c), v >> 8); \
60: v; \
61: })
62:
63: #define pcl720_read(Base,Cntr) \
64: ({ register unsigned int b = Base, v; \
65: i8253_ctrl ctrl; \
66: \
67: ctrl.s.rl = i8253_latch; \
68: ctrl.s.cntr = i8253_cntr_0; \
69: pcl720_outb(pcl720_ctrl(b), ctrl.i); \
70: v = pcl720_inb(pcl720_cntr_0(b)); \
71: v |= (pcl720_inb(pcl720_cntr_0(b)) << 8); \
72: v; \
73: })
74:
75: #define pcl720_input(Base) \
76: ({ register unsigned int b = Base, v; \
77: \
78: v = pcl720_inb(pcl720_data_0_7(b)); \
79: v |= (pcl720_inb(pcl720_data_8_15(b)) << 8); \
80: v |= (pcl720_inb(pcl720_data_16_23(b)) << 16); \
81: v |= (pcl720_inb(pcl720_data_24_31(b)) << 24); \
82: v; \
83: })
84:
85: #define pcl720_output(Base,Value) \
86: ({ register unsigned int b = Base, v = Value; \
87: \
88: pcl720_outb(pcl720_data_0_7(b), v); \
89: pcl720_outb(pcl720_data_8_15(b), v << 8); \
90: pcl720_outb(pcl720_data_16_23(b), v << 16); \
91: pcl720_outb(pcl720_data_24_31(b), v << 24); \
92: v; \
93: })
94:
95: #endif /*_PCL720_DEFINED*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>