diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2019-03-01 04:24:59 -0500 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2019-03-07 04:34:37 -0500 |
commit | c6b38fbbde91ee7b072febe4b83022e4850f934f (patch) | |
tree | 3eb87bf904cdec191cb609f02b6f833a20d181db | |
parent | e552f0851070fe4975d610a99910be4e9bf5d7bd (diff) |
drm: move i915_kick_out_vgacon to vgaarb
Also rename it to vga_remove_vgacon and add kerneldoc text.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/20190301092502.30948-2-kraxel@redhat.com
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.c | 35 | ||||
-rw-r--r-- | drivers/gpu/vga/vgaarb.c | 49 | ||||
-rw-r--r-- | include/linux/vgaarb.h | 2 |
3 files changed, 52 insertions, 34 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 6630212f2faf..9df65d386d11 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
@@ -757,39 +757,6 @@ static int i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv) | |||
757 | return ret; | 757 | return ret; |
758 | } | 758 | } |
759 | 759 | ||
760 | #if !defined(CONFIG_VGA_CONSOLE) | ||
761 | static int i915_kick_out_vgacon(struct drm_i915_private *dev_priv) | ||
762 | { | ||
763 | return 0; | ||
764 | } | ||
765 | #elif !defined(CONFIG_DUMMY_CONSOLE) | ||
766 | static int i915_kick_out_vgacon(struct drm_i915_private *dev_priv) | ||
767 | { | ||
768 | return -ENODEV; | ||
769 | } | ||
770 | #else | ||
771 | static int i915_kick_out_vgacon(struct drm_i915_private *dev_priv) | ||
772 | { | ||
773 | int ret = 0; | ||
774 | |||
775 | DRM_INFO("Replacing VGA console driver\n"); | ||
776 | |||
777 | console_lock(); | ||
778 | if (con_is_bound(&vga_con)) | ||
779 | ret = do_take_over_console(&dummy_con, 0, MAX_NR_CONSOLES - 1, 1); | ||
780 | if (ret == 0) { | ||
781 | ret = do_unregister_con_driver(&vga_con); | ||
782 | |||
783 | /* Ignore "already unregistered". */ | ||
784 | if (ret == -ENODEV) | ||
785 | ret = 0; | ||
786 | } | ||
787 | console_unlock(); | ||
788 | |||
789 | return ret; | ||
790 | } | ||
791 | #endif | ||
792 | |||
793 | static void intel_init_dpio(struct drm_i915_private *dev_priv) | 760 | static void intel_init_dpio(struct drm_i915_private *dev_priv) |
794 | { | 761 | { |
795 | /* | 762 | /* |
@@ -1420,7 +1387,7 @@ static int i915_driver_init_hw(struct drm_i915_private *dev_priv) | |||
1420 | goto err_ggtt; | 1387 | goto err_ggtt; |
1421 | } | 1388 | } |
1422 | 1389 | ||
1423 | ret = i915_kick_out_vgacon(dev_priv); | 1390 | ret = vga_remove_vgacon(pdev); |
1424 | if (ret) { | 1391 | if (ret) { |
1425 | DRM_ERROR("failed to remove conflicting VGA console\n"); | 1392 | DRM_ERROR("failed to remove conflicting VGA console\n"); |
1426 | goto err_ggtt; | 1393 | goto err_ggtt; |
diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c index dc8e039bfab5..f2f3ef8af271 100644 --- a/drivers/gpu/vga/vgaarb.c +++ b/drivers/gpu/vga/vgaarb.c | |||
@@ -48,6 +48,8 @@ | |||
48 | #include <linux/miscdevice.h> | 48 | #include <linux/miscdevice.h> |
49 | #include <linux/slab.h> | 49 | #include <linux/slab.h> |
50 | #include <linux/screen_info.h> | 50 | #include <linux/screen_info.h> |
51 | #include <linux/vt.h> | ||
52 | #include <linux/console.h> | ||
51 | 53 | ||
52 | #include <linux/uaccess.h> | 54 | #include <linux/uaccess.h> |
53 | 55 | ||
@@ -168,6 +170,53 @@ void vga_set_default_device(struct pci_dev *pdev) | |||
168 | vga_default = pci_dev_get(pdev); | 170 | vga_default = pci_dev_get(pdev); |
169 | } | 171 | } |
170 | 172 | ||
173 | /** | ||
174 | * vga_remove_vgacon - deactivete vga console | ||
175 | * | ||
176 | * Unbind and unregister vgacon in case pdev is the default vga | ||
177 | * device. Can be called by gpu drivers on initialization to make | ||
178 | * sure vga register access done by vgacon will not disturb the | ||
179 | * device. | ||
180 | * | ||
181 | * @pdev: pci device. | ||
182 | */ | ||
183 | #if !defined(CONFIG_VGA_CONSOLE) | ||
184 | int vga_remove_vgacon(struct pci_dev *pdev) | ||
185 | { | ||
186 | return 0; | ||
187 | } | ||
188 | #elif !defined(CONFIG_DUMMY_CONSOLE) | ||
189 | int vga_remove_vgacon(struct pci_dev *pdev) | ||
190 | { | ||
191 | return -ENODEV; | ||
192 | } | ||
193 | #else | ||
194 | int vga_remove_vgacon(struct pci_dev *pdev) | ||
195 | { | ||
196 | int ret = 0; | ||
197 | |||
198 | if (pdev != vga_default) | ||
199 | return 0; | ||
200 | vgaarb_info(&pdev->dev, "deactivate vga console\n"); | ||
201 | |||
202 | console_lock(); | ||
203 | if (con_is_bound(&vga_con)) | ||
204 | ret = do_take_over_console(&dummy_con, 0, | ||
205 | MAX_NR_CONSOLES - 1, 1); | ||
206 | if (ret == 0) { | ||
207 | ret = do_unregister_con_driver(&vga_con); | ||
208 | |||
209 | /* Ignore "already unregistered". */ | ||
210 | if (ret == -ENODEV) | ||
211 | ret = 0; | ||
212 | } | ||
213 | console_unlock(); | ||
214 | |||
215 | return ret; | ||
216 | } | ||
217 | #endif | ||
218 | EXPORT_SYMBOL(vga_remove_vgacon); | ||
219 | |||
171 | static inline void vga_irq_set_state(struct vga_device *vgadev, bool state) | 220 | static inline void vga_irq_set_state(struct vga_device *vgadev, bool state) |
172 | { | 221 | { |
173 | if (vgadev->irq_set_state) | 222 | if (vgadev->irq_set_state) |
diff --git a/include/linux/vgaarb.h b/include/linux/vgaarb.h index ee162e3e879b..553b34c8b5f7 100644 --- a/include/linux/vgaarb.h +++ b/include/linux/vgaarb.h | |||
@@ -125,9 +125,11 @@ extern void vga_put(struct pci_dev *pdev, unsigned int rsrc); | |||
125 | #ifdef CONFIG_VGA_ARB | 125 | #ifdef CONFIG_VGA_ARB |
126 | extern struct pci_dev *vga_default_device(void); | 126 | extern struct pci_dev *vga_default_device(void); |
127 | extern void vga_set_default_device(struct pci_dev *pdev); | 127 | extern void vga_set_default_device(struct pci_dev *pdev); |
128 | extern int vga_remove_vgacon(struct pci_dev *pdev); | ||
128 | #else | 129 | #else |
129 | static inline struct pci_dev *vga_default_device(void) { return NULL; }; | 130 | static inline struct pci_dev *vga_default_device(void) { return NULL; }; |
130 | static inline void vga_set_default_device(struct pci_dev *pdev) { }; | 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; }; | ||
131 | #endif | 133 | #endif |
132 | 134 | ||
133 | /* | 135 | /* |