NonDiscoverableInitLib.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /**
  2. *
  3. * Copyright (c) 2017, Linaro Ltd. All rights reserved.
  4. * Copyright (c) 2018, Marvell International Ltd. All rights reserved.
  5. *
  6. * SPDX-License-Identifier: BSD-2-Clause-Patent
  7. *
  8. **/
  9. #include <Uefi.h>
  10. #include <Library/DebugLib.h>
  11. #include <Library/DevicePathLib.h>
  12. #include <Library/IoLib.h>
  13. #include <Library/MemoryAllocationLib.h>
  14. #include <Library/MvGpioLib.h>
  15. #include <Library/NonDiscoverableDeviceRegistrationLib.h>
  16. #include <Library/UefiBootServicesTableLib.h>
  17. #include <Protocol/NonDiscoverableDevice.h>
  18. #include "NonDiscoverableInitLib.h"
  19. STATIC CONST MV_GPIO_PIN mXhciVbusPin = {
  20. MV_GPIO_CP0_CONTROLLER1,
  21. ARMADA_80x0_MCBIN_VBUS0_PIN,
  22. TRUE,
  23. };
  24. STATIC
  25. EFI_STATUS
  26. EFIAPI
  27. XhciInit (
  28. IN NON_DISCOVERABLE_DEVICE *This
  29. )
  30. {
  31. EMBEDDED_GPIO *GpioProtocol;
  32. EFI_STATUS Status;
  33. Status = MvGpioGetProtocol (MV_GPIO_DRIVER_TYPE_SOC_CONTROLLER, &GpioProtocol);
  34. if (EFI_ERROR (Status)) {
  35. DEBUG ((DEBUG_ERROR, "%a: Unable to find GPIO protocol\n", __FUNCTION__));
  36. return Status;
  37. }
  38. GpioProtocol->Set (GpioProtocol,
  39. GPIO (mXhciVbusPin.ControllerId, mXhciVbusPin.PinNumber),
  40. GPIO_MODE_OUTPUT_1);
  41. return Status;
  42. }
  43. NON_DISCOVERABLE_DEVICE_INIT
  44. EFIAPI
  45. NonDiscoverableDeviceInitializerGet (
  46. IN NON_DISCOVERABLE_DEVICE_TYPE Type,
  47. IN UINTN Index
  48. )
  49. {
  50. if (Type == NonDiscoverableDeviceTypeXhci) {
  51. return XhciInit;
  52. }
  53. return NULL;
  54. }