]>
Commit | Line | Data |
---|---|---|
68245cfd MM |
1 | /* |
2 | * The PCI Library -- Access to i386 I/O ports on Solaris | |
3 | * | |
4 | * Copyright (c) 2003 Bill Moore <billm@eng.sun.com> | |
9007a292 | 5 | * Copyright (c) 2003--2006 Martin Mares <mj@ucw.cz> |
68245cfd MM |
6 | * |
7 | * Can be freely distributed and used under the terms of the GNU GPL. | |
8 | */ | |
9 | ||
10 | #include <sys/sysi86.h> | |
11 | #include <sys/psw.h> | |
12 | ||
68245cfd | 13 | static int |
d305d704 | 14 | intel_setup_io(struct pci_access *a UNUSED) |
68245cfd | 15 | { |
9007a292 | 16 | return (sysi86(SI86V86, V86SC_IOPL, PS_IOPL) < 0) ? 0 : 1; |
68245cfd MM |
17 | } |
18 | ||
9007a292 | 19 | static inline int |
d305d704 | 20 | intel_cleanup_io(struct pci_access *a UNUSED) |
68245cfd | 21 | { |
9007a292 MM |
22 | /* FIXME: How to switch off I/O port access? */ |
23 | return 1; | |
68245cfd MM |
24 | } |
25 | ||
26 | static inline u8 | |
27 | inb (u16 port) | |
28 | { | |
29 | u8 v; | |
30 | __asm__ __volatile__ ("inb (%w1)":"=a" (v):"Nd" (port)); | |
31 | return v; | |
32 | } | |
33 | ||
34 | static inline u16 | |
35 | inw (u16 port) | |
36 | { | |
37 | u16 v; | |
38 | __asm__ __volatile__ ("inw (%w1)":"=a" (v):"Nd" (port)); | |
39 | return v; | |
40 | } | |
41 | ||
42 | static inline u32 | |
43 | inl (u16 port) | |
44 | { | |
45 | u32 v; | |
46 | __asm__ __volatile__ ("inl (%w1)":"=a" (v):"Nd" (port)); | |
47 | return v; | |
48 | } | |
49 | ||
50 | static inline void | |
51 | outb (u8 value, u16 port) | |
52 | { | |
53 | __asm__ __volatile__ ("outb (%w1)": :"a" (value), "Nd" (port)); | |
54 | } | |
55 | ||
56 | static inline void | |
57 | outw (u16 value, u16 port) | |
58 | { | |
59 | __asm__ __volatile__ ("outw (%w1)": :"a" (value), "Nd" (port)); | |
60 | } | |
61 | ||
62 | static inline void | |
63 | outl (u32 value, u16 port) | |
64 | { | |
65 | __asm__ __volatile__ ("outl (%w1)": :"a" (value), "Nd" (port)); | |
66 | } |