xref: /openbmc/linux/Documentation/driver-api/surface_aggregator/clients/dtx.rst (revision 8be98d2f2a0a262f8bf8a0bc1fdf522b3c7aab17)
1*f614a1e2SMaximilian Luz.. SPDX-License-Identifier: GPL-2.0+
2*f614a1e2SMaximilian Luz
3*f614a1e2SMaximilian Luz.. |__u16| replace:: :c:type:`__u16 <__u16>`
4*f614a1e2SMaximilian Luz.. |sdtx_event| replace:: :c:type:`struct sdtx_event <sdtx_event>`
5*f614a1e2SMaximilian Luz.. |sdtx_event_code| replace:: :c:type:`enum sdtx_event_code <sdtx_event_code>`
6*f614a1e2SMaximilian Luz.. |sdtx_base_info| replace:: :c:type:`struct sdtx_base_info <sdtx_base_info>`
7*f614a1e2SMaximilian Luz.. |sdtx_device_mode| replace:: :c:type:`struct sdtx_device_mode <sdtx_device_mode>`
8*f614a1e2SMaximilian Luz
9*f614a1e2SMaximilian Luz======================================================
10*f614a1e2SMaximilian LuzUser-Space DTX (Clipboard Detachment System) Interface
11*f614a1e2SMaximilian Luz======================================================
12*f614a1e2SMaximilian Luz
13*f614a1e2SMaximilian LuzThe ``surface_dtx`` driver is responsible for proper clipboard detachment
14*f614a1e2SMaximilian Luzand re-attachment handling. To this end, it provides the ``/dev/surface/dtx``
15*f614a1e2SMaximilian Luzdevice file, through which it can interface with a user-space daemon. This
16*f614a1e2SMaximilian Luzdaemon is then ultimately responsible for determining and taking necessary
17*f614a1e2SMaximilian Luzactions, such as unmounting devices attached to the base,
18*f614a1e2SMaximilian Luzunloading/reloading the graphics-driver, user-notifications, etc.
19*f614a1e2SMaximilian Luz
20*f614a1e2SMaximilian LuzThere are two basic communication principles used in this driver: Commands
21*f614a1e2SMaximilian Luz(in other parts of the documentation also referred to as requests) and
22*f614a1e2SMaximilian Luzevents. Commands are sent to the EC and may have a different implications in
23*f614a1e2SMaximilian Luzdifferent contexts. Events are sent by the EC upon some internal state
24*f614a1e2SMaximilian Luzchange. Commands are always driver-initiated, whereas events are always
25*f614a1e2SMaximilian Luzinitiated by the EC.
26*f614a1e2SMaximilian Luz
27*f614a1e2SMaximilian Luz.. contents::
28*f614a1e2SMaximilian Luz
29*f614a1e2SMaximilian LuzNomenclature
30*f614a1e2SMaximilian Luz============
31*f614a1e2SMaximilian Luz
32*f614a1e2SMaximilian Luz* **Clipboard:**
33*f614a1e2SMaximilian Luz  The detachable upper part of the Surface Book, housing the screen and CPU.
34*f614a1e2SMaximilian Luz
35*f614a1e2SMaximilian Luz* **Base:**
36*f614a1e2SMaximilian Luz  The lower part of the Surface Book from which the clipboard can be
37*f614a1e2SMaximilian Luz  detached, optionally (model dependent) housing the discrete GPU (dGPU).
38*f614a1e2SMaximilian Luz
39*f614a1e2SMaximilian Luz* **Latch:**
40*f614a1e2SMaximilian Luz  The mechanism keeping the clipboard attached to the base in normal
41*f614a1e2SMaximilian Luz  operation and allowing it to be detached when requested.
42*f614a1e2SMaximilian Luz
43*f614a1e2SMaximilian Luz* **Silently ignored commands:**
44*f614a1e2SMaximilian Luz  The command is accepted by the EC as a valid command and acknowledged
45*f614a1e2SMaximilian Luz  (following the standard communication protocol), but the EC does not act
46*f614a1e2SMaximilian Luz  upon it, i.e. ignores it.e upper part of the
47*f614a1e2SMaximilian Luz
48*f614a1e2SMaximilian Luz
49*f614a1e2SMaximilian LuzDetachment Process
50*f614a1e2SMaximilian Luz==================
51*f614a1e2SMaximilian Luz
52*f614a1e2SMaximilian LuzWarning: This part of the documentation is based on reverse engineering and
53*f614a1e2SMaximilian Luztesting and thus may contain errors or be incomplete.
54*f614a1e2SMaximilian Luz
55*f614a1e2SMaximilian LuzLatch States
56*f614a1e2SMaximilian Luz------------
57*f614a1e2SMaximilian Luz
58*f614a1e2SMaximilian LuzThe latch mechanism has two major states: *open* and *closed*. In the
59*f614a1e2SMaximilian Luz*closed* state (default), the clipboard is secured to the base, whereas in
60*f614a1e2SMaximilian Luzthe *open* state, the clipboard can be removed by a user.
61*f614a1e2SMaximilian Luz
62*f614a1e2SMaximilian LuzThe latch can additionally be locked and, correspondingly, unlocked, which
63*f614a1e2SMaximilian Luzcan influence the detachment procedure. Specifically, this locking mechanism
64*f614a1e2SMaximilian Luzis intended to prevent the dGPU, positioned in the base of the device, from
65*f614a1e2SMaximilian Luzbeing hot-unplugged while in use. More details can be found in the
66*f614a1e2SMaximilian Luzdocumentation for the detachment procedure below. By default, the latch is
67*f614a1e2SMaximilian Luzunlocked.
68*f614a1e2SMaximilian Luz
69*f614a1e2SMaximilian LuzDetachment Procedure
70*f614a1e2SMaximilian Luz--------------------
71*f614a1e2SMaximilian Luz
72*f614a1e2SMaximilian LuzNote that the detachment process is governed fully by the EC. The
73*f614a1e2SMaximilian Luz``surface_dtx`` driver only relays events from the EC to user-space and
74*f614a1e2SMaximilian Luzcommands from user-space to the EC, i.e. it does not influence this process.
75*f614a1e2SMaximilian Luz
76*f614a1e2SMaximilian LuzThe detachment process is started with the user pressing the *detach* button
77*f614a1e2SMaximilian Luzon the base of the device or executing the ``SDTX_IOCTL_LATCH_REQUEST`` IOCTL.
78*f614a1e2SMaximilian LuzFollowing that:
79*f614a1e2SMaximilian Luz
80*f614a1e2SMaximilian Luz1. The EC turns on the indicator led on the detach-button, sends a
81*f614a1e2SMaximilian Luz   *detach-request* event (``SDTX_EVENT_REQUEST``), and awaits further
82*f614a1e2SMaximilian Luz   instructions/commands. In case the latch is unlocked, the led will flash
83*f614a1e2SMaximilian Luz   green. If the latch has been locked, the led will be solid red
84*f614a1e2SMaximilian Luz
85*f614a1e2SMaximilian Luz2. The event is, via the ``surface_dtx`` driver, relayed to user-space, where
86*f614a1e2SMaximilian Luz   an appropriate user-space daemon can handle it and send instructions back
87*f614a1e2SMaximilian Luz   to the EC via IOCTLs provided by this driver.
88*f614a1e2SMaximilian Luz
89*f614a1e2SMaximilian Luz3. The EC waits for instructions from user-space and acts according to them.
90*f614a1e2SMaximilian Luz   If the EC does not receive any instructions in a given period, it will
91*f614a1e2SMaximilian Luz   time out and continue as follows:
92*f614a1e2SMaximilian Luz
93*f614a1e2SMaximilian Luz   - If the latch is unlocked, the EC will open the latch and the clipboard
94*f614a1e2SMaximilian Luz     can be detached from the base. This is the exact behavior as without
95*f614a1e2SMaximilian Luz     this driver or any user-space daemon. See the ``SDTX_IOCTL_LATCH_CONFIRM``
96*f614a1e2SMaximilian Luz     description below for more details on the follow-up behavior of the EC.
97*f614a1e2SMaximilian Luz
98*f614a1e2SMaximilian Luz   - If the latch is locked, the EC will *not* open the latch, meaning the
99*f614a1e2SMaximilian Luz     clipboard cannot be detached from the base. Furthermore, the EC sends
100*f614a1e2SMaximilian Luz     an cancel event (``SDTX_EVENT_CANCEL``) detailing this with the cancel
101*f614a1e2SMaximilian Luz     reason ``SDTX_DETACH_TIMEDOUT`` (see :ref:`events` for details).
102*f614a1e2SMaximilian Luz
103*f614a1e2SMaximilian LuzValid responses by a user-space daemon to a detachment request event are:
104*f614a1e2SMaximilian Luz
105*f614a1e2SMaximilian Luz- Execute ``SDTX_IOCTL_LATCH_REQUEST``. This will immediately abort the
106*f614a1e2SMaximilian Luz  detachment process. Furthermore, the EC will send a detach-request event,
107*f614a1e2SMaximilian Luz  similar to the user pressing the detach-button to cancel said process (see
108*f614a1e2SMaximilian Luz  below).
109*f614a1e2SMaximilian Luz
110*f614a1e2SMaximilian Luz- Execute ``SDTX_IOCTL_LATCH_CONFIRM``. This will cause the EC to open the
111*f614a1e2SMaximilian Luz  latch, after which the user can separate clipboard and base.
112*f614a1e2SMaximilian Luz
113*f614a1e2SMaximilian Luz  As this changes the latch state, a *latch-status* event
114*f614a1e2SMaximilian Luz  (``SDTX_EVENT_LATCH_STATUS``) will be sent once the latch has been opened
115*f614a1e2SMaximilian Luz  successfully. If the EC fails to open the latch, e.g. due to hardware
116*f614a1e2SMaximilian Luz  error or low battery, a latch-cancel event (``SDTX_EVENT_CANCEL``) will be
117*f614a1e2SMaximilian Luz  sent with the cancel reason indicating the specific failure.
118*f614a1e2SMaximilian Luz
119*f614a1e2SMaximilian Luz  If the latch is currently locked, the latch will automatically be
120*f614a1e2SMaximilian Luz  unlocked before it is opened.
121*f614a1e2SMaximilian Luz
122*f614a1e2SMaximilian Luz- Execute ``SDTX_IOCTL_LATCH_HEARTBEAT``. This will reset the internal timeout.
123*f614a1e2SMaximilian Luz  No other actions will be performed, i.e. the detachment process will neither
124*f614a1e2SMaximilian Luz  be completed nor canceled, and the EC will still be waiting for further
125*f614a1e2SMaximilian Luz  responses.
126*f614a1e2SMaximilian Luz
127*f614a1e2SMaximilian Luz- Execute ``SDTX_IOCTL_LATCH_CANCEL``. This will abort the detachment process,
128*f614a1e2SMaximilian Luz  similar to ``SDTX_IOCTL_LATCH_REQUEST``, described above, or the button
129*f614a1e2SMaximilian Luz  press, described below. A *generic request* event (``SDTX_EVENT_REQUEST``)
130*f614a1e2SMaximilian Luz  is send in response to this. In contrast to those, however, this command
131*f614a1e2SMaximilian Luz  does not trigger a new detachment process if none is currently in
132*f614a1e2SMaximilian Luz  progress.
133*f614a1e2SMaximilian Luz
134*f614a1e2SMaximilian Luz- Do nothing. The detachment process eventually times out as described in
135*f614a1e2SMaximilian Luz  point 3.
136*f614a1e2SMaximilian Luz
137*f614a1e2SMaximilian LuzSee :ref:`ioctls` for more details on these responses.
138*f614a1e2SMaximilian Luz
139*f614a1e2SMaximilian LuzIt is important to note that, if the user presses the detach button at any
140*f614a1e2SMaximilian Luzpoint when a detachment operation is in progress (i.e. after the EC has sent
141*f614a1e2SMaximilian Luzthe initial *detach-request* event (``SDTX_EVENT_REQUEST``) and before it
142*f614a1e2SMaximilian Luzreceived the corresponding response concluding the process), the detachment
143*f614a1e2SMaximilian Luzprocess is canceled on the EC-level and an identical event is being sent.
144*f614a1e2SMaximilian LuzThus a *detach-request* event, by itself, does not signal the start of the
145*f614a1e2SMaximilian Luzdetachment process.
146*f614a1e2SMaximilian Luz
147*f614a1e2SMaximilian LuzThe detachment process may further be canceled by the EC due to hardware
148*f614a1e2SMaximilian Luzfailures or a low clipboard battery. This is done via a cancel event
149*f614a1e2SMaximilian Luz(``SDTX_EVENT_CANCEL``) with the corresponding cancel reason.
150*f614a1e2SMaximilian Luz
151*f614a1e2SMaximilian Luz
152*f614a1e2SMaximilian LuzUser-Space Interface Documentation
153*f614a1e2SMaximilian Luz==================================
154*f614a1e2SMaximilian Luz
155*f614a1e2SMaximilian LuzError Codes and Status Values
156*f614a1e2SMaximilian Luz-----------------------------
157*f614a1e2SMaximilian Luz
158*f614a1e2SMaximilian LuzError and status codes are divided into different categories, which can be
159*f614a1e2SMaximilian Luzused to determine if the status code is an error, and, if it is, the
160*f614a1e2SMaximilian Luzseverity and type of that error. The current categories are:
161*f614a1e2SMaximilian Luz
162*f614a1e2SMaximilian Luz.. flat-table:: Overview of Status/Error Categories.
163*f614a1e2SMaximilian Luz   :widths: 2 1 3
164*f614a1e2SMaximilian Luz   :header-rows: 1
165*f614a1e2SMaximilian Luz
166*f614a1e2SMaximilian Luz   * - Name
167*f614a1e2SMaximilian Luz     - Value
168*f614a1e2SMaximilian Luz     - Short Description
169*f614a1e2SMaximilian Luz
170*f614a1e2SMaximilian Luz   * - ``STATUS``
171*f614a1e2SMaximilian Luz     - ``0x0000``
172*f614a1e2SMaximilian Luz     - Non-error status codes.
173*f614a1e2SMaximilian Luz
174*f614a1e2SMaximilian Luz   * - ``RUNTIME_ERROR``
175*f614a1e2SMaximilian Luz     - ``0x1000``
176*f614a1e2SMaximilian Luz     - Non-critical runtime errors.
177*f614a1e2SMaximilian Luz
178*f614a1e2SMaximilian Luz   * - ``HARDWARE_ERROR``
179*f614a1e2SMaximilian Luz     - ``0x2000``
180*f614a1e2SMaximilian Luz     - Critical hardware failures.
181*f614a1e2SMaximilian Luz
182*f614a1e2SMaximilian Luz   * - ``UNKNOWN``
183*f614a1e2SMaximilian Luz     - ``0xF000``
184*f614a1e2SMaximilian Luz     - Unknown error codes.
185*f614a1e2SMaximilian Luz
186*f614a1e2SMaximilian LuzOther categories are reserved for future use. The ``SDTX_CATEGORY()`` macro
187*f614a1e2SMaximilian Luzcan be used to determine the category of any status value. The
188*f614a1e2SMaximilian Luz``SDTX_SUCCESS()`` macro can be used to check if the status value is a
189*f614a1e2SMaximilian Luzsuccess value (``SDTX_CATEGORY_STATUS``) or if it indicates a failure.
190*f614a1e2SMaximilian Luz
191*f614a1e2SMaximilian LuzUnknown status or error codes sent by the EC are assigned to the ``UNKNOWN``
192*f614a1e2SMaximilian Luzcategory by the driver and may be implemented via their own code in the
193*f614a1e2SMaximilian Luzfuture.
194*f614a1e2SMaximilian Luz
195*f614a1e2SMaximilian LuzCurrently used error codes are:
196*f614a1e2SMaximilian Luz
197*f614a1e2SMaximilian Luz.. flat-table:: Overview of Error Codes.
198*f614a1e2SMaximilian Luz   :widths: 2 1 1 3
199*f614a1e2SMaximilian Luz   :header-rows: 1
200*f614a1e2SMaximilian Luz
201*f614a1e2SMaximilian Luz   * - Name
202*f614a1e2SMaximilian Luz     - Category
203*f614a1e2SMaximilian Luz     - Value
204*f614a1e2SMaximilian Luz     - Short Description
205*f614a1e2SMaximilian Luz
206*f614a1e2SMaximilian Luz   * - ``SDTX_DETACH_NOT_FEASIBLE``
207*f614a1e2SMaximilian Luz     - ``RUNTIME``
208*f614a1e2SMaximilian Luz     - ``0x1001``
209*f614a1e2SMaximilian Luz     - Detachment not feasible due to low clipboard battery.
210*f614a1e2SMaximilian Luz
211*f614a1e2SMaximilian Luz   * - ``SDTX_DETACH_TIMEDOUT``
212*f614a1e2SMaximilian Luz     - ``RUNTIME``
213*f614a1e2SMaximilian Luz     - ``0x1002``
214*f614a1e2SMaximilian Luz     - Detachment process timed out while the latch was locked.
215*f614a1e2SMaximilian Luz
216*f614a1e2SMaximilian Luz   * - ``SDTX_ERR_FAILED_TO_OPEN``
217*f614a1e2SMaximilian Luz     - ``HARDWARE``
218*f614a1e2SMaximilian Luz     - ``0x2001``
219*f614a1e2SMaximilian Luz     - Failed to open latch.
220*f614a1e2SMaximilian Luz
221*f614a1e2SMaximilian Luz   * - ``SDTX_ERR_FAILED_TO_REMAIN_OPEN``
222*f614a1e2SMaximilian Luz     - ``HARDWARE``
223*f614a1e2SMaximilian Luz     - ``0x2002``
224*f614a1e2SMaximilian Luz     - Failed to keep latch open.
225*f614a1e2SMaximilian Luz
226*f614a1e2SMaximilian Luz   * - ``SDTX_ERR_FAILED_TO_CLOSE``
227*f614a1e2SMaximilian Luz     - ``HARDWARE``
228*f614a1e2SMaximilian Luz     - ``0x2003``
229*f614a1e2SMaximilian Luz     - Failed to close latch.
230*f614a1e2SMaximilian Luz
231*f614a1e2SMaximilian LuzOther error codes are reserved for future use. Non-error status codes may
232*f614a1e2SMaximilian Luzoverlap and are generally only unique within their use-case:
233*f614a1e2SMaximilian Luz
234*f614a1e2SMaximilian Luz.. flat-table:: Latch Status Codes.
235*f614a1e2SMaximilian Luz   :widths: 2 1 1 3
236*f614a1e2SMaximilian Luz   :header-rows: 1
237*f614a1e2SMaximilian Luz
238*f614a1e2SMaximilian Luz   * - Name
239*f614a1e2SMaximilian Luz     - Category
240*f614a1e2SMaximilian Luz     - Value
241*f614a1e2SMaximilian Luz     - Short Description
242*f614a1e2SMaximilian Luz
243*f614a1e2SMaximilian Luz   * - ``SDTX_LATCH_CLOSED``
244*f614a1e2SMaximilian Luz     - ``STATUS``
245*f614a1e2SMaximilian Luz     - ``0x0000``
246*f614a1e2SMaximilian Luz     - Latch is closed/has been closed.
247*f614a1e2SMaximilian Luz
248*f614a1e2SMaximilian Luz   * - ``SDTX_LATCH_OPENED``
249*f614a1e2SMaximilian Luz     - ``STATUS``
250*f614a1e2SMaximilian Luz     - ``0x0001``
251*f614a1e2SMaximilian Luz     - Latch is open/has been opened.
252*f614a1e2SMaximilian Luz
253*f614a1e2SMaximilian Luz.. flat-table:: Base State Codes.
254*f614a1e2SMaximilian Luz   :widths: 2 1 1 3
255*f614a1e2SMaximilian Luz   :header-rows: 1
256*f614a1e2SMaximilian Luz
257*f614a1e2SMaximilian Luz   * - Name
258*f614a1e2SMaximilian Luz     - Category
259*f614a1e2SMaximilian Luz     - Value
260*f614a1e2SMaximilian Luz     - Short Description
261*f614a1e2SMaximilian Luz
262*f614a1e2SMaximilian Luz   * - ``SDTX_BASE_DETACHED``
263*f614a1e2SMaximilian Luz     - ``STATUS``
264*f614a1e2SMaximilian Luz     - ``0x0000``
265*f614a1e2SMaximilian Luz     - Base has been detached/is not present.
266*f614a1e2SMaximilian Luz
267*f614a1e2SMaximilian Luz   * - ``SDTX_BASE_ATTACHED``
268*f614a1e2SMaximilian Luz     - ``STATUS``
269*f614a1e2SMaximilian Luz     - ``0x0001``
270*f614a1e2SMaximilian Luz     - Base has been attached/is present.
271*f614a1e2SMaximilian Luz
272*f614a1e2SMaximilian LuzAgain, other codes are reserved for future use.
273*f614a1e2SMaximilian Luz
274*f614a1e2SMaximilian Luz.. _events:
275*f614a1e2SMaximilian Luz
276*f614a1e2SMaximilian LuzEvents
277*f614a1e2SMaximilian Luz------
278*f614a1e2SMaximilian Luz
279*f614a1e2SMaximilian LuzEvents can be received by reading from the device file. They are disabled by
280*f614a1e2SMaximilian Luzdefault and have to be enabled by executing ``SDTX_IOCTL_EVENTS_ENABLE``
281*f614a1e2SMaximilian Luzfirst. All events follow the layout prescribed by |sdtx_event|. Specific
282*f614a1e2SMaximilian Luzevent types can be identified by their event code, described in
283*f614a1e2SMaximilian Luz|sdtx_event_code|. Note that other event codes are reserved for future use,
284*f614a1e2SMaximilian Luzthus an event parser must be able to handle any unknown/unsupported event
285*f614a1e2SMaximilian Luztypes gracefully, by relying on the payload length given in the event header.
286*f614a1e2SMaximilian Luz
287*f614a1e2SMaximilian LuzCurrently provided event types are:
288*f614a1e2SMaximilian Luz
289*f614a1e2SMaximilian Luz.. flat-table:: Overview of DTX events.
290*f614a1e2SMaximilian Luz   :widths: 2 1 1 3
291*f614a1e2SMaximilian Luz   :header-rows: 1
292*f614a1e2SMaximilian Luz
293*f614a1e2SMaximilian Luz   * - Name
294*f614a1e2SMaximilian Luz     - Code
295*f614a1e2SMaximilian Luz     - Payload
296*f614a1e2SMaximilian Luz     - Short Description
297*f614a1e2SMaximilian Luz
298*f614a1e2SMaximilian Luz   * - ``SDTX_EVENT_REQUEST``
299*f614a1e2SMaximilian Luz     - ``1``
300*f614a1e2SMaximilian Luz     - ``0`` bytes
301*f614a1e2SMaximilian Luz     - Detachment process initiated/aborted.
302*f614a1e2SMaximilian Luz
303*f614a1e2SMaximilian Luz   * - ``SDTX_EVENT_CANCEL``
304*f614a1e2SMaximilian Luz     - ``2``
305*f614a1e2SMaximilian Luz     - ``2`` bytes
306*f614a1e2SMaximilian Luz     - EC canceled detachment process.
307*f614a1e2SMaximilian Luz
308*f614a1e2SMaximilian Luz   * - ``SDTX_EVENT_BASE_CONNECTION``
309*f614a1e2SMaximilian Luz     - ``3``
310*f614a1e2SMaximilian Luz     - ``4`` bytes
311*f614a1e2SMaximilian Luz     - Base connection state changed.
312*f614a1e2SMaximilian Luz
313*f614a1e2SMaximilian Luz   * - ``SDTX_EVENT_LATCH_STATUS``
314*f614a1e2SMaximilian Luz     - ``4``
315*f614a1e2SMaximilian Luz     - ``2`` bytes
316*f614a1e2SMaximilian Luz     - Latch status changed.
317*f614a1e2SMaximilian Luz
318*f614a1e2SMaximilian Luz   * - ``SDTX_EVENT_DEVICE_MODE``
319*f614a1e2SMaximilian Luz     - ``5``
320*f614a1e2SMaximilian Luz     - ``2`` bytes
321*f614a1e2SMaximilian Luz     - Device mode changed.
322*f614a1e2SMaximilian Luz
323*f614a1e2SMaximilian LuzIndividual events in more detail:
324*f614a1e2SMaximilian Luz
325*f614a1e2SMaximilian Luz``SDTX_EVENT_REQUEST``
326*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^
327*f614a1e2SMaximilian Luz
328*f614a1e2SMaximilian LuzSent when a detachment process is started or, if in progress, aborted by the
329*f614a1e2SMaximilian Luzuser, either via a detach button press or a detach request
330*f614a1e2SMaximilian Luz(``SDTX_IOCTL_LATCH_REQUEST``) being sent from user-space.
331*f614a1e2SMaximilian Luz
332*f614a1e2SMaximilian LuzDoes not have any payload.
333*f614a1e2SMaximilian Luz
334*f614a1e2SMaximilian Luz``SDTX_EVENT_CANCEL``
335*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^
336*f614a1e2SMaximilian Luz
337*f614a1e2SMaximilian LuzSent when a detachment process is canceled by the EC due to unfulfilled
338*f614a1e2SMaximilian Luzpreconditions (e.g. clipboard battery too low to detach) or hardware
339*f614a1e2SMaximilian Luzfailure. The reason for cancellation is given in the event payload detailed
340*f614a1e2SMaximilian Luzbelow and can be one of
341*f614a1e2SMaximilian Luz
342*f614a1e2SMaximilian Luz* ``SDTX_DETACH_TIMEDOUT``: Detachment timed out while the latch was locked.
343*f614a1e2SMaximilian Luz  The latch has neither been opened nor unlocked.
344*f614a1e2SMaximilian Luz
345*f614a1e2SMaximilian Luz* ``SDTX_DETACH_NOT_FEASIBLE``: Detachment not feasible due to low clipboard
346*f614a1e2SMaximilian Luz  battery.
347*f614a1e2SMaximilian Luz
348*f614a1e2SMaximilian Luz* ``SDTX_ERR_FAILED_TO_OPEN``: Could not open the latch (hardware failure).
349*f614a1e2SMaximilian Luz
350*f614a1e2SMaximilian Luz* ``SDTX_ERR_FAILED_TO_REMAIN_OPEN``: Could not keep the latch open (hardware
351*f614a1e2SMaximilian Luz  failure).
352*f614a1e2SMaximilian Luz
353*f614a1e2SMaximilian Luz* ``SDTX_ERR_FAILED_TO_CLOSE``: Could not close the latch (hardware failure).
354*f614a1e2SMaximilian Luz
355*f614a1e2SMaximilian LuzOther error codes in this context are reserved for future use.
356*f614a1e2SMaximilian Luz
357*f614a1e2SMaximilian LuzThese codes can be classified via the ``SDTX_CATEGORY()`` macro to discern
358*f614a1e2SMaximilian Luzbetween critical hardware errors (``SDTX_CATEGORY_HARDWARE_ERROR``) or
359*f614a1e2SMaximilian Luzruntime errors (``SDTX_CATEGORY_RUNTIME_ERROR``), the latter of which may
360*f614a1e2SMaximilian Luzhappen during normal operation if certain preconditions for detachment are
361*f614a1e2SMaximilian Luznot given.
362*f614a1e2SMaximilian Luz
363*f614a1e2SMaximilian Luz.. flat-table:: Detachment Cancel Event Payload
364*f614a1e2SMaximilian Luz   :widths: 1 1 4
365*f614a1e2SMaximilian Luz   :header-rows: 1
366*f614a1e2SMaximilian Luz
367*f614a1e2SMaximilian Luz   * - Field
368*f614a1e2SMaximilian Luz     - Type
369*f614a1e2SMaximilian Luz     - Description
370*f614a1e2SMaximilian Luz
371*f614a1e2SMaximilian Luz   * - ``reason``
372*f614a1e2SMaximilian Luz     - |__u16|
373*f614a1e2SMaximilian Luz     - Reason for cancellation.
374*f614a1e2SMaximilian Luz
375*f614a1e2SMaximilian Luz``SDTX_EVENT_BASE_CONNECTION``
376*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
377*f614a1e2SMaximilian Luz
378*f614a1e2SMaximilian LuzSent when the base connection state has changed, i.e. when the base has been
379*f614a1e2SMaximilian Luzattached, detached, or detachment has become infeasible due to low clipboard
380*f614a1e2SMaximilian Luzbattery. The new state and, if a base is connected, ID of the base is
381*f614a1e2SMaximilian Luzprovided as payload of type |sdtx_base_info| with its layout presented
382*f614a1e2SMaximilian Luzbelow:
383*f614a1e2SMaximilian Luz
384*f614a1e2SMaximilian Luz.. flat-table:: Base-Connection-Change Event Payload
385*f614a1e2SMaximilian Luz   :widths: 1 1 4
386*f614a1e2SMaximilian Luz   :header-rows: 1
387*f614a1e2SMaximilian Luz
388*f614a1e2SMaximilian Luz   * - Field
389*f614a1e2SMaximilian Luz     - Type
390*f614a1e2SMaximilian Luz     - Description
391*f614a1e2SMaximilian Luz
392*f614a1e2SMaximilian Luz   * - ``state``
393*f614a1e2SMaximilian Luz     - |__u16|
394*f614a1e2SMaximilian Luz     - Base connection state.
395*f614a1e2SMaximilian Luz
396*f614a1e2SMaximilian Luz   * - ``base_id``
397*f614a1e2SMaximilian Luz     - |__u16|
398*f614a1e2SMaximilian Luz     - Type of base connected (zero if none).
399*f614a1e2SMaximilian Luz
400*f614a1e2SMaximilian LuzPossible values for ``state`` are:
401*f614a1e2SMaximilian Luz
402*f614a1e2SMaximilian Luz* ``SDTX_BASE_DETACHED``,
403*f614a1e2SMaximilian Luz* ``SDTX_BASE_ATTACHED``, and
404*f614a1e2SMaximilian Luz* ``SDTX_DETACH_NOT_FEASIBLE``.
405*f614a1e2SMaximilian Luz
406*f614a1e2SMaximilian LuzOther values are reserved for future use.
407*f614a1e2SMaximilian Luz
408*f614a1e2SMaximilian Luz``SDTX_EVENT_LATCH_STATUS``
409*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^
410*f614a1e2SMaximilian Luz
411*f614a1e2SMaximilian LuzSent when the latch status has changed, i.e. when the latch has been opened,
412*f614a1e2SMaximilian Luzclosed, or an error occurred. The current status is provided as payload:
413*f614a1e2SMaximilian Luz
414*f614a1e2SMaximilian Luz.. flat-table:: Latch-Status-Change Event Payload
415*f614a1e2SMaximilian Luz   :widths: 1 1 4
416*f614a1e2SMaximilian Luz   :header-rows: 1
417*f614a1e2SMaximilian Luz
418*f614a1e2SMaximilian Luz   * - Field
419*f614a1e2SMaximilian Luz     - Type
420*f614a1e2SMaximilian Luz     - Description
421*f614a1e2SMaximilian Luz
422*f614a1e2SMaximilian Luz   * - ``status``
423*f614a1e2SMaximilian Luz     - |__u16|
424*f614a1e2SMaximilian Luz     - Latch status.
425*f614a1e2SMaximilian Luz
426*f614a1e2SMaximilian LuzPossible values for ``status`` are:
427*f614a1e2SMaximilian Luz
428*f614a1e2SMaximilian Luz* ``SDTX_LATCH_CLOSED``,
429*f614a1e2SMaximilian Luz* ``SDTX_LATCH_OPENED``,
430*f614a1e2SMaximilian Luz* ``SDTX_ERR_FAILED_TO_OPEN``,
431*f614a1e2SMaximilian Luz* ``SDTX_ERR_FAILED_TO_REMAIN_OPEN``, and
432*f614a1e2SMaximilian Luz* ``SDTX_ERR_FAILED_TO_CLOSE``.
433*f614a1e2SMaximilian Luz
434*f614a1e2SMaximilian LuzOther values are reserved for future use.
435*f614a1e2SMaximilian Luz
436*f614a1e2SMaximilian Luz``SDTX_EVENT_DEVICE_MODE``
437*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^
438*f614a1e2SMaximilian Luz
439*f614a1e2SMaximilian LuzSent when the device mode has changed. The new device mode is provided as
440*f614a1e2SMaximilian Luzpayload:
441*f614a1e2SMaximilian Luz
442*f614a1e2SMaximilian Luz.. flat-table:: Device-Mode-Change Event Payload
443*f614a1e2SMaximilian Luz   :widths: 1 1 4
444*f614a1e2SMaximilian Luz   :header-rows: 1
445*f614a1e2SMaximilian Luz
446*f614a1e2SMaximilian Luz   * - Field
447*f614a1e2SMaximilian Luz     - Type
448*f614a1e2SMaximilian Luz     - Description
449*f614a1e2SMaximilian Luz
450*f614a1e2SMaximilian Luz   * - ``mode``
451*f614a1e2SMaximilian Luz     - |__u16|
452*f614a1e2SMaximilian Luz     - Device operation mode.
453*f614a1e2SMaximilian Luz
454*f614a1e2SMaximilian LuzPossible values for ``mode`` are:
455*f614a1e2SMaximilian Luz
456*f614a1e2SMaximilian Luz* ``SDTX_DEVICE_MODE_TABLET``,
457*f614a1e2SMaximilian Luz* ``SDTX_DEVICE_MODE_LAPTOP``, and
458*f614a1e2SMaximilian Luz* ``SDTX_DEVICE_MODE_STUDIO``.
459*f614a1e2SMaximilian Luz
460*f614a1e2SMaximilian LuzOther values are reserved for future use.
461*f614a1e2SMaximilian Luz
462*f614a1e2SMaximilian Luz.. _ioctls:
463*f614a1e2SMaximilian Luz
464*f614a1e2SMaximilian LuzIOCTLs
465*f614a1e2SMaximilian Luz------
466*f614a1e2SMaximilian Luz
467*f614a1e2SMaximilian LuzThe following IOCTLs are provided:
468*f614a1e2SMaximilian Luz
469*f614a1e2SMaximilian Luz.. flat-table:: Overview of DTX IOCTLs
470*f614a1e2SMaximilian Luz   :widths: 1 1 1 1 4
471*f614a1e2SMaximilian Luz   :header-rows: 1
472*f614a1e2SMaximilian Luz
473*f614a1e2SMaximilian Luz   * - Type
474*f614a1e2SMaximilian Luz     - Number
475*f614a1e2SMaximilian Luz     - Direction
476*f614a1e2SMaximilian Luz     - Name
477*f614a1e2SMaximilian Luz     - Description
478*f614a1e2SMaximilian Luz
479*f614a1e2SMaximilian Luz   * - ``0xA5``
480*f614a1e2SMaximilian Luz     - ``0x21``
481*f614a1e2SMaximilian Luz     - ``-``
482*f614a1e2SMaximilian Luz     - ``EVENTS_ENABLE``
483*f614a1e2SMaximilian Luz     - Enable events for the current file descriptor.
484*f614a1e2SMaximilian Luz
485*f614a1e2SMaximilian Luz   * - ``0xA5``
486*f614a1e2SMaximilian Luz     - ``0x22``
487*f614a1e2SMaximilian Luz     - ``-``
488*f614a1e2SMaximilian Luz     - ``EVENTS_DISABLE``
489*f614a1e2SMaximilian Luz     - Disable events for the current file descriptor.
490*f614a1e2SMaximilian Luz
491*f614a1e2SMaximilian Luz   * - ``0xA5``
492*f614a1e2SMaximilian Luz     - ``0x23``
493*f614a1e2SMaximilian Luz     - ``-``
494*f614a1e2SMaximilian Luz     - ``LATCH_LOCK``
495*f614a1e2SMaximilian Luz     - Lock the latch.
496*f614a1e2SMaximilian Luz
497*f614a1e2SMaximilian Luz   * - ``0xA5``
498*f614a1e2SMaximilian Luz     - ``0x24``
499*f614a1e2SMaximilian Luz     - ``-``
500*f614a1e2SMaximilian Luz     - ``LATCH_UNLOCK``
501*f614a1e2SMaximilian Luz     - Unlock the latch.
502*f614a1e2SMaximilian Luz
503*f614a1e2SMaximilian Luz   * - ``0xA5``
504*f614a1e2SMaximilian Luz     - ``0x25``
505*f614a1e2SMaximilian Luz     - ``-``
506*f614a1e2SMaximilian Luz     - ``LATCH_REQUEST``
507*f614a1e2SMaximilian Luz     - Request clipboard detachment.
508*f614a1e2SMaximilian Luz
509*f614a1e2SMaximilian Luz   * - ``0xA5``
510*f614a1e2SMaximilian Luz     - ``0x26``
511*f614a1e2SMaximilian Luz     - ``-``
512*f614a1e2SMaximilian Luz     - ``LATCH_CONFIRM``
513*f614a1e2SMaximilian Luz     - Confirm clipboard detachment request.
514*f614a1e2SMaximilian Luz
515*f614a1e2SMaximilian Luz   * - ``0xA5``
516*f614a1e2SMaximilian Luz     - ``0x27``
517*f614a1e2SMaximilian Luz     - ``-``
518*f614a1e2SMaximilian Luz     - ``LATCH_HEARTBEAT``
519*f614a1e2SMaximilian Luz     - Send heartbeat signal to EC.
520*f614a1e2SMaximilian Luz
521*f614a1e2SMaximilian Luz   * - ``0xA5``
522*f614a1e2SMaximilian Luz     - ``0x28``
523*f614a1e2SMaximilian Luz     - ``-``
524*f614a1e2SMaximilian Luz     - ``LATCH_CANCEL``
525*f614a1e2SMaximilian Luz     - Cancel detachment process.
526*f614a1e2SMaximilian Luz
527*f614a1e2SMaximilian Luz   * - ``0xA5``
528*f614a1e2SMaximilian Luz     - ``0x29``
529*f614a1e2SMaximilian Luz     - ``R``
530*f614a1e2SMaximilian Luz     - ``GET_BASE_INFO``
531*f614a1e2SMaximilian Luz     - Get current base/connection information.
532*f614a1e2SMaximilian Luz
533*f614a1e2SMaximilian Luz   * - ``0xA5``
534*f614a1e2SMaximilian Luz     - ``0x2A``
535*f614a1e2SMaximilian Luz     - ``R``
536*f614a1e2SMaximilian Luz     - ``GET_DEVICE_MODE``
537*f614a1e2SMaximilian Luz     - Get current device operation mode.
538*f614a1e2SMaximilian Luz
539*f614a1e2SMaximilian Luz   * - ``0xA5``
540*f614a1e2SMaximilian Luz     - ``0x2B``
541*f614a1e2SMaximilian Luz     - ``R``
542*f614a1e2SMaximilian Luz     - ``GET_LATCH_STATUS``
543*f614a1e2SMaximilian Luz     - Get current device latch status.
544*f614a1e2SMaximilian Luz
545*f614a1e2SMaximilian Luz``SDTX_IOCTL_EVENTS_ENABLE``
546*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^^
547*f614a1e2SMaximilian Luz
548*f614a1e2SMaximilian LuzDefined as ``_IO(0xA5, 0x22)``.
549*f614a1e2SMaximilian Luz
550*f614a1e2SMaximilian LuzEnable events for the current file descriptor. Events can be obtained by
551*f614a1e2SMaximilian Luzreading from the device, if enabled. Events are disabled by default.
552*f614a1e2SMaximilian Luz
553*f614a1e2SMaximilian Luz``SDTX_IOCTL_EVENTS_DISABLE``
554*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
555*f614a1e2SMaximilian Luz
556*f614a1e2SMaximilian LuzDefined as ``_IO(0xA5, 0x22)``.
557*f614a1e2SMaximilian Luz
558*f614a1e2SMaximilian LuzDisable events for the current file descriptor. Events can be obtained by
559*f614a1e2SMaximilian Luzreading from the device, if enabled. Events are disabled by default.
560*f614a1e2SMaximilian Luz
561*f614a1e2SMaximilian Luz``SDTX_IOCTL_LATCH_LOCK``
562*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^
563*f614a1e2SMaximilian Luz
564*f614a1e2SMaximilian LuzDefined as ``_IO(0xA5, 0x23)``.
565*f614a1e2SMaximilian Luz
566*f614a1e2SMaximilian LuzLocks the latch, causing the detachment procedure to abort without opening
567*f614a1e2SMaximilian Luzthe latch on timeout. The latch is unlocked by default. This command will be
568*f614a1e2SMaximilian Luzsilently ignored if the latch is already locked.
569*f614a1e2SMaximilian Luz
570*f614a1e2SMaximilian Luz``SDTX_IOCTL_LATCH_UNLOCK``
571*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^
572*f614a1e2SMaximilian Luz
573*f614a1e2SMaximilian LuzDefined as ``_IO(0xA5, 0x24)``.
574*f614a1e2SMaximilian Luz
575*f614a1e2SMaximilian LuzUnlocks the latch, causing the detachment procedure to open the latch on
576*f614a1e2SMaximilian Luztimeout. The latch is unlocked by default. This command will not open the
577*f614a1e2SMaximilian Luzlatch when sent during an ongoing detachment process. It will be silently
578*f614a1e2SMaximilian Luzignored if the latch is already unlocked.
579*f614a1e2SMaximilian Luz
580*f614a1e2SMaximilian Luz``SDTX_IOCTL_LATCH_REQUEST``
581*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^^
582*f614a1e2SMaximilian Luz
583*f614a1e2SMaximilian LuzDefined as ``_IO(0xA5, 0x25)``.
584*f614a1e2SMaximilian Luz
585*f614a1e2SMaximilian LuzGeneric latch request. Behavior depends on the context: If no
586*f614a1e2SMaximilian Luzdetachment-process is active, detachment is requested. Otherwise the
587*f614a1e2SMaximilian Luzcurrently active detachment-process will be aborted.
588*f614a1e2SMaximilian Luz
589*f614a1e2SMaximilian LuzIf a detachment process is canceled by this operation, a generic detachment
590*f614a1e2SMaximilian Luzrequest event (``SDTX_EVENT_REQUEST``) will be sent.
591*f614a1e2SMaximilian Luz
592*f614a1e2SMaximilian LuzThis essentially behaves the same as a detachment button press.
593*f614a1e2SMaximilian Luz
594*f614a1e2SMaximilian Luz``SDTX_IOCTL_LATCH_CONFIRM``
595*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^^
596*f614a1e2SMaximilian Luz
597*f614a1e2SMaximilian LuzDefined as ``_IO(0xA5, 0x26)``.
598*f614a1e2SMaximilian Luz
599*f614a1e2SMaximilian LuzAcknowledges and confirms a latch request. If sent during an ongoing
600*f614a1e2SMaximilian Luzdetachment process, this command causes the latch to be opened immediately.
601*f614a1e2SMaximilian LuzThe latch will also be opened if it has been locked. In this case, the latch
602*f614a1e2SMaximilian Luzlock is reset to the unlocked state.
603*f614a1e2SMaximilian Luz
604*f614a1e2SMaximilian LuzThis command will be silently ignored if there is currently no detachment
605*f614a1e2SMaximilian Luzprocedure in progress.
606*f614a1e2SMaximilian Luz
607*f614a1e2SMaximilian Luz``SDTX_IOCTL_LATCH_HEARTBEAT``
608*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
609*f614a1e2SMaximilian Luz
610*f614a1e2SMaximilian LuzDefined as ``_IO(0xA5, 0x27)``.
611*f614a1e2SMaximilian Luz
612*f614a1e2SMaximilian LuzSends a heartbeat, essentially resetting the detachment timeout. This
613*f614a1e2SMaximilian Luzcommand can be used to keep the detachment process alive while work required
614*f614a1e2SMaximilian Luzfor the detachment to succeed is still in progress.
615*f614a1e2SMaximilian Luz
616*f614a1e2SMaximilian LuzThis command will be silently ignored if there is currently no detachment
617*f614a1e2SMaximilian Luzprocedure in progress.
618*f614a1e2SMaximilian Luz
619*f614a1e2SMaximilian Luz``SDTX_IOCTL_LATCH_CANCEL``
620*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^
621*f614a1e2SMaximilian Luz
622*f614a1e2SMaximilian LuzDefined as ``_IO(0xA5, 0x28)``.
623*f614a1e2SMaximilian Luz
624*f614a1e2SMaximilian LuzCancels detachment in progress (if any). If a detachment process is canceled
625*f614a1e2SMaximilian Luzby this operation, a generic detachment request event
626*f614a1e2SMaximilian Luz(``SDTX_EVENT_REQUEST``) will be sent.
627*f614a1e2SMaximilian Luz
628*f614a1e2SMaximilian LuzThis command will be silently ignored if there is currently no detachment
629*f614a1e2SMaximilian Luzprocedure in progress.
630*f614a1e2SMaximilian Luz
631*f614a1e2SMaximilian Luz``SDTX_IOCTL_GET_BASE_INFO``
632*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^^
633*f614a1e2SMaximilian Luz
634*f614a1e2SMaximilian LuzDefined as ``_IOR(0xA5, 0x29, struct sdtx_base_info)``.
635*f614a1e2SMaximilian Luz
636*f614a1e2SMaximilian LuzGet the current base connection state (i.e. attached/detached) and the type
637*f614a1e2SMaximilian Luzof the base connected to the clipboard. This is command essentially provides
638*f614a1e2SMaximilian Luza way to query the information provided by the base connection change event
639*f614a1e2SMaximilian Luz(``SDTX_EVENT_BASE_CONNECTION``).
640*f614a1e2SMaximilian Luz
641*f614a1e2SMaximilian LuzPossible values for ``struct sdtx_base_info.state`` are:
642*f614a1e2SMaximilian Luz
643*f614a1e2SMaximilian Luz* ``SDTX_BASE_DETACHED``,
644*f614a1e2SMaximilian Luz* ``SDTX_BASE_ATTACHED``, and
645*f614a1e2SMaximilian Luz* ``SDTX_DETACH_NOT_FEASIBLE``.
646*f614a1e2SMaximilian Luz
647*f614a1e2SMaximilian LuzOther values are reserved for future use.
648*f614a1e2SMaximilian Luz
649*f614a1e2SMaximilian Luz``SDTX_IOCTL_GET_DEVICE_MODE``
650*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
651*f614a1e2SMaximilian Luz
652*f614a1e2SMaximilian LuzDefined as ``_IOR(0xA5, 0x2A, __u16)``.
653*f614a1e2SMaximilian Luz
654*f614a1e2SMaximilian LuzReturns the device operation mode, indicating if and how the base is
655*f614a1e2SMaximilian Luzattached to the clipboard. This is command essentially provides a way to
656*f614a1e2SMaximilian Luzquery the information provided by the device mode change event
657*f614a1e2SMaximilian Luz(``SDTX_EVENT_DEVICE_MODE``).
658*f614a1e2SMaximilian Luz
659*f614a1e2SMaximilian LuzReturned values are:
660*f614a1e2SMaximilian Luz
661*f614a1e2SMaximilian Luz* ``SDTX_DEVICE_MODE_LAPTOP``
662*f614a1e2SMaximilian Luz* ``SDTX_DEVICE_MODE_TABLET``
663*f614a1e2SMaximilian Luz* ``SDTX_DEVICE_MODE_STUDIO``
664*f614a1e2SMaximilian Luz
665*f614a1e2SMaximilian LuzSee |sdtx_device_mode| for details. Other values are reserved for future
666*f614a1e2SMaximilian Luzuse.
667*f614a1e2SMaximilian Luz
668*f614a1e2SMaximilian Luz
669*f614a1e2SMaximilian Luz``SDTX_IOCTL_GET_LATCH_STATUS``
670*f614a1e2SMaximilian Luz^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
671*f614a1e2SMaximilian Luz
672*f614a1e2SMaximilian LuzDefined as ``_IOR(0xA5, 0x2B, __u16)``.
673*f614a1e2SMaximilian Luz
674*f614a1e2SMaximilian LuzGet the current latch status or (presumably) the last error encountered when
675*f614a1e2SMaximilian Luztrying to open/close the latch. This is command essentially provides a way
676*f614a1e2SMaximilian Luzto query the information provided by the latch status change event
677*f614a1e2SMaximilian Luz(``SDTX_EVENT_LATCH_STATUS``).
678*f614a1e2SMaximilian Luz
679*f614a1e2SMaximilian LuzReturned values are:
680*f614a1e2SMaximilian Luz
681*f614a1e2SMaximilian Luz* ``SDTX_LATCH_CLOSED``,
682*f614a1e2SMaximilian Luz* ``SDTX_LATCH_OPENED``,
683*f614a1e2SMaximilian Luz* ``SDTX_ERR_FAILED_TO_OPEN``,
684*f614a1e2SMaximilian Luz* ``SDTX_ERR_FAILED_TO_REMAIN_OPEN``, and
685*f614a1e2SMaximilian Luz* ``SDTX_ERR_FAILED_TO_CLOSE``.
686*f614a1e2SMaximilian Luz
687*f614a1e2SMaximilian LuzOther values are reserved for future use.
688*f614a1e2SMaximilian Luz
689*f614a1e2SMaximilian LuzA Note on Base IDs
690*f614a1e2SMaximilian Luz------------------
691*f614a1e2SMaximilian Luz
692*f614a1e2SMaximilian LuzBase types/IDs provided via ``SDTX_EVENT_BASE_CONNECTION`` or
693*f614a1e2SMaximilian Luz``SDTX_IOCTL_GET_BASE_INFO`` are directly forwarded from the EC in the lower
694*f614a1e2SMaximilian Luzbyte of the combined |__u16| value, with the driver storing the EC type from
695*f614a1e2SMaximilian Luzwhich this ID comes in the high byte (without this, base IDs over different
696*f614a1e2SMaximilian Luztypes of ECs may be overlapping).
697*f614a1e2SMaximilian Luz
698*f614a1e2SMaximilian LuzThe ``SDTX_DEVICE_TYPE()`` macro can be used to determine the EC device
699*f614a1e2SMaximilian Luztype. This can be one of
700*f614a1e2SMaximilian Luz
701*f614a1e2SMaximilian Luz* ``SDTX_DEVICE_TYPE_HID``, for Surface Aggregator Module over HID, and
702*f614a1e2SMaximilian Luz
703*f614a1e2SMaximilian Luz* ``SDTX_DEVICE_TYPE_SSH``, for Surface Aggregator Module over Surface Serial
704*f614a1e2SMaximilian Luz  Hub.
705*f614a1e2SMaximilian Luz
706*f614a1e2SMaximilian LuzNote that currently only the ``SSH`` type EC is supported, however ``HID``
707*f614a1e2SMaximilian Luztype is reserved for future use.
708*f614a1e2SMaximilian Luz
709*f614a1e2SMaximilian LuzStructures and Enums
710*f614a1e2SMaximilian Luz--------------------
711*f614a1e2SMaximilian Luz
712*f614a1e2SMaximilian Luz.. kernel-doc:: include/uapi/linux/surface_aggregator/dtx.h
713*f614a1e2SMaximilian Luz
714*f614a1e2SMaximilian LuzAPI Users
715*f614a1e2SMaximilian Luz=========
716*f614a1e2SMaximilian Luz
717*f614a1e2SMaximilian LuzA user-space daemon utilizing this API can be found at
718*f614a1e2SMaximilian Luzhttps://github.com/linux-surface/surface-dtx-daemon.
719