Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F136806379
D5043.id13115.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D5043.id13115.diff
View Options
Index: sys/dev/ofw/ofw_bus_subr.h
===================================================================
--- sys/dev/ofw/ofw_bus_subr.h
+++ sys/dev/ofw/ofw_bus_subr.h
@@ -118,6 +118,8 @@
int ofw_bus_parse_xref_list_alloc(phandle_t node, const char *list_name,
const char *cells_name, int idx, phandle_t *producer, int *ncells,
pcell_t **cells);
+int ofw_bus_parse_xref_list_get_length(phandle_t node, const char *list_name,
+ const char *cells_name, int *count);
int ofw_bus_find_string_index(phandle_t node, const char *list_name,
const char *name, int *idx);
int ofw_bus_string_list_to_array(phandle_t node, const char *list_name,
Index: sys/dev/ofw/ofw_bus_subr.c
===================================================================
--- sys/dev/ofw/ofw_bus_subr.c
+++ sys/dev/ofw/ofw_bus_subr.c
@@ -629,13 +629,16 @@
* node - consumers device node
* list_name - name of parsed list - "clocks"
* cells_name - name of size property - "#clock-cells"
+ * idx - the index of the requested list entry, or, if -1, an indication
+ * to return the number of entries in the parsed list.
* Output arguments:
* producer - handle of producer
- * ncells - number of cells in result
+ * ncells - number of cells in result or the number of items in the list when
+ * idx == -1.
* cells - array of decoded cells
*/
-int
-ofw_bus_parse_xref_list_alloc(phandle_t node, const char *list_name,
+static int
+ofw_bus_parse_xref_list_internal(phandle_t node, const char *list_name,
const char *cells_name, int idx, phandle_t *producer, int *ncells,
pcell_t **cells)
{
@@ -649,7 +652,7 @@
(void **)&elems);
if (nelems <= 0)
return (ENOENT);
- rv = ENOENT;
+ rv = (idx == -1) ? 0 : ENOENT;
for (i = 0, cnt = 0; i < nelems; i += pcells, cnt++) {
pnode = elems[i++];
if (OF_getencprop(OF_node_from_xref(pnode),
@@ -678,10 +681,58 @@
}
if (elems != NULL)
free(elems, M_OFWPROP);
+ if (idx == -1 && rv == 0)
+ *ncells = cnt;
return (rv);
}
/*
+ * Parse property that contain list of xrefs and values
+ * (like standard "clocks" and "resets" properties)
+ * Input arguments:
+ * node - consumers device node
+ * list_name - name of parsed list - "clocks"
+ * cells_name - name of size property - "#clock-cells"
+ * idx - the index of the requested list entry (>= 0)
+ * Output arguments:
+ * producer - handle of producer
+ * ncells - number of cells in result
+ * cells - array of decoded cells
+ */
+int
+ofw_bus_parse_xref_list_alloc(phandle_t node, const char *list_name,
+ const char *cells_name, int idx, phandle_t *producer, int *ncells,
+ pcell_t **cells)
+{
+
+ KASSERT(idx >= 0,
+ ("ofw_bus_parse_xref_list_alloc: negative index supplied"));
+
+ return (ofw_bus_parse_xref_list_internal(node, list_name, cells_name,
+ idx, producer, ncells, cells));
+}
+
+/*
+ * Parse property that contain list of xrefs and values
+ * (like standard "clocks" and "resets" properties)
+ * and determine the number of items in the list
+ * Input arguments:
+ * node - consumers device node
+ * list_name - name of parsed list - "clocks"
+ * cells_name - name of size property - "#clock-cells"
+ * Output arguments:
+ * count - number of items in list
+ */
+int
+ofw_bus_parse_xref_list_get_length(phandle_t node, const char *list_name,
+ const char *cells_name, int *count)
+{
+
+ return (ofw_bus_parse_xref_list_internal(node, list_name, cells_name,
+ -1, NULL, count, NULL));
+}
+
+/*
* Find index of string in string list property (case sensitive).
*/
int
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Nov 20, 4:58 PM (3 h, 18 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25735120
Default Alt Text
D5043.id13115.diff (3 KB)
Attached To
Mode
D5043: Teach ofw_bus_parse_xref_list_alloc to be able to return the length of the parsed list
Attached
Detach File
Event Timeline
Log In to Comment