1.Список плат: http://en.wikipedia.org/wiki/List_of_Ma ... 11_chipset
2. Не понял, зачем упираться в таблицу для контроллеров если есть malloc, выделяющий столько памяти, сколько необходимо.
SATA в режиме IDE - полная поддержка
Что и для RealMode рабочий malloc есть?Serge wrote:2. Не понял, зачем упираться в таблицу для контроллеров если есть malloc, выделяющий столько памяти, сколько необходимо.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
А какой глубокий смысл искать контроллеры в RealMode ?
По большому счету особого смысла нет. Был код у Кулакова и я его использовал. Однако как я уже ранее упоминал у меня есть сомнения, что шина будет нормально функционировать. В коде ядра первое обращение к ней идет значительно позже, чем ищутся физические диски на контроллерах адреса которые получены как раз в Real Mode.Serge wrote:А какой глубокий смысл искать контроллеры в RealMode ?
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Первый обращение к PCI происходит при инициализации APIC. Шина функционирует. Есть функция pci_enum. Её вызов надо переместить до APIC_init и дальше пользоваться уже готовым списком устройств.
За отсутствием IDE PATA дисков в наличии, решил и купил переходник ISSI (SATA - IDE) китайской AGESTAR. Работает в обе стороны, пока проверил только воткнув в PATA материнки и шнурком соединив с SATA HDD. Обошлось это чудо китайской промышленности за 290 рублей.
[/url]
[/url]
Фотки кликабельны. Для оценки размеров рядом пробка от "полторашки".
[/url]
[/url]
Фотки кликабельны. Для оценки размеров рядом пробка от "полторашки".
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Есть некоторый прогресс в изысканиях. Сегодня решил посмотреть что показывается при загрузке, в регистре 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 все равно работает - тут уже без комментариев, это за гранью добра и зла.
Также является исключением eBox в режиме Native Mode, в котором биты установлены, но DMA не работает, хотя в Legacy Mode биты установлены и все работает. Возможно еще какая-то причина.
Также на одном из моих компов с мамкой Asus прерывание делится между контроллером SATA (в режиме эмуляции IDE) и контроллером USB. При обращении к HDD, отваливается USB - что впрочем не удивительно, так как кода обрабатывающего такие ситуации в ядре нет (или я не прав и он есть, а я не умею его готовить?). Впрочем после отваливания USB система через N-ное количество обращений к HDD тоже повисает. Биты на этой машине установлены в режиме DMA даже для отсутствующих устройств - вот такой вот интересный BIOS на мамке.
З.Ы. Информацию я раздобыл роясь в гугле: UPDATE
В Qemu 1.5.1 также не установлены биты 5 и 6, а еще автоподстройку размера окна под гостевую ОС убрали.
Кому интересно вот некоторая информация.
Spoiler:
Bus Master IDE Status RegisterRegister 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.
Исключением являются Qemu (версия 0.12.2, возможно в более новых поправлено) где биты не установлены, а DMA все равно работает - тут уже без комментариев, это за гранью добра и зла.
Также является исключением eBox в режиме Native Mode, в котором биты установлены, но DMA не работает, хотя в Legacy Mode биты установлены и все работает. Возможно еще какая-то причина.
Также на одном из моих компов с мамкой Asus прерывание делится между контроллером SATA (в режиме эмуляции IDE) и контроллером USB. При обращении к HDD, отваливается USB - что впрочем не удивительно, так как кода обрабатывающего такие ситуации в ядре нет (или я не прав и он есть, а я не умею его готовить?). Впрочем после отваливания USB система через N-ное количество обращений к HDD тоже повисает. Биты на этой машине установлены в режиме DMA даже для отсутствующих устройств - вот такой вот интересный BIOS на мамке.
З.Ы. Информацию я раздобыл роясь в гугле: UPDATE
В Qemu 1.5.1 также не установлены биты 5 и 6, а еще автоподстройку размера окна под гостевую ОС убрали.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
А что еще можно ожидать от программно изменяемых информационных битMario_r4 wrote:Так вот на работающих с DMA контроллерах биты 5 и 6 установлены, а на неработающих соответственно не установлены.
Исключением являются Qemu (версия 0.12.2, возможно в более новых поправлено) где биты не установлены, а DMA все равно работает - тут уже без комментариев, это за гранью добра и зла.
Также является исключением eBox в режиме Native Mode, в котором биты установлены, но DMA не работает, хотя в Legacy Mode биты установлены и все работает. Возможно еще какая-то причина.
Вообще то можно ожидать следованию стандартам.Phantom-84 wrote:А что еще можно ожидать от программно изменяемых информационных бит
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Установка 5 и 6 бита не помогла решить проблему. Вероятно они являются исключительно индикаторами и не влияют на саму работу.
Самое интересное, что прописанное значение потом не сбрасывается. Возможно эти биты меняют свои значения при повторной записи 1, надо будет -изучить.
UPDATE
Вот какая шняга - если записывать просто нулевой байт, то они сбрасываются. Видимо наличие установленных битов 1 и 2 (сброс Error и Interrupt) заставляет игнорировать установку/сброс 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:*бита разумеется а не регистра
Можно и не настраивать. Просто посмотри, выбран ли DMA-режим в устройстве. Ну и время ожидания нужно всегда выставлять, чтобы отсутствие ответа от устройства не приводило к зависанию.Однако не означает ли это, что BIOS вообще забил на настройку контроллера и его нужно дополнительно настраивать самому? Просто сейчас система при обращении к таким устройствам через DMA намертво повисает и я опять не знаю в какую сторону копать. Все доки перерыл, все по феншую накодировано в плане работы с DMA.
Эээ... не, так не пойдет. Я же эту тему не просто так обозвал "полная поддержка" PIO у меня без проблем работает, а хочется как у белых людей на больших системах.Phantom-84 wrote:Можно и не настраивать. Просто посмотри, выбран ли DMA-режим в устройстве.
Это есть, но даже это не помогает, там похоже в другом месте затык смертельный происходит.Phantom-84 wrote:Ну и время ожидания нужно всегда выставлять, чтобы отсутствие ответа от устройства не приводило к зависанию.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Тогда пользуемся SET FEATURES и выставляем желаемый режим на свой страх и риск.Mario_r4 wrote:Эээ... не, так не пойдет. Я же эту тему не просто так обозвал "полная поддержка" PIO у меня без проблем работает, а хочется как у белых людей на больших системах.
Может, где-то нет проверки на приход своего/чужого прерывания.Это есть, но даже это не помогает, там похоже в другом месте затык смертельный происходит.
Who is online
Users browsing this forum: No registered users and 0 guests