pci_compat.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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 <log.h>
  11. #include <malloc.h>
  12. #include <pci.h>
  13. #include <dm/device-internal.h>
  14. #include <dm/lists.h>
  15. #include "pci_internal.h"
  16. #define PCI_HOSE_OP(rw, name, size, type) \
  17. int pci_hose_##rw##_config_##name(struct pci_controller *hose, \
  18. pci_dev_t dev, \
  19. int offset, type value) \
  20. { \
  21. return pci_##rw##_config##size(dev, offset, value); \
  22. }
  23. PCI_HOSE_OP(read, byte, 8, u8 *)
  24. PCI_HOSE_OP(read, word, 16, u16 *)
  25. PCI_HOSE_OP(read, dword, 32, u32 *)
  26. PCI_HOSE_OP(write, byte, 8, u8)
  27. PCI_HOSE_OP(write, word, 16, u16)
  28. PCI_HOSE_OP(write, dword, 32, u32)
  29. pci_dev_t pci_find_devices(struct pci_device_id *ids, int index)
  30. {
  31. struct udevice *dev;
  32. if (pci_find_device_id(ids, index, &dev))
  33. return -1;
  34. return dm_pci_get_bdf(dev);
  35. }
  36. struct pci_controller *pci_bus_to_hose(int busnum)
  37. {
  38. struct udevice *bus;
  39. int ret;
  40. ret = pci_get_bus(busnum, &bus);
  41. if (ret) {
  42. debug("%s: Cannot get bus %d: ret=%d\n", __func__, busnum, ret);
  43. return NULL;
  44. }
  45. return dev_get_uclass_priv(pci_get_controller(bus));
  46. }