Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Распределение ресурсов для PCI устройств  (Прочитано 14786 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Raptor
Гость
« : 24-02-2007 13:11 » 

Есть некий PCI девайс, который отвечает на запросы по адресам 0xe0000000-0xeeffffff. Но при конфигурировании драйвер шины PCI назначает ему адреса 0xf0000000-0xf7ffffff, что и прописывает в регистры устройства (PCI base adress register), ну с ссответственно в конфигурации оборудования показывается именно этом диапазон адресов выделенных устройству. При этом обмен по шине по адресам выделенным виндой приводит к Error Inbound Write в устройстве, а по правильным адресам вообще обмена нет. В связи с этим возник вопрос, как сказать винде что для данного устройства необходим адрес в памяти начинающийся с 0xe0000000, непонятна идеология назначения этих адресов для WDM драйвера. Вроде бы это должно делаться не через inf файл, так как секция LogConfig предназначена не для WDM драйверов, в то же время значения которые я записываю в базовые регистры устройства PCI перезаписываются драйвером шины на 0xf0000000.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 28-02-2007 15:23 » 

чего то я не понял, это вы про мапируемую память говорите? или где?
если да, то... хрен его знает... попробуйте в режим защиты от сбоев зайти, даст он через дерево устройств сконфигурить? хотя честно говоря правильно сделанной железке должно быть все равно какой базовый адрес... и что за размер?Не понял 128МБайт???

ps ВОЗМОЖНО:
Возможно надо заполнить структуру IO_RESOURCE_REQUIREMENTS_LIST
в ней IO_RESOURCE_DESCRIPTOR  в ней:
    struct {
      ULONG Length;
      ULONG Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory;
запоняется она в IRP_MN_QUERY_RESOURCE_REQUIREMENTS
скорее всего так...

RTFM короче)
« Последнее редактирование: 28-02-2007 15:34 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Raptor
Гость
« Ответ #2 : 02-03-2007 08:14 » 

// чего то я не понял, это вы про мапируемую память говорите
Про нее

// попробуйте в режим защиты от сбоев зайти
Пробовали, не дает

// хотя честно говоря правильно сделанной железке должно быть все равно какой базовый адрес
Ну да, но AnalogDevices видимо так не считает

Спасибо за подсказку, почитаю про IRP_MN_QUERY_RESOURCE_REQUIREMENTS. Сейчас в обработчике IRP_MJ_PNP/IRP_MN_START_DEVICE просто определяю ресурсы, выделенные PCI устройству и в дальнейшем с ними работаю.
Устройство на процессоре Blackfin535, в нем 128 мегабайт это все пространство адресов которое распознает контроллер  PCI шины. В этом пространстве может быть выделено небольшое окно для обмена. Разработчики процессора по все видимости решили что такое окно всегда найдется при конфигурации системы PCI хостом. В данном случае это не так, потому что на материнской платe двухканальная шина PCI, один канал для 64-битных слотов, второй для 32-битных. Соответственно в диспетчере устройств в системных устройствах существуют два устройства шина PCI с разными ресурсами, и как назло нужный диапазон адресов весь находится на другом канале, поэтому при попытке выделить окно в пространстве 0xe0000000-0xeeffffff (как это сделать я разобрался, это делается со стороны устройства, а не системы) система честно отвечает, что этот диапазон недоступен. Проблему попытаемся решить декодированием адресов в устройстве, так как управлять распределением адресов между каналами PCI северного моста материнской платы наверное невозможно. Вот так бывает, когда одни (BF535) считают, что пространство адресов непрерывно и им выделят их специфичный диапазон, а другие (Supermicro P3TDLR) полагают, что устройство PCI должно воспринимать любой выделенный ему базовый адрес, и не делают ручной настройки адресов на PCI каналах.
Записан
Raptor
Гость
« Ответ #3 : 02-03-2007 08:40 » 

И маленькое уточнение, IRP_MN_QUERY_RESOURCE_REQUIREMENTS вообще не приходит в данном случае в обработчик IRP_MJ_PNP, и кстати с загрузкой драйвера вообще дальше AddDevice при запросе недопустимого диапазона дело не идет, т.е. не вызывается IRP_MN_START_DEVICE, что вообще логично, так как ресурсы устройству не выделены то и запускать его нельзя. Диспетчер устройств помечает в ресурсах PCI устройства запрошенный диапазон адресов как конфликтующий и честно пишет что для запуска устройства необходимо освободить эти ресурсы где то еще, но освободить то их как раз и нельзя.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 02-03-2007 09:26 » 

хм... а в биосе попробовать флаг PNP OS/ non PNP ?
правда винда потом все равно переделает скорее всего...

в догонку IRP_MN_QUERY_RESOURCES
хотя да, сразу не вспомнил - обе они для устройства вызываться и не будут... к сожалению. их вызывают только для драйверов шины. собственно в DDK об этом и сказано...
а изменить заданную конфигурацию у меня разрешено только для каналов DMA... сейчас ресурсы по подключению глянул. наверное это через драйвер шины сделано.
PS еще подумаю на досуге...
« Последнее редактирование: 02-03-2007 09:29 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Raptor
Гость
« Ответ #5 : 02-03-2007 11:35 » 

// хм... а в биосе попробовать флаг PNP OS/ non PNP
Тоже пробовал, нет в биосе такого флага, биос последний из выпущенных для этой материнки, 2002 года
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 02-03-2007 14:54 » 

в W2000 был такой ключик boot.ini
/PCILOCK - запрещает Win2000 динамически назначать PCI устройствам IRQ и другие ресурсы для ввода вывода. при этом используются настройки заданные в BIOS. подробности Q148501 майкрософтовской базы вопросов.
в сочетании с выделением ресурсов в биосе...
может вам на другом компе попробовать?) или это - условие работы?

мы железки свои тоже отлаживали... и если на каком то специфичном компе оно не работает - нам проще забраковать комп)))
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Raptor
Гость
« Ответ #7 : 03-03-2007 10:33 » 

// может вам на другом компе попробовать?
Это было бы лучшим выходом, но где еще найти PCI шину с питанием 3.3 вольта которая работает на частоте 33 МГц, а ключик попробую...
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 03-03-2007 13:20 » 

ух еее... сейчас поговорил с нашим железячником... щас поппробую перевести.
на PCI предусмотрено два ключа - вырезы на разъеме.
ближний к краю матери - совместимость с 3-х вольтовой спецификацией.
дальний  - совместимость с 5 вольтовой PCI.

впринципе на мамке есть оба напряжения и как приавило она выдает их оба (нам правда попадались экземпляры без 3 вольт, но это редко - собственно с той же проблеммой сталкивались).

такие же ключи на разъемах мамы - говорят о совместимости с логическими уровнями.
на всех новых машинах - ключ стоит на дальнем конце(ближе к центру мамки) - совместимость с логикой 5-и вольтовой.
(хотя все уже давно работают на 3х вольтовой!!!!! но эта  трех вольтовая будет жить и при входных логических уровнях расчитанных на 5 вольт)

но! если на мамке (или на плате ключа на пять вольт НЕТ - ее можно и пожечь такими уровнями)
либо какое либо другое устройство PCI на этой шине.

так вот к чему я все это...
если у платы с блекфином есть ключ на пять вольт - втыкать можно!(впротивном случае просто в разъем не влезет)
а само питание 3.3 вольта на шине скорее всего будет.
а если ключа на пять вольт у него нет  - это говорит о том, что он может погореть от логических уровней расчинанных на 5 вольт.

PS а... вот... 3.3В - это как сказал наш спец - это пока дефакте) на самом деле 5 конечно, но вроде по уровням современные матери поймут и 3х вольтовые уровни и не сгорят от 5 вольтовых.
а 33мГц... хм. а в чем проблемма? 66Мгц - это вроде пока экзотика...

короче я так понял что вопрос только есть на блекфине ключ на пять вольт или нет(влезет в слот или нет)
ща заглянул в свою машинку, там наша PCI стоит. так вот ключ на матери 5 вольтовый. на нашей плате мы 3 делаем из 5. логика на ней трехвольтовая, но от пятивольтовых уровней не сгорает.


уффф...
кажись так.

PPS но... эээ.. ответственность на себя брать не стану)))
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Raptor
Гость
« Ответ #9 : 03-03-2007 15:04 » 

Эта плата - наша разработка, ключа на 5 Вольт у нее нет так как Blackfin не совместим с 5 вольтами ни по логике ни по питанию, наш железячник  сказал что сейчас на многих (чуть ли не всех) материнках питания 3.3 вольт нет, а на некоторых PCI картах (5В) эти два питания вообще соединены вместе.

// а если ключа на пять вольт у него нет  - это говорит о том, что он может погореть от логических уровней расчинанных на 5 вольт
И ведь точно, погорит, даже на форуме AnalogDevices сказано что подключать его к 5В шине можно только через что-то типа PCI-PCI моста, например Intel 21152, но основным критерием выбора такой структуры устройства была как раз интегрированный контроллер PCI, а с дополнительной микросхемой моста можно взять какой нибудь PLX который работает согласно спецификации PCI. Есть еще статейка по использованию матриц переключателей для логики PCI шины, но работоспособность не гарантируется. Короче сейчас это уже неактуально, времени на серьезную переделку нет, надо запустить то что сделали.

// логика на ней трехвольтовая, но от пятивольтовых уровней не сгорает
А на чем если не секрет контроллер PCI шины, питание для микросхем с помощью DCDC преобразователей можно в принципе сделать какое требуется, а вот логические выводы на таких частотах ...

// 66Мгц - это вроде пока экзотика
Тем не менее современные материнские платы с расширенными PCI слотами (64 бита с двумя ключами питания) почему то идут с частотой 66 МГц и в их описаниях не сказано, работают ли они на 33 Мгц, а в этой материнке так и написано, 33/66 и переключаются джампером, частота вроде бы должна выбираться перемычкой на выводах PCI шины по спецификации PCI, но 3.3 вольта тоже должны быть согласно ей же, тем не менее их нет.

Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 03-03-2007 15:53 » 

как все запущено...)))
//наш железячник  сказал что сейчас на многих (чуть ли не всех) материнках питания 3.3 вольт нет, а на некоторых PCI картах (5В) эти два питания вообще соединены вместе.
мы 3.3 теперь из 5.0 делаем. теперь)) во избежание.
но наш как раз наоборот говорит... что на всех новых - есть! правда мы традиционно на асусе все сидим))) собстно третью спецификацию PCI собираются вроде окончательно на 3 вольта перевести.

// на чем если не секрет контроллер PCI шины
PCI на плисах) самый лучший контроллер)

а на 64 бита мы не переходили... ни времени ни желания... собстно и смысла тоже нет)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines