ISDN patches for net-next
Subsystems (2)
cover ISDN patches for net-next
Here's a series of patches for the Gigaset ISDN driver and one for the ISDN CAPI subsystem. Please merge as appropriate.
Thanks,
Tilman
Tilman Schmidt (5):
isdn/gigaset: drop duplicate declaration isdn/gigaset: clarify gigaset_modem_fill control structure isdn/gigaset: elliminate unnecessary argument from send_cb() isdn/gigaset: enable Kernel CAPI support by default isdn/capi: correct argument types of command_2_index
drivers/isdn/capi/capiutil.c | 2 +- drivers/isdn/gigaset/Kconfig | 2 +- drivers/isdn/gigaset/gigaset.h | 3 -- drivers/isdn/gigaset/usb-gigaset.c | 77 ++++++++++++++++++-------------------- 4 files changed, 38 insertions(+), 46 deletions(-)
Signature · 1 line
1.9.2.459.g68773ac
PATCH 1/5 isdn/gigaset: drop duplicate declaration
Function gigaset_skb_sent was declared twice, identically, in gigaset.h.
--- drivers/isdn/gigaset/gigaset.h | 3 --- 1 file changed, 3 deletions(-)
drivers/isdn/gigaset/gigaset.h +0 -3
@@ -751,9 +751,6 @@ void gigaset_stop(struct cardstate *cs);/* Tell common.c that the driver is being unloaded. */ int gigaset_shutdown (struct cardstate *cs); -/* Tell common.c that an skb has been sent. */ -void gigaset_skb_sent (struct bc_state *bcs,struct sk_buff *skb); -/* Append event to the queue. * Returns NULL on failure or a pointer to the event on success. * ptr must be kmalloc()ed (and not be freed by the caller).
Signature · 1 line
1.9.2.459.g68773ac
PATCH 2/5 isdn/gigaset: clarify gigaset_modem_fill control structure
In reply to Tilman SchmidtReplace the flag-controlled retry loop by explicit goto statements in the error branches to make the control structure easier to understand.
--- drivers/isdn/gigaset/usb-gigaset.c | 52 ++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 28 deletions(-)
drivers/isdn/gigaset/usb-gigaset.c +24 -28
@@ -304,7 +304,6 @@ static void gigaset_modem_fill(unsigned long data)struct cardstate *cs = (struct cardstate *) data;struct bc_state *bcs = &cs->bcs[0 ];/* only one channel */ struct cmdbuf_t *cb; -int again;gig_dbg (DEBUG_OUTPUT ,"modem_fill" );
@@ -313,36 +312,33 @@ static void gigaset_modem_fill(unsigned long data)return ; } -do { - again =0 ; -if (!bcs->tx_skb) {/* no skb is being sent */ - cb = cs->cmdbuf; -if (cb) {/* commands to send? */ -gig_dbg (DEBUG_OUTPUT ,"modem_fill: cb" ); -if (send_cb (cs, cb) <0 ) { -gig_dbg (DEBUG_OUTPUT , -"modem_fill: send_cb failed" ); - again =1 ;/* no callback will be -called! */ - } - }else {/* skbs to send? */ - bcs->tx_skb =skb_dequeue (&bcs->squeue); -if (bcs->tx_skb) -gig_dbg (DEBUG_INTR , -"Dequeued skb (Adr: %lx)!" , - (unsigned long ) bcs->tx_skb); - } - } - -if (bcs->tx_skb) { -gig_dbg (DEBUG_OUTPUT ,"modem_fill: tx_skb" ); -if (write_modem (cs) <0 ) { +again: +if (!bcs->tx_skb) {/* no skb is being sent */ + cb = cs->cmdbuf; +if (cb) {/* commands to send? */ +gig_dbg (DEBUG_OUTPUT ,"modem_fill: cb" ); +if (send_cb (cs, cb) <0 ) {gig_dbg (DEBUG_OUTPUT , -"modem_fill: write_modem failed" ); - again =1 ;/* no callback will be called! */ +"modem_fill: send_cb failed" ); + goto again;/* no callback will be called! */ } +return ; } - }while (again); + +/* skbs to send? */ + bcs->tx_skb =skb_dequeue (&bcs->squeue); +if (!bcs->tx_skb) +return ; + +gig_dbg (DEBUG_INTR ,"Dequeued skb (Adr: %lx)!" , + (unsigned long ) bcs->tx_skb); + } + +gig_dbg (DEBUG_OUTPUT ,"modem_fill: tx_skb" ); +if (write_modem (cs) <0 ) { +gig_dbg (DEBUG_OUTPUT ,"modem_fill: write_modem failed" ); + goto again;/* no callback will be called! */ + } }/*
Signature · 1 line
1.9.2.459.g68773ac
PATCH 3/5 isdn/gigaset: elliminate unnecessary argument from send_cb()
In reply to Tilman SchmidtNo need to pass a member of the cardstate structure as a separate argument if the entire structure is already passed.
--- drivers/isdn/gigaset/usb-gigaset.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-)
drivers/isdn/gigaset/usb-gigaset.c +15 -16
@@ -293,7 +293,7 @@ static int gigaset_close_bchannel(struct bc_state *bcs) }static int write_modem (struct cardstate *cs); -static int send_cb (struct cardstate *cs,struct cmdbuf_t *cb); +static int send_cb (struct cardstate *cs);/* Write tasklet handler: Continue sending current skb, or send command, or
@@ -303,7 +303,6 @@ static void gigaset_modem_fill(unsigned long data) {struct cardstate *cs = (struct cardstate *) data;struct bc_state *bcs = &cs->bcs[0 ];/* only one channel */ -struct cmdbuf_t *cb;gig_dbg (DEBUG_OUTPUT ,"modem_fill" );
@@ -314,10 +313,9 @@ static void gigaset_modem_fill(unsigned long data) again:if (!bcs->tx_skb) {/* no skb is being sent */ - cb = cs->cmdbuf; -if (cb) {/* commands to send? */ +if (cs->cmdbuf) {/* commands to send? */ gig_dbg (DEBUG_OUTPUT ,"modem_fill: cb" ); -if (send_cb (cs, cb) <0 ) { +if (send_cb (cs) <0 ) {gig_dbg (DEBUG_OUTPUT ,"modem_fill: send_cb failed" ); goto again;/* no callback will be called! */
@@ -425,9 +423,9 @@ static void gigaset_write_bulk_callback(struct urb *urb)spin_unlock_irqrestore (&cs->lock, flags); } -static int send_cb (struct cardstate *cs,struct cmdbuf_t *cb) +static int send_cb (struct cardstate *cs) { -struct cmdbuf_t *tcb; +struct cmdbuf_t *cb = cs->cmdbuf;unsigned long flags;int count;int status = -ENOENT ;
@@ -435,26 +433,27 @@ static int send_cb(struct cardstate *cs, struct cmdbuf_t *cb) do { if (!cb->len) { - tcb = cb; - spin_lock_irqsave(&cs->cmdlock, flags); cs->cmdbytes -= cs->curlen; gig_dbg(DEBUG_OUTPUT, "send_cb: sent %u bytes, %u left", cs->curlen, cs->cmdbytes); - cs->cmdbuf = cb = cb->next; - if (cb) { - cb->prev = NULL; - cs->curlen = cb->len; + cs->cmdbuf = cb->next; + if (cs->cmdbuf) { + cs->cmdbuf->prev = NULL; + cs->curlen = cs->cmdbuf->len; } else { cs->lastcmdbuf = NULL; cs->curlen = 0; } spin_unlock_irqrestore(&cs->cmdlock, flags); - if (tcb->wake_tasklet) - tasklet_schedule(tcb->wake_tasklet); - kfree(tcb); + if (cb->wake_tasklet) + tasklet_schedule(cb->wake_tasklet); + kfree(cb); + + cb = cs->cmdbuf; } + if (cb) { count = min(cb->len, ucs->bulk_out_size); gig_dbg(DEBUG_OUTPUT, "send_cb: send %d bytes", count);
Signature · 1 line
1.9.2.459.g68773ac
PATCH 4/5 isdn/gigaset: enable Kernel CAPI support by default
In reply to Tilman SchmidtKernel CAPI has been the recommended ISDN subsystem for the Gigaset driver since kernel release 2.6.34.2. It provides full backwards compatibility to the old I4L subsystem thanks to the capidrv module. I4L has been marked as deprecated for more than seven years.
--- drivers/isdn/gigaset/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/isdn/gigaset/Kconfig +1 -1
@@ -20,7 +20,7 @@ if ISDN_DRV_GIGASET config GIGASET_CAPI bool "Gigaset CAPI support" depends on ISDN_CAPI='y'||(ISDN_CAPI='m'&&ISDN_DRV_GIGASET='m') - default ISDN_I4L='n' + default 'y' help Build the Gigaset driver as a CAPI 2.0 driver interfacing with the Kernel CAPI subsystem. To use it with the old ISDN4Linux
Signature · 1 line
1.9.2.459.g68773ac
PATCH 5/5 isdn/capi: correct argument types of command_2_index
In reply to Tilman SchmidtUtility function command_2_index is always called with arguments of type u8. Adapt its declaration accordingly.
--- drivers/isdn/capi/capiutil.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/isdn/capi/capiutil.c +1 -1
@@ -201,7 +201,7 @@ static unsigned char *cpars[] =#define structTRcpyovl (x, y, l) memmove(y, x, l)/*-------------------------------------------------------*/ -static unsigned command_2_index (unsigned c,unsigned sc) +static unsigned command_2_index (u8 c,u8 sc) {if (c &0x80 ) c =0x9 + (c &0x0f );
Signature · 1 line
1.9.2.459.g68773ac
David Miller
maintainerFrom: Tilman Schmidt <[email protected]>
Date: Wed, 10 Dec 2014 13:41:55 +0100 (CET)
Quoted 2 lines
Here's a series of patches for the Gigaset ISDN driver and one for the ISDN CAPI subsystem. Please merge as appropriate.
Series applied, thank you.