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