Go to the source code of this file.
|
| static uacpi_namespace_node * | find_pci_root (uacpi_namespace_node *node) |
| |
| static uacpi_bool | pci_address_equal (const uacpi_pci_address *lhs, const uacpi_pci_address *rhs) |
| |
| static void | pci_region_device_close (struct pci_region_device *dev) |
| |
| static uacpi_bool | pci_region_device_open (struct pci_region_device *dev, const uacpi_pci_address *address) |
| |
| static enum pci_device_kind | pci_region_device_probe (struct pci_region_device *dev, const uacpi_pci_address *address, uacpi_u8 *out_secondary_bus) |
| |
| static const uacpi_char * | pci_region_state_to_string (uacpi_u8 state) |
| |
| static struct pci_region_device * | pci_region_resolve (struct pci_region_ctx *ctx) |
| |
| static void | pci_region_ctx_free (struct pci_region_ctx *ctx) |
| |
| static uacpi_size | pci_region_collect_devices (uacpi_namespace_node *pci_root, uacpi_namespace_node *device, struct pci_region_device *out) |
| |
| static uacpi_status | pci_region_find_devices (struct pci_region_ctx *ctx, uacpi_namespace_node *pci_root, uacpi_namespace_node *device) |
| |
| static uacpi_status | pci_region_attach (uacpi_region_attach_data *data) |
| |
| static uacpi_status | pci_region_detach (uacpi_region_detach_data *data) |
| |
| static uacpi_bool | pci_write_is_protected (struct pci_region_device *dev, uacpi_size offset) |
| |
| static uacpi_status | pci_region_do_rw (uacpi_region_op op, uacpi_region_rw_data *data) |
| |
| static uacpi_status | handle_pci_region (uacpi_region_op op, uacpi_handle op_data) |
| |
| static uacpi_status | memory_region_attach (uacpi_region_attach_data *data) |
| |
| static uacpi_status | memory_region_detach (uacpi_region_detach_data *data) |
| |
| static uacpi_status | io_region_attach (uacpi_region_attach_data *data) |
| |
| static uacpi_status | io_region_detach (uacpi_region_detach_data *data) |
| |
| static uacpi_status | memory_region_do_rw (uacpi_region_op op, uacpi_region_rw_data *data) |
| |
| static uacpi_status | handle_memory_region (uacpi_region_op op, uacpi_handle op_data) |
| |
| static uacpi_status | table_data_region_do_rw (uacpi_region_op op, uacpi_region_rw_data *data) |
| |
| static uacpi_status | handle_table_data_region (uacpi_region_op op, uacpi_handle op_data) |
| |
| static uacpi_bool | io_port_is_protected (uacpi_u64 port) |
| |
| static uacpi_status | io_region_do_rw (uacpi_region_op op, uacpi_region_rw_data *data) |
| |
| static uacpi_status | handle_io_region (uacpi_region_op op, uacpi_handle op_data) |
| |
| void | uacpi_install_default_address_space_handlers (void) |
| |
◆ PCI_EXPANSION_ROM_REG
| #define PCI_EXPANSION_ROM_REG 0x30 |
◆ PCI_EXPRESS_ROOT_PNP_ID
| #define PCI_EXPRESS_ROOT_PNP_ID "PNP0A08" |
◆ PCI_HEADER_SIZE
◆ PCI_HEADER_TYPE_CARDBUS_BRIDGE
| #define PCI_HEADER_TYPE_CARDBUS_BRIDGE 0x02 |
◆ PCI_HEADER_TYPE_MASK
| #define PCI_HEADER_TYPE_MASK 0x7F |
◆ PCI_HEADER_TYPE_NO_DEVICE
| #define PCI_HEADER_TYPE_NO_DEVICE 0xFF |
◆ PCI_HEADER_TYPE_NORMAL
| #define PCI_HEADER_TYPE_NORMAL 0x00 |
◆ PCI_HEADER_TYPE_PCI_BRIDGE
| #define PCI_HEADER_TYPE_PCI_BRIDGE 0x01 |
◆ PCI_HEADER_TYPE_REG
| #define PCI_HEADER_TYPE_REG 0x0E |
◆ PCI_INTERRUPT_LINE_REG
| #define PCI_INTERRUPT_LINE_REG 0x3C |
◆ PCI_ROOT_PNP_ID
| #define PCI_ROOT_PNP_ID "PNP0A03" |
◆ PCI_SECONDARY_BUS_REG
| #define PCI_SECONDARY_BUS_REG 0x19 |
◆ PCI_SUBSYSTEM_VENDOR_ID_REG
| #define PCI_SUBSYSTEM_VENDOR_ID_REG 0x2C |
◆ io_protection_kind
| Enumerator |
|---|
| IO_PROTECTION_KIND_ALWAYS | |
| IO_PROTECTION_KIND_XP_AND_ABOVE | |
Definition at line 654 of file default_handlers.c.
654 {
656
657
659};
@ IO_PROTECTION_KIND_ALWAYS
@ IO_PROTECTION_KIND_XP_AND_ABOVE
◆ pci_device_kind
| Enumerator |
|---|
| PCI_DEVICE_KIND_NONE | |
| PCI_DEVICE_KIND_NORMAL | |
| PCI_DEVICE_KIND_BRIDGE | |
| PCI_DEVICE_KIND_UNCONFIGURED_BRIDGE | |
Definition at line 94 of file default_handlers.c.
94 {
95
97
100
101
103};
@ PCI_DEVICE_KIND_UNCONFIGURED_BRIDGE
◆ pci_region_state
| Enumerator |
|---|
| PCI_REGION_STATE_UNKNOWN | |
| PCI_REGION_STATE_OPEN | |
| PCI_REGION_STATE_NOT_FOUND | |
| PCI_REGION_STATE_UNREACHABLE | |
Definition at line 56 of file default_handlers.c.
56 {
61};
@ PCI_REGION_STATE_UNKNOWN
@ PCI_REGION_STATE_NOT_FOUND
@ PCI_REGION_STATE_UNREACHABLE
◆ find_pci_root()
Definition at line 28 of file default_handlers.c.
29{
34 };
36
40 "found a PCI root node %.4s controlling region %.4s",
42 );
44 }
45
47 }
48
50 node,
"unable to find PCI root controlling",
52 );
54}
#define PCI_EXPRESS_ROOT_PNP_ID
uacpi_namespace_node * uacpi_namespace_root(void)
void uacpi_trace_region_error(uacpi_namespace_node *node, uacpi_char *message, uacpi_status ret)
uacpi_bool uacpi_device_matches_pnp_id(uacpi_namespace_node *node, const uacpi_char *const *list)
Referenced by pci_region_attach().
◆ handle_io_region()
Definition at line 763 of file default_handlers.c.
764{
773 default:
775 }
776}
static uacpi_status io_region_detach(uacpi_region_detach_data *data)
static uacpi_status io_region_attach(uacpi_region_attach_data *data)
static uacpi_status io_region_do_rw(uacpi_region_op op, uacpi_region_rw_data *data)
@ UACPI_STATUS_INVALID_ARGUMENT
Referenced by uacpi_install_default_address_space_handlers().
◆ handle_memory_region()
Definition at line 614 of file default_handlers.c.
615{
624 default:
626 }
627}
static uacpi_status memory_region_do_rw(uacpi_region_op op, uacpi_region_rw_data *data)
static uacpi_status memory_region_attach(uacpi_region_attach_data *data)
static uacpi_status memory_region_detach(uacpi_region_detach_data *data)
Referenced by uacpi_install_default_address_space_handlers().
◆ handle_pci_region()
Definition at line 504 of file default_handlers.c.
505{
514 default:
516 }
517}
static uacpi_status pci_region_do_rw(uacpi_region_op op, uacpi_region_rw_data *data)
static uacpi_status pci_region_detach(uacpi_region_detach_data *data)
static uacpi_status pci_region_attach(uacpi_region_attach_data *data)
Referenced by uacpi_install_default_address_space_handlers().
◆ handle_table_data_region()
◆ io_port_is_protected()
Definition at line 714 of file default_handlers.c.
715{
718
721
723 continue;
726
729 }
730
732}
static const struct protected_io_range protected_io_ranges[]
#define UACPI_ARRAY_SIZE(arr)
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
uacpi_vendor_interface uacpi_latest_queried_vendor_interface(void)
@ UACPI_VENDOR_INTERFACE_WINDOWS_XP
Referenced by io_region_do_rw().
◆ io_region_attach()
Definition at line 566 of file default_handlers.c.
567{
571
575
577
581 data->region_node,
"unable to map an IO",
ret
582 );
585 }
586
587 data->out_region_context =
ctx;
589}
#define uacpi_free(mem, _)
#define uacpi_unlikely_error(expr)
@ UACPI_STATUS_OUT_OF_MEMORY
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
uacpi_status uacpi_kernel_io_map(uacpi_io_addr base, uacpi_size len, uacpi_handle *out_handle)
void * uacpi_kernel_alloc(uacpi_size size)
Referenced by handle_io_region().
◆ io_region_detach()
◆ io_region_do_rw()
Definition at line 734 of file default_handlers.c.
737{
741
744
747 "denied AML %s access to protected port 0x%04"UACPI_PRIX64,
750 );
751
754
756 }
757
761}
static uacpi_bool io_port_is_protected(uacpi_u64 port)
uacpi_status uacpi_system_io_write(uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 in)
uacpi_status uacpi_system_io_read(uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out)
GLint GLint GLsizei width
Referenced by handle_io_region().
◆ memory_region_attach()
Definition at line 525 of file default_handlers.c.
526{
529
533
534 ctx->size =
data->generic_info.length;
535
536
537 ctx->phys =
data->generic_info.base;
539
545 }
546
547 data->out_region_context =
ctx;
550}
@ UACPI_STATUS_MAPPING_FAILED
void * uacpi_kernel_map(uacpi_phys_addr addr, uacpi_size len)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Referenced by handle_memory_region().
◆ memory_region_detach()
◆ memory_region_do_rw()
Definition at line 600 of file default_handlers.c.
603{
606
608
612}
uacpi_status uacpi_system_memory_read(void *ptr, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out)
uacpi_status uacpi_system_memory_write(void *ptr, uacpi_size offset, uacpi_u8 width, uacpi_u64 in)
Referenced by handle_memory_region().
◆ pci_address_equal()
◆ pci_region_attach()
Definition at line 372 of file default_handlers.c.
373{
378
381
382
383
384
385
389
393
395 break;
396
398 }
399
403 node,
"unable to find device responsible for",
ret
404 );
406 }
407
411
413
417
421
426 }
427
428 data->out_region_context =
ctx;
430}
static uacpi_status pci_region_find_devices(struct pci_region_ctx *ctx, uacpi_namespace_node *pci_root, uacpi_namespace_node *device)
static uacpi_namespace_node * find_pci_root(uacpi_namespace_node *node)
#define uacpi_kernel_alloc_zeroed
uacpi_status uacpi_namespace_node_type(const uacpi_namespace_node *node, uacpi_object_type *out_type)
GLuint GLuint GLsizei GLenum type
uacpi_namespace_node * node
uacpi_status uacpi_eval_simple_integer(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_u64 *out_value)
Referenced by handle_pci_region().
◆ pci_region_collect_devices()
Definition at line 286 of file default_handlers.c.
290{
296
300
301
304
305 while (
depth-- != 0) {
309
312 break;
313
316 break;
317
319 out[
count].function = (adr >> 0) & 0xFF;
320 out[
count].device = (adr >> 16) & 0xFF;
321 }
323 }
324
326}
GLint GLint GLsizei GLsizei GLsizei depth
GLuint GLuint GLsizei count
Referenced by pci_region_find_devices().
◆ pci_region_ctx_free()
◆ pci_region_detach()
◆ pci_region_device_close()
◆ pci_region_device_open()
Definition at line 123 of file default_handlers.c.
126{
128
132
134 }
135
139
143}
static uacpi_bool pci_address_equal(const uacpi_pci_address *lhs, const uacpi_pci_address *rhs)
uacpi_status uacpi_kernel_pci_device_open(uacpi_pci_address address, uacpi_handle *out_handle)
Referenced by pci_region_device_probe(), and pci_region_resolve().
◆ pci_region_device_probe()
Definition at line 146 of file default_handlers.c.
150{
153
156
159 );
162
166 break;
167 default:
169 }
170
173 );
176
178}
#define PCI_HEADER_TYPE_CARDBUS_BRIDGE
#define PCI_HEADER_TYPE_NO_DEVICE
static uacpi_bool pci_region_device_open(struct pci_region_device *dev, const uacpi_pci_address *address)
#define PCI_HEADER_TYPE_PCI_BRIDGE
#define PCI_HEADER_TYPE_MASK
#define PCI_HEADER_TYPE_REG
#define PCI_SECONDARY_BUS_REG
uacpi_status uacpi_kernel_pci_read8(uacpi_handle device, uacpi_size offset, uacpi_u8 *value)
Referenced by pci_region_resolve().
◆ pci_region_do_rw()
Definition at line 463 of file default_handlers.c.
466{
470
473
477 "faking a PCI device %s access",
479 );
480
484 }
485
487 }
488
491
494 "denied AML write access to protected offset 0x%02zX of PCI "
495 "device %04X:%02X:%02X:%01X",
offset,
dev->address.segment,
496 dev->address.bus,
dev->address.device,
dev->address.function
497 );
499 }
500
502}
static uacpi_bool pci_write_is_protected(struct pci_region_device *dev, uacpi_size offset)
static struct pci_region_device * pci_region_resolve(struct pci_region_ctx *ctx)
uacpi_status uacpi_pci_write(uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 in)
uacpi_status uacpi_pci_read(uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out)
Referenced by handle_pci_region().
◆ pci_region_find_devices()
Definition at line 328 of file default_handlers.c.
332{
337
343
347 );
349 }
350
354 "unable to determine the PCI address of %.4s",
356 );
358 }
359
363
364 devices->function = (adr >> 0) & 0xFF;
365 devices->device = (adr >> 16) & 0xFF;
366
368 ctx->num_devices = 1;
370}
static uacpi_size pci_region_collect_devices(uacpi_namespace_node *pci_root, uacpi_namespace_node *device, struct pci_region_device *out)
static struct all_devices * devices
Referenced by pci_region_attach().
◆ pci_region_resolve()
Definition at line 211 of file default_handlers.c.
212{
219
220
221 if (
ctx->num_devices == 0)
223
226
229
230
231 if ((
i + 1) ==
ctx->num_devices)
232 break;
233
237 continue;
238 }
239
240
243 break;
244 }
245
246
247 while (++i < ctx->num_devices)
249
253
256 "PCI device %.4s %s at %04X:%02X:%02X:%01X",
ctx->node->name.text,
259 );
260
263 }
264
266}
static const uacpi_char * pci_region_state_to_string(uacpi_u8 state)
static enum pci_device_kind pci_region_device_probe(struct pci_region_device *dev, const uacpi_pci_address *address, uacpi_u8 *out_secondary_bus)
Referenced by pci_region_do_rw().
◆ pci_region_state_to_string()
Definition at line 180 of file default_handlers.c.
181{
184 return "detected";
186 return "is not present or powered off";
187 default:
188 return "is unreachable due to a missing or unconfigured bridge";
189 }
190}
Referenced by pci_region_resolve().
◆ pci_write_is_protected()
Definition at line 439 of file default_handlers.c.
442{
445
448
453
456 );
459
461}
#define PCI_INTERRUPT_LINE_REG
#define PCI_EXPANSION_ROM_REG
#define PCI_HEADER_TYPE_NORMAL
#define PCI_SUBSYSTEM_VENDOR_ID_REG
Referenced by pci_region_do_rw().
◆ table_data_region_do_rw()
◆ uacpi_install_default_address_space_handlers()
| void uacpi_install_default_address_space_handlers |
( |
void |
| ) |
|
Definition at line 778 of file default_handlers.c.
779{
781
783
788 );
789
794 );
795
800 );
801
806 );
807}
static uacpi_status handle_table_data_region(uacpi_region_op op, uacpi_handle op_data)
static uacpi_status handle_io_region(uacpi_region_op op, uacpi_handle op_data)
static uacpi_status handle_memory_region(uacpi_region_op op, uacpi_handle op_data)
static uacpi_status handle_pci_region(uacpi_region_op op, uacpi_handle op_data)
#define UACPI_ADDRESS_SPACE_HANDLER_DEFAULT
@ UACPI_ADDRESS_SPACE_SYSTEM_MEMORY
@ UACPI_ADDRESS_SPACE_PCI_CONFIG
@ UACPI_ADDRESS_SPACE_TABLE_DATA
@ UACPI_ADDRESS_SPACE_SYSTEM_IO
uacpi_status uacpi_install_address_space_handler_with_flags(uacpi_namespace_node *device_node, enum uacpi_address_space space, uacpi_region_handler handler, uacpi_handle handler_context, uacpi_u16 flags)
Referenced by uacpi_initialize().
◆ protected_io_ranges