Lines Matching defs:repo
38 static pldm_pdr_record *pldm_pdr_get_prev_record(pldm_pdr *repo,
42 static int pldm_pdr_remove_record(pldm_pdr *repo, pldm_pdr_record *record,
46 static inline uint32_t get_next_record_handle(const pldm_pdr *repo,
49 if (record == repo->last) {
56 int pldm_pdr_add(pldm_pdr *repo, const uint8_t *data, uint32_t size,
62 if (!repo || !data || !size) {
68 } else if (repo->last) {
69 curr = repo->last->record_handle;
110 assert(!repo->first == !repo->last);
111 if (repo->first == NULL) {
112 repo->first = record;
113 repo->last = record;
115 repo->last->next = record;
116 repo->last = record;
119 repo->size += record->size;
120 ++repo->record_count;
132 pldm_pdr *repo = malloc(sizeof(pldm_pdr));
133 if (!repo) {
136 repo->record_count = 0;
137 repo->size = 0;
138 repo->first = NULL;
139 repo->last = NULL;
141 return repo;
145 void pldm_pdr_destroy(pldm_pdr *repo)
147 if (!repo) {
151 pldm_pdr_record *record = repo->first;
161 free(repo);
165 const pldm_pdr_record *pldm_pdr_find_record(const pldm_pdr *repo,
170 if (!repo || !data || !size || !next_record_handle) {
174 if (!record_handle && (repo->first != NULL)) {
175 record_handle = repo->first->record_handle;
178 pldm_pdr_record *record = repo->first;
184 get_next_record_handle(repo, record);
197 pldm_pdr_get_next_record(const pldm_pdr *repo,
201 if (!repo || !curr_record || !data || !size || !next_record_handle) {
205 if (curr_record == repo->last) {
208 *next_record_handle = get_next_record_handle(repo, curr_record);
212 *next_record_handle = get_next_record_handle(repo, curr_record->next);
220 pldm_pdr_find_record_by_type(const pldm_pdr *repo, uint8_t pdr_type,
224 if (!repo) {
228 pldm_pdr_record *record = repo->first;
251 uint32_t pldm_pdr_get_record_count(const pldm_pdr *repo)
253 assert(repo != NULL);
255 return repo->record_count;
259 uint32_t pldm_pdr_get_repo_size(const pldm_pdr *repo)
261 assert(repo != NULL);
263 return repo->size;
267 uint32_t pldm_pdr_get_record_handle(const pldm_pdr *repo LIBPLDM_CC_UNUSED,
270 assert(repo != NULL);
277 uint16_t pldm_pdr_get_terminus_handle(const pldm_pdr *repo LIBPLDM_CC_UNUSED,
280 assert(repo != NULL);
295 int pldm_pdr_add_fru_record_set(pldm_pdr *repo, uint16_t terminus_handle,
301 if (!repo || !bmc_record_handle) {
323 return pldm_pdr_add(repo, data, sizeof(data), false, terminus_handle,
329 const pldm_pdr *repo, uint16_t fru_rsi, uint16_t *terminus_handle,
333 if (!repo || !terminus_handle || !entity_type || !entity_instance_num ||
341 repo, PLDM_PDR_FRU_RECORD_SET, NULL, &data, &size);
356 repo, PLDM_PDR_FRU_RECORD_SET, curr_record, &data,
370 void pldm_pdr_update_TL_pdr(const pldm_pdr *repo, uint16_t terminus_handle,
376 record = pldm_pdr_find_record_by_type(repo, PLDM_TERMINUS_LOCATOR_PDR,
392 record = pldm_pdr_find_record_by_type(repo,
408 const pldm_pdr *repo, uint16_t entity_type, uint16_t entity_instance,
413 if (!repo) {
417 for (record = repo->first; record; record = record->next) {
460 int pldm_pdr_delete_by_record_handle(pldm_pdr *repo, uint32_t record_handle,
468 if (!repo) {
471 record = repo->first;
487 prev = pldm_pdr_get_prev_record(repo, record);
488 return pldm_pdr_remove_record(repo, record, prev);
839 pldm_entity_node *curr, pldm_pdr *repo, uint16_t size,
891 rc = pldm_pdr_add(repo, pdr, size, is_remote, terminus_handle,
898 pldm_pdr *repo, bool is_remote,
922 curr, repo, logical_pdr_size, num_logical_children,
943 curr, repo, physical_pdr_size, num_physical_children,
972 pldm_pdr *repo,
990 curr, repo, is_remote, terminus_handle, record_handle);
1000 rc = entity_association_pdr_add(curr->next_sibling, repo, entities,
1007 // case. If the pdr gets added to the repo, new record handle
1009 // to the repo and increments the record handle
1017 rc = entity_association_pdr_add(curr->first_child, repo, entities,
1025 pldm_pdr *repo, bool is_remote,
1028 if (!tree || !repo) {
1031 int64_t rc = entity_association_pdr_add(tree->root, repo, NULL, 0,
1039 pldm_entity_node *node, pldm_pdr *repo, pldm_entity **entities,
1043 node, repo, entities, num_entities, is_remote, terminus_handle,
1049 pldm_entity_node *node, pldm_pdr *repo, pldm_entity **entities,
1053 if (!node || !repo || !entities) {
1057 int64_t rc = entity_association_pdr_add(node, repo, entities,
1103 void pldm_pdr_remove_pdrs_by_terminus_handle(pldm_pdr *repo,
1106 if (!repo) {
1112 pldm_pdr_record *record = repo->first;
1117 if (repo->first == record) {
1118 repo->first = next;
1122 if (repo->last == record) {
1123 repo->last = prev;
1128 --repo->record_count;
1129 repo->size -= record->size;
1139 record = repo->first;
1155 void pldm_pdr_remove_remote_pdrs(pldm_pdr *repo)
1157 if (!repo) {
1163 pldm_pdr_record *record = repo->first;
1168 if (repo->first == record) {
1169 repo->first = next;
1173 if (repo->last == record) {
1174 repo->last = prev;
1179 --repo->record_count;
1180 repo->size -= record->size;
1190 record = repo->first;
1206 pldm_pdr_record *pldm_pdr_find_last_in_range(const pldm_pdr *repo,
1212 if (!repo) {
1215 for (curr = repo->first; curr; curr = curr->next) {
1468 /* Find the position of record in pldm_pdr repo and place new_record in
1472 static int pldm_pdr_replace_record(pldm_pdr *repo, pldm_pdr_record *record,
1476 if (repo->size < record->size) {
1480 if (repo->size + new_record->size < new_record->size) {
1484 if (repo->first == record) {
1485 repo->first = new_record;
1491 if (repo->last == record) {
1492 repo->last = new_record;
1495 repo->size = (repo->size - record->size) + new_record->size;
1499 /* Insert a new record to pldm_pdr repo to a position that comes after
1503 static int pldm_pdr_insert_record(pldm_pdr *repo, pldm_pdr_record *record,
1506 if (repo->size + new_record->size < new_record->size) {
1510 if (repo->record_count == UINT32_MAX) {
1517 if (repo->last == record) {
1518 repo->last = new_record;
1521 repo->size = repo->size + new_record->size;
1522 ++repo->record_count;
1545 pldm_pdr *repo, pldm_entity *entity, uint32_t pdr_record_handle)
1547 if (!repo || !entity) {
1551 pldm_pdr_record *record = repo->first;
1552 pldm_pdr_record *prev = repo->first;
1668 rc = pldm_pdr_replace_record(repo, record, prev, new_record);
1688 int pldm_entity_association_pdr_create_new(pldm_pdr *repo,
1694 if (!repo || !parent || !entity || !entity_record_handle) {
1711 pldm_pdr_record *prev = repo->first;
1712 pldm_pdr_record *record = repo->first;
1810 rc = pldm_pdr_insert_record(repo, record, new_record);
1838 /* Find record handle of a PDR record from PDR repo and
1843 pldm_pdr *repo, pldm_entity *entity, bool is_remote,
1850 pldm_pdr_record *record = repo->first;
1907 pldm_pdr *repo, pldm_entity *entity, bool is_remote,
1918 if (!repo || !entity || !pdr_record_handle) {
1921 record = repo->first;
1922 prev = repo->first;
1925 repo, entity, is_remote, pdr_record_handle);
1995 pldm_pdr_remove_record(repo, record,
1996 pldm_pdr_get_prev_record(repo, record));
2033 rc = pldm_pdr_replace_record(repo, record, prev, new_record);
2057 static pldm_pdr_record *pldm_pdr_get_prev_record(pldm_pdr *repo,
2061 pldm_pdr_record *curr = repo->first;
2076 static bool is_prev_record_present(pldm_pdr *repo, pldm_pdr_record *record)
2078 if (repo->first == record) {
2082 return pldm_pdr_get_prev_record(repo, record) != NULL;
2118 static int pldm_pdr_remove_record(pldm_pdr *repo, pldm_pdr_record *record,
2121 if (!is_prev_record_present(repo, record)) {
2125 assert(repo->size >= record->size);
2126 if (repo->size < record->size) {
2130 if (repo->first == record) {
2131 repo->first = record->next;
2138 if (repo->last == record) {
2139 repo->last = prev;
2144 repo->record_count -= 1;
2145 repo->size -= record->size;
2153 int pldm_pdr_remove_fru_record_set_by_rsi(pldm_pdr *repo, uint16_t fru_rsi,
2164 if (!repo || !record_handle) {
2167 record = repo->first;
2193 prev = pldm_pdr_get_prev_record(repo, record);
2194 return pldm_pdr_remove_record(repo, record, prev);