
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.218] |
![]() |
|
Страницы: (51) « Первая ... 39 40 [41] 42 43 ... 50 51 ( Перейти к последнему сообщению ) |
Сообщ.
#601
,
|
|
|
Полезно посмотреть на линуксовые тексты. Например, вот: http://www.cs.fsu.edu/~baker/devices/lxr/h...host/ehci-hcd.c
|
Сообщ.
#602
,
|
|
|
Я пытаюсь сделать первую QH для запроса конфигураций устройств, а после получения всей информации от устройства установить собственные QH в кольцо для каждой КТ и само устройство будет за один раз выдавать один блок информации используя для этого все свои QH, причём в момент выполнения ставить бит занятости объекту устройства, чтобы все желающие им воспользоваться ждали её завершения.
При таком алгоритме устройства не будут зависеть друг от друга, а контроллер нужно держать постоянно включенным. Для первой QH у меня цепочка до 3 qtd и при его использовании я думаю выключать контроллер, а активировав все qtd включить его(хотя может быть вообще выключать не стоит, а активировать с низу в верх и при активации верхней у нас уже всё будет настроено). Для QH КТ в принципи одна qtd и её можно активировать без выключения контроллера. Добавлено Контроллер настроил на постоянное включение, всё работает, даже для настройки первого QH выключать не пришлось. Хоть и сектора ещё у меня не читаются, настрою пока установку QH для каждой КТ, прерывания у меня работают нормально, я пользуюсь ioapicом, там для PCI номеров прерывания нужно 6 прибавлять, а ISAшные без изменений. И настрою удаление QH при вытаскивании флешки и её настройку при очередном втаскивании. |
Сообщ.
#603
,
|
|
|
Кстати диски от контроллера AHCI получаются более многозадачны, там я ставлю бит занятости объекту тогда, когда забиты все его 32 команды, а это вряд ли произайдёт, т.к. 32 задачи вряд ли сразу на него накинуться. Ему можно поставить чтение одного кластера в одну страницу, другого в другую, сразу 32 таких команд. Одна задача у меня занимает только одно место под команду, а пока диск читает или пишет процессор управляющий свободен и может ставить друкие команды, другое дело, что в одну и ту же флешку забивать команды некуда, а в диск от ahci есть.
|
Сообщ.
#604
,
|
|
|
Цитата StasNewOs @ а это вряд ли произайдёт На "врядли" полагаться не стоит хотя бы из соображений программистской этики. Цитата StasNewOs @ что в одну и ту же флешку забивать команды некуда Да, у флешки команды составные получаются. Я же уже говорил, что можно свою очередь организовать, т.к. у устройтва есть прерывание или более простой вариант для синхонного режима - критическая секция. Пока она не освободится задача будет спать, после пробуждения задача отправит команду и опять уснет, потом драйвер в прерывании ее разбудит. Добавлено И да, если ядро поддерживает мультипроцессорность, то критические секции нужны в любом случае. |
Сообщ.
#605
,
|
|
|
Пытаюсь разобраться, как ставить QH в очередь, но чем больше спеки читаю тем больше вопросов добавляется. В QH во втором dword есть бит Н, он вснгда на первом, или контроллер его ставит на следующий, а на прошлом обнуляет, бит I кстати не нужно выставлять, без него вроде QH не активна, хотя у меня без него все работает, пока QH одна.
Я ещё понял, что если добавляем новую QH то в адресе бит Т убрать нужно? После добавления в кольцо вторую QH контроллер работать перестаёт почамуто. |
Сообщ.
#606
,
|
|
|
StasNewOs, дамп всех QH, TD в студию. Именно дамп, а не исходники. Искать ошибки в твоих сорцах могу лишь по настроению.
Цитата StasNewOs @ он вснгда на первом, или контроллер его ставит на следующий В даташите он даже желтым цветом не обведен, делаем выводы сами... Цитата StasNewOs @ бит I кстати не нужно выставлять Цитата This field is only valid when the queue head is in the Periodic Schedule and the EPS field indicates a Full or Low-speed endpoint. Setting this bit to a one when the queue head is in the Asynchronous Schedule or the EPS field indicates a high-speed device yields undefined results. Цитата StasNewOs @ то в адресе бит Т убрать нужно? Цитата 0=Pointer is valid |
Сообщ.
#607
,
|
|
|
Ничего не понял из твоего ответа как всегда.
![]() |
Сообщ.
#608
,
|
|
|
Приводи цитаты, чего не понял. Сообственно я привел цитаты из даташита, забей в гугл транслейт (если ну очень туго с английским) и получишь ответ.
|
Сообщ.
#609
,
|
|
|
бит I для hi устройств не нужен, понятно.
Проблема с добавлением QH Без бита Т указатель действителен, а почему он не будет действителен это же кольцо |
Сообщ.
#610
,
|
|
|
Цитата StasNewOs @ а почему он не будет действителен это же кольцо Чего хотел сказать этой фразой? |
Сообщ.
#611
,
|
|
|
когда у нас одна QH мы ставим бит Т, и когда несколько QH бит Т уже ни в одной QH не ставится?
Добавлено и не понятно, что происходит с битом Н |
Сообщ.
#612
,
|
|
|
Цитата StasNewOs @ и когда несколько QH бит Т уже ни в одной QH не ставится? Я не могу придумать архитектуру твоего драйвера за тебя. Если QH должны образовать кольцо, то все указатели должны быть соответственно валидными. Добавлено Цитата StasNewOs @ что происходит с битом Н Раздел 4.8.3 |
Сообщ.
#613
,
|
|
|
Логично, тогда вопрос, что происходит при прохождении кольца и почему моё кольцо контроллеру не нравится?
|
Сообщ.
#614
,
|
|
|
Цитата shm @ StasNewOs, дамп всех QH, TD в студию. Именно дамп, а не исходники. Искать ошибки в твоих сорцах могу лишь по настроению. Телепат из меня плохой... |
Сообщ.
#615
,
|
|
|
дампав нету у меня пока, из пустой QH дамп какой должен быть
|