sphinx.addnodesdocument)}( rawsourcechildren](docutils.nodessubstitution_definition)}(h&.. |AArch32| replace:: :term:`AArch32`h]h pending_xref)}(h:term:`AArch32`h]h inline)}(hhh]h TextAArch32}(hhparenthuba attributes}(ids]classes](xrefstdstd-termenames]dupnames]backrefs]utagnamehh!hubah"}(h$]h&]h+]h-]h/]refdoccomponents/sdei refdomainh)reftypeterm refexplicitrefwarn reftargetAArch32uh1hsource lineKh!h ubah"}(h$]h&]h+]AArch32ah-]h/]uh1h hAhBhCKh!hhhubh )}(h&.. |AArch64| replace:: :term:`AArch64`h]h)}(h:term:`AArch64`h]h)}(hhQh]hAArch64}(hhh!hSubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hOubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainh]reftypeterm refexplicitrefwarnh?AArch64uh1hhAhBhCKh!hKubah"}(h$]h&]h+]AArch64ah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |AMU| replace:: :term:`AMU`h]h)}(h :term:`AMU`h]h)}(hh|h]hAMU}(hhh!h~ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hzubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainhreftypeterm refexplicitrefwarnh?AMUuh1hhAhBhCKh!hvubah"}(h$]h&]h+]AMUah-]h/]uh1h hAhBhCKh!hhhubh )}(h&.. |AMUs| replace:: :term:`AMUs `h]h)}(h:term:`AMUs `h]h)}(hhh]hAMUs}(hhh!hubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainhreftypeterm refexplicitrefwarnh?AMUuh1hhAhBhCKh!hubah"}(h$]h&]h+]AMUsah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |API| replace:: :term:`API`h]h)}(h :term:`API`h]h)}(hhh]hAPI}(hhh!hubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainhތreftypeterm refexplicitrefwarnh?APIuh1hhAhBhCKh!hubah"}(h$]h&]h+]APIah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |BTI| replace:: :term:`BTI`h]h)}(h :term:`BTI`h]h)}(hhh]hBTI}(hhh!hubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?BTIuh1hhAhBhCKh!hubah"}(h$]h&]h+]BTIah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |CoT| replace:: :term:`CoT`h]h)}(h :term:`CoT`h]h)}(hj(h]hCoT}(hhh!j*ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j&ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj4reftypeterm refexplicitrefwarnh?CoTuh1hhAhBhCKh!j"ubah"}(h$]h&]h+]CoTah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |COT| replace:: :term:`COT`h]h)}(h :term:`COT`h]h)}(hjSh]hCOT}(hhh!jUubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jQubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj_reftypeterm refexplicitrefwarnh?COTuh1hhAhBhCKh!jMubah"}(h$]h&]h+]COTah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |CSS| replace:: :term:`CSS`h]h)}(h :term:`CSS`h]h)}(hj~h]hCSS}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j|ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?CSSuh1hhAhBhCK h!jxubah"}(h$]h&]h+]CSSah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |CVE| replace:: :term:`CVE`h]h)}(h :term:`CVE`h]h)}(hjh]hCVE}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?CVEuh1hhAhBhCK h!jubah"}(h$]h&]h+]CVEah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |DTB| replace:: :term:`DTB`h]h)}(h :term:`DTB`h]h)}(hjh]hDTB}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?DTBuh1hhAhBhCK h!jubah"}(h$]h&]h+]DTBah-]h/]uh1h hAhBhCK h!hhhubh )}(h .. |DS-5| replace:: :term:`DS-5`h]h)}(h :term:`DS-5`h]h)}(hjh]hDS-5}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?DS-5uh1hhAhBhCK h!jubah"}(h$]h&]h+]DS-5ah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |DSU| replace:: :term:`DSU`h]h)}(h :term:`DSU`h]h)}(hj*h]hDSU}(hhh!j,ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j(ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj6reftypeterm refexplicitrefwarnh?DSUuh1hhAhBhCK h!j$ubah"}(h$]h&]h+]DSUah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |DT| replace:: :term:`DT`h]h)}(h :term:`DT`h]h)}(hjUh]hDT}(hhh!jWubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jSubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjareftypeterm refexplicitrefwarnh?DTuh1hhAhBhCKh!jOubah"}(h$]h&]h+]DTah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |EL| replace:: :term:`EL`h]h)}(h :term:`EL`h]h)}(hjh]hEL}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j~ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?ELuh1hhAhBhCKh!jzubah"}(h$]h&]h+]ELah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |EHF| replace:: :term:`EHF`h]h)}(h :term:`EHF`h]h)}(hjh]hEHF}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?EHFuh1hhAhBhCKh!jubah"}(h$]h&]h+]EHFah-]h/]uh1h hAhBhCKh!hhhubh )}(h".. |FCONF| replace:: :term:`FCONF`h]h)}(h :term:`FCONF`h]h)}(hjh]hFCONF}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?FCONFuh1hhAhBhCKh!jubah"}(h$]h&]h+]FCONFah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FDT| replace:: :term:`FDT`h]h)}(h :term:`FDT`h]h)}(hjh]hFDT}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?FDTuh1hhAhBhCKh!jubah"}(h$]h&]h+]FDTah-]h/]uh1h hAhBhCKh!hhhubh )}(h .. |FF-A| replace:: :term:`FF-A`h]h)}(h :term:`FF-A`h]h)}(hj,h]hFF-A}(hhh!j.ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j*ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj8reftypeterm refexplicitrefwarnh?FF-Auh1hhAhBhCKh!j&ubah"}(h$]h&]h+]FF-Aah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FIP| replace:: :term:`FIP`h]h)}(h :term:`FIP`h]h)}(hjWh]hFIP}(hhh!jYubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jUubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjcreftypeterm refexplicitrefwarnh?FIPuh1hhAhBhCKh!jQubah"}(h$]h&]h+]FIPah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FVP| replace:: :term:`FVP`h]h)}(h :term:`FVP`h]h)}(hjh]hFVP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?FVPuh1hhAhBhCKh!j|ubah"}(h$]h&]h+]FVPah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FWU| replace:: :term:`FWU`h]h)}(h :term:`FWU`h]h)}(hjh]hFWU}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?FWUuh1hhAhBhCKh!jubah"}(h$]h&]h+]FWUah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |GIC| replace:: :term:`GIC`h]h)}(h :term:`GIC`h]h)}(hjh]hGIC}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?GICuh1hhAhBhCKh!jubah"}(h$]h&]h+]GICah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |ISA| replace:: :term:`ISA`h]h)}(h :term:`ISA`h]h)}(hjh]hISA}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?ISAuh1hhAhBhCKh!jubah"}(h$]h&]h+]ISAah-]h/]uh1h hAhBhCKh!hhhubh )}(h$.. |Linaro| replace:: :term:`Linaro`h]h)}(h:term:`Linaro`h]h)}(hj.h]hLinaro}(hhh!j0ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j,ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj:reftypeterm refexplicitrefwarnh?Linarouh1hhAhBhCKh!j(ubah"}(h$]h&]h+]Linaroah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |MMU| replace:: :term:`MMU`h]h)}(h :term:`MMU`h]h)}(hjYh]hMMU}(hhh!j[ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jWubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjereftypeterm refexplicitrefwarnh?MMUuh1hhAhBhCKh!jSubah"}(h$]h&]h+]MMUah-]h/]uh1h hAhBhCKh!hhhubh )}(h .. |MPAM| replace:: :term:`MPAM`h]h)}(h :term:`MPAM`h]h)}(hjh]hMPAM}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MPAMuh1hhAhBhCKh!j~ubah"}(h$]h&]h+]MPAMah-]h/]uh1h hAhBhCKh!hhhubh )}(h .. |MPMM| replace:: :term:`MPMM`h]h)}(h :term:`MPMM`h]h)}(hjh]hMPMM}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MPMMuh1hhAhBhCKh!jubah"}(h$]h&]h+]MPMMah-]h/]uh1h hAhBhCKh!hhhubh )}(h".. |MPIDR| replace:: :term:`MPIDR`h]h)}(h :term:`MPIDR`h]h)}(hjh]hMPIDR}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MPIDRuh1hhAhBhCKh!jubah"}(h$]h&]h+]MPIDRah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |MTE| replace:: :term:`MTE`h]h)}(h :term:`MTE`h]h)}(hjh]hMTE}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MTEuh1hhAhBhCKh!jubah"}(h$]h&]h+]MTEah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |OEN| replace:: :term:`OEN`h]h)}(h :term:`OEN`h]h)}(hj0h]hOEN}(hhh!j2ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j.ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj<reftypeterm refexplicitrefwarnh?OENuh1hhAhBhCKh!j*ubah"}(h$]h&]h+]OENah-]h/]uh1h hAhBhCKh!hhhubh )}(h$.. |OP-TEE| replace:: :term:`OP-TEE`h]h)}(h:term:`OP-TEE`h]h)}(hj[h]hOP-TEE}(hhh!j]ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jYubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjgreftypeterm refexplicitrefwarnh?OP-TEEuh1hhAhBhCK h!jUubah"}(h$]h&]h+]OP-TEEah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |OTE| replace:: :term:`OTE`h]h)}(h :term:`OTE`h]h)}(hjh]hOTE}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?OTEuh1hhAhBhCK!h!jubah"}(h$]h&]h+]OTEah-]h/]uh1h hAhBhCK!h!hhhubh )}(h.. |PDD| replace:: :term:`PDD`h]h)}(h :term:`PDD`h]h)}(hjh]hPDD}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?PDDuh1hhAhBhCK"h!jubah"}(h$]h&]h+]PDDah-]h/]uh1h hAhBhCK"h!hhhubh )}(h".. |PAUTH| replace:: :term:`PAUTH`h]h)}(h :term:`PAUTH`h]h)}(hjh]hPAUTH}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?PAUTHuh1hhAhBhCK#h!jubah"}(h$]h&]h+]PAUTHah-]h/]uh1h hAhBhCK#h!hhhubh )}(h.. |PMF| replace:: :term:`PMF`h]h)}(h :term:`PMF`h]h)}(hjh]hPMF}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?PMFuh1hhAhBhCK$h!jubah"}(h$]h&]h+]PMFah-]h/]uh1h hAhBhCK$h!hhhubh )}(h .. |PSCI| replace:: :term:`PSCI`h]h)}(h :term:`PSCI`h]h)}(hj2h]hPSCI}(hhh!j4ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j0ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj>reftypeterm refexplicitrefwarnh?PSCIuh1hhAhBhCK%h!j,ubah"}(h$]h&]h+]PSCIah-]h/]uh1h hAhBhCK%h!hhhubh )}(h.. |RAS| replace:: :term:`RAS`h]h)}(h :term:`RAS`h]h)}(hj]h]hRAS}(hhh!j_ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j[ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjireftypeterm refexplicitrefwarnh?RASuh1hhAhBhCK&h!jWubah"}(h$]h&]h+]RASah-]h/]uh1h hAhBhCK&h!hhhubh )}(h.. |ROT| replace:: :term:`ROT`h]h)}(h :term:`ROT`h]h)}(hjh]hROT}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?ROTuh1hhAhBhCK'h!jubah"}(h$]h&]h+]ROTah-]h/]uh1h hAhBhCK'h!hhhubh )}(h .. |SCMI| replace:: :term:`SCMI`h]h)}(h :term:`SCMI`h]h)}(hjh]hSCMI}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SCMIuh1hhAhBhCK(h!jubah"}(h$]h&]h+]SCMIah-]h/]uh1h hAhBhCK(h!hhhubh )}(h.. |SCP| replace:: :term:`SCP`h]h)}(h :term:`SCP`h]h)}(hjh]hSCP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SCPuh1hhAhBhCK)h!jubah"}(h$]h&]h+]SCPah-]h/]uh1h hAhBhCK)h!hhhubh )}(h .. |SDEI| replace:: :term:`SDEI`h]h)}(h :term:`SDEI`h]h)}(hj h]hSDEI}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SDEIuh1hhAhBhCK*h!jubah"}(h$]h&]h+]SDEIah-]h/]uh1h hAhBhCK*h!hhhubh )}(h.. |SDS| replace:: :term:`SDS`h]h)}(h :term:`SDS`h]h)}(hj4h]hSDS}(hhh!j6ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j2ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj@reftypeterm refexplicitrefwarnh?SDSuh1hhAhBhCK+h!j.ubah"}(h$]h&]h+]SDSah-]h/]uh1h hAhBhCK+h!hhhubh )}(h.. |SEA| replace:: :term:`SEA`h]h)}(h :term:`SEA`h]h)}(hj_h]hSEA}(hhh!jaubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j]ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjkreftypeterm refexplicitrefwarnh?SEAuh1hhAhBhCK,h!jYubah"}(h$]h&]h+]SEAah-]h/]uh1h hAhBhCK,h!hhhubh )}(h.. |SiP| replace:: :term:`SiP`h]h)}(h :term:`SiP`h]h)}(hjh]hSiP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SiPuh1hhAhBhCK-h!jubah"}(h$]h&]h+]SiPah-]h/]uh1h hAhBhCK-h!hhhubh )}(h.. |SIP| replace:: :term:`SIP`h]h)}(h :term:`SIP`h]h)}(hjh]hSIP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SIPuh1hhAhBhCK.h!jubah"}(h$]h&]h+]SIPah-]h/]uh1h hAhBhCK.h!hhhubh )}(h.. |SMC| replace:: :term:`SMC`h]h)}(h :term:`SMC`h]h)}(hjh]hSMC}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SMCuh1hhAhBhCK/h!jubah"}(h$]h&]h+]SMCah-]h/]uh1h hAhBhCK/h!hhhubh )}(h".. |SMCCC| replace:: :term:`SMCCC`h]h)}(h :term:`SMCCC`h]h)}(hj h]hSMCCC}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SMCCCuh1hhAhBhCK0h!jubah"}(h$]h&]h+]SMCCCah-]h/]uh1h hAhBhCK0h!hhhubh )}(h.. |SoC| replace:: :term:`SoC`h]h)}(h :term:`SoC`h]h)}(hj6h]hSoC}(hhh!j8ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j4ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjBreftypeterm refexplicitrefwarnh?SoCuh1hhAhBhCK1h!j0ubah"}(h$]h&]h+]SoCah-]h/]uh1h hAhBhCK1h!hhhubh )}(h.. |SP| replace:: :term:`SP`h]h)}(h :term:`SP`h]h)}(hjah]hSP}(hhh!jcubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j_ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjmreftypeterm refexplicitrefwarnh?SPuh1hhAhBhCK2h!j[ubah"}(h$]h&]h+]SPah-]h/]uh1h hAhBhCK2h!hhhubh )}(h.. |SPD| replace:: :term:`SPD`h]h)}(h :term:`SPD`h]h)}(hjh]hSPD}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SPDuh1hhAhBhCK3h!jubah"}(h$]h&]h+]SPDah-]h/]uh1h hAhBhCK3h!hhhubh )}(h.. |SPM| replace:: :term:`SPM`h]h)}(h :term:`SPM`h]h)}(hjh]hSPM}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SPMuh1hhAhBhCK4h!jubah"}(h$]h&]h+]SPMah-]h/]uh1h hAhBhCK4h!hhhubh )}(h .. |SSBS| replace:: :term:`SSBS`h]h)}(h :term:`SSBS`h]h)}(hjh]hSSBS}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SSBSuh1hhAhBhCK5h!jubah"}(h$]h&]h+]SSBSah-]h/]uh1h hAhBhCK5h!hhhubh )}(h.. |SVE| replace:: :term:`SVE`h]h)}(h :term:`SVE`h]h)}(hj h]hSVE}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?SVEuh1hhAhBhCK6h!j ubah"}(h$]h&]h+]SVEah-]h/]uh1h hAhBhCK6h!hhhubh )}(h.. |TBB| replace:: :term:`TBB`h]h)}(h :term:`TBB`h]h)}(hj8 h]hTBB}(hhh!j: ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j6 ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjD reftypeterm refexplicitrefwarnh?TBBuh1hhAhBhCK7h!j2 ubah"}(h$]h&]h+]TBBah-]h/]uh1h hAhBhCK7h!hhhubh )}(h .. |TBBR| replace:: :term:`TBBR`h]h)}(h :term:`TBBR`h]h)}(hjc h]hTBBR}(hhh!je ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!ja ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjo reftypeterm refexplicitrefwarnh?TBBRuh1hhAhBhCK8h!j] ubah"}(h$]h&]h+]TBBRah-]h/]uh1h hAhBhCK8h!hhhubh )}(h.. |TEE| replace:: :term:`TEE`h]h)}(h :term:`TEE`h]h)}(hj h]hTEE}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TEEuh1hhAhBhCK9h!j ubah"}(h$]h&]h+]TEEah-]h/]uh1h hAhBhCK9h!hhhubh )}(h .. |TF-A| replace:: :term:`TF-A`h]h)}(h :term:`TF-A`h]h)}(hj h]hTF-A}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TF-Auh1hhAhBhCK:h!j ubah"}(h$]h&]h+]TF-Aah-]h/]uh1h hAhBhCK:h!hhhubh )}(h .. |TF-M| replace:: :term:`TF-M`h]h)}(h :term:`TF-M`h]h)}(hj h]hTF-M}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TF-Muh1hhAhBhCK;h!j ubah"}(h$]h&]h+]TF-Mah-]h/]uh1h hAhBhCK;h!hhhubh )}(h.. |TLB| replace:: :term:`TLB`h]h)}(h :term:`TLB`h]h)}(hj h]hTLB}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TLBuh1hhAhBhCKh!j_ ubah"}(h$]h&]h+]TRNGah-]h/]uh1h hAhBhCK>h!hhhubh )}(h.. |TSP| replace:: :term:`TSP`h]h)}(h :term:`TSP`h]h)}(hj h]hTSP}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TSPuh1hhAhBhCK?h!j ubah"}(h$]h&]h+]TSPah-]h/]uh1h hAhBhCK?h!hhhubh )}(h.. |TZC| replace:: :term:`TZC`h]h)}(h :term:`TZC`h]h)}(hj h]hTZC}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TZCuh1hhAhBhCK@h!j ubah"}(h$]h&]h+]TZCah-]h/]uh1h hAhBhCK@h!hhhubh )}(h".. |UBSAN| replace:: :term:`UBSAN`h]h)}(h :term:`UBSAN`h]h)}(hj h]hUBSAN}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?UBSANuh1hhAhBhCKAh!j ubah"}(h$]h&]h+]UBSANah-]h/]uh1h hAhBhCKAh!hhhubh )}(h .. |UEFI| replace:: :term:`UEFI`h]h)}(h :term:`UEFI`h]h)}(hj h]hUEFI}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?UEFIuh1hhAhBhCKBh!j ubah"}(h$]h&]h+]UEFIah-]h/]uh1h hAhBhCKBh!hhhubh )}(h .. |WDOG| replace:: :term:`WDOG`h]h)}(h :term:`WDOG`h]h)}(hj< h]hWDOG}(hhh!j> ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j: ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjH reftypeterm refexplicitrefwarnh?WDOGuh1hhAhBhCKCh!j6 ubah"}(h$]h&]h+]WDOGah-]h/]uh1h hAhBhCKCh!hhhubh )}(h!.. |XLAT| replace:: :term:`XLAT` h]h)}(h :term:`XLAT`h]h)}(hjg h]hXLAT}(hhh!ji ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!je ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjs reftypeterm refexplicitrefwarnh?XLATuh1hhAhBhCKDh!ja ubah"}(h$]h&]h+]XLATah-]h/]uh1h hAhBhCKDh!hhhubh section)}(hhh](h title)}(h,SDEI: Software Delegated Exception Interfaceh]h,SDEI: Software Delegated Exception Interface}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAP/home/test/workspace/code/optee_3.16/trusted-firmware-a/docs/components/sdei.rsthCKubh paragraph)}(hfThis document provides an overview of the SDEI dispatcher implementation in Trusted Firmware-A (TF-A).h]hfThis document provides an overview of the SDEI dispatcher implementation in Trusted Firmware-A (TF-A).}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hhh](j )}(h Introductionh]h Introduction}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAj hCKubj )}(hXTSoftware Delegated Exception Interface (|SDEI|) is an Arm specification for Non-secure world to register handlers with firmware to receive notifications about system events. Firmware will first receive the system events by way of asynchronous exceptions and, in response, arranges for the registered handler to execute in the Non-secure EL.h](h(Software Delegated Exception Interface (}(h(Software Delegated Exception Interface (h!j hhhANhCNubh)}(hj h]h)}(hj h]hSDEI}(hhh!j ubah"}(h$]h&](h(jjeh+]h-]h/]uh1hhANhCNh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypej# refexplicitrefwarn reftargetj&uh1hhAhBhCK*h!j hhubhX&) is an Arm specification for Non-secure world to register handlers with firmware to receive notifications about system events. Firmware will first receive the system events by way of asynchronous exceptions and, in response, arranges for the registered handler to execute in the Non-secure EL.}(hX&) is an Arm specification for Non-secure world to register handlers with firmware to receive notifications about system events. Firmware will first receive the system events by way of asynchronous exceptions and, in response, arranges for the registered handler to execute in the Non-secure EL.h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK h!j hhubj )}(hXNormal world software that interacts with the SDEI dispatcher (makes SDEI requests and receives notifications) is referred to as the *SDEI Client*. A client receives the event notification at the registered handler even when it was executing with exceptions masked. The list of SDEI events available to the client are specific to the platform [#std-event]_. See also `Determining client EL`_.h](hNormal world software that interacts with the SDEI dispatcher (makes SDEI requests and receives notifications) is referred to as the }(hNormal world software that interacts with the SDEI dispatcher (makes SDEI requests and receives notifications) is referred to as the h!j hhhANhCNubh emphasis)}(h *SDEI Client*h]h SDEI Client}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubh. A client receives the event notification at the registered handler even when it was executing with exceptions masked. The list of SDEI events available to the client are specific to the platform }(h. A client receives the event notification at the registered handler even when it was executing with exceptions masked. The list of SDEI events available to the client are specific to the platform h!j hhhANhCNubh footnote_reference)}(h [#std-event]_h]h1}(hhh!j ubah"}(h$]id1ah&]h+]h-]h/]autoKrefid std-eventdocnameh9uh1j h!j resolvedKubh . See also }(h . See also h!j hhhANhCNubh reference)}(h`Determining client EL`_h]hDetermining client EL}(hDetermining client ELh!j. ubah"}(h$]h&]h+]h-]h/]nameDetermining client ELj# determining-client-eluh1j, h!j j& Kubh.}(h.h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubh target)}(h.. _general SDEI dispatch:h]h"}(h$]h&]h+]h-]h/]j# general-sdei-dispatchuh1jK hCK\h!j hhhAj referencedKubj )}(hThe following figure depicts a general sequence involving SDEI client executing at EL2 and an event dispatch resulting from the triggering of a bound interrupt. A commentary is provided below:h]hThe following figure depicts a general sequence involving SDEI client executing at EL2 and an event dispatch resulting from the triggering of a bound interrupt. A commentary is provided below:}(hj[ h!jY hhhANhCNubah"}(h$]jW ah&]h+]general sdei dispatchah-]h/]uh1j hAj hCKh!j hhexpect_referenced_by_name}je jM sexpect_referenced_by_id}jW jM sjX Kubsphinxcontrib.plantumlplantuml)}(h:.. uml:: ../resources/diagrams/plantuml/sdei_general.puml h]h"}(h$]h&]h+]h-]h/]umlX/' ' Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. ' ' SPDX-License-Identifier: BSD-3-Clause '/ @startuml autonumber "[#]" participant "SDEI client" as EL2 participant EL3 participant "SDEI interrupt source" as SDEI activate EL2 EL2->EL3: **SDEI_INTERRUPT_BIND**(irq) EL3->EL2: event number: ev EL2->EL3: **SDEI_EVENT_REGISTER**(ev, handler, ...) EL3->EL2: success EL2->EL3: **SDEI_EVENT_ENABLE**(ev) EL3->EL2: success EL2->EL3: **SDEI_PE_UNMASK**() EL3->EL2: 1 ... <> ... SDEI-->EL3: SDEI interrupt activate SDEI #salmon activate EL3 #red note over EL3: Prepare SDEI dispatch EL3->EL2: dispatch activate EL2 #salmon note over EL2: SDEI handler EL2->EL3: **SDEI_EVENT_COMPLETE()** deactivate EL2 note over EL3: Complete SDEI dispatch EL3-->SDEI: EOI deactivate SDEI EL3->EL2: resumes preempted execution deactivate EL3 ... <> ... @enduml incdirresources/diagrams/plantumlfilenamesdei_general.pumluh1jm h!j hhhAj hCKubj )}(hXdAs part of initialisation, the SDEI client binds a Non-secure interrupt [1], and the SDEI dispatcher returns a platform dynamic event number [2]. The client then registers a handler for that event [3], enables the event [5], and unmasks all events on the current PE [7]. This sequence is typical of an SDEI client, but it may involve additional SDEI calls.h]hXdAs part of initialisation, the SDEI client binds a Non-secure interrupt [1], and the SDEI dispatcher returns a platform dynamic event number [2]. The client then registers a handler for that event [3], enables the event [5], and unmasks all events on the current PE [7]. This sequence is typical of an SDEI client, but it may involve additional SDEI calls.}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hXAt a later point in time, when the bound interrupt triggers [9], it's trapped to EL3. The interrupt is handed over to the SDEI dispatcher, which then arranges to execute the registered handler [10]. The client terminates its execution with ``SDEI_EVENT_COMPLETE`` [11], following which the dispatcher resumes the original EL2 execution [13]. Note that the SDEI interrupt remains active until the client handler completes, at which point EL3 does EOI [12].h](hAt a later point in time, when the bound interrupt triggers [9], it’s trapped to EL3. The interrupt is handed over to the SDEI dispatcher, which then arranges to execute the registered handler [10]. The client terminates its execution with }(hAt a later point in time, when the bound interrupt triggers [9], it's trapped to EL3. The interrupt is handed over to the SDEI dispatcher, which then arranges to execute the registered handler [10]. The client terminates its execution with h!j hhhANhCNubh literal)}(h``SDEI_EVENT_COMPLETE``h]hSDEI_EVENT_COMPLETE}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubh [11], following which the dispatcher resumes the original EL2 execution [13]. Note that the SDEI interrupt remains active until the client handler completes, at which point EL3 does EOI [12].}(h [11], following which the dispatcher resumes the original EL2 execution [13]. Note that the SDEI interrupt remains active until the client handler completes, at which point EL3 does EOI [12].h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK%h!j hhubj )}(hXOther than events bound to interrupts, as depicted in the sequence above, SDEI events can be explicitly dispatched in response to other exceptions, for example, upon receiving an *SError* or *Synchronous External Abort*. See `Explicit dispatch of events`_.h](hOther than events bound to interrupts, as depicted in the sequence above, SDEI events can be explicitly dispatched in response to other exceptions, for example, upon receiving an }(hOther than events bound to interrupts, as depicted in the sequence above, SDEI events can be explicitly dispatched in response to other exceptions, for example, upon receiving an h!j hhhANhCNubj )}(h*SError*h]hSError}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubh or }(h or h!j hhhANhCNubj )}(h*Synchronous External Abort*h]hSynchronous External Abort}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubh. See }(h. See h!j hhhANhCNubj- )}(h`Explicit dispatch of events`_h]hExplicit dispatch of events}(hExplicit dispatch of eventsh!j ubah"}(h$]h&]h+]h-]h/]nameExplicit dispatch of eventsj# id2uh1j, h!j j& Kubh.}(hjD h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK,h!j hhubj )}(hThe remainder of this document only discusses the design and implementation of SDEI dispatcher in TF-A, and assumes that the reader is familiar with the SDEI specification, the interfaces, and their requirements.h]hThe remainder of this document only discusses the design and implementation of SDEI dispatcher in TF-A, and assumes that the reader is familiar with the SDEI specification, the interfaces, and their requirements.}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK1h!j hhubeh"}(h$] introductionah&]h+] introductionah-]h/]uh1j h!j hhhAj hCKubj )}(hhh](j )}(hDefining eventsh]hDefining events}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAj hCK6ubj )}(hA platform choosing to include the SDEI dispatcher must also define the events available on the platform, along with their attributes.h]hA platform choosing to include the SDEI dispatcher must also define the events available on the platform, along with their attributes.}(hj% h!j# hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK8h!j hhubj )}(hXThe platform is expected to provide two arrays of event descriptors: one for private events, and another for shared events. The SDEI dispatcher provides ``SDEI_PRIVATE_EVENT()`` and ``SDEI_SHARED_EVENT()`` macros to populate the event descriptors. Both macros take 3 arguments:h](hThe platform is expected to provide two arrays of event descriptors: one for private events, and another for shared events. The SDEI dispatcher provides }(hThe platform is expected to provide two arrays of event descriptors: one for private events, and another for shared events. The SDEI dispatcher provides h!j1 hhhANhCNubj )}(h``SDEI_PRIVATE_EVENT()``h]hSDEI_PRIVATE_EVENT()}(hhh!j: ubah"}(h$]h&]h+]h-]h/]uh1j h!j1 ubh and }(h and h!j1 hhhANhCNubj )}(h``SDEI_SHARED_EVENT()``h]hSDEI_SHARED_EVENT()}(hhh!jM ubah"}(h$]h&]h+]h-]h/]uh1j h!j1 ubhH macros to populate the event descriptors. Both macros take 3 arguments:}(hH macros to populate the event descriptors. Both macros take 3 arguments:h!j1 hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK;h!j hhubh bullet_list)}(hhh](h list_item)}(h:The event number: this must be a positive 32-bit integer. h]j )}(h9The event number: this must be a positive 32-bit integer.h]h9The event number: this must be a positive 32-bit integer.}(hjs h!jq ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK@h!jm ubah"}(h$]h&]h+]h-]h/]uh1jk h!jh hhhAj hCNubjl )}(hFor an event that has a backing interrupt, the interrupt number the event is bound to: - If it's not applicable to an event, this shall be left as ``0``. - If the event is dynamic, this should be specified as ``SDEI_DYN_IRQ``. h](j )}(hVFor an event that has a backing interrupt, the interrupt number the event is bound to:h]hVFor an event that has a backing interrupt, the interrupt number the event is bound to:}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKBh!j ubjg )}(hhh](jl )}(hAIf it's not applicable to an event, this shall be left as ``0``. h]j )}(h@If it's not applicable to an event, this shall be left as ``0``.h](hubah"}(h$]h&]h+]h-]h/]uh1j h!j5ubh4. Additionally, on GICv2 systems, the build option }(h4. Additionally, on GICv2 systems, the build option h!j5ubj )}(h``GICV2_G0_FOR_EL3``h]hGICV2_G0_FOR_EL3}(hhh!jQubah"}(h$]h&]h+]h-]h/]uh1j h!j5ubh must be set to }(h must be set to h!j5ubj )}(h``1``h]h1}(hhh!jdubah"}(h$]h&]h+]h-]h/]uh1j h!j5ubh.}(hjD h!j5ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jubeh"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubeh"}(h$]h&]h+]h-]h/]j j uh1jf hAj hCKh!jhhubj )}(h0See also :ref:`porting_guide_sdei_requirements`.h](h See also }(h See also h!jhhhANhCNubh)}(h&:ref:`porting_guide_sdei_requirements`h]h)}(hjh]hporting_guide_sdei_requirements}(hhh!jubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftyperef refexplicitrefwarnh?porting_guide_sdei_requirementsuh1hhAj hCKh!jubh.}(hjD h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubeh"}(h$]jah&]h+]1configuration within exception handling frameworkah-]h/]uh1j h!j hhhAj hCKjX Kubj )}(hhh](j )}(hDetermining client ELh]hDetermining client EL}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCKubj )}(hThe SDEI specification requires that the *physical* SDEI client executes in the highest Non-secure EL implemented on the system. This means that the dispatcher will only allow SDEI calls to be made from:h](h)The SDEI specification requires that the }(h)The SDEI specification requires that the h!jhhhANhCNubj )}(h *physical*h]hphysical}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh SDEI client executes in the highest Non-secure EL implemented on the system. This means that the dispatcher will only allow SDEI calls to be made from:}(h SDEI client executes in the highest Non-secure EL implemented on the system. This means that the dispatcher will only allow SDEI calls to be made from:h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubjg )}(hhh](jl )}(hEL2, if EL2 is implemented. The Hypervisor is expected to implement a *virtual* SDEI dispatcher to support SDEI clients in Guest Operating Systems executing in Non-secure EL1. h]j )}(hEL2, if EL2 is implemented. The Hypervisor is expected to implement a *virtual* SDEI dispatcher to support SDEI clients in Guest Operating Systems executing in Non-secure EL1.h](hFEL2, if EL2 is implemented. The Hypervisor is expected to implement a }(hFEL2, if EL2 is implemented. The Hypervisor is expected to implement a h!jubj )}(h *virtual*h]hvirtual}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh` SDEI dispatcher to support SDEI clients in Guest Operating Systems executing in Non-secure EL1.}(h` SDEI dispatcher to support SDEI clients in Guest Operating Systems executing in Non-secure EL1.h!jubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubjl )}(h7Non-secure EL1, if EL2 is not implemented or disabled. h]j )}(h6Non-secure EL1, if EL2 is not implemented or disabled.h]h6Non-secure EL1, if EL2 is not implemented or disabled.}(hj*h!j(ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j$ubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubeh"}(h$]h&]h+]h-]h/]j j uh1jf hAj hCKh!jhhubj )}(h[#]" participant "SDEI client" as EL2 participant EL3 participant SDEI participant "RAS Driver" as RAS activate EL2 EL2->EL3: **SDEI_EVENT_REGISTER**(ev, handler, ...) EL3->EL2: success EL2->EL3: **SDEI_EVENT_ENABLE**(ev) EL3->EL2: success EL2->EL3: **SDEI_PE_UNMASK**() EL3->EL2: 1 ... <> ... EL3<--]: **CRITICAL EVENT** activate EL3 #red note over EL3: Critical event triage EL3->RAS: dispatch to handle deactivate EL3 activate RAS #salmon note over RAS: Critical event handling RAS-->SDEI: sdei_dispatch_event(ev) deactivate RAS activate SDEI #salmon note over SDEI: Prepare SDEI dispatch SDEI->EL2: dispatch activate EL2 #salmon note over EL2: SDEI handler EL2->SDEI: **SDEI_EVENT_COMPLETE()** deactivate EL2 note over SDEI: Complete SDEI dispatch SDEI-->RAS: return deactivate SDEI activate RAS #salmon RAS->EL3: error handling done deactivate RAS EL3->EL2: resumes preempted execution ... <> ... @enduml j{ resources/diagrams/plantumlj} sdei_explicit_dispatch.pumluh1jm h!jhhhAj hCKubj )}(hX9As part of initialisation, the SDEI client registers a handler for a platform event [1], enables the event [3], and unmasks the current PE [5]. Note that, unlike in `general SDEI dispatch`_, this doesn't involve interrupt binding, as bound or dynamic events can't be explicitly dispatched (see the section below).h](hAs part of initialisation, the SDEI client registers a handler for a platform event [1], enables the event [3], and unmasks the current PE [5]. Note that, unlike in }(hAs part of initialisation, the SDEI client registers a handler for a platform event [1], enables the event [3], and unmasks the current PE [5]. Note that, unlike in h!j=hhhANhCNubj- )}(h`general SDEI dispatch`_h]hgeneral SDEI dispatch}(hgeneral SDEI dispatchh!jFubah"}(h$]h&]h+]h-]h/]namegeneral SDEI dispatchj# jW uh1j, h!j=j& Kubh, this doesn’t involve interrupt binding, as bound or dynamic events can’t be explicitly dispatched (see the section below).}(h|, this doesn't involve interrupt binding, as bound or dynamic events can't be explicitly dispatched (see the section below).h!j=hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubj )}(hX`At a later point in time, a critical event [#critical-event]_ is trapped into EL3 [7]. EL3 performs a first-level triage of the event, and a RAS component assumes further handling [8]. The dispatch completes, but intends to involve Non-secure world in further handling, and therefore decides to explicitly dispatch an event [10] (which the client had already registered for [1]). The rest of the sequence is similar to that in the `general SDEI dispatch`_: the requested event is dispatched to the client (assuming all the conditions are met), and when the handler completes, the preempted execution resumes.h](h+At a later point in time, a critical event }(h+At a later point in time, a critical event h!jbhhhANhCNubj )}(h[#critical-event]_h]h2}(hhh!jkubah"}(h$]id3ah&]h+]h-]h/]j" Kj# critical-eventj% h9uh1j h!jbj& KubhXr is trapped into EL3 [7]. EL3 performs a first-level triage of the event, and a RAS component assumes further handling [8]. The dispatch completes, but intends to involve Non-secure world in further handling, and therefore decides to explicitly dispatch an event [10] (which the client had already registered for [1]). The rest of the sequence is similar to that in the }(hXr is trapped into EL3 [7]. EL3 performs a first-level triage of the event, and a RAS component assumes further handling [8]. The dispatch completes, but intends to involve Non-secure world in further handling, and therefore decides to explicitly dispatch an event [10] (which the client had already registered for [1]). The rest of the sequence is similar to that in the h!jbhhhANhCNubj- )}(h`general SDEI dispatch`_h]hgeneral SDEI dispatch}(hgeneral SDEI dispatchh!jubah"}(h$]h&]h+]h-]h/]namegeneral SDEI dispatchj# jW uh1j, h!jbj& Kubh: the requested event is dispatched to the client (assuming all the conditions are met), and when the handler completes, the preempted execution resumes.}(h: the requested event is dispatched to the client (assuming all the conditions are met), and when the handler completes, the preempted execution resumes.h!jbhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubj )}(hhh](j )}(hConditions for event dispatchh]hConditions for event dispatch}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCKubj )}(heAll of the following requirements must be met for the API to return ``0`` and event to be dispatched:h](hDAll of the following requirements must be met for the API to return }(hDAll of the following requirements must be met for the API to return h!jhhhANhCNubj )}(h``0``h]h0}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh and event to be dispatched:}(h and event to be dispatched:h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubjg )}(hhh](jl )}(hcSDEI events must be unmasked on the PE. I.e. the client must have called ``PE_UNMASK`` beforehand. h]j )}(hbSDEI events must be unmasked on the PE. I.e. the client must have called ``PE_UNMASK`` beforehand.h](hISDEI events must be unmasked on the PE. I.e. the client must have called }(hISDEI events must be unmasked on the PE. I.e. the client must have called h!jubj )}(h ``PE_UNMASK``h]h PE_UNMASK}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh beforehand.}(h beforehand.h!jubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubjl )}(hEvent 0 can't be dispatched. h]j )}(hEvent 0 can't be dispatched.h]hEvent 0 can’t be dispatched.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubjl )}(hVThe event must be declared using the ``SDEI_EXPLICIT_EVENT()`` macro described above. h]j )}(hUThe event must be declared using the ``SDEI_EXPLICIT_EVENT()`` macro described above.h](h%The event must be declared using the }(h%The event must be declared using the h!jubj )}(h``SDEI_EXPLICIT_EVENT()``h]hSDEI_EXPLICIT_EVENT()}(hhh!j#ubah"}(h$]h&]h+]h-]h/]uh1j h!jubh macro described above.}(h macro described above.h!jubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubjl )}(h%The event must be private to the PE. h]j )}(h$The event must be private to the PE.h]h$The event must be private to the PE.}(hjHh!jFubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jBubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubjl )}(h5The event must have been registered for and enabled. h]j )}(h4The event must have been registered for and enabled.h]h4The event must have been registered for and enabled.}(hj`h!j^ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jZubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubjl )}(hzA dispatch for the same event must not be outstanding. I.e. it hasn't already been dispatched and is yet to be completed. h]j )}(hyA dispatch for the same event must not be outstanding. I.e. it hasn't already been dispatched and is yet to be completed.h]h{A dispatch for the same event must not be outstanding. I.e. it hasn’t already been dispatched and is yet to be completed.}(hjxh!jvubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM h!jrubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubjl )}(hXgThe priority of the event (either Critical or Normal, as configured by the platform at build-time) shouldn't cause priority inversion. This means: - If it's of Normal priority, neither Normal nor Critical priority dispatch must be outstanding on the PE. - If it's of a Critical priority, no Critical priority dispatch must be outstanding on the PE. h](j )}(hThe priority of the event (either Critical or Normal, as configured by the platform at build-time) shouldn't cause priority inversion. This means:h]hThe priority of the event (either Critical or Normal, as configured by the platform at build-time) shouldn’t cause priority inversion. This means:}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM h!jubjg )}(hhh](jl )}(hiIf it's of Normal priority, neither Normal nor Critical priority dispatch must be outstanding on the PE. h]j )}(hhIf it's of Normal priority, neither Normal nor Critical priority dispatch must be outstanding on the PE.h]hjIf it’s of Normal priority, neither Normal nor Critical priority dispatch must be outstanding on the PE.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1jk h!jubjl )}(h]If it's of a Critical priority, no Critical priority dispatch must be outstanding on the PE. h]j )}(h\If it's of a Critical priority, no Critical priority dispatch must be outstanding on the PE.h]h^If it’s of a Critical priority, no Critical priority dispatch must be outstanding on the PE.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1jk h!jubeh"}(h$]h&]h+]h-]h/]j j uh1jf hAj hCMh!jubeh"}(h$]h&]h+]h-]h/]uh1jk h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]j j uh1jf hAj hCKh!jhhubj )}(hXFurther, the caller should be aware of the following assumptions made by the dispatcher:h]hXFurther, the caller should be aware of the following assumptions made by the dispatcher:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubjg )}(hhh](jl )}(hPThe caller of the API is a component running in EL3; for example, a RAS driver. h]j )}(hOThe caller of the API is a component running in EL3; for example, a RAS driver.h]hOThe caller of the API is a component running in EL3; for example, a RAS driver.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubjl )}(hThe requested dispatch will be permitted by the Exception Handling Framework. I.e. the caller must make sure that the requested dispatch has sufficient priority so as not to cause priority level inversion within Exception Handling Framework. h]j )}(hThe requested dispatch will be permitted by the Exception Handling Framework. I.e. the caller must make sure that the requested dispatch has sufficient priority so as not to cause priority level inversion within Exception Handling Framework.h]hThe requested dispatch will be permitted by the Exception Handling Framework. I.e. the caller must make sure that the requested dispatch has sufficient priority so as not to cause priority level inversion within Exception Handling Framework.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!j ubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubjl )}(hyThe caller must be prepared for the SDEI dispatcher to restore the Non-secure context, and mark that the active context. h]j )}(hxThe caller must be prepared for the SDEI dispatcher to restore the Non-secure context, and mark that the active context.h]hxThe caller must be prepared for the SDEI dispatcher to restore the Non-secure context, and mark that the active context.}(hj(h!j&ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM h!j"ubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubjl )}(hThe call will block until the SDEI client completes the event (i.e. when the client calls either ``SDEI_EVENT_COMPLETE`` or ``SDEI_COMPLETE_AND_RESUME``). h]j )}(hThe call will block until the SDEI client completes the event (i.e. when the client calls either ``SDEI_EVENT_COMPLETE`` or ``SDEI_COMPLETE_AND_RESUME``).h](haThe call will block until the SDEI client completes the event (i.e. when the client calls either }(haThe call will block until the SDEI client completes the event (i.e. when the client calls either h!j>ubj )}(h``SDEI_EVENT_COMPLETE``h]hSDEI_EVENT_COMPLETE}(hhh!jGubah"}(h$]h&]h+]h-]h/]uh1j h!j>ubh or }(h or h!j>ubj )}(h``SDEI_COMPLETE_AND_RESUME``h]hSDEI_COMPLETE_AND_RESUME}(hhh!jZubah"}(h$]h&]h+]h-]h/]uh1j h!j>ubh).}(h).h!j>ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCM#h!j:ubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubjl )}(hSThe caller must be prepared for this API to return failure and handle accordingly. h]j )}(hRThe caller must be prepared for this API to return failure and handle accordingly.h]hRThe caller must be prepared for this API to return failure and handle accordingly.}(hjh!j}ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM&h!jyubah"}(h$]h&]h+]h-]h/]uh1jk h!jhhhAj hCNubeh"}(h$]h&]h+]h-]h/]j j uh1jf hAj hCMh!jhhubeh"}(h$]conditions-for-event-dispatchah&]h+]conditions for event dispatchah-]h/]uh1j h!jhhhAj hCKubeh"}(h$](jj eh&]h+](explicit dispatch of eventsexplicit-dispatch-of-eventseh-]h/]uh1j h!j hhhAj hCKjh }jjvsjj }jjvsjX Kubj )}(hhh](j )}(hPorting requirementsh]hPorting requirements}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCM*ubj )}(h{The porting requirements of the SDEI dispatcher are outlined in the :ref:`Porting Guide `.h](hDThe porting requirements of the SDEI dispatcher are outlined in the }(hDThe porting requirements of the SDEI dispatcher are outlined in the h!jhhhANhCNubh)}(h6:ref:`Porting Guide `h]h)}(hjh]h Porting Guide}(hhh!jubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftyperef refexplicitrefwarnh?porting_guide_sdei_requirementsuh1hhAj hCM,h!jubh.}(hjD h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCM,h!jhhubeh"}(h$]porting-requirementsah&]h+]porting requirementsah-]h/]uh1j h!j hhhAj hCM*ubj )}(hhh](j )}(h#Note on writing SDEI event handlersh]h#Note on writing SDEI event handlers}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCM0ubj )}(hh*This section pertains to SDEI event handlers in general, not just when using the TF-A SDEI dispatcher.*h]j )}(hjh]hfThis section pertains to SDEI event handlers in general, not just when using the TF-A SDEI dispatcher.}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM2h!jhhubj )}(hXZThe SDEI specification requires that event handlers preserve the contents of all registers except ``x0`` to ``x17``. This has significance if event handler is written in C: compilers typically adjust the stack frame at the beginning and end of C functions. For example, AArch64 GCC typically produces the following function prologue and epilogue:h](hbThe SDEI specification requires that event handlers preserve the contents of all registers except }(hbThe SDEI specification requires that event handlers preserve the contents of all registers except h!jhhhANhCNubj )}(h``x0``h]hx0}(hhh!j&ubah"}(h$]h&]h+]h-]h/]uh1j h!jubh to }(h to h!jhhhANhCNubj )}(h``x17``h]hx17}(hhh!j9ubah"}(h$]h&]h+]h-]h/]uh1j h!jubh. This has significance if event handler is written in C: compilers typically adjust the stack frame at the beginning and end of C functions. For example, AArch64 GCC typically produces the following function prologue and epilogue:}(h. This has significance if event handler is written in C: compilers typically adjust the stack frame at the beginning and end of C functions. For example, AArch64 GCC typically produces the following function prologue and epilogue:h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCM5h!jhhubj)}(hc_event_handler: stp x29, x30, [sp,#-32]! mov x29, sp ... bl ... ... ldp x29, x30, [sp],#32 reth]hc_event_handler: stp x29, x30, [sp,#-32]! mov x29, sp ... bl ... ... ldp x29, x30, [sp],#32 ret}(hhh!jRubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCM=h!jhhubj )}(hXThe register ``x29`` is used as frame pointer in the prologue. Because neither a valid ``SDEI_EVENT_COMPLETE`` nor ``SDEI_EVENT_COMPLETE_AND_RESUME`` calls return to the handler, the epilogue never gets executed, and registers ``x29`` and ``x30`` (in the case above) are inadvertently corrupted. This violates the SDEI specification, and the normal execution thereafter will result in unexpected behaviour.h](h The register }(h The register h!j`hhhANhCNubj )}(h``x29``h]hx29}(hhh!jiubah"}(h$]h&]h+]h-]h/]uh1j h!j`ubhC is used as frame pointer in the prologue. Because neither a valid }(hC is used as frame pointer in the prologue. Because neither a valid h!j`hhhANhCNubj )}(h``SDEI_EVENT_COMPLETE``h]hSDEI_EVENT_COMPLETE}(hhh!j|ubah"}(h$]h&]h+]h-]h/]uh1j h!j`ubh nor }(h nor h!j`hhhANhCNubj )}(h"``SDEI_EVENT_COMPLETE_AND_RESUME``h]hSDEI_EVENT_COMPLETE_AND_RESUME}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!j`ubhN calls return to the handler, the epilogue never gets executed, and registers }(hN calls return to the handler, the epilogue never gets executed, and registers h!j`hhhANhCNubj )}(h``x29``h]hx29}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!j`ubh and }(h and h!j`hhhANhCNubj )}(h``x30``h]hx30}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!j`ubh (in the case above) are inadvertently corrupted. This violates the SDEI specification, and the normal execution thereafter will result in unexpected behaviour.}(h (in the case above) are inadvertently corrupted. This violates the SDEI specification, and the normal execution thereafter will result in unexpected behaviour.h!j`hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMJh!jhhubj )}(hTo work this around, it's advised that the top-level event handlers are implemented in assembly, following a similar pattern as below:h]hTo work this around, it’s advised that the top-level event handlers are implemented in assembly, following a similar pattern as below:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMQh!jhhubj)}(hXPasm_event_handler: /* Save link register whilst maintaining stack alignment */ stp xzr, x30, [sp, #-16]! bl c_event_handler /* Restore link register */ ldp xzr, x30, [sp], #16 /* Complete call */ ldr x0, =SDEI_EVENT_COMPLETE smc #0 b .h]hXPasm_event_handler: /* Save link register whilst maintaining stack alignment */ stp xzr, x30, [sp, #-16]! bl c_event_handler /* Restore link register */ ldp xzr, x30, [sp], #16 /* Complete call */ ldr x0, =SDEI_EVENT_COMPLETE smc #0 b .}(hhh!jubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMVh!jhhubh transition)}(h--------------h]h"}(h$]h&]h+]h-]h/]uh1jhAj hCMch!jhhubj )}(hM*Copyright (c) 2017-2019, Arm Limited and Contributors. All rights reserved.*h]j )}(hjh]hKCopyright (c) 2017-2019, Arm Limited and Contributors. All rights reserved.}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMeh!jhhubh rubric)}(h Footnotesh]h Footnotes}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCMhubh footnote)}(hPExcept event 0, which is defined by the SDEI specification as a standard event. h](h label)}(hhh]h1}(hhh!j%hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j#h!jhhhANhCNubj )}(hOExcept event 0, which is defined by the SDEI specification as a standard event.h]hOExcept event 0, which is defined by the SDEI specification as a standard event.}(hj4h!j2ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMih!jubeh"}(h$]j$ ah&]h+] std-eventah-]h/]j aj" Kj% h9uh1jhAj hCMih!jhhubj)}(hExamples of critical events are *SError*, *Synchronous External Abort*, *Fault Handling interrupt* or *Error Recovery interrupt* from one of RAS nodes in the system. h](j$)}(hhh]h2}(hhh!jKhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j#h!jGhhhANhCNubj )}(hExamples of critical events are *SError*, *Synchronous External Abort*, *Fault Handling interrupt* or *Error Recovery interrupt* from one of RAS nodes in the system.h](h Examples of critical events are }(h Examples of critical events are h!jXubj )}(h*SError*h]hSError}(hhh!jaubah"}(h$]h&]h+]h-]h/]uh1j h!jXubh, }(h, h!jXubj )}(h*Synchronous External Abort*h]hSynchronous External Abort}(hhh!jtubah"}(h$]h&]h+]h-]h/]uh1j h!jXubh, }(hjsh!jXubj )}(h*Fault Handling interrupt*h]hFault Handling interrupt}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jXubh or }(h or h!jXubj )}(h*Error Recovery interrupt*h]hError Recovery interrupt}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jXubh% from one of RAS nodes in the system.}(h% from one of RAS nodes in the system.h!jXubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMlh!jGubeh"}(h$]jzah&]h+]critical-eventah-]h/]juaj" Kj% h9uh1jhAj hCMlh!jhhubjL )}(h.. _SDEI specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdfh]h"}(h$]sdei-specificationah&]h+]sdei specificationah-]h/]refuriqhttp://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdfuh1jK hCMh!jhhhAj jX KubjL )}(hA.. _Software Delegated Exception Interface: `SDEI specification`_h]h"}(h$]&software-delegated-exception-interfaceah&]h+]&software delegated exception interfaceah-]h/]jjuh1jK indirect_reference_nameSDEI specificationhCMh!jhhhAj j& Kubeh"}(h$]#note-on-writing-sdei-event-handlersah&]h+]#note on writing sdei event handlersah-]h/]uh1j h!j hhhAj hCM0ubeh"}(h$]+sdei-software-delegated-exception-interfaceah&]h+],sdei: software delegated exception interfaceah-]h/]uh1j h!hhhhAj hCKubeh"}(h$]h&]h+]h-]h/]sourcej uh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j N generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcej _destinationN _config_files]pep_referencesN pep_base_url https://www.python.org/dev/peps/pep_file_url_templatepep-%04drfc_referencesN rfc_base_urlhttps://tools.ietf.org/html/ tab_widthKtrim_footnote_reference_spacefile_insertion_enabled raw_enabledKsyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xformembed_stylesheetcloak_email_addressesenvNubreporterNindirect_targets]jasubstitution_defs}(hHh hshKhhvhhhhjhjJj"jujMjjxjjjjj!jjLj$jwjOjjzjjjjj#jjNj&jyjQjj|jjjjj%jjPj(j{jSjj~jjjjj'jjRj*j}jUjjjjjjj)jjTj,jjWjjjjjjj+jjVj.jjYjjjjjjj-jjXj0jj[jjjjj jj/ j jZ j2 j j] j j j j j j j1 j j\ j4 j j_ j j j j j j j3 j j^ j6 j ja usubstitution_names}(aarch32hHaarch64hsamuhamushɌapihbtijcotjucssjcvejdtbjds-5j!dsujLdtjweljehfjfconfjfdtj#ff-ajNfipjyfvpjfwujgicjisaj%linarojPmmuj{mpamjmpmmjmpidrjmtej'oenjRop-teej}otejpddjpauthjpmfj)pscijTrasjrotjscmijscpjsdeij+sdsjVseajsipjsmcjsmcccj-socjXspjspdjspmjssbsj svej/ tbbjZ tbbrj teej tf-aj tf-mj tlbj1 tlkj\ trngj tspj tzcj ubsanj uefij3 wdogj^ xlatj urefnames}( std-event]j adetermining client el]j. aexplicit dispatch of events]j a event flags]j a1configuration within exception handling framework]jaevent definition example]jAadefining events]jageneral sdei dispatch](jFjecritical-event]jkasdei specification]jaurefids}(jW ]jM aj]jvaj$ ]j ajz]jkaunameids}(jjj j je jW jjjjjjRjjjj? jjjj jjjjjjjDj$ jjzjjjju nametypes}(jNj Nje jNjNjNjNjNjjNjNjNjNjDjjjuh$}(jj j j j j jW jY jj jj]jRjjjj? jjjj jjujkjjjjjjj$ jjzjGjjjju footnote_refs}(j]j aj]jkau citation_refs} autofootnotes](jjGeautofootnote_refs](j jkesymbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages](h system_message)}(hhh]j )}(hhh]hAHyperlink target "explicit-dispatch-of-events" is not referenced.}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubah"}(h$]h&]h+]h-]h/]levelKtypeINFOsourcej lineMuh1jubj)}(hhh]j )}(hhh]hLHyperlink target "software delegated exception interface" is not referenced.}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubah"}(h$]h&]h+]h-]h/]levelKtypejsourcej lineMuh1jube transformerN decorationNhhub.