Поиск портов SATA Диска

Тема в разделе "WASM.OS.DEVEL", создана пользователем drem1lin, 15 фев 2011.

  1. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Здравствуйте. Перечитал кучу ссылок и литературы на васме, осдев.вики но так и не достиг ясности. Мне надо разобраться с этим вопросом в приложении к 1 конкретной машине. Приведу описание известных данных о манише:
    1. Южный мост ICH8
    2. Сата контроллер висит на B0:lol: 1fh:F2
    3. Приведу что мне выдала программа PCI DUMP:
    Bus 00 Device 1f Function 02
    Vendor: 8086 Intel Corporation
    Device: 2820 82801H (ICH8 Family) 4 port SATA IDE Controller
    Revision: 02
    Device class: 01 Mass Storage
    Device subclass: 01
    Device subvendor: 103c Device subsystem: 2801
    Base Address 0: 00001108 I/O
    Base Address 1: 00001118 I/O
    Base Address 2: 00001110 I/O
    Base Address 3: 0000111c I/O
    Base Address 4: 000010e0 I/O
    Base Address 5: 000010f0 I/O
    Interrupt line: 05 Interrupt pin: 02 INT#B Min_Gnt: 00 MaxLat: 00
    Cache line size: 00 Latency timer: 00 Header type: 00 BIST: 00
    I/O: 1 Mem: 1 BusMast: 1 Special: 0 MemInv: 0

    4. А теперь из моих наблюдений:
    а. В матплате всего 3 SATA порта и 1 PATA(IDE)
    б. программа поиска IDE HDD находит саташный хард на 1 канале, 0 диск (хард подключен 1)
    в. при попытке поиграть настройками BIOS винда загружает только в режиме эмуляции IDE.

    Вроде все отметил, что вспомню допишу или если нужны дополнительные данные, пишите, постораюсь ответить. В связи со всем выше перечисленным возникают вопросы:
    1. Что за значения в барах?
    2. Всегда ли харды будут видеться на портах иде?
    3. Как правильнее обращаться к харду?
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Базовые адреса в пространстве портов в/в. А дальше смотри спецификацию на PCI IDE или Datasheet на ICH8

    Не не всегда если выбрать RAID или AHCI. То будут седеть на портах RAID и AHCI.
    А да про какие порты IDE речь устаревшие или родные?

    А как неправильно? Я считаю что в Линуксе идет правильное обращение.
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    На днях затрагивали этот вопрос. 4-портовый контроллер в IDE-режиме эмулирует два канала по два диска. В AHCI-режиме IDE не видно вообще. Если ты ставил винду в IDE-режиме, то в AHCI-режиме она уже не запустится.

    В IDE-режиме естественно можно использовать режим совместимости и естественный PCI IDE-режим, причем на разных каналах может быть по-разному, хотя не уверен, что это можно контролировать в BIOS Setup. BIOS Setup обычно просто предлагает три возможных режима работы SATA - AHCI, естественный PCI IDE-режим и режим совместимости для 4 портов (если портов больше, то дополнительные будут работать уже в естественном режиме).

    Какие значения в барах AHCI-контроллера, я не знаю. Читай соответствующую спецификацию. Могу рассказать только про PCI IDE.
     
  4. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    прочитай ahci specification v 1.3
    она есть у intel на сайте. там все понятно.
     
  5. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Ну порт 1f0, не знаю какой он.
    Я имел ввиду лучше по портам IDE, или по портам взятым из BARов?
     
  6. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Ну в биос есть раздел SATA Emulation и там всего 2 значения IDE и RAID, но винду на рейд я точно не ставил)) а про AHCI там ни слова. То есть у меня будт харды на IDE портах?
     
  7. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Время будет, попробую осилить
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Это унаследованные(устаревшие) порты IDE. Они не обязаны быть в системе.

    Вначале читаешь из BAR'ов смотришь что там лежит. Если нули, то это значит что данное устройство использует особые порты. Если нули то используешь унаследованные порты 1f0 и тд. А вот если не нули, то пользуешcя значение из BAR'ов.
    А да. Первые 4 BAR'а могут быть 0. А вот 5 отвечающий за Bus Mastering при этом будет не нулевым. Ну его лучше использовать так как тебе будет доступен UDMA.
     
  9. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    почитай книгу: "Интерфейсы устройств хранения:ATA, SATA и другие" М. Гук
    там очень хорошо и почти все написано.
     
  10. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    На самом деле нужно использовать байт программного интерфейса: установленный бит 0/2 - естественный режим для 1/2 канала (адреса регистров берутся из баров), установленный старший бит - возможность использовать блок BMI-регистров.
     
  11. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    Phantom_84
    вся проблема в том что перестали писать нормальные книги. нам повезло мы успели попасть в то время когда все писали и про все. а сейчас нормальную книгу по ассемблеру не купишь, если есть то хуже и тоньше чем старая.
    а цены вообще поражают почти под косарь за книгу... уже несколько лет как ассемблер 64бита поддерживает и не одной книги. только документация и словарь англо-русский.
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Phantom_84
    Да пожалуй так правильнее.
     
  13. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    А можно поподробнее, а то я ни ничего не понял( что за байт? что такое BMI?
     
  14. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    1) В BAR'ах обычно адреса портов пишутся.
    2) Не всегда.
    3) Работать с устройством надо через порты, указанные в BAR'ах.

    Приведи для SATA/IDE контроллеров дамп из Евереста (прогоню этот дамп через свой парсер).
     
  15. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Ща у меня аида только есть? как сделать дамп?
     
  16. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    drem1lin
    Да хоть в AIDA. Называется Report в txt файл.
     
  17. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Байт программного интерфейса - младший байт в коде класса. Блок BMI-регистров используется для обмена данными через DMA. Адрес блока хранится в конфигурационном пространстве по смещению 0x20 при условии, что старший бит байта программного интерфейса установлен. Например, когда байт программного интерфейса равен 0x80, для обоих каналов действует режим совместимости (используются стандартные адреса для первого/второго канала - 0x1F0-0x1F7, 3F6h/0x170-0x177, 376h) и имеется возможность использовать блок BMI-регистров. Если ты используешь PIO-обмен, то последний блок тебе без надобности. Остается только определить, нужно ли использовать стандартные адреса командных и управляющих регистров или их следует брать из баров.
     
  18. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Теперь понятно, спасибо за ответ. Я использую PIO.
     
  19. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Ну я сдампил нужные значения:
    08h: 02 8a 01 01
    то есть получается что SATA эмулирует IDE и надо искать на портах IDE?
     
  20. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    08h: 02 8a 01 01
    Код (Text):
    1. +------------+-------------+-------------+--------------+---+
    2. |31        24|23         16|15          8|7            0| № |
    3. +------------+-------------+-------------+--------------+---+
    4. +------------+-------------+-------------+--------------+---+
    5. |         Class Code                     |Revision ID   | 08|
    6. +------------+-------------+-------------+--------------+---+
    Class Code=01018a

    Class Code (Код класса) –он описывает типе устройства состоит из трех частей
    Код (Text):
    1. +---------------+--------------+---------------------+
    2. |23           16|15           8|7                   0|
    3. +---------------+--------------+---------------------+
    4. |Base Class Code|Sub Class Code|Programming Interface|
    5. +---------------+--------------+---------------------+
    Base Class Code – базовый класс сокращенно BCC.
    Sub Class Code - под класс сокращенно SCC.
    Programming Interface – интерфейс сокращенно PI.

    Class Code следующий 0101xxh. это IDE контролер(или SATA который эмулирует IDE)
    Код (Text):
    1. +---+---+---+----------------------------------------+
    2. |BCC|SCC|PI |       Тип                              |
    3. +---+---+---+----------------------------------------+
    4. |01h|00h|00h|SCSI контролер                          |
    5. +   +---+---+----------------------------------------+
    6. |   |01h|xxh|IDE контролер смотри рисунок            |
    7. +   +---+---+----------------------------------------+
    8. |   |02h|00h|Контролер гибких дисков                 |
    9. +   +---+---+----------------------------------------+
    10. |   |03h|00h|IPI контролер                           |
    11. +   +---+---+----------------------------------------+
    12. |   |04h|00h|RAID контролер                          |
    13. +   +---+---+----------------------------------------+
    14. |   |05h|00h|                                        |
    15. +   +---+---+----------------------------------------+
    16. |   |06h|01h|SATA контролер                          |
    17. +   +---+---+----------------------------------------+
    18. |   |80h|00h|Устройство массовой памяти другого типа |
    19. +---+---+---+----------------------------------------+
    Надо сказать, что Programming Interface (PI) имеет сложную структуру.
    Код (Text):
    1. +----+------+----------+----------------------------+
    2. |Бит | Тип  | Значение | Описание                   |
    3. +----+------+----------+----------------------------+
    4. | 7  |  RO  |    1     | Bus Master                 |
    5. +----+------+----------+----------------------------+
    6. |6:4 |  RO  |    0     | Зарезервировано            |
    7. +----+------+----------+----------------------------+
    8. |    |      |          | Поддерживаемый тип         |
    9. | 3  |  RO  |   1/0    | вторичного канала          |
    10. |    |      |          | 1-поддерживаются оба типа  |
    11. |    |      |          | 0-поддерживаются один тип  |
    12. +----+------+----------+----------------------------+
    13. |    |      |          | Установленный режим        |
    14. | 2  | RW/RO|   1/0    | вторичного канала          |
    15. |    |      |          | родной     /усторевший     |
    16. +----+------+----------+----------------------------+
    17. |    |      |          | Поддерживаемый тип         |
    18. | 1  |  RO  |   1/0    | первичного канала          |
    19. |    |      |          | 1-поддерживаются оба типа  |
    20. |    |      |          | 0-поддерживаются один тип  |
    21. +----+------+----------+----------------------------+
    22. | 0  | RW/RO|   1/0    | Режим первичного канала    |
    23. |    |      |          | родной     /усторевший     |
    24. +----+------+----------+----------------------------+
    Смотрим у нас PI=8Ah=10001010b
    Bus Master стоит бит 1. Это значит что устройство поддерживает захват шины PCI или другими словами оно у нас поддерживает DMA PCI. Когда контроллер сам пишет в память компьютера или читает из неё.
    Также это означает что в 5 BAR регистре PCI лежит базовый адрес Bus Master Base Address. Его можно, я бы даже сказал нужно задействовать.

    3 и 1 бит говорят что контроллер поддерживает 2 режима устаревший и родной на обоих каналах.
    А вот 2 и 0 бит сброшены в 0 говорят о том, что выбран устаревший режим на обоих каналах.

    Если контролер находиться в устаревшем режиме, то для доступа к каналам используется используются следующие порты:
    Первичный канал: порты команд 01F0h-01F7h
    Порт контроля 03F4h+2
    прерывание IRQ14
    Вторичный канал: порты команд 0170h-0177h
    порт контроля 0374h+2
    прерывание IRQ15

    У порта контроля базовым считается адрес 03F4h. А сам регистр находиться по смещению +2.


    Если бы в PI биты 0 и 2ой были 1, то он бы работал в родном режиме PCI IDE. Если контролер находиться в родном режиме, то соответствующие порты читаются из конфигурационного пространства PCI.
    Код (Text):
    1. +-------+---------+-------------------------------------------------+
    2. |10h-13h| PCMD_BAR| Primary Command Block Base Address              |
    3. |       |         | Базовый адрес портов команд первичного канала   |
    4. +-------+---------+-------------------------------------------------+
    5. |14h-17h| PCNL_BAR| Primary Control Block Base Address              |
    6. |       |         | Базовый адрес порта контроля первичного канала  |
    7. +-------+---------+-------------------------------------------------+
    8. |18h-1Bh| SCMD_BAR| Secondary Command Block Base Address            |
    9. |       |         | Базовый адрес портов команд вторичного канала   |
    10. +-------+---------+-------------------------------------------------+
    11. |1Ch-1Fh| SCNL_BAR| Secondary Control Block Base Address            |
    12. |       |         | Базовый адрес порта контроля вторичного канала  |
    13. +-------+---------+-------------------------------------------------+
    14. |20h-23h| BM_BASE | Bus Master Base Address                         |
    15. |       |         | Базовый адрес регистров для режима захвата шины |
    16. +-------+---------+-------------------------------------------------+