1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

[Manual] Как сделать DSDT с чистого листа

Тема в разделе 'DSDT', создана пользователем slice, 30 сен 2017.

  1. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    10`208
    Задача.
    Вот я купил новый компьютер, на нем нет системы, и я хочу поставить туда Хакинтош. Откуда мне взять DSDT? Ну в большинстве случаев поставили несколько галочек в Кловере, и установка пошла!
    Или вариант, взятьв интернете чей-то ДСДТ для такого-же компьютера, и тоже успешно.
    Я хочу рассказать, как сделать все-таки свой вариант, и потом его улучшать. С момента покупки Dell Latiude E6430 прошло два месяца, и я все еще совершенствую свой ДСДТ, пока не надоест.

    Для чего мы редактируем DSDT?
    Прежде, чем всем этим заниматься, ответьте для себя на вопрос, а чего вы хотите добиться? У вас что-то неправильно работает?
    1. Отображение состояния батарейки (только ноутбуки)
    2. Яркость экрана (только ноутбуки)
    3. Сон и пробуждение
    4. Адекватная реакция на включение в розетку (только ноутбуки).

    Пререквизиты.
    Нужно иметь какой-то компьютер с какой-то операционной системой, чтобы можно было заниматься редактированием текстовых файлов.
    Или вы уже на этот компьютер поставили macOS как-то, и теперь желаете усовершенствовать DSDT.

    Для любой операционной системы есть компилятор командной строки iasl. В том числе для Виндоус, iasl.exe запускается в командной строке как и в маке, имеет те же функции, и дает те же результаты. Редактировать тексты в Виндах неудобно, notepad не имеет подсветки синтаксиса и нумерации строк. Может кто знает более продвинутый редактор. В Маке полно вариантов, и Xcode, и BBEdit, и другие.
    Новую версию для Мака можно взять здесь Оптимизация Dsdt. Новейший Компилятор.
    Для виндоуса на сайте acpica.org Windows Binary Tools

    Еще вы должны запастись описанием языка АЦПИ ACPI_6_2.pdf. Лучше брать новую версию, поскольку разбираться нужно с тем ДСДТ, что вам подсунул свежий БИОС.


    Создание заготовки

    Сначала сделайте себе флешку с Кловером, загрузочную, пусть даже без системы. Важно, чтобы она была в формате FAT32.

    Грузимся на этом компьютере с этой флешки до интерфейса Кловера. Жмем клавишу "O" (латинская буква Оу) или выбираем в меню значок Options. Заходим в раздел ACPI-> там находим DSDT Name: и вписываем BIOS.aml. Это точно тот DSDT, который вы смогли бы получить в виндах через Аиду. Спускаемся по меню и выбираем DSDT fixes -> там можно ставить галочки, клавой или мышкой. Ставим почти все галочки, которые не вызывают у Вас отторжения. К примеру не нужны Firewire, Airport, IDE если вы знаете, что у вас таких устройств нет. Все незнакомое лучше поставить. Возвращаетесь из этого подменю, и нажимаете последовательно клавиши F2, F4, F5.

    Можете выключать испытуемого, и нести флешку на тот компьютер, на котором будете редактировать файлы. Интересующие нас файлы находятся на флешке в папках

    EFI\CLOVER\ACPI\origin
    EFI\CLOVER\misc

    Копируем эти папки в свою рабочую папку на компьютере, где есть iasl. Хоть с Маком, хоть с Виндой. Инструкции одинаковые, за исключением тонкостей типа наклона слеша.

    Декомпиляция

    Полученный DSDT.aml есть бинарный файл, его текстовым редактором не посмотришь. Категорически не советую специализированные редакторы maciASL, DSDTEditor и тому подобные, поскольку цель темы не в том, что добрый дядя рехаб за тебя все сделает, а в том, чтобы самому видеть, что и как происходит.

    Запускаем командную строку: cmd.exe в винде, Terminal.app в маке, что там в Линуксе не в курсе, вроде bash называется.

    > cd РабочаяПапка\origin

    то есть переход в ту самую копию папки, которую сняли с флешки. Положите в эту же папку iasl.exe, если вы в виндах, или установите iasl в систему, если вы в маке

    $ sudo cp ~/Downloads/iasl /usr/local/bin

    Теперь, наконец, можно декомпилировать, то есть получить DSDT на читабельном языке.

    $ iasl -da SSDT*.aml DSDT-*.aml

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

    Мы декомпилируем тот DSDT, который нам пропатчил Кловер, и таким образом уже имеем массу полезных фиксов. Аналогично можно пропатчить оригинальный файл

    $ iasl -da SSDT*.aml DSDT.aml

    И иметь возможность сравнить, что было и что стало. А получился у нас файл с длинным именем DSDT-1234567.dsl, у вас будут другие цифры и буквы. Это исходная заготовка, которую нужно переименовать в DSDT.dsl, а оригинальный в DSDT-origin.dsl, редактировать и компилировать в бесконечном итерационном процессе:
    1. Редактируем текстовым редактором.
    2. Компилируем, получаем DSDT.aml
    команда компиляции
    $ iasl -ta DSDT.dsl
    3. Тестируем, то есть кладем в папку EFI\CLOVER\ACPI\patched и запускаем систему.
    4. Возвращаемся к пункту 1.

    К сожалению декомпиляция может завершиться со следующей ошибкой
    Код:
    Input file SSDT-10x.aml, Length 0x37F (895) bytes
    ACPI: SSDT 0x0000000000000000 00037F (v02 PmRef  Cpu0Cst  00003001 INTL 20120913)
    Pass 1 parse of [SSDT]
    ACPI Error: [C3ST] Namespace lookup failure, AE_ALREADY_EXISTS (20160729/dswload-462)
    ACPI Exception: AE_ALREADY_EXISTS, During name lookup/catalog (20160729/psobject-310)
    Could not parse external ACPI tables, AE_ALREADY_EXISTS
    
    Это означает что описание символа C3ST встретилось в двух разных SSDT, последняя из них это SSDT-10x.
    В моем случае она оказалась сходной с SSDT-5x, отличаясь тем, что 5х это ACPI1.0, а 10x это ACPI2.0. А имена одинаковые! То-то у меня в кернел-логе сыплет, что-то навроде этого. Это ошибка БИОСа!
    Так же в ноутбуке две одинаковые таблицы. Я проследил, они действительно обе присутствуют в БИОСе, это не моя ошибка.
    Что делать? Перед компиляцией удалить дублера, а в реальной работе сделать в конфиге Кловера дроп лишних таблиц. В случае дублей улетят обе.

    Что исправлять

    1. Ошибки синтаксиса, допущенные производителем данного компьютера
    2. Смысловые ошибки
    3. Трюки, найденные в интернете. Насчет этого пункта, все думают, что это единственное, что нужно сделать. Нет, первые два пункта тоже важны.
    Вот, к примеру, патчи, собранные Рехабом. Пользоваться, или нет?
    Я бы сказал "если только с умом". https://applelife.ru/threads/manual-kak-sdelat-dsdt-s-chistogo-lista.2491149/page-4#post-694806

    Продолжение в следующих постах...
     
    Последнее редактирование: 24 ноя 2017
    vivarus, tatur_sn, AslashA и 23 другим нравится это.
     
  2. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    10`208
    Ошибки синтаксиса

    Cмотрим сам файл DSDT.dsl и в самом файле видим первые проблемы

    External (_SB_.PCI0.PEG0.VID_.LCD_, UnknownObj)
    Это означает, что где-то в тексте есть ссылка на объект, а самого объекта нигде нет. Ищем. Он есть в SSDT-7. Получается, что он оттуда не экспортировался. Именно по этой причине к этому ноутбуку предлагают эту SSDT включать внутрь общей DSDT. Простым копированием текста, из той SSDT от первой фигурной скобки до последней в хвост DSDT.dsl перед последней скобкой.

    Вторая ошибка с отсутствующими символами
    External (HNOT, MethodObj) // Warning: Unknown method, guessing 1 arguments

    Поиск показывает, что метод упоминается в такой конструкции

    Код:
                  If (CondRefOf (HNOT))
                    {
                        HNOT (Arg0)
                    }
                    Else
                    {
                        Notify (GFX0, 0x80) // Status Change
                    }

    Тогда все в порядке, если метод неопределен, то и не выполняется. Мне непонятно, а как тогда компилируется? Лучше удалить это, оставить только Notify...

    Запускаю компиляцию только что полученного файла (я переименовал DSDT-1F2C3B4D.dsl в более простое DSDT1.dsl, как первая попытка)

    $ iasl -ta DSDT1.dsl
    1 errors, 14 warmings, 91 remarks, 109 optimisations


    Ошибку надо исправлять, иначе нет результата.
    Варнинги тоже надо исправлять, вдумываясь, почему компилятор ругается.
    Это еще хорошая ситуация, я встречал и сотни ошибок при первой компиляции.

    В данном случае ошибка некритичная, в строке
    Name (_HID, "*pnp0c14")
    формат строки символов недопустимый, исправляется по науке так:
    Name (_HID, EisaId ("PNP0C14") /* Windows Management Instrumentation Device */)
    Исправлять нужно, иначе не скомпилируем, но на работу это не влияет, это виндусовая примочка.

    Варнинги реально более критичны, вот образцы исправлений.
    - что было
    + что сделал

    - CreateDWordField (BUF0, \_SB.PCI0._Y0F._LEN, MSLN) // _LEN: Length
    + CreateQWordField (BUF0, \_SB.PCI0._Y0F._LEN, MSLN) // _LEN: Length


    Подсказка была в логе компиляции
    ResourceTag larger then field (size mismatch tag 64bit, Field 32 bit)
    Правило простое, tag - то, что нужно, field - что нужно исправить
    tag=1 => CreateBitField
    tag=8 => CreateByteField
    tag=16 => CreateWordField
    tag=32 => CreateDWordField
    tag=64 => CreateQWordField

    Исправлять нужно, чтобы в реальной работе посылаемое значение не заехало на соседнее поле. Такой глюк никак не отловишь.

    Такой варнинг
    Not all control path return a value
    Ошибка логики, метод должен что-то возвращать, а получается, что в каких-то случаях ничего не вернет. И? Мак, конечно, не упадет, но и адекватности не ждите.
    А что же там написать? Return(Zero) или Return(Local0)?
    Чтобы успокоился компилятор, это сойдет, а вообще нужно смотреть логику.

    Аналогичный глюк
    Reserved method should not return a value
    Код такой
    Код:
                Method (_SRS, 1, Serialized)  // _SRS: Set Resource Settings
                {
                    Return (BUF2) /* \_SB_.PCI0.A_CC.BUF2 */
                }
    Открываем ПДФ, упомянутый выше, спецификация АЦПИ, находим поиском метод _SRS, и читаем, что он должен делать. Возврат значений там не предусмотрен.

    Поэтому переделываем следующим образом
    Код:
                Method (_SRS, 1, Serialized)  // _SRS: Set Resource Settings
                {
                   BUF2 = Arg0
                }
    Так вроде логичнее.

    Ну и всем известный варнинг
    Name (_T_0, Zero)
    Use of compiler reserved name _T_0


    Чтобы этот варнинг не мозолил глаза, мы делаем сквозное переименование _T_0 на T_0.
    !!! Нет смысла делать это переименование на уровне Кловера !!! Этих имен в исходном файле нет, их генерирует iasl при попытке компилировать конструкцию типа switch-case, не определенной стандартом.
    После нашей перекомпиляции наш ДСДТ будет содержать нормальные конструкции If-Then-Else, более понятные макОСу.
     
    Последнее редактирование: 30 сен 2017
    vivarus, RodionS, AslashA и 16 другим нравится это.
  3. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    10`208
    Смысловые ошибки

    Извините, но тут надо быть хоть немного программистом, чтобы их отлавливать. Подсказок ждать неоткуда.

    В исходном DSDT видим
    External (CFGD, IntObj)
    И эту переменную находим в SSDT CpuPm. И тут пора вспомнить, что мы эту таблицу дроппаем, вместе с этой переменной!
    Надо ее скопировать в DSDT. Как и другие, которые могут пригодиться.
    Код:
    +        Name (CFGD, 0x0066F6FF)
    +        Name (PDC0, 0x80000000)
    +        Name (PDC1, 0x80000000)
    +        Name (PDC2, 0x80000000)
    +        Name (PDC3, 0x80000000)
    +        Name (PDC4, 0x80000000)
    +        Name (PDC5, 0x80000000)
    +        Name (PDC6, 0x80000000)
    +        Name (PDC7, 0x80000000)
    +        Name (SDTL, Zero)
    
    Общая ошибка это ОЕМ методы _DSM.
    Это не ошибка производителя, это то, что он писал под виндоус, а у нас хакинтош.
    Пример
    Код:
    -                        Method (_DSM, 4, Serialized)  // _DSM: Device-Specific Method
                             {
    -                            Name (_T_0, Zero)  // _T_x: Emitted by ASL Compiler
                                 If (Arg0 == ToUUID ("a5fc708f-8775-4ba6-bd0c-ba90a1ec72f8"))
                                 {
                                     While (One)
                                     {
    
    Видите UUID? Это из виндусового реестра, в Маке такого нет., и ничего выполняться не будет.
    Это было бы пол беды, но если для виндов нормально иметь _DSM и для устройства, и для его мостика, то в Маке это вызывает краш.
    Убиваем все чужие _DSM! Простой вариант
    Код:
    -                        Method (_DSM, 4, Serialized)  // _DSM: Device-Specific Method
    +                        Method (ZDSM, 4, Serialized)
    
    Сам по себе метод сохранился, но никто к нему уже не обратится, и паники не будет.

    Вот такой любопытный кусок
    Код:
                 OperationRegion (DXHC, SystemMemory, 0xFED1F418, 0x04)
                    XHCD,   1
                 }
    
                If ((OSYS < 0x07D6) && (OSYS > 0x03E8))
                 {
                     XHCD = One
                     Notify (XHC, Zero) // Bus Check
                 }
    
    Приглядевшись к адресу, я понял, что это Function Disable Bit.
    Смысл операции в том, что для систем ниже, чем Windows Vista запретить USB3.
    По-моему этот кусок надо вообще вырезать.

    А вот это уже лажа писателей
    Код:
    If ((OSYS > 0x07D0) || (OSYS < 0x07D6))
    Диапазоны складываются и перекрывают вообще любое значение
    Скорее там должно быть
    Код:
    If ((OSYS > 0x07D0) && (OSYS < 0x07D6))
    Тогда диапазоны пересекаются.
    Но дальше нужно смотреть, а что там в If, и что в Else.
    У меня получилось, что правильнее в Then, поэтому исходную конструкцию
    Код:
                        If ((OSYS > 0x07D0) || (OSYS < 0x07D6))
                         {
                             Notify (PCI0, Arg1)
                         }
                         Else
                         {
                            Notify (GFX0, Arg1)
                         }
    
    Я сократил до вообще одного оператора
    Notify (PCI0, Arg1)
    Дело в том, что этот If проверяет, является ли система WindowsXP, и делает то, что в Then,
    для систем типа Windows7,8,10 делает Else.
    В чем отличие? В новых системах работает Optimus.
    В macOS нам нужна нотификация первого типа, на всю шину. И аналогично нужно смотреть в других местах DSDT.

    Успехов в создании минимально правильного ДСДТ!
     
    sonapax, vivarus, fnova и 23 другим нравится это.
  4. Esquire196

    Esquire196 iНовичок

    Симпатии:
    5
    Спасибо Вам, просто большое человеческое спасибо.
    Многие уже не помнят, как сами начинали. Когда и спросить не у кого. Либо пошлют, либо не ответят, либо дадут ссылку на applelife, которая в свою очередь даст результат "страница не найдена". Здесь ведь 98% таких.
    Если бы данная статья появилась месяц назад, в моей голове было бы гораздо меньше седых волос :)
    Спасибо Вам. И от меня и от лица всех, кто придет за этой информацией позже.
    Лишь бы она тоже не превратилась в лес пустых ссылок.
    Флудить и спорить не буду. Просто спасибо.
     
    osvod, sid-v и brumas нравится это.
  5. iStillS

    iStillS iЮзер

    Симпатии:
    68
    Отличное начало! примеры и постскриптум к нему - потрясающая вещь. Может вам спецам на вашем языке все понятно, а вот простым типо меня, некоторые слова новинка, - к примеру "дропнуть" - по-нашему это типа отключить, исключить, вырезать? Помню свои терзания по поводу перехода с хамелеона на colver, и slice дал напутствие и подсказал где книжку взять, - почитал, неделя экспериментов и конфиг был составлен. Познавательно почитать, надеюсь материал будет пополняться, обогащая наши умы вашими знаниями. - С уважением!
     
  6. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    10`208
    Да, я стараюсь давать не ссылку, а сам текст по этой ссылке.
    За исключение ссылки на сайт acpica.org, где скачивать свежие версии компилятора и документации.

    "Отбросить".
    В конфиге Кловера есть такое место
    Код:
                <key>DropTables</key>
                <array>
                    <dict>
                        <key>Signature</key>
                        <string>DMAR</string>
                    </dict>
                    <dict>
                        <key>Signature</key>
                        <string>SSDT</string>
                        <key>TableId</key>
                        <string>CpuPm</string>
                    </dict>
                    <dict>
                        <key>#Length</key>
                        <integer>720</integer>
                        <key>Signature</key>
                        <string>SSDT</string>
                        <key>TableId</key>
                        <string>Cpu0Ist</string>
                    </dict>
                </array>
    
    Подробный рассказ в книге про Свету Хаки.
     
  7. cvad

    cvad Модератор Команда форума Разработчик

    Симпатии:
    1`204
    Огромная благодарность от всех!
    Отличный мануал.

    @All просьба не захламлять топик, писать только по теме.
    Спасибо.
     
    StarCom, Jeka, Alvaro и 2 другим нравится это.
  8. Alvaro

    Alvaro iГуру

    Симпатии:
    798
    @slice, у меня вопрос, возможно немного наивный :)
    С одной стороны, external metods можно при декомпиляции указать в reference, используя опцию -fe.
    С другой стороны @Moorre, советует их удалять и вычищать следы в коде.
    Отсюда вопрос, как понять, когда использовать -fe refs.txt, а когда удалять external metods?
     
  9. Moorre

    Moorre iГуру

    Симпатии:
    4`728
    @Alvaro, все мусорные и "потерянные" явно следует вычистить, так как при возможном к ним обращении, всё равно они ведут вникуда.
    Ведь при корректной распаковке полного дампа не должно остаться нераспознанных методов или символов.
    При этом -fe явно введен как воркараунд для кривых кодов, написанных вьетнамскими проститутками "доллар сосать" индусами на коленке "доллар за строчку"...
     
    AirBorne, Slava77, Круглянин и 2 другим нравится это.
  10. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    10`208
    Вот смотри еще раз
    А дальше я описываю, что же делать, если они остались.
    external означает, что в данном файле (ДСДТ или ССДТ) есть ссылка на этот метод, но сам метод отсутствует, потому что он есть в другом ССДТ. Зачем же его удалять?! Он есть! Не надо их удалять!
    -fe ref.txt позволяет декомпилировать отдельно стоящий ДСДТ, без обращения к ССДТ. То есть вместо всех ССДТ создается один небольшой файлик с описанием внешних символов.
    Это просто другой метод, намного более геморройный, но возможный. Результат будет не лучше.
     
    egosys, Jeka, Moorre и ещё 1-му нравится это.
  11. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    10`208
    Небольшая детективная история по теме, может кого-то наведет на правильную мысль.
    Итак, задача.
    Ноутбук спит и просыпается, если не вставлен в розетку. Но тогда батарейка садится.
    Если же он в розетке, то сразу, через секунду как заснул, он просыпается. В чем дело? Именно в ДСДТ!
    Итак, ищем, что отличает ACPI состояние в розетке и нет. Устройство
    Код:
            Device (AC)
            {
                Name (_HID, "ACPI0003" /* Power Source Device */)  // _HID: Hardware ID
    
    Декомпилятор нам услужливо подсказал, что это и есть блок питания.
    Метод _PSR определяет, является ли это устройство источником питания, либо отдыхает.
    Код:
                Method (_PSR, 0, NotSerialized)  // _PSR: Power Source
                {
                    Local0 = ECG5 ()
                    Local0 &= One
                    If (Local0 != PWRS)
                    {
                        PWRS = Local0
                        PNOT ()
                    }
    
                    Return (Local0)
                }
    
    Прочитать об этом можно в книге ACPIspec.pdf, любого года издания
    То есть, в моем случае какой-то хардверный метод ECG5() выдает некое число, в котором бит 0 означает воткнутость в розетку.
    И сохраняет в переменной PWRS, если там значение отличается.
    Теперь по всему коду смотрим, где упоминается PWRS, и находим в методе _PTS (Prepare To Sleep), в том самом, который отвечает за засыпание.
    Код:
        Method (_PTS, 1, NotSerialized)  // _PTS: Prepare To Sleep
        {
            P80D = Zero
            P8XH (Zero, Arg0)
            PTS (Arg0)
            If (AOAC & One) {}
            If (Arg0 == 0x03)
            {
                If (PWRS == Zero)
                {
                    \_SB.PCI0.XHC.PMEB = Zero
                    \_SB.PCI0.EHC1.PMEB = Zero
                    \_SB.PCI0.EHC2.PMEB = Zero
                    If (\_SB.PCI0.XHC.PMST == One)
                    {
                        \_SB.PCI0.XHC.PMST = One
                    }
    
                    If (\_SB.PCI0.EHC1.PMST == One)
                    {
                        \_SB.PCI0.EHC1.PMST = One
                    }
    
                    If (\_SB.PCI0.EHC2.PMST == One)
                    {
                        \_SB.PCI0.EHC2.PMST = One
                    }
                }
    
    Интересненько здесь!
    Условие: если аппарат не воткнут в розетку, то что-то сделать в ЮСБ2 и ЮСБ3.
    А если воткнут, то ничего не надо.
    В логе неожиданного пробуждения мы и видим XHC, EHC2.
    То есть, создатели этого ДСДТ считают, что ноутбук может быть воткнут в розетку только во время работы. Иначе вытаскивай.
    Убрав это условие If (PWRS == Zero) я получил решение своей задачи. У меня теперь ноутбук спит и просыпается, и адаптер питания его не тревожит.
     
    Alvaro, Moorre, Jeka и 3 другим нравится это.
  12. ACIDSky

    ACIDSky iГуру

    Симпатии:
    1`347
    Может разрабы руководствовались, что если ноу выключен, то ДСДТ ему как то и не нужно )) т.е. все равно он не узнает включен ли он в розетку или нет. Ну кроме контроллера батареи. А вот Мак ОС обиделась на такое.
     
    Alvaro нравится это.
  13. Moorre

    Moorre iГуру

    Симпатии:
    4`728
    @slice, отлично!
    А как насчет отказаться от зануления _PRW
    Код:
    Method (_PRW, 0, NotSerialized) { Return (GPRW (0x0D, Zero)) }
    Method (_PRW, 0, NotSerialized) { Return (GPRW (0x0D, 0x04)) }
    при условии, что мы ковыряем PMEB, PMST
    Код:
                OperationRegion (PWCS, PCI_Config, 0x74, 0x04)
    //...
                OperationRegion (PWCS, PCI_Config, 0x54, 0x04)
                Field (PWCS, DWordAcc, NoLock, Preserve)
                {
                    Offset (0x01),
                    PMEB,   1,
                        ,   6,
                    PMST,   1
                }
    в _PTS
    Код:
        Method (_PTS, 1, NotSerialized)  // _PTS: Prepare To Sleep
        {
           If ((Arg0 == 0x03))
            {
                    \_SB.PCI0.XHC.PMEB = Zero
                    \_SB.PCI0.EHC1.PMEB = Zero
                    \_SB.PCI0.EHC2.PMEB = Zero
                    If ((\_SB.PCI0.XHC.PMST == One))
                    {
                        \_SB.PCI0.XHC.PMST = One
                    }
    
                    If ((\_SB.PCI0.EHC1.PMST == One))
                    {
                        \_SB.PCI0.EHC1.PMST = One
                    }
    
                    If ((\_SB.PCI0.EHC2.PMST == One))
                    {
                        \_SB.PCI0.EHC2.PMST = One
                    }
                }
    будет просыпаться сразу после засыпания?
     
  14. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    10`208
    Вот знаешь, не подтверждаю, что зануление имеет эффект. Я пробовал занулять, и это не помогало.
    А сейчас отлично спит. Наверно эффект должен быть, но то, что я описал, оно занулением не решалось.
    Да, в ЮСБ нули стоят. А к примеру в ВайФай нет
    Код:
                   Device (ARPT)
                    {
                        Name (_ADR, Zero)  // _ADR: Address
                        Name (_PRW, Package (0x02)  // _PRW: Power Resources for Wake
                        {
                            0x09,
                            0x04
                        })
                        Name (_SUN, 0x03)  // _SUN: Slot User Number
    
                    }
    
    И его нет в списке причины пробуждения.
     
  15. Moorre

    Moorre iГуру

    Симпатии:
    4`728
    @slice, по возможности рекомендую проверить. Эти регистры как раз относятся к пауэр менеджменту.
    На моей машине _PRW не занулены и ничего самостоятельно не просыпается. Правда, чипсет старше.
    Снимок экрана 2017-10-09 в 19.42.10. Снимок экрана 2017-10-09 в 19.43.07.
    Код:
                Device (EHC1)
                {
                    Name (_ADR, 0x001D0007)  // _ADR: Address
                    Name (_PRW, Package (0x02)  // _PRW: Power Resources for Wake
                    {
                        0x0D,
                        0x03
                    })
                    Method (_L0D, 0, NotSerialized)  // _Lxx: Level-Triggered GPE
                    {
                        Notify (EHC1, 0x02) // Device Wake
                    }
    
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        If (!Arg2)
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                             // .
                            })
                        }
    
                        Return (Package (0x09)
                        {
                            "AAPL,current-available",
                            0x0834,
                            "AAPL,current-extra",
                            0x0A8C,
                            "AAPL,current-extra-in-sleep",
                            0x0A8C,
                            "AAPL,max-port-current-in-sleep",
                            0x0834,
                            Buffer (One)
                            {
                                 0x00                                             // .
                            }
                        })
                    }
    
                    Device (RHUB)
                    {
                        Name (_ADR, Zero)  // _ADR: Address
                        //...
                    }
                }
    
                Device (EHC2)
                {
                    Name (_ADR, 0x001A0007)  // _ADR: Address
                    Name (_PRW, Package (0x02)  // _PRW: Power Resources for Wake
                    {
                        0x0D,
                        0x03
                    })
                    Method (_L0D, 0, NotSerialized)  // _Lxx: Level-Triggered GPE
                    {
                        Notify (EHC2, 0x02) // Device Wake
                    }
    
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        If (!Arg2)
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                             // .
                            })
                        }
    
                        Return (Package (0x09)
                        {
                            "AAPL,current-available",
                            0x0834,
                            "AAPL,current-extra",
                            0x0A8C,
                            "AAPL,current-extra-in-sleep",
                            0x0A8C,
                            "AAPL,max-port-current-in-sleep",
                            0x0834,
                            Buffer (One)
                            {
                                 0x00                                             // .
                            }
                        })
                    }
    
                    Device (RHUB)
                    {
                        Name (_ADR, Zero)  // _ADR: Address
                        //...
                    }
                }
     
    Constanta, Alvaro и nms42 нравится это.
  16. Pawel69

    Pawel69 Заблокированные

    Симпатии:
    114
    застрял вот на этом см скрин как можно исправить? погуглил ничего не нашол
     

    Вложения:

  17. ACIDSky

    ACIDSky iГуру

    Симпатии:
    1`347
    Чего сложного? требует либо

    Код:
    Name (_ADR, ЗНАЧЕНИЕ)
    либо

    Код:
     Name (_HID, EisaId ("ЗНАЧЕНИЕ")
    Но проще удалить этот девайс. Ибо он для Мак ОС пустой звук.
     
  18. Pawel69

    Pawel69 Заблокированные

    Симпатии:
    114
  19. ACIDSky

    ACIDSky iГуру

    Симпатии:
    1`347
    Да удаляй смело, это для Винды надо.
    В ней и гляди адреса. Мак ОС не обслуживает такие девайсы.
    ХЗ что за ним скрывается, у тебя же не даташита на плату? ))
     
  20. Alvaro

    Alvaro iГуру

    Симпатии:
    798
    Ну вообщето на I2C бывают тачпады и т.п.
    @Pawel69, а что в IOReg на нем?
     
    Последнее редактирование: 11 окт 2017

Поделиться этой страницей