LpcSio.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /** @file
  2. Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
  3. SPDX-License-Identifier: BSD-2-Clause-Patent
  4. Module Name:
  5. Module Name:
  6. LpcSio.c
  7. Abstract: Sio implementation
  8. Revision History
  9. --*/
  10. #include "LpcDriver.h"
  11. #include <Library/S3BootScriptLib.h>
  12. VOID
  13. WriteRegister (
  14. IN UINT8 Index,
  15. IN UINT8 Data
  16. );
  17. typedef struct {
  18. UINT8 Register;
  19. UINT8 Value;
  20. } EFI_SIO_TABLE;
  21. EFI_SIO_TABLE mSioTable[] = {
  22. //
  23. // Init keyboard controller
  24. //
  25. { REG_LOGICAL_DEVICE, SIO_KEYBOARD },
  26. { BASE_ADDRESS_HIGH, 0x00 },
  27. { BASE_ADDRESS_LOW, 0x60 },
  28. { BASE_ADDRESS_HIGH2, 0x00 },
  29. { BASE_ADDRESS_LOW2, 0x64 },
  30. { PRIMARY_INTERRUPT_SELECT, 0x01 },
  31. { ACTIVATE, 0x1 },
  32. //
  33. // Init Mouse controller
  34. //
  35. { REG_LOGICAL_DEVICE, SIO_MOUSE },
  36. { BASE_ADDRESS_HIGH, 0x00 },
  37. { BASE_ADDRESS_LOW, 0x60 },
  38. { BASE_ADDRESS_HIGH2, 0x00 },
  39. { BASE_ADDRESS_LOW2, 0x64 },
  40. { PRIMARY_INTERRUPT_SELECT, 0x0c },
  41. { ACTIVATE, 0x1 },
  42. { REG_LOGICAL_DEVICE, SIO_COM },
  43. { BASE_ADDRESS_HIGH, 0x03 },
  44. { BASE_ADDRESS_LOW, 0xf8 },
  45. { PRIMARY_INTERRUPT_SELECT, 0x04 },
  46. { ACTIVATE, 0x1 },
  47. };
  48. VOID
  49. LPCWPCE791SetDefault ()
  50. {
  51. UINT8 Index;
  52. for (Index = 0; Index < sizeof(mSioTable)/sizeof(EFI_SIO_TABLE); Index++) {
  53. WriteRegisterAndSaveToScript (mSioTable[Index].Register, mSioTable[Index].Value);
  54. }
  55. return;
  56. }
  57. VOID
  58. DisableLogicalDevice (
  59. UINT8 DeviceId
  60. )
  61. {
  62. WriteRegisterAndSaveToScript (REG_LOGICAL_DEVICE, DeviceId);
  63. WriteRegisterAndSaveToScript (ACTIVATE, 0);
  64. WriteRegisterAndSaveToScript (BASE_ADDRESS_HIGH, 0);
  65. WriteRegisterAndSaveToScript (BASE_ADDRESS_LOW, 0);
  66. return;
  67. }
  68. VOID
  69. WriteRegister (
  70. IN UINT8 Index,
  71. IN UINT8 Data
  72. )
  73. {
  74. LpcIoWrite8(CONFIG_PORT, Index);
  75. LpcIoWrite8(DATA_PORT, Data);
  76. return;
  77. }
  78. VOID
  79. WriteRegisterAndSaveToScript (
  80. IN UINT8 Index,
  81. IN UINT8 Data
  82. )
  83. {
  84. UINT8 Buffer[2];
  85. LpcIoWrite8(CONFIG_PORT, Index);
  86. LpcIoWrite8(DATA_PORT, Data);
  87. Buffer[0] = Index;
  88. Buffer[1] = Data;
  89. S3BootScriptSaveIoWrite (
  90. EfiBootScriptWidthUint8,
  91. INDEX_PORT,
  92. 2,
  93. Buffer
  94. );
  95. return;
  96. }