Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Jun 27, 2019 7:47 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 262 posts ]  Go to page Previous 13 4 5 6 718 Next
Author Message
PostPosted: Mon Jul 29, 2013 9:40 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
1.Список плат: http://en.wikipedia.org/wiki/List_of_Ma ... 11_chipset
2. Не понял, зачем упираться в таблицу для контроллеров если есть malloc, выделяющий столько памяти, сколько необходимо.


Top
   
PostPosted: Mon Jul 29, 2013 10:05 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
2. Не понял, зачем упираться в таблицу для контроллеров если есть malloc, выделяющий столько памяти, сколько необходимо.

Что и для RealMode рабочий malloc есть?

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Mon Jul 29, 2013 10:45 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
А какой глубокий смысл искать контроллеры в RealMode ?


Top
   
PostPosted: Mon Jul 29, 2013 12:21 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
А какой глубокий смысл искать контроллеры в RealMode ?

По большому счету особого смысла нет. Был код у Кулакова и я его использовал. Однако как я уже ранее упоминал у меня есть сомнения, что шина будет нормально функционировать. В коде ядра первое обращение к ней идет значительно позже, чем ищутся физические диски на контроллерах адреса которые получены как раз в Real Mode.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Mon Jul 29, 2013 1:30 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Первый обращение к PCI происходит при инициализации APIC. Шина функционирует. Есть функция pci_enum. Её вызов надо переместить до APIC_init и дальше пользоваться уже готовым списком устройств.


Top
   
PostPosted: Wed Aug 07, 2013 9:13 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
За отсутствием IDE PATA дисков в наличии, решил и купил переходник ISSI (SATA - IDE) китайской AGESTAR. Работает в обе стороны, пока проверил только воткнув в PATA материнки и шнурком соединив с SATA HDD. Обошлось это чудо китайской промышленности за 290 рублей.
Attachment:
IMGP8251_small.JPG
IMGP8251_small.JPG [ 58.3 KiB | Viewed 2523 times ]

Attachment:
IMGP8256_small.JPG
IMGP8256_small.JPG [ 52.21 KiB | Viewed 2523 times ]

Фотки кликабельны. Для оценки размеров рядом пробка от "полторашки".

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sat Aug 17, 2013 6:56 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Есть некоторый прогресс в изысканиях. Сегодня решил посмотреть что показывается при загрузке, в регистре Bus Master IDE Status Register.
Кому интересно вот некоторая информация.
Spoiler: Show
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 на мамке.

З.Ы. Информацию я раздобыл роясь в гугле:
Attachment:
IDE-BusMaster.7z [28.56 KiB]
Downloaded 58 times


UPDATE
В Qemu 1.5.1 также не установлены биты 5 и 6, а еще автоподстройку размера окна под гостевую ОС убрали.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Aug 18, 2013 8:12 am 
Offline

Joined: Sun Feb 18, 2007 8:34 pm
Posts: 158
Mario_r4 wrote:
Так вот на работающих с DMA контроллерах биты 5 и 6 установлены, а на неработающих соответственно не установлены.

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

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


Top
   
PostPosted: Sun Aug 18, 2013 11:07 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Phantom-84 wrote:
А что еще можно ожидать от программно изменяемых информационных бит :(

Вообще то можно ожидать следованию стандартам. :)

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Aug 18, 2013 12:08 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Установка 5 и 6 бита не помогла решить проблему. Вероятно они являются исключительно индикаторами и не влияют на саму работу.
Самое интересное, что прописанное значение потом не сбрасывается. Возможно эти биты меняют свои значения при повторной записи 1, надо будет -изучить.

UPDATE
Вот какая шняга - если записывать просто нулевой байт, то они сбрасываются. Видимо наличие установленных битов 1 и 2 (сброс Error и Interrupt) заставляет игнорировать установку/сброс 5 и 6 бита.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Last edited by Mario_r4 on Sun Aug 18, 2013 12:55 pm, edited 1 time in total.

Top
   
PostPosted: Sun Aug 18, 2013 12:44 pm 
Offline

Joined: Sun Feb 18, 2007 8:34 pm
Posts: 158
Mario_r4 wrote:
Установка 5 и 6 регистра не помогла решить проблему. Вероятно они являются исключительно индикаторами и не влияют на саму работу.
Однозначно они таковыми и являются.


Top
   
PostPosted: Sun Aug 18, 2013 12:58 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Phantom-84 wrote:
Mario_r4 wrote:
Установка 5 и 6 регистра не помогла решить проблему. Вероятно они являются исключительно индикаторами и не влияют на саму работу.
Однозначно они таковыми и являются.

*бита разумеется а не регистра, я глючу. :)
Однако не означает ли это, что BIOS вообще забил на настройку контроллера и его нужно дополнительно настраивать самому? Просто сейчас система при обращении к таким устройствам через DMA намертво повисает и я опять не знаю в какую сторону копать. Все доки перерыл, все по феншую накодировано в плане работы с DMA.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Aug 18, 2013 2:44 pm 
Offline

Joined: Sun Feb 18, 2007 8:34 pm
Posts: 158
Mario_r4 wrote:
*бита разумеется а не регистра
Я так и понял, даже не обратил внимания на опечатку.

Quote:
Однако не означает ли это, что BIOS вообще забил на настройку контроллера и его нужно дополнительно настраивать самому? Просто сейчас система при обращении к таким устройствам через DMA намертво повисает и я опять не знаю в какую сторону копать. Все доки перерыл, все по феншую накодировано в плане работы с DMA.
Можно и не настраивать. Просто посмотри, выбран ли DMA-режим в устройстве. Ну и время ожидания нужно всегда выставлять, чтобы отсутствие ответа от устройства не приводило к зависанию.


Top
   
PostPosted: Sun Aug 18, 2013 6:14 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Phantom-84 wrote:
Можно и не настраивать. Просто посмотри, выбран ли DMA-режим в устройстве.

Эээ... не, так не пойдет. Я же эту тему не просто так обозвал "полная поддержка" PIO у меня без проблем работает, а хочется как у белых людей на больших системах.
Phantom-84 wrote:
Ну и время ожидания нужно всегда выставлять, чтобы отсутствие ответа от устройства не приводило к зависанию.

Это есть, но даже это не помогает, там похоже в другом месте затык смертельный происходит.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Aug 18, 2013 8:43 pm 
Offline

Joined: Sun Feb 18, 2007 8:34 pm
Posts: 158
Mario_r4 wrote:
Эээ... не, так не пойдет. Я же эту тему не просто так обозвал "полная поддержка" PIO у меня без проблем работает, а хочется как у белых людей на больших системах.
Тогда пользуемся SET FEATURES и выставляем желаемый режим на свой страх и риск.

Quote:
Это есть, но даже это не помогает, там похоже в другом месте затык смертельный происходит.
Может, где-то нет проверки на приход своего/чужого прерывания.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 262 posts ]  Go to page Previous 13 4 5 6 718 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited