1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
--- sys/dev/ltmdm/ltmdmsio.c.orig Mon Mar 11 18:47:31 2002
+++ sys/dev/ltmdm/ltmdmsio.c Sat Feb 21 20:56:45 2004
@@ -60,7 +60,9 @@
#include <sys/proc.h>
#include <sys/module.h>
#include <sys/conf.h>
+#if __FreeBSD_version < 500101
#include <sys/dkstat.h>
+#endif
#include <sys/fcntl.h>
#include <sys/interrupt.h>
#include <sys/kernel.h>
@@ -69,12 +71,21 @@
#include <machine/bus.h>
#include <sys/rman.h>
#if __FreeBSD_version >= 500000
+#if __FreeBSD_version < 500034 /* < 20020426 */
#include <sys/timetc.h>
#endif
+#endif
+#ifdef ENABLE_PPS
#include <sys/timepps.h>
+#endif
+#if __FreeBSD_version >= 500000
+#include <dev/pci/pcireg.h>
+#include <dev/pci/pcivar.h>
+#else
#include <pci/pcireg.h>
#include <pci/pcivar.h>
+#endif
#include <machine/clock.h>
@@ -88,7 +99,9 @@
#include <machine/resource.h>
-#if __FreeBSD_version >= 500027 /* >= 20011022 */
+#if __FreeBSD_version >= 501107 /* >= 20030917 */
+#include <dev/ic/ns16550.h>
+#elif __FreeBSD_version >= 500027 /* >= 20011022 */
#include <dev/sio/sioreg.h>
#else
#include <isa/sioreg.h>
@@ -124,9 +137,11 @@
#endif
#if __FreeBSD_version >= 500023 /* >= 20010912 */
-#define proc thread /* temporary hack: struct proc -> stuct thread */
+#define proc thread /* XXX struct proc -> stuct thread */
+#if __FreeBSD_version < 500033 /* < 20020401 */
#define suser(p) suser_td(p)
#endif
+#endif
#define LOTS_OF_EVENTS 64 /* helps separate urgent events from input */
@@ -256,7 +271,9 @@
bool_t do_dcd_timestamp;
struct timeval timestamp;
struct timeval dcd_timestamp;
+#ifdef ENABLE_PPS
struct pps_state pps;
+#endif
u_long bytes_in; /* statistics */
u_long bytes_out;
@@ -352,6 +369,7 @@
#endif
static struct cdevsw sio_cdevsw = {
+#if __FreeBSD_version < 500105
/* open */ sioopen,
/* close */ sioclose,
/* read */ sioread,
@@ -361,7 +379,11 @@
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ driver_name,
+#ifdef MAJOR_AUTO
+ /* maj */ MAJOR_AUTO,
+#else
/* maj */ CDEV_MAJOR,
+#endif
/* dump */ nodump,
/* psize */ nopsize,
#if __FreeBSD_version < 430000
@@ -373,10 +395,30 @@
/* bmaj */ -1,
/* kqfilter */ ttykqfilter,
#else /* __FreeBSD_version >= 500000 */
- /* flags */ D_TTY | D_KQFILTER,
+ /* flags */ D_TTY,
/* kqfilter */ ttykqfilter,
#endif
#endif
+#else
+ .d_open = sioopen,
+ .d_close = sioclose,
+ .d_read = sioread,
+ .d_write = siowrite,
+ .d_ioctl = sioioctl,
+ .d_name = driver_name,
+#ifdef MAJOR_AUTO
+ .d_maj = MAJOR_AUTO,
+#else
+ .d_maj = CDEV_MAJOR,
+#endif
+ .d_kqfilter = ttykqfilter,
+#endif
+#if __FreeBSD_version >= 502102
+ .d_flags = D_TTY | D_NEEDGIANT,
+ .d_version = D_VERSION
+#else
+ .d_poll = ttypoll,
+#endif
};
static u_int com_events; /* input chars + weighted output completions */
@@ -1295,8 +1337,11 @@
DPRINTF(1,(" x_chip_version = %d\n", x_chip_version));
com->flags = flags;
+
+#ifdef ENABLE_PPS
com->pps.ppscap = PPS_CAPTUREASSERT | PPS_CAPTURECLEAR;
pps_init(&com->pps);
+#endif
/*
* initialize the device registers as follows:
@@ -1685,7 +1730,9 @@
s = splfunc();
com->do_timestamp = FALSE;
com->do_dcd_timestamp = FALSE;
+#ifdef ENABLE_PPS
com->pps.ppsparam.mode = 0;
+#endif
write_vuart_port(UART_CFCR, com->cfcr_image &= ~CFCR_SBREAK);
{
write_vuart_port(UART_IER, 0);
@@ -1894,23 +1941,34 @@
u_char recv_data;
u_char int_ctl;
u_char int_ctl_new;
+#ifdef ENABLE_PPS
+#if __FreeBSD_version < 500034
struct timecounter *tc;
u_int count;
+#endif
+#endif
int_ctl = read_vuart_port(UART_IER);
int_ctl_new = int_ctl;
while (!com->gone) {
+#ifdef ENABLE_PPS
if (com->pps.ppsparam.mode & PPS_CAPTUREBOTH) {
modem_status = read_vuart_port(UART_MSR);
if ((modem_status ^ com->last_modem_status) & MSR_DCD) {
+#if __FreeBSD_version < 500034
tc = timecounter;
count = tc->tc_get_timecount(tc);
pps_event(&com->pps, tc, count,
+#else
+ pps_capture(&com->pps);
+ pps_event(&com->pps,
+#endif
(modem_status & MSR_DCD) ?
PPS_CAPTUREASSERT : PPS_CAPTURECLEAR);
}
}
+#endif
line_status = read_vuart_port(UART_LSR);
/* input event? (check first to help avoid overruns) */
@@ -2195,7 +2253,9 @@
break;
default:
splx(s);
+#ifdef ENABLE_PPS
error = pps_ioctl(cmd, data, &com->pps);
+#endif
if (error == ENODEV)
error = ENOTTY;
return (error);
@@ -2796,7 +2856,7 @@
#endif
DRIVER_MODULE(ltmdm, pci, ltmdm_pci_driver, ltmdm_devclass, ltmdm_event, 0);
-#if 0
+#if 1
#if __FreeBSD_version >= 500000
DRIVER_MODULE(ltmdm, cardbus, ltmdm_pci_driver, ltmdm_devclass, ltmdm_event, 0);
#endif
|