ofw: add BUS_GET_DEVICE_PATH interface to openfirm/fdt, somewhat incomplete.
This add BUS_GET_DEVICE_PATH interface, which shows device tree of openfirm/fdt. In qemu-system-arm64 with "virt" machine with device-tree firmware, % devctl getpath OFW cpu0 Reviewed by: andrew Differential Revision: https://reviews.freebsd.org/D37031
This commit is contained in:
parent
469ad86031
commit
7b5d62bb73
@ -90,6 +90,7 @@ static device_method_t gic_fdt_methods[] = {
|
|||||||
|
|
||||||
/* Bus interface */
|
/* Bus interface */
|
||||||
DEVMETHOD(bus_get_resource_list,gic_fdt_get_resource_list),
|
DEVMETHOD(bus_get_resource_list,gic_fdt_get_resource_list),
|
||||||
|
DEVMETHOD(bus_get_device_path, ofw_bus_gen_get_device_path),
|
||||||
|
|
||||||
/* ofw_bus interface */
|
/* ofw_bus interface */
|
||||||
DEVMETHOD(ofw_bus_get_devinfo, gic_ofw_get_devinfo),
|
DEVMETHOD(ofw_bus_get_devinfo, gic_ofw_get_devinfo),
|
||||||
|
@ -64,6 +64,7 @@ static device_method_t gic_v3_fdt_methods[] = {
|
|||||||
|
|
||||||
/* Bus interface */
|
/* Bus interface */
|
||||||
DEVMETHOD(bus_get_resource_list, gic_v3_fdt_get_resource_list),
|
DEVMETHOD(bus_get_resource_list, gic_v3_fdt_get_resource_list),
|
||||||
|
DEVMETHOD(bus_get_device_path, ofw_bus_gen_get_device_path),
|
||||||
|
|
||||||
/* ofw_bus interface */
|
/* ofw_bus interface */
|
||||||
DEVMETHOD(ofw_bus_get_devinfo, gic_v3_ofw_get_devinfo),
|
DEVMETHOD(ofw_bus_get_devinfo, gic_v3_ofw_get_devinfo),
|
||||||
|
@ -94,6 +94,7 @@ static device_method_t simplebus_methods[] = {
|
|||||||
DEVMETHOD(bus_child_pnpinfo, ofw_bus_gen_child_pnpinfo),
|
DEVMETHOD(bus_child_pnpinfo, ofw_bus_gen_child_pnpinfo),
|
||||||
DEVMETHOD(bus_get_resource_list, simplebus_get_resource_list),
|
DEVMETHOD(bus_get_resource_list, simplebus_get_resource_list),
|
||||||
DEVMETHOD(bus_get_property, simplebus_get_property),
|
DEVMETHOD(bus_get_property, simplebus_get_property),
|
||||||
|
DEVMETHOD(bus_get_device_path, ofw_bus_gen_get_device_path),
|
||||||
|
|
||||||
/* ofw_bus interface */
|
/* ofw_bus interface */
|
||||||
DEVMETHOD(ofw_bus_get_devinfo, simplebus_get_devinfo),
|
DEVMETHOD(ofw_bus_get_devinfo, simplebus_get_devinfo),
|
||||||
|
@ -104,6 +104,22 @@ ofw_bus_gen_child_pnpinfo(device_t cbdev, device_t child, struct sbuf *sb)
|
|||||||
return (0);
|
return (0);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int
|
||||||
|
ofw_bus_gen_get_device_path(device_t cbdev, device_t child, const char *locator,
|
||||||
|
struct sbuf *sb)
|
||||||
|
{
|
||||||
|
int rv;
|
||||||
|
|
||||||
|
if ( strcmp(locator, BUS_LOCATOR_OFW) == 0){
|
||||||
|
rv = bus_generic_get_device_path(cbdev, child, locator, sb);
|
||||||
|
if (rv == 0){
|
||||||
|
sbuf_printf(sb, "/%s", ofw_bus_get_name(child));
|
||||||
|
}
|
||||||
|
return (rv);
|
||||||
|
}
|
||||||
|
return (bus_generic_get_device_path(cbdev, child, locator, sb));
|
||||||
|
};
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
ofw_bus_gen_get_compat(device_t bus, device_t dev)
|
ofw_bus_gen_get_compat(device_t bus, device_t dev)
|
||||||
{
|
{
|
||||||
|
@ -84,6 +84,7 @@ ofw_bus_get_type_t ofw_bus_gen_get_type;
|
|||||||
|
|
||||||
/* Helper method to report interesting OF properties in pnpinfo */
|
/* Helper method to report interesting OF properties in pnpinfo */
|
||||||
bus_child_pnpinfo_t ofw_bus_gen_child_pnpinfo;
|
bus_child_pnpinfo_t ofw_bus_gen_child_pnpinfo;
|
||||||
|
bus_get_device_path_t ofw_bus_gen_get_device_path;
|
||||||
|
|
||||||
/* Routines for processing firmware interrupt maps */
|
/* Routines for processing firmware interrupt maps */
|
||||||
void ofw_bus_setup_iinfo(phandle_t, struct ofw_bus_iinfo *, int);
|
void ofw_bus_setup_iinfo(phandle_t, struct ofw_bus_iinfo *, int);
|
||||||
|
@ -68,6 +68,7 @@ static device_method_t ofw_cpulist_methods[] = {
|
|||||||
/* Bus interface */
|
/* Bus interface */
|
||||||
DEVMETHOD(bus_add_child, bus_generic_add_child),
|
DEVMETHOD(bus_add_child, bus_generic_add_child),
|
||||||
DEVMETHOD(bus_child_pnpinfo, ofw_bus_gen_child_pnpinfo),
|
DEVMETHOD(bus_child_pnpinfo, ofw_bus_gen_child_pnpinfo),
|
||||||
|
DEVMETHOD(bus_get_device_path, ofw_bus_gen_get_device_path),
|
||||||
|
|
||||||
/* ofw_bus interface */
|
/* ofw_bus interface */
|
||||||
DEVMETHOD(ofw_bus_get_devinfo, ofw_cpulist_get_devinfo),
|
DEVMETHOD(ofw_bus_get_devinfo, ofw_cpulist_get_devinfo),
|
||||||
|
@ -761,6 +761,7 @@ void bus_data_generation_update(void);
|
|||||||
#define BUS_LOCATOR_ACPI "ACPI"
|
#define BUS_LOCATOR_ACPI "ACPI"
|
||||||
#define BUS_LOCATOR_FREEBSD "FreeBSD"
|
#define BUS_LOCATOR_FREEBSD "FreeBSD"
|
||||||
#define BUS_LOCATOR_UEFI "UEFI"
|
#define BUS_LOCATOR_UEFI "UEFI"
|
||||||
|
#define BUS_LOCATOR_OFW "OFW"
|
||||||
|
|
||||||
extern int bus_current_pass;
|
extern int bus_current_pass;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user