Выход из S3

Как происходит сабж? На каком этапе биос "понимает", что это выход из S3 а не нормальная загрузка?

Может через CMOS ?

xKVtor писал(-а):
Может через CMOS ?

Х.з. В доках на ACPI вроде написано, что смотриться поле вектора возврата в таблице FACS, и если оно не 0, то тогда... А где это происходит в биосе??? И какая часть кода биоса должна выполниться, чтобы это посмотреть?

Аватар пользователя StarGaz0r

[цитата]В режим SMM процессор может войти только по сигналу на входе SMI# (System Management Interrupt). Сигнал SMI# для процессора является немаскируемым прерыванием с наивысшим приоритетом. При входе в режим SMM автоматически запрещаются аппаратные прерывания. Сразу при входе в SMM процессор сохраняет состояние почти всех своих регистров в специальной памяти SMRAM, которая представляет собой выделенную область физической памяти. В том же фрагменте располагается и обработчик SMI (SMI Handler). Размер памяти SMRAM может меняться от 32 КБ (минимальные потребности SMM) до 4ГБ.
Если режим SMM используется для отключения питания процессора с возможностью быстрого "пробуждения", память SMRAM должна быть энергонезависимой. Если SMRAM не является энергонезависимой, то системная логика должна обеспечить возможность ее инициализации процессором из обычного режима работы до появления сигнала SMI#.
[/цитата]

Следовательно рыть нужно в сторону SMI handler'а

StarGaz0r писал(-а):
Следовательно рыть нужно в сторону SMI handler'а

В спеках на acpi пишут, что при переходе в S3 нужно сохранить настройки контроллера памяти в энергонезависимой памяти, чтобы потом (при подаче питания) пернастроить контроллер памяти. Но впринципе на простой материнке эти настройки всегда одинаковы, поэтому возможно, что просто инитится железо, а потом передается управление SMI хендлеру.

Судя по D-Led`ам на MSI`ной матери при включении происходит "ранняя инициализация чипсета" потом сразу "тесты пройдены - загрузка системы", при этом показуется инит видяшки и появляется рабочий стол.

Интересно, это все делает бутблок или это происходит уже в original.tmp???

Аватар пользователя StarGaz0r

судя по исходникам вроде как бутблок...

> Интересно, это все делает бутблок или это происходит уже в original.tmp???

Это делает бутблок.

А как это приблизительно должно выглядеть в виде исходников???

У меня такая проблема. При просыпании из S3 теряются и находятся новые устройства из тех, о существовании которых acpi ОС узнает через метод _sta. Я предполагаю, что на каком-то этапе загрузки в "память" (к которой вроде доступаются через 0x03F0 и 0x03F1 порты - типа адрес-данные, как, например к cmos) заносятся какие-то ошибочные данные. При дезасемблировании бутблока нашел куски, которые вообщем-то эквиваентны нижеприведенному AML коду. Они вызываются практически сразу после старта. Исправление джампа на них (сделал за этот блок) ничего не дало. Забивать их нопами еще не пробовал, но и непохоже, чтобы этот кусок вызывался из другого места... Как еще что можно проверить/сделать?

OperationRegion (WIN1, SystemIO, 0x03F0, 0x02)
    Field (WIN1, ByteAcc, NoLock, Preserve)
    {
        INDX,   8, 
        DATA,   8
    }

    IndexField (INDX, DATA, ByteAcc, NoLock, Preserve)
    {
        Offset (0x02), 
        CFG,    8, 
        Offset (0x07), 
        LDN,    8, 
        Offset (0x20), 
        IDHI,   8, 
        IDLO,   8, 
        POWC,   8, 
        Offset (0x30), 
        ACTR,   8, 
        Offset (0x60), 
        IOAH,   8, 
        IOAL,   8, 
        Offset (0x70), 
        INTR,   8, 
        Offset (0x72), 
        INT1,   8, 
        Offset (0x74), 
        DMCH,   8, 
        Offset (0xC0), 
        GP40,   8, 
        Offset (0xF0), 
        OPT1,   8, 
        OPT2,   8, 
        OPT3,   8
    }

...

Device (UAR1)
                {
                    Name (_HID, EisaId ("PNP0501"))
                    Name (_UID, 0x01)
                    Method (_STA, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (0x02, LDN)
                        If (LOr (IOAH, IOAL))
                        {
                            If (ACTR)
                            {
                                EXFG ()
                                Return (0x0F)
                            }
                            Else
                            {
                                EXFG ()
                                Return (0x0D)
                            }
                        }

                        EXFG ()
                        Return (0x00)
                    }

Аватар пользователя apple_rom

up

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей