setpci

vasek
1. lspci -s 0000:02.0 -x ….... (или просто lspci -s 00:02.0 -x)
Посмотрел man. А по -xxx оно сильно много выплюнет?
sirocco
Посмотрел man. А по -xxx оно сильно много выплюнет?
Проверь - # lspci -s 00:02.0 -nnvvxxx - я иногда смотрю так (конечно, для нужного устройства)
PS .... у меня 256 байт..... у тебя, похоже будет больше ...... а может и нет ........ даже интересно - напиши ... точно не помню, давно не заглядывал в спецификацию, но похоже максимум 256 байт ......... а вот насчет раширения уже не помню ...
Ошибки не исчезают с опытом - они просто умнеют
vasek
максимум 256 байт
Попробовал, да, и у меня 256. Никаких изменений при изменении яркости.

# lspci -s 00:02.0 -vvnnxxx
00:02.0 VGA compatible controller [0300]: Intel Corporation Haswell-ULT Integrated Graphics Controller [8086:0a16] (rev 09) (prog-if 00 [VGA controller])
	Subsystem: Lenovo Device [17aa:3978]
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 50
	Region 0: Memory at b2000000 (64-bit, non-prefetchable) [size=4M]
	Region 2: Memory at a0000000 (64-bit, prefetchable) [size=256M]
	Region 4: I/O ports at 4000 [size=64]
	Expansion ROM at <unassigned> [disabled]
	Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
		Address: fee00018  Data: 0000
	Capabilities: [d0] Power Management version 2
		Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [a4] PCI Advanced Features
		AFCap: TP+ FLR+
		AFCtrl: FLR-
		AFStatus: TP-
	Kernel driver in use: i915
	Kernel modules: i915
00: 86 80 16 0a 07 04 90 00 09 00 00 03 00 00 00 00
10: 04 00 00 b2 00 00 00 00 0c 00 00 a0 00 00 00 00
20: 01 40 00 00 00 00 00 00 00 00 00 00 aa 17 78 39
30: 00 00 00 00 90 00 00 00 00 00 00 00 00 01 00 00
40: 09 00 0c 01 91 61 00 72 d0 00 5b 14 00 00 00 00
50: 09 02 00 00 31 00 00 00 00 00 00 00 01 00 a0 9d
60: 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 05 d0 01 00 18 00 e0 fe 00 00 00 00 00 00 00 00
a0: 00 00 00 00 13 00 06 03 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 01 a4 22 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 09 00 18 10 fb 9c

Вообщем был не прав в той части, что не правильно определял регистр F4 (сбили с толку абсолютные адреса в адесном пространстве) ….... вообщем грубо ошибся …. все намного проще, просто перемудрил ….. а нужно было просто считывать прямо в лоб, как эти байты выводятся ….... и считывать нужно было не 64 байта, а все 256 байт, которые отводятся под каждое PCI устройство (а значит значение регистра F4 это 244 байт из 256 байт)
И по сути — насколько я понял, можно не смотреть изменяется ли значение этого регистра при изменении яркости …...... а просто смотреть вывод setpci --dumpregs и наличие/описание там регистра, ответственного за эту яркость (если верить инету - это F4) — т.е. если это присутствует, значит регулировка яркости с использованием setpci возможна …. У меня упоминание/описание этого регистра отсутствует
Ошибки не исчезают с опытом - они просто умнеют
vasek
а ничего что intelовские модули счас с drm, не она ли будет блокировать подобные манипуляции??
Ошибки в тексте-неповторимый стиль автора©
indeviral
а ничего что intelовские модули счас с drm, не она ли будет блокировать подобные манипуляции??
А вот что блокирует ....... не разбирался ......... но думаю, если в списке регистров в выводе setpci --dumpregs про это будет описано, значит регулироваться будет ...
Но это можно точно узнать, если кто то напишет, что у него регулируется и в списке регистров про это написано, а желающих нет ....
Ошибки не исчезают с опытом - они просто умнеют
vasek, раз уж тебя заинтересовало, то могу на пальцах показать.
Общий порядок действий (проверено на ноуте Samsung N150):
1. Ищем datasheet (ARK) на чипсет (Чипсет: Intel NM10) там ни слова про VGA, вспоминаем... да там же Atom N450 с интегрированным видео... (находим Intel® AtomTM Processor N400 & N500 Series Datasheet– Volume 2)
2. Находим в нем раздел (8.9.35 LBB - Legacy Backlight Brightness) (к вопросу откуда берется F4.B и собственно адрес устройства 00:00:02.0).
3. Пишем команду setpci, с целью установки значения регистра F4, где B означает byte, в устройстве 00:00:02.0.
4. Радуемся меняющейся подсветке =).

Собственно, вот и вся любовь. А тупо считывать что-то и сравнивать - идея не совсем корректная.

ЗЫ
Способ с setpci в том случае, когда нет возможности через ACPI управлять яркостью.
binaryshadow
А тупо считывать что-то и сравнивать - идея не совсем корректная.
binaryshadow
к вопросу откуда берется F4.B и собственно адрес устройства 00:00:02.0
Откуда берется и как считается все понятно .... но я не уверен, что если это прописано в Datasheet , то это будет прописано в конфигурационном пространстве устройства PCI.
На каждое PCI устройство имеется конфигурационное пространство в 256 байт ....... и вся информация об устройстве находится там .... первые 64 байта стандартизованы, остальные зависят от устройства и разработчика …. и всякие там утилиты, например, lspci, setpci вытаскивают эту информацию оттуда, в удобном нам виде.
Грубо говоря все эти 256 байт представляют собой PCI регистры (формат little-endian) — одни регистры обязательны, другие необязательны ..... содержание необязательных регистров зависит от реальных возможностей и, возможно прихоти разработчика.
Пример некоторых обязательных регистров (видекарта и Wireless Network Adapter)
- VENDOR ID
# setpci -s 0000:00:02.0 00.W
8086
# sudo setpci -s 0000:03:00.0 00.W
168c
- DEVICE_ID
# setpci -s 0000:00:02.0 02.W
0116
# setpci -s 0000:03:00.0 02.W
002b
- REVISION
# setpci -s 0000:00:02.0 08.B
09
# setpci -s 0000:03:00.0 08.B
01
Так вот регистр F4 (его порядковый номер 244), как давно пишут используется для хранения/записи значения подсветки и относится к необязательным.
А не понятно мне то, почему на многих новых видеокартах этот регистр не работает (его значение равно 0) и подумал возможно используется другой регистр … а потому и хотел проверить. А наиболее подходящий способ проверки - проверить изменение регистров...... так как просить кого то что то прописывать в эти регистры это не есть хорошо ....... нюансы могут быть всякие и, тем более, есть предупреждения, что это чревато плохим ......
Но потом решил, если у кого этот регистр работает, то он должен быть в списке доступных регистров, т. е. присутствовать в выводе setpci --dumpregs
Вариант с проверкой Datasheet, конечно, интересен …. но я на 100% в этом не уверен ….. если прописано, это еще не значит, что это попадет в конфигурационное прострнаство видеокарты ( в 256 байт).
Просьба, посмотри вывод setpci --dumpregs — присутствует ли у тебя регистр F4
Ошибки не исчезают с опытом - они просто умнеют
vasek
Просьба, посмотри вывод setpci --dumpregs — присутствует ли у тебя регистр F4
Нет не присутствует и не должен, так как это не регистр шины PCI и не общие регистры системы, по этому и не содержатся в файлике "/usr/include/linux/pci.h" (all known PCI registers).

Вариант с datasheet самый верный, если такого регистра разработчики оборудования не предусмотрели, значит они реализовали интерфейс ACPI для управления подсветкой. Что является более стандартным подходом. А все пляски с бубнами именно от лени разработчиков и выбранных подходов к реализации данного механизма.
ЗЫ
Обязательными регистрами, являются регистры относящиеся к конфигурационному пространству устройства PCI, для обеспечения понимания системой устройств PCI.
 
Зарегистрироваться или войдите чтобы оставить сообщение.