Commit 075a3295 authored by Ian Abbott's avatar Ian Abbott Committed by Greg Kroah-Hartman

staging: comedi: ni_routes: Refactor ni_find_valid_routes()

Split out the loops in `ni_find_valid_routes()` into separate functions:

* ni_find_route_values(device_family) to find the list of route values
  for a device family (e.g "ni-mseries"); and
* ni_find_valid_routes(board_name) to find the set of valid routes for a
  board name.

The functions above return `NULL` if the information is not found (as we
do not currently have the routing information available for all
supported boards).

Cc: Éric Piel <piel@delmic.com>
Cc: Spencer E. Olson <olsonse@umich.edu>
Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
Link: https://lore.kernel.org/r/20200207151400.272678-2-abbotti@mev.co.ukSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 0e3ee7f1
...@@ -50,20 +50,13 @@ ...@@ -50,20 +50,13 @@
#define RVi(table, src, dest) ((table)[(dest) * NI_NUM_NAMES + (src)]) #define RVi(table, src, dest) ((table)[(dest) * NI_NUM_NAMES + (src)])
/* /*
* Find the proper route_values and ni_device_routes tables for this particular * Find the route values for a device family.
* device.
*
* Return: -ENODATA if either was not found; 0 if both were found.
*/ */
static int ni_find_device_routes(const char *device_family, static const u8 *ni_find_route_values(const char *device_family)
const char *board_name,
struct ni_route_tables *tables)
{ {
const struct ni_device_routes *dr = NULL;
const u8 *rv = NULL; const u8 *rv = NULL;
int i; int i;
/* First, find the register_values table for this device family */
for (i = 0; ni_all_route_values[i]; ++i) { for (i = 0; ni_all_route_values[i]; ++i) {
if (memcmp(ni_all_route_values[i]->family, device_family, if (memcmp(ni_all_route_values[i]->family, device_family,
strnlen(device_family, 30)) == 0) { strnlen(device_family, 30)) == 0) {
...@@ -71,8 +64,18 @@ static int ni_find_device_routes(const char *device_family, ...@@ -71,8 +64,18 @@ static int ni_find_device_routes(const char *device_family,
break; break;
} }
} }
return rv;
}
/*
* Find the valid routes for a board.
*/
static const struct ni_device_routes *
ni_find_valid_routes(const char *board_name)
{
const struct ni_device_routes *dr = NULL;
int i;
/* Second, find the set of routes valid for this device. */
for (i = 0; ni_device_routes_list[i]; ++i) { for (i = 0; ni_device_routes_list[i]; ++i) {
if (memcmp(ni_device_routes_list[i]->device, board_name, if (memcmp(ni_device_routes_list[i]->device, board_name,
strnlen(board_name, 30)) == 0) { strnlen(board_name, 30)) == 0) {
...@@ -80,6 +83,27 @@ static int ni_find_device_routes(const char *device_family, ...@@ -80,6 +83,27 @@ static int ni_find_device_routes(const char *device_family,
break; break;
} }
} }
return dr;
}
/*
* Find the proper route_values and ni_device_routes tables for this particular
* device.
*
* Return: -ENODATA if either was not found; 0 if both were found.
*/
static int ni_find_device_routes(const char *device_family,
const char *board_name,
struct ni_route_tables *tables)
{
const struct ni_device_routes *dr;
const u8 *rv;
/* First, find the register_values table for this device family */
rv = ni_find_route_values(device_family);
/* Second, find the set of routes valid for this device. */
dr = ni_find_valid_routes(board_name);
tables->route_values = rv; tables->route_values = rv;
tables->valid_routes = dr; tables->valid_routes = dr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment