sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget=/translations/zh_CN/driver-api/surface_aggregator/clients/sanmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget=/translations/zh_TW/driver-api/surface_aggregator/clients/sanmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget=/translations/it_IT/driver-api/surface_aggregator/clients/sanmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget=/translations/ja_JP/driver-api/surface_aggregator/clients/sanmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget=/translations/ko_KR/driver-api/surface_aggregator/clients/sanmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget=/translations/sp_SP/driver-api/surface_aggregator/clients/sanmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h!SPDX-License-Identifier: GPL-2.0+h]h!SPDX-License-Identifier: GPL-2.0+}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san.rsthKubhsubstitution_definition)}(h8.. |san_client_link| replace:: :c:func:`san_client_link`h]h)}(h:c:func:`san_client_link`h]hliteral)}(hhh]hsan_client_link()}(hhhhhNhNubah}(h]h ](xrefcc-funceh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdoc)driver-api/surface_aggregator/clients/san refdomainhˌreftypefunc refexplicitrefwarn reftargetsan_client_linkuh1hhhhKhhubah}(h]h ]h"]san_client_linkah$]h&]uh1hhhhKhhhhubh)}(hN.. |san_dgpu_notifier_register| replace:: :c:func:`san_dgpu_notifier_register`h]h)}(h$:c:func:`san_dgpu_notifier_register`h]h)}(hhh]hsan_dgpu_notifier_register()}(hhhhhNhNubah}(h]h ](hhˌc-funceh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypefunc refexplicitrefwarnh݌san_dgpu_notifier_registeruh1hhhhKhhubah}(h]h ]h"]san_dgpu_notifier_registerah$]h&]uh1hhhhKhhhhubh)}(hS.. |san_dgpu_notifier_unregister| replace:: :c:func:`san_dgpu_notifier_unregister` h]h)}(h&:c:func:`san_dgpu_notifier_unregister`h]h)}(hjh]hsan_dgpu_notifier_unregister()}(hjhhhNhNubah}(h]h ](hhˌc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypefunc refexplicitrefwarnh݌san_dgpu_notifier_unregisteruh1hhhhKhjubah}(h]h ]h"]san_dgpu_notifier_unregisterah$]h&]uh1hhhhKhhhhubhsection)}(hhh](htitle)}(hSurface ACPI Notifyh]hSurface ACPI Notify}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hj<hhhhhK ubh paragraph)}(hXgThe Surface ACPI Notify (SAN) device provides the bridge between ACPI and SAM controller. Specifically, ACPI code can execute requests and handle battery and thermal events via this interface. In addition to this, events relating to the discrete GPU (dGPU) of the Surface Book 2 can be sent from ACPI code (note: the Surface Book 3 uses a different method for this). The only currently known event sent via this interface is a dGPU power-on notification. While this driver handles the former part internally, it only relays the dGPU events to any other driver interested via its public API and does not handle them.h]hXgThe Surface ACPI Notify (SAN) device provides the bridge between ACPI and SAM controller. Specifically, ACPI code can execute requests and handle battery and thermal events via this interface. In addition to this, events relating to the discrete GPU (dGPU) of the Surface Book 2 can be sent from ACPI code (note: the Surface Book 3 uses a different method for this). The only currently known event sent via this interface is a dGPU power-on notification. While this driver handles the former part internally, it only relays the dGPU events to any other driver interested via its public API and does not handle them.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jOhhhK hj<hhubjP)}(hqThe public interface of this driver is split into two parts: Client registration and notifier-block registration.h]hqThe public interface of this driver is split into two parts: Client registration and notifier-block registration.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jOhhhKhj<hhubjP)}(hX1A client to the SAN interface can be linked as consumer to the SAN device via |san_client_link|. This can be used to ensure that the a client receiving dGPU events does not miss any events due to the SAN interface not being set up as this forces the client driver to unbind once the SAN driver is unbound.h](hNA client to the SAN interface can be linked as consumer to the SAN device via }(hjmhhhNhNubh)}(hhh]h)}(hhh]hsan_client_link()}(hjxhhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhjuubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypehڌ refexplicitrefwarn reftargethuh1hhhhKhjmhhubh. This can be used to ensure that the a client receiving dGPU events does not miss any events due to the SAN interface not being set up as this forces the client driver to unbind once the SAN driver is unbound.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jOhhhKhj<hhubjP)}(hXNotifier-blocks can be registered by any device for as long as the module is loaded, regardless of being linked as client or not. Registration is done with |san_dgpu_notifier_register|. If the notifier is not needed any more, it should be unregistered via |san_dgpu_notifier_unregister|.h](hNotifier-blocks can be registered by any device for as long as the module is loaded, regardless of being linked as client or not. Registration is done with }(hjhhhNhNubh)}(hhh]h)}(hhh]hsan_dgpu_notifier_register()}(hjhhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhjubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypej refexplicitrefwarn reftargetjuh1hhhhKhjhhubhH. If the notifier is not needed any more, it should be unregistered via }(hjhhhNhNubh)}(hjh]h)}(hjh]hsan_dgpu_notifier_unregister()}(hjhhhNhNubah}(h]h ](hhj"eh"]h$]h&]uh1hhNhNhjubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypej/ refexplicitrefwarn reftargetj2uh1hhhhKhjhhubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jOhhhKhj<hhubjP)}(h5Consult the API documentation below for more details.h]h5Consult the API documentation below for more details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jOhhhK#hj<hhubj;)}(hhh](j@)}(hAPI Documentationh]hAPI Documentation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjhhhhhK'ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlesan_dgpu_event (C struct)c.san_dgpu_eventhNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hsan_dgpu_eventh]hdesc_signature_line)}(hstruct san_dgpu_eventh](hdesc_sig_keyword)}(hstructh]hstruct}(hj,hhhNhNubah}(h]h ]kah"]h$]h&]uh1j*hj&hhh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhKubhdesc_sig_space)}(h h]h }(hj>hhhNhNubah}(h]h ]wah"]h$]h&]uh1j<hj&hhhj;hKubh desc_name)}(hsan_dgpu_eventh]h desc_sig_name)}(hj"h]hsan_dgpu_event}(hjUhhhNhNubah}(h]h ]nah"]h$]h&]uh1jShjOubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jMhj&hhhj;hKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1j$sphinx_line_type declaratorhj hhhj;hKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj;hKhjhhubh desc_content)}(hhh]jP)}(hDiscrete GPU ACPI event.h]hDiscrete GPU ACPI event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jOh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj;hKubeh}(h]h ](hˌstructeh"]h$]h&]domainhˌobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX**Definition**:: struct san_dgpu_event { u8 category; u8 target; u8 command; u8 instance; u16 length; u8 *payload; }; **Members** ``category`` Category of the event. ``target`` Target ID of the event source. ``command`` Command ID of the event. ``instance`` Instance ID of the event source. ``length`` Length of the event's payload data (in bytes). ``payload`` Pointer to the event's payload data.h](jP)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jOh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhKhjubh literal_block)}(h|struct san_dgpu_event { u8 category; u8 target; u8 command; u8 instance; u16 length; u8 *payload; };h]h|struct san_dgpu_event { u8 category; u8 target; u8 command; u8 instance; u16 length; u8 *payload; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhKhjubjP)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jOh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhK!hjubhdefinition_list)}(hhh](hdefinition_list_item)}(h$``category`` Category of the event. h](hterm)}(h ``category``h]h)}(hjh]hcategory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhKhjubh definition)}(hhh]jP)}(hCategory of the event.h]hCategory of the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jOhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h*``target`` Target ID of the event source. h](j)}(h ``target``h]h)}(hj>h]htarget}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]uh1jh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhKhj8ubj)}(hhh]jP)}(hTarget ID of the event source.h]hTarget ID of the event source.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jOhjShKhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShKhjubj)}(h%``command`` Command ID of the event. h](j)}(h ``command``h]h)}(hjwh]hcommand}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&]uh1jh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhKhjqubj)}(hhh]jP)}(hCommand ID of the event.h]hCommand ID of the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jOhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``instance`` Instance ID of the event source. h](j)}(h ``instance``h]h)}(hjh]hinstance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhKhjubj)}(hhh]jP)}(h Instance ID of the event source.h]h Instance ID of the event source.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jOhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h:``length`` Length of the event's payload data (in bytes). h](j)}(h ``length``h]h)}(hjh]hlength}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhKhjubj)}(hhh]jP)}(h.Length of the event's payload data (in bytes).h]h0Length of the event’s payload data (in bytes).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jOhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h0``payload`` Pointer to the event's payload data.h](j)}(h ``payload``h]h)}(hj"h]hpayload}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhKhjubj)}(hhh]jP)}(h$Pointer to the event's payload data.h]h&Pointer to the event’s payload data.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jOh}/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:41: ./include/linux/surface_acpi_notify.hhKhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jsan_client_link (C function)c.san_client_linkhNtauh1jhjhhhNhNubj)}(hhh](j)}(h+int san_client_link (struct device *client)h]j%)}(h*int san_client_link(struct device *client)h](hdesc_sig_keyword_type)}(hinth]hint}(hj~hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j|hjxhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKVubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjxhhhjhKVubjN)}(hsan_client_linkh]jT)}(hsan_client_linkh]hsan_client_link}(hjhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jShjubah}(h]h ](jfjgeh"]h$]h&]hhuh1jMhjxhhhjhKVubhdesc_parameterlist)}(h(struct device *client)h]hdesc_parameter)}(hstruct device *clienth](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]jT)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jShjubah}(h]h ]h"]h$]h&] refdomainhˌreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjsbc.san_client_linkasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubjT)}(hclienth]hclient}(hj%hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjxhhhjhKVubeh}(h]h ]h"]h$]h&]hhjquh1j$jrjshjthhhjhKVubah}(h]joah ](jwjxeh"]h$]h&]j|j})j~huh1jhjhKVhjqhhubj)}(hhh]jP)}(h&Link client as consumer to SAN device.h]h&Link client as consumer to SAN device.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jOh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKGhjLhhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhKVubeh}(h]h ](hˌfunctioneh"]h$]h&]jhjjgjjgjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct device *client`` The client to link. **Description** Sets up a device link between the provided client device as consumer and the SAN device as provider. This function can be used to ensure that the SAN interface has been set up and will be set up for as long as the driver of the client device is bound. This guarantees that, during that time, all dGPU events will be received by any registered notifier. The link will be automatically removed once the client device's driver is unbound. **Return** Returns zero on success, ``-ENXIO`` if the SAN interface has not been set up yet, and ``-ENOMEM`` if device link creation failed.h](jP)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jOh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKKhjkubj)}(hhh]j)}(h.``struct device *client`` The client to link. h](j)}(h``struct device *client``h]h)}(hjh]hstruct device *client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKHhjubj)}(hhh]jP)}(hThe client to link.h]hThe client to link.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jOhjhKHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKHhjubah}(h]h ]h"]h$]h&]uh1jhjkubjP)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jOh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKJhjkubjP)}(hX`Sets up a device link between the provided client device as consumer and the SAN device as provider. This function can be used to ensure that the SAN interface has been set up and will be set up for as long as the driver of the client device is bound. This guarantees that, during that time, all dGPU events will be received by any registered notifier.h]hX`Sets up a device link between the provided client device as consumer and the SAN device as provider. This function can be used to ensure that the SAN interface has been set up and will be set up for as long as the driver of the client device is bound. This guarantees that, during that time, all dGPU events will be received by any registered notifier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jOh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKJhjkubjP)}(hRThe link will be automatically removed once the client device's driver is unbound.h]hTThe link will be automatically removed once the client device’s driver is unbound.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jOh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKPhjkubjP)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jOh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKShjkubjP)}(hReturns zero on success, ``-ENXIO`` if the SAN interface has not been set up yet, and ``-ENOMEM`` if device link creation failed.h](hReturns zero on success, }(hjhhhNhNubh)}(h ``-ENXIO``h]h-ENXIO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh3 if the SAN interface has not been set up yet, and }(hjhhhNhNubh)}(h ``-ENOMEM``h]h-ENOMEM}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh if device link creation failed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jOh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKShjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j'san_dgpu_notifier_register (C function)c.san_dgpu_notifier_registerhNtauh1jhjhhhNhNubj)}(hhh](j)}(h:int san_dgpu_notifier_register (struct notifier_block *nb)h]j%)}(h9int san_dgpu_notifier_register(struct notifier_block *nb)h](j})}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j|hjfhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKzubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfhhhjxhKzubjN)}(hsan_dgpu_notifier_registerh]jT)}(hsan_dgpu_notifier_registerh]hsan_dgpu_notifier_register}(hjhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jShjubah}(h]h ](jfjgeh"]h$]h&]hhuh1jMhjfhhhjxhKzubj)}(h(struct notifier_block *nb)h]j)}(hstruct notifier_block *nbh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]jT)}(hnotifier_blockh]hnotifier_block}(hjhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jShjubah}(h]h ]h"]h$]h&] refdomainhˌreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.san_dgpu_notifier_registerasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubjT)}(hnbh]hnb}(hjhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjfhhhjxhKzubeh}(h]h ]h"]h$]h&]hhjquh1j$jrjshjbhhhjxhKzubah}(h]j]ah ](jwjxeh"]h$]h&]j|j})j~huh1jhjxhKzhj_hhubj)}(hhh]jP)}(hRegister a SAN dGPU notifier.h]hRegister a SAN dGPU notifier.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jOh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKshj'hhubah}(h]h ]h"]h$]h&]uh1jhj_hhhjxhKzubeh}(h]h ](hˌfunctioneh"]h$]h&]jhjjBjjBjjjuh1jhhhjhNhNubj)}(hXU**Parameters** ``struct notifier_block *nb`` The notifier-block to register. **Description** Registers a SAN dGPU notifier, receiving any new SAN dGPU events sent from ACPI. The registered notifier will be called with :c:type:`struct san_dgpu_event ` as notifier data and the command ID of that event as notifier action.h](jP)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jOh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKwhjFubj)}(hhh]j)}(h>``struct notifier_block *nb`` The notifier-block to register. h](j)}(h``struct notifier_block *nb``h]h)}(hjkh]hstruct notifier_block *nb}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKthjeubj)}(hhh]jP)}(hThe notifier-block to register.h]hThe notifier-block to register.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jOhjhKthjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhKthjbubah}(h]h ]h"]h$]h&]uh1jhjFubjP)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jOh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKvhjFubjP)}(hRegisters a SAN dGPU notifier, receiving any new SAN dGPU events sent from ACPI. The registered notifier will be called with :c:type:`struct san_dgpu_event ` as notifier data and the command ID of that event as notifier action.h](h}Registers a SAN dGPU notifier, receiving any new SAN dGPU events sent from ACPI. The registered notifier will be called with }(hjhhhNhNubh)}(h0:c:type:`struct san_dgpu_event `h]h)}(hjh]hstruct san_dgpu_event}(hjhhhNhNubah}(h]h ](hhˌc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypetype refexplicitrefwarnjj)}j]sbh݌san_dgpu_eventuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/san:43: ./drivers/platform/surface/surface_acpi_notify.chKvhjubhF as notifier data and the command ID of that event as notifier action.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jOhjhKvhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j)san_dgpu_notifier_unregister (C function)c.san_dgpu_notifier_unregisterhNtauh1jhjhhhNhNubj)}(hhh](j)}(h