ReactOS 0.4.16-dev-1946-g52006dd
utilities.h File Reference
Include dependency graph for utilities.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define UACPI_PTR_TO_VIRT_ADDR(ptr)   ((uacpi_virt_addr)(ptr))
 
#define UACPI_VIRT_ADDR_TO_PTR(vaddr)   ((void*)(vaddr))
 
#define UACPI_PTR_ADD(ptr, value)   ((void*)(((uacpi_u8*)(ptr)) + value))
 
#define UACPI_NANOSECONDS_PER_SEC   (1000ull * 1000ull * 1000ull)
 

Enumerations

enum  uacpi_base { UACPI_BASE_AUTO , UACPI_BASE_OCT = 8 , UACPI_BASE_DEC = 10 , UACPI_BASE_HEX = 16 }
 

Functions

static uacpi_phys_addr uacpi_truncate_phys_addr_with_warn (uacpi_u64 large_addr)
 
void uacpi_eisa_id_to_string (uacpi_u32, uacpi_char *out_string)
 
uacpi_status uacpi_string_to_integer (const uacpi_char *str, uacpi_size max_chars, enum uacpi_base base, uacpi_u64 *out_value)
 
uacpi_bool uacpi_is_valid_nameseg (uacpi_u8 *nameseg)
 
void uacpi_free_dynamic_string (const uacpi_char *str)
 

Macro Definition Documentation

◆ UACPI_NANOSECONDS_PER_SEC

#define UACPI_NANOSECONDS_PER_SEC   (1000ull * 1000ull * 1000ull)

Definition at line 45 of file utilities.h.

◆ UACPI_PTR_ADD

#define UACPI_PTR_ADD (   ptr,
  value 
)    ((void*)(((uacpi_u8*)(ptr)) + value))

Definition at line 23 of file utilities.h.

◆ UACPI_PTR_TO_VIRT_ADDR

#define UACPI_PTR_TO_VIRT_ADDR (   ptr)    ((uacpi_virt_addr)(ptr))

Definition at line 20 of file utilities.h.

◆ UACPI_VIRT_ADDR_TO_PTR

#define UACPI_VIRT_ADDR_TO_PTR (   vaddr)    ((void*)(vaddr))

Definition at line 21 of file utilities.h.

Enumeration Type Documentation

◆ uacpi_base

Enumerator
UACPI_BASE_AUTO 
UACPI_BASE_OCT 
UACPI_BASE_DEC 
UACPI_BASE_HEX 

Definition at line 30 of file utilities.h.

30 {
33 UACPI_BASE_DEC = 10,
34 UACPI_BASE_HEX = 16,
35};
@ UACPI_BASE_OCT
Definition: utilities.h:32
@ UACPI_BASE_DEC
Definition: utilities.h:33
@ UACPI_BASE_AUTO
Definition: utilities.h:31
@ UACPI_BASE_HEX
Definition: utilities.h:34

Function Documentation

◆ uacpi_eisa_id_to_string()

void uacpi_eisa_id_to_string ( uacpi_u32  id,
uacpi_char out_string 
)

Definition at line 323 of file utilities.c.

324{
325 static uacpi_char hex_to_ascii[16] = {
326 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
327 'A', 'B', 'C', 'D', 'E', 'F'
328 };
329
330 /*
331 * For whatever reason bits are encoded upper to lower here, swap
332 * them around so that we don't have to do ridiculous bit shifts
333 * everywhere.
334 */
335 union {
336 uacpi_u8 bytes[4];
337 uacpi_u32 dword;
338 } orig, swapped;
339
340 orig.dword = id;
341 swapped.bytes[0] = orig.bytes[3];
342 swapped.bytes[1] = orig.bytes[2];
343 swapped.bytes[2] = orig.bytes[1];
344 swapped.bytes[3] = orig.bytes[0];
345
346 /*
347 * Bit 16 - 20: 3rd character (- 0x40) of mfg code
348 * Bit 21 - 25: 2nd character (- 0x40) of mfg code
349 * Bit 26 - 30: 1st character (- 0x40) of mfg code
350 */
351 out_string[0] = (uacpi_char)(0x40 + ((swapped.dword >> 26) & 0x1F));
352 out_string[1] = (uacpi_char)(0x40 + ((swapped.dword >> 21) & 0x1F));
353 out_string[2] = (uacpi_char)(0x40 + ((swapped.dword >> 16) & 0x1F));
354
355 /*
356 * Bit 0 - 3 : 4th hex digit of product number
357 * Bit 4 - 7 : 3rd hex digit of product number
358 * Bit 8 - 11: 2nd hex digit of product number
359 * Bit 12 - 15: 1st hex digit of product number
360 */
361 out_string[3] = hex_to_ascii[(swapped.dword >> 12) & 0x0F];
362 out_string[4] = hex_to_ascii[(swapped.dword >> 8 ) & 0x0F];
363 out_string[5] = hex_to_ascii[(swapped.dword >> 4 ) & 0x0F];
364 out_string[6] = hex_to_ascii[(swapped.dword >> 0 ) & 0x0F];
365
366 out_string[7] = '\0';
367}
static unsigned char bytes[4]
Definition: adnsresfilter.c:74
uint32_t uacpi_u32
Definition: types.h:21
char uacpi_char
Definition: types.h:44
uint8_t uacpi_u8
Definition: types.h:19
GLuint id
Definition: glext.h:5910

Referenced by uacpi_eval_cid(), and uacpi_eval_hid().

◆ uacpi_free_dynamic_string()

void uacpi_free_dynamic_string ( const uacpi_char str)

Definition at line 1135 of file utilities.c.

1136{
1137 if (str == UACPI_NULL)
1138 return;
1139
1140 uacpi_free((void*)str, uacpi_strlen(str) + 1);
1141}
#define uacpi_free(mem, _)
Definition: stdlib.h:96
uacpi_size uacpi_strlen(const uacpi_char *str)
Definition: stdlib.c:72
#define UACPI_NULL
Definition: types.h:33
const WCHAR * str

Referenced by handle_notify(), trace_invalid_return_type(), trace_method_abort(), trace_named_object_lookup_or_creation_failure(), trace_region_io(), uacpi_deinitialize_interfaces(), uacpi_dispatch_opregion_io(), uacpi_eval_dstate_method_template(), uacpi_free_absolute_path(), uacpi_trace_region_error(), and uacpi_uninstall_interface().

◆ uacpi_is_valid_nameseg()

uacpi_bool uacpi_is_valid_nameseg ( uacpi_u8 nameseg)

Definition at line 315 of file utilities.c.

316{
317 return is_valid_name_byte(nameseg[0]) &&
318 is_valid_name_byte(nameseg[1]) &&
319 is_valid_name_byte(nameseg[2]) &&
320 is_valid_name_byte(nameseg[3]);
321}
static uacpi_bool is_valid_name_byte(uacpi_u8 c)
Definition: utilities.c:299

Referenced by parse_nameseg().

◆ uacpi_string_to_integer()

uacpi_status uacpi_string_to_integer ( const uacpi_char str,
uacpi_size  max_chars,
enum uacpi_base  base,
uacpi_u64 out_value 
)

Definition at line 233 of file utilities.c.

237{
239 uacpi_bool negative = UACPI_FALSE;
240 uacpi_u64 next, value = 0;
241 uacpi_char c = '\0';
242
243 while (consume_if(&str, &max_chars, CHAR_TYPE_SPACE));
244
245 if (consume_if_equals(&str, &max_chars, '-'))
246 negative = UACPI_TRUE;
247 else
248 consume_if_equals(&str, &max_chars, '+');
249
250 if (base == UACPI_BASE_AUTO) {
252
253 if (consume_if_equals(&str, &max_chars, '0')) {
255 if (consume_if_equals(&str, &max_chars, 'x'))
257 }
258 }
259
260 while (consume_one(&str, &max_chars, &c)) {
263 next = c - '0';
264 if (base == UACPI_BASE_OCT && next > 7)
265 goto out;
266 break;
269 if (base != UACPI_BASE_HEX)
270 goto out;
271 next = 10 + (to_lower(c) - 'a');
272 break;
273 default:
274 goto out;
275 }
276
277 next = (value * base) + next;
278 if ((next / base) != value) {
279 value = 0xFFFFFFFFFFFFFFFF;
280 goto out;
281 }
282
283 value = next;
284 }
285
286out:
287 if (negative)
288 value = -((uacpi_i64)value);
289
290 *out_value = value;
291 if (max_chars == 0 || c == '\0')
293
294 return ret;
295}
#define to_lower(c)
Definition: astoll.c:46
bool uacpi_bool
Definition: types.h:31
#define UACPI_FALSE
Definition: types.h:30
uint64_t uacpi_u64
Definition: types.h:22
int64_t uacpi_i64
Definition: types.h:27
#define UACPI_TRUE
Definition: types.h:29
uacpi_status
Definition: status.h:10
@ UACPI_STATUS_INVALID_ARGUMENT
Definition: status.h:18
@ UACPI_STATUS_OK
Definition: status.h:11
return ret
Definition: mutex.c:146
const GLubyte * c
Definition: glext.h:8905
static unsigned __int64 next
Definition: rand_nt.c:6
Definition: pdh_main.c:96
static uacpi_bool consume_if_equals(const uacpi_char **str, uacpi_size *size, uacpi_char c)
Definition: utilities.c:219
static uacpi_bool consume_one(const uacpi_char **str, uacpi_size *size, uacpi_char *out_char)
Definition: utilities.c:193
static uacpi_bool consume_if(const uacpi_char **str, uacpi_size *size, enum char_type type)
Definition: utilities.c:205
static const uacpi_u8 ascii_map[256]
Definition: utilities.c:24
@ CHAR_TYPE_ALHEX
Definition: utilities.c:20
@ CHAR_TYPE_DIGIT
Definition: utilities.c:17
@ CHAR_TYPE_LOWER
Definition: utilities.c:15
@ CHAR_TYPE_HEX_DIGIT
Definition: utilities.c:18
@ CHAR_TYPE_SPACE
Definition: utilities.c:12
@ CHAR_TYPE_UPPER
Definition: utilities.c:16
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Referenced by do_match_gpe_methods(), object_to_integer(), and parse_number().

◆ uacpi_truncate_phys_addr_with_warn()

static uacpi_phys_addr uacpi_truncate_phys_addr_with_warn ( uacpi_u64  large_addr)
inlinestatic

Definition at line 8 of file utilities.h.

9{
10 if (sizeof(uacpi_phys_addr) < 8 && large_addr > 0xFFFFFFFF) {
12 "truncating a physical address 0x%"UACPI_PRIX64
13 " outside of address space\n", UACPI_FMT64(large_addr)
14 );
15 }
16
17 return (uacpi_phys_addr)large_addr;
18}
#define uacpi_warn(...)
Definition: log.h:20
#define UACPI_PRIX64
Definition: types.h:61
#define UACPI_FMT64(val)
Definition: types.h:62
uacpi_u64 uacpi_phys_addr
Definition: types.h:17

Referenced by initialize_from_rsdp(), and initialize_from_rxsdt().