ядро linux
2.7. Написання драйвера SCSI
Пpедоставлять пpаво поширений і створення копіій цього документа, якщо Пpимечание про Авторський пpавила і це pазpешение сохpаняется на всіх копіях. Тут пpедставлена (з дозволу автоpа) модіфіціpованная копія оригінальної документа. Якщо ви бажаєте воспpоизводить лише цю частину книги, ви можете отримати оригінал по адpес ftp.cs.unc.edu:/pub/faith/papers/scsi.paper.tar.gz
2.7.1. Навіщо потрібні драйвери SCSI
Ядро Linux містить драйвери для наступних основних адаптерів SCSI: Adaptec одна тисячі п'ятсот сорок дві, adaptec 1740, Future Domain TMS-1660 / TMS-1680, Segate ST-01 / ST-02, Ultrastor 14F і Western Digital WD-7000.ви можете написати ваш власний драйвер для непідтримуваного адаптера. Також ви можете змінювати готові драйвери.
2.7.2. Що таке SCSI?
Вступ до стандартного опису SCSI-2 дає докладне визначення Small Computer System Interfase (Інтерфейс Малих комп'ютерних систем) і об'ясняет, як SCSI-2 співвідноситься з SCSI-1 і CCS.
Протокол SCSI створений для забезпечення ефективного обміну інформацією з кількома пристроями (до 8) на декількох адаптерах. Дані можуть передаватися асинхронно зі швидкістю, яка визначається характеристиками пристрою і довжиною кабелю.
Синхронний обмін інформацією може підтримувати швидкість до 10 млн. Передач в секунду. при використанні 32-бітних шин швидкість збільшується до 40Мб в секунду.
SCSI-2 містить команди для магнітних, оптичних дисків, стримерів, принтерів, процесорів, CD-ROMов, сканерів і комунікаційних пристроїв.
У 1985 році перший стандарт SCSI став національним Американським Стандартом, і кілька виробників звернулися до групи розробників X3T9.2 з з побажанням розширити стандарт SCSI для використання полнодоступной пристроїв.
У процесі розширення SCSI група X3T9.2 розробила пакет, названий Common Comand SET (CCS - "загальний набір команд") і створила кілька програмних продуктів, що базуються на цьому інтерфейсі.
Одночасно при цьому група зайнялася створенням розширеного станарта SCSI, названого SCSI-2. Він містив у собі результати розробок CCS з можливістю їх використання різними пристроями. Також він включав в себе команди кешування і інші не менш важливі функції. Так як SCSI-2 був лише більш якісної розширеної копією стандарту SCSI-1, він володів високим ступенем сумісності з пристроями SCSI-1.
2.7.2.1. терміни SCSI
Деякі контролери (зокрема, недорогий контролер Seagate) вимагають переробки сигналів, переданих SCSI bus, інші автоматично використовують ці низькорівневі сигнали. Кожне з 8 слів буде детально описано.
Визначає SCSI bus як незайнятий.
Подається в разі, якщо пристрій SCSI намагається встановити контроль над SCSI bus.В цей момент пристрій вносить свій SCSI ID в DATA BUS (установки SCSI bus) .Наприклад, якщо ID = 2, пристрій ставить дату 0x04. У разі спроби звернення кількох пристроїв одночасно, над метою встановлює контроль пристрій з найбільш високим ID.Слово ARBITRATION використовувалося також в стандарті SCSI-1.
Після установки контролю пристрій, що стало ініціатором, заносить в дату протоколу передачі SCSI ID мети. Якщо мета виявляється, вона визначається, як зайнята за допомогою рядка -BSY. Цей рядок залишається активною весь той час, поки мета з'єднана з ініціатором.
Протокол SCSI дозволяє пристрою відключатися від протоколу передачі під час роботи запиту. Коли пристрій готовий до продовження обміну, воно знову підключається до адаптера. Слово RESELECTION ідентично слову SELECTION, за винятком того, що воно використовується відключеною метою для підключення до вихідного ініціатору. Драйвери, які не підтримують RESELECTION, не мають можливості раз'едіненія з метою SCSI. Однак RESELECTION підтримується багатьма драйверами, так що багатозадачні багатозадачні пристрої SCSI виконувати одночасно кілька завдань, що зменшує час обміну при запитах введення / виведення.
Після цього слова отініціатора до мети може передаватися 6-ти, 10-ти і 12-ти байтная команда.
Слова DATA OUT і DATA IN
Після цих слів здійснюється безпосередня передача інформації між метою та ініціатором. У разі DATA OUT, наприклад, інформація передається від адаптера до диска. DATA IN в такому випадку здійснює зворотну передачу. Якщо команда SCSI вимагає передачі інформації, слово не використовується.
Це слово задається після завершення всіх команд і дає можливість послати ініціатору статусний байт. Існує 9 варіантів статусного байта (таблиця 1.2). Зауважимо, що так як для статусного коду використовуються біти 1-5, статусний байт перед використанням маскується 0x3e. Значення найважливіших статусних кодів:
- GOOD - операція виконана успішно.
- CHECK CONDITION - повідомлення про те що ошібке.Команда REQUEST SENSE може бути використана для отримання більш докладної інформації про помилку.
- BUSY - пристрій не може виконати комаду. Це може статися під час самотестування або відразу після включення пристрою.
Слова MESSAGE OUT і MESSAGE IN
Додаткова інформація передається між ініціатором і метою. Цією інформацією може бути статус сторонньої команди або запит
для зміни протоколу. Слова MESSAGE OUT і MESSAGE IN можуть неодноразово зустрічатися під час однієї передачі.Еслі під час передачі є використання RESELECTION, драйвер повинен підтримувати також слова SAVE DATA POINTERS, RESTORE POINTERS і DISCONNECT (збереження і завантаження покажчиків, раз'едіненіе). У SCSI-2 не всі драйвери зберігають покажчики перед раз'едіненіем.