When a request is issued, the CD-ROM Device Manager will set the IORB_REQ_STATUSBLOCK bit in the RequestControl field of the IORB header. If this bit is set and an error occurs, the Adapter Device Driver must return a valid status block and a valid sense data block back to the Device Manager when the request completes.

The status block is pointed to by the pStatusBlock field in the IORB header. It should be noted that pStatusBlock is a 16 bit near pointer, so the block is within the same segment as the IORB. The sense data is pointed to by the SenseData field in the status block. This field is a 16:16 far pointer. The length of the sense data to return is in specified in the ReqSenseLen field.

The adapter device driver must set the following fields when returning sense data:

To maintain consistency with the adapter device driver specification, an IORB error code must also be returned in the IORB header when an error occurs. This is in addition to the returned sense data information. The table below shows the mapping between Sense Data error codes and IORB error codes. If the Adapter Device Driver returns Sense Key and Sense Codes listed in the SCSI-2 specification which are not listed in the table below, the adapter device driver must map the sense key and codes to the most appropriate IORB error code.

──────────────────────────────────────────────────────────────────────────
  Key  = Sense Key
  ASC  = Additional Sense Code
  ASCQ = Additional Sense Code Qualifier
──────────────────────────────────────────────────────────────────────────
┌──────────┬───────────┬──────────────────────────┬──────────────────────────────┐
│          │           │Description               │IORB Error Code               │
│          │Key ASC    │                          │                              │
│          │ASCQ       │                          │                              │
├──────────┼───────────┼──────────────────────────┼──────────────────────────────┤
│          │           │                          │                              │
│NOT READY │02h 04h 00h│Logical Unit Not Ready    │IOERR_UNIT_NOT_READY          │
│          │02h 04h 01h│Becoming ready            │IOERR_UNIT_NOT_READY          │
│          │02h 57h 00h│Unable to recover TOC     │IOERR_UNIT_NOT_READY          │
├──────────┼───────────┼──────────────────────────┼──────────────────────────────┤
│          │           │                          │                              │
│MEDIUM    │03h 02h 00h│No Seek Complete          │IOERR_RBA_ADDRESSING_ERROR    │
│ERROR     │03h 11h 00h│Unrecovered Read Error    │IOERR_RBA_CRC_ERROR           │
│          │03h 11h 05h│L-EC Uncorrectable Error  │IOERR_RBA_CRC_ERROR           │
│          │03h 11h 06h│CIRC Unrecovered Error    │IOERR_RBA_CRC_ERROR           │
│          │03h 12h 00h│Address Mark Not Found    │IOERR_RBA_ADDRESSING_ERROR    │
│          │03h 15h 00h│Random Positioning Error  │IOERR_RBA_ADDRESSING_ERROR    │
│          │03h 16h 00h│Data Synchronization Error│IOERR_RBA_CRC_ERROR           │
│          │03h 30h 00h│Incompatible Medium       │IOERR_MEDIA_NOT_SUPPORTED     │
├──────────┼───────────┼──────────────────────────┼──────────────────────────────┤
│          │           │                          │                              │
│HARDWARE  │04h 08h 00h│Unit Communication Fail   │IOERR_DEVICE_NONSPECIFIC      │
│ERROR     │04h 09h 01h│Tracking Servo Failure    │IOERR_DEVICE_NONSPECIFIC      │
│          │04h 09h 02h│Focus Servo Failure       │IOERR_DEVICE_NONSPECIFIC      │
│          │04h 09h 03h│Spindle Servo Failure     │IOERR_DEVICE_NONSPECIFIC      │
│          │04h 44h 00h│Internal Target Failure   │IOERR_DEVICE_NONSPECIFIC      │
├──────────┼───────────┼──────────────────────────┼──────────────────────────────┤
│          │           │                          │                              │
│ILLEGAL   │05h 20h 00h│Invalid Command Code      │IOERR_DEVICE_REQ_NOT_SUPPORTED│
│REQUEST   │05h 21h 00h│LBA Out of Range          │IOERR_RBA_ADDRESSING_ERROR    │
│          │05h 24h 00h│Invalid field in CDB      │IOERR_CMD_SYNTAX              │
│          │05h 25h 00h│Unit not supported        │IOERR_CMD_SYNTAX              │
│          │05h 26h 00h│Invalid field in parmlist │IOERR_CMD_SYNTAX              │
│          │05h 63h 00h│End of user area          │IOERR_RBA_ADDRESSING_ERROR    │
│          │05h 64h 00h│Illegal mode for track    │IOERR_RBA_ADDRESSING_ERROR    │
├──────────┼───────────┼──────────────────────────┼──────────────────────────────┤
│          │           │Medium may have changed   │                              │
│UNIT      │06h 28h 00h│Power on reset            │IOERR_MEDIA_CHANGED           │
│ATTENTION │06h 29h 00h│                          │IOERR_DEVICE_RESET            │
├──────────┼───────────┼──────────────────────────┼──────────────────────────────┤
│          │08h 64h 00h│Illegal mode for track    │IOERR_RBA_ADDRESSING_ERROR    │
│BLANK     │           │                          │                              │
│CHECK     │           │                          │                              │
└──────────┴───────────┴──────────────────────────┴──────────────────────────────┘


[Back: Multi-Session Photo CD Support]
[Next: CD-ROM Device Driver Test Tool]