From a9686e786896297f9f1d74a2cac4ffccc7b3e50e Mon Sep 17 00:00:00 2001 From: Christoph Jaeger Date: Mon, 4 Aug 2014 14:54:52 +0200 Subject: staging: ozwpan: Simplify app interface Simplify the somewhat overcomplicated application interface; improves readability and saves a bunch of lines. Use designated struct initializers for clarity. Signed-off-by: Christoph Jaeger Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ozwpan/ozpd.c | 151 ++++++++++++------------------------------ 1 file changed, 43 insertions(+), 108 deletions(-) (limited to 'drivers/staging/ozwpan/ozpd.c') diff --git a/drivers/staging/ozwpan/ozpd.c b/drivers/staging/ozwpan/ozpd.c index a27c603..6c4b13f 100644 --- a/drivers/staging/ozwpan/ozpd.c +++ b/drivers/staging/ozwpan/ozpd.c @@ -32,11 +32,6 @@ static void oz_retire_frame(struct oz_pd *pd, struct oz_tx_frame *f); static void oz_isoc_stream_free(struct oz_isoc_stream *st); static int oz_send_next_queued_frame(struct oz_pd *pd, int more_data); static void oz_isoc_destructor(struct sk_buff *skb); -static int oz_def_app_init(void); -static void oz_def_app_term(void); -static int oz_def_app_start(struct oz_pd *pd, int resume); -static void oz_def_app_stop(struct oz_pd *pd, int pause); -static void oz_def_app_rx(struct oz_pd *pd, struct oz_elt *elt); /* * Counts the uncompleted isoc frames submitted to netcard. @@ -45,80 +40,25 @@ static atomic_t g_submitted_isoc = ATOMIC_INIT(0); /* Application handler functions. */ -static const struct oz_app_if g_app_if[OZ_APPID_MAX] = { - {oz_usb_init, - oz_usb_term, - oz_usb_start, - oz_usb_stop, - oz_usb_rx, - oz_usb_heartbeat, - oz_usb_farewell, - OZ_APPID_USB}, - - {oz_def_app_init, - oz_def_app_term, - oz_def_app_start, - oz_def_app_stop, - oz_def_app_rx, - NULL, - NULL, - OZ_APPID_UNUSED1}, - - {oz_def_app_init, - oz_def_app_term, - oz_def_app_start, - oz_def_app_stop, - oz_def_app_rx, - NULL, - NULL, - OZ_APPID_UNUSED2}, - - {oz_cdev_init, - oz_cdev_term, - oz_cdev_start, - oz_cdev_stop, - oz_cdev_rx, - NULL, - NULL, - OZ_APPID_SERIAL}, +static const struct oz_app_if g_app_if[OZ_NB_APPS] = { + [OZ_APPID_USB] = { + .init = oz_usb_init, + .term = oz_usb_term, + .start = oz_usb_start, + .stop = oz_usb_stop, + .rx = oz_usb_rx, + .heartbeat = oz_usb_heartbeat, + .farewell = oz_usb_farewell, + }, + [OZ_APPID_SERIAL] = { + .init = oz_cdev_init, + .term = oz_cdev_term, + .start = oz_cdev_start, + .stop = oz_cdev_stop, + .rx = oz_cdev_rx, + }, }; -/* - * Context: process - */ -static int oz_def_app_init(void) -{ - return 0; -} - -/* - * Context: process - */ -static void oz_def_app_term(void) -{ -} - -/* - * Context: softirq - */ -static int oz_def_app_start(struct oz_pd *pd, int resume) -{ - return 0; -} - -/* - * Context: softirq - */ -static void oz_def_app_stop(struct oz_pd *pd, int pause) -{ -} - -/* - * Context: softirq - */ -static void oz_def_app_rx(struct oz_pd *pd, struct oz_elt *elt) -{ -} /* * Context: softirq or process @@ -169,7 +109,7 @@ struct oz_pd *oz_pd_alloc(const u8 *mac_addr) if (pd) { int i; atomic_set(&pd->ref_count, 2); - for (i = 0; i < OZ_APPID_MAX; i++) + for (i = 0; i < OZ_NB_APPS; i++) spin_lock_init(&pd->app_lock[i]); pd->last_rx_pkt_num = 0xffffffff; oz_pd_set_state(pd, OZ_PD_S_IDLE); @@ -269,23 +209,21 @@ void oz_pd_destroy(struct oz_pd *pd) */ int oz_services_start(struct oz_pd *pd, u16 apps, int resume) { - const struct oz_app_if *ai; - int rc = 0; + int i, rc = 0; oz_pd_dbg(pd, ON, "%s: (0x%x) resume(%d)\n", __func__, apps, resume); - for (ai = g_app_if; ai < &g_app_if[OZ_APPID_MAX]; ai++) { - if (apps & (1<app_id)) { - if (ai->start(pd, resume)) { + for (i = 0; i < OZ_NB_APPS; i++) { + if (g_app_if[i].start && (apps & (1 << i))) { + if (g_app_if[i].start(pd, resume)) { rc = -1; oz_pd_dbg(pd, ON, - "Unable to start service %d\n", - ai->app_id); + "Unable to start service %d\n", i); break; } spin_lock_bh(&g_polling_lock); - pd->total_apps |= (1<app_id); + pd->total_apps |= (1 << i); if (resume) - pd->paused_apps &= ~(1<app_id); + pd->paused_apps &= ~(1 << i); spin_unlock_bh(&g_polling_lock); } } @@ -297,20 +235,20 @@ int oz_services_start(struct oz_pd *pd, u16 apps, int resume) */ void oz_services_stop(struct oz_pd *pd, u16 apps, int pause) { - const struct oz_app_if *ai; + int i; oz_pd_dbg(pd, ON, "%s: (0x%x) pause(%d)\n", __func__, apps, pause); - for (ai = g_app_if; ai < &g_app_if[OZ_APPID_MAX]; ai++) { - if (apps & (1<app_id)) { + for (i = 0; i < OZ_NB_APPS; i++) { + if (g_app_if[i].stop && (apps & (1 << i))) { spin_lock_bh(&g_polling_lock); if (pause) { - pd->paused_apps |= (1<app_id); + pd->paused_apps |= (1 << i); } else { - pd->total_apps &= ~(1<app_id); - pd->paused_apps &= ~(1<app_id); + pd->total_apps &= ~(1 << i); + pd->paused_apps &= ~(1 << i); } spin_unlock_bh(&g_polling_lock); - ai->stop(pd, pause); + g_app_if[i].stop(pd, pause); } } } @@ -320,12 +258,11 @@ void oz_services_stop(struct oz_pd *pd, u16 apps, int pause) */ void oz_pd_heartbeat(struct oz_pd *pd, u16 apps) { - const struct oz_app_if *ai; - int more = 0; + int i, more = 0; - for (ai = g_app_if; ai < &g_app_if[OZ_APPID_MAX]; ai++) { - if (ai->heartbeat && (apps & (1<app_id))) { - if (ai->heartbeat(pd)) + for (i = 0; i < OZ_NB_APPS; i++) { + if (g_app_if[i].heartbeat && (apps & (1 << i))) { + if (g_app_if[i].heartbeat(pd)) more = 1; } } @@ -957,9 +894,10 @@ void oz_apps_init(void) { int i; - for (i = 0; i < OZ_APPID_MAX; i++) + for (i = 0; i < OZ_NB_APPS; i++) { if (g_app_if[i].init) g_app_if[i].init(); + } } /* @@ -970,9 +908,10 @@ void oz_apps_term(void) int i; /* Terminate all the apps. */ - for (i = 0; i < OZ_APPID_MAX; i++) + for (i = 0; i < OZ_NB_APPS; i++) { if (g_app_if[i].term) g_app_if[i].term(); + } } /* @@ -980,12 +919,8 @@ void oz_apps_term(void) */ void oz_handle_app_elt(struct oz_pd *pd, u8 app_id, struct oz_elt *elt) { - const struct oz_app_if *ai; - - if (app_id == 0 || app_id > OZ_APPID_MAX) - return; - ai = &g_app_if[app_id-1]; - ai->rx(pd, elt); + if (app_id < OZ_NB_APPS && g_app_if[app_id].rx) + g_app_if[app_id].rx(pd, elt); } /* @@ -994,7 +929,7 @@ void oz_handle_app_elt(struct oz_pd *pd, u8 app_id, struct oz_elt *elt) void oz_pd_indicate_farewells(struct oz_pd *pd) { struct oz_farewell *f; - const struct oz_app_if *ai = &g_app_if[OZ_APPID_USB-1]; + const struct oz_app_if *ai = &g_app_if[OZ_APPID_USB]; while (1) { spin_lock_bh(&g_polling_lock); -- cgit v1.1