@ -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 * tc b;
struct cmdbuf_t * cb = cs - > cmd buf ;
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 - > cmd buf ) {
cs - > cmd buf - > prev = NULL ;
cs - > curlen = cs - > cmd buf - > 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 ) ;