Lines Matching refs:request

599 // Immediately stop driver callouts. Schedule an async stop request to detach
605 IOPMRequest * request;
628 request = acquirePMRequest( this, kIOPMRequestTypePMStop );
629 if (request)
632 submitPMRequest( request );
642 void IOService::handlePMstop( IOPMRequest * request )
852 void IOService::addPowerChild1( IOPMRequest * request )
880 void IOService::addPowerChild2( IOPMRequest * request )
882 IOPowerConnection * connection = (IOPowerConnection *) request->fArg0;
936 void IOService::addPowerChild3( IOPMRequest * request )
938 IOPowerConnection * connection = (IOPowerConnection *) request->fArg0;
1035 IOPMRequest * request;
1036 request = acquirePMRequest( this, kIOPMRequestTypeAdjustPowerState );
1037 if (request)
1039 submitPMRequest( request );
1058 IOPMRequest * request;
1129 request = acquirePMRequest( this, kIOPMRequestTypeRegisterPowerDriver );
1130 if (!request)
1137 request->fArg0 = (void *) powerDriver;
1138 request->fArg1 = (void *) powerStatesCopy;
1139 request->fArg2 = (void *) numberOfStates;
1141 submitPMRequest( request );
1156 void IOService::handleRegisterPowerDriver( IOPMRequest * request )
1158 IOService * powerDriver = (IOService *) request->fArg0;
1159 IOPMPSEntry * powerStates = (IOPMPSEntry *) request->fArg1;
1160 unsigned long numberOfStates = (unsigned long) request->fArg2;
1273 IOPMRequest * request;
1293 request = acquirePMRequest( this, kIOPMRequestTypeInterestChanged );
1294 if (request)
1295 submitPMRequest( request );
1313 IOPMRequest * request;
1343 request = acquirePMRequest( this, kIOPMRequestTypeInterestChanged );
1344 if (request)
1345 submitPMRequest( request );
1357 void IOService::handleInterestChanged( IOPMRequest * request )
1419 IOPMRequest * request;
1426 request = acquirePMRequest( this, kIOPMRequestTypeAckPowerChange );
1427 if (!request)
1431 request->fArg0 = whichObject;
1433 submitPMRequest( request );
1441 bool IOService::handleAcknowledgePowerChange( IOPMRequest * request )
1450 whichObject = (IOService *) request->fArg0;
1551 IOPMRequest * request;
1556 request = acquirePMRequest( this, kIOPMRequestTypeAckSetPowerState );
1557 if (!request)
1560 submitPMRequest( request );
1648 void IOService::handleSynchronizePowerTree( IOPMRequest * request )
1654 IOOptionBits options = (uintptr_t) request->fArg0;
1690 void IOService::handlePowerDomainWillChangeTo( IOPMRequest * request )
1692 IOPMPowerFlags parentPowerFlags = (IOPMPowerFlags) request->fArg0;
1693 IOPowerConnection * whichParent = (IOPowerConnection *) request->fArg1;
1694 IOPMPowerChangeFlags parentChangeFlags = (IOPMPowerChangeFlags)(uintptr_t) request->fArg2;
1813 void IOService::handlePowerDomainDidChangeTo( IOPMRequest * request )
1815 IOPMPowerFlags parentPowerFlags = (IOPMPowerFlags) request->fArg0;
1816 IOPowerConnection * whichParent = (IOPowerConnection *) request->fArg1;
1817 IOPMPowerChangeFlags parentChangeFlags = (IOPMPowerChangeFlags)(uintptr_t) request->fArg2;
2061 // Remove flags from child request which we can't possibly supply
2104 // child's perspective. A child power request may arrive while
2105 // parent is transitioning upwards. If a request arrives after
2153 // Schedule a request to re-evaluate all children desires and
2154 // adjust power state. Submit a request if one wasn't pending,
2155 // or if the current request is part of a call tree.
2192 // a subclassed device object will pre-empt this request.
2194 // We treat this as a subclass object request to switch to the
2256 IOPMRequest * request;
2263 request = acquirePMRequest( this, kIOPMRequestTypeRequestPowerStateOverride );
2264 if (!request)
2268 request->fRequestTag = tag;
2269 request->fArg0 = (void *) ordinal;
2270 request->fArg1 = (void *) gIOPMPowerClientDevice;
2271 request->fArg2 = 0;
2274 request->installCompletionAction( action, target, param );
2278 // until the scheduled request is executed.
2285 request->fArg2 = (void *) (uintptr_t) true;
2288 submitPMRequest( request );
2312 IOPMRequest * request;
2319 request = acquirePMRequest( this, kIOPMRequestTypeRequestPowerState );
2320 if (!request)
2324 request->fArg0 = (void *)(uintptr_t) state;
2325 request->fArg1 = (void *) client;
2326 request->fArg2 = 0;
2329 request->installCompletionAction( action, target, param );
2333 // until the scheduled request is executed.
2339 request->fArg2 = (void *) (uintptr_t) true;
2342 submitPMRequest( request );
2350 void IOService::handleRequestPowerState( IOPMRequest * request )
2352 const OSSymbol * client = (const OSSymbol *) request->fArg1;
2353 uint32_t state = (uint32_t)(uintptr_t) request->fArg0;
2356 if (request->fArg2)
2367 // upon the next "device" power request - changePowerStateToPriv().
2441 IOPMRequest * request;
2452 request = acquirePMRequest( this, kIOPMRequestTypePowerOverrideOnPriv );
2453 if (!request)
2456 submitPMRequest( request );
2466 IOPMRequest * request;
2477 request = acquirePMRequest( this, kIOPMRequestTypePowerOverrideOffPriv );
2478 if (!request)
2481 submitPMRequest( request );
2489 void IOService::handlePowerOverrideChanged( IOPMRequest * request )
2492 if (request->getType() == kIOPMRequestTypePowerOverrideOnPriv)
2622 // due to a tickle request. In case the driver has requested a lower
2757 IOPMRequest * request;
2787 request = acquirePMRequest( this, kIOPMRequestTypeActivityTickle );
2788 if (request)
2790 request->fArg0 = (void *) stateNumber;
2791 request->fArg1 = (void *)(uintptr_t) tickleFlags;
2792 request->fArg2 = (void *)(uintptr_t) gIOPMTickleGeneration;
2793 submitPMRequest(request);
2813 request = acquirePMRequest( this, kIOPMRequestTypeActivityTickle );
2814 if (request)
2816 request->fArg0 = (void *) stateNumber;
2817 request->fArg1 = (void *)(uintptr_t) tickleFlags;
2818 request->fArg2 = (void *)(uintptr_t) gIOPMTickleGeneration;
2819 submitPMRequest(request);
2836 void IOService::handleActivityTickle( IOPMRequest * request )
2838 uint32_t ticklePowerState = (uint32_t)(uintptr_t) request->fArg0;
2839 uint32_t tickleFlags = (uint32_t)(uintptr_t) request->fArg1;
2840 uint32_t tickleGeneration = (uint32_t)(uintptr_t) request->fArg2;
2849 // until a new tickle or an explicit power up request from the
2937 IOPMRequest * request =
2939 if (!request)
2942 request->fArg0 = (void *) period;
2943 submitPMRequest( request );
2955 IOPMRequest * request =
2957 if (!request)
2960 request->fArg0 = (void *) ignore;
2961 submitPMRequest( request );
3097 IOPMRequest * request;
3121 // is called, but the power drop request must be issued regardless.
3128 request = acquirePMRequest( this, kIOPMRequestTypeActivityTickle );
3129 if (request)
3131 request->fArg0 = (void *)(uintptr_t) fIdleTimerGeneration;
3132 request->fArg1 = (void *)(uintptr_t) tickleFlags;
3133 request->fArg2 = (void *)(uintptr_t) gIOPMTickleGeneration;
3134 submitPMRequest( request );
3136 // Do not restart timer until after the tickle request has been
3149 // Want new tickles to turn into pm request after we drop the lock
3153 request = acquirePMRequest( this, kIOPMRequestTypeActivityTickle );
3154 if (request)
3156 request->fArg0 = (void *)(uintptr_t) fIdleTimerGeneration;
3157 request->fArg1 = (void *)(uintptr_t) tickleFlags;
3158 request->fArg2 = (void *)(uintptr_t) gIOPMTickleGeneration;
3159 submitPMRequest( request );
3161 // Do not restart timer until after the tickle request has been
3348 // Invalidate tickle cache so the next tickle will issue a request
4159 // Do not inform driver and clients about this request completion,
4181 IOPMRequest * request;
4182 request = acquirePMRequest( this, kIOPMRequestTypeAdjustPowerState );
4183 if (request)
4185 submitPMRequest( request );
4340 // maximum, send an async request for more power to all parents.
4470 // Parent request is stated in terms of required power flags.
4474 // Disregard the "previous request" for power reservation.
4823 // Invalidate tickle cache so the next tickle will issue a request
6428 IOPMRequest * request;
6436 request = acquirePMRequest( this, kIOPMRequestTypeAllowPowerChange );
6437 if (!request)
6440 request->fArg0 = (void *) refcon;
6441 request->fArg1 = (void *)(uintptr_t) proc_selfpid();
6442 request->fArg2 = (void *) 0;
6443 submitPMRequest( request );
6466 IOPMRequest * request;
6480 request = acquirePMRequest( this, kIOPMRequestTypeCancelPowerChange );
6481 if (!request)
6486 request->fArg0 = (void *) refcon;
6487 request->fArg1 = (void *)(uintptr_t) proc_selfpid();
6488 request->fArg2 = (void *) OSString::withCString(name);
6489 submitPMRequest( request );
6903 IOPMRequest * request;
6907 request = IOPMRequest::create();
6908 if (request)
6910 request->init( target, requestType );
6914 if (root) request->attachRootRequest(root);
6919 PM_ERROR("%s: No memory for PM request type 0x%x\n",
6922 return request;
6929 void IOService::releasePMRequest( IOPMRequest * request )
6931 if (request)
6933 request->reset();
6934 request->release();
6942 void IOService::submitPMRequest( IOPMRequest * request )
6944 assert( request );
6949 (long)request->getType(), OBFUSCATE(request),
6950 OBFUSCATE(request->getTarget()), request->getTarget()->getName(),
6951 OBFUSCATE(request->fArg0),
6952 OBFUSCATE(request->fArg1), OBFUSCATE(request->fArg2));
6954 if (request->isReplyType())
6955 gIOPMReplyQueue->queuePMRequest( request );
6957 gIOPMRequestQueue->queuePMRequest( request );
6986 IOPMRequest * request,
6993 // Work queue will immediately execute the queue'd request if possible.
6997 more = gIOPMWorkQueue->queuePMRequest(request, pwrMgt);
7001 // Calling PM without PMinit() is not allowed, fail the request.
7005 more = gIOPMFreeQueue->queuePMRequest(request);
7017 IOPMRequest * request,
7020 bool more = request->getNextRequest();
7021 IOPMRequest * root = request->getRootRequest();
7023 if (root && (root != request))
7028 releasePMRequest( request );
7035 // Called by IOPMWorkQueue to retire a completed request.
7038 bool IOService::retirePMRequest( IOPMRequest * request, IOPMWorkQueue * queue )
7040 assert(request && queue);
7043 request->getType(), OBFUSCATE(request),
7049 if (request->getType() == kIOPMRequestTypeActivityTickle)
7051 uint32_t tickleFlags = (uint32_t)(uintptr_t) request->fArg1;
7060 // processing this request.
7065 // If the request is linked, then Work queue has already incremented its
7068 return (gIOPMFreeQueue->queuePMRequest( request ));
7077 bool IOService::isPMBlocked( IOPMRequest * request, int count )
7128 request->getType(), OBFUSCATE(request),
7142 // Service a request from our work queue.
7145 bool IOService::servicePMRequest( IOPMRequest * request, IOPMWorkQueue * queue )
7150 assert(request && queue);
7152 while (isPMBlocked(request, loop++) == false)
7155 request->getType(), OBFUSCATE(request),
7158 gIOPMRequest = request;
7168 executePMRequest( request );
7451 void IOService::executePMRequest( IOPMRequest * request )
7455 switch (request->getType())
7458 handlePMstop( request );
7462 addPowerChild1( request );
7466 addPowerChild2( request );
7470 addPowerChild3( request );
7474 handleRegisterPowerDriver( request );
7483 handlePowerDomainWillChangeTo( request );
7487 handlePowerDomainDidChangeTo( request );
7492 handleRequestPowerState( request );
7497 handlePowerOverrideChanged( request );
7501 handleActivityTickle( request );
7505 handleSynchronizePowerTree( request );
7510 fIdleTimerPeriod = (uintptr_t) request->fArg0;
7518 fIdleTimerIgnored = request->fArg0 ? 1 : 0;
7522 panic("executePMRequest: unknown request type %x", request->getType());
7530 bool IOService::servicePMReplyQueue( IOPMRequest * request, IOPMRequestQueue * queue )
7534 assert( request && queue );
7535 assert( request->isReplyType() );
7538 request->getType(), OBFUSCATE(request),
7541 switch ( request->getType() )
7546 if (responseValid((uint32_t)(uintptr_t) request->fArg0,
7547 (int)(uintptr_t) request->fArg1))
7549 if (kIOPMRequestTypeCancelPowerChange == request->getType())
7563 OSString * name = (OSString *) request->fArg2;
7567 0, (int)(uintptr_t) request->fArg1, 0);
7579 if (request->getType() == kIOPMRequestTypeCancelPowerChange)
7581 OSObject * obj = (OSObject *) request->fArg2;
7587 more = handleAcknowledgePowerChange( request );
7624 handleInterestChanged( request );
7658 request->getType());
7661 more |= gIOPMFreeQueue->queuePMRequest(request);
7886 // Postpone the execution of the next request after
7887 // this request.
7930 // Delay the completion of the root request after
7931 // this request.
8010 void IOPMRequestQueue::queuePMRequest( IOPMRequest * request )
8012 assert(request);
8014 queue_enter(&fQueue, request, IOPMRequest *, fCommandChain);
8039 IOPMRequest * request;
8047 queue_remove_first( &fQueue, request, IOPMRequest *, fCommandChain );
8049 target = request->getTarget();
8051 more |= (*dqAction)( target, request, this );
8097 bool IOPMWorkQueue::queuePMRequest( IOPMRequest * request, IOServicePM * pwrMgt )
8102 assert( request );
8105 assert( queue_next(&request->fCommandChain) ==
8106 queue_prev(&request->fCommandChain) );
8110 // Add new request to the tail of the per-service request queue.
8111 // Then immediately check the request queue to minimize latency
8115 queue_enter(&pwrMgt->RequestHead, request, IOPMRequest *, fCommandChain);
8137 IOPMRequest * request;
8144 request = (IOPMRequest *) queue_first(queue);
8145 if (request->isWorkBlocked())
8146 break; // cannot start, blocked on attached request
8148 target = request->getTarget();
8149 done = (*fWorkAction)( target, request, this );
8157 queue_remove_first(queue, request, IOPMRequest *, fCommandChain);
8158 more |= (*fRetireAction)( target, request, this );
8166 // Retired request blocks another request, since the
8167 // blocked request may reside in the work queue, we
8214 // if request queue is empty, remove IOServicePM from queue.
8276 bool IOPMCompletionQueue::queuePMRequest( IOPMRequest * request )
8280 assert(request);
8281 // unblock dependent request
8282 more = request->detachNextRequest();
8283 queue_enter(&fQueue, request, IOPMRequest *, fCommandChain);
8290 IOPMRequest * request;
8295 request = (IOPMRequest *) queue_first(&fQueue);
8296 while (!queue_end(&fQueue, (queue_entry_t) request))
8298 next = (IOPMRequest *) queue_next(&request->fCommandChain);
8299 if (!request->isFreeBlocked())
8301 queue_remove(&fQueue, request, IOPMRequest *, fCommandChain);
8302 target = request->getTarget();
8304 more |= (*dqAction)( target, request, this );
8306 request = next;