Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/compat/linuxkpi/common/include/acpi/acpi.h
39604 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2017 Mark Johnston <[email protected]>
5
* Copyright (c) 2020 Vladimir Kondratyev <[email protected]>
6
* Copyright (c) 2025 The FreeBSD Foundation
7
*
8
* Portions of this software were developed by Björn Zeeb
9
* under sponsorship from the FreeBSD Foundation.
10
*
11
* Redistribution and use in source and binary forms, with or without
12
* modification, are permitted provided that the following conditions are
13
* met:
14
* 1. Redistributions of source code must retain the above copyright
15
* notice, this list of conditions and the following disclaimer.
16
* 2. Redistributions in binary form must reproduce the above copyright
17
* notice, this list of conditions and the following disclaimer in
18
* the documentation and/or other materials provided with the
19
* distribution.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
22
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
25
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
* SUCH DAMAGE.
32
*/
33
34
#ifndef _LINUXKPI_ACPI_ACPI_H_
35
#define _LINUXKPI_ACPI_ACPI_H_
36
37
/*
38
* LINUXKPI_WANT_LINUX_ACPI is a temporary workaround to allow drm-kmod
39
* to update all needed branches without breaking builds.
40
* Once that happened and checks are implemented based on __FreeBSD_version
41
* we will remove these conditions again.
42
*/
43
44
/*
45
* FreeBSD import of ACPICA has a typedef for BOOLEAN which conflicts with
46
* amdgpu driver. Workaround it on preprocessor level.
47
*/
48
#define ACPI_USE_SYSTEM_INTTYPES
49
#define BOOLEAN unsigned char
50
typedef unsigned char UINT8;
51
typedef unsigned short UINT16;
52
typedef short INT16;
53
typedef unsigned int UINT32;
54
typedef int INT32;
55
typedef uint64_t UINT64;
56
typedef int64_t INT64;
57
#include <contrib/dev/acpica/include/acpi.h>
58
#undef BOOLEAN
59
60
typedef ACPI_IO_ADDRESS acpi_io_address;
61
typedef ACPI_HANDLE acpi_handle;
62
typedef ACPI_OBJECT_HANDLER acpi_object_handler;
63
typedef ACPI_OBJECT_TYPE acpi_object_type;
64
typedef ACPI_STATUS acpi_status;
65
typedef ACPI_STRING acpi_string;
66
typedef ACPI_SIZE acpi_size;
67
typedef ACPI_WALK_CALLBACK acpi_walk_callback;
68
69
union linuxkpi_acpi_object {
70
acpi_object_type type;
71
struct {
72
acpi_object_type type;
73
UINT64 value;
74
} integer;
75
struct {
76
acpi_object_type type;
77
UINT32 length;
78
char *pointer;
79
} string;
80
struct {
81
acpi_object_type type;
82
UINT32 length;
83
UINT8 *pointer;
84
} buffer;
85
struct {
86
acpi_object_type type;
87
UINT32 count;
88
union linuxkpi_acpi_object *elements;
89
} package;
90
struct {
91
acpi_object_type type;
92
acpi_object_type actual_type;
93
acpi_handle handle;
94
} reference;
95
struct {
96
acpi_object_type type;
97
UINT32 proc_id;
98
acpi_io_address pblk_address;
99
UINT32 pblk_length;
100
} processor;
101
struct {
102
acpi_object_type type;
103
UINT32 system_level;
104
UINT32 resource_order;
105
} power_resource;
106
};
107
108
#ifdef LINUXKPI_WANT_LINUX_ACPI
109
struct linuxkpi_acpi_buffer {
110
acpi_size length; /* Length in bytes of the buffer */
111
void *pointer; /* pointer to buffer */
112
};
113
114
typedef struct linuxkpi_acpi_buffer lkpi_acpi_buffer_t;
115
#else
116
typedef ACPI_BUFFER lkpi_acpi_buffer_t;
117
#endif
118
119
static inline ACPI_STATUS
120
acpi_evaluate_object(ACPI_HANDLE Object, ACPI_STRING Pathname,
121
ACPI_OBJECT_LIST *ParameterObjects, lkpi_acpi_buffer_t *ReturnObjectBuffer)
122
{
123
return (AcpiEvaluateObject(
124
Object, Pathname, ParameterObjects, (ACPI_BUFFER *)ReturnObjectBuffer));
125
}
126
127
static inline const char *
128
acpi_format_exception(ACPI_STATUS Exception)
129
{
130
return (AcpiFormatException(Exception));
131
}
132
133
static inline ACPI_STATUS
134
acpi_get_handle(ACPI_HANDLE Parent, const char *Pathname,
135
ACPI_HANDLE *RetHandle)
136
{
137
return (AcpiGetHandle(Parent, Pathname, RetHandle));
138
}
139
140
static inline ACPI_STATUS
141
acpi_get_data(ACPI_HANDLE ObjHandle, ACPI_OBJECT_HANDLER Handler, void **Data)
142
{
143
return (AcpiGetData(ObjHandle, Handler, Data));
144
}
145
146
static inline ACPI_STATUS
147
acpi_get_name(ACPI_HANDLE Object, UINT32 NameType, lkpi_acpi_buffer_t *RetPathPtr)
148
{
149
return (AcpiGetName(Object, NameType, (ACPI_BUFFER *)RetPathPtr));
150
}
151
152
static inline ACPI_STATUS
153
acpi_get_table(ACPI_STRING Signature, UINT32 Instance,
154
ACPI_TABLE_HEADER **OutTable)
155
{
156
return (AcpiGetTable(Signature, Instance, OutTable));
157
}
158
159
static inline void
160
acpi_put_table(ACPI_TABLE_HEADER *Table)
161
{
162
AcpiPutTable(Table);
163
}
164
165
#ifdef LINUXKPI_WANT_LINUX_ACPI
166
#define acpi_object linuxkpi_acpi_object
167
#define acpi_buffer linuxkpi_acpi_buffer
168
#endif
169
170
#endif /* _LINUXKPI_ACPI_ACPI_H_ */
171
172