Программирование регистров PLX PCI9030 в Win32

Тема в разделе "WASM.NT.KERNEL", создана пользователем Gennadij, 15 дек 2006.

  1. Gennadij

    Gennadij New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2006
    Сообщения:
    3
    Hi All!
    Помогите разобраться с непосредственным програмированием регистров PLX PCI9030!
    Что не так? Регистры прописываются (те которые в документации указаны как
    перезаписываемые без проблем кроме:
    - регистр состояния PCISR. Мануал говорит, что биты можно сбросить записью
    единиц в сбрасываемые позиции. Биты не сбрасываются ни записью единиц, ни
    записью нулей;
    - регистры PCIBAR2 и PCIBAR3 всегда равны нулю, чего бы в них не писалось.)
    Осталось только указать рабочую зону портов и драйвер готов, а никак!
    Может необходима определённая последовательность записи регистров в локальной зоне?
    Но мануал ничего не оговаривает. Да, печатность ещё раз проверена - всё впорядке.
    Подробности:
    1 - надо скачать поток данных для анализа и обработки в одном исследовании. Чисто
    вспомогательная функция;
    2 - наша группа больше hard чем soft - программеры. Поэтому драйвер пишется на Delphi 7 -
    простота языка позволяет работать всей группе как програмисты;
    3 - доступ к регистрам осуществляется путём редактирования таблицы разрешения
    доступа к портам методом указаным во 2-й или 3-й статье из цикла "Драйверы
    режима ядра" на примере программы CurrentDataTime Four-F. Спасибо автору!
    Да, данная методика работает и в Win2000 и в WinXP.
    4 - вычитывание данных доступом через адресное пространство портов;
    5 - поиски в Linux исходников пока не привели к положительным результатам, всё больше
    огрызки высокого уровневого доступа. Устраивают исходники непосредственной работы
    с регистрами микросхемы на любом языке (MASM, C, C++, Delphi);
    6 - Jungo и прочее требует лицензии, а обойти не могу (см. 2). Заплатить за неё нереально -
    нам второй месяц зарплаты не платят;
    7 - ниже приводятся состояния регистров микросхемы после того как я в ней покопался:
    Registr 00 - PCIIDR : 903010B5h
    Registr 04 - PCICR(RD/WR)+PCISR(only RD?) : 02800001h
    Registr 08: 00000000h
    Registr 0C: 00000008h
    Registr 10 - PCIBAR0(RD/WR) : FEAFFC00h
    Registr 14 - PCIBAR1(RD/WR) : 0000BC01h
    Registr 18 - PCIBAR2(?) : 00000000h
    Registr 1C - PCIBAR3(?) : 00000000h
    Registr 20: 00000000h
    Registr 24: 00000000h
    Registr 28: 00000000h
    Registr 2C: 00000000h
    Registr 30: 00000000h
    Registr 34: 00000000h
    Registr 38: 00000000h
    Registr 3C: 000000FFh
    Registr 40: 00000000h
    Registr 44: 00000000h
    Registr 48: 00800000h
    Registr 4C: 00000000h
    Registr 50: 00000000h
    Registr 54: 00000000h
    Registr 58: 00000000h
    Registr 5C: 00000000h
    Registr 60: 00000000h
    Registr 64: 00000000h
    Registr 68: 00000000h
    Registr 6C: 00000000h
    Registr 70: 00000000h
    Registr 74: 00000000h
    Registr 78: 00000000h
    Registr 7C: 00000000h
    Registr 80: 00000000h
    Registr 84: 00000000h
    Registr 88: 00000000h
    Registr 8C: 00000000h
    Registr 90: 00000000h
    Registr 94: 00000000h
    Registr 98: 00000000h
    Registr 9C: 00000000h
    Registr A0: 00000000h
    Registr A4: 00000000h
    Registr A8: 00000000h
    Registr AC: 00000000h
    Registr B0: 00000000h
    Registr B4: 00000000h
    Registr B8: 00000000h
    Registr BC: 00000000h
    Registr C0: 00000000h
    Registr C4: 00000000h
    Registr C8: 00000000h
    Registr CC: 00000000h
    Registr D0: 00000000h
    Registr D4: 00000000h
    Registr D8: 00000000h
    Registr DC: 00000000h
    Registr E0: 00000000h
    Registr E4: 00000000h
    Registr E8: 00000000h
    Registr EC: 00000000h
    Registr F0: 00000000h
    Registr F4: 00000000h
    Registr F8: 00000000h
    Registr FC: 00000000h
    Local registr 00 - LAS0RR(RD/WR) : 0FFFFF01h
    Local registr 04: 00000000h
    Local registr 08: 00000000h
    Local registr 0C: 00000000h
    Local registr 10: 00000000h
    Local registr 14: 00000000h
    Local registr 18: 00000000h
    Local registr 1C: 00000000h
    Local registr 20: 00000000h
    Local registr 24: 00000000h
    Local registr 28: 00000000h
    Local registr 2C: 00000000h
    Local registr 30: 00000000h
    Local registr 34: 00000000h
    Local registr 38: 00000000h
    Local registr 3C: 00000000h
    Local registr 40: 00000000h
    Local registr 44: 00000000h
    Local registr 48: 00000000h
    Local registr 4C: 00000024h
    Local registr 50: 10000000h
    Local registr 54: 00000000h
    Local registr 58: 00000000h
    Local registr 5C: 00000000h
    Local registr 60: 00000000h
    Local registr 64: 00000000h
    Local registr 68: 00000000h
    Local registr 6C: 00000000h
    Local registr 70: 00000000h
    Local registr 74: 00000000h
    Local registr 78: 00000000h
    Local registr 7C: 00000000h
    Local registr 80: FFFFFFFFh
    Local registr 84: FFFFFFFFh
    Local registr 88: FFFFFFFFh
    Local registr 8C: FFFFFFFFh
    Local registr 90: FFFFFFFFh
    Local registr 94: FFFFFFFFh
    Local registr 98: FFFFFFFFh
    Local registr 9C: FFFFFFFFh
    Local registr A0: FFFFFFFFh
    Local registr A4: FFFFFFFFh
    Local registr A8: FFFFFFFFh
    Local registr AC: FFFFFFFFh
    Local registr B0: FFFFFFFFh
    Local registr B4: FFFFFFFFh
    Local registr B8: FFFFFFFFh
    Local registr BC: FFFFFFFFh
    Local registr C0: FFFFFFFFh
    Local registr C4: FFFFFFFFh
    Local registr C8: FFFFFFFFh
    Local registr CC: FFFFFFFFh
    Local registr D0: FFFFFFFFh
    Local registr D4: FFFFFFFFh
    Local registr D8: FFFFFFFFh
    Local registr DC: FFFFFFFFh
    Local registr E0: FFFFFFFFh
    Local registr E4: FFFFFFFFh
    Local registr E8: FFFFFFFFh
    Local registr EC: FFFFFFFFh
    Local registr F0: FFFFFFFFh
    Local registr F4: FFFFFFFFh
    Local registr F8: FFFFFFFFh
    Local registr FC: FFFFFFFFh
    Work registr 00: FFFFFFFFh
    Work registr 04: FFFFFFFFh
    Work registr 08: FFFFFFFFh
    Work registr 0C: FFFFFFFFh
    Work registr 10: FFFFFFFFh
    Work registr 14: FFFFFFFFh
    Work registr 18: FFFFFFFFh
    Work registr 1C: FFFFFFFFh
    Work registr 20: FFFFFFFFh
    Work registr 24: FFFFFFFFh
    Work registr 28: FFFFFFFFh
    Work registr 2C: FFFFFFFFh
    Work registr 30: FFFFFFFFh
    Work registr 34: FFFFFFFFh
    Work registr 38: FFFFFFFFh
    Work registr 3C: FFFFFFFFh
    Work registr 40: FFFFFFFFh
    Work registr 44: FFFFFFFFh
    Work registr 48: FFFFFFFFh
    Work registr 4C: FFFFFFFFh
    Work registr 50: FFFFFFFFh
    Work registr 54: FFFFFFFFh
    Work registr 58: FFFFFFFFh
    Work registr 5C: FFFFFFFFh
    Work registr 60: FFFFFFFFh
    Work registr 64: FFFFFFFFh
    Work registr 68: FFFFFFFFh
    Work registr 6C: FFFFFFFFh
    Work registr 70: FFFFFFFFh
    Work registr 74: FFFFFFFFh
    Work registr 78: FFFFFFFFh
    Work registr 7C: FFFFFFFFh
    Work registr 80: FFFFFFFFh
    Work registr 84: FFFFFFFFh
    Work registr 88: FFFFFFFFh
    Work registr 8C: FFFFFFFFh
    Work registr 90: FFFFFFFFh
    Work registr 94: FFFFFFFFh
    Work registr 98: FFFFFFFFh
    Work registr 9C: FFFFFFFFh
    Work registr A0: FFFFFFFFh
    Work registr A4: FFFFFFFFh
    Work registr A8: FFFFFFFFh
    Work registr AC: FFFFFFFFh
    Work registr B0: FFFFFFFFh
    Work registr B4: FFFFFFFFh
    Work registr B8: FFFFFFFFh
    Work registr BC: FFFFFFFFh
    Work registr C0: FFFFFFFFh
    Work registr C4: FFFFFFFFh
    Work registr C8: FFFFFFFFh
    Work registr CC: FFFFFFFFh
    Work registr D0: FFFFFFFFh
    Work registr D4: FFFFFFFFh
    Work registr D8: FFFFFFFFh
    Work registr DC: FFFFFFFFh
    Work registr E0: FFFFFFFFh
    Work registr E4: FFFFFFFFh
    Work registr E8: FFFFFFFFh
    Work registr EC: FFFFFFFFh
    Work registr F0: FFFFFFFFh
    Work registr F4: FFFFFFFFh
    Work registr F8: FFFFFFFFh
    Work registr FC: FFFFFFFFh
    Ваше мнение? Списибо за ответы!
     
  2. Gennadij

    Gennadij New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2006
    Сообщения:
    3
    Мануал к PCI9030 говорит, что необходиму в регистры записывать -1 (FF...FF). Затем из них читать значения, которые используются при задании реальных адресов. Пробовал. При записи в любой из нижеперечисленных портов значения -1, они все сбрасываются в 0. Это имеет место и на уровне Ring3 и уровне Ring0 - то есть это аппаратное свойство микросхемы.
    Или это особенность протокола PCI? Но я нигде подобного не читал.
    Registr 10 - PCIBAR0(RD/WR) : FEAFFC00h
    Registr 14 - PCIBAR1(RD/WR) : 0000BC01h
    Registr 18 - PCIBAR2(?) : 00000000h
    Registr 1C - PCIBAR3(?) : 00000000h
    Накопал в Linux исходников и буду ваять wdm драйвер, а хотелось попроще. Тема закрыта.