• Alex Elder's avatar
    soc: qcom: ipa: GSI transactions · 9dd441e4
    Alex Elder authored
    This patch implements GSI transactions.  A GSI transaction is a
    structure that represents a single request (consisting of one or
    more TREs) sent to the GSI hardware.  The last TRE in a transaction
    includes a flag requesting that the GSI interrupt the AP to notify
    that it has completed.
    
    TREs are executed and completed strictly in order.  For this reason,
    the completion of a single TRE implies that all previous TREs (in
    particular all of those "earlier" in a transaction) have completed.
    
    Whenever there is a need to send a request (a set of TREs) to the
    IPA, a GSI transaction is allocated, specifying the number of TREs
    that will be required.  Details of the request (e.g. transfer offsets
    and length) are represented by in a Linux scatterlist array that is
    incorporated in the transaction structure.
    
    Once all commands (TREs) are added to a transaction it is committed.
    When the hardware signals that the request has completed, a callback
    function allows for cleanup or followup activity to be performed
    before the transaction is freed.
    Signed-off-by: default avatarAlex Elder <elder@linaro.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9dd441e4
gsi_trans.c 23.2 KB