11#ifndef UACPI_BAREBONES_MODE
13#define PCI_ROOT_PNP_ID "PNP0A03"
14#define PCI_EXPRESS_ROOT_PNP_ID "PNP0A08"
16#define PCI_HEADER_SIZE 0x40
17#define PCI_HEADER_TYPE_REG 0x0E
18#define PCI_HEADER_TYPE_MASK 0x7F
19#define PCI_HEADER_TYPE_NORMAL 0x00
20#define PCI_HEADER_TYPE_PCI_BRIDGE 0x01
21#define PCI_HEADER_TYPE_CARDBUS_BRIDGE 0x02
22#define PCI_HEADER_TYPE_NO_DEVICE 0xFF
23#define PCI_SECONDARY_BUS_REG 0x19
24#define PCI_SUBSYSTEM_VENDOR_ID_REG 0x2C
25#define PCI_EXPANSION_ROM_REG 0x30
26#define PCI_INTERRUPT_LINE_REG 0x3C
40 "found a PCI root node %.4s controlling region %.4s",
50 node,
"unable to find PCI root controlling",
186 return "is not present or powered off";
188 return "is unreachable due to a missing or unconfigured bridge";
221 if (
ctx->num_devices == 0)
231 if ((
i + 1) ==
ctx->num_devices)
247 while (++i < ctx->num_devices)
256 "PCI device %.4s %s at %04X:%02X:%02X:%01X",
ctx->node->name.text,
272 for (
i = 0;
i <
ctx->num_devices; ++
i)
305 while (
depth-- != 0) {
319 out[
count].function = (adr >> 0) & 0xFF;
320 out[
count].device = (adr >> 16) & 0xFF;
354 "unable to determine the PCI address of %.4s",
364 devices->function = (adr >> 0) & 0xFF;
365 devices->device = (adr >> 16) & 0xFF;
368 ctx->num_devices = 1;
403 node,
"unable to find device responsible for",
ret
428 data->out_region_context =
ctx;
477 "faking a PCI device %s access",
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
534 ctx->size =
data->generic_info.length;
537 ctx->phys =
data->generic_info.base;
547 data->out_region_context =
ctx;
581 data->region_node,
"unable to map an IO",
ret
587 data->out_region_context =
ctx;
747 "denied AML %s access to protected port 0x%04"UACPI_PRIX64,
static uacpi_status pci_region_find_devices(struct pci_region_ctx *ctx, uacpi_namespace_node *pci_root, uacpi_namespace_node *device)
@ PCI_DEVICE_KIND_UNCONFIGURED_BRIDGE
static uacpi_status handle_table_data_region(uacpi_region_op op, uacpi_handle op_data)
static uacpi_status io_region_detach(uacpi_region_detach_data *data)
#define PCI_EXPRESS_ROOT_PNP_ID
static uacpi_status pci_region_do_rw(uacpi_region_op op, uacpi_region_rw_data *data)
#define PCI_HEADER_TYPE_CARDBUS_BRIDGE
static uacpi_status io_region_attach(uacpi_region_attach_data *data)
static uacpi_bool io_port_is_protected(uacpi_u64 port)
static uacpi_status handle_io_region(uacpi_region_op op, uacpi_handle op_data)
static uacpi_bool pci_address_equal(const uacpi_pci_address *lhs, const uacpi_pci_address *rhs)
static uacpi_status pci_region_detach(uacpi_region_detach_data *data)
static void pci_region_ctx_free(struct pci_region_ctx *ctx)
#define PCI_HEADER_TYPE_NO_DEVICE
static uacpi_namespace_node * find_pci_root(uacpi_namespace_node *node)
static uacpi_bool pci_region_device_open(struct pci_region_device *dev, const uacpi_pci_address *address)
void uacpi_install_default_address_space_handlers(void)
static const uacpi_char * pci_region_state_to_string(uacpi_u8 state)
#define PCI_INTERRUPT_LINE_REG
#define PCI_HEADER_TYPE_PCI_BRIDGE
@ IO_PROTECTION_KIND_ALWAYS
@ IO_PROTECTION_KIND_XP_AND_ABOVE
static uacpi_size pci_region_collect_devices(uacpi_namespace_node *pci_root, uacpi_namespace_node *device, struct pci_region_device *out)
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)
#define PCI_EXPANSION_ROM_REG
static uacpi_bool pci_write_is_protected(struct pci_region_device *dev, uacpi_size offset)
#define PCI_HEADER_TYPE_MASK
#define PCI_HEADER_TYPE_NORMAL
static struct pci_region_device * pci_region_resolve(struct pci_region_ctx *ctx)
#define PCI_HEADER_TYPE_REG
#define PCI_SECONDARY_BUS_REG
static void pci_region_device_close(struct pci_region_device *dev)
static uacpi_status io_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)
@ PCI_REGION_STATE_UNKNOWN
@ PCI_REGION_STATE_NOT_FOUND
@ PCI_REGION_STATE_UNREACHABLE
static const struct protected_io_range protected_io_ranges[]
#define PCI_SUBSYSTEM_VENDOR_ID_REG
static uacpi_status memory_region_attach(uacpi_region_attach_data *data)
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 uacpi_status table_data_region_do_rw(uacpi_region_op op, uacpi_region_rw_data *data)
static uacpi_status memory_region_detach(uacpi_region_detach_data *data)
static uacpi_status pci_region_attach(uacpi_region_attach_data *data)
#define UACPI_ARRAY_SIZE(arr)
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)
uacpi_status uacpi_system_io_write(uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 in)
uacpi_status uacpi_system_memory_read(void *ptr, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out)
uacpi_status uacpi_system_io_read(uacpi_handle handle, 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)
#define uacpi_kernel_alloc_zeroed
#define uacpi_free(mem, _)
#define UACPI_ADDRESS_SPACE_HANDLER_DEFAULT
uacpi_status uacpi_namespace_node_type(const uacpi_namespace_node *node, uacpi_object_type *out_type)
uacpi_namespace_node * uacpi_namespace_root(void)
#define uacpi_unlikely_error(expr)
@ UACPI_STATUS_INVALID_ARGUMENT
@ UACPI_STATUS_OUT_OF_MEMORY
@ UACPI_STATUS_MAPPING_FAILED
uacpi_u64 uacpi_phys_addr
@ UACPI_ADDRESS_SPACE_SYSTEM_MEMORY
@ UACPI_ADDRESS_SPACE_PCI_CONFIG
@ UACPI_ADDRESS_SPACE_TABLE_DATA
@ UACPI_ADDRESS_SPACE_SYSTEM_IO
static struct all_devices * devices
GLint GLint GLsizei GLsizei GLsizei depth
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei width
GLenum const GLvoid * addr
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_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)
void uacpi_trace_region_error(uacpi_namespace_node *node, uacpi_char *message, uacpi_status ret)
#define UACPI_VIRT_ADDR_TO_PTR(vaddr)
uacpi_status uacpi_kernel_io_map(uacpi_io_addr base, uacpi_size len, uacpi_handle *out_handle)
void uacpi_kernel_pci_device_close(uacpi_handle)
uacpi_status uacpi_kernel_pci_read8(uacpi_handle device, uacpi_size offset, uacpi_u8 *value)
void * uacpi_kernel_alloc(uacpi_size size)
uacpi_status uacpi_kernel_pci_device_open(uacpi_pci_address address, uacpi_handle *out_handle)
void uacpi_kernel_unmap(void *addr, uacpi_size len)
void * uacpi_kernel_map(uacpi_phys_addr addr, uacpi_size len)
void uacpi_kernel_io_unmap(uacpi_handle handle)
uacpi_vendor_interface uacpi_latest_queried_vendor_interface(void)
@ UACPI_VENDOR_INTERFACE_WINDOWS_XP
uacpi_pci_address root_address
uacpi_namespace_node * node
uacpi_pci_address address
struct pci_region_device * devices
uacpi_pci_address address
uacpi_status uacpi_eval_simple_integer(uacpi_namespace_node *parent, const uacpi_char *path, uacpi_u64 *out_value)
uacpi_bool uacpi_device_matches_pnp_id(uacpi_namespace_node *node, const uacpi_char *const *list)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out