]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciPowerManagement.c
Update For R9 Review.
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Pci / PciBusDxe / PciPowerManagement.c
1 /** @file
2
3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 **/
13
14 #include "PciBus.h"
15
16 /**
17 This function is intended to turn off PWE assertion and
18 put the device to D0 state if the device supports
19 PCI Power Management.
20
21 @param PciIoDevice Pci device instance
22
23 @retval EFI_UNSUPPORTED Device do not support power management
24 @retval EFI_SUCCESS Success
25 **/
26 EFI_STATUS
27 ResetPowerManagementFeature (
28 IN PCI_IO_DEVICE *PciIoDevice
29 )
30 {
31 EFI_STATUS Status;
32 UINT8 PowerManagementRegBlock;
33 UINT16 PMCSR;
34
35 PowerManagementRegBlock = 0;
36
37 Status = LocateCapabilityRegBlock (
38 PciIoDevice,
39 EFI_PCI_CAPABILITY_ID_PMI,
40 &PowerManagementRegBlock,
41 NULL
42 );
43
44 if (EFI_ERROR (Status)) {
45 return EFI_UNSUPPORTED;
46 }
47
48 //
49 // Turn off the PWE assertion and put the device into D0 State
50 //
51 PMCSR = 0x8000;
52
53 //
54 // Write PMCSR
55 //
56 PciIoWrite (
57 &PciIoDevice->PciIo,
58 EfiPciIoWidthUint16,
59 PowerManagementRegBlock + 4,
60 1,
61 &PMCSR
62 );
63
64 return EFI_SUCCESS;
65 }
66