blob: 9359d272812323552e73b4516569f0b477182431 [file] [log] [blame]
Imre Kis9df392c2023-09-14 13:29:09 +02001'-------------------------------------------------------------------------------
2' Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
3'
4' SPDX-License-Identifier: BSD-3-Clause
5'
6'-------------------------------------------------------------------------------
7
8@startuml TS RPC call sequence
9
10autoactivate on
11
12participant "Service caller" as service_caller
13participant "RPC caller session" as rpc_session
14participant "TS RPC caller" as rpc_caller
15participant "SPMC" as spmc
16participant "TS RPC endpoint" as endpoint
17participant "Service" as service
18
19service_caller -> rpc_session: open(service_uuid)
20
21' Sesssion open
22rpc_session -> rpc_caller: find_and_open_session(service_uuid)
23
24rpc_caller -> spmc: FFA_PARTITION_INFO_GET(ts_rpc_uuid)
25spmc --> rpc_caller: FF-A endpoint_id
26
27rpc_caller -> endpoint: TS_RPC_VERSION_GET
28endpoint --> rpc_caller: TS RPC protocol version
29
30rpc_caller -> endpoint: TS_RPC_SERVICE_INFO_GET(service_uuid)
31endpoint --> rpc_caller: Service interface_id
32
33rpc_caller --> rpc_session: TS RPC status
34
35rpc_session --> service_caller: TS RPC status
36
37' Begin
38service_caller -> rpc_session: begin(request_length, response_max_length)
39
40rpc_session -> rpc_session: allocate_buffer(MAX(request_length, response_max_length))
41rpc_session --> rpc_session: buffer
42
43rpc_session -> rpc_caller: create_shared_memory(endpoint_id, buffer)
44
45rpc_caller -> spmc: FFA_MEM_SHARE(endpoint_id, buffer)
46spmc --> rpc_caller: memory_handle, memory_tag
47
48rpc_caller -> endpoint: TS_RPC_MEM_RETRIEVE(memory_handle, memory_tag)
49
50endpoint -> spmc: FFA_MEM_RETRIEVE(memory_handle, memory_tag)
51spmc --> endpoint: buffer
52
53endpoint --> rpc_caller: TS RPC status
54
55rpc_caller --> rpc_session: TS RPC status, shared_memory
56
57rpc_session --> service_caller: Request buffer
58
59' Serialize
60service_caller -> service_caller: Serialize parameters to request buffer
61service_caller --> service_caller
62
63' Invoke
64service_caller -> rpc_session: invoke(opcode)
65
66rpc_session -> rpc_caller: call(opcode, shared_memory, request_length)
67
68rpc_caller -> endpoint: service_call(interface_id, opcode, memory_handle, request_length)
69
70endpoint -> service: service_call(opcode, request)
71service --> endpoint: service status, response
72
73endpoint --> rpc_caller: TS RPC status, service status, response length
74
75rpc_caller --> rpc_session: TS RPC status, service status, response length
76
77rpc_session --> service_caller: TS RPC status, service status, response
78
79' Deserialize
80service_caller -> service_caller: Deserialize return values from the response buffer
81service_caller --> service_caller
82
83' End
84service_caller -> rpc_session: end()
85
86rpc_session -> rpc_caller: release_shared_memory(shared_memory)
87
88rpc_caller -> endpoint: TS_RPC_MEM_RELINQUISH(memory_handle)
89
90endpoint -> spmc: FFA_MEMORY_RELINQUISH(memory_handle)
91spmc --> endpoint: FFA_SUCCESS
92
93endpoint --> rpc_caller: TS RPC status
94
95rpc_caller -> spmc: FFA_MEM_RECLAIM(memory_handle)
96spmc --> rpc_caller: FFA_SUCCESS
97
98rpc_caller -> rpc_caller: free(buffer)
99rpc_caller --> rpc_caller
100
101rpc_caller --> rpc_session: TS RPC status
102
103rpc_session --> service_caller: TS RPC status
104
105service_caller -> rpc_session: close()
106rpc_session --> service_caller: TS RPC status
107@enduml