int acpi_dev_prop_read(struct acpi_device *adev, const char *propname,
enum dev_prop_type proptype, void *val, size_t nval);
- struct acpi_device *acpi_get_next_child(struct device *dev,
- struct acpi_device *child);
+ struct fwnode_handle *acpi_get_next_subnode(struct device *dev,
+ struct fwnode_handle *subnode);
+ +
+ +struct acpi_probe_entry;
+ +typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *,
+ + struct acpi_probe_entry *);
+ +
+ +#define ACPI_TABLE_ID_LEN 5
+ +
+ +/**
+ + * struct acpi_probe_entry - boot-time probing entry
+ + * @id: ACPI table name
+ + * @type: Optional subtable type to match
+ + * (if @id contains subtables)
+ + * @subtable_valid: Optional callback to check the validity of
+ + * the subtable
+ + * @probe_table: Callback to the driver being probed when table
+ + * match is successful
+ + * @probe_subtbl: Callback to the driver being probed when table and
+ + * subtable match (and optional callback is successful)
+ + * @driver_data: Sideband data provided back to the driver
+ + */
+ +struct acpi_probe_entry {
+ + __u8 id[ACPI_TABLE_ID_LEN];
+ + __u8 type;
+ + acpi_probe_entry_validate_subtbl subtable_valid;
+ + union {
+ + acpi_tbl_table_handler probe_table;
+ + acpi_tbl_entry_handler probe_subtbl;
+ + };
+ + kernel_ulong_t driver_data;
+ +};
+ +
+ +#define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable, valid, data, fn) \
+ + static const struct acpi_probe_entry __acpi_probe_##name \
+ + __used __section(__##table##_acpi_probe_table) \
+ + = { \
+ + .id = table_id, \
+ + .type = subtable, \
+ + .subtable_valid = valid, \
+ + .probe_table = (acpi_tbl_table_handler)fn, \
+ + .driver_data = data, \
+ + }
+ +
+ +#define ACPI_PROBE_TABLE(name) __##name##_acpi_probe_table
+ +#define ACPI_PROBE_TABLE_END(name) __##name##_acpi_probe_table_end
+ +
+ +int __acpi_probe_device_table(struct acpi_probe_entry *start, int nr);
+ +
+ +#define acpi_probe_device_table(t) \
+ + ({ \
+ + extern struct acpi_probe_entry ACPI_PROBE_TABLE(t), \
+ + ACPI_PROBE_TABLE_END(t); \
+ + __acpi_probe_device_table(&ACPI_PROBE_TABLE(t), \
+ + (&ACPI_PROBE_TABLE_END(t) - \
+ + &ACPI_PROBE_TABLE(t))); \
+ + })
#else
static inline int acpi_dev_get_property(struct acpi_device *adev,
const char *name, acpi_object_type type,
{
return -ENXIO;
}
- static inline int acpi_dev_get_property_array(struct acpi_device *adev,
- const char *name,
- acpi_object_type type,
- const union acpi_object **obj)
+
+ static inline int acpi_node_get_property_reference(struct fwnode_handle *fwnode,
- - const char *name, const char *cells_name,
- - size_t index, struct acpi_reference_args *args)
+++ const char *name, size_t index,
+++ struct acpi_reference_args *args)
{
return -ENXIO;
}
{
return NULL;
}
+
+ +#define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable, validate, data, fn) \
+ + static const void * __acpi_table_##name[] \
+ + __attribute__((unused)) \
+ + = { (void *) table_id, \
+ + (void *) subtable, \
+ + (void *) valid, \
+ + (void *) fn, \
+ + (void *) data }
+ +
+ +#define acpi_probe_device_table(t) ({ int __r = 0; __r;})
#endif
#endif /*_LINUX_ACPI_H*/