IOGraphicsPowerFuji.trace   [plain text]


#!/usr/sbin/dtrace -s

enum IOStateFlags {
    kIOFBDidWork			= 0x00000001,
    kIOFBWorking			= 0x00000002,
    kIOFBPaging 			= 0x00000004,
    kIOFBWsWait				= 0x00000008,
    kIOFBDimmed				= 0x00000010,
    kIOFBServerSlept		= 0x00000020,
    kIOFBServerUp			= 0x00000040,
    kIOFBServerDown			= 0x00000080,
    kIOFBCaptured			= 0x00000100,
    kIOFBDimDisable			= 0x00000200,
    kIOFBDisplaysChanging	= 0x00001000
};

enum IOFramebufferNotificationEvents {
    kIOFBNotifyDisplayModeWillChange	= 1,
    kIOFBNotifyDisplayModeDidChange		= 2,
    kIOFBNotifyWillSleep				= 3,
    kIOFBNotifyDidWake					= 4,
    kIOFBNotifyDidPowerOff				= 5,	// aka kIOFBNotifyDidSleep
    kIOFBNotifyWillPowerOn				= 6,	// aka kIOFBNotifyWillWake
    kIOFBNotifyWillPowerOff				= 7,
    kIOFBNotifyDidPowerOn				= 8,
    kIOFBNotifyWillChangeSpeed			= 9,
    kIOFBNotifyDidChangeSpeed			= 10,
    kIOFBNotifyClamshellChange			= 20,
    kIOFBNotifyCaptureChange			= 30,
    kIOFBNotifyOnlineChange				= 40,
    kIOFBNotifyDisplayDimsChange		= 50,
    kIOFBNotifyProbed					= 60,
    kIOFBNotifyVRAMReady				= 70,
    kIOFBNotifyWillNotify				= 80,
    kIOFBNotifyDidNotify				= 81,
    kIOFBNotifyWSAAEnterDefer			= 90,
    kIOFBNotifyWSAAExitDefer			= 91,
    kIOFBNotifyTerminated				= 100
};


dtrace:::BEGIN
{
	self->chkPwr = 0;
	self->sysWrk = 0;
	self->hdlEvt = 0;
	self->nxtIdle = 0;
	self->setProps = 0;
	self->setPwr = 0;
	self->setFbPwr = 0;
	self->fbNotify = 0;
	self->didChngPwr = 0;
	self->willChngPwr = 1;
	self->sysPwr = 0;
	self->setAttrExt = 0;
	self->setAttr = 0;
	self->setAttrConnExt = 0;
	self->setAttrConn = 0;
}

/*
void IOFramebuffer::systemWork(OSObject * owner, IOInterruptEventSource * evtSrc, int intCount)
*/
fbt:*IOGraphics*:*systemWork*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\nintCount: %#x (%u)\n", arg2, arg2 );
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
	stack();
	ustack();
	self->sysWrk = 1;
}

fbt:*IOGraphics*:*systemWork*:return
/self->sysWrk != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;

	self->sysWrk = 0;
}

/*
IOOptionBits IOFramebuffer::checkPowerWork(IOOptionBits state)
*/
fbt:*IOGraphics*:*IOFramebuffer*checkPowerWork*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\n\tstate: %#x (%u)\n", arg1, arg1 );
	
	printf("\tDidWork          : %c\n", arg1 & kIOFBDidWork ? 'X' : '-');
	printf("\tWorking          : %c\n", arg1 & kIOFBWorking ? 'X' : '-');
	printf("\tPaging           : %c\n", arg1 & kIOFBPaging ? 'X' : '-');
	printf("\tWsWait           : %c\n", arg1 & kIOFBWsWait ? 'X' : '-');
	printf("\tDimmed           : %c\n", arg1 & kIOFBDimmed ? 'X' : '-');
	printf("\tServerSlept      : %c\n", arg1 & kIOFBServerSlept ? 'X' : '-');
	printf("\tServerUp         : %c\n", arg1 & kIOFBServerUp ? 'X' : '-');
	printf("\tServerDown       : %c\n", arg1 & kIOFBServerDown ? 'X' : '-');
	printf("\tCaptured         : %c\n", arg1 & kIOFBCaptured ? 'X' : '-');
	printf("\tDimDisable       : %c\n", arg1 & kIOFBDimDisable ? 'X' : '-');
	printf("\tDisplaysChanging : %c\n", arg1 & kIOFBDisplaysChanging ? 'X' : '-');

	stack();
	ustack();
	self->chkPwr = 1;
}

fbt:*IOGraphics*:*IOFramebuffer*checkPowerWork*:return
/self->chkPwr != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;

	self->chkPwr = 0;
}

/*
IOReturn IOFramebuffer::setAttributeForConnectionExt( IOIndex connectIndex, IOSelect attribute, uintptr_t value )
*/
fbt:*IOGraphics*:*IOFramebuffer*setAttributeForConnectionExt*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\nconnectIndex: %u, attribute: %#x, value: %#x (%u)\n", arg1, arg2, arg3, arg3 );
	stack();
	ustack();
	self->setAttrConnExt = 1;
}

fbt:*IOGraphics*:*IOFramebuffer*setAttributeForConnectionExt*:return
/self->setAttrConnExt != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;

	self->setAttrConnExt = 0;
}

/*
IOReturn IOFramebuffer::setAttributeForConnection( IOIndex connectIndex, IOSelect attribute, uintptr_t value )
*/
fbt:*IOGraphics*:*IOFramebuffer*setAttributeForConnection*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\nconnectIndex: %u, attribute: %#x, value: %#x (%u)\n", arg1, arg2, arg3, arg3 );
	stack();
	ustack();
	self->setAttrConn = 1;
}

fbt:*IOGraphics*:*IOFramebuffer*setAttributeForConnection*:return
/self->setAttrConn != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;

	self->setAttrConn = 0;
}

/*
IOReturn IOFramebuffer::setAttributeExt( IOSelect attribute, uintptr_t value )
*/
fbt:*IOGraphics*:*setAttributeExt*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\nattribute: %#x, value: %#x (%u)\n", arg1, arg2, arg2 );
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
	stack();
	ustack();
	self->setAttrExt = 1;
}

fbt:*IOGraphics*:*setAttributeExt*:return
/self->setAttrExt != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;
	self->setAttrExt = 0;
}

/*
IOReturn IOFramebuffer::setAttribute( IOSelect attribute, uintptr_t value )
*/
fbt:*IOGraphics*:*setAttribute*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\nattribute: %#x, value: %#x (%u)\n", arg1, arg2, arg2 );
	stack();
	ustack();
	self->setAttr = 1;
}

fbt:*IOGraphics*:*setAttribute*:return
/self->setAttr != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;

	self->setAttr = 0;
}

/*
IOReturn IOFramebuffer::systemPowerChange( void * target, void * refCon, UInt32 messageType, IOService * service, void * messageArgument, vm_size_t argSize )
*/
fbt:*IOGraphics*:*systemPowerChange*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\nmessageType: %#x (%u)\n", arg2, arg2 );
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
	stack();
	self->sysPwr = 1;
}

fbt:*IOGraphics*:*systemPowerChange*:return
/self->sysPwr != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;
	self->sysPwr = 0;
}

/*
IOReturn IOFramebuffer::powerStateWillChangeTo( IOPMPowerFlags flags, unsigned long state, IOService * whatDevice )
*/
fbt:*IOGraphics*:*powerStateWillChangeTo*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\nflags: %#x (%u), state: %#x (%u)\n", arg1, arg1, arg2, arg2 );
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
	stack();
	self->willChngPwr = 1;
}

fbt:*IOGraphics*:*powerStateWillChangeTo*:return
/self->willChngPwr != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;
	self->willChngPwr = 0;
}

/*
IOReturn IOFramebuffer::powerStateDidChangeTo( IOPMPowerFlags flags, unsigned long, IOService* whatDevice )
*/
fbt:*IOGraphics*:*powerStateDidChangeTo*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\nflags: %#x (%u), state: %#x (%u)\n", arg1, arg1, arg2, arg2 );
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
	stack();
	self->didChngPwr = 1;
}

fbt:*IOGraphics*:*powerStateDidChangeTo*:return
/self->didChngPwr != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;
	self->didChngPwr = 0;
}

/*
IOReturn IOFramebuffer::muxPowerMessage(UInt32 messageType)

NOTE: No return variant
*/
fbt:*IOGraphics*:*muxPowerMessage*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\nmessageType: %#x (%u)\n", arg2, arg2 );
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
}

/*
IOReturn IOFramebuffer::deliverFramebufferNotification( IOIndex event, void * info )
*/
fbt:*IOGraphics*:*deliverFramebufferNotification*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\nevent: %#x (%s)\n", arg1, 
		arg1 == kIOFBNotifyDisplayModeWillChange ?
				"kIOFBNotifyDisplayModeWillChange" :
	    arg1 == kIOFBNotifyDisplayModeDidChange ?
	            "kIOFBNotifyDisplayModeDidChange" :
	    arg1 == kIOFBNotifyWillSleep ?
	            "kIOFBNotifyWillSleep" :
	    arg1 == kIOFBNotifyDidWake ?
	            "kIOFBNotifyDidWake" :
	    arg1 == kIOFBNotifyDidPowerOff ?
	            "kIOFBNotifyDidPowerOff (aka kIOFBNotifyDidSleep)" :
	    arg1 == kIOFBNotifyWillPowerOn ?
	            "kIOFBNotifyWillPowerOn (aka kIOFBNotifyWillWake)" :
	    arg1 == kIOFBNotifyWillPowerOff ?
	            "kIOFBNotifyWillPowerOff" :
	    arg1 == kIOFBNotifyDidPowerOn ?
	            "kIOFBNotifyDidPowerOn" :
	    arg1 == kIOFBNotifyWillChangeSpeed ?
	            "kIOFBNotifyWillChangeSpeed" :
	    arg1 == kIOFBNotifyDidChangeSpeed ?
	            "kIOFBNotifyDidChangeSpeed" :
	    arg1 == kIOFBNotifyDisplayDimsChange ?
	            "kIOFBNotifyDisplayDimsChange" :
	    arg1 == kIOFBNotifyClamshellChange ?
	            "kIOFBNotifyClamshellChange" :
	    arg1 == kIOFBNotifyCaptureChange ?
	            "kIOFBNotifyCaptureChange" :
	    arg1 == kIOFBNotifyOnlineChange ?
	            "kIOFBNotifyOnlineChange" :
	    arg1 == kIOFBNotifyWSAAEnterDefer ?
	            "kIOFBNotifyWSAAEnterDefer" :
	    arg1 == kIOFBNotifyWSAAExitDefer ?
	            "kIOFBNotifyWSAAExitDefer" :
	    arg1 == kIOFBNotifyTerminated ?
	            "kIOFBNotifyTerminated" : "unknown");
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
	stack();
	self->fbNotify = 1;
}

fbt:*IOGraphics*:*deliverFramebufferNotification*:return
/self->fbNotify != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;
	self->fbNotify = 0;
}

/*
IOReturn IOFramebuffer::setPowerState( unsigned long powerStateOrdinal, IOService * whichDevice )
*/
fbt:*IOGraphics*:*IOFramebuffer*setPowerState*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\npowerStateOrdinal: %#x (%u)\n", arg1, arg1 );
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
	stack();
	self->setFbPwr = 1;
}

fbt:*IOGraphics*:*IOFramebuffer*setPowerState*:return
/self->setFbPwr != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;
	self->setFbPwr = 0;
}

/*
IOReturn IODisplayWrangler::setPowerState( unsigned long powerStateOrdinal, IOService * whatDevice )
*/
fbt:*IOGraphics*:*IODisplayWrangler*setPowerState*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\npowerStateOrdinal: %#x (%u)\n", arg1, arg1 );
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
	stack();
	self->setPwr = 1;
}

fbt:*IOGraphics*:*IODisplayWrangler*setPowerState*:return
/self->setPwr != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;
	self->setPwr = 0;
}

/*
IOReturn IODisplayWrangler::setProperties( OSObject * properties )
*/
fbt:*IOGraphics*:*IODisplayWrangler*setProperties*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
	stack();
	self->setProps = 1;
}

fbt:*IOGraphics*:*IODisplayWrangler*setProperties*:return
/self->setProps != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;
	self->setProps = 0;
}

/*
SInt32 IODisplayWrangler::nextIdleTimeout( AbsoluteTime currentTime, AbsoluteTime lastActivity, unsigned int powerState)
*/
fbt:*IOGraphics*:*IODisplayWrangler*nextIdleTimeout*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;
	printf("\ncurrentTime: %#x, lastActivity: %#x, powerState: %#x (%u)\n", arg1, arg2, arg3, arg3 );
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
	stack();
	self->nxtIdle = 1;
}

fbt:*IOGraphics*:*IODisplayWrangler*nextIdleTimeout*:return
/self->nxtIdle != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;
	self->nxtIdle = 0;
}

/*
IOReturn IOFramebuffer::handleEvent( IOIndex event, void * info )
*/
fbt:*IOGraphics*:*handleEvent*:entry
{
	printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	trace(execname);
	self->inTime[probefunc] = timestamp;

	printf("\nevent: %#x (%s)\n", arg1, 
		arg1 == kIOFBNotifyDisplayModeWillChange ?
				"kIOFBNotifyDisplayModeWillChange" :
	    arg1 == kIOFBNotifyDisplayModeDidChange ?
	            "kIOFBNotifyDisplayModeDidChange" :
	    arg1 == kIOFBNotifyWillSleep ?
	            "kIOFBNotifyWillSleep" :
	    arg1 == kIOFBNotifyDidWake ?
	            "kIOFBNotifyDidWake" :
	    arg1 == kIOFBNotifyDidPowerOff ?
	            "kIOFBNotifyDidPowerOff (aka kIOFBNotifyDidSleep)" :
	    arg1 == kIOFBNotifyWillPowerOn ?
	            "kIOFBNotifyWillPowerOn (aka kIOFBNotifyWillWake)" :
	    arg1 == kIOFBNotifyWillPowerOff ?
	            "kIOFBNotifyWillPowerOff" :
	    arg1 == kIOFBNotifyDidPowerOn ?
	            "kIOFBNotifyDidPowerOn" :
	    arg1 == kIOFBNotifyWillChangeSpeed ?
	            "kIOFBNotifyWillChangeSpeed" :
	    arg1 == kIOFBNotifyDidChangeSpeed ?
	            "kIOFBNotifyDidChangeSpeed" :
	    arg1 == kIOFBNotifyDisplayDimsChange ?
	            "kIOFBNotifyDisplayDimsChange" :
	    arg1 == kIOFBNotifyClamshellChange ?
	            "kIOFBNotifyClamshellChange" :
	    arg1 == kIOFBNotifyCaptureChange ?
	            "kIOFBNotifyCaptureChange" :
	    arg1 == kIOFBNotifyOnlineChange ?
	            "kIOFBNotifyOnlineChange" :
	    arg1 == kIOFBNotifyWSAAEnterDefer ?
	            "kIOFBNotifyWSAAEnterDefer" :
	    arg1 == kIOFBNotifyWSAAExitDefer ?
	            "kIOFBNotifyWSAAExitDefer" :
	    arg1 == kIOFBNotifyTerminated ?
	            "kIOFBNotifyTerminated" : "unknown");
	printf("\nPower Active Check: chkPwr: %#x, setAttr: %#x\n", self->chkPwr, self->sysWrk);
	stack();
	self->hdlEvt = 1;
}

fbt:*IOGraphics*:*handleEvent*:return
/self->hdlEvt != 0/
{
	printf(" %d ns tid: %d(%#x)\n", timestamp - self->inTime[probefunc], tid, tid );
	self->inTime[probefunc] = 0;
	self->hdlEvt = 0;
}

/*
IOService:

IOReturn allowPowerChange( unsigned long refcon );
IOReturn changePowerStateToPriv( unsigned long ordinal );
UInt32 getPowerState( void );
void start_PM_idle_timer( void );
IOReturn setIdleTimerPeriod( unsigned long period );
IOReturn temporaryPowerClampOn( void );
IOReturn acknowledgeSetPowerState( void );


PMRootDomain:

IOReturn receivePowerNotification( UInt32 msg );


IOGraphics:

void IOFramebuffer::systemWork(OSObject * owner, IOInterruptEventSource * evtSrc, int intCount)
	IOReturn receivePowerNotification( UInt32 msg );

IOOptionBits IOFramebuffer::checkPowerWork(IOOptionBits state)
    IOReturn acknowledgeSetPowerState( void );

IOReturn IOFramebuffer::extProcessConnectionChange(void)
	IOReturn temporaryPowerClampOn( void );

IOReturn IOFramebuffer::agcMessage( void * target, void * refCon, UInt32 messageType, IOService * service, void * messageArgument, vm_size_t argSize )
	IOReturn allowPowerChange( unsigned long refcon );


*/