You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
powerpc-utils/SOURCES/powerpc-utils-1.3.12.drmgr-...

154 lines
5.5 KiB

commit 3a7e77497d2dcf84b5d6525cdfb6e59dfea7ffbb
Author: Haren Myneni <haren@linux.ibm.com>
Date: Fri Jun 21 15:40:56 2024 -0700
drmgr: Retrieve dr_connector with the specified DRC index
search_drc_list() provides the search based on the key type such
as DRC_NAME, DRC_TYPE, DRC_INDEX or DRC_POWERDOMAIN. But the
current code has get_drc_by_index() which looks in to the DRC list
passed to this function instead of all DRC lists and is not used
right now.
This patch modifies get_drc_by_index() and the corresponding
changes such that it retrieves dr_connector with the specified DRC
index as does in the case of get_drc_by_name().
Signed-off-by: Haren Myneni <haren@linux.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
diff --git a/src/drmgr/common_ofdt.c b/src/drmgr/common_ofdt.c
index 1d9b7e7..655c9d2 100644
--- a/src/drmgr/common_ofdt.c
+++ b/src/drmgr/common_ofdt.c
@@ -650,23 +650,24 @@ drc_index_to_name(uint32_t index, struct dr_connector *drc_list)
}
/**
- * get_drc_by_name
- * @brief Retrieve a dr_connector with the specified drc_name
+ * search_drc_by_key
+ * @brief Retrieve a dr_connector based on DRC name or DRC index
*
* This routine searches the drc lists for a dr_connector with the
- * specified name starting at the specified directory. If a dr_connector
- * is found the root_dir that the dr_connector was found in is also
- * filled out.
+ * specified name or index starting at the specified directory. If
+ * a dr_connector is found the root_dir that the dr_connector was
+ * found in is also filled out.
*
- * @param drc_name name of the dr_connector to search for
+ * @param key to serach for the dr_connector
* @param drc pointer to a drc to point to the found dr_connector
* @param root_dir pointer to buf to fill in with root directory
* @param start_dir, directory to start searching
+ * @param key_type whether the key is DRC name or DRC index
* @returns 0 on success (drc and root_dir filled in), !0 on failure
*/
int
-get_drc_by_name(char *drc_name, struct dr_connector *drc, char *root_dir,
- char *start_dir)
+search_drc_by_key(void *key, struct dr_connector *drc, char *root_dir,
+ char *start_dir, int key_type)
{
struct dr_connector *drc_list = NULL;
struct dr_connector *drc_entry;
@@ -681,7 +682,7 @@ get_drc_by_name(char *drc_name, struct dr_connector *drc, char *root_dir,
if (drc_list == NULL)
return -1;
- drc_entry = search_drc_list(drc_list, NULL, DRC_NAME, drc_name);
+ drc_entry = search_drc_list(drc_list, NULL, key_type, key);
if (drc_entry != NULL) {
memcpy(drc, drc_entry, sizeof(*drc));
sprintf(root_dir, "%s", start_dir);
@@ -700,7 +701,8 @@ get_drc_by_name(char *drc_name, struct dr_connector *drc, char *root_dir,
continue;
sprintf(dir_path, "%s/%s", start_dir, de->d_name);
- rc = get_drc_by_name(drc_name, drc, root_dir, dir_path);
+ rc = search_drc_by_key(key, drc, root_dir, dir_path,
+ key_type);
if (rc == 0)
break;
}
@@ -709,17 +711,57 @@ get_drc_by_name(char *drc_name, struct dr_connector *drc, char *root_dir,
return rc;
}
-struct dr_connector *
-get_drc_by_index(uint32_t drc_index, struct dr_connector *drc_list)
+/**
+ * get_drc_by_name
+ * @brief Retrieve a dr_connector with the specified drc_name
+ *
+ * This routine searches the drc lists for a dr_connector with the
+ * specified name starting at the specified directory. If a dr_connector
+ * is found the root_dir that the dr_connector was found in is also
+ * filled out.
+ *
+ * @param drc_name name of the dr_connector to search for
+ * @param drc pointer to a drc to point to the found dr_connector
+ * @param root_dir pointer to buf to fill in with root directory
+ * @param start_dir, directory to start searching
+ * @returns 0 on success (drc and root_dir filled in), !0 on failure
+ */
+int
+get_drc_by_name(char *drc_name, struct dr_connector *drc, char *root_dir,
+ char *start_dir)
{
- struct dr_connector *drc;
+ int rc;
- for (drc = drc_list; drc; drc = drc->next) {
- if (drc->index == drc_index)
- return drc;
- }
+ rc = search_drc_by_key(drc_name, drc, root_dir, start_dir, DRC_NAME);
- return NULL;
+ return rc;
+}
+
+/**
+ * get_drc_by_index
+ * @brief Retrieve a dr_connector with the specified index
+ *
+ * This routine searches the drc lists for a dr_connector with the
+ * specified index starting at the specified directory. If a dr_connector
+ * is found the root_dir that the dr_connector was found in is also
+ * filled out.
+ *
+ * @param index of the dr_connector to search for
+ * @param drc pointer to a drc to point to the found dr_connector
+ * @param root_dir pointer to buf to fill in with root directory
+ * @param start_dir, directory to start searching
+ * @returns 0 on success (drc and root_dir filled in), !0 on failure
+ */
+int
+get_drc_by_index(uint32_t index, struct dr_connector *drc, char *root_dir,
+ char *start_dir)
+{
+ int rc;
+
+ rc = search_drc_by_key((void *)&index, drc, root_dir, start_dir,
+ DRC_INDEX);
+
+ return rc;
}
/*
diff --git a/src/drmgr/ofdt.h b/src/drmgr/ofdt.h
index bd90810..6c1b961 100644
--- a/src/drmgr/ofdt.h
+++ b/src/drmgr/ofdt.h
@@ -177,6 +177,7 @@ int get_my_drc_index(char *, uint32_t *);
int drc_name_to_index(const char *, struct dr_connector *);
char * drc_index_to_name(uint32_t, struct dr_connector *);
int get_drc_by_name(char *, struct dr_connector *, char *, char *);
+int get_drc_by_index(uint32_t, struct dr_connector *, char *, char *);
int get_min_common_depth(void);
int get_assoc_arrays(const char *dir, struct assoc_arrays *aa,