Самое короткое выключение машинки VIA686 чипсета у меня было так, например: Code (Text): ORG 0x100 mov al, 0x57 mov dx, 0x402F out dx, al int 0x20 собственно валит машинку, как щелчек тумблера на БП, т.е. "моменто море" ))) Вообще этот финал выдрат из биоса и является финальной частью обработчика SMI по части PowerOFF APM. Собственно я так понимаю SMI "слушает" ACPI пронюхивая периодически его таблицы... особенно по части "SMI Command Port address" Как я потом дочитался вкуривая PDF на чипсетину 0x402F и оказался тем самым "SMI Command Port address" VIA производителя. Маны, блин рулят, но сучары буржуйские не дают порой. ТОкма iNtelу РеспектУха!!!
В ACPI этот порт используется для посылки команд включения/выключения ACPI, а команда выключения компьютера передается уже через порты ACPI. Хотя конечно может существовать короткая команда выключения компьютера, направляемая в командный порт SMI, но она будет являться недокументированной.
Ребята, помогите разобраться. Может кто копался с AML кодом. Смущает вот что. Касательно _S5_. В нормальной записи 5F 53 35 5F 12 0A 04 0A 05 0A 05 0A 05 0A 05 ----- _S5_........... всё понятно, что это Name (_S5, Package (0x04) { 0x05, 0x05, 0x05, 0x05 }) Есть вот такая запись 5F 53 35 5F 12 07 04 0A 07 00 00 00 14 42 04 ----- _S5_.........B. КАК из неё получилось Name (_S5, Package (0x04) { 0x07, Zero, Zero, Zero }) Что означает 07, идущая за 12 - опкодом Package? Для получения ASL кода использовал iASL от Intel.
На вопрос "Как получилось?" ответить не сложно. Лучше скажи, как получилось, что в приведенном дампе отсутствует опкод Name.
Снова ничего не понимаю... На одном из компов встретилась такая конструкция: 5F 53 35 5F 12 06 02 0A 00 0A 07 _S5_....... Получается, что PM1a_SLP_TYP = 0x00 PM1b_SLP_TYP = 0x07 iasl показывает тоже самое. Но выключение компа не работает. Если же сделать PM1a_SLP_TYP равным 0x07, то всё замечательно выключается. Скажите, есть такое правило, что если ноль, то надо делать PM1a_SLP_TYP = PM1b_SLP_TYP ???
Прежде всего какой-то странный пакет. Не понятно, куда делить два резервных байта. Есть правило писать SLP_TYPa в PM1a_CNT, а SLP_TYPb в PM1b_CNT. Пропускать запись нужно только тогда, когда PM1x_CNT_BLK равно нулю. Если запись SLP_TYPb в PM1b_CNT делает свое дело, то так и должно быть.
В том то и дело , что не делает. Если писать в оба регистра 0х07, то выключение срабатывает. По поводу резервных байт согласен. Ещё интересно, что обычно пустое значение кодируется как ноль (цифра 0 ), а тут нормально закодированное значение "ноль", то есть не пустое, а нулевое. P.S. Может имеет значение, что это таблица по стандарту ACPI 1.0 ? У Windows всё выключается, но она, ..., хитрая. Может писать подряд общепринятые значения 0х05 или 0х07 (для универсальности). Какое-нибудь, да сработает.
Вообще по спецификации нужно еще выполнять дополнительные методы. Но я конечно не призываю тебя декодировать код на AML. Может, просто не включен режим ACPI. Или этот пакет вообще не для объекта _S5. Это мелочь. Никто и не гарантирует, что нулевое значение должно кодироваться опкодом Zero.
Вопрос в десятку! Мне тоже будет интересно это узнать. Как я считаю, это из пункта 4.7.3.1.2 из спецификации ACPI 4.0 : Но также буду рад разъяснениям.