|
2.7.7.2.3. info()Функция info() возвращает указатель на статическую область, содержащую описание драйвера низкого уровня. Это описание содержится в переменной-указателе name и выводится во время загрузки. 2.7.7.2.4. queuecommand()Функция queuecommand() осуществляет запуск команды SCSI адаптером, затем завершает работу. По завершению команды вызывается функция done() с указателем на структуру Scsi_Cmnd в качестве параметра. Это позволяет команде SCSI запуститься в режиме прерывания. Перед завершением работы функция queuecommand() должна выполнить следующие операции: Функция queuecommand() вызывается лишь в случае ненулевой переменной can_queue (см. 2.7.7.1.2). В ином случае для всех запросов используется функция command(). В случае успеха функция queuecommand() возвращает 0. (Высокоуровневый код SCSI игнорирует это возвращаемое значение). 2.7.7.2.5. done()Функция done() вызывается после завершения команды SCSI. Единственный параметр, этой функции - указатель на структуру Scsi_Cmnd, используемую прежде функцией queuecommand(). Перед вызовом функции done() должна быть правильно установлена переменная result. Она имеет тип 32-битного целого, каждый байт которого имеет свое значение: Байт 0 - Содержит код SCSI STATUS, как описано в 2.7.2.1. 1 - Содерит SCSI MESSAGE, как описано в 2.7.2.12 - Содержит возвращаемый код host адаптера. Этим кодам присваивается значения в scsi.h:
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 вместо того чтобы исследовать существующие драйвера. |
helloworld.ru © 2001-2021 Все права защищены |
|
|