pci_compat.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Compatibility functions for pre-driver-model code
  4. *
  5. * Copyright (C) 2014 Google, Inc
  6. */
  7. #include <common.h>
  8. #include <dm.h>
  9. #include <errno.h>
  10. #include <malloc.h>
  11. #include <pci.h>
  12. #include <dm/device-internal.h>
  13. #include <dm/lists.h>
  14. #include "pci_internal.h"
  15. #define PCI_HOSE_OP(rw, name, size, type) \
  16. int pci_hose_##rw##_config_##name(struct pci_controller *hose, \
  17. pci_dev_t dev, \
  18. int offset, type value) \
  19. { \
  20. return pci_##rw##_config##size(dev, offset, value); \
  21. }
  22. PCI_HOSE_OP(read, byte, 8, u8 *)
  23. PCI_HOSE_OP(read, word, 16, u16 *)
  24. PCI_HOSE_OP(read, dword, 32, u32 *)
  25. PCI_HOSE_OP(write, byte, 8, u8)
  26. PCI_HOSE_OP(write, word, 16, u16)
  27. PCI_HOSE_OP(write, dword, 32, u32)
  28. pci_dev_t pci_find_devices(struct pci_device_id *ids, int index)
  29. {
  30. struct udevice *dev;
  31. if (pci_find_device_id(ids, index, &dev))
  32. return -1;
  33. return dm_pci_get_bdf(dev);
  34. }
  35. struct pci_controller *pci_bus_to_hose(int busnum)
  36. {
  37. struct udevice *bus;
  38. int ret;
  39. ret = pci_get_bus(busnum, &bus);
  40. if (ret) {
  41. debug("%s: Cannot get bus %d: ret=%d\n", __func__, busnum, ret);
  42. return NULL;
  43. }
  44. return dev_get_uclass_priv(pci_get_controller(bus));
  45. }