| /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| |
| #include <console/console.h> |
| #include <device/mmio.h> |
| #include <device/device.h> |
| #include <device/pci_def.h> |
| #include <device/xhci.h> |
| |
| enum cb_err xhci_for_each_ext_cap(const struct device *device, void *context, |
| void (*callback)(void *context, |
| const struct xhci_ext_cap *cap)) |
| { |
| const struct resource *res; |
| |
| if (!device) |
| return CB_ERR; |
| |
| res = probe_resource(device, PCI_BASE_ADDRESS_0); |
| if (!res) { |
| printk(BIOS_ERR, "%s: Unable to find BAR resource for %s\n", __func__, |
| dev_path(device)); |
| return CB_ERR; |
| } |
| |
| return xhci_resource_for_each_ext_cap(res, context, callback); |
| } |
| |
| enum cb_err xhci_for_each_supported_usb_cap( |
| const struct device *device, void *context, |
| void (*callback)(void *context, const struct xhci_supported_protocol *data)) |
| { |
| const struct resource *res; |
| |
| if (!device) |
| return CB_ERR; |
| |
| res = probe_resource(device, PCI_BASE_ADDRESS_0); |
| if (!res) { |
| printk(BIOS_ERR, "%s: Unable to find BAR resource for %s\n", __func__, |
| dev_path(device)); |
| return CB_ERR; |
| } |
| |
| return xhci_resource_for_each_supported_usb_cap(res, context, callback); |
| } |