ReactOS 0.4.15-dev-7842-g558ab78
nsarguments.c File Reference
#include "acpi.h"
#include "accommon.h"
#include "acnamesp.h"
#include "acpredef.h"
Include dependency graph for nsarguments.c:

Go to the source code of this file.

Macros

#define _COMPONENT   ACPI_NAMESPACE
 

Functions

void AcpiNsCheckArgumentTypes (ACPI_EVALUATE_INFO *Info)
 
void AcpiNsCheckAcpiCompliance (char *Pathname, ACPI_NAMESPACE_NODE *Node, const ACPI_PREDEFINED_INFO *Predefined)
 
void AcpiNsCheckArgumentCount (char *Pathname, ACPI_NAMESPACE_NODE *Node, UINT32 UserParamCount, const ACPI_PREDEFINED_INFO *Predefined)
 

Macro Definition Documentation

◆ _COMPONENT

#define _COMPONENT   ACPI_NAMESPACE

Definition at line 50 of file nsarguments.c.

Function Documentation

◆ AcpiNsCheckAcpiCompliance()

void AcpiNsCheckAcpiCompliance ( char Pathname,
ACPI_NAMESPACE_NODE Node,
const ACPI_PREDEFINED_INFO Predefined 
)

Definition at line 135 of file nsarguments.c.

139{
140 UINT32 AmlParamCount;
141 UINT32 RequiredParamCount;
142
143
144 if (!Predefined || (Node->Flags & ANOBJ_EVALUATED))
145 {
146 return;
147 }
148
149 /* Get the ACPI-required arg count from the predefined info table */
150
151 RequiredParamCount =
153
154 /*
155 * If this object is not a control method, we can check if the ACPI
156 * spec requires that it be a method.
157 */
158 if (Node->Type != ACPI_TYPE_METHOD)
159 {
160 if (RequiredParamCount > 0)
161 {
162 /* Object requires args, must be implemented as a method */
163
165 "Object (%s) must be a control method with %u arguments",
166 AcpiUtGetTypeName (Node->Type), RequiredParamCount));
167 }
168 else if (!RequiredParamCount && !Predefined->Info.ExpectedBtypes)
169 {
170 /* Object requires no args and no return value, must be a method */
171
173 "Object (%s) must be a control method "
174 "with no arguments and no return value",
175 AcpiUtGetTypeName (Node->Type)));
176 }
177
178 return;
179 }
180
181 /*
182 * This is a control method.
183 * Check that the ASL/AML-defined parameter count for this method
184 * matches the ACPI-required parameter count
185 *
186 * Some methods are allowed to have a "minimum" number of args (_SCP)
187 * because their definition in ACPI has changed over time.
188 *
189 * Note: These are BIOS errors in the declaration of the object
190 */
191 AmlParamCount = Node->Object->Method.ParamCount;
192
193 if (AmlParamCount < RequiredParamCount)
194 {
196 "Insufficient arguments - "
197 "ASL declared %u, ACPI requires %u",
198 AmlParamCount, RequiredParamCount));
199 }
200 else if ((AmlParamCount > RequiredParamCount) &&
201 !(Predefined->Info.ArgumentList & ARG_COUNT_IS_MINIMUM))
202 {
204 "Excess arguments - "
205 "ASL declared %u, ACPI requires %u",
206 AmlParamCount, RequiredParamCount));
207 }
208}
unsigned int UINT32
#define ANOBJ_EVALUATED
Definition: aclocal.h:220
#define ACPI_BIOS_ERROR_PREDEFINED(plist)
Definition: acmacros.h:466
#define ACPI_WARN_ALWAYS
Definition: acnamesp.h:87
#define AE_INFO
Definition: acoutput.h:230
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING Pathname
Definition: acpixf.h:704
#define METHOD_GET_ARG_COUNT(ArgList)
Definition: acpredef.h:147
#define ARG_COUNT_IS_MINIMUM
Definition: acpredef.h:144
#define ACPI_TYPE_METHOD
Definition: actypes.h:695
const char * AcpiUtGetTypeName(ACPI_OBJECT_TYPE Type)
Definition: utdecode.c:250
UINT8 ExpectedBtypes
Definition: aclocal.h:377
UINT16 ArgumentList
Definition: aclocal.h:376
ACPI_NAME_INFO Info
Definition: aclocal.h:441
Definition: dlist.c:348

Referenced by AcpiNsEvaluate().

◆ AcpiNsCheckArgumentCount()

void AcpiNsCheckArgumentCount ( char Pathname,
ACPI_NAMESPACE_NODE Node,
UINT32  UserParamCount,
const ACPI_PREDEFINED_INFO Predefined 
)

Definition at line 228 of file nsarguments.c.

233{
234 UINT32 AmlParamCount;
235 UINT32 RequiredParamCount;
236
237
238 if (Node->Flags & ANOBJ_EVALUATED)
239 {
240 return;
241 }
242
243 if (!Predefined)
244 {
245 /*
246 * Not a predefined name. Check the incoming user argument count
247 * against the count that is specified in the method/object.
248 */
249 if (Node->Type != ACPI_TYPE_METHOD)
250 {
251 if (UserParamCount)
252 {
254 "%u arguments were passed to a non-method ACPI object (%s)",
255 UserParamCount, AcpiUtGetTypeName (Node->Type)));
256 }
257
258 return;
259 }
260
261 /*
262 * This is a control method. Check the parameter count.
263 * We can only check the incoming argument count against the
264 * argument count declared for the method in the ASL/AML.
265 *
266 * Emit a message if too few or too many arguments have been passed
267 * by the caller.
268 *
269 * Note: Too many arguments will not cause the method to
270 * fail. However, the method will fail if there are too few
271 * arguments and the method attempts to use one of the missing ones.
272 */
273 AmlParamCount = Node->Object->Method.ParamCount;
274
275 if (UserParamCount < AmlParamCount)
276 {
278 "Insufficient arguments - "
279 "Caller passed %u, method requires %u",
280 UserParamCount, AmlParamCount));
281 }
282 else if (UserParamCount > AmlParamCount)
283 {
285 "Excess arguments - "
286 "Caller passed %u, method requires %u",
287 UserParamCount, AmlParamCount));
288 }
289
290 return;
291 }
292
293 /*
294 * This is a predefined name. Validate the user-supplied parameter
295 * count against the ACPI specification. We don't validate against
296 * the method itself because what is important here is that the
297 * caller is in conformance with the spec. (The arg count for the
298 * method was checked against the ACPI spec earlier.)
299 *
300 * Some methods are allowed to have a "minimum" number of args (_SCP)
301 * because their definition in ACPI has changed over time.
302 */
303 RequiredParamCount =
305
306 if (UserParamCount < RequiredParamCount)
307 {
309 "Insufficient arguments - "
310 "Caller passed %u, ACPI requires %u",
311 UserParamCount, RequiredParamCount));
312 }
313 else if ((UserParamCount > RequiredParamCount) &&
314 !(Predefined->Info.ArgumentList & ARG_COUNT_IS_MINIMUM))
315 {
317 "Excess arguments - "
318 "Caller passed %u, ACPI requires %u",
319 UserParamCount, RequiredParamCount));
320 }
321}
#define ACPI_INFO_PREDEFINED(plist)
Definition: acmacros.h:465
#define ACPI_WARN_PREDEFINED(plist)
Definition: acmacros.h:464

Referenced by AcpiNsEvaluate().

◆ AcpiNsCheckArgumentTypes()

void AcpiNsCheckArgumentTypes ( ACPI_EVALUATE_INFO Info)

Definition at line 68 of file nsarguments.c.

70{
71 UINT16 ArgTypeList;
72 UINT8 ArgCount;
73 UINT8 ArgType;
74 UINT8 UserArgType;
75 UINT32 i;
76
77
78 /*
79 * If not a predefined name, cannot typecheck args, because
80 * we have no idea what argument types are expected.
81 * Also, ignore typecheck if warnings/errors if this method
82 * has already been evaluated at least once -- in order
83 * to suppress repetitive messages.
84 */
85 if (!Info->Predefined || (Info->Node->Flags & ANOBJ_EVALUATED))
86 {
87 return;
88 }
89
90 ArgTypeList = Info->Predefined->Info.ArgumentList;
91 ArgCount = METHOD_GET_ARG_COUNT (ArgTypeList);
92
93 /* Typecheck all arguments */
94
95 for (i = 0; ((i < ArgCount) && (i < Info->ParamCount)); i++)
96 {
97 ArgType = METHOD_GET_NEXT_TYPE (ArgTypeList);
98 UserArgType = Info->Parameters[i]->Common.Type;
99
100 /* No typechecking for ACPI_TYPE_ANY */
101
102 if ((UserArgType != ArgType) && (ArgType != ACPI_TYPE_ANY))
103 {
105 "Argument #%u type mismatch - "
106 "Found [%s], ACPI requires [%s]", (i + 1),
107 AcpiUtGetTypeName (UserArgType),
108 AcpiUtGetTypeName (ArgType)));
109
110 /* Prevent any additional typechecking for this method */
111
112 Info->Node->Flags |= ANOBJ_EVALUATED;
113 }
114 }
115}
unsigned short UINT16
unsigned char UINT8
#define METHOD_GET_NEXT_TYPE(ArgList)
Definition: acpredef.h:148
#define ACPI_TYPE_ANY
Definition: actypes.h:687
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690

Referenced by AcpiNsEvaluate().