О как!
Настолько детально я код DSDT не разглядывал -- не видел этих проверок.
Можно пояснить по поводу throttling, это то, чем занимается cpufreq governor, т.е. выставление частоты или это ещё какой-то способ?
Как правил DSDT? Шил или подменял образ?
Я пробовал заменять DSDT штатным способом: положить свой DSDT.aml в образ initrd. Но регулировку подсветки это не выпрямляет.
Для начала загляни в профильный форум по МасОS. Там в шапке выложены мои биосы с обновлённым DSDT заточенным под МакОС. а также там расписаны все отличия от оригинального биоса:
http://www.applelife.ru/noutbuki42/packard_bell_bg_46/13034.htmlВо вторых вот тот самый dsdt из второй версии правленного биоса, можешь сам сравнить с оригиналом...
http://files.wyw.ru/3806504Теперь про правку DSDT. В процессе тестирования изменений на том форуме про MacOS все пользовались внешним DSDT.aml, подгружаемым через загрузчик. Как только все баги отловили, я подменил его в биосе, и выложил прошивалку...
Теперь идём к проверкам на ОС.
В основном всё завязано на переменную OSFG. По умолчанию она равна нулю. Далее в методе MSOS идёт идентификация ОС и присваивание OSFG соответствующего значения. Вот кусок из оригинала:
Method (MSOS, 0, NotSerialized)
{
If (CondRefOf (_OSI, Local0))
{
If (_OSI ("Windows 2001"))
{
Store (OSXP, OSFG)
}
If (_OSI ("Windows 2006"))
{
Store (OSVT, OSFG)
}
Return (OSFG)
}
Как видишь если обнаруживается XP или Виста, то в OSFG присваивается соответствующее значение, в противном случае идёт возврат значения по умолчанию. И как я уже до этого говорил, в процедурах обработки функциональных кнопок и для уменьшения/увеличения яркости, и для работы ECO, есть проверки этой переменной (да и во многих других местах она имеется):
If (LEqual (OSFG, OSVT))
Теперь про мои изменения и МакОС. Со значением OSFG по умолчанию под MacOS не работает сон. Точнее ноут усыпает, но никогда не просыпается. Приходилось полностью его выключать, и заного перезагружать ОС. Если в OSFG подставить те значения которые присваиваются Windowsм, то сон под МасОС начинает работать без проблем.
Из-за этого в модуле MSOS, операционка МакОС прикидывается XP:
Method (MSOS, 0, NotSerialized)
{
If (CondRefOf (_OSI, Local0))
{
If (LOr (_OSI ("Darwin"), _OSI ("Windows 2001")))
{
Store (OSXP, OSFG)
}
Соответственно в других методах, к примеру по управлению ECO режимом, режим работы который был там прописан исключительно для Висты, дополнен работой с другими значениями OSFG...
Теперь про регулирование подсветки и моей МакОС. Как я выше говорил, в DSDT два метода работы завязанных на переменной OSFG. Вариант для Висты похоже общается с самой Оперрационкой и уже ОС регулирует яркость. Под МакОС штатная функция регулировки подсветкой на нашем ноутбуке не работает. Из-за этого метод для Висты под МакОС использовать невозможно...
Зато работает под МакОС второй имеющийся там метод - регулирование подсветки через функциональные клавиши без участия ОС. Вся регулировка идёт исключительно командами из DSDT, и вот этим методом мы и пользуемся. Единственное, что у меня там убраны ограничения на максимальный уровень при работе от батарей, и управление именно этим режимом подсветки добавлено в модуль работы Экономичного режима...
Касательно самой лампочки ECO - совсем просто. В DSDT пишем:
включение лампочки - SGPL (0x06, One, One)
выключение - SGPL (0x06, One, Zero)
Про throttling. Если я всё правильно понял, то этот режим завязан не на частоту, а на пропуск тактов...
Под виндой его включение хорошо видно через утилиту Rmclock, там же и устанавливаемые значения отображаются. Единственное, что для MacOS я поставил чтобы в обоих режимах и от батарей и от сети значения были одинаковые - 50%. А не то для висты выставлено на мой взгляд нелогично. От сети экономит проц сильнее, чем от батарии...