Skip to content

Commit bb70b87

Browse files
mkjjk-ozlabs
authored andcommitted
mi: Add MI endpoints to root_t, and add iterators
These can be used to iterate through a set of endpoints. This will be used for transports such as MCTP's dbus scan functionality Updated for v1.x by Jeremy Kerr <[email protected]>, using global nvme_root_t as base context. Signed-off-by: Matt Johnston <[email protected]> Signed-off-by: Jeremy Kerr <[email protected]>
1 parent faf1ad6 commit bb70b87

5 files changed

Lines changed: 53 additions & 1 deletion

File tree

src/libnvme-mi.map

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ LIBNVME_MI_1_1 {
1616
nvme_mi_admin_security_send;
1717
nvme_mi_admin_security_recv;
1818
nvme_mi_endpoint_desc;
19+
nvme_mi_root_close;
20+
nvme_mi_first_endpoint;
21+
nvme_mi_next_endpoint;
1922
nvme_mi_open_mctp;
2023
local:
2124
*;

src/nvme/mi.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ nvme_root_t nvme_mi_create_root(FILE *fp, int log_level)
3232
r->fp = stderr;
3333
if (fp)
3434
r->fp = fp;
35+
list_head_init(&r->hosts);
36+
list_head_init(&r->endpoints);
3537
return r;
3638
}
3739

@@ -44,7 +46,8 @@ struct nvme_mi_ep *nvme_mi_init_ep(nvme_root_t root)
4446
{
4547
struct nvme_mi_ep *ep;
4648

47-
ep = malloc(sizeof(*ep));
49+
ep = calloc(1, sizeof(*ep));
50+
list_node_init(&ep->root_entry);
4851
ep->root = root;
4952

5053
return ep;
@@ -610,6 +613,7 @@ void nvme_mi_close(nvme_mi_ep_t ep)
610613
{
611614
if (ep->transport->close)
612615
ep->transport->close(ep);
616+
list_del(&ep->root_entry);
613617
free(ep);
614618
}
615619

@@ -647,3 +651,13 @@ char *nvme_mi_endpoint_desc(nvme_mi_ep_t ep)
647651

648652
return s;
649653
}
654+
655+
nvme_mi_ep_t nvme_mi_first_endpoint(nvme_root_t m)
656+
{
657+
return list_top(&m->endpoints, struct nvme_mi_ep, root_entry);
658+
}
659+
660+
nvme_mi_ep_t nvme_mi_next_endpoint(nvme_root_t m, nvme_mi_ep_t ep)
661+
{
662+
return ep ? list_next(&m->endpoints, ep, root_entry) : NULL;
663+
}

src/nvme/mi.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,38 @@ struct nvme_mi_ep;
285285
*/
286286
typedef struct nvme_mi_ep * nvme_mi_ep_t;
287287

288+
/**
289+
* nvme_mi_first_endpoint - Start endpoint iterator
290+
* @m: &nvme_root_t object
291+
*
292+
* Return: first MI endpoint object under this root, or NULL if no endpoints
293+
* are present.
294+
*
295+
* See: &nvme_mi_next_endpoint, &nvme_mi_for_each_endpoint
296+
*/
297+
nvme_mi_ep_t nvme_mi_first_endpoint(nvme_root_t m);
298+
299+
/**
300+
* nvme_mi_next_endpoint - Continue endpoint iterator
301+
* @m: &nvme_root_t object
302+
* @e: &nvme_mi_ep_t current position of iterator
303+
*
304+
* Return: next endpoint MI endpoint object after @e under this root, or NULL
305+
* if no further endpoints are present.
306+
*
307+
* See: &nvme_mi_first_endpoint, &nvme_mi_for_each_endpoint
308+
*/
309+
nvme_mi_ep_t nvme_mi_next_endpoint(nvme_root_t m, nvme_mi_ep_t e);
310+
311+
/**
312+
* nvme_mi_for_each_endpoint - Iterator for NVMe-MI endpoints.
313+
* @m: &nvme_root_t containing endpoints
314+
* @e: &nvme_mi_ep_t object, set on each iteration
315+
*/
316+
#define nvme_mi_for_each_endpoint(m, e) \
317+
for (e = nvme_mi_first_endpoint(m); e != NULL; \
318+
e = nvme_mi_next_endpoint(m, e))
319+
288320
struct nvme_mi_ctrl;
289321

290322
/**

src/nvme/private.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ struct nvme_host {
118118
struct nvme_root {
119119
char *config_file;
120120
struct list_head hosts;
121+
struct list_head endpoints; /* MI endpoints */
121122
FILE *fp;
122123
int log_level;
123124
bool log_pid;
@@ -187,6 +188,7 @@ struct nvme_mi_ep {
187188
struct nvme_root *root;
188189
const struct nvme_mi_transport *transport;
189190
void *transport_data;
191+
struct list_node root_entry;
190192
};
191193

192194
struct nvme_mi_ctrl {

src/nvme/tree.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ nvme_root_t nvme_create_root(FILE *fp, int log_level)
141141
if (fp)
142142
r->fp = fp;
143143
list_head_init(&r->hosts);
144+
list_head_init(&r->endpoints);
144145
return r;
145146
}
146147

0 commit comments

Comments
 (0)