Ядро ОС Linux

       

Done()


Функция done() вызывается после завершения команды SCSI. Единственный параметр, этой функции - указатель на структуру Scsi_Cmnd, используемую прежде функцией queuecommand(). Перед вызовом функции done() должна быть правильно установлена переменная result. Она имеет тип 32-битного целого, каждый байт которого имеет свое значение:

Байт 0 - Содержит код SCSI STATUS, как описано в 2.7.2.1.

1 - Содерит SCSI MESSAGE, как описано в 2.7.2.1

2 - Содержит возвращаемый код host адаптера. Этим кодам присваивается значения в scsi.h:

    DID_OK Ошибок не обнаружено

    DID_NO_CONNECT SCSI SELECTION не может передаться из-за отсутствия устройства по указанному адресу.

    DID_BUS_BUSY Ошибка SCSI ARBITRATION

    DID_TIME_OUT Произошла приостановка работы процесса по неизвестной причине, возможно во время SELECTION или в ожидании RESELECTION.

    DID_BAD_TARGET SCSI ID цели такой-же как ID адаптера

    DID_ABORT Высоко-уровневый код вызывает низко-уровневую функцию abort().

    DID_PARITY Ошибка SCSI PARITY

    DID_ERROR Ошибка, не поддающаяся распознанию (к примеру ошибка самого адаптера)

    DID_RESET Высоко-уровневый код вызывает низко-уровневую функцию reset()

    DID_BAD_INTR Возникновение непредвиденного прерывания, которым не возожно управлять.

Возврат DID_BUS_BUSY будет пытаться запустить команду еще раз, в то время как DID_NO_CONNECT сбросит команду.

Байт 3 Этот байт предназначен для возвращения кода высокого уровня и устанавливается низким уровнем в 0.

В настоящий момент драйвера низкого уровня не описывают сообщения об ошибках, поэтому легче всего для вас найти их определения в scsi.c вместо того чтобы исследовать существующие драйвера.



Содержание раздела