xref: /openbmc/pldm/docs/code_flows.md (revision 571d7d44635580ee7bb29e84ee3114c472d3fc61)
1*571d7d44SManojkiran Eda# Flows
2*571d7d44SManojkiran Eda
3*571d7d44SManojkiran EdaThis section documents important code flow paths.
4*571d7d44SManojkiran Eda
5*571d7d44SManojkiran Eda## BMC as PLDM responder
6*571d7d44SManojkiran Eda
7*571d7d44SManojkiran Edaa) PLDM daemon receives PLDM request message from underlying transport (MCTP).
8*571d7d44SManojkiran Eda
9*571d7d44SManojkiran Edab) PLDM daemon routes message to message handler, based on the PLDM command.
10*571d7d44SManojkiran Eda
11*571d7d44SManojkiran Edac) Message handler decodes request payload into various field(s) of the request
12*571d7d44SManojkiran Edamessage. It can make use of a decode_foo_req() API, and doesn't have to perform
13*571d7d44SManojkiran Edadeserialization of the request payload by itself.
14*571d7d44SManojkiran Eda
15*571d7d44SManojkiran Edad) Message handler works with the request field(s) and generates response
16*571d7d44SManojkiran Edafield(s).
17*571d7d44SManojkiran Eda
18*571d7d44SManojkiran Edae) Message handler prepares a response message. It can make use of an
19*571d7d44SManojkiran Edaencode_foo_resp() API, and doesn't have to perform the serialization of the
20*571d7d44SManojkiran Edaresponse field(s) by itself.
21*571d7d44SManojkiran Eda
22*571d7d44SManojkiran Edaf) The PLDM daemon sends the response message prepared at step e) to the remote
23*571d7d44SManojkiran EdaPLDM device.
24*571d7d44SManojkiran Eda
25*571d7d44SManojkiran Eda## BMC as PLDM requester
26*571d7d44SManojkiran Eda
27*571d7d44SManojkiran Edaa) A BMC PLDM requester app prepares a PLDM request message. There would be
28*571d7d44SManojkiran Edaseveral requester apps (based on functionality/PLDM remote device). Each of them
29*571d7d44SManojkiran Edaneedn't bother with the serialization of request field(s), and can instead make
30*571d7d44SManojkiran Edause of an encode_foo_req() API.
31*571d7d44SManojkiran Eda
32*571d7d44SManojkiran Edab) BMC requester app requests PLDM daemon to send the request message to remote
33*571d7d44SManojkiran EdaPLDM device.
34*571d7d44SManojkiran Eda
35*571d7d44SManojkiran Edac) Once the PLDM daemon receives a corresponding response message, it notifies
36*571d7d44SManojkiran Edathe requester app.
37*571d7d44SManojkiran Eda
38*571d7d44SManojkiran Edad) The requester app has to work with the response field(s). It can make use of
39*571d7d44SManojkiran Edaa decode_foo_resp() API to deserialize the response message.
40