OSDev
http://osdev.su/

PCI
http://osdev.su/viewtopic.php?f=7&t=473
Страница 2 из 3

Автор:  pavia [ 17 дек 2011, 15:47 ]
Заголовок сообщения:  Re: PCI

Код:
+------------+-------------+-------------+--------------+---+
|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

Автор:  Himik [ 18 дек 2011, 18:43 ]
Заголовок сообщения:  Re: PCI

Bargest писал(а):
А есть способ определить, какого типа устройство?

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

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

Автор:  Bargest [ 18 дек 2011, 19:58 ]
Заголовок сообщения:  Re: PCI

pavia, спасибо за статью. Разобрался.
Himik, большое спасибо за файл. Думаю скоро переделаю его под ассемблер и скомпилирую как часть оси.

Автор:  Bargest [ 21 дек 2011, 20:21 ]
Заголовок сообщения:  Re: PCI

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

Автор:  SII [ 21 дек 2011, 20:32 ]
Заголовок сообщения:  Re: PCI

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

Автор:  Bargest [ 21 дек 2011, 22:01 ]
Заголовок сообщения:  Re: PCI

SII, а как тогда организовать, например, запись на хард при помощи PCI DMA?

Автор:  pavia [ 21 дек 2011, 22:44 ]
Заголовок сообщения:  Re: PCI

http://wasm.ru/article.php?article=atazen02

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

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

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

Автор:  Bargest [ 23 дек 2011, 14:42 ]
Заголовок сообщения:  Re: PCI

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

Автор:  pavia [ 23 дек 2011, 16:22 ]
Заголовок сообщения:  Re: PCI

Цитата:
Что за бред?

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

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

Автор:  Bargest [ 23 дек 2011, 22:46 ]
Заголовок сообщения:  Re: PCI

Цитата:
На 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.

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

Страница 2 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/