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