Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также

2.7.7.2.3. info()

Функция info() возвращает указатель на статическую область, содержащую описание драйвера низкого уровня. Это описание содержится в переменной-указателе name и выводится во время загрузки.

2.7.7.2.4. queuecommand()

Функция queuecommand() осуществляет запуск команды SCSI адаптером, затем завершает работу. По завершению команды вызывается функция done() с указателем на структуру Scsi_Cmnd в качестве параметра. Это позволяет команде SCSI запуститься в режиме прерывания. Перед завершением работы функция queuecommand() должна выполнить следующие операции:

  • Сохранить указатель на структуру Scsi_Cmnd.
  • Сохранить указатель на функцию done() в качестве поля Scsi_done() в структуре Scsi_Cmnd. См. раздел 2.7.7.2.5 для более подробной информации.
  • Установить специальные переменные в Scsi_Cmnd, требуемые драйвером.
  • Запустить команду SCSI. Для расширенных host-адаптеров это может быть простейшая засылка команды в "mailbox" host-адаптера. Для менее "мудрых" адаптеров используется сначала слово ARBITRATION.

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


    [ Назад | Оглавление | Далее ]









  • helloworld.ru © 2001-2021
    Все права защищены