@@ -23,6 +23,12 @@ OSDefineMetaClassAndStructors(IOPCIEDeviceWrapper, IOService);
23
23
#define PCI_MSIX_FLAGS_ENABLE 0x8000 /* MSI-X enable */
24
24
#define PCI_MSI_FLAGS_ENABLE 0x0001 /* MSI feature enabled */
25
25
26
+ static IOPMPowerState powerStateArray[2 ] =
27
+ {
28
+ {1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
29
+ {1 , kIOPMDeviceUsable , kIOPMPowerOn , kIOPMPowerOn , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
30
+ };
31
+
26
32
static void pciMsiSetEnable (IOPCIDevice *device, UInt8 msiCap, int enable)
27
33
{
28
34
UInt16 control;
@@ -105,6 +111,9 @@ start(IOService *provider)
105
111
IOLog (" %s::super start succeed\n " , getName ());
106
112
UInt8 builtIn = 0 ;
107
113
setProperty (" built-in" , OSData::withBytes (&builtIn, sizeof (builtIn)));
114
+ PMinit ();
115
+ registerPowerDriver (this , powerStateArray, 2 );
116
+ provider->joinPMtree (this );
108
117
registerService ();
109
118
return true ;
110
119
}
@@ -113,5 +122,12 @@ void IOPCIEDeviceWrapper::
113
122
stop (IOService *provider)
114
123
{
115
124
XYLog (" %s\n " , __PRETTY_FUNCTION__);
125
+ PMstop ();
116
126
super::stop (provider);
117
127
}
128
+
129
+ IOReturn IOPCIEDeviceWrapper::
130
+ setPowerState (unsigned long powerStateOrdinal, IOService *whatDevice)
131
+ {
132
+ return IOPMAckImplied;
133
+ }
0 commit comments