Branch data Line data Source code
1 : : /*
2 : : * The VGA aribiter manages VGA space routing and VGA resource decode to
3 : : * allow multiple VGA devices to be used in a system in a safe way.
4 : : *
5 : : * (C) Copyright 2005 Benjamin Herrenschmidt <benh@kernel.crashing.org>
6 : : * (C) Copyright 2007 Paulo R. Zanoni <przanoni@gmail.com>
7 : : * (C) Copyright 2007, 2009 Tiago Vignatti <vignatti@freedesktop.org>
8 : : *
9 : : * Permission is hereby granted, free of charge, to any person obtaining a
10 : : * copy of this software and associated documentation files (the "Software"),
11 : : * to deal in the Software without restriction, including without limitation
12 : : * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 : : * and/or sell copies of the Software, and to permit persons to whom the
14 : : * Software is furnished to do so, subject to the following conditions:
15 : : *
16 : : * The above copyright notice and this permission notice (including the next
17 : : * paragraph) shall be included in all copies or substantial portions of the
18 : : * Software.
19 : : *
20 : : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 : : * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 : : * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 : : * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 : : * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25 : : * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26 : : * DEALINGS
27 : : * IN THE SOFTWARE.
28 : : *
29 : : */
30 : :
31 : : #ifndef LINUX_VGA_H
32 : : #define LINUX_VGA_H
33 : :
34 : : #include <video/vga.h>
35 : :
36 : : /* Legacy VGA regions */
37 : : #define VGA_RSRC_NONE 0x00
38 : : #define VGA_RSRC_LEGACY_IO 0x01
39 : : #define VGA_RSRC_LEGACY_MEM 0x02
40 : : #define VGA_RSRC_LEGACY_MASK (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM)
41 : : /* Non-legacy access */
42 : : #define VGA_RSRC_NORMAL_IO 0x04
43 : : #define VGA_RSRC_NORMAL_MEM 0x08
44 : :
45 : : /* Passing that instead of a pci_dev to use the system "default"
46 : : * device, that is the one used by vgacon. Archs will probably
47 : : * have to provide their own vga_default_device();
48 : : */
49 : : #define VGA_DEFAULT_DEVICE (NULL)
50 : :
51 : : struct pci_dev;
52 : :
53 : : /* For use by clients */
54 : :
55 : : /**
56 : : * vga_set_legacy_decoding
57 : : *
58 : : * @pdev: pci device of the VGA card
59 : : * @decodes: bit mask of what legacy regions the card decodes
60 : : *
61 : : * Indicates to the arbiter if the card decodes legacy VGA IOs,
62 : : * legacy VGA Memory, both, or none. All cards default to both,
63 : : * the card driver (fbdev for example) should tell the arbiter
64 : : * if it has disabled legacy decoding, so the card can be left
65 : : * out of the arbitration process (and can be safe to take
66 : : * interrupts at any time.
67 : : */
68 : : #if defined(CONFIG_VGA_ARB)
69 : : extern void vga_set_legacy_decoding(struct pci_dev *pdev,
70 : : unsigned int decodes);
71 : : #else
72 : : static inline void vga_set_legacy_decoding(struct pci_dev *pdev,
73 : : unsigned int decodes) { };
74 : : #endif
75 : :
76 : : #if defined(CONFIG_VGA_ARB)
77 : : extern int vga_get(struct pci_dev *pdev, unsigned int rsrc, int interruptible);
78 : : #else
79 : : static inline int vga_get(struct pci_dev *pdev, unsigned int rsrc, int interruptible) { return 0; }
80 : : #endif
81 : :
82 : : /**
83 : : * vga_get_interruptible
84 : : * @pdev: pci device of the VGA card or NULL for the system default
85 : : * @rsrc: bit mask of resources to acquire and lock
86 : : *
87 : : * Shortcut to vga_get with interruptible set to true.
88 : : *
89 : : * On success, release the VGA resource again with vga_put().
90 : : */
91 : : static inline int vga_get_interruptible(struct pci_dev *pdev,
92 : : unsigned int rsrc)
93 : : {
94 : : return vga_get(pdev, rsrc, 1);
95 : : }
96 : :
97 : : /**
98 : : * vga_get_uninterruptible - shortcut to vga_get()
99 : : * @pdev: pci device of the VGA card or NULL for the system default
100 : : * @rsrc: bit mask of resources to acquire and lock
101 : : *
102 : : * Shortcut to vga_get with interruptible set to false.
103 : : *
104 : : * On success, release the VGA resource again with vga_put().
105 : : */
106 : 0 : static inline int vga_get_uninterruptible(struct pci_dev *pdev,
107 : : unsigned int rsrc)
108 : : {
109 : 0 : return vga_get(pdev, rsrc, 0);
110 : : }
111 : :
112 : : #if defined(CONFIG_VGA_ARB)
113 : : extern int vga_tryget(struct pci_dev *pdev, unsigned int rsrc);
114 : : #else
115 : : static inline int vga_tryget(struct pci_dev *pdev, unsigned int rsrc) { return 0; }
116 : : #endif
117 : :
118 : : #if defined(CONFIG_VGA_ARB)
119 : : extern void vga_put(struct pci_dev *pdev, unsigned int rsrc);
120 : : #else
121 : : #define vga_put(pdev, rsrc)
122 : : #endif
123 : :
124 : :
125 : : #ifdef CONFIG_VGA_ARB
126 : : extern struct pci_dev *vga_default_device(void);
127 : : extern void vga_set_default_device(struct pci_dev *pdev);
128 : : extern int vga_remove_vgacon(struct pci_dev *pdev);
129 : : #else
130 : : static inline struct pci_dev *vga_default_device(void) { return NULL; };
131 : : static inline void vga_set_default_device(struct pci_dev *pdev) { };
132 : : static inline int vga_remove_vgacon(struct pci_dev *pdev) { return 0; };
133 : : #endif
134 : :
135 : : /*
136 : : * Architectures should define this if they have several
137 : : * independent PCI domains that can afford concurrent VGA
138 : : * decoding
139 : : */
140 : : #ifndef __ARCH_HAS_VGA_CONFLICT
141 : 0 : static inline int vga_conflicts(struct pci_dev *p1, struct pci_dev *p2)
142 : : {
143 [ # # ]: 0 : return 1;
144 : : }
145 : : #endif
146 : :
147 : : #if defined(CONFIG_VGA_ARB)
148 : : int vga_client_register(struct pci_dev *pdev, void *cookie,
149 : : void (*irq_set_state)(void *cookie, bool state),
150 : : unsigned int (*set_vga_decode)(void *cookie, bool state));
151 : : #else
152 : : static inline int vga_client_register(struct pci_dev *pdev, void *cookie,
153 : : void (*irq_set_state)(void *cookie, bool state),
154 : : unsigned int (*set_vga_decode)(void *cookie, bool state))
155 : : {
156 : : return 0;
157 : : }
158 : : #endif
159 : :
160 : : #endif /* LINUX_VGA_H */
|