xref: /aosp_15_r20/external/pciutils/lib/i386-io-openbsd.h (revision c2e0c6b56a71da9abe8df5c8348fb3eb5c2c9251)
1*c2e0c6b5SAndroid Build Coastguard Worker /*
2*c2e0c6b5SAndroid Build Coastguard Worker  *	The PCI Library -- Access to i386 I/O ports on OpenBSD
3*c2e0c6b5SAndroid Build Coastguard Worker  *
4*c2e0c6b5SAndroid Build Coastguard Worker  *	Copyright (c) 2023 Grant Pannell <[email protected]>
5*c2e0c6b5SAndroid Build Coastguard Worker  *
6*c2e0c6b5SAndroid Build Coastguard Worker  *	Can be freely distributed and used under the terms of the GNU GPL.
7*c2e0c6b5SAndroid Build Coastguard Worker  */
8*c2e0c6b5SAndroid Build Coastguard Worker 
9*c2e0c6b5SAndroid Build Coastguard Worker #include <sys/types.h>
10*c2e0c6b5SAndroid Build Coastguard Worker #include <machine/sysarch.h>
11*c2e0c6b5SAndroid Build Coastguard Worker #include <machine/pio.h>
12*c2e0c6b5SAndroid Build Coastguard Worker 
13*c2e0c6b5SAndroid Build Coastguard Worker #include "i386-io-access.h"
14*c2e0c6b5SAndroid Build Coastguard Worker 
15*c2e0c6b5SAndroid Build Coastguard Worker #if defined(__amd64__)
16*c2e0c6b5SAndroid Build Coastguard Worker   #define obsd_iopl amd64_iopl
17*c2e0c6b5SAndroid Build Coastguard Worker #else
18*c2e0c6b5SAndroid Build Coastguard Worker   #define obsd_iopl i386_iopl
19*c2e0c6b5SAndroid Build Coastguard Worker #endif
20*c2e0c6b5SAndroid Build Coastguard Worker 
21*c2e0c6b5SAndroid Build Coastguard Worker static int iopl_enabled;
22*c2e0c6b5SAndroid Build Coastguard Worker 
23*c2e0c6b5SAndroid Build Coastguard Worker static int
intel_setup_io(struct pci_access * a UNUSED)24*c2e0c6b5SAndroid Build Coastguard Worker intel_setup_io(struct pci_access *a UNUSED)
25*c2e0c6b5SAndroid Build Coastguard Worker {
26*c2e0c6b5SAndroid Build Coastguard Worker   if (iopl_enabled)
27*c2e0c6b5SAndroid Build Coastguard Worker     return 1;
28*c2e0c6b5SAndroid Build Coastguard Worker 
29*c2e0c6b5SAndroid Build Coastguard Worker   if (obsd_iopl(3) < 0)
30*c2e0c6b5SAndroid Build Coastguard Worker     {
31*c2e0c6b5SAndroid Build Coastguard Worker       return 0;
32*c2e0c6b5SAndroid Build Coastguard Worker     }
33*c2e0c6b5SAndroid Build Coastguard Worker 
34*c2e0c6b5SAndroid Build Coastguard Worker   iopl_enabled = 1;
35*c2e0c6b5SAndroid Build Coastguard Worker   return 1;
36*c2e0c6b5SAndroid Build Coastguard Worker }
37*c2e0c6b5SAndroid Build Coastguard Worker 
38*c2e0c6b5SAndroid Build Coastguard Worker static inline void
intel_cleanup_io(struct pci_access * a UNUSED)39*c2e0c6b5SAndroid Build Coastguard Worker intel_cleanup_io(struct pci_access *a UNUSED)
40*c2e0c6b5SAndroid Build Coastguard Worker {
41*c2e0c6b5SAndroid Build Coastguard Worker   if (iopl_enabled)
42*c2e0c6b5SAndroid Build Coastguard Worker     {
43*c2e0c6b5SAndroid Build Coastguard Worker       obsd_iopl(0);
44*c2e0c6b5SAndroid Build Coastguard Worker       iopl_enabled = 0;
45*c2e0c6b5SAndroid Build Coastguard Worker     }
46*c2e0c6b5SAndroid Build Coastguard Worker }
47*c2e0c6b5SAndroid Build Coastguard Worker 
intel_io_lock(void)48*c2e0c6b5SAndroid Build Coastguard Worker static inline void intel_io_lock(void)
49*c2e0c6b5SAndroid Build Coastguard Worker {
50*c2e0c6b5SAndroid Build Coastguard Worker }
51*c2e0c6b5SAndroid Build Coastguard Worker 
intel_io_unlock(void)52*c2e0c6b5SAndroid Build Coastguard Worker static inline void intel_io_unlock(void)
53*c2e0c6b5SAndroid Build Coastguard Worker {
54*c2e0c6b5SAndroid Build Coastguard Worker }
55