Each request in the Request List begins with a fixed length header, which
has the following format:
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³Field ³Length ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Request Length ³WORD ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Command Prefix=1Ch ³BYTE ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Command Code ³BYTE ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Header Offset ³DWORD ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Request Control ³BYTE ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Priority ³BYTE ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Status ³BYTE ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Error Code ³BYTE ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Notify Address ³DWORD ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Hint Pointer ³DWORD ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³DDReserved ³DWORD ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³DDReserved ³DWORD ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³DDReserved ³DWORD ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Request Length
The offset of the next request. If
this is the last request, the value is FFFFH.
Command
Prefix
At the same offset in this request header
as the command code in the standard OS/2 request header. This byte is always
set to EXTENDED REQUEST (1Ch) to allow the physical device driver to maintain
one queue for both standard and extended requests, while distinguishing
the two packet types.
Command Code
Header Offset
The
offset from the beginning of the Request List header to the header of this
request. This field, when subtracted from the address of the header of
this request, yields the header of the list. This provides fast access
to the control information in the header.
Request
Control
A bit field of control flags as follows:
Bits 0-3
Bit 4
If set, notify on error only. Indicates
that the individual request notification routine, NotifyAddress, should
be called immediately in the event that an unrecoverable error occurs in
servicing the request.
Bit 5
If set, notify on completion. Indicates
that the individual notification routine, NotifyAddress, should be called
when execution of the request has completed successfully and possibly with
a recoverable error. This bit does not indicate notification in the case
of an unrecoverable error.
If bit 4 and bit 5 are clear, the individual request notification routine
address is not valid. If bit 4 or bit 5 is set, the notification routine
address is valid. Bits 4 and 5 can both be set to indicate notification
in case of error or successful completion.
Bits 6-7
Priority
A bit field indicating the priority of the request.
The following values are currently defined, and others may be added as
needed, without notice:
00h
01h
Low priority request to be satisfied in
the context of servicing other, higher priority requests or when no other
work exists (lazy-write).
02h
Read ahead, low priority pager I/O.
04h
Background synchronous user I/O.
08h
Foreground synchronous user I/O.
10h
80h
Urgent request; all requests at this priority
should be satisfied in a single sweep of the disk; no stopping allowed at
cylinders other than those necessary to satisfy requests in this priority.
The kernel uses this priority in cases such as an impending power failure
or shutdown.
The kernel or client FSD can request
a priority change after the initial submission of the request to the physical
device driver by issuing a call to DD _ChgPriority.
Status
A bit field indicating
the status of the request. The low nibble indicates the completion status
of the request, giving the Status byte the following values:
X0h
X1h
X2h
X4h
X8h
The high
nibble indicates the error status of the request, giving the Status byte
the following values:
0Xh
1Xh
A recoverable error has occurred
2Xh
An unrecoverable error has occurred
3Xh
An unrecoverable error has occurred
4Xh
The request was abnormally ended
8Xh
High
and low nibbles can be set in combination by the physical device driver
to indicate combinations of error and status conditions. For example, a
code of 12h indicates that a recoverable error has occurred and the request
is still in progress. An error condition indicates a valid error code in
the ErrorCode field. Status is guaranteed to be 00h when the request is
submitted.
Error Code
Contains
a valid error condition, if an error status is indicated in Status. The
following error codes are possible if the error is unrecoverable and are
compatible with previous OS/2 error returns:
00h
01h
02h
03h
04h
06h
07h
08h
0Ah
0Bh
0Ch
10h
13h
The
following error codes are possible, if the error is recoverable:
1Ah
Verify error on write, succeeded after retry
2Ah
Write error, write to mirrored or duplexed
drive succeeded
3Ah
Write error on mirrored or duplexed drive;
write to primary drive succeeded
1Bh
Read error, corrected using ECC
2Bh
Read succeeded after retry
3Bh
Read error, recovered from mirrored or
duplexed drive
NotifyAddress
The address of a notification routine to be called
(according to the flags in RequestControl) when the request has completed
successfully or unsuccessfully due to error conditions. NotifyAddress is
not valid if bits 4 and 5 of RequestControl are clear. NotifyAddress is
called with the following parameters:
ES:BX 16:16
Address of the request header
CF
Set, if an unrecoverable error has occurred.
The
physical device driver is responsible for saving and restoring any registers
that must survive the call.
Hint Pointer
A
16:16 pointer to a request packet in a Request List. This field can be used
when the kernel or the client FSD determines that this request might be
best grouped with another request it has already submitted to the physical
device driver. The request might have already completed, so the physical
device driver must validate that the pointer points to a request on its
internal queues. This field is FFFF:FFFFH if it is unused (that is, if
a hint is not being passed).
DDReserved
Fields
reserved for device driver use.
[Back: Extended Commands]
[Next: Write/Read/WriteVerify]