Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Jul 18, 2019 8:36 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 40 posts ]  Go to page Previous 1 2 3 Next
Author Message
PostPosted: Fri Sep 30, 2011 10:22 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1331
CleverMouse wrote:
Ключевое слово - "некоторых". Я так понимаю, что подмена с выключения на рестарт была вызвана именно желанием представить свою позицию в более выгодном свете, чтобы избавиться от упоминания, что это работает только на одиночных чипсетах.
Ключевое слово "подмена" некорректно. Я привел рестарт в качестве наглядного примера прямого PM.
В остальном Вы правы - у меня пока нет гарантии, что недокументированный (вычисленный полуэмпирическим способом) адрес в dx будет правильно работать на всех Феномах и Fusion.

CleverMouse wrote:
Когда выясняется, что некоторый код якобы где-то не работает, ВНЕЗАПНО именно в сообщении, критикующем этот код и предлагающем свой подход... скажем так, это вызывает некоторые сомнения в истинности утверждения.
1) Еще раз: "универсальный" код вообще на этих чипсетах не работает. Поправьте меня у кого RS880/SB800 или Гудзон. А приведенный прямой код - хотя бы на трех досках проверен.

2) В истинности какого из моих утверждений Вы сомневаетесь?


Top
   
PostPosted: Tue Oct 04, 2011 12:36 pm 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
Serge wrote:
art_zh
А если надо кеши сбросить и винты запарковать ? У меня материнка отключается когда винт уже явно останавливается.
Ну зачем же ты так необъективно?
Ведь если мы говорим об ОС, а это вроде так на этом форуме, то завершение дисковых операций предварительно и до выключения, равно, как и завершение процессов (имеется ввиду корректно + важных + системных) на совести разрабов этой ОСи!
Никакой ACPI или еще что то на блюдечке и готовое не решает эту и другие подобные идеологические, концептуальные вещи, я бы сказал культурности и корректности работы ОСи.
Второе. Парковать диски, как дословное понимание сути механических процессов в винте, решены производителями давно, уже лет 10 наверное как. Это понятие для обывателя можно отнести в категорию архаизмов.


Top
   
PostPosted: Tue Oct 04, 2011 12:37 pm 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
CleverMouse wrote:
Последние две фразы art_zh инициировали бурную флудильню
CleverMouse wrote:
Ключевое слово - "некоторых". Я так понимаю, что подмена с выключения на рестарт была вызвана именно желанием представить свою позицию в более выгодном свете, чтобы избавиться от упоминания, что это работает только на одиночных чипсетах.

Оскорбительные выражения убраны! Mario
Я могу понять любую ситуацию в принципе, но надо же работать над своими недостатками, а не выпячивать них наружу, имено это среднестатистическая норма в основной массе людей.
Ну хорошо, допустим родила (выделила) ты эту тему именно так, озаглавила, причем это, как думаешь именно ты, ну так веди ее, тогда пожалуйста, раз она всплывает не раз и два. Освети перечень вопросов тобою видимых, иерархию, приоритет решений, или возможные направления решения... Неконструктивно ведь получается, нехорошо.
То, что выкинула в сторону и все? Типа вот они тут такие, на них тут и смотрите, какие они несостоятельные. Так что ли?


Top
   
PostPosted: Tue Oct 04, 2011 12:45 pm 
VaStaNi
Просьба не употреблять нецензурных выражений в оскорбительном контексте. Это не приказ - это просьба!


Top
   
PostPosted: Tue Oct 04, 2011 12:54 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1331
VaStaNi
Не надо так.
Давайте относиться друг к другу спокойно и уважительно, иначе к чему мы тут придем?

Со своей строны CleverMouse совершенно права: если цель - универсальность, то средство одно: ACPI.

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


Top
   
PostPosted: Tue Oct 04, 2011 12:57 pm 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
Конкретно по сабжу, применительно к охрененному количеству машин с INTELовским чипсетом!
Благо разумники из INTEL в принципе уважают слово стандарт,
то применительно к их чипсетам (если уж кому то очень надо без всяких уродств аля RM DOS APM... INT 0x15... ) прекрасно работает следующий код:
Code:
        xor     cx, cx
        dec     cx         ; = 0xFFFF
        mov     dx, 0x404
        in      ax, dx
        cmp     ax, cx     ;примитивно понюхаем есть ли сей порт вообще в наличии?
         jne    @a         ;если AX <> 0xFFFF - значит существует, будем выключать
        mov     dx, 0x4004
        in      ax, dx
        cmp     ax, cx     ;тогда, может этот есть (т.е. 0x4004)?
         je     @q
@a:
        mov     ah, 111100b
        out     dx, ax     ; собственно тут рубильник выключается фактически, не успеете моргнуть! Завершаемся заранее!
@q:
как в PCI, например узнать, что именно INTEL что такое ID=8086 писать не буду, сами знаете...
Это самый "дубовый" вариант, его можно сделать умнее сток на... ну 20 пусть. Но это не килобайты и по статистике моего тестинга (а машин на лет 8 последних я попробовал немало) пока этих двух портов хватало ДЛЯ ВСЕХ INTELовских чипсетов, что попадались.
Желательно сообщить Ваши результаты и при отрицательном выложить данные вашего южника.
Успехов!


Top
   
PostPosted: Tue Oct 04, 2011 2:22 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
VaStaNi
Мобильным винтам парковка очень даже нужна. Они конечно сами паркуются, но немного времени для этого им необходимо. Другие устройства тоже неплохо отключить штатно. Хорошо когда есть драйверы, которые умеют переводить все устройства из D0 в D3. А если их нет помогает ACPI. Потому что самый неправильный способ выключить компьютер это выдернуть штепсель.


Top
   
PostPosted: Tue Oct 04, 2011 2:32 pm 
С точки зрения механики - выдирание штепселя ничего не испортит - да, электроника не любит включения и выключения, но головки давно уже сами паркуются. Они во время работы удерживаются сервоприводами, а как только питание пропадает, то за счет механики головка паркуется в свой паз. Вот только имеется существенный минус в виде недописанных (и соответственно пропавших) данных.


Top
   
PostPosted: Tue Oct 04, 2011 2:41 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Кроме недописанных данных это приводило (и не раз) у меня к слетанию ext4 на жестком. Еще я боюсь, что есть связь между этим казусом ипоявлением bad-блоков на устройстве.


Top
   
PostPosted: Tue Oct 04, 2011 2:44 pm 
Так Ext4 содержит кучу служебных данных в оперативке и синхронизация у нее не так часто происходит, так что ничего удивительного.
А бэд-блоки появляются чаще из-за того что во время работы жесткий диск подвергался либо вибрации, либо его вообще перемещали, если это переносной, ну, и в вертикальном положении он не жилец еще.


Top
   
PostPosted: Wed Oct 05, 2011 2:13 am 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1331
Serge
при необходимости D-состояния всех контроллеров моста переключаются в тех же PM-регистрах. Это конечно сложнее, чем просто "вырубить рубильник"; надо делать минимальный драйвер PM и унифицировать его для всех целевых мостов. Но факт: альтернативный "не-ACPI" вектор развития все равно имеется.

Хотя лучше конечно заранее слить кэш на диск из его родного драйвера и не заморачиваться с PM. Это - более прямая "вторая" альтернатива.


Top
   
PostPosted: Wed Oct 05, 2011 9:46 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
art_zh
Разумеется есть альтернатива, но для этого надо иметь родные драйверы. А таких у нас несколько штук в разной стадии недоделанности. И три драйверописателя на всё.


Top
   
PostPosted: Thu Oct 06, 2011 11:24 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1619
art_zh wrote:
1) Еще раз: "универсальный" код вообще на этих чипсетах не работает. Поправьте меня у кого RS880/SB800 или Гудзон. А приведенный прямой код - хотя бы на трех досках проверен.

2) В истинности какого из моих утверждений Вы сомневаетесь?

В истинности утверждения 1). На проблемы с выключением жаловался только yogev_ezra, но там проблемы с выключением даже из-под Linux и понятна причина - ACPI нет, а APM не работает из-за того, что в Колибри кривой возврат в реальный режим. Если бы сообщение о нерабочести прозвучало заблаговременно в какой-нибудь теме, кто-нибудь из специалистов - возможно, я - скорее всего, заинтересовался бы - например, попросил/а бы для начала подробнее описать симптомы и приложить дамп таблиц ACPI. А так, когда единственный репортер явно необъективен и никто больше не жалуется, я оставляю за собой право просто не верить в репорт.

Универсальность простого кода выключения через порты для конкретного чипсета - это заблуждение. Есть, к примеру, такой чипсет i440FX, он примечателен тем, что его очень любят эмулировать эмуляторы - например, Bochs, qemu, VirtualBox дружно работают именно с ним. Но код выключения использует разные константы. В Bochs/qemu итоговый код выключения, в предположении, что BIOS не изменила базовый адрес, такой:
Code:
mov dx,0B004h
mov ax,2000h
out dx,ax

В VirtualBox, в том же предположении, - такой:
Code:
mov dx,4004h
mov ax,3400h
out dx,ax

Каким образом различать эти случаи без таблиц ACPI? Порт достать ещё можно, он хранится в PCI-устройстве 8086:7113 в конфигурационном пространстве по смещению 40h - между прочим, это многих интеловских чипсетов касается, так что BIOS спокойно может назначить что-нибудь своё - а вот значение есть только внутри DSDT. Проверка PCI-идентификаторов, скажем, северного моста не подойдёт, они одинаковы.

Между прочим, и код из viewtopic.php?p=38002#p38002, и код из viewtopic.php?p=38269#p38269 - это и есть код ACPI, прямо по спецификации: взять регистр PM1a_CNT_BLK - практически всегда регистры ACPI объединяются в один блок, поскольку этот регистр в FADT перечислен третьим, то и в блоке он идёт третьим, то есть по смещению +4 - и записать туда значение, в котором установлен 13-й бит - он называется SLP_EN - а биты 10-12, называемые SLP_TYPx, кодируют тип сна. Конкретное кодирование может быть совершенно любым - к примеру, в Bochs/qemu 0 означает выключение, а VirtualBox считает, что раз выключение в ACPI называется S5, то и кодировать его можно числом 5.

В частности, поэтому очень странно, что "не работает" универсальный код - если там нет чисто кодерской ошибки, то он на данной машине просто-напросто сводится ровно к неуниверсальному.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Mon Oct 17, 2011 12:41 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1331
diamond
Если бы твоя ACPI-выключалка работала на Гудзонах, я бы вообще туда не лез. Однако пришлось,- именно потому что
CleverMouse wrote:
- это и есть код ACPI, прямо по спецификации: взять регистр PM1a_CNT_BLK - практически всегда регистры ACPI объединяются в один блок, поскольку этот регистр в FADT перечислен третьим, то и в блоке он идёт третьим, то есть по смещению +4

Начиная с SB800 это "практически" не работает. АМД решила изобрести новый велосипед и теперь маппит все ресурсы южного моста на MMIO с дефолтным базовым адресом FED80000h, причем PMIO-регистры в этом блоке маппятся со смещением +300h. IO-доступ к этим ресурсам оставлен, но недодокументирован: оговаривается только мл.байт адреса (04), который должен лежать в PM_Reg по смещению 62h.
Старший байт (08) лежит сразу за ним, но это нигде не указано. Именно поэтому я и не даю никаких гарантий, выключая через порт номер 0х0804. Универсальная АМД-выключалка будет работать через MMIO.


Top
   
PostPosted: Mon Oct 17, 2011 1:26 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
art_zh
А что там в таблицах ACPI написано ?


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 40 posts ]  Go to page Previous 1 2 3 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited