On 27/09/18 20:27, Spencer E. Olson wrote:
Adds interface and associated unittests for accessing/looking-up/validating the new ni routing table information. Signed-off-by: Spencer E. Olson <olsonse@xxxxxxxxx> --- Changes since last submission: - [PATCH v2 05/13]: Tweak Makefile to build routing info for newly added hardware in updates to [PATCH v2 04/13]. - [PATCH v2 05/13]: Fixes placement of "select COMEDI_NI_ROUTING" as per Ian's suggestion. - [PATCH v2 05/13]: Removes a few inline function declarations in unit test. drivers/staging/comedi/Kconfig | 4 + drivers/staging/comedi/drivers/Makefile | 27 + drivers/staging/comedi/drivers/ni_routes.c | 521 +++++++++++++++ drivers/staging/comedi/drivers/ni_routes.h | 329 ++++++++++ drivers/staging/comedi/drivers/ni_stc.h | 4 + drivers/staging/comedi/drivers/tests/Makefile | 3 +- .../comedi/drivers/tests/ni_routes_test.c | 613 ++++++++++++++++++ 7 files changed, 1500 insertions(+), 1 deletion(-) create mode 100644 drivers/staging/comedi/drivers/ni_routes.c create mode 100644 drivers/staging/comedi/drivers/ni_routes.h create mode 100644 drivers/staging/comedi/drivers/tests/ni_routes_test.c
[snip]
diff --git a/drivers/staging/comedi/drivers/ni_routes.c b/drivers/staging/comedi/drivers/ni_routes.c new file mode 100644 index 000000000000..9e999bc4f3c4 --- /dev/null +++ b/drivers/staging/comedi/drivers/ni_routes.c
[snip]
+/* **** BEGIN Routes search routines **** */ +static int _ni_bsearch_destcmp(const int *key, const struct ni_route_set *elt) +{ + if (*key < elt->dest) + return -1; + else if (*key > elt->dest) + return 1; + return 0; +} + +static int _ni_bsearch_srccmp(const int *key, const int *elt) +{ + if (*key < *elt) + return -1; + else if (*key > *elt) + return 1; + return 0; +}
Can those be changed to use 'const void *' parameters, like you did for for the 'sort' callbacks?
+ +/** + * ni_find_route_set() - Finds the proper route set with the specified + * destination. + * @destination: Destination of which to search for the route set. + * @valid_routes: Pointer to device routes within which to search. + * + * Return: NULL if no route_set is found with the specified @destination; + * otherwise, a pointer to the route_set if found. + */ +const struct ni_route_set * +ni_find_route_set(const int destination, + const struct ni_device_routes *valid_routes) +{ + typedef int (*cmp_ftype)(const void *, const void *); + + return bsearch(&destination, valid_routes->routes, + valid_routes->n_route_sets, sizeof(struct ni_route_set), + (cmp_ftype)_ni_bsearch_destcmp); +} +EXPORT_SYMBOL_GPL(ni_find_route_set); + +/** + * ni_route_set_has_source() - Determines whether the given source is in + * included given route_set. + * + * Return: true if found; false otherwise. + */ +bool ni_route_set_has_source(const struct ni_route_set *routes, + const int source) +{ + typedef int (*cmp_ftype)(const void *, const void *); + + if (!bsearch(&source, routes->src, routes->n_src, sizeof(int), + (cmp_ftype)_ni_bsearch_srccmp)) + return false; + return true; +} +EXPORT_SYMBOL_GPL(ni_route_set_has_source);
Then you wouldn't need those nasty '(cmp_ftype)' type casts. -- -=( Ian Abbott <abbotti@xxxxxxxxx> || Web: www.mev.co.uk )=- -=( MEV Ltd. is a company registered in England & Wales. )=- -=( Registered number: 02862268. Registered address: )=- -=( 15 West Park Road, Bramhall, STOCKPORT, SK7 3JZ, UK. )=- _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel