vfs: pass ppos=NULL to .read()/.write() of FMODE_STREAM files
[sfrench/cifs-2.6.git] / Documentation / firmware-guide / acpi / DSD-properties-rules.rst
1 .. SPDX-License-Identifier: GPL-2.0
2
3 ==================================
4 _DSD Device Properties Usage Rules
5 ==================================
6
7 Properties, Property Sets and Property Subsets
8 ==============================================
9
10 The _DSD (Device Specific Data) configuration object, introduced in ACPI 5.1,
11 allows any type of device configuration data to be provided via the ACPI
12 namespace.  In principle, the format of the data may be arbitrary, but it has to
13 be identified by a UUID which must be recognized by the driver processing the
14 _DSD output.  However, there are generic UUIDs defined for _DSD recognized by
15 the ACPI subsystem in the Linux kernel which automatically processes the data
16 packages associated with them and makes those data available to device drivers
17 as "device properties".
18
19 A device property is a data item consisting of a string key and a value (of a
20 specific type) associated with it.
21
22 In the ACPI _DSD context it is an element of the sub-package following the
23 generic Device Properties UUID in the _DSD return package as specified in the
24 Device Properties UUID definition document [1]_.
25
26 It also may be regarded as the definition of a key and the associated data type
27 that can be returned by _DSD in the Device Properties UUID sub-package for a
28 given device.
29
30 A property set is a collection of properties applicable to a hardware entity
31 like a device.  In the ACPI _DSD context it is the set of all properties that
32 can be returned in the Device Properties UUID sub-package for the device in
33 question.
34
35 Property subsets are nested collections of properties.  Each of them is
36 associated with an additional key (name) allowing the subset to be referred
37 to as a whole (and to be treated as a separate entity).  The canonical
38 representation of property subsets is via the mechanism specified in the
39 Hierarchical Properties Extension UUID definition document [2]_.
40
41 Property sets may be hierarchical.  That is, a property set may contain
42 multiple property subsets that each may contain property subsets of its
43 own and so on.
44
45 General Validity Rule for Property Sets
46 =======================================
47
48 Valid property sets must follow the guidance given by the Device Properties UUID
49 definition document [1].
50
51 _DSD properties are intended to be used in addition to, and not instead of, the
52 existing mechanisms defined by the ACPI specification.  Therefore, as a rule,
53 they should only be used if the ACPI specification does not make direct
54 provisions for handling the underlying use case.  It generally is invalid to
55 return property sets which do not follow that rule from _DSD in data packages
56 associated with the Device Properties UUID.
57
58 Additional Considerations
59 -------------------------
60
61 There are cases in which, even if the general rule given above is followed in
62 principle, the property set may still not be regarded as a valid one.
63
64 For example, that applies to device properties which may cause kernel code
65 (either a device driver or a library/subsystem) to access hardware in a way
66 possibly leading to a conflict with AML methods in the ACPI namespace.  In
67 particular, that may happen if the kernel code uses device properties to
68 manipulate hardware normally controlled by ACPI methods related to power
69 management, like _PSx and _DSW (for device objects) or _ON and _OFF (for power
70 resource objects), or by ACPI device disabling/enabling methods, like _DIS and
71 _SRS.
72
73 In all cases in which kernel code may do something that will confuse AML as a
74 result of using device properties, the device properties in question are not
75 suitable for the ACPI environment and consequently they cannot belong to a valid
76 property set.
77
78 Property Sets and Device Tree Bindings
79 ======================================
80
81 It often is useful to make _DSD return property sets that follow Device Tree
82 bindings.
83
84 In those cases, however, the above validity considerations must be taken into
85 account in the first place and returning invalid property sets from _DSD must be
86 avoided.  For this reason, it may not be possible to make _DSD return a property
87 set following the given DT binding literally and completely.  Still, for the
88 sake of code re-use, it may make sense to provide as much of the configuration
89 data as possible in the form of device properties and complement that with an
90 ACPI-specific mechanism suitable for the use case at hand.
91
92 In any case, property sets following DT bindings literally should not be
93 expected to automatically work in the ACPI environment regardless of their
94 contents.
95
96 References
97 ==========
98
99 .. [1] http://www.uefi.org/sites/default/files/resources/_DSD-device-properties-UUID.pdf
100 .. [2] http://www.uefi.org/sites/default/files/resources/_DSD-hierarchical-data-extension-UUID-v1.1.pdf