Lines Matching refs:request

726 // Immediately stop driver callouts. Schedule an async stop request to detach
732 IOPMRequest * request;
755 request = acquirePMRequest( this, kIOPMRequestTypePMStop );
756 if (request)
759 submitPMRequest( request );
769 void IOService::handlePMstop ( IOPMRequest * request )
977 void IOService::addPowerChild1 ( IOPMRequest * request )
1004 void IOService::addPowerChild2 ( IOPMRequest * request )
1006 IOPowerConnection * connection = (IOPowerConnection *) request->fArg0;
1060 void IOService::addPowerChild3 ( IOPMRequest * request )
1062 IOPowerConnection * connection = (IOPowerConnection *) request->fArg0;
1159 IOPMRequest * request;
1160 request = acquirePMRequest( this, kIOPMRequestTypeAdjustPowerState );
1161 if (request)
1163 submitPMRequest( request );
1182 IOPMRequest * request;
1223 request = acquirePMRequest( this, kIOPMRequestTypeRegisterPowerDriver );
1224 if (!request)
1228 request->fArg0 = (void *) powerDriver;
1229 request->fArg1 = (void *) powerStatesCopy;
1230 request->fArg2 = (void *) numberOfStates;
1232 submitPMRequest( request );
1246 void IOService::handleRegisterPowerDriver ( IOPMRequest * request )
1248 IOService * powerDriver = (IOService *) request->fArg0;
1249 IOPMPSEntry * powerStates = (IOPMPSEntry *) request->fArg1;
1250 unsigned long numberOfStates = (unsigned long) request->fArg2;
1357 IOPMRequest * request;
1377 request = acquirePMRequest( this, kIOPMRequestTypeInterestChanged );
1378 if (request)
1379 submitPMRequest( request );
1397 IOPMRequest * request;
1427 request = acquirePMRequest( this, kIOPMRequestTypeInterestChanged );
1428 if (request)
1429 submitPMRequest( request );
1441 void IOService::handleInterestChanged( IOPMRequest * request )
1503 IOPMRequest * request;
1510 request = acquirePMRequest( this, kIOPMRequestTypeAckPowerChange );
1511 if (!request)
1515 request->fArg0 = whichObject;
1517 submitPMRequest( request );
1525 bool IOService::handleAcknowledgePowerChange ( IOPMRequest * request )
1534 whichObject = (IOService *) request->fArg0;
1650 IOPMRequest * request;
1655 request = acquirePMRequest( this, kIOPMRequestTypeAckSetPowerState );
1656 if (!request)
1659 submitPMRequest( request );
1745 void IOService::handleSynchronizePowerTree ( IOPMRequest * request )
1751 IOOptionBits options = (uintptr_t) request->fArg0;
1787 void IOService::handlePowerDomainWillChangeTo ( IOPMRequest * request )
1789 IOPMPowerFlags parentPowerFlags = (IOPMPowerFlags) request->fArg0;
1790 IOPowerConnection * whichParent = (IOPowerConnection *) request->fArg1;
1791 IOPMPowerChangeFlags parentChangeFlags = (IOPMPowerChangeFlags)(uintptr_t) request->fArg2;
1906 void IOService::handlePowerDomainDidChangeTo ( IOPMRequest * request )
1908 IOPMPowerFlags parentPowerFlags = (IOPMPowerFlags) request->fArg0;
1909 IOPowerConnection * whichParent = (IOPowerConnection *) request->fArg1;
1910 IOPMPowerChangeFlags parentChangeFlags = (IOPMPowerChangeFlags)(uintptr_t) request->fArg2;
2157 // child's perspective. A child power request may arrive while
2158 // parent is transitioning upwards. If a request arrives after
2205 // Schedule a request to re-evaluate all children desires and
2206 // adjust power state. Submit a request if one wasn't pending,
2207 // or if the current request is part of a call tree.
2244 // a subclassed device object will pre-empt this request.
2246 // We treat this as a subclass object request to switch to the
2307 IOPMRequest * request;
2314 request = acquirePMRequest( this, kIOPMRequestTypeRequestPowerStateOverride );
2315 if (!request)
2319 request->fArg0 = (void *) ordinal;
2320 request->fArg1 = (void *) gIOPMPowerClientDevice;
2321 request->fArg2 = 0;
2324 request->installCompletionAction( action, target, param );
2328 // until the scheduled request is executed.
2335 request->fArg2 = (void *) (uintptr_t) true;
2338 submitPMRequest( request );
2350 IOPMRequest * request;
2357 request = acquirePMRequest( this, kIOPMRequestTypeRequestPowerState );
2358 if (!request)
2362 request->fArg0 = (void *) state;
2363 request->fArg1 = (void *) client;
2364 request->fArg2 = 0;
2367 request->installCompletionAction( action, target, param );
2371 // until the scheduled request is executed.
2377 request->fArg2 = (void *) (uintptr_t) true;
2380 submitPMRequest( request );
2388 void IOService::handleRequestPowerState ( IOPMRequest * request )
2390 const OSSymbol * client = (const OSSymbol *) request->fArg1;
2391 uint32_t state = (uint32_t)(uintptr_t) request->fArg0;
2394 if (request->fArg2)
2405 // upon the next "device" power request - changePowerStateToPriv().
2472 IOPMRequest * request;
2483 request = acquirePMRequest( this, kIOPMRequestTypePowerOverrideOnPriv );
2484 if (!request)
2487 submitPMRequest( request );
2497 IOPMRequest * request;
2508 request = acquirePMRequest( this, kIOPMRequestTypePowerOverrideOffPriv );
2509 if (!request)
2512 submitPMRequest( request );
2520 void IOService::handlePowerOverrideChanged ( IOPMRequest * request )
2523 if (request->getType() == kIOPMRequestTypePowerOverrideOnPriv)
2663 // due to a tickle request. This invalidation must occur before the
2796 IOPMRequest * request;
2823 request = acquirePMRequest( this, kIOPMRequestTypeActivityTickle );
2824 if (request)
2826 request->fArg0 = (void *) stateNumber; // power state
2827 request->fArg1 = (void *) true; // power rise
2828 request->fArg2 = (void *) false; // regular tickle
2829 submitPMRequest(request);
2848 request = acquirePMRequest( this, kIOPMRequestTypeActivityTickle );
2849 if (request)
2851 request->fArg0 = (void *) stateNumber; // power state
2852 request->fArg1 = (void *) true; // power rise
2853 request->fArg2 = (void *) true; // advisory tickle
2854 submitPMRequest(request);
2871 void IOService::handleActivityTickle ( IOPMRequest * request )
2873 uint32_t ticklePowerState = (uint32_t)(uintptr_t) request->fArg0;
2874 bool deviceWasActive = (request->fArg1 == (void *) true);
2875 bool isRegularTickle = (request->fArg2 == (void *) false);
2952 IOPMRequest * request =
2954 if (!request)
2957 request->fArg0 = (void *) period;
2958 submitPMRequest( request );
2970 IOPMRequest * request =
2972 if (!request)
2975 request->fArg0 = (void *) ignore;
2976 submitPMRequest( request );
3086 IOPMRequest * request;
3106 // but the power drop request must be issued regardless.
3111 request = acquirePMRequest( this, kIOPMRequestTypeActivityTickle );
3112 if (request)
3114 request->fArg0 = (void *) 0; // power state (irrelevant)
3115 request->fArg1 = (void *) false; // timer expiration (not tickle)
3116 request->fArg2 = (void *) false; // regular tickle
3117 submitPMRequest( request );
3119 // Do not restart timer until after the tickle request has been
3132 // Want new tickles to turn into pm request after we drop the lock
3135 request = acquirePMRequest( this, kIOPMRequestTypeActivityTickle );
3136 if (request)
3138 request->fArg0 = (void *) 0; // power state (irrelevant)
3139 request->fArg1 = (void *) false; // timer expiration (not tickle)
3140 request->fArg2 = (void *) true; // advisory tickle
3141 submitPMRequest( request );
3143 // Do not restart timer until after the tickle request has been
4089 // Do not inform driver and clients about this request completion,
4106 IOPMRequest * request;
4107 request = acquirePMRequest( this, kIOPMRequestTypeAdjustPowerState );
4108 if (request)
4110 submitPMRequest( request );
4244 // maximum, send an async request for more power to all parents.
4366 // Parent request is stated in terms of required power flags.
4370 // Disregard the "previous request" for power reservation.
6192 IOPMRequest * request;
6200 request = acquirePMRequest( this, kIOPMRequestTypeAllowPowerChange );
6201 if (!request)
6204 request->fArg0 = (void *) refcon;
6205 request->fArg1 = (void *) proc_selfpid();
6206 request->fArg2 = (void *) 0;
6207 submitPMRequest( request );
6230 IOPMRequest * request;
6242 request = acquirePMRequest( this, kIOPMRequestTypeCancelPowerChange );
6243 if (!request)
6250 request->fArg0 = (void *) refcon;
6251 request->fArg1 = (void *) proc_selfpid();
6252 request->fArg2 = (void *) name;
6253 submitPMRequest( request );
6465 IOPMRequest * request;
6469 request = IOPMRequest::create();
6470 if (request)
6472 request->init( target, requestType );
6476 if (root) request->attachRootRequest(root);
6481 PM_ERROR("%s: No memory for PM request type 0x%x\n",
6484 return request;
6491 void IOService::releasePMRequest( IOPMRequest * request )
6493 if (request)
6495 request->reset();
6496 request->release();
6504 void IOService::submitPMRequest( IOPMRequest * request )
6506 assert( request );
6511 (long)request->getType(), request,
6512 request->getTarget(), request->getTarget()->getName(),
6513 request->fArg0, request->fArg1, request->fArg2);
6515 if (request->isReplyType())
6516 gIOPMReplyQueue->queuePMRequest( request );
6518 gIOPMRequestQueue->queuePMRequest( request );
6546 IOPMRequest * request,
6553 // Work queue will immediately execute the queue'd request if possible.
6557 more = gIOPMWorkQueue->queuePMRequest(request, pwrMgt);
6561 // Calling PM without PMinit() is not allowed, fail the request.
6565 more = gIOPMFreeQueue->queuePMRequest(request);
6577 IOPMRequest * request,
6580 bool more = request->getNextRequest();
6581 IOPMRequest * root = request->getRootRequest();
6583 if (root && (root != request))
6588 releasePMRequest( request );
6595 // Called by IOPMWorkQueue to retire a completed request.
6598 bool IOService::retirePMRequest( IOPMRequest * request, IOPMWorkQueue * queue )
6600 assert(request && queue);
6603 request->getType(), request, this, getName(),
6608 if ((request->getType() == kIOPMRequestTypeActivityTickle) &&
6609 (request->fArg1 == (void *) false))
6611 // Idle timer expiration - power drop request completed.
6631 // If the request is linked, then Work queue has already incremented its
6634 return (gIOPMFreeQueue->queuePMRequest( request ));
6643 bool IOService::isPMBlocked ( IOPMRequest * request, int count )
6693 request->getType(), request, this, getName(),
6706 // Service a request from our work queue.
6709 bool IOService::servicePMRequest( IOPMRequest * request, IOPMWorkQueue * queue )
6714 assert(request && queue);
6716 while (isPMBlocked(request, loop++) == false)
6719 request->getType(), request, this, getName(), fMachineState);
6721 gIOPMRequest = request;
6729 executePMRequest( request );
7011 void IOService::executePMRequest( IOPMRequest * request )
7015 switch (request->getType())
7018 handlePMstop( request );
7022 addPowerChild1( request );
7026 addPowerChild2( request );
7030 addPowerChild3( request );
7034 handleRegisterPowerDriver( request );
7043 handlePowerDomainWillChangeTo( request );
7047 handlePowerDomainDidChangeTo( request );
7052 handleRequestPowerState( request );
7057 handlePowerOverrideChanged( request );
7061 handleActivityTickle( request );
7065 handleSynchronizePowerTree( request );
7070 fIdleTimerPeriod = (uintptr_t) request->fArg0;
7082 fIdleTimerIgnored = request->fArg0 ? 1 : 0;
7086 panic("executePMRequest: unknown request type %x", request->getType());
7094 bool IOService::servicePMReplyQueue( IOPMRequest * request, IOPMRequestQueue * queue )
7098 assert( request && queue );
7099 assert( request->isReplyType() );
7102 request->getType(), request, this, getName(), fMachineState);
7104 switch ( request->getType() )
7109 if (responseValid((uint32_t)(uintptr_t) request->fArg0,
7110 (int)(uintptr_t) request->fArg1))
7112 if (kIOPMRequestTypeCancelPowerChange == request->getType())
7121 OSString * name = (OSString *) request->fArg2;
7125 0, (int)(uintptr_t) request->fArg1);
7137 if (request->getType() == kIOPMRequestTypeCancelPowerChange)
7139 OSObject * obj = (OSObject *) request->fArg2;
7145 more = handleAcknowledgePowerChange( request );
7192 handleInterestChanged( request );
7224 request->getType());
7227 more |= gIOPMFreeQueue->queuePMRequest(request);
7446 // Postpone the execution of the next request after
7447 // this request.
7490 // Delay the completion of the root request after
7491 // this request.
7570 void IOPMRequestQueue::queuePMRequest( IOPMRequest * request )
7572 assert(request);
7574 queue_enter(&fQueue, request, IOPMRequest *, fCommandChain);
7599 IOPMRequest * request;
7607 queue_remove_first( &fQueue, request, IOPMRequest *, fCommandChain );
7609 target = request->getTarget();
7611 more |= (*dqAction)( target, request, this );
7657 bool IOPMWorkQueue::queuePMRequest( IOPMRequest * request, IOServicePM * pwrMgt )
7662 assert( request );
7665 assert( queue_next(&request->fCommandChain) ==
7666 queue_prev(&request->fCommandChain) );
7670 // Add new request to the tail of the per-service request queue.
7671 // Then immediately check the request queue to minimize latency
7675 queue_enter(&pwrMgt->RequestHead, request, IOPMRequest *, fCommandChain);
7697 IOPMRequest * request;
7704 request = (IOPMRequest *) queue_first(queue);
7705 if (request->isWorkBlocked())
7706 break; // cannot start, blocked on attached request
7708 target = request->getTarget();
7709 done = (*fWorkAction)( target, request, this );
7717 queue_remove_first(queue, request, IOPMRequest *, fCommandChain);
7718 more |= (*fRetireAction)( target, request, this );
7726 // Retired request blocks another request, since the
7727 // blocked request may reside in the work queue, we
7774 // if request queue is empty, remove IOServicePM from queue.
7836 bool IOPMCompletionQueue::queuePMRequest( IOPMRequest * request )
7840 assert(request);
7841 // unblock dependent request
7842 more = request->detachNextRequest();
7843 queue_enter(&fQueue, request, IOPMRequest *, fCommandChain);
7850 IOPMRequest * request;
7855 request = (IOPMRequest *) queue_first(&fQueue);
7856 while (!queue_end(&fQueue, (queue_entry_t) request))
7858 next = (IOPMRequest *) queue_next(&request->fCommandChain);
7859 if (!request->isFreeBlocked())
7861 queue_remove(&fQueue, request, IOPMRequest *, fCommandChain);
7862 target = request->getTarget();
7864 more |= (*dqAction)( target, request, this );
7866 request = next;