SATA в режиме IDE - полная поддержка

Internal structure and you change requests/suggestions
  • Serge wrote:2. Не понял, зачем упираться в таблицу для контроллеров если есть malloc, выделяющий столько памяти, сколько необходимо.
    Что и для RealMode рабочий malloc есть?
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • А какой глубокий смысл искать контроллеры в RealMode ?
  • Serge wrote:А какой глубокий смысл искать контроллеры в RealMode ?
    По большому счету особого смысла нет. Был код у Кулакова и я его использовал. Однако как я уже ранее упоминал у меня есть сомнения, что шина будет нормально функционировать. В коде ядра первое обращение к ней идет значительно позже, чем ищутся физические диски на контроллерах адреса которые получены как раз в Real Mode.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Первый обращение к PCI происходит при инициализации APIC. Шина функционирует. Есть функция pci_enum. Её вызов надо переместить до APIC_init и дальше пользоваться уже готовым списком устройств.
  • За отсутствием IDE PATA дисков в наличии, решил и купил переходник ISSI (SATA - IDE) китайской AGESTAR. Работает в обе стороны, пока проверил только воткнув в PATA материнки и шнурком соединив с SATA HDD. Обошлось это чудо китайской промышленности за 290 рублей.
    IMGP8251_small.JPG
    IMGP8251_small.JPG (58.3 KiB)
    Viewed 6635 times
    [/url]
    IMGP8256_small.JPG
    IMGP8256_small.JPG (52.21 KiB)
    Viewed 6635 times
    [/url]
    Фотки кликабельны. Для оценки размеров рядом пробка от "полторашки".
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Есть некоторый прогресс в изысканиях. Сегодня решил посмотреть что показывается при загрузке, в регистре Bus Master IDE Status Register.
    Кому интересно вот некоторая информация.
    Spoiler:Bus Master IDE Status Register

    Register Name: Bus Master IDE Status Register

    Address Offset: Primary Channel: Base + 02h

    Secondary Channel: Base + 0Ah

    Default Value: 00h

    Attribute: Read/Write Clear

    Size: 8 bits


    Bit Description

    7 Simplex only:This read-only bit indicates whether or not both bus master channels (primary
    and secondary) can be operated at the same time. If the bit is a '0', then the channels operate
    independently and can be used at the same time. If the bit is a '1', then only one channel may be
    used at a time.

    6 Drive 1 DMA Capable:This read/write bit is set by device dependent code (BIOS or device
    driver) to indicate that drive 1 for this channel is capable of DMA transfers, and that the
    controller has been initialized for optimum performance.

    5 Drive 0 DMA Capable: This read/write bit is set by device dependent code (BIOS or device
    driver) to indicate that drive 0 for this channel is capable of DMA transfers, and that the
    controller has been initialized for optimum performance.

    4:3 Reserved. Must return 0 on reads.

    2 Interrupt:This bit is set by the rising edge of the IDE interrupt line. This bit is cleared when a
    '1' is written to it by software. Software can use this bit to determine if an IDE device has
    asserted its interrupt line. When this bit is read as a one, all data transfered from the drive is
    visible in system memory.

    1 Error: This bit is set when the controller encounters an error in transferring data to/from
    memory. The exact error condition is bus specific and can be determined in a bus specific
    manner. This bit is cleared when a '1' is written to it by software.

    0 Bus Master IDE Active: This bit is set when the Start bit is written to the Command register.
    This bit is cleared when the last transfer for a region is performed, where EOT for that region is
    set in the region descriptor. It is also cleared when the Start bit is cleared in the Command
    register. When this bit is read as a zero, all data transfered from the drive during the previous
    bus master command is visible in system memory, unless the bus master command was aborted.
    Так вот на работающих с DMA контроллерах биты 5 и 6 установлены, а на неработающих соответственно не установлены.

    Исключением являются Qemu (версия 0.12.2, возможно в более новых поправлено) где биты не установлены, а DMA все равно работает - тут уже без комментариев, это за гранью добра и зла. :mrgreen:

    Также является исключением eBox в режиме Native Mode, в котором биты установлены, но DMA не работает, хотя в Legacy Mode биты установлены и все работает. Возможно еще какая-то причина.

    Также на одном из моих компов с мамкой Asus прерывание делится между контроллером SATA (в режиме эмуляции IDE) и контроллером USB. При обращении к HDD, отваливается USB - что впрочем не удивительно, так как кода обрабатывающего такие ситуации в ядре нет (или я не прав и он есть, а я не умею его готовить?). Впрочем после отваливания USB система через N-ное количество обращений к HDD тоже повисает. Биты на этой машине установлены в режиме DMA даже для отсутствующих устройств - вот такой вот интересный BIOS на мамке.

    З.Ы. Информацию я раздобыл роясь в гугле:
    IDE-BusMaster.7z (28.56 KiB)
    Downloaded 233 times
    UPDATE
    В Qemu 1.5.1 также не установлены биты 5 и 6, а еще автоподстройку размера окна под гостевую ОС убрали.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:Так вот на работающих с DMA контроллерах биты 5 и 6 установлены, а на неработающих соответственно не установлены.

    Исключением являются Qemu (версия 0.12.2, возможно в более новых поправлено) где биты не установлены, а DMA все равно работает - тут уже без комментариев, это за гранью добра и зла. :mrgreen:

    Также является исключением eBox в режиме Native Mode, в котором биты установлены, но DMA не работает, хотя в Legacy Mode биты установлены и все работает. Возможно еще какая-то причина.
    А что еще можно ожидать от программно изменяемых информационных бит :(
  • Phantom-84 wrote:А что еще можно ожидать от программно изменяемых информационных бит :(
    Вообще то можно ожидать следованию стандартам. :)
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Установка 5 и 6 бита не помогла решить проблему. Вероятно они являются исключительно индикаторами и не влияют на саму работу.
    Самое интересное, что прописанное значение потом не сбрасывается. Возможно эти биты меняют свои значения при повторной записи 1, надо будет -изучить.

    UPDATE
    Вот какая шняга - если записывать просто нулевой байт, то они сбрасываются. Видимо наличие установленных битов 1 и 2 (сброс Error и Interrupt) заставляет игнорировать установку/сброс 5 и 6 бита.
    Last edited by Mario_r4 on Sun Aug 18, 2013 12:55 pm, edited 1 time in total.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:Установка 5 и 6 регистра не помогла решить проблему. Вероятно они являются исключительно индикаторами и не влияют на саму работу.
    Однозначно они таковыми и являются.
  • Phantom-84 wrote:
    Mario_r4 wrote:Установка 5 и 6 регистра не помогла решить проблему. Вероятно они являются исключительно индикаторами и не влияют на саму работу.
    Однозначно они таковыми и являются.
    *бита разумеется а не регистра, я глючу. :)
    Однако не означает ли это, что BIOS вообще забил на настройку контроллера и его нужно дополнительно настраивать самому? Просто сейчас система при обращении к таким устройствам через DMA намертво повисает и я опять не знаю в какую сторону копать. Все доки перерыл, все по феншую накодировано в плане работы с DMA.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:*бита разумеется а не регистра
    Я так и понял, даже не обратил внимания на опечатку.
    Однако не означает ли это, что BIOS вообще забил на настройку контроллера и его нужно дополнительно настраивать самому? Просто сейчас система при обращении к таким устройствам через DMA намертво повисает и я опять не знаю в какую сторону копать. Все доки перерыл, все по феншую накодировано в плане работы с DMA.
    Можно и не настраивать. Просто посмотри, выбран ли DMA-режим в устройстве. Ну и время ожидания нужно всегда выставлять, чтобы отсутствие ответа от устройства не приводило к зависанию.
  • Phantom-84 wrote:Можно и не настраивать. Просто посмотри, выбран ли DMA-режим в устройстве.
    Эээ... не, так не пойдет. Я же эту тему не просто так обозвал "полная поддержка" PIO у меня без проблем работает, а хочется как у белых людей на больших системах.
    Phantom-84 wrote:Ну и время ожидания нужно всегда выставлять, чтобы отсутствие ответа от устройства не приводило к зависанию.
    Это есть, но даже это не помогает, там похоже в другом месте затык смертельный происходит.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:Эээ... не, так не пойдет. Я же эту тему не просто так обозвал "полная поддержка" PIO у меня без проблем работает, а хочется как у белых людей на больших системах.
    Тогда пользуемся SET FEATURES и выставляем желаемый режим на свой страх и риск.
    Это есть, но даже это не помогает, там похоже в другом месте затык смертельный происходит.
    Может, где-то нет проверки на приход своего/чужого прерывания.
  • Who is online

    Users browsing this forum: No registered users and 3 guests