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 вместо того чтобы исследовать существующие драйвера.