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/ |