ReactOS 0.4.17-dev-683-g0dafdc5
osi.h File Reference
#include <uacpi/types.h>
#include <uacpi/status.h>
Include dependency graph for osi.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef enum uacpi_vendor_interface uacpi_vendor_interface
 
typedef enum uacpi_interface_kind uacpi_interface_kind
 
typedef enum uacpi_host_interface uacpi_host_interface
 
typedef uacpi_bool(* uacpi_interface_handler) (const uacpi_char *name, uacpi_bool supported)
 
typedef enum uacpi_interface_action uacpi_interface_action
 

Enumerations

enum  uacpi_vendor_interface {
  UACPI_VENDOR_INTERFACE_NONE = 0 , UACPI_VENDOR_INTERFACE_WINDOWS_2000 , UACPI_VENDOR_INTERFACE_WINDOWS_XP , UACPI_VENDOR_INTERFACE_WINDOWS_XP_SP1 ,
  UACPI_VENDOR_INTERFACE_WINDOWS_SERVER_2003 , UACPI_VENDOR_INTERFACE_WINDOWS_XP_SP2 , UACPI_VENDOR_INTERFACE_WINDOWS_SERVER_2003_SP1 , UACPI_VENDOR_INTERFACE_WINDOWS_VISTA ,
  UACPI_VENDOR_INTERFACE_WINDOWS_SERVER_2008 , UACPI_VENDOR_INTERFACE_WINDOWS_VISTA_SP1 , UACPI_VENDOR_INTERFACE_WINDOWS_VISTA_SP2 , UACPI_VENDOR_INTERFACE_WINDOWS_7 ,
  UACPI_VENDOR_INTERFACE_WINDOWS_8 , UACPI_VENDOR_INTERFACE_WINDOWS_8_1 , UACPI_VENDOR_INTERFACE_WINDOWS_10 , UACPI_VENDOR_INTERFACE_WINDOWS_10_RS1 ,
  UACPI_VENDOR_INTERFACE_WINDOWS_10_RS2 , UACPI_VENDOR_INTERFACE_WINDOWS_10_RS3 , UACPI_VENDOR_INTERFACE_WINDOWS_10_RS4 , UACPI_VENDOR_INTERFACE_WINDOWS_10_RS5 ,
  UACPI_VENDOR_INTERFACE_WINDOWS_10_19H1 , UACPI_VENDOR_INTERFACE_WINDOWS_10_20H1 , UACPI_VENDOR_INTERFACE_WINDOWS_11 , UACPI_VENDOR_INTERFACE_WINDOWS_11_22H2
}
 
enum  uacpi_interface_kind { UACPI_INTERFACE_KIND_VENDOR = (1 << 0) , UACPI_INTERFACE_KIND_FEATURE = (1 << 1) , UACPI_INTERFACE_KIND_ALL }
 
enum  uacpi_host_interface {
  UACPI_HOST_INTERFACE_MODULE_DEVICE = 1 , UACPI_HOST_INTERFACE_PROCESSOR_DEVICE , UACPI_HOST_INTERFACE_3_0_THERMAL_MODEL , UACPI_HOST_INTERFACE_3_0_SCP_EXTENSIONS ,
  UACPI_HOST_INTERFACE_PROCESSOR_AGGREGATOR_DEVICE
}
 
enum  uacpi_interface_action { UACPI_INTERFACE_ACTION_DISABLE = 0 , UACPI_INTERFACE_ACTION_ENABLE }
 

Functions

uacpi_vendor_interface uacpi_latest_queried_vendor_interface (void)
 
uacpi_status uacpi_install_interface (const uacpi_char *name, uacpi_interface_kind)
 
uacpi_status uacpi_uninstall_interface (const uacpi_char *name)
 
uacpi_status uacpi_enable_host_interface (uacpi_host_interface)
 
uacpi_status uacpi_disable_host_interface (uacpi_host_interface)
 
uacpi_status uacpi_set_interface_query_handler (uacpi_interface_handler)
 
uacpi_status uacpi_bulk_configure_interfaces (uacpi_interface_action action, uacpi_interface_kind kind)
 

Typedef Documentation

◆ uacpi_host_interface

◆ uacpi_interface_action

◆ uacpi_interface_handler

typedef uacpi_bool(* uacpi_interface_handler) (const uacpi_char *name, uacpi_bool supported)

Definition at line 88 of file osi.h.

◆ uacpi_interface_kind

◆ uacpi_vendor_interface

Enumeration Type Documentation

◆ uacpi_host_interface

Enumerator
UACPI_HOST_INTERFACE_MODULE_DEVICE 
UACPI_HOST_INTERFACE_PROCESSOR_DEVICE 
UACPI_HOST_INTERFACE_3_0_THERMAL_MODEL 
UACPI_HOST_INTERFACE_3_0_SCP_EXTENSIONS 
UACPI_HOST_INTERFACE_PROCESSOR_AGGREGATOR_DEVICE 

Definition at line 72 of file osi.h.

72 {
uacpi_host_interface
Definition: osi.h:72
@ UACPI_HOST_INTERFACE_3_0_THERMAL_MODEL
Definition: osi.h:75
@ UACPI_HOST_INTERFACE_3_0_SCP_EXTENSIONS
Definition: osi.h:76
@ UACPI_HOST_INTERFACE_MODULE_DEVICE
Definition: osi.h:73
@ UACPI_HOST_INTERFACE_PROCESSOR_AGGREGATOR_DEVICE
Definition: osi.h:77
@ UACPI_HOST_INTERFACE_PROCESSOR_DEVICE
Definition: osi.h:74

◆ uacpi_interface_action

Enumerator
UACPI_INTERFACE_ACTION_DISABLE 
UACPI_INTERFACE_ACTION_ENABLE 

Definition at line 102 of file osi.h.

102 {
uacpi_interface_action
Definition: osi.h:102
@ UACPI_INTERFACE_ACTION_ENABLE
Definition: osi.h:104
@ UACPI_INTERFACE_ACTION_DISABLE
Definition: osi.h:103

◆ uacpi_interface_kind

Enumerator
UACPI_INTERFACE_KIND_VENDOR 
UACPI_INTERFACE_KIND_FEATURE 
UACPI_INTERFACE_KIND_ALL 

Definition at line 52 of file osi.h.

52 {
uacpi_interface_kind
Definition: osi.h:52
@ UACPI_INTERFACE_KIND_ALL
Definition: osi.h:55
@ UACPI_INTERFACE_KIND_FEATURE
Definition: osi.h:54
@ UACPI_INTERFACE_KIND_VENDOR
Definition: osi.h:53

◆ uacpi_vendor_interface

Enumerator
UACPI_VENDOR_INTERFACE_NONE 
UACPI_VENDOR_INTERFACE_WINDOWS_2000 
UACPI_VENDOR_INTERFACE_WINDOWS_XP 
UACPI_VENDOR_INTERFACE_WINDOWS_XP_SP1 
UACPI_VENDOR_INTERFACE_WINDOWS_SERVER_2003 
UACPI_VENDOR_INTERFACE_WINDOWS_XP_SP2 
UACPI_VENDOR_INTERFACE_WINDOWS_SERVER_2003_SP1 
UACPI_VENDOR_INTERFACE_WINDOWS_VISTA 
UACPI_VENDOR_INTERFACE_WINDOWS_SERVER_2008 
UACPI_VENDOR_INTERFACE_WINDOWS_VISTA_SP1 
UACPI_VENDOR_INTERFACE_WINDOWS_VISTA_SP2 
UACPI_VENDOR_INTERFACE_WINDOWS_7 
UACPI_VENDOR_INTERFACE_WINDOWS_8 
UACPI_VENDOR_INTERFACE_WINDOWS_8_1 
UACPI_VENDOR_INTERFACE_WINDOWS_10 
UACPI_VENDOR_INTERFACE_WINDOWS_10_RS1 
UACPI_VENDOR_INTERFACE_WINDOWS_10_RS2 
UACPI_VENDOR_INTERFACE_WINDOWS_10_RS3 
UACPI_VENDOR_INTERFACE_WINDOWS_10_RS4 
UACPI_VENDOR_INTERFACE_WINDOWS_10_RS5 
UACPI_VENDOR_INTERFACE_WINDOWS_10_19H1 
UACPI_VENDOR_INTERFACE_WINDOWS_10_20H1 
UACPI_VENDOR_INTERFACE_WINDOWS_11 
UACPI_VENDOR_INTERFACE_WINDOWS_11_22H2 

Definition at line 12 of file osi.h.

12 {
uacpi_vendor_interface
Definition: osi.h:12
@ UACPI_VENDOR_INTERFACE_WINDOWS_VISTA_SP2
Definition: osi.h:23
@ UACPI_VENDOR_INTERFACE_WINDOWS_10_RS3
Definition: osi.h:30
@ UACPI_VENDOR_INTERFACE_WINDOWS_11_22H2
Definition: osi.h:36
@ UACPI_VENDOR_INTERFACE_WINDOWS_10
Definition: osi.h:27
@ UACPI_VENDOR_INTERFACE_WINDOWS_11
Definition: osi.h:35
@ UACPI_VENDOR_INTERFACE_WINDOWS_8
Definition: osi.h:25
@ UACPI_VENDOR_INTERFACE_WINDOWS_XP_SP2
Definition: osi.h:18
@ UACPI_VENDOR_INTERFACE_WINDOWS_SERVER_2003
Definition: osi.h:17
@ UACPI_VENDOR_INTERFACE_WINDOWS_10_RS5
Definition: osi.h:32
@ UACPI_VENDOR_INTERFACE_WINDOWS_VISTA_SP1
Definition: osi.h:22
@ UACPI_VENDOR_INTERFACE_WINDOWS_10_RS4
Definition: osi.h:31
@ UACPI_VENDOR_INTERFACE_WINDOWS_SERVER_2003_SP1
Definition: osi.h:19
@ UACPI_VENDOR_INTERFACE_WINDOWS_SERVER_2008
Definition: osi.h:21
@ UACPI_VENDOR_INTERFACE_WINDOWS_XP_SP1
Definition: osi.h:16
@ UACPI_VENDOR_INTERFACE_NONE
Definition: osi.h:13
@ UACPI_VENDOR_INTERFACE_WINDOWS_7
Definition: osi.h:24
@ UACPI_VENDOR_INTERFACE_WINDOWS_XP
Definition: osi.h:15
@ UACPI_VENDOR_INTERFACE_WINDOWS_8_1
Definition: osi.h:26
@ UACPI_VENDOR_INTERFACE_WINDOWS_VISTA
Definition: osi.h:20
@ UACPI_VENDOR_INTERFACE_WINDOWS_10_20H1
Definition: osi.h:34
@ UACPI_VENDOR_INTERFACE_WINDOWS_10_19H1
Definition: osi.h:33
@ UACPI_VENDOR_INTERFACE_WINDOWS_10_RS1
Definition: osi.h:28
@ UACPI_VENDOR_INTERFACE_WINDOWS_10_RS2
Definition: osi.h:29
@ UACPI_VENDOR_INTERFACE_WINDOWS_2000
Definition: osi.h:14

Function Documentation

◆ uacpi_bulk_configure_interfaces()

uacpi_status uacpi_bulk_configure_interfaces ( uacpi_interface_action  action,
uacpi_interface_kind  kind 
)

Bulk interface configuration, used to disable or enable all interfaces that match 'kind'.

This is generally only needed to work around buggy hardware, for example if requested from the kernel command line.

By default, all vendor strings (like "Windows 2000") are enabled, and all host features (like "3.0 Thermal Model") are disabled.

Definition at line 337 of file osi.c.

340{
343
345
348 return ret;
349
350 interface = registered_interfaces;
351 while (interface) {
352 if (kind & interface->kind)
354
355 interface = interface->next;
356 }
357
359 return ret;
360}
#define interface
Definition: basetyps.h:61
static uacpi_status uacpi_release_native_mutex(uacpi_handle mtx)
Definition: mutex.h:25
static uacpi_status uacpi_acquire_native_mutex(uacpi_handle mtx)
Definition: mutex.h:13
#define UACPI_ENSURE_INIT_LEVEL_AT_LEAST(lvl)
Definition: context.h:127
#define uacpi_unlikely_error(expr)
Definition: status.h:49
uacpi_status
Definition: status.h:10
@ UACPI_INIT_LEVEL_SUBSYSTEM_INITIALIZED
Definition: types.h:72
return ret
Definition: mutex.c:147
action
Definition: namespace.c:707
static uacpi_handle interface_mutex
Definition: osi.c:26
static struct registered_interface * registered_interfaces
Definition: osi.c:27
static unsigned __int64 next
Definition: rand_nt.c:6

◆ uacpi_disable_host_interface()

uacpi_status uacpi_disable_host_interface ( uacpi_host_interface  type)

Definition at line 309 of file osi.c.

310{
312}
#define UACPI_FALSE
Definition: types.h:30
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
static uacpi_status configure_host_interface(uacpi_host_interface type, uacpi_bool enabled)
Definition: osi.c:279

◆ uacpi_enable_host_interface()

uacpi_status uacpi_enable_host_interface ( uacpi_host_interface  type)

Same as install/uninstall interface, but comes with an enum of known interfaces defined by the ACPI specification. These are disabled by default as they depend on the host kernel support.

Definition at line 304 of file osi.c.

305{
307}
#define UACPI_TRUE
Definition: types.h:29

◆ uacpi_install_interface()

uacpi_status uacpi_install_interface ( const uacpi_char name,
uacpi_interface_kind  kind 
)

Install or uninstall an interface.

The interface kind is used for matching during interface enumeration in uacpi_bulk_configure_interfaces().

After installing an interface, all _OSI queries report it as supported.

Definition at line 173 of file osi.c.

176{
179 uacpi_char *name_copy;
180 uacpi_size name_size;
181
183
186 return ret;
187
188 interface = find_interface_unlocked(name);
189 if (interface != UACPI_NULL) {
190 if (interface->disabled)
191 interface->disabled = UACPI_FALSE;
192
194 goto out;
195 }
196
197 interface = uacpi_kernel_alloc(sizeof(*interface));
200 goto out;
201 }
202
203 name_size = uacpi_strlen(name) + 1;
204 name_copy = uacpi_kernel_alloc(name_size);
205 if (uacpi_unlikely(name_copy == UACPI_NULL)) {
206 uacpi_free(interface, sizeof(*interface));
208 goto out;
209 }
210
211 uacpi_memcpy(name_copy, name, name_size);
212 interface->name = name_copy;
213 interface->weight = 0;
214 interface->kind = kind;
215 interface->host_type = 0;
216 interface->disabled = 0;
217 interface->dynamic = 1;
220
221out:
223 return ret;
224}
static struct list registered_interfaces
Definition: rpc.c:50
#define uacpi_memcpy
Definition: stdlib.h:34
#define uacpi_free(mem, _)
Definition: stdlib.h:96
uacpi_size uacpi_strlen(const uacpi_char *str)
Definition: stdlib.c:72
#define uacpi_unlikely(expr)
Definition: compiler.h:88
size_t uacpi_size
Definition: types.h:37
char uacpi_char
Definition: types.h:44
#define UACPI_NULL
Definition: types.h:33
@ UACPI_STATUS_OUT_OF_MEMORY
Definition: status.h:13
@ UACPI_STATUS_ALREADY_EXISTS
Definition: status.h:20
void * uacpi_kernel_alloc(uacpi_size size)
Definition: uacpiosl.c:111
char * name
Definition: compiler.c:66
struct define * next
Definition: compiler.c:65
Definition: name.c:39
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList

◆ uacpi_latest_queried_vendor_interface()

uacpi_vendor_interface uacpi_latest_queried_vendor_interface ( void  )

Returns the "latest" AML-queried _OSI vendor interface.

E.g. for the following AML code: _OSI("Windows 2021") _OSI("Windows 2000")

This function will return UACPI_VENDOR_INTERFACE_WINDOWS_11, since this is the latest version of the interface the code queried, even though the "Windows 2000" query came after "Windows 2021".

Definition at line 136 of file osi.c.

137{
139}
#define uacpi_atomic_load32(ptr)
Definition: atomic.h:322
static uacpi_u32 latest_queried_interface
Definition: osi.c:29

◆ uacpi_set_interface_query_handler()

uacpi_status uacpi_set_interface_query_handler ( uacpi_interface_handler  handler)

Set a custom interface query (_OSI) handler.

This callback will be invoked for each _OSI query with the value passed in the _OSI, as well as whether the interface was detected as supported. The callback is able to override the return value dynamically or leave it untouched if desired (e.g. if it simply wants to log something or do internal bookkeeping of some kind).

Definition at line 314 of file osi.c.

317{
319
321
324 return ret;
325
328 goto out;
329 }
330
332out:
334 return ret;
335}
UINT(* handler)(MSIPACKAGE *)
Definition: action.c:7512
static uacpi_interface_handler interface_handler
Definition: osi.c:28

◆ uacpi_uninstall_interface()

uacpi_status uacpi_uninstall_interface ( const uacpi_char name)

Definition at line 226 of file osi.c.

227{
228 struct registered_interface *cur, *prev;
230
232
235 return ret;
236
238 prev = cur;
239
241 while (cur) {
242 if (uacpi_strcmp(cur->name, name) != 0) {
243 prev = cur;
244 cur = cur->next;
245 continue;
246 }
247
248 if (cur->dynamic) {
249 if (prev == cur) {
251 } else {
252 prev->next = cur->next;
253 }
254
257 uacpi_free(cur, sizeof(*cur));
258 return UACPI_STATUS_OK;
259 }
260
261 /*
262 * If this interface was already disabled, pretend we didn't actually
263 * find it and keep ret as UACPI_STATUS_NOT_FOUND. The fact that it's
264 * still in the registered list is an implementation detail of
265 * predefined interfaces.
266 */
267 if (!cur->disabled) {
268 cur->disabled = UACPI_TRUE;
270 }
271
272 break;
273 }
274
276 return ret;
277}
uacpi_i32 uacpi_strcmp(const uacpi_char *lhs, const uacpi_char *rhs)
Definition: stdlib.c:96
@ UACPI_STATUS_NOT_FOUND
Definition: status.h:17
@ UACPI_STATUS_OK
Definition: status.h:11
FxCollectionEntry * cur
void uacpi_free_dynamic_string(const uacpi_char *str)
Definition: utilities.c:1148
struct registered_interface * next
Definition: osi.c:23