ищу таблицу ACPI для HPET Код (Text): ; find ACPI mov eax, 0xDFFF8 @@: add eax, 8 test eax, 0x100000 jnz without_hpet cmp dword [eax], 0x20445352 ; RSDP signature (low 32 bits) jnz @B cmp dword [eax + 4], 0x20525450 ; RSDP signature (high 32 bits) jnz @B mov eax, dword [eax + 16] ; RSDT address mov ebx, dword [eax + 4] sub ebx, 36 shr ebx, 2 add eax, 36 @@: mov edx, dword [eax] cmp dword [edx], 0x54455048 ; HPET signature jz hpet add eax, 4 dec ebx jnz @B without_hpet: hlt hpet: ... до without_hpet или hpet выполнение не доходит: перезагрузка RSDP находится успешно где я не прав? вроде все смещения беру из спецификации ACPI...
asmfan она у меня есть но дело не в этом: для начала нужно ACPI HPET таблицу найти... но не получается
rei3er Сам ровно год назад интересовался этим устройством. Но скилла не хватило написать прогу по его настройке - не нашел путного драйвера под винду для прямой работы с памятью. Может ее там и нет, этой таблицы. А что за мамка-то ? К сожалению, эта таблица встречается пока далеко не на всех материнках. Есть она, например, на: ASRock ALiveHF4G-DVI-M-ASR ASRock i945 ConroeXfire ASUS P5B ASUS M2N-E ASUS P5PL2-E Кстати, если описание HPET все же присутствует в ACPI (в DSDT), то этот таймер отображается в "Диспетчере устройств" в ветке "Системные устройства". http://images.people.overclockers.ru/124514.png http://images.people.overclockers.ru/124515.png http://images.people.overclockers.ru/124516.png Собранные мною примеры описания HPET в ACPI-таблицах для нескольких материнских плат. (570Кб) Винда (XP) с этим HPE-таймером не знакома, поэтому драйвер приходится ставить из интеловского INF-апдейта. Этот интеловский драйвер так же можно использовать и для н-видиевских и прочих чипсетов, благо HPET-стандартное устройство. По большому счету драйвер этот и не нужен вовсе , т.к. ни винда, ни какие-либо проги этот высокоточный таймер с кучей возможностей к огромному сожалению не используют. Так что может проще без ACPI-таблицы пока обойтись, а работать напрямую с чипсетом ? Ведь никто не запрещает задействовать этот таймер для своих целей, даже если он не описан в ACPI-таблицах. Благо в интеловской документации все расписано. Да и на VIAшные чипсеты документация с описанием HPET в интернете встречается.
должна быть EPOX 4PDA3 чипсет Intel 865PE хорошо, как тогда найти его (HPET) BAR без ACPI? (есть спецификации MCH и ICH5 чипсета, но там вроде как ничего похожего на HPET и работу с ним напрямую нет) в спецификации HPET вроде написано, что единственный способ получения его BAR - ACPI HPET таблица и еще по поводу кода, хотелось бы все-таки разобраться, почему он не работает тут дело даже не в HPET таблице как таковой идет сканирование RSDT (просмотр таблицы адресов заголовков других таблиц), но в итоге - вылет и перезагрузка смотрел в VirtualBox (он использует ACPI хостовой машины, т. е моей) - вообще сплошные непонятки с длинами таблиц, хотя опять таки, все смещения беру из официальной документации по ACPI
rei3er Еще ни на одном епоксе я не видел HPET. Тем более на таком старом. Так что искать его там бесполезно. Точнее, чипсет его, естественно, содержит, но поддержки со стороны биоса нет, как водится, никакой. Если HPET нет в диспетчере устройств, то и искать его в ACPI-таблицах нет абсолютно никакого смысла! (это аксиома). Теоретически на некоторых мамках на базе AMI-шного биоса (в основном на ASUSах) HPET может появиться, если включить в сетапе биоса поддержку таблиц ACPI 2.0/ACPI 3.0. Но я в этом направлении не эксперементировал. В даташитах на интеловские чипсеты все описано, начиная с ICH5. В доках на VIA так же есть инфа по HPET, но там ее значительно меньше. Ссылки на интересные чипсетные даташиты я давал в ветке "опять SMM". Год назад я спокойно находил BAR и пытался работать с HPET на мамке с ICH5 безо всяких ACPI-таблиц - при помощи связки HWDIRECT + WPCREDIT (т.к. программер из меня хреновый, то пришлось действовать вручную). Я выше уже писал, что сканировать все же нужно DSDT. 1) ИМХО выгоднее все же искать при помощи чипсета, т.к. еще раз повторяю, что на большенстве материнок поддержки HPET в биосе нет! Надеяться только на ACPI придется только в случае очень редкого чипсета, на который нет документации (nForce/ATi/ULi/...). Самое интересное при работе напрямую с чипсетом это то, что можно не только ИСКАТЬ, но и самому ЗАДАВАТЬ расположение этого самого BAR !!! А это гораздо важнее и интереснее. Хотя если базовый адрес еще не задан, то других вариантов, кроме как задавать BAR самому, больше и нет. ) 2) Содержимое таблиц ACPI можно преспокойненько получить из реестра Windows NT/XP/... без какого бы то ни было риска и лишнего геммора. По этому поводу настоятельно советую ознакомиться с моим наборчиком ACPI_from_REGISTRY_to_ASL. Приведенные в предыдущем посте примеры ACPI-таблиц были сделаны как раз при его помощи. Заодно прямо сейчас советую проверить, есть ли HPET в ACPI на тестируемой машине, просто поискав упоминание о нем в полученном DSDT.aml (по "сигнатуре") или DSDT.asl (искать можно так же по PNP идентификатору, *103 кажется). PS: Если не секрет, зачем HPET вдруг понадобился ? Я то при его помощи хотел старфорсовцам жизнь подпортить, но до конца дело, как обычно, не довел.
а он есть у меня Linux, это раз CONFIG_HPET_TIMER установлен, это 2 так что даже отсюда видно, что HPET есть и работает в последнем посте я также написал, что нашел возможность определения его BAR-а напрямую вот там то я и обнаружил - лишь одно упоминание за почти 600 страниц вы меня не поняли чтобы найти заголовок DSDT нужно просканировать XSDT или RSDT, в чем и проблема в RSDP нет прямой ссылки на DSDT это понятно, но слишком уж к чипсету привязано, хотелось бы обобщенности да еще, раз уж начал с ACPI, так надо довести дело до конца: не люблю бросать начатое, те более если так и не понял в чем причина не поверишь, просто любопытно с этим зверем ознакомиться а там глядишь, какая идея возникнет
rei3er Вообще-то, я имел ввиду соответствующее упоминание и настройку в биосе и таблицу в в ACPI. Ежу понятно, что HPET есть практически в ЛЮБОМ современном чипсете, вышедшем после ICH5. Отсюда не видно, есть ли упоминание о HPET в ACPI. ) А про то, что физически он всегда есть на более менее новых чипсетах, я уже выше сказал. Понятное дело, что раз он есть, то и работать должен. А вот обобщенности как раз в ближайшее время нет и не предвидится. Пора уже с этим смириться. Напоминает историю про погою за двумя зайцми (HPET+ACPI). Да и где гарантия, что хваленый линукс берет настройки HPET именнонно из ACPI ?? Сколько уже ответов, а я так и не понял, есть ли соответствующая настройка в биосе (очень сомневаюсь) и соответствующее устройство в винде ? (или винда принципиально не устанавливается ?) Если нет, то зачем зря ACPI мучить-то ?
xKVtor непонятно, что мы друг другу доказываем я хочу найти HPET в ACPI таблицах или убедиться, что его описания там нет (и работать дальше напрямую с ICH) пока получаю нерабочую программу и хочу понять, где ошибка
rei3er Так из участка кода ничего не могу сказать. Перезагрузка- верный признок ошибки которую процессор не в состоянии обработать. Дальше можно предположить что отсутствует обработчик прерываний. А ошибка скорее всего в четении не существующего адреса. Мои попытки работать с ACPI дальше поиска RSTD не пошли, просто не до этого было. Спасибо xKVtor - за его статью которая пролила часть света на эту вещь. Вечером попробуем твой HPET отыскать( правда его у меня нет).
все сегменты плоские (4ГБ) и на уровне исключений CPU ошибок, имхо, быть не должно другое дело на уровне MCH...
лучше бы из под винды попробовал поискать, под отладчиком. Базу брать по-хорошему надо исключительно от ACPI, "чипсетные" способы ее выставления/определения различаются даже среди интелов -- на ICH5 оно в pci conf, на старших -- уже в Root Complex'е. Где будет на будущих чипсетах -- хз. На VIA и нфорсах ессно вообще всё кардинально по-другому. В новых биосах уже кстати встречается опция HPET Enable в сетапе. add: есть классная утилитка ACPIScope, которой можно посмотреть ACPI-таблицы, с наглядной навигацией по физ.адресам. а баг скорее всего в определении кол-ва entries в RSDT -- не откуда надо берется длина таблицы и размер заголовка в 72 байта некошерен
вот и я о том же нет, длина как раз откуда надо а вот на 72 уменьшать не надо, ты прав - заголовок таблицы 36 байт сейчас попробую
все, баг нашел действительно, дело было в смещениях правильный вариант см. в первом посте всем спасибо за участие, особенно xKVtor
К этому списку можно так же добавить следующие материнки: Asus M2N-MX Asus M2N8-VMX Asus M2NPV-MX Asus P5GZ-MX Asus P5GC-MX (rev. 2.01G) BioStar NF61S-micro754 EliteGroup ECS-P965T-A rev.1.0B MSI P965Neo MS-7235 ver1.1 На последних двух (MSI&ECS) есть опция, которая мне раньше не встречалась: Не знаю, много ли от нее толку, но чем больше всяких опций, тем лучше. Эх, если бы еще базовым адресом можно было самостоятельно управлять... ЗЫ: Постараюсь пополнять этот список по мере обнаружения новых материнок. PPS: Интересные ссылки по теме HPET (и просто по таймерам): http://www.intel.com/hardwaredesign/hpetspec_1.pdf http://www.intel.com/hardwaredesign/hpetspec.htm http://www.microsoft.com/whdc/system/CEC/mm-timer.mspx?pf=true http://softwarecommunity.intel.com/isn/community/en-us/forums/thread/30225022.aspx http://www.gelato.unsw.edu.au/lxr/source/Documentation/hpet.txt http://www.insidepro.com/kk/030/030r.shtml