freebsd-ports/comms/ltmdm/files/patch-aa
Alexander Langer e369ce2c58 Fix for -CURRENT.
PR:		48922
Submitted by:	Daniel O'Connor <darius@dons.net.au> (maintainer)
		Sergey A. Osokin <osa@FreeBSD.org.ru>
2003-03-06 00:34:14 +00:00

172 lines
4.4 KiB
Text

--- sys/dev/ltmdm/ltmdmsio.c.orig Tue Mar 12 12:17:31 2002
+++ sys/dev/ltmdm/ltmdmsio.c Thu Mar 6 10:31:42 2003
@@ -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,9 +71,13 @@
#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
#include <pci/pcireg.h>
#include <pci/pcivar.h>
@@ -124,9 +130,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 +264,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 +362,7 @@
#endif
static struct cdevsw sio_cdevsw = {
+#if __FreeBSD_version < 500105
/* open */ sioopen,
/* close */ sioclose,
/* read */ sioread,
@@ -361,7 +372,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 +388,25 @@
/* 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_poll = ttypoll,
+ .d_name = driver_name,
+#ifdef MAJOR_AUTO
+ .d_maj = MAJOR_AUTO,
+#else
+ .d_maj = CDEV_MAJOR,
+#endif
+ .d_kqfilter = ttykqfilter,
+#endif
};
static u_int com_events; /* input chars + weighted output completions */
@@ -1295,8 +1325,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 +1718,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 +1929,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 +2241,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 +2844,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