diff -r 578be2adaf3e -r 307f4279f433 Adaptation/GUID-F75F975B-A490-4EB5-96CD-B2F8DFC63C7C.dita --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Adaptation/GUID-F75F975B-A490-4EB5-96CD-B2F8DFC63C7C.dita Fri Oct 15 14:32:18 2010 +0100 @@ -0,0 +1,35 @@ + + + + + +Asynchronous +RequestsThis document describes how device drivers use asynchronous requests. +

An +asynchronous request is one which is used, typically, to communicate with +the hardware itself. The time taken for such a request to complete depends +on the hardware, and the client user-side thread may want to continue with +some other processing. The user-side thread is not blocked and can continue +with other operations, including issuing other requests (synchronous or asynchronous).

An +asynchronous request is started by a call to RBusLogicalChannel::DoRequest(). +Control normally returns as soon as the request has been issued, successfully +or otherwise. Typically, the hardware indicates completion of an operation +by generating an interrupt. This is handled by an Interrupt Service Routine +(ISR) provided by the driver. This, in turn, schedules a DFC, which at some +later time, runs in the context of a kernel-side thread, and signals the client-user +side thread, marking the asynchronous request as complete.

More than +one asynchronous request can be outstanding at the same time, each one associated +with its own TRequestStatus object and each identified +by a specific request number. The device driver framework puts no explicit +limit on the number of concurrent outstanding asynchronous requests; any limit +must be enforced by the driver itself. However, the API to cancel a request +implicitly prevents you from uniquely identifying more than 32 concurrent +requests.

An outstanding asynchronous request can be cancelled by +a call to RBusLogicalChannel::DoCancel().

+
\ No newline at end of file