На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (51) « Первая ... 39 40 [41] 42 43 ...  50 51  ( Перейти к последнему сообщению )  
> Желающим USB под ДОС , Welcome!!!
    Полезно посмотреть на линуксовые тексты. Например, вот: http://www.cs.fsu.edu/~baker/devices/lxr/h...host/ehci-hcd.c
      Я пытаюсь сделать первую QH для запроса конфигураций устройств, а после получения всей информации от устройства установить собственные QH в кольцо для каждой КТ и само устройство будет за один раз выдавать один блок информации используя для этого все свои QH, причём в момент выполнения ставить бит занятости объекту устройства, чтобы все желающие им воспользоваться ждали её завершения.
      При таком алгоритме устройства не будут зависеть друг от друга, а контроллер нужно держать постоянно включенным.
      Для первой QH у меня цепочка до 3 qtd и при его использовании я думаю выключать контроллер, а активировав все qtd включить его(хотя может быть вообще выключать не стоит, а активировать с низу в верх и при активации верхней у нас уже всё будет настроено).
      Для QH КТ в принципи одна qtd и её можно активировать без выключения контроллера.

      Добавлено
      Контроллер настроил на постоянное включение, всё работает, даже для настройки первого QH выключать не пришлось.
      Хоть и сектора ещё у меня не читаются, настрою пока установку QH для каждой КТ, прерывания у меня работают нормально, я пользуюсь ioapicом, там для PCI номеров прерывания нужно 6 прибавлять, а ISAшные без изменений. И настрою удаление QH при вытаскивании флешки и её настройку при очередном втаскивании.
        Кстати диски от контроллера AHCI получаются более многозадачны, там я ставлю бит занятости объекту тогда, когда забиты все его 32 команды, а это вряд ли произайдёт, т.к. 32 задачи вряд ли сразу на него накинуться. Ему можно поставить чтение одного кластера в одну страницу, другого в другую, сразу 32 таких команд. Одна задача у меня занимает только одно место под команду, а пока диск читает или пишет процессор управляющий свободен и может ставить друкие команды, другое дело, что в одну и ту же флешку забивать команды некуда, а в диск от ahci есть.
          Цитата StasNewOs @
          а это вряд ли произайдёт

          На "врядли" полагаться не стоит хотя бы из соображений программистской этики.
          Цитата StasNewOs @
          что в одну и ту же флешку забивать команды некуда

          Да, у флешки команды составные получаются. Я же уже говорил, что можно свою очередь организовать, т.к. у устройтва есть прерывание или более простой вариант для синхонного режима - критическая секция. Пока она не освободится задача будет спать, после пробуждения задача отправит команду и опять уснет, потом драйвер в прерывании ее разбудит.

          Добавлено
          И да, если ядро поддерживает мультипроцессорность, то критические секции нужны в любом случае.
          Сообщение отредактировано: shm -
            Пытаюсь разобраться, как ставить QH в очередь, но чем больше спеки читаю тем больше вопросов добавляется. В QH во втором dword есть бит Н, он вснгда на первом, или контроллер его ставит на следующий, а на прошлом обнуляет, бит I кстати не нужно выставлять, без него вроде QH не активна, хотя у меня без него все работает, пока QH одна.
            Я ещё понял, что если добавляем новую QH то в адресе бит Т убрать нужно?
            После добавления в кольцо вторую QH контроллер работать перестаёт почамуто.
            Сообщение отредактировано: StasNewOs -
              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 result
              s.

              Цитата StasNewOs @
              то в адресе бит Т убрать нужно?

              Цитата
              0=Pointer is valid
              Сообщение отредактировано: shm -
                Ничего не понял из твоего ответа как всегда. :wacko:
                  Приводи цитаты, чего не понял. Сообственно я привел цитаты из даташита, забей в гугл транслейт (если ну очень туго с английским) и получишь ответ.
                  Сообщение отредактировано: shm -
                    бит I для hi устройств не нужен, понятно.
                    Проблема с добавлением QH
                    Без бита Т указатель действителен, а почему он не будет действителен это же кольцо
                    Сообщение отредактировано: StasNewOs -
                      Цитата StasNewOs @
                      а почему он не будет действителен это же кольцо

                      Чего хотел сказать этой фразой?
                        когда у нас одна QH мы ставим бит Т, и когда несколько QH бит Т уже ни в одной QH не ставится?

                        Добавлено
                        и не понятно, что происходит с битом Н
                          Цитата StasNewOs @
                          и когда несколько QH бит Т уже ни в одной QH не ставится?

                          Я не могу придумать архитектуру твоего драйвера за тебя. Если QH должны образовать кольцо, то все указатели должны быть соответственно валидными.

                          Добавлено
                          Цитата StasNewOs @
                          что происходит с битом Н

                          Раздел 4.8.3
                          Сообщение отредактировано: shm -
                            Логично, тогда вопрос, что происходит при прохождении кольца и почему моё кольцо контроллеру не нравится?
                              Цитата shm @
                              StasNewOs, дамп всех QH, TD в студию. Именно дамп, а не исходники. Искать ошибки в твоих сорцах могу лишь по настроению.

                              Телепат из меня плохой...
                                дампав нету у меня пока, из пустой QH дамп какой должен быть
                                Сообщение отредактировано: StasNewOs -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (51) « Первая ... 39 40 [41] 42 43 ...  50 51


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0624 ]   [ 15 queries used ]   [ Generated: 20.07.25, 04:41 GMT ]