Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4358 Serge 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 */