OSDev

для всех
Текущее время: 29 апр 2024, 15:49

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 17 дек 2011, 15:47 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Код:
+------------+-------------+-------------+--------------+---+
|31        24|23         16|15          8|7            0| ? |
+------------+-------------+-------------+--------------+---+
|       Device ID          |          Vendor ID         | 00|
+------------+-------------+-------------+--------------+---+
|        Status            |            Command         | 04|
+------------+-------------+-------------+--------------+---+
|         Class Code                     |Revision ID   | 08|
+------------+-------------+-------------+--------------+---+
|   BIST     | Header Type |Latency Timer|Cash Line Size| 0C|
+------------+-------------+-------------+--------------+---+
|                   Bass address registers  1           | 10|
+------------+-------------+-------------+--------------+---+


Class Code (Код класса) –он описывает типе устройства состоит из трех частей
Код:
+---------------+--------------+---------------------+
|23           16|15           8|7                   0|
+---------------+--------------+---------------------+
|Base Class Code|Sub Class Code|Programming Interface|
+---------------+--------------+---------------------+


Base Class Code – базовый класс сокращенно BCC.
Sub Class Code - под класс сокращенно SCC.
Programming Interface – интерфейс сокращенно PI.

Подробное описание кодов можно найти в спецификации PCI.

Теперь давайте проверим, установлена дискета или нет.

ATA система на сегодняшней день такова. Что она представлена двумя контролерами PATA(IDE), SATA.

ATA - Advanced Technology Attachment, продвинутая технология присоединения
PATA - Parallel ATA (параллельный ATA)
SATA - Serial ATA (последовательный АТА)
AHCI- Advanced Host Controller Interface, расширенный интерфейс контроллера хоста, иногда встречается как ACHI

PATA сейчас называется то, что раньше звалось IDE. Хотя IDE встречается чаще.

IDE контроллер может работать в двух режимах Legacy (устаревший), Native (родной)
SATA в трех Compatibility (совместимость с IDE Legacy), SATA(Native по сути тот же самый Native IDE),AHCI (родной режим для SATA)

Есть спецификация SATA, но там ничего полезного для программиста не нашел. А вот AHCI стоит посмотреть.


Причем SATA контролер имеет базовый класс IDE.
А вот уже мультиплексор SATA дисков (ACHI имеет класс SATA контролера)
Так вот IDE – контролер это уже устоявшаяся система для общения с дисками.
к примеру на ICH5 Интел IDE контролер располагается по следующему PCI адресу B0:D31:F1
Class Code следующий 0101xxh.
Код:
+---+---+---+----------------------------------------+
|BCC|SCC|PI |       Тип                              |
+---+---+---+----------------------------------------+
|01h|00h|00h|SCSI контролер                          |
+   +---+---+----------------------------------------+
|   |01h|xxh|IDE контролер смотри рисунок            |
+   +---+---+----------------------------------------+
|   |02h|00h|Контролер гибких дисков                 |
+   +---+---+----------------------------------------+
|   |03h|00h|IPI контролер                           |
+   +---+---+----------------------------------------+
|   |04h|00h|RAID контролер                          |
+   +---+---+----------------------------------------+
|   |05h|00h|                                        |
+   +---+---+----------------------------------------+
|   |06h|01h|AHCI контролер                          |
+   +---+---+----------------------------------------+
|   |80h|00h|Устройство массовой памяти другого типа |
+---+---+---+----------------------------------------+



Надо сказать, что Programming Interface (PI) имеет сложную структуру.
Код:
+----+------+----------+----------------------------+
|Бит | Тип  | Значение | Описание                   |
+----+------+----------+----------------------------+
| 7  |  RO  |    1     | Bus Master                 |
+----+------+----------+----------------------------+
|6:4 |  RO  |    0     | Зарезервировано            |
+----+------+----------+----------------------------+
|    |      |          | Поддерживаемый тип         |
| 3  |  RO  |    1     | вторичного канала          |
|    |      |          | 1-поддерживаются оба типа  |
+----+------+----------+----------------------------+
|    |      |          | Установленный режим        |
| 2  | RW/RO|   1/0    | вторичного канала          |
|    |      |          | расширенный/устоявшийся    |
+----+------+----------+----------------------------+
|    |      |          | Поддерживаемый тип         |
| 1  |  RO  |    1     | первичного канала          |
|    |      |          | 1-поддерживаются оба типа  |
+----+------+----------+----------------------------+
| 0  | RW/RO|   1/0    | Режим первичного канала    |
|    |      |          | расширенный/устоявшийся    |
+----+------+----------+----------------------------+


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

http://ru.osdev.wikia.com/wiki/HDD


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 18 дек 2011, 18:43 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Bargest писал(а):
А есть способ определить, какого типа устройство?

В спецификации PCI 3.0 есть приложение D, там это описано.
А также
http://www.pcisig.com/specifications/co ... s_Code.pdf

В конце файла есть таблица классов
http://www.pcidatabase.com/pci_c_header.php


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 18 дек 2011, 19:58 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
pavia, спасибо за статью. Разобрался.
Himik, большое спасибо за файл. Думаю скоро переделаю его под ассемблер и скомпилирую как часть оси.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 21 дек 2011, 20:21 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
А на PCI существует более адекватный аналог древнего DMA-контроллера? На osdev wikia нашел только статью про обычный DMA, с намеком, что можно и через PCI.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 21 дек 2011, 20:32 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Устройства PCI должны сами выполнять прямой доступ к памяти, если им это нужно. Программируется он средствами самих этих устройств. Никакого централизованного контроллера ПДП для этого не нужно (и слава Богу, что отказались от этой педерастической схемы). Ну а про контроллер, восходящий к 8237, лучше забудьте сразу: он реально ни для чего не годится, кроме как для обмена данными с флопами, а последние сами по себе уже достаточно давно умерли.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 21 дек 2011, 22:01 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
SII, а как тогда организовать, например, запись на хард при помощи PCI DMA?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 21 дек 2011, 22:44 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
http://wasm.ru/article.php?article=atazen02

Там могут быть ошибки в протоколе.
Так что перепроверь с этим

http://forum.osdev.org/viewtopic.php?f= ... 98#p167798

Посмотри ссылки сдесь
http://wiki.osdev.org/ATA_PIO_Mode


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 23 дек 2011, 14:42 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Спасибо, сделал по WASM'у. По другим ссылкам не нашел.
На VMWare (у друга) DMA работает. На QEMU (у меня) нет: в регистре command контроллера IDE стоит "1" при инициализации, т.е. Bus Mastering не поддерживается. Пробовал вписать туда 101b - не помогает. Все бы хорошо, но при обращении к одному диску на QEMU - просто ошибка, а при обращении к другому - эмулятор вырубается (даже не ребут, а именно выключение). Что за бред?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 23 дек 2011, 16:22 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
Что за бред?

Почитай спецификацию ATA\ATAPI. Тогда поймёшь что за бред. А да надо читать 6 или 7 версию 8 или какая там последняя координально отличается. Причём в нелучшую сторону. Лучше всего была документировано ихмо 1-2 версии, правда там UDMA нет(если не путаю).

Проверь QEMU точно она поддерживает или нет? Эмуляторы плохо эмулируют железо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 23 дек 2011, 22:46 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Цитата:
На QEMU (у меня) нет: в регистре command контроллера IDE стоит "1" при инициализации, т.е. Bus Mastering не поддерживается. Пробовал вписать туда 101b - не помогает.

Так что видимо нет. Значит перед использованием PCI DMA обязательно надо проверить поддержку, а то комп вырубится... Можно ли считать наличие/отсутствие бита Bus Mastering в регистре Command достаточной проверкой?
Почитал в доках про Read DMA:
Цитата:
An unrecoverable error encountered during the execution of this command results in the termination of the command.

Про вырубание компа ничего...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB