Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2012 Francisco Jerez
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the
  8.  * "Software"), to deal in the Software without restriction, including
  9.  * without limitation the rights to use, copy, modify, merge, publish,
  10.  * distribute, sub license, and/or sell copies of the Software, and to
  11.  * permit persons to whom the Software is furnished to do so, subject to
  12.  * the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice (including the
  15.  * next paragraph) shall be included in all copies or substantial portions
  16.  * of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  20.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  21.  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
  22.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  23.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  24.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25.  *
  26.  **************************************************************************/
  27.  
  28. /**
  29.  * \file Library that provides device enumeration and creation of
  30.  * winsys/pipe_screen instances.
  31.  */
  32.  
  33. #ifndef PIPE_LOADER_H
  34. #define PIPE_LOADER_H
  35.  
  36. #include "pipe/p_compiler.h"
  37.  
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41.  
  42. struct pipe_screen;
  43.  
  44. enum pipe_loader_device_type {
  45.    PIPE_LOADER_DEVICE_SOFTWARE,
  46.    PIPE_LOADER_DEVICE_PCI,
  47.    NUM_PIPE_LOADER_DEVICE_TYPES
  48. };
  49.  
  50. /**
  51.  * A device known to the pipe loader.
  52.  */
  53. struct pipe_loader_device {
  54.    enum pipe_loader_device_type type;
  55.  
  56.    union {
  57.       struct {
  58.          int vendor_id;
  59.          int chip_id;
  60.       } pci;
  61.    } u; /**< Discriminated by \a type */
  62.  
  63.    const char *driver_name;
  64.    const struct pipe_loader_ops *ops;
  65. };
  66.  
  67. /**
  68.  * Get a list of known devices.
  69.  *
  70.  * \param devs Array that will be filled with pointers to the devices
  71.  *             available in the system.
  72.  * \param ndev Maximum number of devices to return.
  73.  * \return Number of devices available in the system.
  74.  */
  75. int
  76. pipe_loader_probe(struct pipe_loader_device **devs, int ndev);
  77.  
  78. /**
  79.  * Create a pipe_screen for the specified device.
  80.  *
  81.  * \param dev Device the screen will be created for.
  82.  * \param library_paths Colon-separated list of filesystem paths that
  83.  *                      will be used to look for the pipe driver
  84.  *                      module that handles this device.
  85.  */
  86. struct pipe_screen *
  87. pipe_loader_create_screen(struct pipe_loader_device *dev,
  88.                           const char *library_paths);
  89.  
  90. /**
  91.  * Release resources allocated for a list of devices.
  92.  *
  93.  * Should be called when the specified devices are no longer in use to
  94.  * release any resources allocated by pipe_loader_probe.
  95.  *
  96.  * \param devs Devices to release.
  97.  * \param ndev Number of devices to release.
  98.  */
  99. void
  100. pipe_loader_release(struct pipe_loader_device **devs, int ndev);
  101.  
  102. /**
  103.  * Get a list of known software devices.
  104.  *
  105.  * This function is platform-specific.
  106.  *
  107.  * \sa pipe_loader_probe
  108.  */
  109. int
  110. pipe_loader_sw_probe(struct pipe_loader_device **devs, int ndev);
  111.  
  112. #ifdef HAVE_PIPE_LOADER_DRM
  113.  
  114. /**
  115.  * Get a list of known DRM devices.
  116.  *
  117.  * This function is platform-specific.
  118.  *
  119.  * \sa pipe_loader_probe
  120.  */
  121. int
  122. pipe_loader_drm_probe(struct pipe_loader_device **devs, int ndev);
  123.  
  124. /**
  125.  * Initialize a DRM device in an already opened fd.
  126.  *
  127.  * This function is platform-specific.
  128.  *
  129.  * \sa pipe_loader_probe
  130.  */
  131. boolean
  132. pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, int fd);
  133.  
  134. #endif
  135.  
  136. #ifdef __cplusplus
  137. }
  138. #endif
  139.  
  140. #endif /* PIPE_LOADER_H */
  141.