1 /** @file 2 Header file for GpioLib. 3 All function in this library is available for PEI, DXE, and SMM 4 5 @note: When GPIO pads are owned by ME Firmware, BIOS/host should not 6 attempt to access these GPIO Pads registers, registers value 7 returned in this case will be 0xFF. 8 9 Copyright (c) 2017, Intel Corporation. All rights reserved.<BR> 10 SPDX-License-Identifier: BSD-2-Clause-Patent 11 12 **/ 13 #ifndef _GPIO_LIB_H_ 14 #define _GPIO_LIB_H_ 15 16 #include <GpioConfig.h> 17 18 typedef struct { 19 GPIO_PAD GpioPad; 20 GPIO_CONFIG GpioConfig; 21 } GPIO_INIT_CONFIG; 22 /** 23 This procedure will initialize multiple GPIO pins. Use GPIO_INIT_CONFIG structure. 24 Structure contains fields that can be used to configure each pad. 25 Pad not configured using GPIO_INIT_CONFIG will be left with hardware default values. 26 Separate fields could be set to hardware default if it does not matter, except 27 GpioPad and PadMode. 28 Some GpioPads are configured and switched to native mode by RC, those include: 29 SerialIo pins, ISH pins, ClkReq Pins 30 31 @param[in] NumberofItem Number of GPIO pads to be updated 32 @param[in] GpioInitTableAddress GPIO initialization table 33 34 @retval EFI_SUCCESS The function completed successfully 35 @retval EFI_INVALID_PARAMETER Invalid group or pad number 36 **/ 37 EFI_STATUS 38 GpioConfigurePads ( 39 IN UINT32 NumberOfItems, 40 IN GPIO_INIT_CONFIG *GpioInitTableAddress 41 ); 42 43 // 44 // Functions for setting/getting multiple GpioPad settings 45 // 46 47 /** 48 This procedure will read multiple GPIO settings 49 50 @param[in] GpioPad GPIO Pad 51 @param[out] GpioData GPIO data structure 52 53 @retval EFI_SUCCESS The function completed successfully 54 @retval EFI_INVALID_PARAMETER Invalid GpioPad 55 **/ 56 EFI_STATUS 57 GpioGetPadConfig ( 58 IN GPIO_PAD GpioPad, 59 OUT GPIO_CONFIG *GpioData 60 ); 61 62 /** 63 This procedure will configure multiple GPIO settings 64 65 @param[in] GpioPad GPIO Pad 66 @param[in] GpioData GPIO data structure 67 68 @retval EFI_SUCCESS The function completed successfully 69 @retval EFI_INVALID_PARAMETER Invalid GpioPad 70 **/ 71 EFI_STATUS 72 GpioSetPadConfig ( 73 IN GPIO_PAD GpioPad, 74 IN GPIO_CONFIG *GpioData 75 ); 76 77 // 78 // Functions for setting/getting single GpioPad properties 79 // 80 81 /** 82 This procedure will set GPIO output level 83 84 @param[in] GpioPad GPIO pad 85 @param[in] Value Output value 86 0: OutputLow, 1: OutputHigh 87 88 @retval EFI_SUCCESS The function completed successfully 89 @retval EFI_INVALID_PARAMETER Invalid GpioPad 90 **/ 91 EFI_STATUS 92 GpioSetOutputValue ( 93 IN GPIO_PAD GpioPad, 94 IN UINT32 Value 95 ); 96 97 /** 98 This procedure will get GPIO output level 99 100 @param[in] GpioPad GPIO pad 101 @param[out] OutputVal GPIO Output value 102 0: OutputLow, 1: OutputHigh 103 104 @retval EFI_SUCCESS The function completed successfully 105 @retval EFI_INVALID_PARAMETER Invalid GpioPad 106 **/ 107 EFI_STATUS 108 GpioGetOutputValue ( 109 IN GPIO_PAD GpioPad, 110 OUT UINT32 *OutputVal 111 ); 112 113 /** 114 This procedure will get GPIO input level 115 116 @param[in] GpioPad GPIO pad 117 @param[out] InputVal GPIO Input value 118 0: InputLow, 1: InputHigh 119 120 @retval EFI_SUCCESS The function completed successfully 121 @retval EFI_INVALID_PARAMETER Invalid GpioPad 122 **/ 123 EFI_STATUS 124 GpioGetInputValue ( 125 IN GPIO_PAD GpioPad, 126 OUT UINT32 *InputVal 127 ); 128 129 /** 130 This procedure will get GPIO IOxAPIC interrupt number 131 132 @param[in] GpioPad GPIO pad 133 @param[out] IrqNum IRQ number 134 135 @retval EFI_SUCCESS The function completed successfully 136 @retval EFI_INVALID_PARAMETER Invalid GpioPad 137 **/ 138 EFI_STATUS 139 GpioGetPadIoApicIrqNumber ( 140 IN GPIO_PAD GpioPad, 141 OUT UINT32 *IrqNum 142 ); 143 144 /** 145 This procedure will configure GPIO input inversion 146 147 @param[in] GpioPad GPIO pad 148 @param[in] Value Value for GPIO input inversion 149 0: No input inversion, 1: Invert input 150 151 @retval EFI_SUCCESS The function completed successfully 152 @retval EFI_INVALID_PARAMETER Invalid GpioPad 153 **/ 154 EFI_STATUS 155 GpioSetInputInversion ( 156 IN GPIO_PAD GpioPad, 157 IN UINT32 Value 158 ); 159 160 /** 161 This procedure will get GPIO pad input inversion value 162 163 @param[in] GpioPad GPIO pad 164 @param[out] InvertState GPIO inversion state 165 0: No input inversion, 1: Inverted input 166 167 @retval EFI_SUCCESS The function completed successfully 168 @retval EFI_INVALID_PARAMETER Invalid GpioPad 169 **/ 170 EFI_STATUS 171 GpioGetInputInversion ( 172 IN GPIO_PAD GpioPad, 173 OUT UINT32 *InvertState 174 ); 175 176 /** 177 This procedure will set GPIO interrupt settings 178 179 @param[in] GpioPad GPIO pad 180 @param[in] Value Value of Level/Edge 181 use GPIO_INT_CONFIG as argument 182 183 @retval EFI_SUCCESS The function completed successfully 184 @retval EFI_INVALID_PARAMETER Invalid GpioPad 185 **/ 186 EFI_STATUS 187 GpioSetPadInterruptConfig ( 188 IN GPIO_PAD GpioPad, 189 IN GPIO_INT_CONFIG Value 190 ); 191 192 /** 193 This procedure will set GPIO electrical settings 194 195 @param[in] GpioPad GPIO pad 196 @param[in] Value Value of termination 197 use GPIO_ELECTRICAL_CONFIG as argument 198 199 @retval EFI_SUCCESS The function completed successfully 200 @retval EFI_INVALID_PARAMETER Invalid GpioPad 201 **/ 202 EFI_STATUS 203 GpioSetPadElectricalConfig ( 204 IN GPIO_PAD GpioPad, 205 IN GPIO_ELECTRICAL_CONFIG Value 206 ); 207 208 /** 209 This procedure will set GPIO Reset settings 210 211 @param[in] GpioPad GPIO pad 212 @param[in] Value Value for Pad Reset Configuration 213 use GPIO_RESET_CONFIG as argument 214 215 @retval EFI_SUCCESS The function completed successfully 216 @retval EFI_INVALID_PARAMETER Invalid GpioPad 217 **/ 218 EFI_STATUS 219 GpioSetPadResetConfig ( 220 IN GPIO_PAD GpioPad, 221 IN GPIO_RESET_CONFIG Value 222 ); 223 224 /** 225 This procedure will get GPIO Reset settings 226 227 @param[in] GpioPad GPIO pad 228 @param[in] Value Value of Pad Reset Configuration 229 based on GPIO_RESET_CONFIG 230 231 @retval EFI_SUCCESS The function completed successfully 232 @retval EFI_INVALID_PARAMETER Invalid GpioPad 233 **/ 234 EFI_STATUS 235 GpioGetPadResetConfig ( 236 IN GPIO_PAD GpioPad, 237 IN GPIO_RESET_CONFIG *Value 238 ); 239 240 /** 241 This procedure will get GPIO Host Software Pad Ownership for certain group 242 243 @param[in] Group GPIO group 244 @param[in] DwNum Host Ownership register number for current group. 245 For group which has less then 32 pads per group DwNum must be 0. 246 @param[out] HostSwRegVal Value of Host Software Pad Ownership register 247 Bit position - PadNumber 248 Bit value - 0: ACPI Mode, 1: GPIO Driver mode 249 250 @retval EFI_SUCCESS The function completed successfully 251 @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number 252 **/ 253 EFI_STATUS 254 GpioGetHostSwOwnershipForGroupDw ( 255 IN GPIO_GROUP Group, 256 IN UINT32 DwNum, 257 OUT UINT32 *HostSwRegVal 258 ); 259 260 /** 261 This procedure will get GPIO Host Software Pad Ownership for certain group 262 263 @param[in] Group GPIO group 264 @param[in] DwNum Host Ownership register number for current group 265 For group which has less then 32 pads per group DwNum must be 0. 266 @param[in] HostSwRegVal Value of Host Software Pad Ownership register 267 Bit position - PadNumber 268 Bit value - 0: ACPI Mode, 1: GPIO Driver mode 269 270 @retval EFI_SUCCESS The function completed successfully 271 @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number 272 **/ 273 EFI_STATUS 274 GpioSetHostSwOwnershipForGroupDw ( 275 IN GPIO_GROUP Group, 276 IN UINT32 DwNum, 277 IN UINT32 HostSwRegVal 278 ); 279 280 /** 281 This procedure will get Gpio Pad Host Software Ownership 282 283 @param[in] GpioPad GPIO pad 284 @param[out] PadHostSwOwn Value of Host Software Pad Owner 285 0: ACPI Mode, 1: GPIO Driver mode 286 287 @retval EFI_SUCCESS The function completed successfully 288 @retval EFI_INVALID_PARAMETER Invalid GpioPad 289 **/ 290 EFI_STATUS 291 GpioGetHostSwOwnershipForPad ( 292 IN GPIO_PAD GpioPad, 293 OUT UINT32 *PadHostSwOwn 294 ); 295 296 /** 297 This procedure will set Gpio Pad Host Software Ownership 298 299 @param[in] GpioPad GPIO pad 300 @param[in] PadHostSwOwn Pad Host Software Owner 301 0: ACPI Mode, 1: GPIO Driver mode 302 303 @retval EFI_SUCCESS The function completed successfully 304 @retval EFI_INVALID_PARAMETER Invalid GpioPad 305 **/ 306 EFI_STATUS 307 GpioSetHostSwOwnershipForPad ( 308 IN GPIO_PAD GpioPad, 309 IN UINT32 PadHostSwOwn 310 ); 311 312 /// 313 /// Possible values of Pad Ownership 314 /// If Pad is not under Host ownership then GPIO registers 315 /// are not accessible by host (e.g. BIOS) and reading them 316 /// will return 0xFFs. 317 /// 318 typedef enum { 319 GpioPadOwnHost = 0x0, 320 GpioPadOwnCsme = 0x1, 321 GpioPadOwnIsh = 0x2, 322 } GPIO_PAD_OWN; 323 324 /** 325 This procedure will get Gpio Pad Ownership 326 327 @param[in] GpioPad GPIO pad 328 @param[out] PadOwnVal Value of Pad Ownership 329 330 @retval EFI_SUCCESS The function completed successfully 331 @retval EFI_INVALID_PARAMETER Invalid GpioPad 332 **/ 333 EFI_STATUS 334 GpioGetPadOwnership ( 335 IN GPIO_PAD GpioPad, 336 OUT GPIO_PAD_OWN *PadOwnVal 337 ); 338 339 /** 340 This procedure will check state of Pad Config Lock for pads within one group 341 342 @param[in] Group GPIO group 343 @param[in] DwNum PadCfgLock register number for current group. 344 For group which has less then 32 pads per group DwNum must be 0. 345 @param[out] PadCfgLockRegVal Value of PadCfgLock register 346 Bit position - PadNumber 347 Bit value - 0: NotLocked, 1: Locked 348 349 @retval EFI_SUCCESS The function completed successfully 350 @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number 351 **/ 352 EFI_STATUS 353 GpioGetPadCfgLockForGroupDw ( 354 IN GPIO_GROUP Group, 355 IN UINT32 DwNum, 356 OUT UINT32 *PadCfgLockRegVal 357 ); 358 359 /** 360 This procedure will check state of Pad Config Lock for selected pad 361 362 @param[in] GpioPad GPIO pad 363 @param[out] PadCfgLock PadCfgLock for selected pad 364 0: NotLocked, 1: Locked 365 366 @retval EFI_SUCCESS The function completed successfully 367 @retval EFI_INVALID_PARAMETER Invalid GpioPad 368 **/ 369 EFI_STATUS 370 GpioGetPadCfgLock ( 371 IN GPIO_PAD GpioPad, 372 OUT UINT32 *PadCfgLock 373 ); 374 375 /** 376 This procedure will check state of Pad Config Tx Lock for pads within one group 377 378 @param[in] Group GPIO group 379 @param[in] DwNum PadCfgLockTx register number for current group. 380 For group which has less then 32 pads per group DwNum must be 0. 381 @param[out] PadCfgLockTxRegVal Value of PadCfgLockTx register 382 Bit position - PadNumber 383 Bit value - 0: NotLockedTx, 1: LockedTx 384 385 @retval EFI_SUCCESS The function completed successfully 386 @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number 387 **/ 388 EFI_STATUS 389 GpioGetPadCfgLockTxForGroupDw ( 390 IN GPIO_GROUP Group, 391 IN UINT32 DwNum, 392 OUT UINT32 *PadCfgLockTxRegVal 393 ); 394 395 /** 396 This procedure will check state of Pad Config Tx Lock for selected pad 397 398 @param[in] GpioPad GPIO pad 399 @param[out] PadCfgLock PadCfgLockTx for selected pad 400 0: NotLockedTx, 1: LockedTx 401 402 @retval EFI_SUCCESS The function completed successfully 403 @retval EFI_INVALID_PARAMETER Invalid GpioPad 404 **/ 405 EFI_STATUS 406 GpioGetPadCfgLockTx ( 407 IN GPIO_PAD GpioPad, 408 OUT UINT32 *PadCfgLockTx 409 ); 410 411 /** 412 This procedure will clear PadCfgLock for selected pads within one group. 413 Unlocking a pad will cause an SMI (if enabled) 414 415 @param[in] Group GPIO group 416 @param[in] DwNum PadCfgLock register number for current group. 417 For group which has less then 32 pads per group DwNum must be 0. 418 @param[in] PadsToUnlock Bitmask for pads which are going to be unlocked, 419 Bit position - PadNumber 420 Bit value - 0: DoNotUnlock, 1: Unlock 421 422 @retval EFI_SUCCESS The function completed successfully 423 @retval EFI_INVALID_PARAMETER Invalid group or pad number 424 **/ 425 EFI_STATUS 426 GpioUnlockPadCfgForGroupDw ( 427 IN GPIO_GROUP Group, 428 IN UINT32 DwNum, 429 IN UINT32 PadsToUnlock 430 ); 431 432 /** 433 This procedure will clear PadCfgLock for selected pad. 434 Unlocking a pad will cause an SMI (if enabled) 435 436 @param[in] GpioPad GPIO pad 437 438 @retval EFI_SUCCESS The function completed successfully 439 @retval EFI_INVALID_PARAMETER Invalid GpioPad 440 **/ 441 EFI_STATUS 442 GpioUnlockPadCfg ( 443 IN GPIO_PAD GpioPad 444 ); 445 446 /** 447 This procedure will set PadCfgLock for selected pads within one group 448 449 @param[in] Group GPIO group 450 @param[in] DwNum PadCfgLock register number for current group. 451 For group which has less then 32 pads per group DwNum must be 0. 452 @param[in] PadsToLock Bitmask for pads which are going to be locked, 453 Bit position - PadNumber 454 Bit value - 0: DoNotLock, 1: Lock 455 456 @retval EFI_SUCCESS The function completed successfully 457 @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number 458 **/ 459 EFI_STATUS 460 GpioLockPadCfgForGroupDw ( 461 IN GPIO_GROUP Group, 462 IN UINT32 DwNum, 463 IN UINT32 PadsToLock 464 ); 465 466 /** 467 This procedure will set PadCfgLock for selected pad 468 469 @param[in] GpioPad GPIO pad 470 471 @retval EFI_SUCCESS The function completed successfully 472 @retval EFI_INVALID_PARAMETER Invalid GpioPad 473 **/ 474 EFI_STATUS 475 GpioLockPadCfg ( 476 IN GPIO_PAD GpioPad 477 ); 478 479 /** 480 This procedure will clear PadCfgLockTx for selected pads within one group. 481 Unlocking a pad will cause an SMI (if enabled) 482 483 @param[in] Group GPIO group 484 @param[in] DwNum PadCfgLockTx register number for current group. 485 For group which has less then 32 pads per group DwNum must be 0. 486 @param[in] PadsToUnlockTx Bitmask for pads which are going to be unlocked, 487 Bit position - PadNumber 488 Bit value - 0: DoNotUnLockTx, 1: LockTx 489 490 @retval EFI_SUCCESS The function completed successfully 491 @retval EFI_INVALID_PARAMETER Invalid group or pad number 492 **/ 493 EFI_STATUS 494 GpioUnlockPadCfgTxForGroupDw ( 495 IN GPIO_GROUP Group, 496 IN UINT32 DwNum, 497 IN UINT32 PadsToUnlockTx 498 ); 499 500 /** 501 This procedure will clear PadCfgLockTx for selected pad. 502 Unlocking a pad will cause an SMI (if enabled) 503 504 @param[in] GpioPad GPIO pad 505 506 @retval EFI_SUCCESS The function completed successfully 507 @retval EFI_INVALID_PARAMETER Invalid GpioPad 508 **/ 509 EFI_STATUS 510 GpioUnlockPadCfgTx ( 511 IN GPIO_PAD GpioPad 512 ); 513 514 /** 515 This procedure will set PadCfgLockTx for selected pads within one group 516 517 @param[in] Group GPIO group 518 @param[in] DwNum PadCfgLock register number for current group. 519 For group which has less then 32 pads per group DwNum must be 0. 520 @param[in] PadsToLockTx Bitmask for pads which are going to be locked, 521 Bit position - PadNumber 522 Bit value - 0: DoNotLockTx, 1: LockTx 523 524 @retval EFI_SUCCESS The function completed successfully 525 @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number 526 **/ 527 EFI_STATUS 528 GpioLockPadCfgTxForGroupDw ( 529 IN GPIO_GROUP Group, 530 IN UINT32 DwNum, 531 IN UINT32 PadsToLockTx 532 ); 533 534 /** 535 This procedure will set PadCfgLockTx for selected pad 536 537 @param[in] GpioPad GPIO pad 538 539 @retval EFI_SUCCESS The function completed successfully 540 @retval EFI_INVALID_PARAMETER Invalid GpioPad 541 **/ 542 EFI_STATUS 543 GpioLockPadCfgTx ( 544 IN GPIO_PAD GpioPad 545 ); 546 547 /** 548 This procedure will get Group to GPE mapping. 549 Refer to BWG and EDS for GPIO GPE information. 550 551 @param[out] GroupToGpeDw0 GPIO group to be mapped to GPE_DW0 552 @param[out] GroupToGpeDw1 GPIO group to be mapped to GPE_DW1 553 @param[out] GroupToGpeDw2 GPIO group to be mapped to GPE_DW2 554 555 @retval EFI_SUCCESS The function completed successfully 556 @retval EFI_INVALID_PARAMETER Invalid group or pad number 557 **/ 558 EFI_STATUS 559 GpioGetGroupToGpeDwX ( 560 IN GPIO_GROUP *GroupToGpeDw0, 561 IN GPIO_GROUP *GroupToGpeDw1, 562 IN GPIO_GROUP *GroupToGpeDw2 563 ); 564 565 /** 566 This procedure will set Group to GPE mapping. 567 Refer to BWG and EDS for GPIO GPE information. 568 569 @param[in] GroupToGpeDw0 GPIO group to be mapped to GPE_DW0 570 @param[in] GroupToGpeDw1 GPIO group to be mapped to GPE_DW1 571 @param[in] GroupToGpeDw2 GPIO group to be mapped to GPE_DW2 572 573 @retval EFI_SUCCESS The function completed successfully 574 @retval EFI_INVALID_PARAMETER Invalid group or pad number 575 **/ 576 EFI_STATUS 577 GpioSetGroupToGpeDwX ( 578 IN GPIO_GROUP GroupToGpeDw0, 579 IN GPIO_GROUP GroupToGpeDw1, 580 IN GPIO_GROUP GroupToGpeDw2 581 ); 582 583 /** 584 This procedure will get GPE number for provided GpioPad. 585 PCH allows to configure mapping between GPIO groups and related GPE (GpioSetGroupToGpeDwX()) 586 what results in the fact that certain Pad can cause different General Purpose Event. Only three 587 GPIO groups can be mapped to cause unique GPE (1-tier), all others groups will be under one common 588 event (GPE_111 for 2-tier). 589 590 1-tier: 591 Returned GpeNumber is in range <0,95>. GpioGetGpeNumber() can be used 592 to determine what _LXX ACPI method would be called on event on selected GPIO pad 593 594 2-tier: 595 Returned GpeNumber is 0x6F (111). All GPIO pads which are not mapped to 1-tier GPE 596 will be under one master GPE_111 which is linked to _L6F ACPI method. If it is needed to determine 597 what Pad from 2-tier has caused the event, _L6F method should check GPI_GPE_STS and GPI_GPE_EN 598 registers for all GPIO groups not mapped to 1-tier GPE. 599 600 @param[in] GpioPad GPIO pad 601 @param[out] GpeNumber GPE number 602 603 @retval EFI_SUCCESS The function completed successfully 604 @retval EFI_INVALID_PARAMETER Invalid GpioPad 605 **/ 606 EFI_STATUS 607 GpioGetGpeNumber ( 608 IN GPIO_PAD GpioPad, 609 OUT UINT32 *GpeNumber 610 ); 611 612 /** 613 This procedure is used to clear SMI STS for a specified Pad 614 615 @param[in] GpioPad GPIO pad 616 617 @retval EFI_SUCCESS The function completed successfully 618 @retval EFI_INVALID_PARAMETER Invalid GpioPad 619 **/ 620 EFI_STATUS 621 GpioClearGpiSmiSts ( 622 IN GPIO_PAD GpioPad 623 ); 624 625 /** 626 This procedure is used by Smi Dispatcher and will clear 627 all GPI SMI Status bits 628 629 @retval EFI_SUCCESS The function completed successfully 630 **/ 631 EFI_STATUS 632 GpioClearAllGpiSmiSts ( 633 VOID 634 ); 635 636 /** 637 This procedure is used to disable all GPI SMI 638 639 @retval EFI_SUCCESS The function completed successfully 640 **/ 641 EFI_STATUS 642 GpioDisableAllGpiSmi ( 643 VOID 644 ); 645 646 /** 647 This procedure is used to register GPI SMI dispatch function. 648 649 @param[in] GpioPad GPIO pad 650 @param[out] GpiNum GPI number 651 652 @retval EFI_SUCCESS The function completed successfully 653 @retval EFI_INVALID_PARAMETER Invalid GpioPad 654 **/ 655 EFI_STATUS 656 GpioGetGpiSmiNum ( 657 IN GPIO_PAD GpioPad, 658 OUT UINTN *GpiNum 659 ); 660 661 /** 662 This procedure is used to check GPIO inputs belongs to 2 tier or 1 tier architecture 663 664 @param[in] GpioPad GPIO pad 665 666 @retval Data 0 means 1-tier, 1 means 2-tier 667 **/ 668 BOOLEAN 669 GpioCheckFor2Tier ( 670 IN GPIO_PAD GpioPad 671 ); 672 673 /** 674 This procedure is used to clear GPE STS for a specified GpioPad 675 676 @param[in] GpioPad GPIO pad 677 678 @retval EFI_SUCCESS The function completed successfully 679 @retval EFI_INVALID_PARAMETER Invalid GpioPad 680 **/ 681 EFI_STATUS 682 GpioClearGpiGpeSts ( 683 IN GPIO_PAD GpioPad 684 ); 685 686 /** 687 This procedure is used to read GPE STS for a specified Pad 688 689 @param[in] GpioPad GPIO pad 690 @param[out] Data GPE STS data 691 692 @retval EFI_SUCCESS The function completed successfully 693 @retval EFI_INVALID_PARAMETER Invalid GpioPad 694 **/ 695 EFI_STATUS 696 GpioGetGpiGpeSts ( 697 IN GPIO_PAD GpioPad, 698 OUT UINT32* Data 699 ); 700 701 #endif // _GPIO_LIB_H_ 702