annotate libdha/sysdep/pci_freebsd.c @ 13872:8b810ed6e543

fix "stuck mouse button" by setting O_NONBLOCK, instead of using select() to check write() blocking on pipe. Marius Gedminas have located the bug as send original patch. Modified version by me.
author iive
date Fri, 05 Nov 2004 04:13:25 +0000
parents 1faf2566907b
children 806cd20f1c8f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
1 /*
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
2 This file is based on:
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
3 $XFree86: xc/programs/Xserver/hw/xfree86/etc/scanpci.c,v 3.34.2.17 1998/11/10 11:55:40 dawes Exp $
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
4 Modified for readability by Nick Kurshev
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
5 */
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
6 #include <errno.h>
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
7 #include <sys/file.h>
5944
1faf2566907b Fix build on FreeBSD 5.0 or later, should be downward compatible (verified on FreeBSD 4.5 at sf compilefamr.
atmos4
parents: 4174
diff changeset
8 /* machine/console.h seems to be outdated by recent FreeBSD *
1faf2566907b Fix build on FreeBSD 5.0 or later, should be downward compatible (verified on FreeBSD 4.5 at sf compilefamr.
atmos4
parents: 4174
diff changeset
9 * however pcvt_ioctl.h seems to exist for very long time */
1faf2566907b Fix build on FreeBSD 5.0 or later, should be downward compatible (verified on FreeBSD 4.5 at sf compilefamr.
atmos4
parents: 4174
diff changeset
10 /* #include <machine/console.h>*/
1faf2566907b Fix build on FreeBSD 5.0 or later, should be downward compatible (verified on FreeBSD 4.5 at sf compilefamr.
atmos4
parents: 4174
diff changeset
11 #include <machine/pcvt_ioctl.h>
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
12 #ifndef GCCUSESGAS
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
13 #define GCCUSESGAS
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
14 #endif
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
15
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
16 static int io_fd;
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
17
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
18 static __inline__ int enable_os_io(void)
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
19 {
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
20 io_fd = -1 ;
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
21 if ((io_fd = open("/dev/console", O_RDWR, 0)) < 0) {
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
22 perror("/dev/console");
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
23 return(errno);
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
24 }
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
25 if (ioctl(io_fd, KDENABIO, 0) < 0) {
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
26 perror("ioctl(KDENABIO)");
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
27 return(errno);
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
28 }
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
29 return(0);
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
30 }
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
31
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
32 static __inline__ int disable_os_io(void)
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
33 {
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
34 if (ioctl(io_fd, KDDISABIO, 0) < 0) {
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
35 perror("ioctl(KDDISABIO)");
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
36 close(io_fd);
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
37 return(errno);
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
38 }
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
39 close(io_fd);
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
40 return(0);
4164
2e3262002acb Improved readability and new stuffs
nick
parents:
diff changeset
41 }