162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __PERF_DSOS
362306a36Sopenharmony_ci#define __PERF_DSOS
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <stdbool.h>
662306a36Sopenharmony_ci#include <stdio.h>
762306a36Sopenharmony_ci#include <linux/list.h>
862306a36Sopenharmony_ci#include <linux/rbtree.h>
962306a36Sopenharmony_ci#include "rwsem.h"
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_cistruct dso;
1262306a36Sopenharmony_cistruct dso_id;
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci/*
1562306a36Sopenharmony_ci * DSOs are put into both a list for fast iteration and rbtree for fast
1662306a36Sopenharmony_ci * long name lookup.
1762306a36Sopenharmony_ci */
1862306a36Sopenharmony_cistruct dsos {
1962306a36Sopenharmony_ci	struct list_head    head;
2062306a36Sopenharmony_ci	struct rb_root	    root;	/* rbtree root sorted by long name */
2162306a36Sopenharmony_ci	struct rw_semaphore lock;
2262306a36Sopenharmony_ci};
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_civoid __dsos__add(struct dsos *dsos, struct dso *dso);
2562306a36Sopenharmony_civoid dsos__add(struct dsos *dsos, struct dso *dso);
2662306a36Sopenharmony_cistruct dso *__dsos__addnew(struct dsos *dsos, const char *name);
2762306a36Sopenharmony_cistruct dso *__dsos__find(struct dsos *dsos, const char *name, bool cmp_short);
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct dso *dsos__findnew_id(struct dsos *dsos, const char *name, struct dso_id *id);
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistruct dso *__dsos__findnew_link_by_longname_id(struct rb_root *root, struct dso *dso,
3262306a36Sopenharmony_ci						const char *name, struct dso_id *id);
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_cibool __dsos__read_build_ids(struct list_head *head, bool with_hits);
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cisize_t __dsos__fprintf_buildid(struct list_head *head, FILE *fp,
3762306a36Sopenharmony_ci			       bool (skip)(struct dso *dso, int parm), int parm);
3862306a36Sopenharmony_cisize_t __dsos__fprintf(struct list_head *head, FILE *fp);
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci#endif /* __PERF_DSOS */
41