mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-24 21:34:08 +03:00
f125f8b1ba
Current udev rules configures group owner of firewire character device to video group, corresponding to nodes in IEEE 1394 in below cases: 1.the node with any unit for any minor version of IIDC version 1 specification defined by 1394 Trading Association 2.the node with any unit for specification defined by Point Grey Research 3.the node with any unit for AV/C device v1.0 defined by 1394 Trading Association 4.the node with any unit for vendor-unique protocol defined by 1394 Trading Association Nevertheless, case 3 and 4 can cover the node with any unit for audio function as well. In the cases, it's convenient to assign audio group. Additionally, some nodes are known to have layout different from the specification defined by 1394 Trading Association. In the case, it's required to add rules specific to them. Furthermore, some nodes have no fields for vendor name and model name in configuration ROM. In the case, it's required to add entries to hardware database for users convenience. For the above reasons, this commit adds rules to use information in hardware database for known units in IEEE 1394. One database entry corresponds to one unit. Two types of key are used to match the unit; customized key from node context, kernel modalias of unit context. The entry has the type of function, at least. Supplementally, it has vendor and model names. For your information, below statements with Python pyparsing module are expected to parse all of the custom key and module alias in the list: ``` subsystem_prefix = pp.Literal('ieee1394:').suppress() hex_to_int = lambda a: int(a[0], 16) node_prefix = pp.Literal('node:').suppress() prefixed_lower_hex = pp.Combine(pp.Literal('0x') + pp.Word(pp.srange('[a-z0-9]'), exact=6)).setParseAction(hex_to_int) ven_in_node = pp.dictOf(pp.Literal('ven'), prefixed_lower_hex) mo_in_node = pp.dictOf(pp.Literal('mo'), prefixed_lower_hex) unit_in_node = pp.Group(prefixed_lower_hex + pp.Literal(':').suppress() + prefixed_lower_hex) units_in_node = pp.Group(pp.Literal('units') + pp.ZeroOrMore(pp.Literal('*')).suppress() + unit_in_node + pp.ZeroOrMore(pp.Literal('*')).suppress()) node_parser = subsystem_prefix + node_prefix + ven_in_node + pp.Optional(mo_in_node) + units_in_node higher_hex = pp.Word(pp.srange('[A-Z0-9]'), exact=8).setParseAction(hex_to_int) ven_in_unit = pp.dictOf(pp.Literal('ven'), higher_hex) mo_literal_in_unit = pp.dictOf(pp.Literal('mo'), higher_hex) mo_in_unit = pp.dictOf(pp.Literal('mo'), higher_hex ^ pp.Literal('*')) sp_in_unit = pp.dictOf(pp.Literal('sp'), higher_hex) ver_in_unit = pp.dictOf(pp.Literal('ver'), higher_hex) unit_parser = subsystem_prefix + ven_in_unit + mo_in_unit + sp_in_unit + ver_in_unit key_parser = node_parser ^ unit_parser ``` Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
77 lines
2.4 KiB
Meson
77 lines
2.4 KiB
Meson
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
|
|
# Those files right now are not supported by the grammar. Also,
|
|
# they are very long but quite repetitive and the parser is not very fast.
|
|
# So we don't "test" them.
|
|
hwdb_files_notest = files('''
|
|
README
|
|
20-dmi-id.hwdb
|
|
20-pci-vendor-model.hwdb
|
|
20-pci-classes.hwdb
|
|
20-usb-vendor-model.hwdb
|
|
20-usb-classes.hwdb
|
|
20-sdio-vendor-model.hwdb
|
|
20-sdio-classes.hwdb
|
|
20-bluetooth-vendor-product.hwdb
|
|
20-acpi-vendor.hwdb
|
|
20-OUI.hwdb
|
|
20-net-ifname.hwdb
|
|
20-vmbus-class.hwdb
|
|
'''.split())
|
|
|
|
hwdb_files_test = files('''
|
|
60-autosuspend.hwdb
|
|
60-autosuspend-fingerprint-reader.hwdb
|
|
60-evdev.hwdb
|
|
60-input-id.hwdb
|
|
60-keyboard.hwdb
|
|
60-sensor.hwdb
|
|
70-joystick.hwdb
|
|
70-mouse.hwdb
|
|
70-pointingstick.hwdb
|
|
70-touchpad.hwdb
|
|
80-ieee1394-unit-function.hwdb
|
|
'''.split())
|
|
|
|
if conf.get('ENABLE_HWDB') == 1
|
|
auto_suspend_rules = custom_target(
|
|
'60-autosuspend-chromiumos.hwdb',
|
|
output : '60-autosuspend-chromiumos.hwdb',
|
|
command : make_autosuspend_rules_py,
|
|
capture : true,
|
|
install : true,
|
|
install_dir: udevhwdbdir)
|
|
|
|
install_data(hwdb_files_notest,
|
|
hwdb_files_test,
|
|
install_dir : udevhwdbdir)
|
|
|
|
if install_sysconfdir
|
|
meson.add_install_script('sh', '-c',
|
|
mkdir_p.format(join_paths(sysconfdir, 'udev/hwdb.d')))
|
|
|
|
meson.add_install_script('sh', '-c',
|
|
'test -n "$DESTDIR" || @0@/systemd-hwdb update'
|
|
.format(rootbindir))
|
|
endif
|
|
|
|
if want_tests != 'false'
|
|
parse_hwdb_py = find_program('parse_hwdb.py')
|
|
test('parse-hwdb',
|
|
parse_hwdb_py,
|
|
args : [hwdb_files_test,
|
|
auto_suspend_rules],
|
|
timeout : 90)
|
|
endif
|
|
endif
|
|
|
|
############################################################
|
|
|
|
run_target(
|
|
'update-hwdb',
|
|
command : [update_hwdb_sh, meson.current_source_dir()])
|
|
|
|
run_target(
|
|
'update-hwdb-autosuspend',
|
|
command : [update_hwdb_autosuspend_sh, project_source_root])
|