blob: cf1c157174dc8c581653dfaa25596dafbde206f4 [file] [log] [blame]
Amir Levy9659e592016-10-27 18:08:27 +03001/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#ifndef _IPA_RM_PEERS_LIST_H_
14#define _IPA_RM_PEERS_LIST_H_
15
16#include "ipa_rm_resource.h"
17
18struct ipa_rm_resource_peer {
19 struct ipa_rm_resource *resource;
20 bool userspace_dep;
21};
22
23/**
24 * struct ipa_rm_peers_list - IPA RM resource peers list
25 * @peers: the list of references to resources dependent on this resource
26 * in case of producer or list of dependencies in case of consumer
27 * @max_peers: maximum number of peers for this resource
28 * @peers_count: actual number of peers for this resource
29 */
30struct ipa_rm_peers_list {
31 struct ipa_rm_resource_peer *peers;
32 int max_peers;
33 int peers_count;
34};
35
36int ipa_rm_peers_list_create(int max_peers,
37 struct ipa_rm_peers_list **peers_list);
38void ipa_rm_peers_list_delete(struct ipa_rm_peers_list *peers_list);
39void ipa_rm_peers_list_remove_peer(
40 struct ipa_rm_peers_list *peers_list,
41 enum ipa_rm_resource_name resource_name);
42void ipa_rm_peers_list_add_peer(
43 struct ipa_rm_peers_list *peers_list,
44 struct ipa_rm_resource *resource,
45 bool userspace_dep);
46bool ipa_rm_peers_list_check_dependency(
47 struct ipa_rm_peers_list *resource_peers,
48 enum ipa_rm_resource_name resource_name,
49 struct ipa_rm_peers_list *depends_on_peers,
50 enum ipa_rm_resource_name depends_on_name,
51 bool *userspace_dep);
52struct ipa_rm_resource *ipa_rm_peers_list_get_resource(int resource_index,
53 struct ipa_rm_peers_list *peers_list);
54bool ipa_rm_peers_list_get_userspace_dep(int resource_index,
55 struct ipa_rm_peers_list *resource_peers);
56int ipa_rm_peers_list_get_size(struct ipa_rm_peers_list *peers_list);
57bool ipa_rm_peers_list_is_empty(struct ipa_rm_peers_list *peers_list);
58bool ipa_rm_peers_list_has_last_peer(
59 struct ipa_rm_peers_list *peers_list);
60
61
62#endif /* _IPA_RM_PEERS_LIST_H_ */