linux/include/linux/vgaarb.h
<<
>>
Prefs
   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
  51struct 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)
  69extern void vga_set_legacy_decoding(struct pci_dev *pdev,
  70                                    unsigned int decodes);
  71#else
  72static inline void vga_set_legacy_decoding(struct pci_dev *pdev,
  73                                           unsigned int decodes) { };
  74#endif
  75
  76#if defined(CONFIG_VGA_ARB)
  77extern int vga_get(struct pci_dev *pdev, unsigned int rsrc, int interruptible);
  78#else
  79static 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 */
  91static 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 */
 106static inline int vga_get_uninterruptible(struct pci_dev *pdev,
 107                                          unsigned int rsrc)
 108{
 109       return vga_get(pdev, rsrc, 0);
 110}
 111
 112#if defined(CONFIG_VGA_ARB)
 113extern int vga_tryget(struct pci_dev *pdev, unsigned int rsrc);
 114#else
 115static inline int vga_tryget(struct pci_dev *pdev, unsigned int rsrc) { return 0; }
 116#endif
 117
 118#if defined(CONFIG_VGA_ARB)
 119extern 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
 126extern struct pci_dev *vga_default_device(void);
 127extern void vga_set_default_device(struct pci_dev *pdev);
 128extern int vga_remove_vgacon(struct pci_dev *pdev);
 129#else
 130static inline struct pci_dev *vga_default_device(void) { return NULL; };
 131static inline void vga_set_default_device(struct pci_dev *pdev) { };
 132static 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
 141static inline int vga_conflicts(struct pci_dev *p1, struct pci_dev *p2)
 142{
 143       return 1;
 144}
 145#endif
 146
 147#if defined(CONFIG_VGA_ARB)
 148int 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
 152static 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 */
 161