diff options
Diffstat (limited to 'drivers/isdn/gigaset')
-rw-r--r-- | drivers/isdn/gigaset/asyncdata.c | 80 | ||||
-rw-r--r-- | drivers/isdn/gigaset/bas-gigaset.c | 611 | ||||
-rw-r--r-- | drivers/isdn/gigaset/common.c | 197 | ||||
-rw-r--r-- | drivers/isdn/gigaset/ev-layer.c | 265 | ||||
-rw-r--r-- | drivers/isdn/gigaset/gigaset.h | 199 | ||||
-rw-r--r-- | drivers/isdn/gigaset/i4l.c | 178 | ||||
-rw-r--r-- | drivers/isdn/gigaset/interface.c | 157 | ||||
-rw-r--r-- | drivers/isdn/gigaset/isocdata.c | 109 | ||||
-rw-r--r-- | drivers/isdn/gigaset/proc.c | 8 | ||||
-rw-r--r-- | drivers/isdn/gigaset/usb-gigaset.c | 239 |
10 files changed, 1078 insertions, 965 deletions
diff --git a/drivers/isdn/gigaset/asyncdata.c b/drivers/isdn/gigaset/asyncdata.c index 778d864ab612..a375d0a411b5 100644 --- a/drivers/isdn/gigaset/asyncdata.c +++ b/drivers/isdn/gigaset/asyncdata.c | |||
@@ -41,7 +41,7 @@ static inline int muststuff(unsigned char c) | |||
41 | * number of processed bytes | 41 | * number of processed bytes |
42 | */ | 42 | */ |
43 | static inline int cmd_loop(unsigned char c, unsigned char *src, int numbytes, | 43 | static inline int cmd_loop(unsigned char c, unsigned char *src, int numbytes, |
44 | struct inbuf_t *inbuf) | 44 | struct inbuf_t *inbuf) |
45 | { | 45 | { |
46 | struct cardstate *cs = inbuf->cs; | 46 | struct cardstate *cs = inbuf->cs; |
47 | unsigned cbytes = cs->cbytes; | 47 | unsigned cbytes = cs->cbytes; |
@@ -51,8 +51,8 @@ static inline int cmd_loop(unsigned char c, unsigned char *src, int numbytes, | |||
51 | for (;;) { | 51 | for (;;) { |
52 | cs->respdata[cbytes] = c; | 52 | cs->respdata[cbytes] = c; |
53 | if (c == 10 || c == 13) { | 53 | if (c == 10 || c == 13) { |
54 | dbg(DEBUG_TRANSCMD, "%s: End of Command (%d Bytes)", | 54 | gig_dbg(DEBUG_TRANSCMD, "%s: End of Command (%d Bytes)", |
55 | __func__, cbytes); | 55 | __func__, cbytes); |
56 | cs->cbytes = cbytes; | 56 | cs->cbytes = cbytes; |
57 | gigaset_handle_modem_response(cs); /* can change | 57 | gigaset_handle_modem_response(cs); /* can change |
58 | cs->dle */ | 58 | cs->dle */ |
@@ -68,7 +68,7 @@ static inline int cmd_loop(unsigned char c, unsigned char *src, int numbytes, | |||
68 | if (cbytes < MAX_RESP_SIZE - 1) | 68 | if (cbytes < MAX_RESP_SIZE - 1) |
69 | cbytes++; | 69 | cbytes++; |
70 | else | 70 | else |
71 | warn("response too large"); | 71 | dev_warn(cs->dev, "response too large\n"); |
72 | } | 72 | } |
73 | 73 | ||
74 | if (!numbytes) | 74 | if (!numbytes) |
@@ -93,7 +93,7 @@ static inline int cmd_loop(unsigned char c, unsigned char *src, int numbytes, | |||
93 | * number of processed bytes | 93 | * number of processed bytes |
94 | */ | 94 | */ |
95 | static inline int lock_loop(unsigned char *src, int numbytes, | 95 | static inline int lock_loop(unsigned char *src, int numbytes, |
96 | struct inbuf_t *inbuf) | 96 | struct inbuf_t *inbuf) |
97 | { | 97 | { |
98 | struct cardstate *cs = inbuf->cs; | 98 | struct cardstate *cs = inbuf->cs; |
99 | 99 | ||
@@ -113,7 +113,7 @@ static inline int lock_loop(unsigned char *src, int numbytes, | |||
113 | * numbytes (all bytes processed) on error --FIXME | 113 | * numbytes (all bytes processed) on error --FIXME |
114 | */ | 114 | */ |
115 | static inline int hdlc_loop(unsigned char c, unsigned char *src, int numbytes, | 115 | static inline int hdlc_loop(unsigned char c, unsigned char *src, int numbytes, |
116 | struct inbuf_t *inbuf) | 116 | struct inbuf_t *inbuf) |
117 | { | 117 | { |
118 | struct cardstate *cs = inbuf->cs; | 118 | struct cardstate *cs = inbuf->cs; |
119 | struct bc_state *bcs = inbuf->bcs; | 119 | struct bc_state *bcs = inbuf->bcs; |
@@ -154,39 +154,37 @@ byte_stuff: | |||
154 | c ^= PPP_TRANS; | 154 | c ^= PPP_TRANS; |
155 | #ifdef CONFIG_GIGASET_DEBUG | 155 | #ifdef CONFIG_GIGASET_DEBUG |
156 | if (unlikely(!muststuff(c))) | 156 | if (unlikely(!muststuff(c))) |
157 | dbg(DEBUG_HDLC, | 157 | gig_dbg(DEBUG_HDLC, "byte stuffed: 0x%02x", c); |
158 | "byte stuffed: 0x%02x", c); | ||
159 | #endif | 158 | #endif |
160 | } else if (unlikely(c == PPP_FLAG)) { | 159 | } else if (unlikely(c == PPP_FLAG)) { |
161 | if (unlikely(inputstate & INS_skip_frame)) { | 160 | if (unlikely(inputstate & INS_skip_frame)) { |
162 | if (!(inputstate & INS_have_data)) { /* 7E 7E */ | 161 | if (!(inputstate & INS_have_data)) { /* 7E 7E */ |
163 | //dbg(DEBUG_HDLC, "(7e)7e------------------------"); | ||
164 | #ifdef CONFIG_GIGASET_DEBUG | 162 | #ifdef CONFIG_GIGASET_DEBUG |
165 | ++bcs->emptycount; | 163 | ++bcs->emptycount; |
166 | #endif | 164 | #endif |
167 | } else | 165 | } else |
168 | dbg(DEBUG_HDLC, | 166 | gig_dbg(DEBUG_HDLC, |
169 | "7e----------------------------"); | 167 | "7e----------------------------"); |
170 | 168 | ||
171 | /* end of frame */ | 169 | /* end of frame */ |
172 | error = 1; | 170 | error = 1; |
173 | gigaset_rcv_error(NULL, cs, bcs); | 171 | gigaset_rcv_error(NULL, cs, bcs); |
174 | } else if (!(inputstate & INS_have_data)) { /* 7E 7E */ | 172 | } else if (!(inputstate & INS_have_data)) { /* 7E 7E */ |
175 | //dbg(DEBUG_HDLC, "(7e)7e------------------------"); | ||
176 | #ifdef CONFIG_GIGASET_DEBUG | 173 | #ifdef CONFIG_GIGASET_DEBUG |
177 | ++bcs->emptycount; | 174 | ++bcs->emptycount; |
178 | #endif | 175 | #endif |
179 | break; | 176 | break; |
180 | } else { | 177 | } else { |
181 | dbg(DEBUG_HDLC, | 178 | gig_dbg(DEBUG_HDLC, |
182 | "7e----------------------------"); | 179 | "7e----------------------------"); |
183 | 180 | ||
184 | /* end of frame */ | 181 | /* end of frame */ |
185 | error = 0; | 182 | error = 0; |
186 | 183 | ||
187 | if (unlikely(fcs != PPP_GOODFCS)) { | 184 | if (unlikely(fcs != PPP_GOODFCS)) { |
188 | err("Packet checksum at %lu failed, " | 185 | dev_err(cs->dev, |
189 | "packet is corrupted (%u bytes)!", | 186 | "Packet checksum at %lu failed, " |
187 | "packet is corrupted (%u bytes)!\n", | ||
190 | bcs->rcvbytes, skb->len); | 188 | bcs->rcvbytes, skb->len); |
191 | compskb = NULL; | 189 | compskb = NULL; |
192 | gigaset_rcv_error(compskb, cs, bcs); | 190 | gigaset_rcv_error(compskb, cs, bcs); |
@@ -200,9 +198,11 @@ byte_stuff: | |||
200 | skb = NULL; | 198 | skb = NULL; |
201 | inputstate |= INS_skip_frame; | 199 | inputstate |= INS_skip_frame; |
202 | if (l == 1) { | 200 | if (l == 1) { |
203 | err("invalid packet size (1)!"); | 201 | dev_err(cs->dev, |
202 | "invalid packet size (1)!\n"); | ||
204 | error = 1; | 203 | error = 1; |
205 | gigaset_rcv_error(NULL, cs, bcs); | 204 | gigaset_rcv_error(NULL, |
205 | cs, bcs); | ||
206 | } | 206 | } |
207 | } | 207 | } |
208 | if (likely(!(error || | 208 | if (likely(!(error || |
@@ -225,7 +225,8 @@ byte_stuff: | |||
225 | } else if (likely((skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL)) { | 225 | } else if (likely((skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL)) { |
226 | skb_reserve(skb, HW_HDR_LEN); | 226 | skb_reserve(skb, HW_HDR_LEN); |
227 | } else { | 227 | } else { |
228 | warn("could not allocate new skb"); | 228 | dev_warn(cs->dev, |
229 | "could not allocate new skb\n"); | ||
229 | inputstate |= INS_skip_frame; | 230 | inputstate |= INS_skip_frame; |
230 | } | 231 | } |
231 | 232 | ||
@@ -233,7 +234,7 @@ byte_stuff: | |||
233 | #ifdef CONFIG_GIGASET_DEBUG | 234 | #ifdef CONFIG_GIGASET_DEBUG |
234 | } else if (unlikely(muststuff(c))) { | 235 | } else if (unlikely(muststuff(c))) { |
235 | /* Should not happen. Possible after ZDLE=1<CR><LF>. */ | 236 | /* Should not happen. Possible after ZDLE=1<CR><LF>. */ |
236 | dbg(DEBUG_HDLC, "not byte stuffed: 0x%02x", c); | 237 | gig_dbg(DEBUG_HDLC, "not byte stuffed: 0x%02x", c); |
237 | #endif | 238 | #endif |
238 | } | 239 | } |
239 | 240 | ||
@@ -241,8 +242,8 @@ byte_stuff: | |||
241 | 242 | ||
242 | #ifdef CONFIG_GIGASET_DEBUG | 243 | #ifdef CONFIG_GIGASET_DEBUG |
243 | if (unlikely(!(inputstate & INS_have_data))) { | 244 | if (unlikely(!(inputstate & INS_have_data))) { |
244 | dbg(DEBUG_HDLC, | 245 | gig_dbg(DEBUG_HDLC, "7e (%d x) ================", |
245 | "7e (%d x) ================", bcs->emptycount); | 246 | bcs->emptycount); |
246 | bcs->emptycount = 0; | 247 | bcs->emptycount = 0; |
247 | } | 248 | } |
248 | #endif | 249 | #endif |
@@ -251,7 +252,7 @@ byte_stuff: | |||
251 | 252 | ||
252 | if (likely(!(inputstate & INS_skip_frame))) { | 253 | if (likely(!(inputstate & INS_skip_frame))) { |
253 | if (unlikely(skb->len == SBUFSIZE)) { | 254 | if (unlikely(skb->len == SBUFSIZE)) { |
254 | warn("received packet too long"); | 255 | dev_warn(cs->dev, "received packet too long\n"); |
255 | dev_kfree_skb_any(skb); | 256 | dev_kfree_skb_any(skb); |
256 | skb = NULL; | 257 | skb = NULL; |
257 | inputstate |= INS_skip_frame; | 258 | inputstate |= INS_skip_frame; |
@@ -287,7 +288,7 @@ byte_stuff: | |||
287 | * numbytes (all bytes processed) on error --FIXME | 288 | * numbytes (all bytes processed) on error --FIXME |
288 | */ | 289 | */ |
289 | static inline int iraw_loop(unsigned char c, unsigned char *src, int numbytes, | 290 | static inline int iraw_loop(unsigned char c, unsigned char *src, int numbytes, |
290 | struct inbuf_t *inbuf) | 291 | struct inbuf_t *inbuf) |
291 | { | 292 | { |
292 | struct cardstate *cs = inbuf->cs; | 293 | struct cardstate *cs = inbuf->cs; |
293 | struct bc_state *bcs = inbuf->bcs; | 294 | struct bc_state *bcs = inbuf->bcs; |
@@ -307,7 +308,7 @@ static inline int iraw_loop(unsigned char c, unsigned char *src, int numbytes, | |||
307 | if (likely(!(inputstate & INS_skip_frame))) { | 308 | if (likely(!(inputstate & INS_skip_frame))) { |
308 | if (unlikely(skb->len == SBUFSIZE)) { | 309 | if (unlikely(skb->len == SBUFSIZE)) { |
309 | //FIXME just pass skb up and allocate a new one | 310 | //FIXME just pass skb up and allocate a new one |
310 | warn("received packet too long"); | 311 | dev_warn(cs->dev, "received packet too long\n"); |
311 | dev_kfree_skb_any(skb); | 312 | dev_kfree_skb_any(skb); |
312 | skb = NULL; | 313 | skb = NULL; |
313 | inputstate |= INS_skip_frame; | 314 | inputstate |= INS_skip_frame; |
@@ -341,7 +342,7 @@ static inline int iraw_loop(unsigned char c, unsigned char *src, int numbytes, | |||
341 | != NULL)) { | 342 | != NULL)) { |
342 | skb_reserve(skb, HW_HDR_LEN); | 343 | skb_reserve(skb, HW_HDR_LEN); |
343 | } else { | 344 | } else { |
344 | warn("could not allocate new skb"); | 345 | dev_warn(cs->dev, "could not allocate new skb\n"); |
345 | inputstate |= INS_skip_frame; | 346 | inputstate |= INS_skip_frame; |
346 | } | 347 | } |
347 | } | 348 | } |
@@ -362,13 +363,13 @@ void gigaset_m10x_input(struct inbuf_t *inbuf) | |||
362 | 363 | ||
363 | head = atomic_read(&inbuf->head); | 364 | head = atomic_read(&inbuf->head); |
364 | tail = atomic_read(&inbuf->tail); | 365 | tail = atomic_read(&inbuf->tail); |
365 | dbg(DEBUG_INTR, "buffer state: %u -> %u", head, tail); | 366 | gig_dbg(DEBUG_INTR, "buffer state: %u -> %u", head, tail); |
366 | 367 | ||
367 | if (head != tail) { | 368 | if (head != tail) { |
368 | cs = inbuf->cs; | 369 | cs = inbuf->cs; |
369 | src = inbuf->data + head; | 370 | src = inbuf->data + head; |
370 | numbytes = (head > tail ? RBUFSIZE : tail) - head; | 371 | numbytes = (head > tail ? RBUFSIZE : tail) - head; |
371 | dbg(DEBUG_INTR, "processing %u bytes", numbytes); | 372 | gig_dbg(DEBUG_INTR, "processing %u bytes", numbytes); |
372 | 373 | ||
373 | while (numbytes) { | 374 | while (numbytes) { |
374 | if (atomic_read(&cs->mstate) == MS_LOCKED) { | 375 | if (atomic_read(&cs->mstate) == MS_LOCKED) { |
@@ -400,13 +401,14 @@ void gigaset_m10x_input(struct inbuf_t *inbuf) | |||
400 | 401 | ||
401 | src += procbytes; | 402 | src += procbytes; |
402 | numbytes -= procbytes; | 403 | numbytes -= procbytes; |
403 | } else { /* DLE-char */ | 404 | } else { /* DLE char */ |
404 | inbuf->inputstate &= ~INS_DLE_char; | 405 | inbuf->inputstate &= ~INS_DLE_char; |
405 | switch (c) { | 406 | switch (c) { |
406 | case 'X': /*begin of command*/ | 407 | case 'X': /*begin of command*/ |
407 | #ifdef CONFIG_GIGASET_DEBUG | 408 | #ifdef CONFIG_GIGASET_DEBUG |
408 | if (inbuf->inputstate & INS_command) | 409 | if (inbuf->inputstate & INS_command) |
409 | err("received <DLE> 'X' in command mode"); | 410 | dev_err(cs->dev, |
411 | "received <DLE> 'X' in command mode\n"); | ||
410 | #endif | 412 | #endif |
411 | inbuf->inputstate |= | 413 | inbuf->inputstate |= |
412 | INS_command | INS_DLE_command; | 414 | INS_command | INS_DLE_command; |
@@ -414,7 +416,8 @@ void gigaset_m10x_input(struct inbuf_t *inbuf) | |||
414 | case '.': /*end of command*/ | 416 | case '.': /*end of command*/ |
415 | #ifdef CONFIG_GIGASET_DEBUG | 417 | #ifdef CONFIG_GIGASET_DEBUG |
416 | if (!(inbuf->inputstate & INS_command)) | 418 | if (!(inbuf->inputstate & INS_command)) |
417 | err("received <DLE> '.' in hdlc mode"); | 419 | dev_err(cs->dev, |
420 | "received <DLE> '.' in hdlc mode\n"); | ||
418 | #endif | 421 | #endif |
419 | inbuf->inputstate &= cs->dle ? | 422 | inbuf->inputstate &= cs->dle ? |
420 | ~(INS_DLE_command|INS_command) | 423 | ~(INS_DLE_command|INS_command) |
@@ -422,7 +425,9 @@ void gigaset_m10x_input(struct inbuf_t *inbuf) | |||
422 | break; | 425 | break; |
423 | //case DLE_FLAG: /*DLE_FLAG in data stream*/ /* schon oben behandelt! */ | 426 | //case DLE_FLAG: /*DLE_FLAG in data stream*/ /* schon oben behandelt! */ |
424 | default: | 427 | default: |
425 | err("received 0x10 0x%02x!", (int) c); | 428 | dev_err(cs->dev, |
429 | "received 0x10 0x%02x!\n", | ||
430 | (int) c); | ||
426 | /* FIXME: reset driver?? */ | 431 | /* FIXME: reset driver?? */ |
427 | } | 432 | } |
428 | } | 433 | } |
@@ -441,7 +446,7 @@ nextbyte: | |||
441 | } | 446 | } |
442 | } | 447 | } |
443 | 448 | ||
444 | dbg(DEBUG_INTR, "setting head to %u", head); | 449 | gig_dbg(DEBUG_INTR, "setting head to %u", head); |
445 | atomic_set(&inbuf->head, head); | 450 | atomic_set(&inbuf->head, head); |
446 | } | 451 | } |
447 | } | 452 | } |
@@ -476,14 +481,13 @@ static struct sk_buff *HDLC_Encode(struct sk_buff *skb, int head, int tail) | |||
476 | stuf_cnt++; | 481 | stuf_cnt++; |
477 | fcs = crc_ccitt_byte(fcs, *cp++); | 482 | fcs = crc_ccitt_byte(fcs, *cp++); |
478 | } | 483 | } |
479 | fcs ^= 0xffff; /* complement */ | 484 | fcs ^= 0xffff; /* complement */ |
480 | 485 | ||
481 | /* size of new buffer: original size + number of stuffing bytes | 486 | /* size of new buffer: original size + number of stuffing bytes |
482 | * + 2 bytes FCS + 2 stuffing bytes for FCS (if needed) + 2 flag bytes | 487 | * + 2 bytes FCS + 2 stuffing bytes for FCS (if needed) + 2 flag bytes |
483 | */ | 488 | */ |
484 | hdlc_skb = dev_alloc_skb(skb->len + stuf_cnt + 6 + tail + head); | 489 | hdlc_skb = dev_alloc_skb(skb->len + stuf_cnt + 6 + tail + head); |
485 | if (!hdlc_skb) { | 490 | if (!hdlc_skb) { |
486 | err("unable to allocate memory for HDLC encoding!"); | ||
487 | dev_kfree_skb(skb); | 491 | dev_kfree_skb(skb); |
488 | return NULL; | 492 | return NULL; |
489 | } | 493 | } |
@@ -505,7 +509,7 @@ static struct sk_buff *HDLC_Encode(struct sk_buff *skb, int head, int tail) | |||
505 | } | 509 | } |
506 | 510 | ||
507 | /* Finally add FCS (byte stuffed) and flag sequence */ | 511 | /* Finally add FCS (byte stuffed) and flag sequence */ |
508 | c = (fcs & 0x00ff); /* least significant byte first */ | 512 | c = (fcs & 0x00ff); /* least significant byte first */ |
509 | if (muststuff(c)) { | 513 | if (muststuff(c)) { |
510 | *(skb_put(hdlc_skb, 1)) = PPP_ESCAPE; | 514 | *(skb_put(hdlc_skb, 1)) = PPP_ESCAPE; |
511 | c ^= PPP_TRANS; | 515 | c ^= PPP_TRANS; |
@@ -543,7 +547,6 @@ static struct sk_buff *iraw_encode(struct sk_buff *skb, int head, int tail) | |||
543 | /* worst case: every byte must be stuffed */ | 547 | /* worst case: every byte must be stuffed */ |
544 | iraw_skb = dev_alloc_skb(2*skb->len + tail + head); | 548 | iraw_skb = dev_alloc_skb(2*skb->len + tail + head); |
545 | if (!iraw_skb) { | 549 | if (!iraw_skb) { |
546 | err("unable to allocate memory for HDLC encoding!"); | ||
547 | dev_kfree_skb(skb); | 550 | dev_kfree_skb(skb); |
548 | return NULL; | 551 | return NULL; |
549 | } | 552 | } |
@@ -584,8 +587,11 @@ int gigaset_m10x_send_skb(struct bc_state *bcs, struct sk_buff *skb) | |||
584 | skb = HDLC_Encode(skb, HW_HDR_LEN, 0); | 587 | skb = HDLC_Encode(skb, HW_HDR_LEN, 0); |
585 | else | 588 | else |
586 | skb = iraw_encode(skb, HW_HDR_LEN, 0); | 589 | skb = iraw_encode(skb, HW_HDR_LEN, 0); |
587 | if (!skb) | 590 | if (!skb) { |
591 | dev_err(bcs->cs->dev, | ||
592 | "unable to allocate memory for encoding!\n"); | ||
588 | return -ENOMEM; | 593 | return -ENOMEM; |
594 | } | ||
589 | 595 | ||
590 | skb_queue_tail(&bcs->squeue, skb); | 596 | skb_queue_tail(&bcs->squeue, skb); |
591 | tasklet_schedule(&bcs->cs->write_tasklet); | 597 | tasklet_schedule(&bcs->cs->write_tasklet); |
diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c index fb2c13ae7cfd..580831d9dba1 100644 --- a/drivers/isdn/gigaset/bas-gigaset.c +++ b/drivers/isdn/gigaset/bas-gigaset.c | |||
@@ -81,25 +81,25 @@ static void gigaset_disconnect(struct usb_interface *interface); | |||
81 | /*==============================================================================*/ | 81 | /*==============================================================================*/ |
82 | 82 | ||
83 | struct bas_cardstate { | 83 | struct bas_cardstate { |
84 | struct usb_device *udev; /* USB device pointer */ | 84 | struct usb_device *udev; /* USB device pointer */ |
85 | struct usb_interface *interface; /* interface for this device */ | 85 | struct usb_interface *interface; /* interface for this device */ |
86 | unsigned char minor; /* starting minor number */ | 86 | unsigned char minor; /* starting minor number */ |
87 | 87 | ||
88 | struct urb *urb_ctrl; /* control pipe default URB */ | 88 | struct urb *urb_ctrl; /* control pipe default URB */ |
89 | struct usb_ctrlrequest dr_ctrl; | 89 | struct usb_ctrlrequest dr_ctrl; |
90 | struct timer_list timer_ctrl; /* control request timeout */ | 90 | struct timer_list timer_ctrl; /* control request timeout */ |
91 | 91 | ||
92 | struct timer_list timer_atrdy; /* AT command ready timeout */ | 92 | struct timer_list timer_atrdy; /* AT command ready timeout */ |
93 | struct urb *urb_cmd_out; /* for sending AT commands */ | 93 | struct urb *urb_cmd_out; /* for sending AT commands */ |
94 | struct usb_ctrlrequest dr_cmd_out; | 94 | struct usb_ctrlrequest dr_cmd_out; |
95 | int retry_cmd_out; | 95 | int retry_cmd_out; |
96 | 96 | ||
97 | struct urb *urb_cmd_in; /* for receiving AT replies */ | 97 | struct urb *urb_cmd_in; /* for receiving AT replies */ |
98 | struct usb_ctrlrequest dr_cmd_in; | 98 | struct usb_ctrlrequest dr_cmd_in; |
99 | struct timer_list timer_cmd_in; /* receive request timeout */ | 99 | struct timer_list timer_cmd_in; /* receive request timeout */ |
100 | unsigned char *rcvbuf; /* AT reply receive buffer */ | 100 | unsigned char *rcvbuf; /* AT reply receive buffer */ |
101 | 101 | ||
102 | struct urb *urb_int_in; /* URB for interrupt pipe */ | 102 | struct urb *urb_int_in; /* URB for interrupt pipe */ |
103 | unsigned char int_in_buf[3]; | 103 | unsigned char int_in_buf[3]; |
104 | 104 | ||
105 | spinlock_t lock; /* locks all following */ | 105 | spinlock_t lock; /* locks all following */ |
@@ -201,54 +201,55 @@ static inline char *usb_pipetype_str(int pipe) | |||
201 | * write content of URB to syslog for debugging | 201 | * write content of URB to syslog for debugging |
202 | */ | 202 | */ |
203 | static inline void dump_urb(enum debuglevel level, const char *tag, | 203 | static inline void dump_urb(enum debuglevel level, const char *tag, |
204 | struct urb *urb) | 204 | struct urb *urb) |
205 | { | 205 | { |
206 | #ifdef CONFIG_GIGASET_DEBUG | 206 | #ifdef CONFIG_GIGASET_DEBUG |
207 | int i; | 207 | int i; |
208 | IFNULLRET(tag); | 208 | IFNULLRET(tag); |
209 | dbg(level, "%s urb(0x%08lx)->{", tag, (unsigned long) urb); | 209 | gig_dbg(level, "%s urb(0x%08lx)->{", tag, (unsigned long) urb); |
210 | if (urb) { | 210 | if (urb) { |
211 | dbg(level, | 211 | gig_dbg(level, |
212 | " dev=0x%08lx, pipe=%s:EP%d/DV%d:%s, " | 212 | " dev=0x%08lx, pipe=%s:EP%d/DV%d:%s, " |
213 | "status=%d, hcpriv=0x%08lx, transfer_flags=0x%x,", | 213 | "status=%d, hcpriv=0x%08lx, transfer_flags=0x%x,", |
214 | (unsigned long) urb->dev, | 214 | (unsigned long) urb->dev, |
215 | usb_pipetype_str(urb->pipe), | 215 | usb_pipetype_str(urb->pipe), |
216 | usb_pipeendpoint(urb->pipe), usb_pipedevice(urb->pipe), | 216 | usb_pipeendpoint(urb->pipe), usb_pipedevice(urb->pipe), |
217 | usb_pipein(urb->pipe) ? "in" : "out", | 217 | usb_pipein(urb->pipe) ? "in" : "out", |
218 | urb->status, (unsigned long) urb->hcpriv, | 218 | urb->status, (unsigned long) urb->hcpriv, |
219 | urb->transfer_flags); | 219 | urb->transfer_flags); |
220 | dbg(level, | 220 | gig_dbg(level, |
221 | " transfer_buffer=0x%08lx[%d], actual_length=%d, " | 221 | " transfer_buffer=0x%08lx[%d], actual_length=%d, " |
222 | "bandwidth=%d, setup_packet=0x%08lx,", | 222 | "bandwidth=%d, setup_packet=0x%08lx,", |
223 | (unsigned long) urb->transfer_buffer, | 223 | (unsigned long) urb->transfer_buffer, |
224 | urb->transfer_buffer_length, urb->actual_length, | 224 | urb->transfer_buffer_length, urb->actual_length, |
225 | urb->bandwidth, (unsigned long) urb->setup_packet); | 225 | urb->bandwidth, (unsigned long) urb->setup_packet); |
226 | dbg(level, | 226 | gig_dbg(level, |
227 | " start_frame=%d, number_of_packets=%d, interval=%d, " | 227 | " start_frame=%d, number_of_packets=%d, interval=%d, " |
228 | "error_count=%d,", | 228 | "error_count=%d,", |
229 | urb->start_frame, urb->number_of_packets, urb->interval, | 229 | urb->start_frame, urb->number_of_packets, urb->interval, |
230 | urb->error_count); | 230 | urb->error_count); |
231 | dbg(level, | 231 | gig_dbg(level, |
232 | " context=0x%08lx, complete=0x%08lx, iso_frame_desc[]={", | 232 | " context=0x%08lx, complete=0x%08lx, " |
233 | (unsigned long) urb->context, | 233 | "iso_frame_desc[]={", |
234 | (unsigned long) urb->complete); | 234 | (unsigned long) urb->context, |
235 | (unsigned long) urb->complete); | ||
235 | for (i = 0; i < urb->number_of_packets; i++) { | 236 | for (i = 0; i < urb->number_of_packets; i++) { |
236 | struct usb_iso_packet_descriptor *pifd | 237 | struct usb_iso_packet_descriptor *pifd |
237 | = &urb->iso_frame_desc[i]; | 238 | = &urb->iso_frame_desc[i]; |
238 | dbg(level, | 239 | gig_dbg(level, |
239 | " {offset=%u, length=%u, actual_length=%u, " | 240 | " {offset=%u, length=%u, actual_length=%u, " |
240 | "status=%u}", | 241 | "status=%u}", |
241 | pifd->offset, pifd->length, pifd->actual_length, | 242 | pifd->offset, pifd->length, pifd->actual_length, |
242 | pifd->status); | 243 | pifd->status); |
243 | } | 244 | } |
244 | } | 245 | } |
245 | dbg(level, "}}"); | 246 | gig_dbg(level, "}}"); |
246 | #endif | 247 | #endif |
247 | } | 248 | } |
248 | 249 | ||
249 | /* read/set modem control bits etc. (m10x only) */ | 250 | /* read/set modem control bits etc. (m10x only) */ |
250 | static int gigaset_set_modem_ctrl(struct cardstate *cs, unsigned old_state, | 251 | static int gigaset_set_modem_ctrl(struct cardstate *cs, unsigned old_state, |
251 | unsigned new_state) | 252 | unsigned new_state) |
252 | { | 253 | { |
253 | return -EINVAL; | 254 | return -EINVAL; |
254 | } | 255 | } |
@@ -274,8 +275,8 @@ static inline void error_hangup(struct bc_state *bcs) | |||
274 | { | 275 | { |
275 | struct cardstate *cs = bcs->cs; | 276 | struct cardstate *cs = bcs->cs; |
276 | 277 | ||
277 | dbg(DEBUG_ANY, | 278 | gig_dbg(DEBUG_ANY, "%s: scheduling HUP for channel %d", |
278 | "%s: scheduling HUP for channel %d", __func__, bcs->channel); | 279 | __func__, bcs->channel); |
279 | 280 | ||
280 | if (!gigaset_add_event(cs, &bcs->at_state, EV_HUP, NULL, 0, NULL)) { | 281 | if (!gigaset_add_event(cs, &bcs->at_state, EV_HUP, NULL, 0, NULL)) { |
281 | //FIXME what should we do? | 282 | //FIXME what should we do? |
@@ -295,21 +296,20 @@ static inline void error_hangup(struct bc_state *bcs) | |||
295 | static inline void error_reset(struct cardstate *cs) | 296 | static inline void error_reset(struct cardstate *cs) |
296 | { | 297 | { |
297 | //FIXME try to recover without bothering the user | 298 | //FIXME try to recover without bothering the user |
298 | err("unrecoverable error - please disconnect the Gigaset base to reset"); | 299 | dev_err(cs->dev, |
300 | "unrecoverable error - please disconnect Gigaset base to reset\n"); | ||
299 | } | 301 | } |
300 | 302 | ||
301 | /* check_pending | 303 | /* check_pending |
302 | * check for completion of pending control request | 304 | * check for completion of pending control request |
303 | * parameter: | 305 | * parameter: |
304 | * urb USB request block of completed request | 306 | * ucs hardware specific controller state structure |
305 | * urb->context = hardware specific controller state structure | ||
306 | */ | 307 | */ |
307 | static void check_pending(struct bas_cardstate *ucs) | 308 | static void check_pending(struct bas_cardstate *ucs) |
308 | { | 309 | { |
309 | unsigned long flags; | 310 | unsigned long flags; |
310 | 311 | ||
311 | IFNULLRET(ucs); | 312 | IFNULLRET(ucs); |
312 | IFNULLRET(cardstate); | ||
313 | 313 | ||
314 | spin_lock_irqsave(&ucs->lock, flags); | 314 | spin_lock_irqsave(&ucs->lock, flags); |
315 | switch (ucs->pending) { | 315 | switch (ucs->pending) { |
@@ -330,8 +330,6 @@ static void check_pending(struct bas_cardstate *ucs) | |||
330 | case HD_CLOSE_ATCHANNEL: | 330 | case HD_CLOSE_ATCHANNEL: |
331 | if (!(atomic_read(&ucs->basstate) & BS_ATOPEN)) | 331 | if (!(atomic_read(&ucs->basstate) & BS_ATOPEN)) |
332 | ucs->pending = 0; | 332 | ucs->pending = 0; |
333 | //wake_up_interruptible(cs->initwait); | ||
334 | //FIXME need own wait queue? | ||
335 | break; | 333 | break; |
336 | case HD_CLOSE_B1CHANNEL: | 334 | case HD_CLOSE_B1CHANNEL: |
337 | if (!(atomic_read(&ucs->basstate) & BS_B1OPEN)) | 335 | if (!(atomic_read(&ucs->basstate) & BS_B1OPEN)) |
@@ -348,7 +346,9 @@ static void check_pending(struct bas_cardstate *ucs) | |||
348 | * are handled separately and should never end up here | 346 | * are handled separately and should never end up here |
349 | */ | 347 | */ |
350 | default: | 348 | default: |
351 | warn("unknown pending request 0x%02x cleared", ucs->pending); | 349 | dev_warn(&ucs->interface->dev, |
350 | "unknown pending request 0x%02x cleared\n", | ||
351 | ucs->pending); | ||
352 | ucs->pending = 0; | 352 | ucs->pending = 0; |
353 | } | 353 | } |
354 | 354 | ||
@@ -374,19 +374,19 @@ static void cmd_in_timeout(unsigned long data) | |||
374 | IFNULLRET(ucs); | 374 | IFNULLRET(ucs); |
375 | 375 | ||
376 | spin_lock_irqsave(&cs->lock, flags); | 376 | spin_lock_irqsave(&cs->lock, flags); |
377 | if (!atomic_read(&cs->connected)) { | 377 | if (unlikely(!atomic_read(&cs->connected))) { |
378 | dbg(DEBUG_USBREQ, "%s: disconnected", __func__); | 378 | gig_dbg(DEBUG_USBREQ, "%s: disconnected", __func__); |
379 | spin_unlock_irqrestore(&cs->lock, flags); | 379 | spin_unlock_irqrestore(&cs->lock, flags); |
380 | return; | 380 | return; |
381 | } | 381 | } |
382 | if (!ucs->rcvbuf_size) { | 382 | if (!ucs->rcvbuf_size) { |
383 | dbg(DEBUG_USBREQ, "%s: no receive in progress", __func__); | 383 | gig_dbg(DEBUG_USBREQ, "%s: no receive in progress", __func__); |
384 | spin_unlock_irqrestore(&cs->lock, flags); | 384 | spin_unlock_irqrestore(&cs->lock, flags); |
385 | return; | 385 | return; |
386 | } | 386 | } |
387 | spin_unlock_irqrestore(&cs->lock, flags); | 387 | spin_unlock_irqrestore(&cs->lock, flags); |
388 | 388 | ||
389 | err("timeout reading AT response"); | 389 | dev_err(cs->dev, "timeout reading AT response\n"); |
390 | error_reset(cs); //FIXME retry? | 390 | error_reset(cs); //FIXME retry? |
391 | } | 391 | } |
392 | 392 | ||
@@ -414,10 +414,12 @@ static int atread_submit(struct cardstate *cs, int timeout) | |||
414 | IFNULLRETVAL(ucs, -EINVAL); | 414 | IFNULLRETVAL(ucs, -EINVAL); |
415 | IFNULLRETVAL(ucs->urb_cmd_in, -EINVAL); | 415 | IFNULLRETVAL(ucs->urb_cmd_in, -EINVAL); |
416 | 416 | ||
417 | dbg(DEBUG_USBREQ, "-------> HD_READ_ATMESSAGE (%d)", ucs->rcvbuf_size); | 417 | gig_dbg(DEBUG_USBREQ, "-------> HD_READ_ATMESSAGE (%d)", |
418 | ucs->rcvbuf_size); | ||
418 | 419 | ||
419 | if (ucs->urb_cmd_in->status == -EINPROGRESS) { | 420 | if (ucs->urb_cmd_in->status == -EINPROGRESS) { |
420 | err("could not submit HD_READ_ATMESSAGE: URB busy"); | 421 | dev_err(cs->dev, |
422 | "could not submit HD_READ_ATMESSAGE: URB busy\n"); | ||
421 | return -EBUSY; | 423 | return -EBUSY; |
422 | } | 424 | } |
423 | 425 | ||
@@ -427,19 +429,19 @@ static int atread_submit(struct cardstate *cs, int timeout) | |||
427 | ucs->dr_cmd_in.wIndex = 0; | 429 | ucs->dr_cmd_in.wIndex = 0; |
428 | ucs->dr_cmd_in.wLength = cpu_to_le16(ucs->rcvbuf_size); | 430 | ucs->dr_cmd_in.wLength = cpu_to_le16(ucs->rcvbuf_size); |
429 | usb_fill_control_urb(ucs->urb_cmd_in, ucs->udev, | 431 | usb_fill_control_urb(ucs->urb_cmd_in, ucs->udev, |
430 | usb_rcvctrlpipe(ucs->udev, 0), | 432 | usb_rcvctrlpipe(ucs->udev, 0), |
431 | (unsigned char*) & ucs->dr_cmd_in, | 433 | (unsigned char*) & ucs->dr_cmd_in, |
432 | ucs->rcvbuf, ucs->rcvbuf_size, | 434 | ucs->rcvbuf, ucs->rcvbuf_size, |
433 | read_ctrl_callback, cs->inbuf); | 435 | read_ctrl_callback, cs->inbuf); |
434 | 436 | ||
435 | if ((ret = usb_submit_urb(ucs->urb_cmd_in, SLAB_ATOMIC)) != 0) { | 437 | if ((ret = usb_submit_urb(ucs->urb_cmd_in, SLAB_ATOMIC)) != 0) { |
436 | err("could not submit HD_READ_ATMESSAGE: %s", | 438 | dev_err(cs->dev, "could not submit HD_READ_ATMESSAGE: %s\n", |
437 | get_usb_statmsg(ret)); | 439 | get_usb_statmsg(ret)); |
438 | return ret; | 440 | return ret; |
439 | } | 441 | } |
440 | 442 | ||
441 | if (timeout > 0) { | 443 | if (timeout > 0) { |
442 | dbg(DEBUG_USBREQ, "setting timeout of %d/10 secs", timeout); | 444 | gig_dbg(DEBUG_USBREQ, "setting timeout of %d/10 secs", timeout); |
443 | ucs->timer_cmd_in.expires = jiffies + timeout * HZ / 10; | 445 | ucs->timer_cmd_in.expires = jiffies + timeout * HZ / 10; |
444 | ucs->timer_cmd_in.data = (unsigned long) cs; | 446 | ucs->timer_cmd_in.data = (unsigned long) cs; |
445 | ucs->timer_cmd_in.function = cmd_in_timeout; | 447 | ucs->timer_cmd_in.function = cmd_in_timeout; |
@@ -503,11 +505,12 @@ static void read_int_callback(struct urb *urb, struct pt_regs *regs) | |||
503 | case -ECONNRESET: /* canceled (async) */ | 505 | case -ECONNRESET: /* canceled (async) */ |
504 | case -EINPROGRESS: /* pending */ | 506 | case -EINPROGRESS: /* pending */ |
505 | /* ignore silently */ | 507 | /* ignore silently */ |
506 | dbg(DEBUG_USBREQ, | 508 | gig_dbg(DEBUG_USBREQ, "%s: %s", |
507 | "%s: %s", __func__, get_usb_statmsg(urb->status)); | 509 | __func__, get_usb_statmsg(urb->status)); |
508 | return; | 510 | return; |
509 | default: /* severe trouble */ | 511 | default: /* severe trouble */ |
510 | warn("interrupt read: %s", get_usb_statmsg(urb->status)); | 512 | dev_warn(cs->dev, "interrupt read: %s\n", |
513 | get_usb_statmsg(urb->status)); | ||
511 | //FIXME corrective action? resubmission always ok? | 514 | //FIXME corrective action? resubmission always ok? |
512 | goto resubmit; | 515 | goto resubmit; |
513 | } | 516 | } |
@@ -515,10 +518,9 @@ static void read_int_callback(struct urb *urb, struct pt_regs *regs) | |||
515 | l = (unsigned) ucs->int_in_buf[1] + | 518 | l = (unsigned) ucs->int_in_buf[1] + |
516 | (((unsigned) ucs->int_in_buf[2]) << 8); | 519 | (((unsigned) ucs->int_in_buf[2]) << 8); |
517 | 520 | ||
518 | dbg(DEBUG_USBREQ, | 521 | gig_dbg(DEBUG_USBREQ, "<-------%d: 0x%02x (%u [0x%02x 0x%02x])", |
519 | "<-------%d: 0x%02x (%u [0x%02x 0x%02x])", urb->actual_length, | 522 | urb->actual_length, (int)ucs->int_in_buf[0], l, |
520 | (int)ucs->int_in_buf[0], l, | 523 | (int)ucs->int_in_buf[1], (int)ucs->int_in_buf[2]); |
521 | (int)ucs->int_in_buf[1], (int)ucs->int_in_buf[2]); | ||
522 | 524 | ||
523 | channel = 0; | 525 | channel = 0; |
524 | 526 | ||
@@ -564,28 +566,30 @@ static void read_int_callback(struct urb *urb, struct pt_regs *regs) | |||
564 | case HD_B1_FLOW_CONTROL: | 566 | case HD_B1_FLOW_CONTROL: |
565 | bcs = cs->bcs + channel; | 567 | bcs = cs->bcs + channel; |
566 | atomic_add((l - BAS_NORMFRAME) * BAS_CORRFRAMES, | 568 | atomic_add((l - BAS_NORMFRAME) * BAS_CORRFRAMES, |
567 | &bcs->hw.bas->corrbytes); | 569 | &bcs->hw.bas->corrbytes); |
568 | dbg(DEBUG_ISO, | 570 | gig_dbg(DEBUG_ISO, |
569 | "Flow control (channel %d, sub %d): 0x%02x => %d", | 571 | "Flow control (channel %d, sub %d): 0x%02x => %d", |
570 | channel, bcs->hw.bas->numsub, l, | 572 | channel, bcs->hw.bas->numsub, l, |
571 | atomic_read(&bcs->hw.bas->corrbytes)); | 573 | atomic_read(&bcs->hw.bas->corrbytes)); |
572 | break; | 574 | break; |
573 | 575 | ||
574 | case HD_RECEIVEATDATA_ACK: /* AT response ready to be received */ | 576 | case HD_RECEIVEATDATA_ACK: /* AT response ready to be received */ |
575 | if (!l) { | 577 | if (!l) { |
576 | warn("HD_RECEIVEATDATA_ACK with length 0 ignored"); | 578 | dev_warn(cs->dev, |
579 | "HD_RECEIVEATDATA_ACK with length 0 ignored\n"); | ||
577 | break; | 580 | break; |
578 | } | 581 | } |
579 | spin_lock_irqsave(&cs->lock, flags); | 582 | spin_lock_irqsave(&cs->lock, flags); |
580 | if (ucs->rcvbuf_size) { | 583 | if (ucs->rcvbuf_size) { |
581 | spin_unlock_irqrestore(&cs->lock, flags); | 584 | spin_unlock_irqrestore(&cs->lock, flags); |
582 | err("receive AT data overrun, %d bytes lost", l); | 585 | dev_err(cs->dev, |
586 | "receive AT data overrun, %d bytes lost\n", l); | ||
583 | error_reset(cs); //FIXME reschedule | 587 | error_reset(cs); //FIXME reschedule |
584 | break; | 588 | break; |
585 | } | 589 | } |
586 | if ((ucs->rcvbuf = kmalloc(l, GFP_ATOMIC)) == NULL) { | 590 | if ((ucs->rcvbuf = kmalloc(l, GFP_ATOMIC)) == NULL) { |
587 | spin_unlock_irqrestore(&cs->lock, flags); | 591 | spin_unlock_irqrestore(&cs->lock, flags); |
588 | err("%s: out of memory, %d bytes lost", __func__, l); | 592 | dev_err(cs->dev, "out of memory, %d bytes lost\n", l); |
589 | error_reset(cs); //FIXME reschedule | 593 | error_reset(cs); //FIXME reschedule |
590 | break; | 594 | break; |
591 | } | 595 | } |
@@ -601,16 +605,17 @@ static void read_int_callback(struct urb *urb, struct pt_regs *regs) | |||
601 | break; | 605 | break; |
602 | 606 | ||
603 | case HD_RESET_INTERRUPT_PIPE_ACK: | 607 | case HD_RESET_INTERRUPT_PIPE_ACK: |
604 | dbg(DEBUG_USBREQ, "HD_RESET_INTERRUPT_PIPE_ACK"); | 608 | gig_dbg(DEBUG_USBREQ, "HD_RESET_INTERRUPT_PIPE_ACK"); |
605 | break; | 609 | break; |
606 | 610 | ||
607 | case HD_SUSPEND_END: | 611 | case HD_SUSPEND_END: |
608 | dbg(DEBUG_USBREQ, "HD_SUSPEND_END"); | 612 | gig_dbg(DEBUG_USBREQ, "HD_SUSPEND_END"); |
609 | break; | 613 | break; |
610 | 614 | ||
611 | default: | 615 | default: |
612 | warn("unknown Gigaset signal 0x%02x (%u) ignored", | 616 | dev_warn(cs->dev, |
613 | (int) ucs->int_in_buf[0], l); | 617 | "unknown Gigaset signal 0x%02x (%u) ignored\n", |
618 | (int) ucs->int_in_buf[0], l); | ||
614 | } | 619 | } |
615 | 620 | ||
616 | check_pending(ucs); | 621 | check_pending(ucs); |
@@ -618,8 +623,8 @@ static void read_int_callback(struct urb *urb, struct pt_regs *regs) | |||
618 | resubmit: | 623 | resubmit: |
619 | status = usb_submit_urb(urb, SLAB_ATOMIC); | 624 | status = usb_submit_urb(urb, SLAB_ATOMIC); |
620 | if (unlikely(status)) { | 625 | if (unlikely(status)) { |
621 | err("could not resubmit interrupt URB: %s", | 626 | dev_err(cs->dev, "could not resubmit interrupt URB: %s\n", |
622 | get_usb_statmsg(status)); | 627 | get_usb_statmsg(status)); |
623 | error_reset(cs); | 628 | error_reset(cs); |
624 | } | 629 | } |
625 | } | 630 | } |
@@ -649,14 +654,14 @@ static void read_ctrl_callback(struct urb *urb, struct pt_regs *regs) | |||
649 | IFNULLRET(ucs); | 654 | IFNULLRET(ucs); |
650 | 655 | ||
651 | spin_lock_irqsave(&cs->lock, flags); | 656 | spin_lock_irqsave(&cs->lock, flags); |
652 | if (!atomic_read(&cs->connected)) { | 657 | if (unlikely(!atomic_read(&cs->connected))) { |
653 | warn("%s: disconnected", __func__); | 658 | warn("%s: disconnected", __func__); |
654 | spin_unlock_irqrestore(&cs->lock, flags); | 659 | spin_unlock_irqrestore(&cs->lock, flags); |
655 | return; | 660 | return; |
656 | } | 661 | } |
657 | 662 | ||
658 | if (!ucs->rcvbuf_size) { | 663 | if (!ucs->rcvbuf_size) { |
659 | warn("%s: no receive in progress", __func__); | 664 | dev_warn(cs->dev, "%s: no receive in progress\n", __func__); |
660 | spin_unlock_irqrestore(&cs->lock, flags); | 665 | spin_unlock_irqrestore(&cs->lock, flags); |
661 | return; | 666 | return; |
662 | } | 667 | } |
@@ -667,12 +672,14 @@ static void read_ctrl_callback(struct urb *urb, struct pt_regs *regs) | |||
667 | case 0: /* normal completion */ | 672 | case 0: /* normal completion */ |
668 | numbytes = urb->actual_length; | 673 | numbytes = urb->actual_length; |
669 | if (unlikely(numbytes == 0)) { | 674 | if (unlikely(numbytes == 0)) { |
670 | warn("control read: empty block received"); | 675 | dev_warn(cs->dev, |
676 | "control read: empty block received\n"); | ||
671 | goto retry; | 677 | goto retry; |
672 | } | 678 | } |
673 | if (unlikely(numbytes != ucs->rcvbuf_size)) { | 679 | if (unlikely(numbytes != ucs->rcvbuf_size)) { |
674 | warn("control read: received %d chars, expected %d", | 680 | dev_warn(cs->dev, |
675 | numbytes, ucs->rcvbuf_size); | 681 | "control read: received %d chars, expected %d\n", |
682 | numbytes, ucs->rcvbuf_size); | ||
676 | if (numbytes > ucs->rcvbuf_size) | 683 | if (numbytes > ucs->rcvbuf_size) |
677 | numbytes = ucs->rcvbuf_size; | 684 | numbytes = ucs->rcvbuf_size; |
678 | } | 685 | } |
@@ -692,23 +699,26 @@ static void read_ctrl_callback(struct urb *urb, struct pt_regs *regs) | |||
692 | case -ECONNRESET: /* canceled (async) */ | 699 | case -ECONNRESET: /* canceled (async) */ |
693 | case -EINPROGRESS: /* pending */ | 700 | case -EINPROGRESS: /* pending */ |
694 | /* no action necessary */ | 701 | /* no action necessary */ |
695 | dbg(DEBUG_USBREQ, | 702 | gig_dbg(DEBUG_USBREQ, "%s: %s", |
696 | "%s: %s", __func__, get_usb_statmsg(urb->status)); | 703 | __func__, get_usb_statmsg(urb->status)); |
697 | break; | 704 | break; |
698 | 705 | ||
699 | default: /* severe trouble */ | 706 | default: /* severe trouble */ |
700 | warn("control read: %s", get_usb_statmsg(urb->status)); | 707 | dev_warn(cs->dev, "control read: %s\n", |
708 | get_usb_statmsg(urb->status)); | ||
701 | retry: | 709 | retry: |
702 | if (ucs->retry_cmd_in++ < BAS_RETRY) { | 710 | if (ucs->retry_cmd_in++ < BAS_RETRY) { |
703 | notice("control read: retry %d", ucs->retry_cmd_in); | 711 | dev_notice(cs->dev, "control read: retry %d\n", |
712 | ucs->retry_cmd_in); | ||
704 | if (atread_submit(cs, BAS_TIMEOUT) >= 0) { | 713 | if (atread_submit(cs, BAS_TIMEOUT) >= 0) { |
705 | /* resubmitted - bypass regular exit block */ | 714 | /* resubmitted - bypass regular exit block */ |
706 | spin_unlock_irqrestore(&cs->lock, flags); | 715 | spin_unlock_irqrestore(&cs->lock, flags); |
707 | return; | 716 | return; |
708 | } | 717 | } |
709 | } else { | 718 | } else { |
710 | err("control read: giving up after %d tries", | 719 | dev_err(cs->dev, |
711 | ucs->retry_cmd_in); | 720 | "control read: giving up after %d tries\n", |
721 | ucs->retry_cmd_in); | ||
712 | } | 722 | } |
713 | error_reset(cs); | 723 | error_reset(cs); |
714 | } | 724 | } |
@@ -718,7 +728,7 @@ static void read_ctrl_callback(struct urb *urb, struct pt_regs *regs) | |||
718 | ucs->rcvbuf_size = 0; | 728 | ucs->rcvbuf_size = 0; |
719 | spin_unlock_irqrestore(&cs->lock, flags); | 729 | spin_unlock_irqrestore(&cs->lock, flags); |
720 | if (have_data) { | 730 | if (have_data) { |
721 | dbg(DEBUG_INTR, "%s-->BH", __func__); | 731 | gig_dbg(DEBUG_INTR, "%s-->BH", __func__); |
722 | gigaset_schedule_event(cs); | 732 | gigaset_schedule_event(cs); |
723 | } | 733 | } |
724 | } | 734 | } |
@@ -743,9 +753,9 @@ static void read_iso_callback(struct urb *urb, struct pt_regs *regs) | |||
743 | 753 | ||
744 | /* status codes not worth bothering the tasklet with */ | 754 | /* status codes not worth bothering the tasklet with */ |
745 | if (unlikely(urb->status == -ENOENT || urb->status == -ECONNRESET || | 755 | if (unlikely(urb->status == -ENOENT || urb->status == -ECONNRESET || |
746 | urb->status == -EINPROGRESS)) { | 756 | urb->status == -EINPROGRESS)) { |
747 | dbg(DEBUG_ISO, | 757 | gig_dbg(DEBUG_ISO, "%s: %s", |
748 | "%s: %s", __func__, get_usb_statmsg(urb->status)); | 758 | __func__, get_usb_statmsg(urb->status)); |
749 | return; | 759 | return; |
750 | } | 760 | } |
751 | 761 | ||
@@ -771,15 +781,17 @@ static void read_iso_callback(struct urb *urb, struct pt_regs *regs) | |||
771 | urb->iso_frame_desc[i].actual_length = 0; | 781 | urb->iso_frame_desc[i].actual_length = 0; |
772 | } | 782 | } |
773 | if (likely(atomic_read(&ubc->running))) { | 783 | if (likely(atomic_read(&ubc->running))) { |
774 | urb->dev = bcs->cs->hw.bas->udev; /* clobbered by USB subsystem */ | 784 | /* urb->dev is clobbered by USB subsystem */ |
785 | urb->dev = bcs->cs->hw.bas->udev; | ||
775 | urb->transfer_flags = URB_ISO_ASAP; | 786 | urb->transfer_flags = URB_ISO_ASAP; |
776 | urb->number_of_packets = BAS_NUMFRAMES; | 787 | urb->number_of_packets = BAS_NUMFRAMES; |
777 | dbg(DEBUG_ISO, "%s: isoc read overrun/resubmit", | 788 | gig_dbg(DEBUG_ISO, "%s: isoc read overrun/resubmit", |
778 | __func__); | 789 | __func__); |
779 | rc = usb_submit_urb(urb, SLAB_ATOMIC); | 790 | rc = usb_submit_urb(urb, SLAB_ATOMIC); |
780 | if (unlikely(rc != 0)) { | 791 | if (unlikely(rc != 0)) { |
781 | err("could not resubmit isochronous read URB: %s", | 792 | dev_err(bcs->cs->dev, |
782 | get_usb_statmsg(rc)); | 793 | "could not resubmit isochronous read " |
794 | "URB: %s\n", get_usb_statmsg(rc)); | ||
783 | dump_urb(DEBUG_ISO, "isoc read", urb); | 795 | dump_urb(DEBUG_ISO, "isoc read", urb); |
784 | error_hangup(bcs); | 796 | error_hangup(bcs); |
785 | } | 797 | } |
@@ -807,9 +819,9 @@ static void write_iso_callback(struct urb *urb, struct pt_regs *regs) | |||
807 | 819 | ||
808 | /* status codes not worth bothering the tasklet with */ | 820 | /* status codes not worth bothering the tasklet with */ |
809 | if (unlikely(urb->status == -ENOENT || urb->status == -ECONNRESET || | 821 | if (unlikely(urb->status == -ENOENT || urb->status == -ECONNRESET || |
810 | urb->status == -EINPROGRESS)) { | 822 | urb->status == -EINPROGRESS)) { |
811 | dbg(DEBUG_ISO, | 823 | gig_dbg(DEBUG_ISO, "%s: %s", |
812 | "%s: %s", __func__, get_usb_statmsg(urb->status)); | 824 | __func__, get_usb_statmsg(urb->status)); |
813 | return; | 825 | return; |
814 | } | 826 | } |
815 | 827 | ||
@@ -854,7 +866,7 @@ static int starturbs(struct bc_state *bcs) | |||
854 | for (k = 0; k < BAS_INURBS; k++) { | 866 | for (k = 0; k < BAS_INURBS; k++) { |
855 | urb = ubc->isoinurbs[k]; | 867 | urb = ubc->isoinurbs[k]; |
856 | if (!urb) { | 868 | if (!urb) { |
857 | err("isoinurbs[%d]==NULL", k); | 869 | dev_err(bcs->cs->dev, "isoinurbs[%d]==NULL\n", k); |
858 | rc = -EFAULT; | 870 | rc = -EFAULT; |
859 | goto error; | 871 | goto error; |
860 | } | 872 | } |
@@ -877,8 +889,9 @@ static int starturbs(struct bc_state *bcs) | |||
877 | 889 | ||
878 | dump_urb(DEBUG_ISO, "Initial isoc read", urb); | 890 | dump_urb(DEBUG_ISO, "Initial isoc read", urb); |
879 | if ((rc = usb_submit_urb(urb, SLAB_ATOMIC)) != 0) { | 891 | if ((rc = usb_submit_urb(urb, SLAB_ATOMIC)) != 0) { |
880 | err("could not submit isochronous read URB %d: %s", | 892 | dev_err(bcs->cs->dev, |
881 | k, get_usb_statmsg(rc)); | 893 | "could not submit isochronous read URB %d: %s\n", |
894 | k, get_usb_statmsg(rc)); | ||
882 | goto error; | 895 | goto error; |
883 | } | 896 | } |
884 | } | 897 | } |
@@ -890,7 +903,7 @@ static int starturbs(struct bc_state *bcs) | |||
890 | for (k = 0; k < BAS_OUTURBS; ++k) { | 903 | for (k = 0; k < BAS_OUTURBS; ++k) { |
891 | urb = ubc->isoouturbs[k].urb; | 904 | urb = ubc->isoouturbs[k].urb; |
892 | if (!urb) { | 905 | if (!urb) { |
893 | err("isoouturbs[%d].urb==NULL", k); | 906 | dev_err(bcs->cs->dev, "isoouturbs[%d].urb==NULL\n", k); |
894 | rc = -EFAULT; | 907 | rc = -EFAULT; |
895 | goto error; | 908 | goto error; |
896 | } | 909 | } |
@@ -917,8 +930,9 @@ static int starturbs(struct bc_state *bcs) | |||
917 | dump_urb(DEBUG_ISO, "Initial isoc write", urb); | 930 | dump_urb(DEBUG_ISO, "Initial isoc write", urb); |
918 | rc = usb_submit_urb(ubc->isoouturbs[k].urb, SLAB_ATOMIC); | 931 | rc = usb_submit_urb(ubc->isoouturbs[k].urb, SLAB_ATOMIC); |
919 | if (rc != 0) { | 932 | if (rc != 0) { |
920 | err("could not submit isochronous write URB %d: %s", | 933 | dev_err(bcs->cs->dev, |
921 | k, get_usb_statmsg(rc)); | 934 | "could not submit isochronous write URB %d: %s\n", |
935 | k, get_usb_statmsg(rc)); | ||
922 | goto error; | 936 | goto error; |
923 | } | 937 | } |
924 | } | 938 | } |
@@ -947,14 +961,16 @@ static void stopurbs(struct bas_bc_state *ubc) | |||
947 | 961 | ||
948 | for (k = 0; k < BAS_INURBS; ++k) { | 962 | for (k = 0; k < BAS_INURBS; ++k) { |
949 | rc = usb_unlink_urb(ubc->isoinurbs[k]); | 963 | rc = usb_unlink_urb(ubc->isoinurbs[k]); |
950 | dbg(DEBUG_ISO, "%s: isoc input URB %d unlinked, result = %d", | 964 | gig_dbg(DEBUG_ISO, |
951 | __func__, k, rc); | 965 | "%s: isoc input URB %d unlinked, result = %d", |
966 | __func__, k, rc); | ||
952 | } | 967 | } |
953 | 968 | ||
954 | for (k = 0; k < BAS_OUTURBS; ++k) { | 969 | for (k = 0; k < BAS_OUTURBS; ++k) { |
955 | rc = usb_unlink_urb(ubc->isoouturbs[k].urb); | 970 | rc = usb_unlink_urb(ubc->isoouturbs[k].urb); |
956 | dbg(DEBUG_ISO, "%s: isoc output URB %d unlinked, result = %d", | 971 | gig_dbg(DEBUG_ISO, |
957 | __func__, k, rc); | 972 | "%s: isoc output URB %d unlinked, result = %d", |
973 | __func__, k, rc); | ||
958 | } | 974 | } |
959 | } | 975 | } |
960 | 976 | ||
@@ -984,7 +1000,8 @@ static int submit_iso_write_urb(struct isow_urbctx_t *ucx) | |||
984 | ubc = ucx->bcs->hw.bas; | 1000 | ubc = ucx->bcs->hw.bas; |
985 | IFNULLRETVAL(ubc, -EFAULT); | 1001 | IFNULLRETVAL(ubc, -EFAULT); |
986 | 1002 | ||
987 | urb->dev = ucx->bcs->cs->hw.bas->udev; /* clobbered by USB subsystem */ | 1003 | /* urb->dev is clobbered by USB subsystem */ |
1004 | urb->dev = ucx->bcs->cs->hw.bas->udev; | ||
988 | urb->transfer_flags = URB_ISO_ASAP; | 1005 | urb->transfer_flags = URB_ISO_ASAP; |
989 | urb->transfer_buffer = ubc->isooutbuf->data; | 1006 | urb->transfer_buffer = ubc->isooutbuf->data; |
990 | urb->transfer_buffer_length = sizeof(ubc->isooutbuf->data); | 1007 | urb->transfer_buffer_length = sizeof(ubc->isooutbuf->data); |
@@ -995,7 +1012,8 @@ static int submit_iso_write_urb(struct isow_urbctx_t *ucx) | |||
995 | /* compute frame length according to flow control */ | 1012 | /* compute frame length according to flow control */ |
996 | ifd->length = BAS_NORMFRAME; | 1013 | ifd->length = BAS_NORMFRAME; |
997 | if ((corrbytes = atomic_read(&ubc->corrbytes)) != 0) { | 1014 | if ((corrbytes = atomic_read(&ubc->corrbytes)) != 0) { |
998 | dbg(DEBUG_ISO, "%s: corrbytes=%d", __func__, corrbytes); | 1015 | gig_dbg(DEBUG_ISO, "%s: corrbytes=%d", |
1016 | __func__, corrbytes); | ||
999 | if (corrbytes > BAS_HIGHFRAME - BAS_NORMFRAME) | 1017 | if (corrbytes > BAS_HIGHFRAME - BAS_NORMFRAME) |
1000 | corrbytes = BAS_HIGHFRAME - BAS_NORMFRAME; | 1018 | corrbytes = BAS_HIGHFRAME - BAS_NORMFRAME; |
1001 | else if (corrbytes < BAS_LOWFRAME - BAS_NORMFRAME) | 1019 | else if (corrbytes < BAS_LOWFRAME - BAS_NORMFRAME) |
@@ -1003,19 +1021,21 @@ static int submit_iso_write_urb(struct isow_urbctx_t *ucx) | |||
1003 | ifd->length += corrbytes; | 1021 | ifd->length += corrbytes; |
1004 | atomic_add(-corrbytes, &ubc->corrbytes); | 1022 | atomic_add(-corrbytes, &ubc->corrbytes); |
1005 | } | 1023 | } |
1006 | //dbg(DEBUG_ISO, "%s: frame %d length=%d", __func__, nframe, ifd->length); | ||
1007 | 1024 | ||
1008 | /* retrieve block of data to send */ | 1025 | /* retrieve block of data to send */ |
1009 | ifd->offset = gigaset_isowbuf_getbytes(ubc->isooutbuf, | 1026 | ifd->offset = gigaset_isowbuf_getbytes(ubc->isooutbuf, |
1010 | ifd->length); | 1027 | ifd->length); |
1011 | if (ifd->offset < 0) { | 1028 | if (ifd->offset < 0) { |
1012 | if (ifd->offset == -EBUSY) { | 1029 | if (ifd->offset == -EBUSY) { |
1013 | dbg(DEBUG_ISO, "%s: buffer busy at frame %d", | 1030 | gig_dbg(DEBUG_ISO, |
1014 | __func__, nframe); | 1031 | "%s: buffer busy at frame %d", |
1015 | /* tasklet will be restarted from gigaset_send_skb() */ | 1032 | __func__, nframe); |
1033 | /* tasklet will be restarted from | ||
1034 | gigaset_send_skb() */ | ||
1016 | } else { | 1035 | } else { |
1017 | err("%s: buffer error %d at frame %d", | 1036 | dev_err(ucx->bcs->cs->dev, |
1018 | __func__, ifd->offset, nframe); | 1037 | "%s: buffer error %d at frame %d\n", |
1038 | __func__, ifd->offset, nframe); | ||
1019 | return ifd->offset; | 1039 | return ifd->offset; |
1020 | } | 1040 | } |
1021 | break; | 1041 | break; |
@@ -1026,8 +1046,9 @@ static int submit_iso_write_urb(struct isow_urbctx_t *ucx) | |||
1026 | } | 1046 | } |
1027 | if ((urb->number_of_packets = nframe) > 0) { | 1047 | if ((urb->number_of_packets = nframe) > 0) { |
1028 | if ((rc = usb_submit_urb(urb, SLAB_ATOMIC)) != 0) { | 1048 | if ((rc = usb_submit_urb(urb, SLAB_ATOMIC)) != 0) { |
1029 | err("could not submit isochronous write URB: %s", | 1049 | dev_err(ucx->bcs->cs->dev, |
1030 | get_usb_statmsg(rc)); | 1050 | "could not submit isochronous write URB: %s\n", |
1051 | get_usb_statmsg(rc)); | ||
1031 | dump_urb(DEBUG_ISO, "isoc write", urb); | 1052 | dump_urb(DEBUG_ISO, "isoc write", urb); |
1032 | return rc; | 1053 | return rc; |
1033 | } | 1054 | } |
@@ -1071,7 +1092,7 @@ static void write_iso_tasklet(unsigned long data) | |||
1071 | } | 1092 | } |
1072 | 1093 | ||
1073 | if (unlikely(!(atomic_read(&ubc->running)))) { | 1094 | if (unlikely(!(atomic_read(&ubc->running)))) { |
1074 | dbg(DEBUG_ISO, "%s: not running", __func__); | 1095 | gig_dbg(DEBUG_ISO, "%s: not running", __func__); |
1075 | return; | 1096 | return; |
1076 | } | 1097 | } |
1077 | 1098 | ||
@@ -1083,7 +1104,7 @@ static void write_iso_tasklet(unsigned long data) | |||
1083 | ubc->isooutovfl = NULL; | 1104 | ubc->isooutovfl = NULL; |
1084 | spin_unlock_irqrestore(&ubc->isooutlock, flags); | 1105 | spin_unlock_irqrestore(&ubc->isooutlock, flags); |
1085 | if (ovfl) { | 1106 | if (ovfl) { |
1086 | err("isochronous write buffer underrun - buy a faster machine :-)"); | 1107 | dev_err(cs->dev, "isochronous write buffer underrun\n"); |
1087 | error_hangup(bcs); | 1108 | error_hangup(bcs); |
1088 | break; | 1109 | break; |
1089 | } | 1110 | } |
@@ -1106,7 +1127,8 @@ static void write_iso_tasklet(unsigned long data) | |||
1106 | spin_unlock_irqrestore(&ubc->isooutlock, flags); | 1127 | spin_unlock_irqrestore(&ubc->isooutlock, flags); |
1107 | if (next) { | 1128 | if (next) { |
1108 | /* couldn't put it back */ | 1129 | /* couldn't put it back */ |
1109 | err("losing isochronous write URB"); | 1130 | dev_err(cs->dev, |
1131 | "losing isochronous write URB\n"); | ||
1110 | error_hangup(bcs); | 1132 | error_hangup(bcs); |
1111 | } | 1133 | } |
1112 | } | 1134 | } |
@@ -1123,19 +1145,21 @@ static void write_iso_tasklet(unsigned long data) | |||
1123 | * successfully sent | 1145 | * successfully sent |
1124 | * - all following frames are not sent at all | 1146 | * - all following frames are not sent at all |
1125 | */ | 1147 | */ |
1126 | dbg(DEBUG_ISO, "%s: URB partially completed", __func__); | 1148 | gig_dbg(DEBUG_ISO, "%s: URB partially completed", |
1149 | __func__); | ||
1127 | offset = done->limit; /* just in case */ | 1150 | offset = done->limit; /* just in case */ |
1128 | for (i = 0; i < BAS_NUMFRAMES; i++) { | 1151 | for (i = 0; i < BAS_NUMFRAMES; i++) { |
1129 | ifd = &urb->iso_frame_desc[i]; | 1152 | ifd = &urb->iso_frame_desc[i]; |
1130 | if (ifd->status || | 1153 | if (ifd->status || |
1131 | ifd->actual_length != ifd->length) { | 1154 | ifd->actual_length != ifd->length) { |
1132 | warn("isochronous write: frame %d: %s, " | 1155 | dev_warn(cs->dev, |
1133 | "only %d of %d bytes sent", | 1156 | "isochronous write: frame %d: %s, " |
1157 | "only %d of %d bytes sent\n", | ||
1134 | i, get_usb_statmsg(ifd->status), | 1158 | i, get_usb_statmsg(ifd->status), |
1135 | ifd->actual_length, ifd->length); | 1159 | ifd->actual_length, ifd->length); |
1136 | offset = (ifd->offset + | 1160 | offset = (ifd->offset + |
1137 | ifd->actual_length) | 1161 | ifd->actual_length) |
1138 | % BAS_OUTBUFSIZE; | 1162 | % BAS_OUTBUFSIZE; |
1139 | break; | 1163 | break; |
1140 | } | 1164 | } |
1141 | } | 1165 | } |
@@ -1145,25 +1169,26 @@ static void write_iso_tasklet(unsigned long data) | |||
1145 | ifd = &urb->iso_frame_desc[i]; | 1169 | ifd = &urb->iso_frame_desc[i]; |
1146 | if (ifd->status != -EINPROGRESS | 1170 | if (ifd->status != -EINPROGRESS |
1147 | || ifd->actual_length != 0) { | 1171 | || ifd->actual_length != 0) { |
1148 | warn("isochronous write: frame %d: %s, " | 1172 | dev_warn(cs->dev, |
1149 | "%d of %d bytes sent", | 1173 | "isochronous write: frame %d: %s, " |
1174 | "%d of %d bytes sent\n", | ||
1150 | i, get_usb_statmsg(ifd->status), | 1175 | i, get_usb_statmsg(ifd->status), |
1151 | ifd->actual_length, ifd->length); | 1176 | ifd->actual_length, ifd->length); |
1152 | offset = (ifd->offset + | 1177 | offset = (ifd->offset + |
1153 | ifd->actual_length) | 1178 | ifd->actual_length) |
1154 | % BAS_OUTBUFSIZE; | 1179 | % BAS_OUTBUFSIZE; |
1155 | break; | 1180 | break; |
1156 | } | 1181 | } |
1157 | } | 1182 | } |
1158 | #endif | 1183 | #endif |
1159 | break; | 1184 | break; |
1160 | case -EPIPE: //FIXME is this the code for "underrun"? | 1185 | case -EPIPE: //FIXME is this the code for "underrun"? |
1161 | err("isochronous write stalled"); | 1186 | dev_err(cs->dev, "isochronous write stalled\n"); |
1162 | error_hangup(bcs); | 1187 | error_hangup(bcs); |
1163 | break; | 1188 | break; |
1164 | default: /* severe trouble */ | 1189 | default: /* severe trouble */ |
1165 | warn("isochronous write: %s", | 1190 | dev_warn(cs->dev, "isochronous write: %s\n", |
1166 | get_usb_statmsg(urb->status)); | 1191 | get_usb_statmsg(urb->status)); |
1167 | } | 1192 | } |
1168 | 1193 | ||
1169 | /* mark the write buffer area covered by this URB as free */ | 1194 | /* mark the write buffer area covered by this URB as free */ |
@@ -1191,8 +1216,8 @@ static void write_iso_tasklet(unsigned long data) | |||
1191 | if (gigaset_isoc_buildframe(bcs, skb->data, len) == -EAGAIN) { | 1216 | if (gigaset_isoc_buildframe(bcs, skb->data, len) == -EAGAIN) { |
1192 | /* insufficient buffer space, push back onto queue */ | 1217 | /* insufficient buffer space, push back onto queue */ |
1193 | skb_queue_head(&bcs->squeue, skb); | 1218 | skb_queue_head(&bcs->squeue, skb); |
1194 | dbg(DEBUG_ISO, "%s: skb requeued, qlen=%d", | 1219 | gig_dbg(DEBUG_ISO, "%s: skb requeued, qlen=%d", |
1195 | __func__, skb_queue_len(&bcs->squeue)); | 1220 | __func__, skb_queue_len(&bcs->squeue)); |
1196 | break; | 1221 | break; |
1197 | } | 1222 | } |
1198 | skb_pull(skb, len); | 1223 | skb_pull(skb, len); |
@@ -1229,7 +1254,7 @@ static void read_iso_tasklet(unsigned long data) | |||
1229 | 1254 | ||
1230 | /* loop while more completed URBs arrive in the meantime */ | 1255 | /* loop while more completed URBs arrive in the meantime */ |
1231 | for (;;) { | 1256 | for (;;) { |
1232 | if (!atomic_read(&cs->connected)) { | 1257 | if (unlikely(!atomic_read(&cs->connected))) { |
1233 | warn("%s: disconnected", __func__); | 1258 | warn("%s: disconnected", __func__); |
1234 | return; | 1259 | return; |
1235 | } | 1260 | } |
@@ -1242,15 +1267,20 @@ static void read_iso_tasklet(unsigned long data) | |||
1242 | } | 1267 | } |
1243 | ubc->isoindone = NULL; | 1268 | ubc->isoindone = NULL; |
1244 | if (unlikely(ubc->loststatus != -EINPROGRESS)) { | 1269 | if (unlikely(ubc->loststatus != -EINPROGRESS)) { |
1245 | warn("isochronous read overrun, dropped URB with status: %s, %d bytes lost", | 1270 | dev_warn(cs->dev, |
1246 | get_usb_statmsg(ubc->loststatus), ubc->isoinlost); | 1271 | "isochronous read overrun, " |
1272 | "dropped URB with status: %s, %d bytes lost\n", | ||
1273 | get_usb_statmsg(ubc->loststatus), | ||
1274 | ubc->isoinlost); | ||
1247 | ubc->loststatus = -EINPROGRESS; | 1275 | ubc->loststatus = -EINPROGRESS; |
1248 | } | 1276 | } |
1249 | spin_unlock_irqrestore(&ubc->isoinlock, flags); | 1277 | spin_unlock_irqrestore(&ubc->isoinlock, flags); |
1250 | 1278 | ||
1251 | if (unlikely(!(atomic_read(&ubc->running)))) { | 1279 | if (unlikely(!(atomic_read(&ubc->running)))) { |
1252 | dbg(DEBUG_ISO, "%s: channel not running, dropped URB with status: %s", | 1280 | gig_dbg(DEBUG_ISO, |
1253 | __func__, get_usb_statmsg(urb->status)); | 1281 | "%s: channel not running, " |
1282 | "dropped URB with status: %s", | ||
1283 | __func__, get_usb_statmsg(urb->status)); | ||
1254 | return; | 1284 | return; |
1255 | } | 1285 | } |
1256 | 1286 | ||
@@ -1259,22 +1289,23 @@ static void read_iso_tasklet(unsigned long data) | |||
1259 | break; | 1289 | break; |
1260 | case -EXDEV: /* inspect individual frames | 1290 | case -EXDEV: /* inspect individual frames |
1261 | (we do that anyway) */ | 1291 | (we do that anyway) */ |
1262 | dbg(DEBUG_ISO, "%s: URB partially completed", __func__); | 1292 | gig_dbg(DEBUG_ISO, "%s: URB partially completed", |
1293 | __func__); | ||
1263 | break; | 1294 | break; |
1264 | case -ENOENT: | 1295 | case -ENOENT: |
1265 | case -ECONNRESET: | 1296 | case -ECONNRESET: |
1266 | dbg(DEBUG_ISO, "%s: URB canceled", __func__); | 1297 | gig_dbg(DEBUG_ISO, "%s: URB canceled", __func__); |
1267 | continue; /* -> skip */ | 1298 | continue; /* -> skip */ |
1268 | case -EINPROGRESS: /* huh? */ | 1299 | case -EINPROGRESS: /* huh? */ |
1269 | dbg(DEBUG_ISO, "%s: URB still pending", __func__); | 1300 | gig_dbg(DEBUG_ISO, "%s: URB still pending", __func__); |
1270 | continue; /* -> skip */ | 1301 | continue; /* -> skip */ |
1271 | case -EPIPE: | 1302 | case -EPIPE: |
1272 | err("isochronous read stalled"); | 1303 | dev_err(cs->dev, "isochronous read stalled\n"); |
1273 | error_hangup(bcs); | 1304 | error_hangup(bcs); |
1274 | continue; /* -> skip */ | 1305 | continue; /* -> skip */ |
1275 | default: /* severe trouble */ | 1306 | default: /* severe trouble */ |
1276 | warn("isochronous read: %s", | 1307 | dev_warn(cs->dev, "isochronous read: %s\n", |
1277 | get_usb_statmsg(urb->status)); | 1308 | get_usb_statmsg(urb->status)); |
1278 | goto error; | 1309 | goto error; |
1279 | } | 1310 | } |
1280 | 1311 | ||
@@ -1282,33 +1313,44 @@ static void read_iso_tasklet(unsigned long data) | |||
1282 | totleft = urb->actual_length; | 1313 | totleft = urb->actual_length; |
1283 | for (frame = 0; totleft > 0 && frame < BAS_NUMFRAMES; frame++) { | 1314 | for (frame = 0; totleft > 0 && frame < BAS_NUMFRAMES; frame++) { |
1284 | if (unlikely(urb->iso_frame_desc[frame].status)) { | 1315 | if (unlikely(urb->iso_frame_desc[frame].status)) { |
1285 | warn("isochronous read: frame %d: %s", frame, | 1316 | dev_warn(cs->dev, |
1286 | get_usb_statmsg(urb->iso_frame_desc[frame].status)); | 1317 | "isochronous read: frame %d: %s\n", |
1318 | frame, | ||
1319 | get_usb_statmsg( | ||
1320 | urb->iso_frame_desc[frame].status)); | ||
1287 | break; | 1321 | break; |
1288 | } | 1322 | } |
1289 | numbytes = urb->iso_frame_desc[frame].actual_length; | 1323 | numbytes = urb->iso_frame_desc[frame].actual_length; |
1290 | if (unlikely(numbytes > BAS_MAXFRAME)) { | 1324 | if (unlikely(numbytes > BAS_MAXFRAME)) { |
1291 | warn("isochronous read: frame %d: numbytes (%d) > BAS_MAXFRAME", | 1325 | dev_warn(cs->dev, |
1292 | frame, numbytes); | 1326 | "isochronous read: frame %d: " |
1327 | "numbytes (%d) > BAS_MAXFRAME\n", | ||
1328 | frame, numbytes); | ||
1293 | break; | 1329 | break; |
1294 | } | 1330 | } |
1295 | if (unlikely(numbytes > totleft)) { | 1331 | if (unlikely(numbytes > totleft)) { |
1296 | warn("isochronous read: frame %d: numbytes (%d) > totleft (%d)", | 1332 | dev_warn(cs->dev, |
1297 | frame, numbytes, totleft); | 1333 | "isochronous read: frame %d: " |
1334 | "numbytes (%d) > totleft (%d)\n", | ||
1335 | frame, numbytes, totleft); | ||
1298 | break; | 1336 | break; |
1299 | } | 1337 | } |
1300 | offset = urb->iso_frame_desc[frame].offset; | 1338 | offset = urb->iso_frame_desc[frame].offset; |
1301 | if (unlikely(offset + numbytes > BAS_INBUFSIZE)) { | 1339 | if (unlikely(offset + numbytes > BAS_INBUFSIZE)) { |
1302 | warn("isochronous read: frame %d: offset (%d) + numbytes (%d) > BAS_INBUFSIZE", | 1340 | dev_warn(cs->dev, |
1303 | frame, offset, numbytes); | 1341 | "isochronous read: frame %d: " |
1342 | "offset (%d) + numbytes (%d) " | ||
1343 | "> BAS_INBUFSIZE\n", | ||
1344 | frame, offset, numbytes); | ||
1304 | break; | 1345 | break; |
1305 | } | 1346 | } |
1306 | gigaset_isoc_receive(rcvbuf + offset, numbytes, bcs); | 1347 | gigaset_isoc_receive(rcvbuf + offset, numbytes, bcs); |
1307 | totleft -= numbytes; | 1348 | totleft -= numbytes; |
1308 | } | 1349 | } |
1309 | if (unlikely(totleft > 0)) | 1350 | if (unlikely(totleft > 0)) |
1310 | warn("isochronous read: %d data bytes missing", | 1351 | dev_warn(cs->dev, |
1311 | totleft); | 1352 | "isochronous read: %d data bytes missing\n", |
1353 | totleft); | ||
1312 | 1354 | ||
1313 | error: | 1355 | error: |
1314 | /* URB processed, resubmit */ | 1356 | /* URB processed, resubmit */ |
@@ -1316,12 +1358,14 @@ static void read_iso_tasklet(unsigned long data) | |||
1316 | urb->iso_frame_desc[frame].status = 0; | 1358 | urb->iso_frame_desc[frame].status = 0; |
1317 | urb->iso_frame_desc[frame].actual_length = 0; | 1359 | urb->iso_frame_desc[frame].actual_length = 0; |
1318 | } | 1360 | } |
1319 | urb->dev = bcs->cs->hw.bas->udev; /* clobbered by USB subsystem */ | 1361 | /* urb->dev is clobbered by USB subsystem */ |
1362 | urb->dev = bcs->cs->hw.bas->udev; | ||
1320 | urb->transfer_flags = URB_ISO_ASAP; | 1363 | urb->transfer_flags = URB_ISO_ASAP; |
1321 | urb->number_of_packets = BAS_NUMFRAMES; | 1364 | urb->number_of_packets = BAS_NUMFRAMES; |
1322 | if ((rc = usb_submit_urb(urb, SLAB_ATOMIC)) != 0) { | 1365 | if ((rc = usb_submit_urb(urb, SLAB_ATOMIC)) != 0) { |
1323 | err("could not resubmit isochronous read URB: %s", | 1366 | dev_err(cs->dev, |
1324 | get_usb_statmsg(rc)); | 1367 | "could not resubmit isochronous read URB: %s\n", |
1368 | get_usb_statmsg(rc)); | ||
1325 | dump_urb(DEBUG_ISO, "resubmit iso read", urb); | 1369 | dump_urb(DEBUG_ISO, "resubmit iso read", urb); |
1326 | error_hangup(bcs); | 1370 | error_hangup(bcs); |
1327 | } | 1371 | } |
@@ -1357,33 +1401,34 @@ static void req_timeout(unsigned long data) | |||
1357 | 1401 | ||
1358 | switch (pending) { | 1402 | switch (pending) { |
1359 | case 0: /* no pending request */ | 1403 | case 0: /* no pending request */ |
1360 | dbg(DEBUG_USBREQ, "%s: no request pending", __func__); | 1404 | gig_dbg(DEBUG_USBREQ, "%s: no request pending", __func__); |
1361 | break; | 1405 | break; |
1362 | 1406 | ||
1363 | case HD_OPEN_ATCHANNEL: | 1407 | case HD_OPEN_ATCHANNEL: |
1364 | err("timeout opening AT channel"); | 1408 | dev_err(bcs->cs->dev, "timeout opening AT channel\n"); |
1365 | error_reset(bcs->cs); | 1409 | error_reset(bcs->cs); |
1366 | break; | 1410 | break; |
1367 | 1411 | ||
1368 | case HD_OPEN_B2CHANNEL: | 1412 | case HD_OPEN_B2CHANNEL: |
1369 | case HD_OPEN_B1CHANNEL: | 1413 | case HD_OPEN_B1CHANNEL: |
1370 | err("timeout opening channel %d", bcs->channel + 1); | 1414 | dev_err(bcs->cs->dev, "timeout opening channel %d\n", |
1415 | bcs->channel + 1); | ||
1371 | error_hangup(bcs); | 1416 | error_hangup(bcs); |
1372 | break; | 1417 | break; |
1373 | 1418 | ||
1374 | case HD_CLOSE_ATCHANNEL: | 1419 | case HD_CLOSE_ATCHANNEL: |
1375 | err("timeout closing AT channel"); | 1420 | dev_err(bcs->cs->dev, "timeout closing AT channel\n"); |
1376 | //wake_up_interruptible(cs->initwait); | ||
1377 | //FIXME need own wait queue? | ||
1378 | break; | 1421 | break; |
1379 | 1422 | ||
1380 | case HD_CLOSE_B2CHANNEL: | 1423 | case HD_CLOSE_B2CHANNEL: |
1381 | case HD_CLOSE_B1CHANNEL: | 1424 | case HD_CLOSE_B1CHANNEL: |
1382 | err("timeout closing channel %d", bcs->channel + 1); | 1425 | dev_err(bcs->cs->dev, "timeout closing channel %d\n", |
1426 | bcs->channel + 1); | ||
1383 | break; | 1427 | break; |
1384 | 1428 | ||
1385 | default: | 1429 | default: |
1386 | warn("request 0x%02x timed out, clearing", pending); | 1430 | dev_warn(bcs->cs->dev, "request 0x%02x timed out, clearing\n", |
1431 | pending); | ||
1387 | } | 1432 | } |
1388 | } | 1433 | } |
1389 | 1434 | ||
@@ -1406,8 +1451,9 @@ static void write_ctrl_callback(struct urb *urb, struct pt_regs *regs) | |||
1406 | ucs = (struct bas_cardstate *) urb->context; | 1451 | ucs = (struct bas_cardstate *) urb->context; |
1407 | spin_lock_irqsave(&ucs->lock, flags); | 1452 | spin_lock_irqsave(&ucs->lock, flags); |
1408 | if (urb->status && ucs->pending) { | 1453 | if (urb->status && ucs->pending) { |
1409 | err("control request 0x%02x failed: %s", | 1454 | dev_err(&ucs->interface->dev, |
1410 | ucs->pending, get_usb_statmsg(urb->status)); | 1455 | "control request 0x%02x failed: %s\n", |
1456 | ucs->pending, get_usb_statmsg(urb->status)); | ||
1411 | del_timer(&ucs->timer_ctrl); | 1457 | del_timer(&ucs->timer_ctrl); |
1412 | ucs->pending = 0; | 1458 | ucs->pending = 0; |
1413 | } | 1459 | } |
@@ -1446,18 +1492,21 @@ static int req_submit(struct bc_state *bcs, int req, int val, int timeout) | |||
1446 | IFNULLRETVAL(ucs, -EINVAL); | 1492 | IFNULLRETVAL(ucs, -EINVAL); |
1447 | IFNULLRETVAL(ucs->urb_ctrl, -EINVAL); | 1493 | IFNULLRETVAL(ucs->urb_ctrl, -EINVAL); |
1448 | 1494 | ||
1449 | dbg(DEBUG_USBREQ, "-------> 0x%02x (%d)", req, val); | 1495 | gig_dbg(DEBUG_USBREQ, "-------> 0x%02x (%d)", req, val); |
1450 | 1496 | ||
1451 | spin_lock_irqsave(&ucs->lock, flags); | 1497 | spin_lock_irqsave(&ucs->lock, flags); |
1452 | if (ucs->pending) { | 1498 | if (ucs->pending) { |
1453 | spin_unlock_irqrestore(&ucs->lock, flags); | 1499 | spin_unlock_irqrestore(&ucs->lock, flags); |
1454 | err("submission of request 0x%02x failed: request 0x%02x still pending", | 1500 | dev_err(bcs->cs->dev, |
1455 | req, ucs->pending); | 1501 | "submission of request 0x%02x failed: " |
1502 | "request 0x%02x still pending\n", | ||
1503 | req, ucs->pending); | ||
1456 | return -EBUSY; | 1504 | return -EBUSY; |
1457 | } | 1505 | } |
1458 | if (ucs->urb_ctrl->status == -EINPROGRESS) { | 1506 | if (ucs->urb_ctrl->status == -EINPROGRESS) { |
1459 | spin_unlock_irqrestore(&ucs->lock, flags); | 1507 | spin_unlock_irqrestore(&ucs->lock, flags); |
1460 | err("could not submit request 0x%02x: URB busy", req); | 1508 | dev_err(bcs->cs->dev, |
1509 | "could not submit request 0x%02x: URB busy\n", req); | ||
1461 | return -EBUSY; | 1510 | return -EBUSY; |
1462 | } | 1511 | } |
1463 | 1512 | ||
@@ -1467,19 +1516,19 @@ static int req_submit(struct bc_state *bcs, int req, int val, int timeout) | |||
1467 | ucs->dr_ctrl.wIndex = 0; | 1516 | ucs->dr_ctrl.wIndex = 0; |
1468 | ucs->dr_ctrl.wLength = 0; | 1517 | ucs->dr_ctrl.wLength = 0; |
1469 | usb_fill_control_urb(ucs->urb_ctrl, ucs->udev, | 1518 | usb_fill_control_urb(ucs->urb_ctrl, ucs->udev, |
1470 | usb_sndctrlpipe(ucs->udev, 0), | 1519 | usb_sndctrlpipe(ucs->udev, 0), |
1471 | (unsigned char*) &ucs->dr_ctrl, NULL, 0, | 1520 | (unsigned char*) &ucs->dr_ctrl, NULL, 0, |
1472 | write_ctrl_callback, ucs); | 1521 | write_ctrl_callback, ucs); |
1473 | if ((ret = usb_submit_urb(ucs->urb_ctrl, SLAB_ATOMIC)) != 0) { | 1522 | if ((ret = usb_submit_urb(ucs->urb_ctrl, SLAB_ATOMIC)) != 0) { |
1474 | err("could not submit request 0x%02x: %s", | 1523 | dev_err(bcs->cs->dev, "could not submit request 0x%02x: %s\n", |
1475 | req, get_usb_statmsg(ret)); | 1524 | req, get_usb_statmsg(ret)); |
1476 | spin_unlock_irqrestore(&ucs->lock, flags); | 1525 | spin_unlock_irqrestore(&ucs->lock, flags); |
1477 | return ret; | 1526 | return ret; |
1478 | } | 1527 | } |
1479 | ucs->pending = req; | 1528 | ucs->pending = req; |
1480 | 1529 | ||
1481 | if (timeout > 0) { | 1530 | if (timeout > 0) { |
1482 | dbg(DEBUG_USBREQ, "setting timeout of %d/10 secs", timeout); | 1531 | gig_dbg(DEBUG_USBREQ, "setting timeout of %d/10 secs", timeout); |
1483 | ucs->timer_ctrl.expires = jiffies + timeout * HZ / 10; | 1532 | ucs->timer_ctrl.expires = jiffies + timeout * HZ / 10; |
1484 | ucs->timer_ctrl.data = (unsigned long) bcs; | 1533 | ucs->timer_ctrl.data = (unsigned long) bcs; |
1485 | ucs->timer_ctrl.function = req_timeout; | 1534 | ucs->timer_ctrl.function = req_timeout; |
@@ -1505,16 +1554,17 @@ static int gigaset_init_bchannel(struct bc_state *bcs) | |||
1505 | IFNULLRETVAL(bcs, -EINVAL); | 1554 | IFNULLRETVAL(bcs, -EINVAL); |
1506 | 1555 | ||
1507 | if ((ret = starturbs(bcs)) < 0) { | 1556 | if ((ret = starturbs(bcs)) < 0) { |
1508 | err("could not start isochronous I/O for channel %d", | 1557 | dev_err(bcs->cs->dev, |
1509 | bcs->channel + 1); | 1558 | "could not start isochronous I/O for channel %d\n", |
1559 | bcs->channel + 1); | ||
1510 | error_hangup(bcs); | 1560 | error_hangup(bcs); |
1511 | return ret; | 1561 | return ret; |
1512 | } | 1562 | } |
1513 | 1563 | ||
1514 | req = bcs->channel ? HD_OPEN_B2CHANNEL : HD_OPEN_B1CHANNEL; | 1564 | req = bcs->channel ? HD_OPEN_B2CHANNEL : HD_OPEN_B1CHANNEL; |
1515 | if ((ret = req_submit(bcs, req, 0, BAS_TIMEOUT)) < 0) { | 1565 | if ((ret = req_submit(bcs, req, 0, BAS_TIMEOUT)) < 0) { |
1516 | err("could not open channel %d: %s", | 1566 | dev_err(bcs->cs->dev, "could not open channel %d: %s\n", |
1517 | bcs->channel + 1, get_usb_statmsg(ret)); | 1567 | bcs->channel + 1, get_usb_statmsg(ret)); |
1518 | stopurbs(bcs->hw.bas); | 1568 | stopurbs(bcs->hw.bas); |
1519 | error_hangup(bcs); | 1569 | error_hangup(bcs); |
1520 | } | 1570 | } |
@@ -1546,8 +1596,9 @@ static int gigaset_close_bchannel(struct bc_state *bcs) | |||
1546 | 1596 | ||
1547 | req = bcs->channel ? HD_CLOSE_B2CHANNEL : HD_CLOSE_B1CHANNEL; | 1597 | req = bcs->channel ? HD_CLOSE_B2CHANNEL : HD_CLOSE_B1CHANNEL; |
1548 | if ((ret = req_submit(bcs, req, 0, BAS_TIMEOUT)) < 0) | 1598 | if ((ret = req_submit(bcs, req, 0, BAS_TIMEOUT)) < 0) |
1549 | err("could not submit HD_CLOSE_BxCHANNEL request: %s", | 1599 | dev_err(bcs->cs->dev, |
1550 | get_usb_statmsg(ret)); | 1600 | "could not submit HD_CLOSE_BxCHANNEL request: %s\n", |
1601 | get_usb_statmsg(ret)); | ||
1551 | return ret; | 1602 | return ret; |
1552 | } | 1603 | } |
1553 | 1604 | ||
@@ -1570,9 +1621,9 @@ static void complete_cb(struct cardstate *cs) | |||
1570 | 1621 | ||
1571 | /* unqueue completed buffer */ | 1622 | /* unqueue completed buffer */ |
1572 | cs->cmdbytes -= cs->curlen; | 1623 | cs->cmdbytes -= cs->curlen; |
1573 | dbg(DEBUG_TRANSCMD | DEBUG_LOCKCMD, | 1624 | gig_dbg(DEBUG_TRANSCMD|DEBUG_LOCKCMD, |
1574 | "write_command: sent %u bytes, %u left", | 1625 | "write_command: sent %u bytes, %u left", |
1575 | cs->curlen, cs->cmdbytes); | 1626 | cs->curlen, cs->cmdbytes); |
1576 | if ((cs->cmdbuf = cb->next) != NULL) { | 1627 | if ((cs->cmdbuf = cb->next) != NULL) { |
1577 | cs->cmdbuf->prev = NULL; | 1628 | cs->cmdbuf->prev = NULL; |
1578 | cs->curlen = cs->cmdbuf->len; | 1629 | cs->curlen = cs->cmdbuf->len; |
@@ -1616,22 +1667,27 @@ static void write_command_callback(struct urb *urb, struct pt_regs *regs) | |||
1616 | case -ECONNRESET: /* canceled (async) */ | 1667 | case -ECONNRESET: /* canceled (async) */ |
1617 | case -EINPROGRESS: /* pending */ | 1668 | case -EINPROGRESS: /* pending */ |
1618 | /* ignore silently */ | 1669 | /* ignore silently */ |
1619 | dbg(DEBUG_USBREQ, | 1670 | gig_dbg(DEBUG_USBREQ, "%s: %s", |
1620 | "%s: %s", __func__, get_usb_statmsg(urb->status)); | 1671 | __func__, get_usb_statmsg(urb->status)); |
1621 | return; | 1672 | return; |
1622 | default: /* any failure */ | 1673 | default: /* any failure */ |
1623 | if (++ucs->retry_cmd_out > BAS_RETRY) { | 1674 | if (++ucs->retry_cmd_out > BAS_RETRY) { |
1624 | warn("command write: %s, giving up after %d retries", | 1675 | dev_warn(cs->dev, |
1625 | get_usb_statmsg(urb->status), ucs->retry_cmd_out); | 1676 | "command write: %s, " |
1677 | "giving up after %d retries\n", | ||
1678 | get_usb_statmsg(urb->status), | ||
1679 | ucs->retry_cmd_out); | ||
1626 | break; | 1680 | break; |
1627 | } | 1681 | } |
1628 | if (cs->cmdbuf == NULL) { | 1682 | if (cs->cmdbuf == NULL) { |
1629 | warn("command write: %s, cannot retry - cmdbuf gone", | 1683 | dev_warn(cs->dev, |
1630 | get_usb_statmsg(urb->status)); | 1684 | "command write: %s, " |
1685 | "cannot retry - cmdbuf gone\n", | ||
1686 | get_usb_statmsg(urb->status)); | ||
1631 | break; | 1687 | break; |
1632 | } | 1688 | } |
1633 | notice("command write: %s, retry %d", | 1689 | dev_notice(cs->dev, "command write: %s, retry %d\n", |
1634 | get_usb_statmsg(urb->status), ucs->retry_cmd_out); | 1690 | get_usb_statmsg(urb->status), ucs->retry_cmd_out); |
1635 | if (atwrite_submit(cs, cs->cmdbuf->buf, cs->cmdbuf->len) >= 0) | 1691 | if (atwrite_submit(cs, cs->cmdbuf->buf, cs->cmdbuf->len) >= 0) |
1636 | /* resubmitted - bypass regular exit block */ | 1692 | /* resubmitted - bypass regular exit block */ |
1637 | return; | 1693 | return; |
@@ -1659,7 +1715,7 @@ static void atrdy_timeout(unsigned long data) | |||
1659 | ucs = cs->hw.bas; | 1715 | ucs = cs->hw.bas; |
1660 | IFNULLRET(ucs); | 1716 | IFNULLRET(ucs); |
1661 | 1717 | ||
1662 | warn("timeout waiting for HD_READY_SEND_ATDATA"); | 1718 | dev_warn(cs->dev, "timeout waiting for HD_READY_SEND_ATDATA\n"); |
1663 | 1719 | ||
1664 | /* fake the missing signal - what else can I do? */ | 1720 | /* fake the missing signal - what else can I do? */ |
1665 | update_basstate(ucs, BS_ATREADY, BS_ATTIMER); | 1721 | update_basstate(ucs, BS_ATREADY, BS_ATTIMER); |
@@ -1688,10 +1744,11 @@ static int atwrite_submit(struct cardstate *cs, unsigned char *buf, int len) | |||
1688 | IFNULLRETVAL(ucs, -EFAULT); | 1744 | IFNULLRETVAL(ucs, -EFAULT); |
1689 | IFNULLRETVAL(ucs->urb_cmd_out, -EFAULT); | 1745 | IFNULLRETVAL(ucs->urb_cmd_out, -EFAULT); |
1690 | 1746 | ||
1691 | dbg(DEBUG_USBREQ, "-------> HD_WRITE_ATMESSAGE (%d)", len); | 1747 | gig_dbg(DEBUG_USBREQ, "-------> HD_WRITE_ATMESSAGE (%d)", len); |
1692 | 1748 | ||
1693 | if (ucs->urb_cmd_out->status == -EINPROGRESS) { | 1749 | if (ucs->urb_cmd_out->status == -EINPROGRESS) { |
1694 | err("could not submit HD_WRITE_ATMESSAGE: URB busy"); | 1750 | dev_err(cs->dev, |
1751 | "could not submit HD_WRITE_ATMESSAGE: URB busy\n"); | ||
1695 | return -EBUSY; | 1752 | return -EBUSY; |
1696 | } | 1753 | } |
1697 | 1754 | ||
@@ -1706,8 +1763,8 @@ static int atwrite_submit(struct cardstate *cs, unsigned char *buf, int len) | |||
1706 | write_command_callback, cs); | 1763 | write_command_callback, cs); |
1707 | 1764 | ||
1708 | if ((ret = usb_submit_urb(ucs->urb_cmd_out, SLAB_ATOMIC)) != 0) { | 1765 | if ((ret = usb_submit_urb(ucs->urb_cmd_out, SLAB_ATOMIC)) != 0) { |
1709 | err("could not submit HD_WRITE_ATMESSAGE: %s", | 1766 | dev_err(cs->dev, "could not submit HD_WRITE_ATMESSAGE: %s\n", |
1710 | get_usb_statmsg(ret)); | 1767 | get_usb_statmsg(ret)); |
1711 | return ret; | 1768 | return ret; |
1712 | } | 1769 | } |
1713 | 1770 | ||
@@ -1716,8 +1773,8 @@ static int atwrite_submit(struct cardstate *cs, unsigned char *buf, int len) | |||
1716 | 1773 | ||
1717 | /* start timeout if necessary */ | 1774 | /* start timeout if necessary */ |
1718 | if (!(atomic_read(&ucs->basstate) & BS_ATTIMER)) { | 1775 | if (!(atomic_read(&ucs->basstate) & BS_ATTIMER)) { |
1719 | dbg(DEBUG_OUTPUT, | 1776 | gig_dbg(DEBUG_OUTPUT, "setting ATREADY timeout of %d/10 secs", |
1720 | "setting ATREADY timeout of %d/10 secs", ATRDY_TIMEOUT); | 1777 | ATRDY_TIMEOUT); |
1721 | ucs->timer_atrdy.expires = jiffies + ATRDY_TIMEOUT * HZ / 10; | 1778 | ucs->timer_atrdy.expires = jiffies + ATRDY_TIMEOUT * HZ / 10; |
1722 | ucs->timer_atrdy.data = (unsigned long) cs; | 1779 | ucs->timer_atrdy.data = (unsigned long) cs; |
1723 | ucs->timer_atrdy.function = atrdy_timeout; | 1780 | ucs->timer_atrdy.function = atrdy_timeout; |
@@ -1749,10 +1806,10 @@ static int start_cbsend(struct cardstate *cs) | |||
1749 | 1806 | ||
1750 | /* check if AT channel is open */ | 1807 | /* check if AT channel is open */ |
1751 | if (!(atomic_read(&ucs->basstate) & BS_ATOPEN)) { | 1808 | if (!(atomic_read(&ucs->basstate) & BS_ATOPEN)) { |
1752 | dbg(DEBUG_TRANSCMD | DEBUG_LOCKCMD, "AT channel not open"); | 1809 | gig_dbg(DEBUG_TRANSCMD|DEBUG_LOCKCMD, "AT channel not open"); |
1753 | rc = req_submit(cs->bcs, HD_OPEN_ATCHANNEL, 0, BAS_TIMEOUT); | 1810 | rc = req_submit(cs->bcs, HD_OPEN_ATCHANNEL, 0, BAS_TIMEOUT); |
1754 | if (rc < 0) { | 1811 | if (rc < 0) { |
1755 | err("could not open AT channel"); | 1812 | dev_err(cs->dev, "could not open AT channel\n"); |
1756 | /* flush command queue */ | 1813 | /* flush command queue */ |
1757 | spin_lock_irqsave(&cs->cmdlock, flags); | 1814 | spin_lock_irqsave(&cs->cmdlock, flags); |
1758 | while (cs->cmdbuf != NULL) | 1815 | while (cs->cmdbuf != NULL) |
@@ -1797,19 +1854,19 @@ static int start_cbsend(struct cardstate *cs) | |||
1797 | * error code < 0 on error | 1854 | * error code < 0 on error |
1798 | */ | 1855 | */ |
1799 | static int gigaset_write_cmd(struct cardstate *cs, | 1856 | static int gigaset_write_cmd(struct cardstate *cs, |
1800 | const unsigned char *buf, int len, | 1857 | const unsigned char *buf, int len, |
1801 | struct tasklet_struct *wake_tasklet) | 1858 | struct tasklet_struct *wake_tasklet) |
1802 | { | 1859 | { |
1803 | struct cmdbuf_t *cb; | 1860 | struct cmdbuf_t *cb; |
1804 | unsigned long flags; | 1861 | unsigned long flags; |
1805 | int status; | 1862 | int status; |
1806 | 1863 | ||
1807 | gigaset_dbg_buffer(atomic_read(&cs->mstate) != MS_LOCKED ? | 1864 | gigaset_dbg_buffer(atomic_read(&cs->mstate) != MS_LOCKED ? |
1808 | DEBUG_TRANSCMD : DEBUG_LOCKCMD, | 1865 | DEBUG_TRANSCMD : DEBUG_LOCKCMD, |
1809 | "CMD Transmit", len, buf, 0); | 1866 | "CMD Transmit", len, buf, 0); |
1810 | 1867 | ||
1811 | if (!atomic_read(&cs->connected)) { | 1868 | if (unlikely(!atomic_read(&cs->connected))) { |
1812 | err("%s: not connected", __func__); | 1869 | err("%s: disconnected", __func__); |
1813 | return -ENODEV; | 1870 | return -ENODEV; |
1814 | } | 1871 | } |
1815 | 1872 | ||
@@ -1819,7 +1876,7 @@ static int gigaset_write_cmd(struct cardstate *cs, | |||
1819 | if (len > IF_WRITEBUF) | 1876 | if (len > IF_WRITEBUF) |
1820 | len = IF_WRITEBUF; | 1877 | len = IF_WRITEBUF; |
1821 | if (!(cb = kmalloc(sizeof(struct cmdbuf_t) + len, GFP_ATOMIC))) { | 1878 | if (!(cb = kmalloc(sizeof(struct cmdbuf_t) + len, GFP_ATOMIC))) { |
1822 | err("%s: out of memory", __func__); | 1879 | dev_err(cs->dev, "%s: out of memory\n", __func__); |
1823 | return -ENOMEM; | 1880 | return -ENOMEM; |
1824 | } | 1881 | } |
1825 | 1882 | ||
@@ -1947,7 +2004,7 @@ static int gigaset_initbcshw(struct bc_state *bcs) | |||
1947 | return 0; | 2004 | return 0; |
1948 | } | 2005 | } |
1949 | tasklet_init(&ubc->sent_tasklet, | 2006 | tasklet_init(&ubc->sent_tasklet, |
1950 | &write_iso_tasklet, (unsigned long) bcs); | 2007 | &write_iso_tasklet, (unsigned long) bcs); |
1951 | 2008 | ||
1952 | spin_lock_init(&ubc->isoinlock); | 2009 | spin_lock_init(&ubc->isoinlock); |
1953 | for (i = 0; i < BAS_INURBS; ++i) | 2010 | for (i = 0; i < BAS_INURBS; ++i) |
@@ -1968,7 +2025,7 @@ static int gigaset_initbcshw(struct bc_state *bcs) | |||
1968 | ubc->shared0s = 0; | 2025 | ubc->shared0s = 0; |
1969 | ubc->stolen0s = 0; | 2026 | ubc->stolen0s = 0; |
1970 | tasklet_init(&ubc->rcvd_tasklet, | 2027 | tasklet_init(&ubc->rcvd_tasklet, |
1971 | &read_iso_tasklet, (unsigned long) bcs); | 2028 | &read_iso_tasklet, (unsigned long) bcs); |
1972 | return 1; | 2029 | return 1; |
1973 | } | 2030 | } |
1974 | 2031 | ||
@@ -2041,43 +2098,47 @@ static void freeurbs(struct cardstate *cs) | |||
2041 | for (i = 0; i < BAS_OUTURBS; ++i) | 2098 | for (i = 0; i < BAS_OUTURBS; ++i) |
2042 | if (ubc->isoouturbs[i].urb) { | 2099 | if (ubc->isoouturbs[i].urb) { |
2043 | usb_kill_urb(ubc->isoouturbs[i].urb); | 2100 | usb_kill_urb(ubc->isoouturbs[i].urb); |
2044 | dbg(DEBUG_INIT, | 2101 | gig_dbg(DEBUG_INIT, |
2045 | "%s: isoc output URB %d/%d unlinked", | 2102 | "%s: isoc output URB %d/%d unlinked", |
2046 | __func__, j, i); | 2103 | __func__, j, i); |
2047 | usb_free_urb(ubc->isoouturbs[i].urb); | 2104 | usb_free_urb(ubc->isoouturbs[i].urb); |
2048 | ubc->isoouturbs[i].urb = NULL; | 2105 | ubc->isoouturbs[i].urb = NULL; |
2049 | } | 2106 | } |
2050 | for (i = 0; i < BAS_INURBS; ++i) | 2107 | for (i = 0; i < BAS_INURBS; ++i) |
2051 | if (ubc->isoinurbs[i]) { | 2108 | if (ubc->isoinurbs[i]) { |
2052 | usb_kill_urb(ubc->isoinurbs[i]); | 2109 | usb_kill_urb(ubc->isoinurbs[i]); |
2053 | dbg(DEBUG_INIT, | 2110 | gig_dbg(DEBUG_INIT, |
2054 | "%s: isoc input URB %d/%d unlinked", | 2111 | "%s: isoc input URB %d/%d unlinked", |
2055 | __func__, j, i); | 2112 | __func__, j, i); |
2056 | usb_free_urb(ubc->isoinurbs[i]); | 2113 | usb_free_urb(ubc->isoinurbs[i]); |
2057 | ubc->isoinurbs[i] = NULL; | 2114 | ubc->isoinurbs[i] = NULL; |
2058 | } | 2115 | } |
2059 | } | 2116 | } |
2060 | if (ucs->urb_int_in) { | 2117 | if (ucs->urb_int_in) { |
2061 | usb_kill_urb(ucs->urb_int_in); | 2118 | usb_kill_urb(ucs->urb_int_in); |
2062 | dbg(DEBUG_INIT, "%s: interrupt input URB unlinked", __func__); | 2119 | gig_dbg(DEBUG_INIT, "%s: interrupt input URB unlinked", |
2120 | __func__); | ||
2063 | usb_free_urb(ucs->urb_int_in); | 2121 | usb_free_urb(ucs->urb_int_in); |
2064 | ucs->urb_int_in = NULL; | 2122 | ucs->urb_int_in = NULL; |
2065 | } | 2123 | } |
2066 | if (ucs->urb_cmd_out) { | 2124 | if (ucs->urb_cmd_out) { |
2067 | usb_kill_urb(ucs->urb_cmd_out); | 2125 | usb_kill_urb(ucs->urb_cmd_out); |
2068 | dbg(DEBUG_INIT, "%s: command output URB unlinked", __func__); | 2126 | gig_dbg(DEBUG_INIT, "%s: command output URB unlinked", |
2127 | __func__); | ||
2069 | usb_free_urb(ucs->urb_cmd_out); | 2128 | usb_free_urb(ucs->urb_cmd_out); |
2070 | ucs->urb_cmd_out = NULL; | 2129 | ucs->urb_cmd_out = NULL; |
2071 | } | 2130 | } |
2072 | if (ucs->urb_cmd_in) { | 2131 | if (ucs->urb_cmd_in) { |
2073 | usb_kill_urb(ucs->urb_cmd_in); | 2132 | usb_kill_urb(ucs->urb_cmd_in); |
2074 | dbg(DEBUG_INIT, "%s: command input URB unlinked", __func__); | 2133 | gig_dbg(DEBUG_INIT, "%s: command input URB unlinked", |
2134 | __func__); | ||
2075 | usb_free_urb(ucs->urb_cmd_in); | 2135 | usb_free_urb(ucs->urb_cmd_in); |
2076 | ucs->urb_cmd_in = NULL; | 2136 | ucs->urb_cmd_in = NULL; |
2077 | } | 2137 | } |
2078 | if (ucs->urb_ctrl) { | 2138 | if (ucs->urb_ctrl) { |
2079 | usb_kill_urb(ucs->urb_ctrl); | 2139 | usb_kill_urb(ucs->urb_ctrl); |
2080 | dbg(DEBUG_INIT, "%s: control output URB unlinked", __func__); | 2140 | gig_dbg(DEBUG_INIT, "%s: control output URB unlinked", |
2141 | __func__); | ||
2081 | usb_free_urb(ucs->urb_ctrl); | 2142 | usb_free_urb(ucs->urb_ctrl); |
2082 | ucs->urb_ctrl = NULL; | 2143 | ucs->urb_ctrl = NULL; |
2083 | } | 2144 | } |
@@ -2101,10 +2162,10 @@ static int gigaset_probe(struct usb_interface *interface, | |||
2101 | 2162 | ||
2102 | IFNULLRETVAL(udev, -ENODEV); | 2163 | IFNULLRETVAL(udev, -ENODEV); |
2103 | 2164 | ||
2104 | dbg(DEBUG_ANY, | 2165 | gig_dbg(DEBUG_ANY, |
2105 | "%s: Check if device matches .. (Vendor: 0x%x, Product: 0x%x)", | 2166 | "%s: Check if device matches .. (Vendor: 0x%x, Product: 0x%x)", |
2106 | __func__, le16_to_cpu(udev->descriptor.idVendor), | 2167 | __func__, le16_to_cpu(udev->descriptor.idVendor), |
2107 | le16_to_cpu(udev->descriptor.idProduct)); | 2168 | le16_to_cpu(udev->descriptor.idProduct)); |
2108 | 2169 | ||
2109 | /* See if the device offered us matches what we can accept */ | 2170 | /* See if the device offered us matches what we can accept */ |
2110 | if ((le16_to_cpu(udev->descriptor.idVendor) != USB_GIGA_VENDOR_ID) || | 2171 | if ((le16_to_cpu(udev->descriptor.idVendor) != USB_GIGA_VENDOR_ID) || |
@@ -2112,20 +2173,21 @@ static int gigaset_probe(struct usb_interface *interface, | |||
2112 | le16_to_cpu(udev->descriptor.idProduct) != USB_4175_PRODUCT_ID && | 2173 | le16_to_cpu(udev->descriptor.idProduct) != USB_4175_PRODUCT_ID && |
2113 | le16_to_cpu(udev->descriptor.idProduct) != USB_SX303_PRODUCT_ID && | 2174 | le16_to_cpu(udev->descriptor.idProduct) != USB_SX303_PRODUCT_ID && |
2114 | le16_to_cpu(udev->descriptor.idProduct) != USB_SX353_PRODUCT_ID)) { | 2175 | le16_to_cpu(udev->descriptor.idProduct) != USB_SX353_PRODUCT_ID)) { |
2115 | dbg(DEBUG_ANY, "%s: unmatched ID - exiting", __func__); | 2176 | gig_dbg(DEBUG_ANY, "%s: unmatched ID - exiting", __func__); |
2116 | return -ENODEV; | 2177 | return -ENODEV; |
2117 | } | 2178 | } |
2118 | 2179 | ||
2119 | /* set required alternate setting */ | 2180 | /* set required alternate setting */ |
2120 | hostif = interface->cur_altsetting; | 2181 | hostif = interface->cur_altsetting; |
2121 | if (hostif->desc.bAlternateSetting != 3) { | 2182 | if (hostif->desc.bAlternateSetting != 3) { |
2122 | dbg(DEBUG_ANY, | 2183 | gig_dbg(DEBUG_ANY, |
2123 | "%s: wrong alternate setting %d - trying to switch", | 2184 | "%s: wrong alternate setting %d - trying to switch", |
2124 | __func__, hostif->desc.bAlternateSetting); | 2185 | __func__, hostif->desc.bAlternateSetting); |
2125 | if (usb_set_interface(udev, hostif->desc.bInterfaceNumber, 3) < 0) { | 2186 | if (usb_set_interface(udev, hostif->desc.bInterfaceNumber, 3) < 0) { |
2126 | warn("usb_set_interface failed, device %d interface %d altsetting %d", | 2187 | dev_warn(&udev->dev, "usb_set_interface failed, " |
2127 | udev->devnum, hostif->desc.bInterfaceNumber, | 2188 | "device %d interface %d altsetting %d\n", |
2128 | hostif->desc.bAlternateSetting); | 2189 | udev->devnum, hostif->desc.bInterfaceNumber, |
2190 | hostif->desc.bAlternateSetting); | ||
2129 | return -ENODEV; | 2191 | return -ENODEV; |
2130 | } | 2192 | } |
2131 | hostif = interface->cur_altsetting; | 2193 | hostif = interface->cur_altsetting; |
@@ -2134,23 +2196,28 @@ static int gigaset_probe(struct usb_interface *interface, | |||
2134 | /* Reject application specific interfaces | 2196 | /* Reject application specific interfaces |
2135 | */ | 2197 | */ |
2136 | if (hostif->desc.bInterfaceClass != 255) { | 2198 | if (hostif->desc.bInterfaceClass != 255) { |
2137 | warn("%s: bInterfaceClass == %d", | 2199 | dev_warn(&udev->dev, "%s: bInterfaceClass == %d\n", |
2138 | __func__, hostif->desc.bInterfaceClass); | 2200 | __func__, hostif->desc.bInterfaceClass); |
2139 | return -ENODEV; | 2201 | return -ENODEV; |
2140 | } | 2202 | } |
2141 | 2203 | ||
2142 | info("%s: Device matched (Vendor: 0x%x, Product: 0x%x)", | 2204 | dev_info(&udev->dev, |
2143 | __func__, le16_to_cpu(udev->descriptor.idVendor), | 2205 | "%s: Device matched (Vendor: 0x%x, Product: 0x%x)\n", |
2144 | le16_to_cpu(udev->descriptor.idProduct)); | 2206 | __func__, le16_to_cpu(udev->descriptor.idVendor), |
2207 | le16_to_cpu(udev->descriptor.idProduct)); | ||
2145 | 2208 | ||
2146 | cs = gigaset_getunassignedcs(driver); | 2209 | cs = gigaset_getunassignedcs(driver); |
2147 | if (!cs) { | 2210 | if (!cs) { |
2148 | err("%s: no free cardstate", __func__); | 2211 | dev_err(&udev->dev, "no free cardstate\n"); |
2149 | return -ENODEV; | 2212 | return -ENODEV; |
2150 | } | 2213 | } |
2151 | ucs = cs->hw.bas; | 2214 | ucs = cs->hw.bas; |
2215 | |||
2216 | /* save off device structure ptrs for later use */ | ||
2217 | usb_get_dev(udev); | ||
2152 | ucs->udev = udev; | 2218 | ucs->udev = udev; |
2153 | ucs->interface = interface; | 2219 | ucs->interface = interface; |
2220 | cs->dev = &udev->dev; | ||
2154 | 2221 | ||
2155 | /* allocate URBs: | 2222 | /* allocate URBs: |
2156 | * - one for the interrupt pipe | 2223 | * - one for the interrupt pipe |
@@ -2159,22 +2226,22 @@ static int gigaset_probe(struct usb_interface *interface, | |||
2159 | */ | 2226 | */ |
2160 | ucs->urb_int_in = usb_alloc_urb(0, SLAB_KERNEL); | 2227 | ucs->urb_int_in = usb_alloc_urb(0, SLAB_KERNEL); |
2161 | if (!ucs->urb_int_in) { | 2228 | if (!ucs->urb_int_in) { |
2162 | err("No free urbs available"); | 2229 | dev_err(cs->dev, "no free urbs available\n"); |
2163 | goto error; | 2230 | goto error; |
2164 | } | 2231 | } |
2165 | ucs->urb_cmd_in = usb_alloc_urb(0, SLAB_KERNEL); | 2232 | ucs->urb_cmd_in = usb_alloc_urb(0, SLAB_KERNEL); |
2166 | if (!ucs->urb_cmd_in) { | 2233 | if (!ucs->urb_cmd_in) { |
2167 | err("No free urbs available"); | 2234 | dev_err(cs->dev, "no free urbs available\n"); |
2168 | goto error; | 2235 | goto error; |
2169 | } | 2236 | } |
2170 | ucs->urb_cmd_out = usb_alloc_urb(0, SLAB_KERNEL); | 2237 | ucs->urb_cmd_out = usb_alloc_urb(0, SLAB_KERNEL); |
2171 | if (!ucs->urb_cmd_out) { | 2238 | if (!ucs->urb_cmd_out) { |
2172 | err("No free urbs available"); | 2239 | dev_err(cs->dev, "no free urbs available\n"); |
2173 | goto error; | 2240 | goto error; |
2174 | } | 2241 | } |
2175 | ucs->urb_ctrl = usb_alloc_urb(0, SLAB_KERNEL); | 2242 | ucs->urb_ctrl = usb_alloc_urb(0, SLAB_KERNEL); |
2176 | if (!ucs->urb_ctrl) { | 2243 | if (!ucs->urb_ctrl) { |
2177 | err("No free urbs available"); | 2244 | dev_err(cs->dev, "no free urbs available\n"); |
2178 | goto error; | 2245 | goto error; |
2179 | } | 2246 | } |
2180 | 2247 | ||
@@ -2184,7 +2251,7 @@ static int gigaset_probe(struct usb_interface *interface, | |||
2184 | ubc->isoouturbs[i].urb = | 2251 | ubc->isoouturbs[i].urb = |
2185 | usb_alloc_urb(BAS_NUMFRAMES, SLAB_KERNEL); | 2252 | usb_alloc_urb(BAS_NUMFRAMES, SLAB_KERNEL); |
2186 | if (!ubc->isoouturbs[i].urb) { | 2253 | if (!ubc->isoouturbs[i].urb) { |
2187 | err("No free urbs available"); | 2254 | dev_err(cs->dev, "no free urbs available\n"); |
2188 | goto error; | 2255 | goto error; |
2189 | } | 2256 | } |
2190 | } | 2257 | } |
@@ -2192,7 +2259,7 @@ static int gigaset_probe(struct usb_interface *interface, | |||
2192 | ubc->isoinurbs[i] = | 2259 | ubc->isoinurbs[i] = |
2193 | usb_alloc_urb(BAS_NUMFRAMES, SLAB_KERNEL); | 2260 | usb_alloc_urb(BAS_NUMFRAMES, SLAB_KERNEL); |
2194 | if (!ubc->isoinurbs[i]) { | 2261 | if (!ubc->isoinurbs[i]) { |
2195 | err("No free urbs available"); | 2262 | dev_err(cs->dev, "no free urbs available\n"); |
2196 | goto error; | 2263 | goto error; |
2197 | } | 2264 | } |
2198 | } | 2265 | } |
@@ -2204,13 +2271,14 @@ static int gigaset_probe(struct usb_interface *interface, | |||
2204 | /* Fill the interrupt urb and send it to the core */ | 2271 | /* Fill the interrupt urb and send it to the core */ |
2205 | endpoint = &hostif->endpoint[0].desc; | 2272 | endpoint = &hostif->endpoint[0].desc; |
2206 | usb_fill_int_urb(ucs->urb_int_in, udev, | 2273 | usb_fill_int_urb(ucs->urb_int_in, udev, |
2207 | usb_rcvintpipe(udev, | 2274 | usb_rcvintpipe(udev, |
2208 | (endpoint->bEndpointAddress) & 0x0f), | 2275 | (endpoint->bEndpointAddress) & 0x0f), |
2209 | ucs->int_in_buf, 3, read_int_callback, cs, | 2276 | ucs->int_in_buf, 3, read_int_callback, cs, |
2210 | endpoint->bInterval); | 2277 | endpoint->bInterval); |
2211 | ret = usb_submit_urb(ucs->urb_int_in, SLAB_KERNEL); | 2278 | ret = usb_submit_urb(ucs->urb_int_in, SLAB_KERNEL); |
2212 | if (ret) { | 2279 | if (ret) { |
2213 | err("could not submit interrupt URB: %s", get_usb_statmsg(ret)); | 2280 | dev_err(cs->dev, "could not submit interrupt URB: %s\n", |
2281 | get_usb_statmsg(ret)); | ||
2214 | goto error; | 2282 | goto error; |
2215 | } | 2283 | } |
2216 | 2284 | ||
@@ -2255,7 +2323,7 @@ static void gigaset_disconnect(struct usb_interface *interface) | |||
2255 | ucs = cs->hw.bas; | 2323 | ucs = cs->hw.bas; |
2256 | IFNULLRET(ucs); | 2324 | IFNULLRET(ucs); |
2257 | 2325 | ||
2258 | info("disconnecting GigaSet base"); | 2326 | dev_info(cs->dev, "disconnecting GigaSet base"); |
2259 | gigaset_stop(cs); | 2327 | gigaset_stop(cs); |
2260 | freeurbs(cs); | 2328 | freeurbs(cs); |
2261 | kfree(ucs->rcvbuf); | 2329 | kfree(ucs->rcvbuf); |
@@ -2293,9 +2361,9 @@ static int __init bas_gigaset_init(void) | |||
2293 | 2361 | ||
2294 | /* allocate memory for our driver state and intialize it */ | 2362 | /* allocate memory for our driver state and intialize it */ |
2295 | if ((driver = gigaset_initdriver(GIGASET_MINOR, GIGASET_MINORS, | 2363 | if ((driver = gigaset_initdriver(GIGASET_MINOR, GIGASET_MINORS, |
2296 | GIGASET_MODULENAME, GIGASET_DEVNAME, | 2364 | GIGASET_MODULENAME, GIGASET_DEVNAME, |
2297 | GIGASET_DEVFSNAME, &gigops, | 2365 | GIGASET_DEVFSNAME, &gigops, |
2298 | THIS_MODULE)) == NULL) | 2366 | THIS_MODULE)) == NULL) |
2299 | goto error; | 2367 | goto error; |
2300 | 2368 | ||
2301 | /* allocate memory for our device state and intialize it */ | 2369 | /* allocate memory for our device state and intialize it */ |
@@ -2330,19 +2398,18 @@ error: if (cardstate) | |||
2330 | static void __exit bas_gigaset_exit(void) | 2398 | static void __exit bas_gigaset_exit(void) |
2331 | { | 2399 | { |
2332 | gigaset_blockdriver(driver); /* => probe will fail | 2400 | gigaset_blockdriver(driver); /* => probe will fail |
2333 | * => no gigaset_start any more | 2401 | * => no gigaset_start any more |
2334 | */ | 2402 | */ |
2335 | 2403 | ||
2336 | gigaset_shutdown(cardstate); | 2404 | gigaset_shutdown(cardstate); |
2337 | /* from now on, no isdn callback should be possible */ | 2405 | /* from now on, no isdn callback should be possible */ |
2338 | 2406 | ||
2339 | if (atomic_read(&cardstate->hw.bas->basstate) & BS_ATOPEN) { | 2407 | if (atomic_read(&cardstate->hw.bas->basstate) & BS_ATOPEN) { |
2340 | dbg(DEBUG_ANY, "closing AT channel"); | 2408 | gig_dbg(DEBUG_ANY, "closing AT channel"); |
2341 | if (req_submit(cardstate->bcs, | 2409 | if (req_submit(cardstate->bcs, |
2342 | HD_CLOSE_ATCHANNEL, 0, BAS_TIMEOUT) >= 0) { | 2410 | HD_CLOSE_ATCHANNEL, 0, BAS_TIMEOUT) >= 0) { |
2343 | /* successfully submitted - wait for completion */ | 2411 | /* successfully submitted */ |
2344 | //wait_event_interruptible(cs->initwait, !cs->hw.bas->pending); | 2412 | //FIXME wait for completion? |
2345 | //FIXME need own wait queue? wakeup? | ||
2346 | } | 2413 | } |
2347 | } | 2414 | } |
2348 | 2415 | ||
diff --git a/drivers/isdn/gigaset/common.c b/drivers/isdn/gigaset/common.c index a607837b9f6c..fb5cf703133f 100644 --- a/drivers/isdn/gigaset/common.c +++ b/drivers/isdn/gigaset/common.c | |||
@@ -32,17 +32,14 @@ MODULE_PARM_DESC(debug, "debug level"); | |||
32 | Prototypes of internal functions | 32 | Prototypes of internal functions |
33 | */ | 33 | */ |
34 | 34 | ||
35 | //static void gigaset_process_response(int resp_code, int parameter, | ||
36 | // struct at_state_t *at_state, | ||
37 | // unsigned char ** pstring); | ||
38 | static struct cardstate *alloc_cs(struct gigaset_driver *drv); | 35 | static struct cardstate *alloc_cs(struct gigaset_driver *drv); |
39 | static void free_cs(struct cardstate *cs); | 36 | static void free_cs(struct cardstate *cs); |
40 | static void make_valid(struct cardstate *cs, unsigned mask); | 37 | static void make_valid(struct cardstate *cs, unsigned mask); |
41 | static void make_invalid(struct cardstate *cs, unsigned mask); | 38 | static void make_invalid(struct cardstate *cs, unsigned mask); |
42 | 39 | ||
43 | #define VALID_MINOR 0x01 | 40 | #define VALID_MINOR 0x01 |
44 | #define VALID_ID 0x02 | 41 | #define VALID_ID 0x02 |
45 | #define ASSIGNED 0x04 | 42 | #define ASSIGNED 0x04 |
46 | 43 | ||
47 | /* bitwise byte inversion table */ | 44 | /* bitwise byte inversion table */ |
48 | __u8 gigaset_invtab[256] = { | 45 | __u8 gigaset_invtab[256] = { |
@@ -82,10 +79,11 @@ __u8 gigaset_invtab[256] = { | |||
82 | EXPORT_SYMBOL_GPL(gigaset_invtab); | 79 | EXPORT_SYMBOL_GPL(gigaset_invtab); |
83 | 80 | ||
84 | void gigaset_dbg_buffer(enum debuglevel level, const unsigned char *msg, | 81 | void gigaset_dbg_buffer(enum debuglevel level, const unsigned char *msg, |
85 | size_t len, const unsigned char *buf, int from_user) | 82 | size_t len, const unsigned char *buf, int from_user) |
86 | { | 83 | { |
87 | unsigned char outbuf[80]; | 84 | unsigned char outbuf[80]; |
88 | unsigned char inbuf[80 - 1]; | 85 | unsigned char inbuf[80 - 1]; |
86 | unsigned char c; | ||
89 | size_t numin; | 87 | size_t numin; |
90 | const unsigned char *in; | 88 | const unsigned char *in; |
91 | size_t space = sizeof outbuf - 1; | 89 | size_t space = sizeof outbuf - 1; |
@@ -99,26 +97,38 @@ void gigaset_dbg_buffer(enum debuglevel level, const unsigned char *msg, | |||
99 | in = inbuf; | 97 | in = inbuf; |
100 | if (copy_from_user(inbuf, (const unsigned char __user *) buf, | 98 | if (copy_from_user(inbuf, (const unsigned char __user *) buf, |
101 | numin)) { | 99 | numin)) { |
102 | strncpy(inbuf, "<FAULT>", sizeof inbuf); | 100 | gig_dbg(level, "%s (%u bytes) - copy_from_user failed", |
103 | numin = sizeof "<FAULT>" - 1; | 101 | msg, (unsigned) len); |
102 | return; | ||
104 | } | 103 | } |
105 | } | 104 | } |
106 | 105 | ||
107 | for (; numin && space; --numin, ++in) { | 106 | while (numin-- > 0) { |
108 | --space; | 107 | c = *buf++; |
109 | if (*in >= 32) | 108 | if (c == '~' || c == '^' || c == '\\') { |
110 | *out++ = *in; | 109 | if (space-- <= 0) |
111 | else { | 110 | break; |
111 | *out++ = '\\'; | ||
112 | } | ||
113 | if (c & 0x80) { | ||
114 | if (space-- <= 0) | ||
115 | break; | ||
116 | *out++ = '~'; | ||
117 | c ^= 0x80; | ||
118 | } | ||
119 | if (c < 0x20 || c == 0x7f) { | ||
120 | if (space-- <= 0) | ||
121 | break; | ||
112 | *out++ = '^'; | 122 | *out++ = '^'; |
113 | if (space) { | 123 | c ^= 0x40; |
114 | *out++ = '@' + *in; | ||
115 | --space; | ||
116 | } | ||
117 | } | 124 | } |
125 | if (space-- <= 0) | ||
126 | break; | ||
127 | *out++ = c; | ||
118 | } | 128 | } |
119 | *out = 0; | 129 | *out = 0; |
120 | 130 | ||
121 | dbg(level, "%s (%u bytes): %s", msg, (unsigned) len, outbuf); | 131 | gig_dbg(level, "%s (%u bytes): %s", msg, (unsigned) len, outbuf); |
122 | } | 132 | } |
123 | EXPORT_SYMBOL_GPL(gigaset_dbg_buffer); | 133 | EXPORT_SYMBOL_GPL(gigaset_dbg_buffer); |
124 | 134 | ||
@@ -171,7 +181,7 @@ int gigaset_enterconfigmode(struct cardstate *cs) | |||
171 | return 0; | 181 | return 0; |
172 | 182 | ||
173 | error: | 183 | error: |
174 | err("error %d on setuartbits!\n", -r); | 184 | dev_err(cs->dev, "error %d on setuartbits\n", -r); |
175 | cs->control_state = TIOCM_RTS|TIOCM_DTR; // FIXME is this a good value? | 185 | cs->control_state = TIOCM_RTS|TIOCM_DTR; // FIXME is this a good value? |
176 | cs->ops->set_modem_ctrl(cs, 0, TIOCM_RTS|TIOCM_DTR); | 186 | cs->ops->set_modem_ctrl(cs, 0, TIOCM_RTS|TIOCM_DTR); |
177 | 187 | ||
@@ -184,13 +194,13 @@ static int test_timeout(struct at_state_t *at_state) | |||
184 | return 0; | 194 | return 0; |
185 | 195 | ||
186 | if (--at_state->timer_expires) { | 196 | if (--at_state->timer_expires) { |
187 | dbg(DEBUG_MCMD, "decreased timer of %p to %lu", | 197 | gig_dbg(DEBUG_MCMD, "decreased timer of %p to %lu", |
188 | at_state, at_state->timer_expires); | 198 | at_state, at_state->timer_expires); |
189 | return 0; | 199 | return 0; |
190 | } | 200 | } |
191 | 201 | ||
192 | if (!gigaset_add_event(at_state->cs, at_state, EV_TIMEOUT, NULL, | 202 | if (!gigaset_add_event(at_state->cs, at_state, EV_TIMEOUT, NULL, |
193 | atomic_read(&at_state->timer_index), NULL)) { | 203 | atomic_read(&at_state->timer_index), NULL)) { |
194 | //FIXME what should we do? | 204 | //FIXME what should we do? |
195 | } | 205 | } |
196 | 206 | ||
@@ -221,7 +231,7 @@ static void timer_tick(unsigned long data) | |||
221 | if (atomic_read(&cs->running)) { | 231 | if (atomic_read(&cs->running)) { |
222 | mod_timer(&cs->timer, jiffies + msecs_to_jiffies(GIG_TICK)); | 232 | mod_timer(&cs->timer, jiffies + msecs_to_jiffies(GIG_TICK)); |
223 | if (timeout) { | 233 | if (timeout) { |
224 | dbg(DEBUG_CMD, "scheduling timeout"); | 234 | gig_dbg(DEBUG_CMD, "scheduling timeout"); |
225 | tasklet_schedule(&cs->event_tasklet); | 235 | tasklet_schedule(&cs->event_tasklet); |
226 | } | 236 | } |
227 | } | 237 | } |
@@ -235,13 +245,14 @@ int gigaset_get_channel(struct bc_state *bcs) | |||
235 | 245 | ||
236 | spin_lock_irqsave(&bcs->cs->lock, flags); | 246 | spin_lock_irqsave(&bcs->cs->lock, flags); |
237 | if (bcs->use_count) { | 247 | if (bcs->use_count) { |
238 | dbg(DEBUG_ANY, "could not allocate channel %d", bcs->channel); | 248 | gig_dbg(DEBUG_ANY, "could not allocate channel %d", |
249 | bcs->channel); | ||
239 | spin_unlock_irqrestore(&bcs->cs->lock, flags); | 250 | spin_unlock_irqrestore(&bcs->cs->lock, flags); |
240 | return 0; | 251 | return 0; |
241 | } | 252 | } |
242 | ++bcs->use_count; | 253 | ++bcs->use_count; |
243 | bcs->busy = 1; | 254 | bcs->busy = 1; |
244 | dbg(DEBUG_ANY, "allocated channel %d", bcs->channel); | 255 | gig_dbg(DEBUG_ANY, "allocated channel %d", bcs->channel); |
245 | spin_unlock_irqrestore(&bcs->cs->lock, flags); | 256 | spin_unlock_irqrestore(&bcs->cs->lock, flags); |
246 | return 1; | 257 | return 1; |
247 | } | 258 | } |
@@ -252,13 +263,13 @@ void gigaset_free_channel(struct bc_state *bcs) | |||
252 | 263 | ||
253 | spin_lock_irqsave(&bcs->cs->lock, flags); | 264 | spin_lock_irqsave(&bcs->cs->lock, flags); |
254 | if (!bcs->busy) { | 265 | if (!bcs->busy) { |
255 | dbg(DEBUG_ANY, "could not free channel %d", bcs->channel); | 266 | gig_dbg(DEBUG_ANY, "could not free channel %d", bcs->channel); |
256 | spin_unlock_irqrestore(&bcs->cs->lock, flags); | 267 | spin_unlock_irqrestore(&bcs->cs->lock, flags); |
257 | return; | 268 | return; |
258 | } | 269 | } |
259 | --bcs->use_count; | 270 | --bcs->use_count; |
260 | bcs->busy = 0; | 271 | bcs->busy = 0; |
261 | dbg(DEBUG_ANY, "freed channel %d", bcs->channel); | 272 | gig_dbg(DEBUG_ANY, "freed channel %d", bcs->channel); |
262 | spin_unlock_irqrestore(&bcs->cs->lock, flags); | 273 | spin_unlock_irqrestore(&bcs->cs->lock, flags); |
263 | } | 274 | } |
264 | 275 | ||
@@ -271,14 +282,14 @@ int gigaset_get_channels(struct cardstate *cs) | |||
271 | for (i = 0; i < cs->channels; ++i) | 282 | for (i = 0; i < cs->channels; ++i) |
272 | if (cs->bcs[i].use_count) { | 283 | if (cs->bcs[i].use_count) { |
273 | spin_unlock_irqrestore(&cs->lock, flags); | 284 | spin_unlock_irqrestore(&cs->lock, flags); |
274 | dbg(DEBUG_ANY, "could not allocated all channels"); | 285 | gig_dbg(DEBUG_ANY, "could not allocate all channels"); |
275 | return 0; | 286 | return 0; |
276 | } | 287 | } |
277 | for (i = 0; i < cs->channels; ++i) | 288 | for (i = 0; i < cs->channels; ++i) |
278 | ++cs->bcs[i].use_count; | 289 | ++cs->bcs[i].use_count; |
279 | spin_unlock_irqrestore(&cs->lock, flags); | 290 | spin_unlock_irqrestore(&cs->lock, flags); |
280 | 291 | ||
281 | dbg(DEBUG_ANY, "allocated all channels"); | 292 | gig_dbg(DEBUG_ANY, "allocated all channels"); |
282 | 293 | ||
283 | return 1; | 294 | return 1; |
284 | } | 295 | } |
@@ -288,7 +299,7 @@ void gigaset_free_channels(struct cardstate *cs) | |||
288 | unsigned long flags; | 299 | unsigned long flags; |
289 | int i; | 300 | int i; |
290 | 301 | ||
291 | dbg(DEBUG_ANY, "unblocking all channels"); | 302 | gig_dbg(DEBUG_ANY, "unblocking all channels"); |
292 | spin_lock_irqsave(&cs->lock, flags); | 303 | spin_lock_irqsave(&cs->lock, flags); |
293 | for (i = 0; i < cs->channels; ++i) | 304 | for (i = 0; i < cs->channels; ++i) |
294 | --cs->bcs[i].use_count; | 305 | --cs->bcs[i].use_count; |
@@ -300,7 +311,7 @@ void gigaset_block_channels(struct cardstate *cs) | |||
300 | unsigned long flags; | 311 | unsigned long flags; |
301 | int i; | 312 | int i; |
302 | 313 | ||
303 | dbg(DEBUG_ANY, "blocking all channels"); | 314 | gig_dbg(DEBUG_ANY, "blocking all channels"); |
304 | spin_lock_irqsave(&cs->lock, flags); | 315 | spin_lock_irqsave(&cs->lock, flags); |
305 | for (i = 0; i < cs->channels; ++i) | 316 | for (i = 0; i < cs->channels; ++i) |
306 | ++cs->bcs[i].use_count; | 317 | ++cs->bcs[i].use_count; |
@@ -328,8 +339,8 @@ static void clear_events(struct cardstate *cs) | |||
328 | } | 339 | } |
329 | 340 | ||
330 | struct event_t *gigaset_add_event(struct cardstate *cs, | 341 | struct event_t *gigaset_add_event(struct cardstate *cs, |
331 | struct at_state_t *at_state, int type, | 342 | struct at_state_t *at_state, int type, |
332 | void *ptr, int parameter, void *arg) | 343 | void *ptr, int parameter, void *arg) |
333 | { | 344 | { |
334 | unsigned long flags; | 345 | unsigned long flags; |
335 | unsigned next, tail; | 346 | unsigned next, tail; |
@@ -388,14 +399,14 @@ static void gigaset_freebcs(struct bc_state *bcs) | |||
388 | { | 399 | { |
389 | int i; | 400 | int i; |
390 | 401 | ||
391 | dbg(DEBUG_INIT, "freeing bcs[%d]->hw", bcs->channel); | 402 | gig_dbg(DEBUG_INIT, "freeing bcs[%d]->hw", bcs->channel); |
392 | if (!bcs->cs->ops->freebcshw(bcs)) { | 403 | if (!bcs->cs->ops->freebcshw(bcs)) { |
393 | dbg(DEBUG_INIT, "failed"); | 404 | gig_dbg(DEBUG_INIT, "failed"); |
394 | } | 405 | } |
395 | 406 | ||
396 | dbg(DEBUG_INIT, "clearing bcs[%d]->at_state", bcs->channel); | 407 | gig_dbg(DEBUG_INIT, "clearing bcs[%d]->at_state", bcs->channel); |
397 | clear_at_state(&bcs->at_state); | 408 | clear_at_state(&bcs->at_state); |
398 | dbg(DEBUG_INIT, "freeing bcs[%d]->skb", bcs->channel); | 409 | gig_dbg(DEBUG_INIT, "freeing bcs[%d]->skb", bcs->channel); |
399 | 410 | ||
400 | if (bcs->skb) | 411 | if (bcs->skb) |
401 | dev_kfree_skb(bcs->skb); | 412 | dev_kfree_skb(bcs->skb); |
@@ -432,7 +443,7 @@ void gigaset_freecs(struct cardstate *cs) | |||
432 | default: | 443 | default: |
433 | gigaset_if_free(cs); | 444 | gigaset_if_free(cs); |
434 | 445 | ||
435 | dbg(DEBUG_INIT, "clearing hw"); | 446 | gig_dbg(DEBUG_INIT, "clearing hw"); |
436 | cs->ops->freecshw(cs); | 447 | cs->ops->freecshw(cs); |
437 | 448 | ||
438 | //FIXME cmdbuf | 449 | //FIXME cmdbuf |
@@ -441,36 +452,36 @@ void gigaset_freecs(struct cardstate *cs) | |||
441 | case 2: /* error in initcshw */ | 452 | case 2: /* error in initcshw */ |
442 | /* Deregister from LL */ | 453 | /* Deregister from LL */ |
443 | make_invalid(cs, VALID_ID); | 454 | make_invalid(cs, VALID_ID); |
444 | dbg(DEBUG_INIT, "clearing iif"); | 455 | gig_dbg(DEBUG_INIT, "clearing iif"); |
445 | gigaset_i4l_cmd(cs, ISDN_STAT_UNLOAD); | 456 | gigaset_i4l_cmd(cs, ISDN_STAT_UNLOAD); |
446 | 457 | ||
447 | /* fall through */ | 458 | /* fall through */ |
448 | case 1: /* error when regestering to LL */ | 459 | case 1: /* error when regestering to LL */ |
449 | dbg(DEBUG_INIT, "clearing at_state"); | 460 | gig_dbg(DEBUG_INIT, "clearing at_state"); |
450 | clear_at_state(&cs->at_state); | 461 | clear_at_state(&cs->at_state); |
451 | dealloc_at_states(cs); | 462 | dealloc_at_states(cs); |
452 | 463 | ||
453 | /* fall through */ | 464 | /* fall through */ |
454 | case 0: /* error in one call to initbcs */ | 465 | case 0: /* error in one call to initbcs */ |
455 | for (i = 0; i < cs->channels; ++i) { | 466 | for (i = 0; i < cs->channels; ++i) { |
456 | dbg(DEBUG_INIT, "clearing bcs[%d]", i); | 467 | gig_dbg(DEBUG_INIT, "clearing bcs[%d]", i); |
457 | gigaset_freebcs(cs->bcs + i); | 468 | gigaset_freebcs(cs->bcs + i); |
458 | } | 469 | } |
459 | 470 | ||
460 | clear_events(cs); | 471 | clear_events(cs); |
461 | dbg(DEBUG_INIT, "freeing inbuf"); | 472 | gig_dbg(DEBUG_INIT, "freeing inbuf"); |
462 | kfree(cs->inbuf); | 473 | kfree(cs->inbuf); |
463 | } | 474 | } |
464 | f_bcs: dbg(DEBUG_INIT, "freeing bcs[]"); | 475 | f_bcs: gig_dbg(DEBUG_INIT, "freeing bcs[]"); |
465 | kfree(cs->bcs); | 476 | kfree(cs->bcs); |
466 | f_cs: dbg(DEBUG_INIT, "freeing cs"); | 477 | f_cs: gig_dbg(DEBUG_INIT, "freeing cs"); |
467 | up(&cs->sem); | 478 | up(&cs->sem); |
468 | free_cs(cs); | 479 | free_cs(cs); |
469 | } | 480 | } |
470 | EXPORT_SYMBOL_GPL(gigaset_freecs); | 481 | EXPORT_SYMBOL_GPL(gigaset_freecs); |
471 | 482 | ||
472 | void gigaset_at_init(struct at_state_t *at_state, struct bc_state *bcs, | 483 | void gigaset_at_init(struct at_state_t *at_state, struct bc_state *bcs, |
473 | struct cardstate *cs, int cid) | 484 | struct cardstate *cs, int cid) |
474 | { | 485 | { |
475 | int i; | 486 | int i; |
476 | 487 | ||
@@ -499,7 +510,7 @@ void gigaset_at_init(struct at_state_t *at_state, struct bc_state *bcs, | |||
499 | 510 | ||
500 | 511 | ||
501 | static void gigaset_inbuf_init(struct inbuf_t *inbuf, struct bc_state *bcs, | 512 | static void gigaset_inbuf_init(struct inbuf_t *inbuf, struct bc_state *bcs, |
502 | struct cardstate *cs, int inputstate) | 513 | struct cardstate *cs, int inputstate) |
503 | /* inbuf->read must be allocated before! */ | 514 | /* inbuf->read must be allocated before! */ |
504 | { | 515 | { |
505 | atomic_set(&inbuf->head, 0); | 516 | atomic_set(&inbuf->head, 0); |
@@ -512,7 +523,7 @@ static void gigaset_inbuf_init(struct inbuf_t *inbuf, struct bc_state *bcs, | |||
512 | 523 | ||
513 | /* Initialize the b-channel structure */ | 524 | /* Initialize the b-channel structure */ |
514 | static struct bc_state *gigaset_initbcs(struct bc_state *bcs, | 525 | static struct bc_state *gigaset_initbcs(struct bc_state *bcs, |
515 | struct cardstate *cs, int channel) | 526 | struct cardstate *cs, int channel) |
516 | { | 527 | { |
517 | int i; | 528 | int i; |
518 | 529 | ||
@@ -524,7 +535,7 @@ static struct bc_state *gigaset_initbcs(struct bc_state *bcs, | |||
524 | bcs->trans_down = 0; | 535 | bcs->trans_down = 0; |
525 | bcs->trans_up = 0; | 536 | bcs->trans_up = 0; |
526 | 537 | ||
527 | dbg(DEBUG_INIT, "setting up bcs[%d]->at_state", channel); | 538 | gig_dbg(DEBUG_INIT, "setting up bcs[%d]->at_state", channel); |
528 | gigaset_at_init(&bcs->at_state, bcs, cs, -1); | 539 | gigaset_at_init(&bcs->at_state, bcs, cs, -1); |
529 | 540 | ||
530 | bcs->rcvbytes = 0; | 541 | bcs->rcvbytes = 0; |
@@ -533,7 +544,7 @@ static struct bc_state *gigaset_initbcs(struct bc_state *bcs, | |||
533 | bcs->emptycount = 0; | 544 | bcs->emptycount = 0; |
534 | #endif | 545 | #endif |
535 | 546 | ||
536 | dbg(DEBUG_INIT, "allocating bcs[%d]->skb", channel); | 547 | gig_dbg(DEBUG_INIT, "allocating bcs[%d]->skb", channel); |
537 | bcs->fcs = PPP_INITFCS; | 548 | bcs->fcs = PPP_INITFCS; |
538 | bcs->inputstate = 0; | 549 | bcs->inputstate = 0; |
539 | if (cs->ignoreframes) { | 550 | if (cs->ignoreframes) { |
@@ -542,7 +553,7 @@ static struct bc_state *gigaset_initbcs(struct bc_state *bcs, | |||
542 | } else if ((bcs->skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL) | 553 | } else if ((bcs->skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL) |
543 | skb_reserve(bcs->skb, HW_HDR_LEN); | 554 | skb_reserve(bcs->skb, HW_HDR_LEN); |
544 | else { | 555 | else { |
545 | warn("could not allocate skb"); | 556 | dev_warn(cs->dev, "could not allocate skb\n"); |
546 | bcs->inputstate |= INS_skip_frame; | 557 | bcs->inputstate |= INS_skip_frame; |
547 | } | 558 | } |
548 | 559 | ||
@@ -557,13 +568,13 @@ static struct bc_state *gigaset_initbcs(struct bc_state *bcs, | |||
557 | for (i = 0; i < AT_NUM; ++i) | 568 | for (i = 0; i < AT_NUM; ++i) |
558 | bcs->commands[i] = NULL; | 569 | bcs->commands[i] = NULL; |
559 | 570 | ||
560 | dbg(DEBUG_INIT, " setting up bcs[%d]->hw", channel); | 571 | gig_dbg(DEBUG_INIT, " setting up bcs[%d]->hw", channel); |
561 | if (cs->ops->initbcshw(bcs)) | 572 | if (cs->ops->initbcshw(bcs)) |
562 | return bcs; | 573 | return bcs; |
563 | 574 | ||
564 | dbg(DEBUG_INIT, " failed"); | 575 | gig_dbg(DEBUG_INIT, " failed"); |
565 | 576 | ||
566 | dbg(DEBUG_INIT, " freeing bcs[%d]->skb", channel); | 577 | gig_dbg(DEBUG_INIT, " freeing bcs[%d]->skb", channel); |
567 | if (bcs->skb) | 578 | if (bcs->skb) |
568 | dev_kfree_skb(bcs->skb); | 579 | dev_kfree_skb(bcs->skb); |
569 | 580 | ||
@@ -575,7 +586,7 @@ static struct bc_state *gigaset_initbcs(struct bc_state *bcs, | |||
575 | * Calls hardware dependent gigaset_initcshw() function | 586 | * Calls hardware dependent gigaset_initcshw() function |
576 | * Calls B channel initialization function gigaset_initbcs() for each B channel | 587 | * Calls B channel initialization function gigaset_initbcs() for each B channel |
577 | * parameters: | 588 | * parameters: |
578 | * drv hardware driver the device belongs to | 589 | * drv hardware driver the device belongs to |
579 | * channels number of B channels supported by device | 590 | * channels number of B channels supported by device |
580 | * onechannel !=0: B channel data and AT commands share one | 591 | * onechannel !=0: B channel data and AT commands share one |
581 | * communication channel | 592 | * communication channel |
@@ -593,15 +604,15 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, | |||
593 | struct cardstate *cs = NULL; | 604 | struct cardstate *cs = NULL; |
594 | int i; | 605 | int i; |
595 | 606 | ||
596 | dbg(DEBUG_INIT, "allocating cs"); | 607 | gig_dbg(DEBUG_INIT, "allocating cs"); |
597 | cs = alloc_cs(drv); | 608 | cs = alloc_cs(drv); |
598 | if (!cs) | 609 | if (!cs) |
599 | goto error; | 610 | goto error; |
600 | dbg(DEBUG_INIT, "allocating bcs[0..%d]", channels - 1); | 611 | gig_dbg(DEBUG_INIT, "allocating bcs[0..%d]", channels - 1); |
601 | cs->bcs = kmalloc(channels * sizeof(struct bc_state), GFP_KERNEL); | 612 | cs->bcs = kmalloc(channels * sizeof(struct bc_state), GFP_KERNEL); |
602 | if (!cs->bcs) | 613 | if (!cs->bcs) |
603 | goto error; | 614 | goto error; |
604 | dbg(DEBUG_INIT, "allocating inbuf"); | 615 | gig_dbg(DEBUG_INIT, "allocating inbuf"); |
605 | cs->inbuf = kmalloc(sizeof(struct inbuf_t), GFP_KERNEL); | 616 | cs->inbuf = kmalloc(sizeof(struct inbuf_t), GFP_KERNEL); |
606 | if (!cs->inbuf) | 617 | if (!cs->inbuf) |
607 | goto error; | 618 | goto error; |
@@ -623,6 +634,7 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, | |||
623 | cs->cur_at_seq = 0; | 634 | cs->cur_at_seq = 0; |
624 | cs->gotfwver = -1; | 635 | cs->gotfwver = -1; |
625 | cs->open_count = 0; | 636 | cs->open_count = 0; |
637 | cs->dev = NULL; | ||
626 | cs->tty = NULL; | 638 | cs->tty = NULL; |
627 | atomic_set(&cs->cidmode, cidmode != 0); | 639 | atomic_set(&cs->cidmode, cidmode != 0); |
628 | 640 | ||
@@ -641,20 +653,20 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, | |||
641 | atomic_set(&cs->mstate, MS_UNINITIALIZED); | 653 | atomic_set(&cs->mstate, MS_UNINITIALIZED); |
642 | 654 | ||
643 | for (i = 0; i < channels; ++i) { | 655 | for (i = 0; i < channels; ++i) { |
644 | dbg(DEBUG_INIT, "setting up bcs[%d].read", i); | 656 | gig_dbg(DEBUG_INIT, "setting up bcs[%d].read", i); |
645 | if (!gigaset_initbcs(cs->bcs + i, cs, i)) | 657 | if (!gigaset_initbcs(cs->bcs + i, cs, i)) |
646 | goto error; | 658 | goto error; |
647 | } | 659 | } |
648 | 660 | ||
649 | ++cs->cs_init; | 661 | ++cs->cs_init; |
650 | 662 | ||
651 | dbg(DEBUG_INIT, "setting up at_state"); | 663 | gig_dbg(DEBUG_INIT, "setting up at_state"); |
652 | spin_lock_init(&cs->lock); | 664 | spin_lock_init(&cs->lock); |
653 | gigaset_at_init(&cs->at_state, NULL, cs, 0); | 665 | gigaset_at_init(&cs->at_state, NULL, cs, 0); |
654 | cs->dle = 0; | 666 | cs->dle = 0; |
655 | cs->cbytes = 0; | 667 | cs->cbytes = 0; |
656 | 668 | ||
657 | dbg(DEBUG_INIT, "setting up inbuf"); | 669 | gig_dbg(DEBUG_INIT, "setting up inbuf"); |
658 | if (onechannel) { //FIXME distinction necessary? | 670 | if (onechannel) { //FIXME distinction necessary? |
659 | gigaset_inbuf_init(cs->inbuf, cs->bcs, cs, INS_command); | 671 | gigaset_inbuf_init(cs->inbuf, cs->bcs, cs, INS_command); |
660 | } else | 672 | } else |
@@ -662,21 +674,21 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, | |||
662 | 674 | ||
663 | atomic_set(&cs->connected, 0); | 675 | atomic_set(&cs->connected, 0); |
664 | 676 | ||
665 | dbg(DEBUG_INIT, "setting up cmdbuf"); | 677 | gig_dbg(DEBUG_INIT, "setting up cmdbuf"); |
666 | cs->cmdbuf = cs->lastcmdbuf = NULL; | 678 | cs->cmdbuf = cs->lastcmdbuf = NULL; |
667 | spin_lock_init(&cs->cmdlock); | 679 | spin_lock_init(&cs->cmdlock); |
668 | cs->curlen = 0; | 680 | cs->curlen = 0; |
669 | cs->cmdbytes = 0; | 681 | cs->cmdbytes = 0; |
670 | 682 | ||
671 | dbg(DEBUG_INIT, "setting up iif"); | 683 | gig_dbg(DEBUG_INIT, "setting up iif"); |
672 | if (!gigaset_register_to_LL(cs, modulename)) { | 684 | if (!gigaset_register_to_LL(cs, modulename)) { |
673 | err("register_isdn=>error"); | 685 | err("register_isdn failed"); |
674 | goto error; | 686 | goto error; |
675 | } | 687 | } |
676 | 688 | ||
677 | make_valid(cs, VALID_ID); | 689 | make_valid(cs, VALID_ID); |
678 | ++cs->cs_init; | 690 | ++cs->cs_init; |
679 | dbg(DEBUG_INIT, "setting up hw"); | 691 | gig_dbg(DEBUG_INIT, "setting up hw"); |
680 | if (!cs->ops->initcshw(cs)) | 692 | if (!cs->ops->initcshw(cs)) |
681 | goto error; | 693 | goto error; |
682 | 694 | ||
@@ -691,13 +703,13 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, | |||
691 | * Same problem(?) with mod_timer() in timer_tick(). */ | 703 | * Same problem(?) with mod_timer() in timer_tick(). */ |
692 | add_timer(&cs->timer); | 704 | add_timer(&cs->timer); |
693 | 705 | ||
694 | dbg(DEBUG_INIT, "cs initialized!"); | 706 | gig_dbg(DEBUG_INIT, "cs initialized"); |
695 | up(&cs->sem); | 707 | up(&cs->sem); |
696 | return cs; | 708 | return cs; |
697 | 709 | ||
698 | error: if (cs) | 710 | error: if (cs) |
699 | up(&cs->sem); | 711 | up(&cs->sem); |
700 | dbg(DEBUG_INIT, "failed"); | 712 | gig_dbg(DEBUG_INIT, "failed"); |
701 | gigaset_freecs(cs); | 713 | gigaset_freecs(cs); |
702 | return NULL; | 714 | return NULL; |
703 | } | 715 | } |
@@ -719,7 +731,7 @@ void gigaset_bcs_reinit(struct bc_state *bcs) | |||
719 | bcs->at_state.ConState = 0; | 731 | bcs->at_state.ConState = 0; |
720 | bcs->at_state.timer_active = 0; | 732 | bcs->at_state.timer_active = 0; |
721 | bcs->at_state.timer_expires = 0; | 733 | bcs->at_state.timer_expires = 0; |
722 | bcs->at_state.cid = -1; /* No CID defined */ | 734 | bcs->at_state.cid = -1; /* No CID defined */ |
723 | spin_unlock_irqrestore(&cs->lock, flags); | 735 | spin_unlock_irqrestore(&cs->lock, flags); |
724 | 736 | ||
725 | bcs->inputstate = 0; | 737 | bcs->inputstate = 0; |
@@ -816,7 +828,7 @@ int gigaset_start(struct cardstate *cs) | |||
816 | goto error; | 828 | goto error; |
817 | } | 829 | } |
818 | 830 | ||
819 | dbg(DEBUG_CMD, "scheduling START"); | 831 | gig_dbg(DEBUG_CMD, "scheduling START"); |
820 | gigaset_schedule_event(cs); | 832 | gigaset_schedule_event(cs); |
821 | 833 | ||
822 | wait_event(cs->waitqueue, !cs->waiting); | 834 | wait_event(cs->waitqueue, !cs->waiting); |
@@ -841,11 +853,11 @@ void gigaset_shutdown(struct cardstate *cs) | |||
841 | goto exit; | 853 | goto exit; |
842 | } | 854 | } |
843 | 855 | ||
844 | dbg(DEBUG_CMD, "scheduling SHUTDOWN"); | 856 | gig_dbg(DEBUG_CMD, "scheduling SHUTDOWN"); |
845 | gigaset_schedule_event(cs); | 857 | gigaset_schedule_event(cs); |
846 | 858 | ||
847 | if (wait_event_interruptible(cs->waitqueue, !cs->waiting)) { | 859 | if (wait_event_interruptible(cs->waitqueue, !cs->waiting)) { |
848 | warn("aborted"); | 860 | warn("%s: aborted", __func__); |
849 | //FIXME | 861 | //FIXME |
850 | } | 862 | } |
851 | 863 | ||
@@ -879,11 +891,11 @@ void gigaset_stop(struct cardstate *cs) | |||
879 | goto exit; | 891 | goto exit; |
880 | } | 892 | } |
881 | 893 | ||
882 | dbg(DEBUG_CMD, "scheduling STOP"); | 894 | gig_dbg(DEBUG_CMD, "scheduling STOP"); |
883 | gigaset_schedule_event(cs); | 895 | gigaset_schedule_event(cs); |
884 | 896 | ||
885 | if (wait_event_interruptible(cs->waitqueue, !cs->waiting)) { | 897 | if (wait_event_interruptible(cs->waitqueue, !cs->waiting)) { |
886 | warn("aborted"); | 898 | warn("%s: aborted", __func__); |
887 | //FIXME | 899 | //FIXME |
888 | } | 900 | } |
889 | 901 | ||
@@ -937,17 +949,18 @@ void gigaset_debugdrivers(void) | |||
937 | 949 | ||
938 | spin_lock_irqsave(&driver_lock, flags); | 950 | spin_lock_irqsave(&driver_lock, flags); |
939 | list_for_each_entry(drv, &drivers, list) { | 951 | list_for_each_entry(drv, &drivers, list) { |
940 | dbg(DEBUG_DRIVER, "driver %p", drv); | 952 | gig_dbg(DEBUG_DRIVER, "driver %p", drv); |
941 | spin_lock(&drv->lock); | 953 | spin_lock(&drv->lock); |
942 | for (i = 0; i < drv->minors; ++i) { | 954 | for (i = 0; i < drv->minors; ++i) { |
943 | dbg(DEBUG_DRIVER, " index %u", i); | 955 | gig_dbg(DEBUG_DRIVER, " index %u", i); |
944 | dbg(DEBUG_DRIVER, " flags 0x%02x", drv->flags[i]); | 956 | gig_dbg(DEBUG_DRIVER, " flags 0x%02x", |
957 | drv->flags[i]); | ||
945 | cs = drv->cs + i; | 958 | cs = drv->cs + i; |
946 | dbg(DEBUG_DRIVER, " cardstate %p", cs); | 959 | gig_dbg(DEBUG_DRIVER, " cardstate %p", cs); |
947 | dbg(DEBUG_DRIVER, " minor_index %u", | 960 | gig_dbg(DEBUG_DRIVER, " minor_index %u", |
948 | cs->minor_index); | 961 | cs->minor_index); |
949 | dbg(DEBUG_DRIVER, " driver %p", cs->driver); | 962 | gig_dbg(DEBUG_DRIVER, " driver %p", cs->driver); |
950 | dbg(DEBUG_DRIVER, " i4l id %d", cs->myid); | 963 | gig_dbg(DEBUG_DRIVER, " i4l id %d", cs->myid); |
951 | } | 964 | } |
952 | spin_unlock(&drv->lock); | 965 | spin_unlock(&drv->lock); |
953 | } | 966 | } |
@@ -1005,20 +1018,20 @@ EXPORT_SYMBOL_GPL(gigaset_freedriver); | |||
1005 | /* gigaset_initdriver | 1018 | /* gigaset_initdriver |
1006 | * Allocate and initialize gigaset_driver structure. Initialize interface. | 1019 | * Allocate and initialize gigaset_driver structure. Initialize interface. |
1007 | * parameters: | 1020 | * parameters: |
1008 | * minor First minor number | 1021 | * minor First minor number |
1009 | * minors Number of minors this driver can handle | 1022 | * minors Number of minors this driver can handle |
1010 | * procname Name of the driver | 1023 | * procname Name of the driver |
1011 | * devname Name of the device files (prefix without minor number) | 1024 | * devname Name of the device files (prefix without minor number) |
1012 | * devfsname Devfs name of the device files without %d | 1025 | * devfsname Devfs name of the device files without %d |
1013 | * return value: | 1026 | * return value: |
1014 | * Pointer to the gigaset_driver structure on success, NULL on failure. | 1027 | * Pointer to the gigaset_driver structure on success, NULL on failure. |
1015 | */ | 1028 | */ |
1016 | struct gigaset_driver *gigaset_initdriver(unsigned minor, unsigned minors, | 1029 | struct gigaset_driver *gigaset_initdriver(unsigned minor, unsigned minors, |
1017 | const char *procname, | 1030 | const char *procname, |
1018 | const char *devname, | 1031 | const char *devname, |
1019 | const char *devfsname, | 1032 | const char *devfsname, |
1020 | const struct gigaset_ops *ops, | 1033 | const struct gigaset_ops *ops, |
1021 | struct module *owner) | 1034 | struct module *owner) |
1022 | { | 1035 | { |
1023 | struct gigaset_driver *drv; | 1036 | struct gigaset_driver *drv; |
1024 | unsigned long flags; | 1037 | unsigned long flags; |
diff --git a/drivers/isdn/gigaset/ev-layer.c b/drivers/isdn/gigaset/ev-layer.c index 6c1000491231..53490430a2e1 100644 --- a/drivers/isdn/gigaset/ev-layer.c +++ b/drivers/isdn/gigaset/ev-layer.c | |||
@@ -171,7 +171,7 @@ struct reply_t gigaset_tab_nocid_m10x[]= /* with dle mode */ | |||
171 | // {ACT_TIMEOUT}}, | 171 | // {ACT_TIMEOUT}}, |
172 | 172 | ||
173 | {RSP_INIT, -1, -1,SEQ_INIT, 100, INIT_TIMEOUT, | 173 | {RSP_INIT, -1, -1,SEQ_INIT, 100, INIT_TIMEOUT, |
174 | {ACT_TIMEOUT}}, /* wait until device is ready */ | 174 | {ACT_TIMEOUT}}, /* wait until device is ready */ |
175 | 175 | ||
176 | {EV_TIMEOUT, 100,100, -1, 101, 3, {0}, "Z\r"}, /* device in transparent mode? try to initialize it. */ | 176 | {EV_TIMEOUT, 100,100, -1, 101, 3, {0}, "Z\r"}, /* device in transparent mode? try to initialize it. */ |
177 | {RSP_OK, 101,103, -1, 120, 5, {ACT_GETSTRING}, "+GMR\r"}, /* get version */ | 177 | {RSP_OK, 101,103, -1, 120, 5, {ACT_GETSTRING}, "+GMR\r"}, /* get version */ |
@@ -186,8 +186,8 @@ struct reply_t gigaset_tab_nocid_m10x[]= /* with dle mode */ | |||
186 | {RSP_ERROR, 108,108, -1, 0, 0, {ACT_FAILINIT}}, | 186 | {RSP_ERROR, 108,108, -1, 0, 0, {ACT_FAILINIT}}, |
187 | 187 | ||
188 | {EV_TIMEOUT, 108,108, -1, 105, 2, {ACT_SETDLE0, | 188 | {EV_TIMEOUT, 108,108, -1, 105, 2, {ACT_SETDLE0, |
189 | ACT_HUPMODEM, | 189 | ACT_HUPMODEM, |
190 | ACT_TIMEOUT}}, /* still timeout => connection in unimodem mode? */ | 190 | ACT_TIMEOUT}}, /* still timeout => connection in unimodem mode? */ |
191 | {EV_TIMEOUT, 105,105, -1, 103, 5, {0}, "Z\r"}, | 191 | {EV_TIMEOUT, 105,105, -1, 103, 5, {0}, "Z\r"}, |
192 | 192 | ||
193 | {RSP_ERROR, 102,102, -1, 107, 5, {0}, "^GETPRE\r"}, /* ERROR on ATZ => maybe in config mode? */ | 193 | {RSP_ERROR, 102,102, -1, 107, 5, {0}, "^GETPRE\r"}, /* ERROR on ATZ => maybe in config mode? */ |
@@ -444,7 +444,7 @@ static int isdn_getnum(char *p) | |||
444 | 444 | ||
445 | IFNULLRETVAL(p, -1); | 445 | IFNULLRETVAL(p, -1); |
446 | 446 | ||
447 | dbg(DEBUG_TRANSCMD, "string: %s", p); | 447 | gig_dbg(DEBUG_TRANSCMD, "string: %s", p); |
448 | 448 | ||
449 | while (*p >= '0' && *p <= '9') | 449 | while (*p >= '0' && *p <= '9') |
450 | v = ((v < 0) ? 0 : (v * 10)) + (int) ((*p++) - '0'); | 450 | v = ((v < 0) ? 0 : (v * 10)) + (int) ((*p++) - '0'); |
@@ -463,7 +463,7 @@ static int isdn_gethex(char *p) | |||
463 | 463 | ||
464 | IFNULLRETVAL(p, -1); | 464 | IFNULLRETVAL(p, -1); |
465 | 465 | ||
466 | dbg(DEBUG_TRANSCMD, "string: %s", p); | 466 | gig_dbg(DEBUG_TRANSCMD, "string: %s", p); |
467 | 467 | ||
468 | if (!*p) | 468 | if (!*p) |
469 | return -1; | 469 | return -1; |
@@ -537,11 +537,11 @@ void gigaset_handle_modem_response(struct cardstate *cs) | |||
537 | len = cs->cbytes; | 537 | len = cs->cbytes; |
538 | if (!len) { | 538 | if (!len) { |
539 | /* ignore additional LFs/CRs (M10x config mode or cx100) */ | 539 | /* ignore additional LFs/CRs (M10x config mode or cx100) */ |
540 | dbg(DEBUG_MCMD, "skipped EOL [%02X]", cs->respdata[len]); | 540 | gig_dbg(DEBUG_MCMD, "skipped EOL [%02X]", cs->respdata[len]); |
541 | return; | 541 | return; |
542 | } | 542 | } |
543 | cs->respdata[len] = 0; | 543 | cs->respdata[len] = 0; |
544 | dbg(DEBUG_TRANSCMD, "raw string: '%s'", cs->respdata); | 544 | gig_dbg(DEBUG_TRANSCMD, "raw string: '%s'", cs->respdata); |
545 | argv[0] = cs->respdata; | 545 | argv[0] = cs->respdata; |
546 | params = 1; | 546 | params = 1; |
547 | if (cs->at_state.getstring) { | 547 | if (cs->at_state.getstring) { |
@@ -557,7 +557,8 @@ void gigaset_handle_modem_response(struct cardstate *cs) | |||
557 | case ',': | 557 | case ',': |
558 | case '=': | 558 | case '=': |
559 | if (params > MAX_REC_PARAMS) { | 559 | if (params > MAX_REC_PARAMS) { |
560 | warn("too many parameters in response"); | 560 | dev_warn(cs->dev, |
561 | "too many parameters in response\n"); | ||
561 | /* need last parameter (might be CID) */ | 562 | /* need last parameter (might be CID) */ |
562 | params--; | 563 | params--; |
563 | } | 564 | } |
@@ -568,21 +569,21 @@ void gigaset_handle_modem_response(struct cardstate *cs) | |||
568 | cid = params > 1 ? cid_of_response(argv[params-1]) : 0; | 569 | cid = params > 1 ? cid_of_response(argv[params-1]) : 0; |
569 | if (cid < 0) { | 570 | if (cid < 0) { |
570 | gigaset_add_event(cs, &cs->at_state, RSP_INVAL, | 571 | gigaset_add_event(cs, &cs->at_state, RSP_INVAL, |
571 | NULL, 0, NULL); | 572 | NULL, 0, NULL); |
572 | return; | 573 | return; |
573 | } | 574 | } |
574 | 575 | ||
575 | for (j = 1; j < params; ++j) | 576 | for (j = 1; j < params; ++j) |
576 | argv[j][-1] = 0; | 577 | argv[j][-1] = 0; |
577 | 578 | ||
578 | dbg(DEBUG_TRANSCMD, "CMD received: %s", argv[0]); | 579 | gig_dbg(DEBUG_TRANSCMD, "CMD received: %s", argv[0]); |
579 | if (cid) { | 580 | if (cid) { |
580 | --params; | 581 | --params; |
581 | dbg(DEBUG_TRANSCMD, "CID: %s", argv[params]); | 582 | gig_dbg(DEBUG_TRANSCMD, "CID: %s", argv[params]); |
582 | } | 583 | } |
583 | dbg(DEBUG_TRANSCMD, "available params: %d", params - 1); | 584 | gig_dbg(DEBUG_TRANSCMD, "available params: %d", params - 1); |
584 | for (j = 1; j < params; j++) | 585 | for (j = 1; j < params; j++) |
585 | dbg(DEBUG_TRANSCMD, "param %d: %s", j, argv[j]); | 586 | gig_dbg(DEBUG_TRANSCMD, "param %d: %s", j, argv[j]); |
586 | } | 587 | } |
587 | 588 | ||
588 | spin_lock_irqsave(&cs->ev_lock, flags); | 589 | spin_lock_irqsave(&cs->ev_lock, flags); |
@@ -594,7 +595,7 @@ void gigaset_handle_modem_response(struct cardstate *cs) | |||
594 | while (curarg < params) { | 595 | while (curarg < params) { |
595 | next = (tail + 1) % MAX_EVENTS; | 596 | next = (tail + 1) % MAX_EVENTS; |
596 | if (unlikely(next == head)) { | 597 | if (unlikely(next == head)) { |
597 | err("event queue full"); | 598 | dev_err(cs->dev, "event queue full\n"); |
598 | break; | 599 | break; |
599 | } | 600 | } |
600 | 601 | ||
@@ -615,8 +616,9 @@ void gigaset_handle_modem_response(struct cardstate *cs) | |||
615 | 616 | ||
616 | if (!rt->response) { | 617 | if (!rt->response) { |
617 | event->type = RSP_UNKNOWN; | 618 | event->type = RSP_UNKNOWN; |
618 | warn("unknown modem response: %s", | 619 | dev_warn(cs->dev, |
619 | argv[curarg]); | 620 | "unknown modem response: %s\n", |
621 | argv[curarg]); | ||
620 | break; | 622 | break; |
621 | } | 623 | } |
622 | 624 | ||
@@ -632,7 +634,8 @@ void gigaset_handle_modem_response(struct cardstate *cs) | |||
632 | break; | 634 | break; |
633 | case RT_RING: | 635 | case RT_RING: |
634 | if (!cid) { | 636 | if (!cid) { |
635 | err("received RING without CID!"); | 637 | dev_err(cs->dev, |
638 | "received RING without CID!\n"); | ||
636 | event->type = RSP_INVAL; | 639 | event->type = RSP_INVAL; |
637 | abort = 1; | 640 | abort = 1; |
638 | } else { | 641 | } else { |
@@ -660,27 +663,25 @@ void gigaset_handle_modem_response(struct cardstate *cs) | |||
660 | event->parameter = ZSAU_DISCONNECT_REQ; | 663 | event->parameter = ZSAU_DISCONNECT_REQ; |
661 | else { | 664 | else { |
662 | event->parameter = ZSAU_UNKNOWN; | 665 | event->parameter = ZSAU_UNKNOWN; |
663 | warn("%s: unknown parameter %s after ZSAU", | 666 | dev_warn(cs->dev, |
664 | __func__, argv[curarg]); | 667 | "%s: unknown parameter %s after ZSAU\n", |
668 | __func__, argv[curarg]); | ||
665 | } | 669 | } |
666 | ++curarg; | 670 | ++curarg; |
667 | break; | 671 | break; |
668 | case RT_STRING: | 672 | case RT_STRING: |
669 | if (curarg < params) { | 673 | if (curarg < params) { |
670 | len = strlen(argv[curarg]) + 1; | 674 | event->ptr = kstrdup(argv[curarg], GFP_ATOMIC); |
671 | event->ptr = kmalloc(len, GFP_ATOMIC); | 675 | if (!event->ptr) |
672 | if (event->ptr) | 676 | dev_err(cs->dev, "out of memory\n"); |
673 | memcpy(event->ptr, argv[curarg], len); | ||
674 | else | ||
675 | err("no memory for string!"); | ||
676 | ++curarg; | 677 | ++curarg; |
677 | } | 678 | } |
678 | #ifdef CONFIG_GIGASET_DEBUG | 679 | #ifdef CONFIG_GIGASET_DEBUG |
679 | if (!event->ptr) | 680 | if (!event->ptr) |
680 | dbg(DEBUG_CMD, "string==NULL"); | 681 | gig_dbg(DEBUG_CMD, "string==NULL"); |
681 | else | 682 | else |
682 | dbg(DEBUG_CMD, | 683 | gig_dbg(DEBUG_CMD, "string==%s", |
683 | "string==%s", (char *) event->ptr); | 684 | (char *) event->ptr); |
684 | #endif | 685 | #endif |
685 | break; | 686 | break; |
686 | case RT_ZCAU: | 687 | case RT_ZCAU: |
@@ -690,7 +691,7 @@ void gigaset_handle_modem_response(struct cardstate *cs) | |||
690 | j = isdn_gethex(argv[curarg + 1]); | 691 | j = isdn_gethex(argv[curarg + 1]); |
691 | if (i >= 0 && i < 256 && j >= 0 && j < 256) | 692 | if (i >= 0 && i < 256 && j >= 0 && j < 256) |
692 | event->parameter = (unsigned) i << 8 | 693 | event->parameter = (unsigned) i << 8 |
693 | | j; | 694 | | j; |
694 | curarg += 2; | 695 | curarg += 2; |
695 | } else | 696 | } else |
696 | curarg = params - 1; | 697 | curarg = params - 1; |
@@ -708,7 +709,7 @@ void gigaset_handle_modem_response(struct cardstate *cs) | |||
708 | } else | 709 | } else |
709 | event->parameter = -1; | 710 | event->parameter = -1; |
710 | #ifdef CONFIG_GIGASET_DEBUG | 711 | #ifdef CONFIG_GIGASET_DEBUG |
711 | dbg(DEBUG_CMD, "parameter==%d", event->parameter); | 712 | gig_dbg(DEBUG_CMD, "parameter==%d", event->parameter); |
712 | #endif | 713 | #endif |
713 | break; | 714 | break; |
714 | } | 715 | } |
@@ -724,8 +725,9 @@ void gigaset_handle_modem_response(struct cardstate *cs) | |||
724 | spin_unlock_irqrestore(&cs->ev_lock, flags); | 725 | spin_unlock_irqrestore(&cs->ev_lock, flags); |
725 | 726 | ||
726 | if (curarg != params) | 727 | if (curarg != params) |
727 | dbg(DEBUG_ANY, "invalid number of processed parameters: %d/%d", | 728 | gig_dbg(DEBUG_ANY, |
728 | curarg, params); | 729 | "invalid number of processed parameters: %d/%d", |
730 | curarg, params); | ||
729 | } | 731 | } |
730 | EXPORT_SYMBOL_GPL(gigaset_handle_modem_response); | 732 | EXPORT_SYMBOL_GPL(gigaset_handle_modem_response); |
731 | 733 | ||
@@ -750,7 +752,7 @@ static void disconnect(struct at_state_t **at_state_p) | |||
750 | if (!atomic_read(&cs->cidmode)) { | 752 | if (!atomic_read(&cs->cidmode)) { |
751 | cs->at_state.pending_commands |= PC_UMMODE; | 753 | cs->at_state.pending_commands |= PC_UMMODE; |
752 | atomic_set(&cs->commands_pending, 1); //FIXME | 754 | atomic_set(&cs->commands_pending, 1); //FIXME |
753 | dbg(DEBUG_CMD, "Scheduling PC_UMMODE"); | 755 | gig_dbg(DEBUG_CMD, "Scheduling PC_UMMODE"); |
754 | } | 756 | } |
755 | 757 | ||
756 | if (bcs) { | 758 | if (bcs) { |
@@ -773,7 +775,7 @@ static void disconnect(struct at_state_t **at_state_p) | |||
773 | * The structure should be freed by calling disconnect() after use. | 775 | * The structure should be freed by calling disconnect() after use. |
774 | */ | 776 | */ |
775 | static inline struct at_state_t *get_free_channel(struct cardstate *cs, | 777 | static inline struct at_state_t *get_free_channel(struct cardstate *cs, |
776 | int cid) | 778 | int cid) |
777 | /* cids: >0: siemens-cid | 779 | /* cids: >0: siemens-cid |
778 | 0: without cid | 780 | 0: without cid |
779 | -1: no cid assigned yet | 781 | -1: no cid assigned yet |
@@ -822,7 +824,7 @@ static void init_failed(struct cardstate *cs, int mode) | |||
822 | static void schedule_init(struct cardstate *cs, int state) | 824 | static void schedule_init(struct cardstate *cs, int state) |
823 | { | 825 | { |
824 | if (cs->at_state.pending_commands & PC_INIT) { | 826 | if (cs->at_state.pending_commands & PC_INIT) { |
825 | dbg(DEBUG_CMD, "not scheduling PC_INIT again"); | 827 | gig_dbg(DEBUG_CMD, "not scheduling PC_INIT again"); |
826 | return; | 828 | return; |
827 | } | 829 | } |
828 | atomic_set(&cs->mstate, state); | 830 | atomic_set(&cs->mstate, state); |
@@ -830,53 +832,56 @@ static void schedule_init(struct cardstate *cs, int state) | |||
830 | gigaset_block_channels(cs); | 832 | gigaset_block_channels(cs); |
831 | cs->at_state.pending_commands |= PC_INIT; | 833 | cs->at_state.pending_commands |= PC_INIT; |
832 | atomic_set(&cs->commands_pending, 1); | 834 | atomic_set(&cs->commands_pending, 1); |
833 | dbg(DEBUG_CMD, "Scheduling PC_INIT"); | 835 | gig_dbg(DEBUG_CMD, "Scheduling PC_INIT"); |
834 | } | 836 | } |
835 | 837 | ||
836 | /* Add "AT" to a command, add the cid, dle encode it, send the result to the | 838 | /* Add "AT" to a command, add the cid, dle encode it, send the result to the |
837 | hardware. */ | 839 | hardware. */ |
838 | static void send_command(struct cardstate *cs, const char *cmd, int cid, | 840 | static void send_command(struct cardstate *cs, const char *cmd, int cid, |
839 | int dle, gfp_t kmallocflags) | 841 | int dle, gfp_t kmallocflags) |
840 | { | 842 | { |
841 | size_t cmdlen, buflen; | 843 | size_t cmdlen, buflen; |
842 | char *cmdpos, *cmdbuf, *cmdtail; | 844 | char *cmdpos, *cmdbuf, *cmdtail; |
843 | 845 | ||
844 | cmdlen = strlen(cmd); | 846 | cmdlen = strlen(cmd); |
845 | buflen = 11 + cmdlen; | 847 | buflen = 11 + cmdlen; |
848 | if (unlikely(buflen <= cmdlen)) { | ||
849 | dev_err(cs->dev, "integer overflow in buflen\n"); | ||
850 | return; | ||
851 | } | ||
846 | 852 | ||
847 | if (likely(buflen > cmdlen)) { | 853 | cmdbuf = kmalloc(buflen, kmallocflags); |
848 | cmdbuf = kmalloc(buflen, kmallocflags); | 854 | if (unlikely(!cmdbuf)) { |
849 | if (likely(cmdbuf != NULL)) { | 855 | dev_err(cs->dev, "out of memory\n"); |
850 | cmdpos = cmdbuf + 9; | 856 | return; |
851 | cmdtail = cmdpos + cmdlen; | 857 | } |
852 | memcpy(cmdpos, cmd, cmdlen); | ||
853 | |||
854 | if (cid > 0 && cid <= 65535) { | ||
855 | do { | ||
856 | *--cmdpos = '0' + cid % 10; | ||
857 | cid /= 10; | ||
858 | ++cmdlen; | ||
859 | } while (cid); | ||
860 | } | ||
861 | 858 | ||
862 | cmdlen += 2; | 859 | cmdpos = cmdbuf + 9; |
863 | *--cmdpos = 'T'; | 860 | cmdtail = cmdpos + cmdlen; |
864 | *--cmdpos = 'A'; | 861 | memcpy(cmdpos, cmd, cmdlen); |
865 | 862 | ||
866 | if (dle) { | 863 | if (cid > 0 && cid <= 65535) { |
867 | cmdlen += 4; | 864 | do { |
868 | *--cmdpos = '('; | 865 | *--cmdpos = '0' + cid % 10; |
869 | *--cmdpos = 0x10; | 866 | cid /= 10; |
870 | *cmdtail++ = 0x10; | 867 | ++cmdlen; |
871 | *cmdtail++ = ')'; | 868 | } while (cid); |
872 | } | 869 | } |
873 | 870 | ||
874 | cs->ops->write_cmd(cs, cmdpos, cmdlen, NULL); | 871 | cmdlen += 2; |
875 | kfree(cmdbuf); | 872 | *--cmdpos = 'T'; |
876 | } else | 873 | *--cmdpos = 'A'; |
877 | err("no memory for command buffer"); | 874 | |
878 | } else | 875 | if (dle) { |
879 | err("overflow in buflen"); | 876 | cmdlen += 4; |
877 | *--cmdpos = '('; | ||
878 | *--cmdpos = 0x10; | ||
879 | *cmdtail++ = 0x10; | ||
880 | *cmdtail++ = ')'; | ||
881 | } | ||
882 | |||
883 | cs->ops->write_cmd(cs, cmdpos, cmdlen, NULL); | ||
884 | kfree(cmdbuf); | ||
880 | } | 885 | } |
881 | 886 | ||
882 | static struct at_state_t *at_state_from_cid(struct cardstate *cs, int cid) | 887 | static struct at_state_t *at_state_from_cid(struct cardstate *cs, int cid) |
@@ -930,13 +935,14 @@ static void bchannel_up(struct bc_state *bcs) | |||
930 | IFNULLRET(bcs); | 935 | IFNULLRET(bcs); |
931 | 936 | ||
932 | if (!(bcs->chstate & CHS_D_UP)) { | 937 | if (!(bcs->chstate & CHS_D_UP)) { |
933 | notice("%s: D channel not up", __func__); | 938 | dev_notice(bcs->cs->dev, "%s: D channel not up\n", __func__); |
934 | bcs->chstate |= CHS_D_UP; | 939 | bcs->chstate |= CHS_D_UP; |
935 | gigaset_i4l_channel_cmd(bcs, ISDN_STAT_DCONN); | 940 | gigaset_i4l_channel_cmd(bcs, ISDN_STAT_DCONN); |
936 | } | 941 | } |
937 | 942 | ||
938 | if (bcs->chstate & CHS_B_UP) { | 943 | if (bcs->chstate & CHS_B_UP) { |
939 | notice("%s: B channel already up", __func__); | 944 | dev_notice(bcs->cs->dev, "%s: B channel already up\n", |
945 | __func__); | ||
940 | return; | 946 | return; |
941 | } | 947 | } |
942 | 948 | ||
@@ -962,13 +968,13 @@ static void start_dial(struct at_state_t *at_state, void *data, int seq_index) | |||
962 | 968 | ||
963 | 969 | ||
964 | at_state->pending_commands |= PC_CID; | 970 | at_state->pending_commands |= PC_CID; |
965 | dbg(DEBUG_CMD, "Scheduling PC_CID"); | 971 | gig_dbg(DEBUG_CMD, "Scheduling PC_CID"); |
966 | atomic_set(&cs->commands_pending, 1); | 972 | atomic_set(&cs->commands_pending, 1); |
967 | return; | 973 | return; |
968 | 974 | ||
969 | error: | 975 | error: |
970 | at_state->pending_commands |= PC_NOCID; | 976 | at_state->pending_commands |= PC_NOCID; |
971 | dbg(DEBUG_CMD, "Scheduling PC_NOCID"); | 977 | gig_dbg(DEBUG_CMD, "Scheduling PC_NOCID"); |
972 | atomic_set(&cs->commands_pending, 1); | 978 | atomic_set(&cs->commands_pending, 1); |
973 | return; | 979 | return; |
974 | } | 980 | } |
@@ -982,12 +988,12 @@ static void start_accept(struct at_state_t *at_state) | |||
982 | 988 | ||
983 | if (retval == 0) { | 989 | if (retval == 0) { |
984 | at_state->pending_commands |= PC_ACCEPT; | 990 | at_state->pending_commands |= PC_ACCEPT; |
985 | dbg(DEBUG_CMD, "Scheduling PC_ACCEPT"); | 991 | gig_dbg(DEBUG_CMD, "Scheduling PC_ACCEPT"); |
986 | atomic_set(&cs->commands_pending, 1); | 992 | atomic_set(&cs->commands_pending, 1); |
987 | } else { | 993 | } else { |
988 | //FIXME | 994 | //FIXME |
989 | at_state->pending_commands |= PC_HUP; | 995 | at_state->pending_commands |= PC_HUP; |
990 | dbg(DEBUG_CMD, "Scheduling PC_HUP"); | 996 | gig_dbg(DEBUG_CMD, "Scheduling PC_HUP"); |
991 | atomic_set(&cs->commands_pending, 1); | 997 | atomic_set(&cs->commands_pending, 1); |
992 | } | 998 | } |
993 | } | 999 | } |
@@ -1000,8 +1006,8 @@ static void do_start(struct cardstate *cs) | |||
1000 | schedule_init(cs, MS_INIT); | 1006 | schedule_init(cs, MS_INIT); |
1001 | 1007 | ||
1002 | gigaset_i4l_cmd(cs, ISDN_STAT_RUN); | 1008 | gigaset_i4l_cmd(cs, ISDN_STAT_RUN); |
1003 | // FIXME: not in locked mode | 1009 | // FIXME: not in locked mode |
1004 | // FIXME 2: only after init sequence | 1010 | // FIXME 2: only after init sequence |
1005 | 1011 | ||
1006 | cs->waiting = 0; | 1012 | cs->waiting = 0; |
1007 | wake_up(&cs->waitqueue); | 1013 | wake_up(&cs->waitqueue); |
@@ -1029,7 +1035,7 @@ static void do_shutdown(struct cardstate *cs) | |||
1029 | atomic_set(&cs->mstate, MS_SHUTDOWN); | 1035 | atomic_set(&cs->mstate, MS_SHUTDOWN); |
1030 | cs->at_state.pending_commands |= PC_SHUTDOWN; | 1036 | cs->at_state.pending_commands |= PC_SHUTDOWN; |
1031 | atomic_set(&cs->commands_pending, 1); | 1037 | atomic_set(&cs->commands_pending, 1); |
1032 | dbg(DEBUG_CMD, "Scheduling PC_SHUTDOWN"); | 1038 | gig_dbg(DEBUG_CMD, "Scheduling PC_SHUTDOWN"); |
1033 | } else | 1039 | } else |
1034 | finish_shutdown(cs); | 1040 | finish_shutdown(cs); |
1035 | } | 1041 | } |
@@ -1059,9 +1065,11 @@ static int reinit_and_retry(struct cardstate *cs, int channel) | |||
1059 | return 0; | 1065 | return 0; |
1060 | 1066 | ||
1061 | if (channel < 0) | 1067 | if (channel < 0) |
1062 | warn("Could not enter cid mode. Reinit device and try again."); | 1068 | dev_warn(cs->dev, |
1069 | "Could not enter cid mode. Reinit device and try again.\n"); | ||
1063 | else { | 1070 | else { |
1064 | warn("Could not get a call id. Reinit device and try again."); | 1071 | dev_warn(cs->dev, |
1072 | "Could not get a call id. Reinit device and try again.\n"); | ||
1065 | cs->bcs[channel].at_state.pending_commands |= PC_CID; | 1073 | cs->bcs[channel].at_state.pending_commands |= PC_CID; |
1066 | } | 1074 | } |
1067 | schedule_init(cs, MS_INIT); | 1075 | schedule_init(cs, MS_INIT); |
@@ -1069,7 +1077,7 @@ static int reinit_and_retry(struct cardstate *cs, int channel) | |||
1069 | } | 1077 | } |
1070 | 1078 | ||
1071 | static int at_state_invalid(struct cardstate *cs, | 1079 | static int at_state_invalid(struct cardstate *cs, |
1072 | struct at_state_t *test_ptr) | 1080 | struct at_state_t *test_ptr) |
1073 | { | 1081 | { |
1074 | unsigned long flags; | 1082 | unsigned long flags; |
1075 | unsigned channel; | 1083 | unsigned channel; |
@@ -1106,7 +1114,7 @@ static void handle_icall(struct cardstate *cs, struct bc_state *bcs, | |||
1106 | case ICALL_ACCEPT: | 1114 | case ICALL_ACCEPT: |
1107 | break; | 1115 | break; |
1108 | default: | 1116 | default: |
1109 | err("internal error: disposition=%d", retval); | 1117 | dev_err(cs->dev, "internal error: disposition=%d\n", retval); |
1110 | /* --v-- fall through --v-- */ | 1118 | /* --v-- fall through --v-- */ |
1111 | case ICALL_IGNORE: | 1119 | case ICALL_IGNORE: |
1112 | case ICALL_REJECT: | 1120 | case ICALL_REJECT: |
@@ -1201,10 +1209,10 @@ static void do_action(int action, struct cardstate *cs, | |||
1201 | } | 1209 | } |
1202 | cs->at_state.pending_commands |= PC_CIDMODE; | 1210 | cs->at_state.pending_commands |= PC_CIDMODE; |
1203 | atomic_set(&cs->commands_pending, 1); | 1211 | atomic_set(&cs->commands_pending, 1); |
1204 | dbg(DEBUG_CMD, "Scheduling PC_CIDMODE"); | 1212 | gig_dbg(DEBUG_CMD, "Scheduling PC_CIDMODE"); |
1205 | break; | 1213 | break; |
1206 | case ACT_FAILINIT: | 1214 | case ACT_FAILINIT: |
1207 | warn("Could not initialize the device."); | 1215 | dev_warn(cs->dev, "Could not initialize the device.\n"); |
1208 | cs->dle = 0; | 1216 | cs->dle = 0; |
1209 | init_failed(cs, M_UNKNOWN); | 1217 | init_failed(cs, M_UNKNOWN); |
1210 | cs->cur_at_seq = SEQ_NONE; | 1218 | cs->cur_at_seq = SEQ_NONE; |
@@ -1260,8 +1268,8 @@ static void do_action(int action, struct cardstate *cs, | |||
1260 | /* get fresh AT state structure for new CID */ | 1268 | /* get fresh AT state structure for new CID */ |
1261 | at_state2 = get_free_channel(cs, ev->parameter); | 1269 | at_state2 = get_free_channel(cs, ev->parameter); |
1262 | if (!at_state2) { | 1270 | if (!at_state2) { |
1263 | warn("RING ignored: " | 1271 | dev_warn(cs->dev, |
1264 | "could not allocate channel structure"); | 1272 | "RING ignored: could not allocate channel structure\n"); |
1265 | break; | 1273 | break; |
1266 | } | 1274 | } |
1267 | 1275 | ||
@@ -1289,7 +1297,7 @@ static void do_action(int action, struct cardstate *cs, | |||
1289 | at_state = *p_at_state; | 1297 | at_state = *p_at_state; |
1290 | break; | 1298 | break; |
1291 | case ACT_FAILSDOWN: | 1299 | case ACT_FAILSDOWN: |
1292 | warn("Could not shut down the device."); | 1300 | dev_warn(cs->dev, "Could not shut down the device.\n"); |
1293 | /* fall through */ | 1301 | /* fall through */ |
1294 | case ACT_FAKESDOWN: | 1302 | case ACT_FAKESDOWN: |
1295 | case ACT_SDOWN: | 1303 | case ACT_SDOWN: |
@@ -1342,7 +1350,7 @@ static void do_action(int action, struct cardstate *cs, | |||
1342 | break; | 1350 | break; |
1343 | case ACT_ABORTHUP: | 1351 | case ACT_ABORTHUP: |
1344 | cs->cur_at_seq = SEQ_NONE; | 1352 | cs->cur_at_seq = SEQ_NONE; |
1345 | warn("Could not hang up."); | 1353 | dev_warn(cs->dev, "Could not hang up.\n"); |
1346 | at_state->cid = -1; | 1354 | at_state->cid = -1; |
1347 | if (bcs && cs->onechannel) | 1355 | if (bcs && cs->onechannel) |
1348 | at_state->pending_commands |= PC_DLE0; | 1356 | at_state->pending_commands |= PC_DLE0; |
@@ -1354,14 +1362,15 @@ static void do_action(int action, struct cardstate *cs, | |||
1354 | break; | 1362 | break; |
1355 | case ACT_FAILDLE0: | 1363 | case ACT_FAILDLE0: |
1356 | cs->cur_at_seq = SEQ_NONE; | 1364 | cs->cur_at_seq = SEQ_NONE; |
1357 | warn("Could not leave DLE mode."); | 1365 | dev_warn(cs->dev, "Could not leave DLE mode.\n"); |
1358 | at_state2 = &cs->bcs[cs->curchannel].at_state; | 1366 | at_state2 = &cs->bcs[cs->curchannel].at_state; |
1359 | disconnect(&at_state2); | 1367 | disconnect(&at_state2); |
1360 | schedule_init(cs, MS_RECOVER); | 1368 | schedule_init(cs, MS_RECOVER); |
1361 | break; | 1369 | break; |
1362 | case ACT_FAILDLE1: | 1370 | case ACT_FAILDLE1: |
1363 | cs->cur_at_seq = SEQ_NONE; | 1371 | cs->cur_at_seq = SEQ_NONE; |
1364 | warn("Could not enter DLE mode. Try to hang up."); | 1372 | dev_warn(cs->dev, |
1373 | "Could not enter DLE mode. Trying to hang up.\n"); | ||
1365 | channel = cs->curchannel; | 1374 | channel = cs->curchannel; |
1366 | cs->bcs[channel].at_state.pending_commands |= PC_HUP; | 1375 | cs->bcs[channel].at_state.pending_commands |= PC_HUP; |
1367 | atomic_set(&cs->commands_pending, 1); | 1376 | atomic_set(&cs->commands_pending, 1); |
@@ -1382,7 +1391,8 @@ static void do_action(int action, struct cardstate *cs, | |||
1382 | cs->cur_at_seq = SEQ_NONE; | 1391 | cs->cur_at_seq = SEQ_NONE; |
1383 | channel = cs->curchannel; | 1392 | channel = cs->curchannel; |
1384 | if (!reinit_and_retry(cs, channel)) { | 1393 | if (!reinit_and_retry(cs, channel)) { |
1385 | warn("Could not get a call id. Dialing not possible"); | 1394 | dev_warn(cs->dev, |
1395 | "Could not get a call ID. Cannot dial.\n"); | ||
1386 | at_state2 = &cs->bcs[channel].at_state; | 1396 | at_state2 = &cs->bcs[channel].at_state; |
1387 | disconnect(&at_state2); | 1397 | disconnect(&at_state2); |
1388 | } | 1398 | } |
@@ -1416,7 +1426,7 @@ static void do_action(int action, struct cardstate *cs, | |||
1416 | atomic_set(&cs->commands_pending, 1); | 1426 | atomic_set(&cs->commands_pending, 1); |
1417 | break; | 1427 | break; |
1418 | case ACT_GETSTRING: /* warning: RING, ZDLE, ... | 1428 | case ACT_GETSTRING: /* warning: RING, ZDLE, ... |
1419 | are not handled properly any more */ | 1429 | are not handled properly anymore */ |
1420 | at_state->getstring = 1; | 1430 | at_state->getstring = 1; |
1421 | break; | 1431 | break; |
1422 | case ACT_SETVER: | 1432 | case ACT_SETVER: |
@@ -1457,16 +1467,16 @@ static void do_action(int action, struct cardstate *cs, | |||
1457 | case ACT_GOTVER: | 1467 | case ACT_GOTVER: |
1458 | if (cs->gotfwver == 0) { | 1468 | if (cs->gotfwver == 0) { |
1459 | cs->gotfwver = 1; | 1469 | cs->gotfwver = 1; |
1460 | dbg(DEBUG_ANY, | 1470 | gig_dbg(DEBUG_ANY, |
1461 | "firmware version %02d.%03d.%02d.%02d", | 1471 | "firmware version %02d.%03d.%02d.%02d", |
1462 | cs->fwver[0], cs->fwver[1], | 1472 | cs->fwver[0], cs->fwver[1], |
1463 | cs->fwver[2], cs->fwver[3]); | 1473 | cs->fwver[2], cs->fwver[3]); |
1464 | break; | 1474 | break; |
1465 | } | 1475 | } |
1466 | /* fall through */ | 1476 | /* fall through */ |
1467 | case ACT_FAILVER: | 1477 | case ACT_FAILVER: |
1468 | cs->gotfwver = -1; | 1478 | cs->gotfwver = -1; |
1469 | err("could not read firmware version."); | 1479 | dev_err(cs->dev, "could not read firmware version.\n"); |
1470 | break; | 1480 | break; |
1471 | #ifdef CONFIG_GIGASET_DEBUG | 1481 | #ifdef CONFIG_GIGASET_DEBUG |
1472 | case ACT_ERROR: | 1482 | case ACT_ERROR: |
@@ -1484,16 +1494,16 @@ static void do_action(int action, struct cardstate *cs, | |||
1484 | break; | 1494 | break; |
1485 | #endif | 1495 | #endif |
1486 | case ACT_DEBUG: | 1496 | case ACT_DEBUG: |
1487 | dbg(DEBUG_ANY, "%s: resp_code %d in ConState %d", | 1497 | gig_dbg(DEBUG_ANY, "%s: resp_code %d in ConState %d", |
1488 | __func__, ev->type, at_state->ConState); | 1498 | __func__, ev->type, at_state->ConState); |
1489 | break; | 1499 | break; |
1490 | case ACT_WARN: | 1500 | case ACT_WARN: |
1491 | warn("%s: resp_code %d in ConState %d!", | 1501 | dev_warn(cs->dev, "%s: resp_code %d in ConState %d!\n", |
1492 | __func__, ev->type, at_state->ConState); | 1502 | __func__, ev->type, at_state->ConState); |
1493 | break; | 1503 | break; |
1494 | case ACT_ZCAU: | 1504 | case ACT_ZCAU: |
1495 | warn("cause code %04x in connection state %d.", | 1505 | dev_warn(cs->dev, "cause code %04x in connection state %d.\n", |
1496 | ev->parameter, at_state->ConState); | 1506 | ev->parameter, at_state->ConState); |
1497 | break; | 1507 | break; |
1498 | 1508 | ||
1499 | /* events from the LL */ | 1509 | /* events from the LL */ |
@@ -1504,14 +1514,14 @@ static void do_action(int action, struct cardstate *cs, | |||
1504 | start_accept(at_state); | 1514 | start_accept(at_state); |
1505 | break; | 1515 | break; |
1506 | case ACT_PROTO_L2: | 1516 | case ACT_PROTO_L2: |
1507 | dbg(DEBUG_CMD, | 1517 | gig_dbg(DEBUG_CMD, "set protocol to %u", |
1508 | "set protocol to %u", (unsigned) ev->parameter); | 1518 | (unsigned) ev->parameter); |
1509 | at_state->bcs->proto2 = ev->parameter; | 1519 | at_state->bcs->proto2 = ev->parameter; |
1510 | break; | 1520 | break; |
1511 | case ACT_HUP: | 1521 | case ACT_HUP: |
1512 | at_state->pending_commands |= PC_HUP; | 1522 | at_state->pending_commands |= PC_HUP; |
1513 | atomic_set(&cs->commands_pending, 1); | 1523 | atomic_set(&cs->commands_pending, 1); |
1514 | dbg(DEBUG_CMD, "Scheduling PC_HUP"); | 1524 | gig_dbg(DEBUG_CMD, "Scheduling PC_HUP"); |
1515 | break; | 1525 | break; |
1516 | 1526 | ||
1517 | /* hotplug events */ | 1527 | /* hotplug events */ |
@@ -1547,10 +1557,10 @@ static void do_action(int action, struct cardstate *cs, | |||
1547 | atomic_set(&cs->cidmode, ev->parameter); | 1557 | atomic_set(&cs->cidmode, ev->parameter); |
1548 | if (ev->parameter) { | 1558 | if (ev->parameter) { |
1549 | cs->at_state.pending_commands |= PC_CIDMODE; | 1559 | cs->at_state.pending_commands |= PC_CIDMODE; |
1550 | dbg(DEBUG_CMD, "Scheduling PC_CIDMODE"); | 1560 | gig_dbg(DEBUG_CMD, "Scheduling PC_CIDMODE"); |
1551 | } else { | 1561 | } else { |
1552 | cs->at_state.pending_commands |= PC_UMMODE; | 1562 | cs->at_state.pending_commands |= PC_UMMODE; |
1553 | dbg(DEBUG_CMD, "Scheduling PC_UMMODE"); | 1563 | gig_dbg(DEBUG_CMD, "Scheduling PC_UMMODE"); |
1554 | } | 1564 | } |
1555 | atomic_set(&cs->commands_pending, 1); | 1565 | atomic_set(&cs->commands_pending, 1); |
1556 | } | 1566 | } |
@@ -1578,7 +1588,7 @@ static void do_action(int action, struct cardstate *cs, | |||
1578 | *p_resp_code = RSP_NULL; | 1588 | *p_resp_code = RSP_NULL; |
1579 | } | 1589 | } |
1580 | } else | 1590 | } else |
1581 | err("%s: action==%d!", __func__, action); | 1591 | dev_err(cs->dev, "%s: action==%d!\n", __func__, action); |
1582 | } | 1592 | } |
1583 | } | 1593 | } |
1584 | 1594 | ||
@@ -1604,20 +1614,20 @@ static void process_event(struct cardstate *cs, struct event_t *ev) | |||
1604 | at_state = at_state_from_cid(cs, ev->cid); | 1614 | at_state = at_state_from_cid(cs, ev->cid); |
1605 | if (!at_state) { | 1615 | if (!at_state) { |
1606 | gigaset_add_event(cs, &cs->at_state, RSP_WRONG_CID, | 1616 | gigaset_add_event(cs, &cs->at_state, RSP_WRONG_CID, |
1607 | NULL, 0, NULL); | 1617 | NULL, 0, NULL); |
1608 | return; | 1618 | return; |
1609 | } | 1619 | } |
1610 | } else { | 1620 | } else { |
1611 | at_state = ev->at_state; | 1621 | at_state = ev->at_state; |
1612 | if (at_state_invalid(cs, at_state)) { | 1622 | if (at_state_invalid(cs, at_state)) { |
1613 | dbg(DEBUG_ANY, | 1623 | gig_dbg(DEBUG_ANY, "event for invalid at_state %p", |
1614 | "event for invalid at_state %p", at_state); | 1624 | at_state); |
1615 | return; | 1625 | return; |
1616 | } | 1626 | } |
1617 | } | 1627 | } |
1618 | 1628 | ||
1619 | dbg(DEBUG_CMD, | 1629 | gig_dbg(DEBUG_CMD, "connection state %d, event %d", |
1620 | "connection state %d, event %d", at_state->ConState, ev->type); | 1630 | at_state->ConState, ev->type); |
1621 | 1631 | ||
1622 | bcs = at_state->bcs; | 1632 | bcs = at_state->bcs; |
1623 | sendcid = at_state->cid; | 1633 | sendcid = at_state->cid; |
@@ -1630,11 +1640,11 @@ static void process_event(struct cardstate *cs, struct event_t *ev) | |||
1630 | if (ev->parameter != atomic_read(&at_state->timer_index) | 1640 | if (ev->parameter != atomic_read(&at_state->timer_index) |
1631 | || !at_state->timer_active) { | 1641 | || !at_state->timer_active) { |
1632 | ev->type = RSP_NONE; /* old timeout */ | 1642 | ev->type = RSP_NONE; /* old timeout */ |
1633 | dbg(DEBUG_ANY, "old timeout"); | 1643 | gig_dbg(DEBUG_ANY, "old timeout"); |
1634 | } else if (!at_state->waiting) | 1644 | } else if (!at_state->waiting) |
1635 | dbg(DEBUG_ANY, "timeout occured"); | 1645 | gig_dbg(DEBUG_ANY, "timeout occurred"); |
1636 | else | 1646 | else |
1637 | dbg(DEBUG_ANY, "stopped waiting"); | 1647 | gig_dbg(DEBUG_ANY, "stopped waiting"); |
1638 | } | 1648 | } |
1639 | 1649 | ||
1640 | /* if the response belongs to a variable in at_state->int_var[VAR_XXXX] | 1650 | /* if the response belongs to a variable in at_state->int_var[VAR_XXXX] |
@@ -1657,11 +1667,11 @@ static void process_event(struct cardstate *cs, struct event_t *ev) | |||
1657 | constate */ | 1667 | constate */ |
1658 | for (;; rep++) { | 1668 | for (;; rep++) { |
1659 | rcode = rep->resp_code; | 1669 | rcode = rep->resp_code; |
1660 | /* dbg (DEBUG_ANY, "rcode %d", rcode); */ | ||
1661 | if (rcode == RSP_LAST) { | 1670 | if (rcode == RSP_LAST) { |
1662 | /* found nothing...*/ | 1671 | /* found nothing...*/ |
1663 | warn("%s: rcode=RSP_LAST: resp_code %d in ConState %d!", | 1672 | dev_warn(cs->dev, "%s: rcode=RSP_LAST: " |
1664 | __func__, ev->type, at_state->ConState); | 1673 | "resp_code %d in ConState %d!\n", |
1674 | __func__, ev->type, at_state->ConState); | ||
1665 | return; | 1675 | return; |
1666 | } | 1676 | } |
1667 | if ((rcode == RSP_ANY || rcode == ev->type) | 1677 | if ((rcode == RSP_ANY || rcode == ev->type) |
@@ -1699,12 +1709,12 @@ static void process_event(struct cardstate *cs, struct event_t *ev) | |||
1699 | if (p_command/*rep->command*/) { | 1709 | if (p_command/*rep->command*/) { |
1700 | if (atomic_read(&cs->connected)) | 1710 | if (atomic_read(&cs->connected)) |
1701 | send_command(cs, p_command, | 1711 | send_command(cs, p_command, |
1702 | sendcid, cs->dle, | 1712 | sendcid, cs->dle, |
1703 | GFP_ATOMIC); | 1713 | GFP_ATOMIC); |
1704 | else | 1714 | else |
1705 | gigaset_add_event(cs, at_state, | 1715 | gigaset_add_event(cs, at_state, |
1706 | RSP_NODEV, | 1716 | RSP_NODEV, |
1707 | NULL, 0, NULL); | 1717 | NULL, 0, NULL); |
1708 | } | 1718 | } |
1709 | 1719 | ||
1710 | spin_lock_irqsave(&cs->lock, flags); | 1720 | spin_lock_irqsave(&cs->lock, flags); |
@@ -1715,7 +1725,7 @@ static void process_event(struct cardstate *cs, struct event_t *ev) | |||
1715 | at_state->timer_expires = rep->timeout * 10; | 1725 | at_state->timer_expires = rep->timeout * 10; |
1716 | at_state->timer_active = 1; | 1726 | at_state->timer_active = 1; |
1717 | new_index(&at_state->timer_index, | 1727 | new_index(&at_state->timer_index, |
1718 | MAX_TIMER_INDEX); | 1728 | MAX_TIMER_INDEX); |
1719 | } | 1729 | } |
1720 | spin_unlock_irqrestore(&cs->lock, flags); | 1730 | spin_unlock_irqrestore(&cs->lock, flags); |
1721 | } | 1731 | } |
@@ -1741,11 +1751,11 @@ static void process_command_flags(struct cardstate *cs) | |||
1741 | atomic_set(&cs->commands_pending, 0); | 1751 | atomic_set(&cs->commands_pending, 0); |
1742 | 1752 | ||
1743 | if (cs->cur_at_seq) { | 1753 | if (cs->cur_at_seq) { |
1744 | dbg(DEBUG_CMD, "not searching scheduled commands: busy"); | 1754 | gig_dbg(DEBUG_CMD, "not searching scheduled commands: busy"); |
1745 | return; | 1755 | return; |
1746 | } | 1756 | } |
1747 | 1757 | ||
1748 | dbg(DEBUG_CMD, "searching scheduled commands"); | 1758 | gig_dbg(DEBUG_CMD, "searching scheduled commands"); |
1749 | 1759 | ||
1750 | sequence = SEQ_NONE; | 1760 | sequence = SEQ_NONE; |
1751 | 1761 | ||
@@ -1884,7 +1894,7 @@ static void process_command_flags(struct cardstate *cs) | |||
1884 | switch (atomic_read(&cs->mode)) { | 1894 | switch (atomic_read(&cs->mode)) { |
1885 | case M_UNIMODEM: | 1895 | case M_UNIMODEM: |
1886 | cs->at_state.pending_commands |= PC_CIDMODE; | 1896 | cs->at_state.pending_commands |= PC_CIDMODE; |
1887 | dbg(DEBUG_CMD, "Scheduling PC_CIDMODE"); | 1897 | gig_dbg(DEBUG_CMD, "Scheduling PC_CIDMODE"); |
1888 | atomic_set(&cs->commands_pending, 1); | 1898 | atomic_set(&cs->commands_pending, 1); |
1889 | return; | 1899 | return; |
1890 | #ifdef GIG_MAYINITONDIAL | 1900 | #ifdef GIG_MAYINITONDIAL |
@@ -1945,7 +1955,8 @@ static void process_events(struct cardstate *cs) | |||
1945 | } | 1955 | } |
1946 | 1956 | ||
1947 | if (i == 2 * MAX_EVENTS) { | 1957 | if (i == 2 * MAX_EVENTS) { |
1948 | err("infinite loop in process_events; aborting."); | 1958 | dev_err(cs->dev, |
1959 | "infinite loop in process_events; aborting.\n"); | ||
1949 | } | 1960 | } |
1950 | } | 1961 | } |
1951 | 1962 | ||
@@ -1962,7 +1973,7 @@ void gigaset_handle_event(unsigned long data) | |||
1962 | 1973 | ||
1963 | /* handle incoming data on control/common channel */ | 1974 | /* handle incoming data on control/common channel */ |
1964 | if (atomic_read(&cs->inbuf->head) != atomic_read(&cs->inbuf->tail)) { | 1975 | if (atomic_read(&cs->inbuf->head) != atomic_read(&cs->inbuf->tail)) { |
1965 | dbg(DEBUG_INTR, "processing new data"); | 1976 | gig_dbg(DEBUG_INTR, "processing new data"); |
1966 | cs->ops->handle_input(cs->inbuf); | 1977 | cs->ops->handle_input(cs->inbuf); |
1967 | } | 1978 | } |
1968 | 1979 | ||
diff --git a/drivers/isdn/gigaset/gigaset.h b/drivers/isdn/gigaset/gigaset.h index bc5a6294f0c0..d77588de7eb7 100644 --- a/drivers/isdn/gigaset/gigaset.h +++ b/drivers/isdn/gigaset/gigaset.h | |||
@@ -106,10 +106,10 @@ extern int gigaset_debuglevel; /* "needs" cast to (enum debuglevel) */ | |||
106 | * DEBUG_INTR. | 106 | * DEBUG_INTR. |
107 | */ | 107 | */ |
108 | enum debuglevel { /* up to 24 bits (atomic_t) */ | 108 | enum debuglevel { /* up to 24 bits (atomic_t) */ |
109 | DEBUG_REG = 0x0002,/* serial port I/O register operations */ | 109 | DEBUG_REG = 0x0002, /* serial port I/O register operations */ |
110 | DEBUG_OPEN = 0x0004, /* open/close serial port */ | 110 | DEBUG_OPEN = 0x0004, /* open/close serial port */ |
111 | DEBUG_INTR = 0x0008, /* interrupt processing */ | 111 | DEBUG_INTR = 0x0008, /* interrupt processing */ |
112 | DEBUG_INTR_DUMP = 0x0010, /* Activating hexdump debug output on | 112 | DEBUG_INTR_DUMP = 0x0010, /* Activating hexdump debug output on |
113 | interrupt requests, not available as | 113 | interrupt requests, not available as |
114 | run-time option */ | 114 | run-time option */ |
115 | DEBUG_CMD = 0x00020, /* sent/received LL commands */ | 115 | DEBUG_CMD = 0x00020, /* sent/received LL commands */ |
@@ -120,66 +120,68 @@ enum debuglevel { /* up to 24 bits (atomic_t) */ | |||
120 | DEBUG_DRIVER = 0x00400, /* driver structure */ | 120 | DEBUG_DRIVER = 0x00400, /* driver structure */ |
121 | DEBUG_HDLC = 0x00800, /* M10x HDLC processing */ | 121 | DEBUG_HDLC = 0x00800, /* M10x HDLC processing */ |
122 | DEBUG_WRITE = 0x01000, /* M105 data write */ | 122 | DEBUG_WRITE = 0x01000, /* M105 data write */ |
123 | DEBUG_TRANSCMD = 0x02000, /* AT-COMMANDS+RESPONSES */ | 123 | DEBUG_TRANSCMD = 0x02000, /* AT-COMMANDS+RESPONSES */ |
124 | DEBUG_MCMD = 0x04000, /* COMMANDS THAT ARE SENT VERY OFTEN */ | 124 | DEBUG_MCMD = 0x04000, /* COMMANDS THAT ARE SENT VERY OFTEN */ |
125 | DEBUG_INIT = 0x08000, /* (de)allocation+initialization of data | 125 | DEBUG_INIT = 0x08000, /* (de)allocation+initialization of data |
126 | structures */ | 126 | structures */ |
127 | DEBUG_LOCK = 0x10000, /* semaphore operations */ | 127 | DEBUG_LOCK = 0x10000, /* semaphore operations */ |
128 | DEBUG_OUTPUT = 0x20000, /* output to device */ | 128 | DEBUG_OUTPUT = 0x20000, /* output to device */ |
129 | DEBUG_ISO = 0x40000, /* isochronous transfers */ | 129 | DEBUG_ISO = 0x40000, /* isochronous transfers */ |
130 | DEBUG_IF = 0x80000, /* character device operations */ | 130 | DEBUG_IF = 0x80000, /* character device operations */ |
131 | DEBUG_USBREQ = 0x100000, /* USB communication (except payload | 131 | DEBUG_USBREQ = 0x100000, /* USB communication (except payload |
132 | data) */ | 132 | data) */ |
133 | DEBUG_LOCKCMD = 0x200000, /* AT commands and responses when | 133 | DEBUG_LOCKCMD = 0x200000, /* AT commands and responses when |
134 | MS_LOCKED */ | 134 | MS_LOCKED */ |
135 | 135 | ||
136 | DEBUG_ANY = 0x3fffff, /* print message if any of the others is | 136 | DEBUG_ANY = 0x3fffff, /* print message if any of the others is |
137 | activated */ | 137 | activated */ |
138 | }; | 138 | }; |
139 | 139 | ||
140 | #ifdef CONFIG_GIGASET_DEBUG | 140 | /* missing from linux/device.h ... */ |
141 | #define DEBUG_DEFAULT (DEBUG_INIT | DEBUG_TRANSCMD | DEBUG_CMD | DEBUG_USBREQ) | 141 | #ifndef dev_notice |
142 | #else | 142 | #define dev_notice(dev, format, arg...) \ |
143 | #define DEBUG_DEFAULT 0 | 143 | dev_printk(KERN_NOTICE , dev , format , ## arg) |
144 | #endif | 144 | #endif |
145 | 145 | ||
146 | /* redefine syslog macros to prepend module name instead of entire | 146 | /* Kernel message macros for situations where dev_printk and friends cannot be |
147 | * source path */ | 147 | * used for lack of reliable access to a device structure. |
148 | * linux/usb.h already contains these but in an obsolete form which clutters | ||
149 | * the log needlessly, and according to the USB maintainer those should be | ||
150 | * removed rather than fixed anyway. | ||
151 | */ | ||
152 | #undef err | ||
148 | #undef info | 153 | #undef info |
149 | #define info(format, arg...) \ | ||
150 | printk(KERN_INFO "%s: " format "\n", \ | ||
151 | THIS_MODULE ? THIS_MODULE->name : "gigaset_hw" , ## arg) | ||
152 | |||
153 | #undef notice | ||
154 | #define notice(format, arg...) \ | ||
155 | printk(KERN_NOTICE "%s: " format "\n", \ | ||
156 | THIS_MODULE ? THIS_MODULE->name : "gigaset_hw" , ## arg) | ||
157 | |||
158 | #undef warn | 154 | #undef warn |
159 | #define warn(format, arg...) \ | 155 | #undef notice |
160 | printk(KERN_WARNING "%s: " format "\n", \ | ||
161 | THIS_MODULE ? THIS_MODULE->name : "gigaset_hw" , ## arg) | ||
162 | 156 | ||
163 | #undef err | 157 | #define err(format, arg...) printk(KERN_ERR KBUILD_MODNAME ": " \ |
164 | #define err(format, arg...) \ | 158 | format "\n" , ## arg) |
165 | printk(KERN_ERR "%s: " format "\n", \ | 159 | #define info(format, arg...) printk(KERN_INFO KBUILD_MODNAME ": " \ |
166 | THIS_MODULE ? THIS_MODULE->name : "gigaset_hw" , ## arg) | 160 | format "\n" , ## arg) |
161 | #define warn(format, arg...) printk(KERN_WARNING KBUILD_MODNAME ": " \ | ||
162 | format "\n" , ## arg) | ||
163 | #define notice(format, arg...) printk(KERN_NOTICE KBUILD_MODNAME ": " \ | ||
164 | format "\n" , ## arg) | ||
167 | 165 | ||
168 | #undef dbg | ||
169 | #ifdef CONFIG_GIGASET_DEBUG | 166 | #ifdef CONFIG_GIGASET_DEBUG |
170 | #define dbg(level, format, arg...) \ | 167 | |
168 | #define gig_dbg(level, format, arg...) \ | ||
171 | do { \ | 169 | do { \ |
172 | if (unlikely(((enum debuglevel)gigaset_debuglevel) & (level))) \ | 170 | if (unlikely(((enum debuglevel)gigaset_debuglevel) & (level))) \ |
173 | printk(KERN_DEBUG "%s: " format "\n", \ | 171 | printk(KERN_DEBUG KBUILD_MODNAME ": " format "\n", \ |
174 | THIS_MODULE ? THIS_MODULE->name : "gigaset_hw" \ | 172 | ## arg); \ |
175 | , ## arg); \ | ||
176 | } while (0) | 173 | } while (0) |
174 | #define DEBUG_DEFAULT (DEBUG_INIT | DEBUG_TRANSCMD | DEBUG_CMD | DEBUG_USBREQ) | ||
175 | |||
177 | #else | 176 | #else |
178 | #define dbg(level, format, arg...) do {} while (0) | 177 | |
178 | #define gig_dbg(level, format, arg...) do {} while (0) | ||
179 | #define DEBUG_DEFAULT 0 | ||
180 | |||
179 | #endif | 181 | #endif |
180 | 182 | ||
181 | void gigaset_dbg_buffer(enum debuglevel level, const unsigned char *msg, | 183 | void gigaset_dbg_buffer(enum debuglevel level, const unsigned char *msg, |
182 | size_t len, const unsigned char *buf, int from_user); | 184 | size_t len, const unsigned char *buf, int from_user); |
183 | 185 | ||
184 | /* connection state */ | 186 | /* connection state */ |
185 | #define ZSAU_NONE 0 | 187 | #define ZSAU_NONE 0 |
@@ -368,16 +370,6 @@ struct inbuf_t { | |||
368 | * BAS_OUTBUFPAD bytes immediately before data[write] (if | 370 | * BAS_OUTBUFPAD bytes immediately before data[write] (if |
369 | * write>=BAS_OUTBUFPAD) or those of the pad area (if write<BAS_OUTBUFPAD) | 371 | * write>=BAS_OUTBUFPAD) or those of the pad area (if write<BAS_OUTBUFPAD) |
370 | * are also filled with that value | 372 | * are also filled with that value |
371 | * - optionally, the following statistics on the buffer's usage can be | ||
372 | * collected: | ||
373 | * maxfill: maximum number of bytes occupied | ||
374 | * idlefills: number of times a frame of idle bytes is prepared | ||
375 | * emptygets: number of times the buffer was empty when a data frame was | ||
376 | * requested | ||
377 | * backtoback: number of times two data packets were entered into the buffer | ||
378 | * without intervening idle flags | ||
379 | * nakedback: set if no idle flags have been inserted since the last data | ||
380 | * packet | ||
381 | */ | 373 | */ |
382 | struct isowbuf_t { | 374 | struct isowbuf_t { |
383 | atomic_t read; | 375 | atomic_t read; |
@@ -471,7 +463,7 @@ struct bc_state { | |||
471 | int busy; | 463 | int busy; |
472 | int use_count; | 464 | int use_count; |
473 | 465 | ||
474 | /* hardware drivers */ | 466 | /* private data of hardware drivers */ |
475 | union { | 467 | union { |
476 | struct ser_bc_state *ser; /* serial hardware driver */ | 468 | struct ser_bc_state *ser; /* serial hardware driver */ |
477 | struct usb_bc_state *usb; /* usb hardware driver (m105) */ | 469 | struct usb_bc_state *usb; /* usb hardware driver (m105) */ |
@@ -482,6 +474,7 @@ struct bc_state { | |||
482 | struct cardstate { | 474 | struct cardstate { |
483 | struct gigaset_driver *driver; | 475 | struct gigaset_driver *driver; |
484 | unsigned minor_index; | 476 | unsigned minor_index; |
477 | struct device *dev; | ||
485 | 478 | ||
486 | const struct gigaset_ops *ops; | 479 | const struct gigaset_ops *ops; |
487 | 480 | ||
@@ -531,11 +524,11 @@ struct cardstate { | |||
531 | int cs_init; | 524 | int cs_init; |
532 | int ignoreframes; /* frames to ignore after setting up the | 525 | int ignoreframes; /* frames to ignore after setting up the |
533 | B channel */ | 526 | B channel */ |
534 | struct semaphore sem; /* locks this structure: */ | 527 | struct semaphore sem; /* locks this structure: |
535 | /* connected is not changed, */ | 528 | * connected is not changed, |
536 | /* hardware_up is not changed, */ | 529 | * hardware_up is not changed, |
537 | /* MState is not changed to or from | 530 | * MState is not changed to or from |
538 | MS_LOCKED */ | 531 | * MS_LOCKED */ |
539 | 532 | ||
540 | struct timer_list timer; | 533 | struct timer_list timer; |
541 | int retry_count; | 534 | int retry_count; |
@@ -543,7 +536,7 @@ struct cardstate { | |||
543 | dle encoded */ | 536 | dle encoded */ |
544 | int cur_at_seq; /* sequence of AT commands being | 537 | int cur_at_seq; /* sequence of AT commands being |
545 | processed */ | 538 | processed */ |
546 | int curchannel; /* channel, those commands are meant | 539 | int curchannel; /* channel those commands are meant |
547 | for */ | 540 | for */ |
548 | atomic_t commands_pending; /* flag(s) in xxx.commands_pending have | 541 | atomic_t commands_pending; /* flag(s) in xxx.commands_pending have |
549 | been set */ | 542 | been set */ |
@@ -551,7 +544,7 @@ struct cardstate { | |||
551 | /* tasklet for serializing AT commands. | 544 | /* tasklet for serializing AT commands. |
552 | * Scheduled | 545 | * Scheduled |
553 | * -> for modem reponses (and | 546 | * -> for modem reponses (and |
554 | * incomming data for M10x) | 547 | * incoming data for M10x) |
555 | * -> on timeout | 548 | * -> on timeout |
556 | * -> after setting bits in | 549 | * -> after setting bits in |
557 | * xxx.at_state.pending_command | 550 | * xxx.at_state.pending_command |
@@ -569,7 +562,7 @@ struct cardstate { | |||
569 | unsigned char respdata[MAX_RESP_SIZE]; | 562 | unsigned char respdata[MAX_RESP_SIZE]; |
570 | unsigned cbytes; | 563 | unsigned cbytes; |
571 | 564 | ||
572 | /* hardware drivers */ | 565 | /* private data of hardware drivers */ |
573 | union { | 566 | union { |
574 | struct usb_cardstate *usb; /* USB hardware driver (m105) */ | 567 | struct usb_cardstate *usb; /* USB hardware driver (m105) */ |
575 | struct ser_cardstate *ser; /* serial hardware driver */ | 568 | struct ser_cardstate *ser; /* serial hardware driver */ |
@@ -607,36 +600,33 @@ struct bas_bc_state { | |||
607 | struct isow_urbctx_t isoouturbs[BAS_OUTURBS]; | 600 | struct isow_urbctx_t isoouturbs[BAS_OUTURBS]; |
608 | struct isow_urbctx_t *isooutdone, *isooutfree, *isooutovfl; | 601 | struct isow_urbctx_t *isooutdone, *isooutfree, *isooutovfl; |
609 | struct isowbuf_t *isooutbuf; | 602 | struct isowbuf_t *isooutbuf; |
610 | unsigned numsub; /* submitted URB counter (for | 603 | unsigned numsub; /* submitted URB counter |
611 | diagnostic messages only) */ | 604 | (for diagnostic messages only) */ |
612 | struct tasklet_struct sent_tasklet; | 605 | struct tasklet_struct sent_tasklet; |
613 | 606 | ||
614 | /* isochronous input state */ | 607 | /* isochronous input state */ |
615 | spinlock_t isoinlock; | 608 | spinlock_t isoinlock; |
616 | struct urb *isoinurbs[BAS_INURBS]; | 609 | struct urb *isoinurbs[BAS_INURBS]; |
617 | unsigned char isoinbuf[BAS_INBUFSIZE * BAS_INURBS]; | 610 | unsigned char isoinbuf[BAS_INBUFSIZE * BAS_INURBS]; |
618 | struct urb *isoindone; /* completed isoc read URB */ | 611 | struct urb *isoindone; /* completed isoc read URB */ |
619 | int loststatus; /* status of dropped URB */ | 612 | int loststatus; /* status of dropped URB */ |
620 | unsigned isoinlost; /* number of bytes lost */ | 613 | unsigned isoinlost; /* number of bytes lost */ |
621 | /* state of bit unstuffing algorithm (in addition to | 614 | /* state of bit unstuffing algorithm |
622 | BC_state.inputstate) */ | 615 | (in addition to BC_state.inputstate) */ |
623 | unsigned seqlen; /* number of '1' bits not yet | 616 | unsigned seqlen; /* number of '1' bits not yet |
624 | unstuffed */ | 617 | unstuffed */ |
625 | unsigned inbyte, inbits; /* collected bits for next byte | 618 | unsigned inbyte, inbits; /* collected bits for next byte */ |
626 | */ | ||
627 | /* statistics */ | 619 | /* statistics */ |
628 | unsigned goodbytes; /* bytes correctly received */ | 620 | unsigned goodbytes; /* bytes correctly received */ |
629 | unsigned alignerrs; /* frames with incomplete byte | 621 | unsigned alignerrs; /* frames with incomplete byte at end */ |
630 | at end */ | 622 | unsigned fcserrs; /* FCS errors */ |
631 | unsigned fcserrs; /* FCS errors */ | 623 | unsigned frameerrs; /* framing errors */ |
632 | unsigned frameerrs; /* framing errors */ | 624 | unsigned giants; /* long frames */ |
633 | unsigned giants; /* long frames */ | 625 | unsigned runts; /* short frames */ |
634 | unsigned runts; /* short frames */ | 626 | unsigned aborts; /* HDLC aborts */ |
635 | unsigned aborts; /* HDLC aborts */ | 627 | unsigned shared0s; /* '0' bits shared between flags */ |
636 | unsigned shared0s; /* '0' bits shared between flags | 628 | unsigned stolen0s; /* '0' stuff bits also serving as |
637 | */ | 629 | leading flag bits */ |
638 | unsigned stolen0s; /* '0' stuff bits also serving | ||
639 | as leading flag bits */ | ||
640 | struct tasklet_struct rcvd_tasklet; | 630 | struct tasklet_struct rcvd_tasklet; |
641 | }; | 631 | }; |
642 | 632 | ||
@@ -644,8 +634,8 @@ struct gigaset_ops { | |||
644 | /* Called from ev-layer.c/interface.c for sending AT commands to the | 634 | /* Called from ev-layer.c/interface.c for sending AT commands to the |
645 | device */ | 635 | device */ |
646 | int (*write_cmd)(struct cardstate *cs, | 636 | int (*write_cmd)(struct cardstate *cs, |
647 | const unsigned char *buf, int len, | 637 | const unsigned char *buf, int len, |
648 | struct tasklet_struct *wake_tasklet); | 638 | struct tasklet_struct *wake_tasklet); |
649 | 639 | ||
650 | /* Called from interface.c for additional device control */ | 640 | /* Called from interface.c for additional device control */ |
651 | int (*write_room)(struct cardstate *cs); | 641 | int (*write_room)(struct cardstate *cs); |
@@ -699,7 +689,7 @@ struct gigaset_ops { | |||
699 | * <DLE_FLAG>: 0x10 | 689 | * <DLE_FLAG>: 0x10 |
700 | * <EVENT>: ((a-z)* | (A-Z)* | (0-10)*)+ | 690 | * <EVENT>: ((a-z)* | (A-Z)* | (0-10)*)+ |
701 | */ | 691 | */ |
702 | #define DLE_FLAG 0x10 | 692 | #define DLE_FLAG 0x10 |
703 | 693 | ||
704 | /* =========================================================================== | 694 | /* =========================================================================== |
705 | * Functions implemented in asyncdata.c | 695 | * Functions implemented in asyncdata.c |
@@ -764,7 +754,7 @@ static inline void gigaset_isdn_rcv_err(struct bc_state *bcs) | |||
764 | isdn_ctrl response; | 754 | isdn_ctrl response; |
765 | 755 | ||
766 | /* error -> LL */ | 756 | /* error -> LL */ |
767 | dbg(DEBUG_CMD, "sending L1ERR"); | 757 | gig_dbg(DEBUG_CMD, "sending L1ERR"); |
768 | response.driver = bcs->cs->myid; | 758 | response.driver = bcs->cs->myid; |
769 | response.command = ISDN_STAT_L1ERR; | 759 | response.command = ISDN_STAT_L1ERR; |
770 | response.arg = bcs->channel; | 760 | response.arg = bcs->channel; |
@@ -797,7 +787,7 @@ void gigaset_free_dev_sysfs(struct usb_interface *interface); | |||
797 | 787 | ||
798 | void gigaset_bcs_reinit(struct bc_state *bcs); | 788 | void gigaset_bcs_reinit(struct bc_state *bcs); |
799 | void gigaset_at_init(struct at_state_t *at_state, struct bc_state *bcs, | 789 | void gigaset_at_init(struct at_state_t *at_state, struct bc_state *bcs, |
800 | struct cardstate *cs, int cid); | 790 | struct cardstate *cs, int cid); |
801 | int gigaset_get_channel(struct bc_state *bcs); | 791 | int gigaset_get_channel(struct bc_state *bcs); |
802 | void gigaset_free_channel(struct bc_state *bcs); | 792 | void gigaset_free_channel(struct bc_state *bcs); |
803 | int gigaset_get_channels(struct cardstate *cs); | 793 | int gigaset_get_channels(struct cardstate *cs); |
@@ -806,11 +796,11 @@ void gigaset_block_channels(struct cardstate *cs); | |||
806 | 796 | ||
807 | /* Allocate and initialize driver structure. */ | 797 | /* Allocate and initialize driver structure. */ |
808 | struct gigaset_driver *gigaset_initdriver(unsigned minor, unsigned minors, | 798 | struct gigaset_driver *gigaset_initdriver(unsigned minor, unsigned minors, |
809 | const char *procname, | 799 | const char *procname, |
810 | const char *devname, | 800 | const char *devname, |
811 | const char *devfsname, | 801 | const char *devfsname, |
812 | const struct gigaset_ops *ops, | 802 | const struct gigaset_ops *ops, |
813 | struct module *owner); | 803 | struct module *owner); |
814 | 804 | ||
815 | /* Deallocate driver structure. */ | 805 | /* Deallocate driver structure. */ |
816 | void gigaset_freedriver(struct gigaset_driver *drv); | 806 | void gigaset_freedriver(struct gigaset_driver *drv); |
@@ -850,8 +840,8 @@ void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb); | |||
850 | * ptr must be kmalloc()ed (and not be freed by the caller). | 840 | * ptr must be kmalloc()ed (and not be freed by the caller). |
851 | */ | 841 | */ |
852 | struct event_t *gigaset_add_event(struct cardstate *cs, | 842 | struct event_t *gigaset_add_event(struct cardstate *cs, |
853 | struct at_state_t *at_state, int type, | 843 | struct at_state_t *at_state, int type, |
854 | void *ptr, int parameter, void *arg); | 844 | void *ptr, int parameter, void *arg); |
855 | 845 | ||
856 | /* Called on CONFIG1 command from frontend. */ | 846 | /* Called on CONFIG1 command from frontend. */ |
857 | int gigaset_enterconfigmode(struct cardstate *cs); //0: success <0: errorcode | 847 | int gigaset_enterconfigmode(struct cardstate *cs); //0: success <0: errorcode |
@@ -872,7 +862,7 @@ static inline void gigaset_bchannel_down(struct bc_state *bcs) | |||
872 | { | 862 | { |
873 | gigaset_add_event(bcs->cs, &bcs->at_state, EV_BC_CLOSED, NULL, 0, NULL); | 863 | gigaset_add_event(bcs->cs, &bcs->at_state, EV_BC_CLOSED, NULL, 0, NULL); |
874 | 864 | ||
875 | dbg(DEBUG_CMD, "scheduling BC_CLOSED"); | 865 | gig_dbg(DEBUG_CMD, "scheduling BC_CLOSED"); |
876 | gigaset_schedule_event(bcs->cs); | 866 | gigaset_schedule_event(bcs->cs); |
877 | } | 867 | } |
878 | 868 | ||
@@ -882,7 +872,7 @@ static inline void gigaset_bchannel_up(struct bc_state *bcs) | |||
882 | { | 872 | { |
883 | gigaset_add_event(bcs->cs, &bcs->at_state, EV_BC_OPEN, NULL, 0, NULL); | 873 | gigaset_add_event(bcs->cs, &bcs->at_state, EV_BC_OPEN, NULL, 0, NULL); |
884 | 874 | ||
885 | dbg(DEBUG_CMD, "scheduling BC_OPEN"); | 875 | gig_dbg(DEBUG_CMD, "scheduling BC_OPEN"); |
886 | gigaset_schedule_event(bcs->cs); | 876 | gigaset_schedule_event(bcs->cs); |
887 | } | 877 | } |
888 | 878 | ||
@@ -897,7 +887,7 @@ static inline void gigaset_bchannel_up(struct bc_state *bcs) | |||
897 | * appropriate locks held only. | 887 | * appropriate locks held only. |
898 | */ | 888 | */ |
899 | static inline unsigned char *gigaset_skb_put_quick(struct sk_buff *skb, | 889 | static inline unsigned char *gigaset_skb_put_quick(struct sk_buff *skb, |
900 | unsigned int len) | 890 | unsigned int len) |
901 | { | 891 | { |
902 | unsigned char *tmp = skb->tail; | 892 | unsigned char *tmp = skb->tail; |
903 | /*SKB_LINEAR_ASSERT(skb);*/ /* not needed here */ | 893 | /*SKB_LINEAR_ASSERT(skb);*/ /* not needed here */ |
@@ -910,8 +900,8 @@ static inline unsigned char *gigaset_skb_put_quick(struct sk_buff *skb, | |||
910 | * Warning: skb must not be accessed anymore! | 900 | * Warning: skb must not be accessed anymore! |
911 | */ | 901 | */ |
912 | static inline void gigaset_rcv_skb(struct sk_buff *skb, | 902 | static inline void gigaset_rcv_skb(struct sk_buff *skb, |
913 | struct cardstate *cs, | 903 | struct cardstate *cs, |
914 | struct bc_state *bcs) | 904 | struct bc_state *bcs) |
915 | { | 905 | { |
916 | cs->iif.rcvcallb_skb(cs->myid, bcs->channel, skb); | 906 | cs->iif.rcvcallb_skb(cs->myid, bcs->channel, skb); |
917 | bcs->trans_down++; | 907 | bcs->trans_down++; |
@@ -921,8 +911,8 @@ static inline void gigaset_rcv_skb(struct sk_buff *skb, | |||
921 | * Warning: skb must not be accessed anymore! | 911 | * Warning: skb must not be accessed anymore! |
922 | */ | 912 | */ |
923 | static inline void gigaset_rcv_error(struct sk_buff *procskb, | 913 | static inline void gigaset_rcv_error(struct sk_buff *procskb, |
924 | struct cardstate *cs, | 914 | struct cardstate *cs, |
925 | struct bc_state *bcs) | 915 | struct bc_state *bcs) |
926 | { | 916 | { |
927 | if (procskb) | 917 | if (procskb) |
928 | dev_kfree_skb(procskb); | 918 | dev_kfree_skb(procskb); |
@@ -942,12 +932,12 @@ extern __u8 gigaset_invtab[]; /* in common.c */ | |||
942 | 932 | ||
943 | /* append received bytes to inbuf */ | 933 | /* append received bytes to inbuf */ |
944 | static inline int gigaset_fill_inbuf(struct inbuf_t *inbuf, | 934 | static inline int gigaset_fill_inbuf(struct inbuf_t *inbuf, |
945 | const unsigned char *src, | 935 | const unsigned char *src, |
946 | unsigned numbytes) | 936 | unsigned numbytes) |
947 | { | 937 | { |
948 | unsigned n, head, tail, bytesleft; | 938 | unsigned n, head, tail, bytesleft; |
949 | 939 | ||
950 | dbg(DEBUG_INTR, "received %u bytes", numbytes); | 940 | gig_dbg(DEBUG_INTR, "received %u bytes", numbytes); |
951 | 941 | ||
952 | if (!numbytes) | 942 | if (!numbytes) |
953 | return 0; | 943 | return 0; |
@@ -955,7 +945,7 @@ static inline int gigaset_fill_inbuf(struct inbuf_t *inbuf, | |||
955 | bytesleft = numbytes; | 945 | bytesleft = numbytes; |
956 | tail = atomic_read(&inbuf->tail); | 946 | tail = atomic_read(&inbuf->tail); |
957 | head = atomic_read(&inbuf->head); | 947 | head = atomic_read(&inbuf->head); |
958 | dbg(DEBUG_INTR, "buffer state: %u -> %u", head, tail); | 948 | gig_dbg(DEBUG_INTR, "buffer state: %u -> %u", head, tail); |
959 | 949 | ||
960 | while (bytesleft) { | 950 | while (bytesleft) { |
961 | if (head > tail) | 951 | if (head > tail) |
@@ -965,7 +955,8 @@ static inline int gigaset_fill_inbuf(struct inbuf_t *inbuf, | |||
965 | else | 955 | else |
966 | n = RBUFSIZE - tail; | 956 | n = RBUFSIZE - tail; |
967 | if (!n) { | 957 | if (!n) { |
968 | err("buffer overflow (%u bytes lost)", bytesleft); | 958 | dev_err(inbuf->cs->dev, |
959 | "buffer overflow (%u bytes lost)", bytesleft); | ||
969 | break; | 960 | break; |
970 | } | 961 | } |
971 | if (n > bytesleft) | 962 | if (n > bytesleft) |
@@ -975,7 +966,7 @@ static inline int gigaset_fill_inbuf(struct inbuf_t *inbuf, | |||
975 | tail = (tail + n) % RBUFSIZE; | 966 | tail = (tail + n) % RBUFSIZE; |
976 | src += n; | 967 | src += n; |
977 | } | 968 | } |
978 | dbg(DEBUG_INTR, "setting tail to %u", tail); | 969 | gig_dbg(DEBUG_INTR, "setting tail to %u", tail); |
979 | atomic_set(&inbuf->tail, tail); | 970 | atomic_set(&inbuf->tail, tail); |
980 | return numbytes != bytesleft; | 971 | return numbytes != bytesleft; |
981 | } | 972 | } |
@@ -986,7 +977,7 @@ static inline int gigaset_fill_inbuf(struct inbuf_t *inbuf, | |||
986 | 977 | ||
987 | /* initialize interface */ | 978 | /* initialize interface */ |
988 | void gigaset_if_initdriver(struct gigaset_driver *drv, const char *procname, | 979 | void gigaset_if_initdriver(struct gigaset_driver *drv, const char *procname, |
989 | const char *devname, const char *devfsname); | 980 | const char *devname, const char *devfsname); |
990 | /* release interface */ | 981 | /* release interface */ |
991 | void gigaset_if_freedriver(struct gigaset_driver *drv); | 982 | void gigaset_if_freedriver(struct gigaset_driver *drv); |
992 | /* add minor */ | 983 | /* add minor */ |
@@ -995,6 +986,6 @@ void gigaset_if_init(struct cardstate *cs); | |||
995 | void gigaset_if_free(struct cardstate *cs); | 986 | void gigaset_if_free(struct cardstate *cs); |
996 | /* device received data */ | 987 | /* device received data */ |
997 | void gigaset_if_receive(struct cardstate *cs, | 988 | void gigaset_if_receive(struct cardstate *cs, |
998 | unsigned char *buffer, size_t len); | 989 | unsigned char *buffer, size_t len); |
999 | 990 | ||
1000 | #endif | 991 | #endif |
diff --git a/drivers/isdn/gigaset/i4l.c b/drivers/isdn/gigaset/i4l.c index e30275d4e148..cc1d3093e433 100644 --- a/drivers/isdn/gigaset/i4l.c +++ b/drivers/isdn/gigaset/i4l.c | |||
@@ -15,7 +15,7 @@ | |||
15 | 15 | ||
16 | #include "gigaset.h" | 16 | #include "gigaset.h" |
17 | 17 | ||
18 | /* == Handling of I4L IO ============================================================================*/ | 18 | /* == Handling of I4L IO =====================================================*/ |
19 | 19 | ||
20 | /* writebuf_from_LL | 20 | /* writebuf_from_LL |
21 | * called by LL to transmit data on an open channel | 21 | * called by LL to transmit data on an open channel |
@@ -33,7 +33,8 @@ | |||
33 | * 0 if temporarily unable to accept data (out of buffer space) | 33 | * 0 if temporarily unable to accept data (out of buffer space) |
34 | * <0 on error (eg. -EINVAL) | 34 | * <0 on error (eg. -EINVAL) |
35 | */ | 35 | */ |
36 | static int writebuf_from_LL(int driverID, int channel, int ack, struct sk_buff *skb) | 36 | static int writebuf_from_LL(int driverID, int channel, int ack, |
37 | struct sk_buff *skb) | ||
37 | { | 38 | { |
38 | struct cardstate *cs; | 39 | struct cardstate *cs; |
39 | struct bc_state *bcs; | 40 | struct bc_state *bcs; |
@@ -51,28 +52,30 @@ static int writebuf_from_LL(int driverID, int channel, int ack, struct sk_buff * | |||
51 | bcs = &cs->bcs[channel]; | 52 | bcs = &cs->bcs[channel]; |
52 | len = skb->len; | 53 | len = skb->len; |
53 | 54 | ||
54 | dbg(DEBUG_LLDATA, | 55 | gig_dbg(DEBUG_LLDATA, |
55 | "Receiving data from LL (id: %d, channel: %d, ack: %d, size: %d)", | 56 | "Receiving data from LL (id: %d, ch: %d, ack: %d, sz: %d)", |
56 | driverID, channel, ack, len); | 57 | driverID, channel, ack, len); |
58 | |||
59 | if (!atomic_read(&cs->connected)) { | ||
60 | err("%s: disconnected", __func__); | ||
61 | return -ENODEV; | ||
62 | } | ||
57 | 63 | ||
58 | if (!len) { | 64 | if (!len) { |
59 | if (ack) | 65 | if (ack) |
60 | warn("not ACKing empty packet from LL"); | 66 | notice("%s: not ACKing empty packet", __func__); |
61 | return 0; | 67 | return 0; |
62 | } | 68 | } |
63 | if (len > MAX_BUF_SIZE) { | 69 | if (len > MAX_BUF_SIZE) { |
64 | err("%s: packet too large (%d bytes)", __func__, channel); | 70 | err("%s: packet too large (%d bytes)", __func__, len); |
65 | return -EINVAL; | 71 | return -EINVAL; |
66 | } | 72 | } |
67 | 73 | ||
68 | if (!atomic_read(&cs->connected)) | ||
69 | return -ENODEV; | ||
70 | |||
71 | skblen = ack ? len : 0; | 74 | skblen = ack ? len : 0; |
72 | skb->head[0] = skblen & 0xff; | 75 | skb->head[0] = skblen & 0xff; |
73 | skb->head[1] = skblen >> 8; | 76 | skb->head[1] = skblen >> 8; |
74 | dbg(DEBUG_MCMD, "skb: len=%u, skblen=%u: %02x %02x", len, skblen, | 77 | gig_dbg(DEBUG_MCMD, "skb: len=%u, skblen=%u: %02x %02x", |
75 | (unsigned) skb->head[0], (unsigned) skb->head[1]); | 78 | len, skblen, (unsigned) skb->head[0], (unsigned) skb->head[1]); |
76 | 79 | ||
77 | /* pass to device-specific module */ | 80 | /* pass to device-specific module */ |
78 | return cs->ops->send_skb(bcs, skb); | 81 | return cs->ops->send_skb(bcs, skb); |
@@ -86,14 +89,14 @@ void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb) | |||
86 | ++bcs->trans_up; | 89 | ++bcs->trans_up; |
87 | 90 | ||
88 | if (skb->len) | 91 | if (skb->len) |
89 | warn("%s: skb->len==%d", __func__, skb->len); | 92 | dev_warn(bcs->cs->dev, "%s: skb->len==%d\n", |
93 | __func__, skb->len); | ||
90 | 94 | ||
91 | len = (unsigned char) skb->head[0] | | 95 | len = (unsigned char) skb->head[0] | |
92 | (unsigned) (unsigned char) skb->head[1] << 8; | 96 | (unsigned) (unsigned char) skb->head[1] << 8; |
93 | if (len) { | 97 | if (len) { |
94 | dbg(DEBUG_MCMD, | 98 | gig_dbg(DEBUG_MCMD, "ACKing to LL (id: %d, ch: %d, sz: %u)", |
95 | "Acknowledge sending to LL (id: %d, channel: %d size: %u)", | 99 | bcs->cs->myid, bcs->channel, len); |
96 | bcs->cs->myid, bcs->channel, len); | ||
97 | 100 | ||
98 | response.driver = bcs->cs->myid; | 101 | response.driver = bcs->cs->myid; |
99 | response.command = ISDN_STAT_BSENT; | 102 | response.command = ISDN_STAT_BSENT; |
@@ -117,7 +120,6 @@ static int command_from_LL(isdn_ctrl *cntrl) | |||
117 | int retval = 0; | 120 | int retval = 0; |
118 | struct setup_parm *sp; | 121 | struct setup_parm *sp; |
119 | 122 | ||
120 | //dbg(DEBUG_ANY, "Gigaset_HW: Receiving command"); | ||
121 | gigaset_debugdrivers(); | 123 | gigaset_debugdrivers(); |
122 | 124 | ||
123 | //FIXME "remove test for &connected" | 125 | //FIXME "remove test for &connected" |
@@ -129,29 +131,30 @@ static int command_from_LL(isdn_ctrl *cntrl) | |||
129 | 131 | ||
130 | switch (cntrl->command) { | 132 | switch (cntrl->command) { |
131 | case ISDN_CMD_IOCTL: | 133 | case ISDN_CMD_IOCTL: |
132 | 134 | gig_dbg(DEBUG_ANY, "ISDN_CMD_IOCTL (driver: %d, arg: %ld)", | |
133 | dbg(DEBUG_ANY, "ISDN_CMD_IOCTL (driver:%d,arg: %ld)", | 135 | cntrl->driver, cntrl->arg); |
134 | cntrl->driver, cntrl->arg); | ||
135 | 136 | ||
136 | warn("ISDN_CMD_IOCTL is not supported."); | 137 | warn("ISDN_CMD_IOCTL is not supported."); |
137 | return -EINVAL; | 138 | return -EINVAL; |
138 | 139 | ||
139 | case ISDN_CMD_DIAL: | 140 | case ISDN_CMD_DIAL: |
140 | dbg(DEBUG_ANY, "ISDN_CMD_DIAL (driver: %d, channel: %ld, " | 141 | gig_dbg(DEBUG_ANY, |
141 | "phone: %s,ownmsn: %s, si1: %d, si2: %d)", | 142 | "ISDN_CMD_DIAL (driver: %d, ch: %ld, " |
142 | cntrl->driver, cntrl->arg, | 143 | "phone: %s, ownmsn: %s, si1: %d, si2: %d)", |
143 | cntrl->parm.setup.phone, cntrl->parm.setup.eazmsn, | 144 | cntrl->driver, cntrl->arg, |
144 | cntrl->parm.setup.si1, cntrl->parm.setup.si2); | 145 | cntrl->parm.setup.phone, cntrl->parm.setup.eazmsn, |
146 | cntrl->parm.setup.si1, cntrl->parm.setup.si2); | ||
145 | 147 | ||
146 | if (cntrl->arg >= cs->channels) { | 148 | if (cntrl->arg >= cs->channels) { |
147 | err("invalid channel (%d)", (int) cntrl->arg); | 149 | err("ISDN_CMD_DIAL: invalid channel (%d)", |
150 | (int) cntrl->arg); | ||
148 | return -EINVAL; | 151 | return -EINVAL; |
149 | } | 152 | } |
150 | 153 | ||
151 | bcs = cs->bcs + cntrl->arg; | 154 | bcs = cs->bcs + cntrl->arg; |
152 | 155 | ||
153 | if (!gigaset_get_channel(bcs)) { | 156 | if (!gigaset_get_channel(bcs)) { |
154 | err("channel not free"); | 157 | err("ISDN_CMD_DIAL: channel not free"); |
155 | return -EBUSY; | 158 | return -EBUSY; |
156 | } | 159 | } |
157 | 160 | ||
@@ -164,41 +167,42 @@ static int command_from_LL(isdn_ctrl *cntrl) | |||
164 | *sp = cntrl->parm.setup; | 167 | *sp = cntrl->parm.setup; |
165 | 168 | ||
166 | if (!gigaset_add_event(cs, &bcs->at_state, EV_DIAL, sp, | 169 | if (!gigaset_add_event(cs, &bcs->at_state, EV_DIAL, sp, |
167 | atomic_read(&bcs->at_state.seq_index), | 170 | atomic_read(&bcs->at_state.seq_index), |
168 | NULL)) { | 171 | NULL)) { |
169 | //FIXME what should we do? | 172 | //FIXME what should we do? |
170 | kfree(sp); | 173 | kfree(sp); |
171 | gigaset_free_channel(bcs); | 174 | gigaset_free_channel(bcs); |
172 | return -ENOMEM; | 175 | return -ENOMEM; |
173 | } | 176 | } |
174 | 177 | ||
175 | dbg(DEBUG_CMD, "scheduling DIAL"); | 178 | gig_dbg(DEBUG_CMD, "scheduling DIAL"); |
176 | gigaset_schedule_event(cs); | 179 | gigaset_schedule_event(cs); |
177 | break; | 180 | break; |
178 | case ISDN_CMD_ACCEPTD: //FIXME | 181 | case ISDN_CMD_ACCEPTD: //FIXME |
179 | dbg(DEBUG_ANY, "ISDN_CMD_ACCEPTD"); | 182 | gig_dbg(DEBUG_ANY, "ISDN_CMD_ACCEPTD"); |
180 | 183 | ||
181 | if (cntrl->arg >= cs->channels) { | 184 | if (cntrl->arg >= cs->channels) { |
182 | err("invalid channel (%d)", (int) cntrl->arg); | 185 | err("ISDN_CMD_ACCEPTD: invalid channel (%d)", |
186 | (int) cntrl->arg); | ||
183 | return -EINVAL; | 187 | return -EINVAL; |
184 | } | 188 | } |
185 | 189 | ||
186 | if (!gigaset_add_event(cs, &cs->bcs[cntrl->arg].at_state, | 190 | if (!gigaset_add_event(cs, &cs->bcs[cntrl->arg].at_state, |
187 | EV_ACCEPT, NULL, 0, NULL)) { | 191 | EV_ACCEPT, NULL, 0, NULL)) { |
188 | //FIXME what should we do? | 192 | //FIXME what should we do? |
189 | return -ENOMEM; | 193 | return -ENOMEM; |
190 | } | 194 | } |
191 | 195 | ||
192 | dbg(DEBUG_CMD, "scheduling ACCEPT"); | 196 | gig_dbg(DEBUG_CMD, "scheduling ACCEPT"); |
193 | gigaset_schedule_event(cs); | 197 | gigaset_schedule_event(cs); |
194 | 198 | ||
195 | break; | 199 | break; |
196 | case ISDN_CMD_ACCEPTB: | 200 | case ISDN_CMD_ACCEPTB: |
197 | dbg(DEBUG_ANY, "ISDN_CMD_ACCEPTB"); | 201 | gig_dbg(DEBUG_ANY, "ISDN_CMD_ACCEPTB"); |
198 | break; | 202 | break; |
199 | case ISDN_CMD_HANGUP: | 203 | case ISDN_CMD_HANGUP: |
200 | dbg(DEBUG_ANY, | 204 | gig_dbg(DEBUG_ANY, "ISDN_CMD_HANGUP (ch: %d)", |
201 | "ISDN_CMD_HANGUP (channel: %d)", (int) cntrl->arg); | 205 | (int) cntrl->arg); |
202 | 206 | ||
203 | if (cntrl->arg >= cs->channels) { | 207 | if (cntrl->arg >= cs->channels) { |
204 | err("ISDN_CMD_HANGUP: invalid channel (%u)", | 208 | err("ISDN_CMD_HANGUP: invalid channel (%u)", |
@@ -207,66 +211,68 @@ static int command_from_LL(isdn_ctrl *cntrl) | |||
207 | } | 211 | } |
208 | 212 | ||
209 | if (!gigaset_add_event(cs, &cs->bcs[cntrl->arg].at_state, | 213 | if (!gigaset_add_event(cs, &cs->bcs[cntrl->arg].at_state, |
210 | EV_HUP, NULL, 0, NULL)) { | 214 | EV_HUP, NULL, 0, NULL)) { |
211 | //FIXME what should we do? | 215 | //FIXME what should we do? |
212 | return -ENOMEM; | 216 | return -ENOMEM; |
213 | } | 217 | } |
214 | 218 | ||
215 | dbg(DEBUG_CMD, "scheduling HUP"); | 219 | gig_dbg(DEBUG_CMD, "scheduling HUP"); |
216 | gigaset_schedule_event(cs); | 220 | gigaset_schedule_event(cs); |
217 | 221 | ||
218 | break; | 222 | break; |
219 | case ISDN_CMD_CLREAZ: /* Do not signal incoming signals */ //FIXME | 223 | case ISDN_CMD_CLREAZ: /* Do not signal incoming signals */ //FIXME |
220 | dbg(DEBUG_ANY, "ISDN_CMD_CLREAZ"); | 224 | gig_dbg(DEBUG_ANY, "ISDN_CMD_CLREAZ"); |
221 | break; | 225 | break; |
222 | case ISDN_CMD_SETEAZ: /* Signal incoming calls for given MSN */ //FIXME | 226 | case ISDN_CMD_SETEAZ: /* Signal incoming calls for given MSN */ //FIXME |
223 | dbg(DEBUG_ANY, | 227 | gig_dbg(DEBUG_ANY, |
224 | "ISDN_CMD_SETEAZ (id:%d, channel: %ld, number: %s)", | 228 | "ISDN_CMD_SETEAZ (id: %d, ch: %ld, number: %s)", |
225 | cntrl->driver, cntrl->arg, cntrl->parm.num); | 229 | cntrl->driver, cntrl->arg, cntrl->parm.num); |
226 | break; | 230 | break; |
227 | case ISDN_CMD_SETL2: /* Set L2 to given protocol */ | 231 | case ISDN_CMD_SETL2: /* Set L2 to given protocol */ |
228 | dbg(DEBUG_ANY, "ISDN_CMD_SETL2 (Channel: %ld, Proto: %lx)", | 232 | gig_dbg(DEBUG_ANY, "ISDN_CMD_SETL2 (ch: %ld, proto: %lx)", |
229 | cntrl->arg & 0xff, (cntrl->arg >> 8)); | 233 | cntrl->arg & 0xff, (cntrl->arg >> 8)); |
230 | 234 | ||
231 | if ((cntrl->arg & 0xff) >= cs->channels) { | 235 | if ((cntrl->arg & 0xff) >= cs->channels) { |
232 | err("invalid channel (%u)", | 236 | err("ISDN_CMD_SETL2: invalid channel (%u)", |
233 | (unsigned) cntrl->arg & 0xff); | 237 | (unsigned) cntrl->arg & 0xff); |
234 | return -EINVAL; | 238 | return -EINVAL; |
235 | } | 239 | } |
236 | 240 | ||
237 | if (!gigaset_add_event(cs, &cs->bcs[cntrl->arg & 0xff].at_state, | 241 | if (!gigaset_add_event(cs, &cs->bcs[cntrl->arg & 0xff].at_state, |
238 | EV_PROTO_L2, NULL, cntrl->arg >> 8, | 242 | EV_PROTO_L2, NULL, cntrl->arg >> 8, |
239 | NULL)) { | 243 | NULL)) { |
240 | //FIXME what should we do? | 244 | //FIXME what should we do? |
241 | return -ENOMEM; | 245 | return -ENOMEM; |
242 | } | 246 | } |
243 | 247 | ||
244 | dbg(DEBUG_CMD, "scheduling PROTO_L2"); | 248 | gig_dbg(DEBUG_CMD, "scheduling PROTO_L2"); |
245 | gigaset_schedule_event(cs); | 249 | gigaset_schedule_event(cs); |
246 | break; | 250 | break; |
247 | case ISDN_CMD_SETL3: /* Set L3 to given protocol */ | 251 | case ISDN_CMD_SETL3: /* Set L3 to given protocol */ |
248 | dbg(DEBUG_ANY, "ISDN_CMD_SETL3 (Channel: %ld, Proto: %lx)", | 252 | gig_dbg(DEBUG_ANY, "ISDN_CMD_SETL3 (ch: %ld, proto: %lx)", |
249 | cntrl->arg & 0xff, (cntrl->arg >> 8)); | 253 | cntrl->arg & 0xff, (cntrl->arg >> 8)); |
250 | 254 | ||
251 | if ((cntrl->arg & 0xff) >= cs->channels) { | 255 | if ((cntrl->arg & 0xff) >= cs->channels) { |
252 | err("invalid channel (%u)", | 256 | err("ISDN_CMD_SETL3: invalid channel (%u)", |
253 | (unsigned) cntrl->arg & 0xff); | 257 | (unsigned) cntrl->arg & 0xff); |
254 | return -EINVAL; | 258 | return -EINVAL; |
255 | } | 259 | } |
256 | 260 | ||
257 | if (cntrl->arg >> 8 != ISDN_PROTO_L3_TRANS) { | 261 | if (cntrl->arg >> 8 != ISDN_PROTO_L3_TRANS) { |
258 | err("invalid protocol %lu", cntrl->arg >> 8); | 262 | err("ISDN_CMD_SETL3: invalid protocol %lu", |
263 | cntrl->arg >> 8); | ||
259 | return -EINVAL; | 264 | return -EINVAL; |
260 | } | 265 | } |
261 | 266 | ||
262 | break; | 267 | break; |
263 | case ISDN_CMD_PROCEED: | 268 | case ISDN_CMD_PROCEED: |
264 | dbg(DEBUG_ANY, "ISDN_CMD_PROCEED"); //FIXME | 269 | gig_dbg(DEBUG_ANY, "ISDN_CMD_PROCEED"); //FIXME |
265 | break; | 270 | break; |
266 | case ISDN_CMD_ALERT: | 271 | case ISDN_CMD_ALERT: |
267 | dbg(DEBUG_ANY, "ISDN_CMD_ALERT"); //FIXME | 272 | gig_dbg(DEBUG_ANY, "ISDN_CMD_ALERT"); //FIXME |
268 | if (cntrl->arg >= cs->channels) { | 273 | if (cntrl->arg >= cs->channels) { |
269 | err("invalid channel (%d)", (int) cntrl->arg); | 274 | err("ISDN_CMD_ALERT: invalid channel (%d)", |
275 | (int) cntrl->arg); | ||
270 | return -EINVAL; | 276 | return -EINVAL; |
271 | } | 277 | } |
272 | //bcs = cs->bcs + cntrl->arg; | 278 | //bcs = cs->bcs + cntrl->arg; |
@@ -274,32 +280,31 @@ static int command_from_LL(isdn_ctrl *cntrl) | |||
274 | // FIXME | 280 | // FIXME |
275 | break; | 281 | break; |
276 | case ISDN_CMD_REDIR: | 282 | case ISDN_CMD_REDIR: |
277 | dbg(DEBUG_ANY, "ISDN_CMD_REDIR"); //FIXME | 283 | gig_dbg(DEBUG_ANY, "ISDN_CMD_REDIR"); //FIXME |
278 | break; | 284 | break; |
279 | case ISDN_CMD_PROT_IO: | 285 | case ISDN_CMD_PROT_IO: |
280 | dbg(DEBUG_ANY, "ISDN_CMD_PROT_IO"); | 286 | gig_dbg(DEBUG_ANY, "ISDN_CMD_PROT_IO"); |
281 | break; | 287 | break; |
282 | case ISDN_CMD_FAXCMD: | 288 | case ISDN_CMD_FAXCMD: |
283 | dbg(DEBUG_ANY, "ISDN_CMD_FAXCMD"); | 289 | gig_dbg(DEBUG_ANY, "ISDN_CMD_FAXCMD"); |
284 | break; | 290 | break; |
285 | case ISDN_CMD_GETL2: | 291 | case ISDN_CMD_GETL2: |
286 | dbg(DEBUG_ANY, "ISDN_CMD_GETL2"); | 292 | gig_dbg(DEBUG_ANY, "ISDN_CMD_GETL2"); |
287 | break; | 293 | break; |
288 | case ISDN_CMD_GETL3: | 294 | case ISDN_CMD_GETL3: |
289 | dbg(DEBUG_ANY, "ISDN_CMD_GETL3"); | 295 | gig_dbg(DEBUG_ANY, "ISDN_CMD_GETL3"); |
290 | break; | 296 | break; |
291 | case ISDN_CMD_GETEAZ: | 297 | case ISDN_CMD_GETEAZ: |
292 | dbg(DEBUG_ANY, "ISDN_CMD_GETEAZ"); | 298 | gig_dbg(DEBUG_ANY, "ISDN_CMD_GETEAZ"); |
293 | break; | 299 | break; |
294 | case ISDN_CMD_SETSIL: | 300 | case ISDN_CMD_SETSIL: |
295 | dbg(DEBUG_ANY, "ISDN_CMD_SETSIL"); | 301 | gig_dbg(DEBUG_ANY, "ISDN_CMD_SETSIL"); |
296 | break; | 302 | break; |
297 | case ISDN_CMD_GETSIL: | 303 | case ISDN_CMD_GETSIL: |
298 | dbg(DEBUG_ANY, "ISDN_CMD_GETSIL"); | 304 | gig_dbg(DEBUG_ANY, "ISDN_CMD_GETSIL"); |
299 | break; | 305 | break; |
300 | default: | 306 | default: |
301 | err("unknown command %d from LL", | 307 | err("unknown command %d from LL", cntrl->command); |
302 | cntrl->command); | ||
303 | return -EINVAL; | 308 | return -EINVAL; |
304 | } | 309 | } |
305 | 310 | ||
@@ -344,7 +349,8 @@ int gigaset_isdn_setup_dial(struct at_state_t *at_state, void *data) | |||
344 | proto = 2; /* 0: Bitsynchron, 1: HDLC, 2: voice */ | 349 | proto = 2; /* 0: Bitsynchron, 1: HDLC, 2: voice */ |
345 | break; | 350 | break; |
346 | default: | 351 | default: |
347 | err("invalid protocol: %u", bcs->proto2); | 352 | dev_err(bcs->cs->dev, "%s: invalid L2 protocol: %u\n", |
353 | __func__, bcs->proto2); | ||
348 | return -EINVAL; | 354 | return -EINVAL; |
349 | } | 355 | } |
350 | 356 | ||
@@ -372,7 +378,7 @@ int gigaset_isdn_setup_dial(struct at_state_t *at_state, void *data) | |||
372 | bcs->commands[i] = NULL; | 378 | bcs->commands[i] = NULL; |
373 | if (length[i] && | 379 | if (length[i] && |
374 | !(bcs->commands[i] = kmalloc(length[i], GFP_ATOMIC))) { | 380 | !(bcs->commands[i] = kmalloc(length[i], GFP_ATOMIC))) { |
375 | err("out of memory"); | 381 | dev_err(bcs->cs->dev, "out of memory\n"); |
376 | return -ENOMEM; | 382 | return -ENOMEM; |
377 | } | 383 | } |
378 | } | 384 | } |
@@ -417,7 +423,8 @@ int gigaset_isdn_setup_accept(struct at_state_t *at_state) | |||
417 | proto = 2; /* 0: Bitsynchron, 1: HDLC, 2: voice */ | 423 | proto = 2; /* 0: Bitsynchron, 1: HDLC, 2: voice */ |
418 | break; | 424 | break; |
419 | default: | 425 | default: |
420 | err("invalid protocol: %u", bcs->proto2); | 426 | dev_err(at_state->cs->dev, "%s: invalid protocol: %u\n", |
427 | __func__, bcs->proto2); | ||
421 | return -EINVAL; | 428 | return -EINVAL; |
422 | } | 429 | } |
423 | 430 | ||
@@ -434,7 +441,7 @@ int gigaset_isdn_setup_accept(struct at_state_t *at_state) | |||
434 | bcs->commands[i] = NULL; | 441 | bcs->commands[i] = NULL; |
435 | if (length[i] && | 442 | if (length[i] && |
436 | !(bcs->commands[i] = kmalloc(length[i], GFP_ATOMIC))) { | 443 | !(bcs->commands[i] = kmalloc(length[i], GFP_ATOMIC))) { |
437 | err("out of memory"); | 444 | dev_err(at_state->cs->dev, "out of memory\n"); |
438 | return -ENOMEM; | 445 | return -ENOMEM; |
439 | } | 446 | } |
440 | } | 447 | } |
@@ -473,7 +480,7 @@ int gigaset_isdn_icall(struct at_state_t *at_state) | |||
473 | response.parm.setup.si1 = 1; | 480 | response.parm.setup.si1 = 1; |
474 | response.parm.setup.si2 = 2; | 481 | response.parm.setup.si2 = 2; |
475 | } else { | 482 | } else { |
476 | warn("RING ignored - unsupported BC %s", | 483 | dev_warn(cs->dev, "RING ignored - unsupported BC %s\n", |
477 | at_state->str_var[STR_ZBC]); | 484 | at_state->str_var[STR_ZBC]); |
478 | return ICALL_IGNORE; | 485 | return ICALL_IGNORE; |
479 | } | 486 | } |
@@ -491,18 +498,17 @@ int gigaset_isdn_icall(struct at_state_t *at_state) | |||
491 | response.parm.setup.eazmsn[0] = 0; | 498 | response.parm.setup.eazmsn[0] = 0; |
492 | 499 | ||
493 | if (!bcs) { | 500 | if (!bcs) { |
494 | notice("no channel for incoming call"); | 501 | dev_notice(cs->dev, "no channel for incoming call\n"); |
495 | dbg(DEBUG_CMD, "Sending ICALLW"); | ||
496 | response.command = ISDN_STAT_ICALLW; | 502 | response.command = ISDN_STAT_ICALLW; |
497 | response.arg = 0; //FIXME | 503 | response.arg = 0; //FIXME |
498 | } else { | 504 | } else { |
499 | dbg(DEBUG_CMD, "Sending ICALL"); | 505 | gig_dbg(DEBUG_CMD, "Sending ICALL"); |
500 | response.command = ISDN_STAT_ICALL; | 506 | response.command = ISDN_STAT_ICALL; |
501 | response.arg = bcs->channel; //FIXME | 507 | response.arg = bcs->channel; //FIXME |
502 | } | 508 | } |
503 | response.driver = cs->myid; | 509 | response.driver = cs->myid; |
504 | retval = cs->iif.statcallb(&response); | 510 | retval = cs->iif.statcallb(&response); |
505 | dbg(DEBUG_CMD, "Response: %d", retval); | 511 | gig_dbg(DEBUG_CMD, "Response: %d", retval); |
506 | switch (retval) { | 512 | switch (retval) { |
507 | case 0: /* no takers */ | 513 | case 0: /* no takers */ |
508 | return ICALL_IGNORE; | 514 | return ICALL_IGNORE; |
@@ -512,7 +518,8 @@ int gigaset_isdn_icall(struct at_state_t *at_state) | |||
512 | case 2: /* reject */ | 518 | case 2: /* reject */ |
513 | return ICALL_REJECT; | 519 | return ICALL_REJECT; |
514 | case 3: /* incomplete */ | 520 | case 3: /* incomplete */ |
515 | warn("LL requested unsupported feature: Incomplete Number"); | 521 | dev_warn(cs->dev, |
522 | "LL requested unsupported feature: Incomplete Number\n"); | ||
516 | return ICALL_IGNORE; | 523 | return ICALL_IGNORE; |
517 | case 4: /* proceeding */ | 524 | case 4: /* proceeding */ |
518 | /* Gigaset will send ALERTING anyway. | 525 | /* Gigaset will send ALERTING anyway. |
@@ -520,10 +527,11 @@ int gigaset_isdn_icall(struct at_state_t *at_state) | |||
520 | */ | 527 | */ |
521 | return ICALL_ACCEPT; | 528 | return ICALL_ACCEPT; |
522 | case 5: /* deflect */ | 529 | case 5: /* deflect */ |
523 | warn("LL requested unsupported feature: Call Deflection"); | 530 | dev_warn(cs->dev, |
531 | "LL requested unsupported feature: Call Deflection\n"); | ||
524 | return ICALL_IGNORE; | 532 | return ICALL_IGNORE; |
525 | default: | 533 | default: |
526 | err("LL error %d on ICALL", retval); | 534 | dev_err(cs->dev, "LL error %d on ICALL\n", retval); |
527 | return ICALL_IGNORE; | 535 | return ICALL_IGNORE; |
528 | } | 536 | } |
529 | } | 537 | } |
@@ -533,7 +541,7 @@ int gigaset_register_to_LL(struct cardstate *cs, const char *isdnid) | |||
533 | { | 541 | { |
534 | isdn_if *iif = &cs->iif; | 542 | isdn_if *iif = &cs->iif; |
535 | 543 | ||
536 | dbg(DEBUG_ANY, "Register driver capabilities to LL"); | 544 | gig_dbg(DEBUG_ANY, "Register driver capabilities to LL"); |
537 | 545 | ||
538 | //iif->id[sizeof(iif->id) - 1]=0; | 546 | //iif->id[sizeof(iif->id) - 1]=0; |
539 | //strncpy(iif->id, isdnid, sizeof(iif->id) - 1); | 547 | //strncpy(iif->id, isdnid, sizeof(iif->id) - 1); |
@@ -551,17 +559,17 @@ int gigaset_register_to_LL(struct cardstate *cs, const char *isdnid) | |||
551 | #endif | 559 | #endif |
552 | ISDN_FEATURE_L3_TRANS | | 560 | ISDN_FEATURE_L3_TRANS | |
553 | ISDN_FEATURE_P_EURO; | 561 | ISDN_FEATURE_P_EURO; |
554 | iif->hl_hdrlen = HW_HDR_LEN; /* Area for storing ack */ | 562 | iif->hl_hdrlen = HW_HDR_LEN; /* Area for storing ack */ |
555 | iif->command = command_from_LL; | 563 | iif->command = command_from_LL; |
556 | iif->writebuf_skb = writebuf_from_LL; | 564 | iif->writebuf_skb = writebuf_from_LL; |
557 | iif->writecmd = NULL; /* Don't support isdnctrl */ | 565 | iif->writecmd = NULL; /* Don't support isdnctrl */ |
558 | iif->readstat = NULL; /* Don't support isdnctrl */ | 566 | iif->readstat = NULL; /* Don't support isdnctrl */ |
559 | iif->rcvcallb_skb = NULL; /* Will be set by LL */ | 567 | iif->rcvcallb_skb = NULL; /* Will be set by LL */ |
560 | iif->statcallb = NULL; /* Will be set by LL */ | 568 | iif->statcallb = NULL; /* Will be set by LL */ |
561 | 569 | ||
562 | if (!register_isdn(iif)) | 570 | if (!register_isdn(iif)) |
563 | return 0; | 571 | return 0; |
564 | 572 | ||
565 | cs->myid = iif->channels; /* Set my device id */ | 573 | cs->myid = iif->channels; /* Set my device id */ |
566 | return 1; | 574 | return 1; |
567 | } | 575 | } |
diff --git a/drivers/isdn/gigaset/interface.c b/drivers/isdn/gigaset/interface.c index c225de9620b1..f3dce8c4831b 100644 --- a/drivers/isdn/gigaset/interface.c +++ b/drivers/isdn/gigaset/interface.c | |||
@@ -22,7 +22,7 @@ static int if_lock(struct cardstate *cs, int *arg) | |||
22 | { | 22 | { |
23 | int cmd = *arg; | 23 | int cmd = *arg; |
24 | 24 | ||
25 | dbg(DEBUG_IF, "%u: if_lock (%d)", cs->minor_index, cmd); | 25 | gig_dbg(DEBUG_IF, "%u: if_lock (%d)", cs->minor_index, cmd); |
26 | 26 | ||
27 | if (cmd > 1) | 27 | if (cmd > 1) |
28 | return -EINVAL; | 28 | return -EINVAL; |
@@ -42,12 +42,12 @@ static int if_lock(struct cardstate *cs, int *arg) | |||
42 | 42 | ||
43 | cs->waiting = 1; | 43 | cs->waiting = 1; |
44 | if (!gigaset_add_event(cs, &cs->at_state, EV_IF_LOCK, | 44 | if (!gigaset_add_event(cs, &cs->at_state, EV_IF_LOCK, |
45 | NULL, cmd, NULL)) { | 45 | NULL, cmd, NULL)) { |
46 | cs->waiting = 0; | 46 | cs->waiting = 0; |
47 | return -ENOMEM; | 47 | return -ENOMEM; |
48 | } | 48 | } |
49 | 49 | ||
50 | dbg(DEBUG_CMD, "scheduling IF_LOCK"); | 50 | gig_dbg(DEBUG_CMD, "scheduling IF_LOCK"); |
51 | gigaset_schedule_event(cs); | 51 | gigaset_schedule_event(cs); |
52 | 52 | ||
53 | wait_event(cs->waitqueue, !cs->waiting); | 53 | wait_event(cs->waitqueue, !cs->waiting); |
@@ -66,7 +66,7 @@ static int if_version(struct cardstate *cs, unsigned arg[4]) | |||
66 | static const unsigned compat[4] = GIG_COMPAT; | 66 | static const unsigned compat[4] = GIG_COMPAT; |
67 | unsigned cmd = arg[0]; | 67 | unsigned cmd = arg[0]; |
68 | 68 | ||
69 | dbg(DEBUG_IF, "%u: if_version (%d)", cs->minor_index, cmd); | 69 | gig_dbg(DEBUG_IF, "%u: if_version (%d)", cs->minor_index, cmd); |
70 | 70 | ||
71 | switch (cmd) { | 71 | switch (cmd) { |
72 | case GIGVER_DRIVER: | 72 | case GIGVER_DRIVER: |
@@ -78,12 +78,12 @@ static int if_version(struct cardstate *cs, unsigned arg[4]) | |||
78 | case GIGVER_FWBASE: | 78 | case GIGVER_FWBASE: |
79 | cs->waiting = 1; | 79 | cs->waiting = 1; |
80 | if (!gigaset_add_event(cs, &cs->at_state, EV_IF_VER, | 80 | if (!gigaset_add_event(cs, &cs->at_state, EV_IF_VER, |
81 | NULL, 0, arg)) { | 81 | NULL, 0, arg)) { |
82 | cs->waiting = 0; | 82 | cs->waiting = 0; |
83 | return -ENOMEM; | 83 | return -ENOMEM; |
84 | } | 84 | } |
85 | 85 | ||
86 | dbg(DEBUG_CMD, "scheduling IF_VER"); | 86 | gig_dbg(DEBUG_CMD, "scheduling IF_VER"); |
87 | gigaset_schedule_event(cs); | 87 | gigaset_schedule_event(cs); |
88 | 88 | ||
89 | wait_event(cs->waitqueue, !cs->waiting); | 89 | wait_event(cs->waitqueue, !cs->waiting); |
@@ -99,7 +99,7 @@ static int if_version(struct cardstate *cs, unsigned arg[4]) | |||
99 | 99 | ||
100 | static int if_config(struct cardstate *cs, int *arg) | 100 | static int if_config(struct cardstate *cs, int *arg) |
101 | { | 101 | { |
102 | dbg(DEBUG_IF, "%u: if_config (%d)", cs->minor_index, *arg); | 102 | gig_dbg(DEBUG_IF, "%u: if_config (%d)", cs->minor_index, *arg); |
103 | 103 | ||
104 | if (*arg != 1) | 104 | if (*arg != 1) |
105 | return -EINVAL; | 105 | return -EINVAL; |
@@ -117,7 +117,7 @@ static int if_config(struct cardstate *cs, int *arg) | |||
117 | static int if_open(struct tty_struct *tty, struct file *filp); | 117 | static int if_open(struct tty_struct *tty, struct file *filp); |
118 | static void if_close(struct tty_struct *tty, struct file *filp); | 118 | static void if_close(struct tty_struct *tty, struct file *filp); |
119 | static int if_ioctl(struct tty_struct *tty, struct file *file, | 119 | static int if_ioctl(struct tty_struct *tty, struct file *file, |
120 | unsigned int cmd, unsigned long arg); | 120 | unsigned int cmd, unsigned long arg); |
121 | static int if_write_room(struct tty_struct *tty); | 121 | static int if_write_room(struct tty_struct *tty); |
122 | static int if_chars_in_buffer(struct tty_struct *tty); | 122 | static int if_chars_in_buffer(struct tty_struct *tty); |
123 | static void if_throttle(struct tty_struct *tty); | 123 | static void if_throttle(struct tty_struct *tty); |
@@ -125,9 +125,9 @@ static void if_unthrottle(struct tty_struct *tty); | |||
125 | static void if_set_termios(struct tty_struct *tty, struct termios *old); | 125 | static void if_set_termios(struct tty_struct *tty, struct termios *old); |
126 | static int if_tiocmget(struct tty_struct *tty, struct file *file); | 126 | static int if_tiocmget(struct tty_struct *tty, struct file *file); |
127 | static int if_tiocmset(struct tty_struct *tty, struct file *file, | 127 | static int if_tiocmset(struct tty_struct *tty, struct file *file, |
128 | unsigned int set, unsigned int clear); | 128 | unsigned int set, unsigned int clear); |
129 | static int if_write(struct tty_struct *tty, | 129 | static int if_write(struct tty_struct *tty, |
130 | const unsigned char *buf, int count); | 130 | const unsigned char *buf, int count); |
131 | 131 | ||
132 | static struct tty_operations if_ops = { | 132 | static struct tty_operations if_ops = { |
133 | .open = if_open, | 133 | .open = if_open, |
@@ -151,8 +151,8 @@ static int if_open(struct tty_struct *tty, struct file *filp) | |||
151 | struct cardstate *cs; | 151 | struct cardstate *cs; |
152 | unsigned long flags; | 152 | unsigned long flags; |
153 | 153 | ||
154 | dbg(DEBUG_IF, "%d+%d: %s()", tty->driver->minor_start, tty->index, | 154 | gig_dbg(DEBUG_IF, "%d+%d: %s()", |
155 | __FUNCTION__); | 155 | tty->driver->minor_start, tty->index, __func__); |
156 | 156 | ||
157 | tty->driver_data = NULL; | 157 | tty->driver_data = NULL; |
158 | 158 | ||
@@ -184,16 +184,16 @@ static void if_close(struct tty_struct *tty, struct file *filp) | |||
184 | 184 | ||
185 | cs = (struct cardstate *) tty->driver_data; | 185 | cs = (struct cardstate *) tty->driver_data; |
186 | if (!cs) { | 186 | if (!cs) { |
187 | err("cs==NULL in %s", __FUNCTION__); | 187 | err("cs==NULL in %s", __func__); |
188 | return; | 188 | return; |
189 | } | 189 | } |
190 | 190 | ||
191 | dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __FUNCTION__); | 191 | gig_dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __func__); |
192 | 192 | ||
193 | down(&cs->sem); | 193 | down(&cs->sem); |
194 | 194 | ||
195 | if (!cs->open_count) | 195 | if (!cs->open_count) |
196 | warn("%s: device not opened", __FUNCTION__); | 196 | warn("%s: device not opened", __func__); |
197 | else { | 197 | else { |
198 | if (!--cs->open_count) { | 198 | if (!--cs->open_count) { |
199 | spin_lock_irqsave(&cs->lock, flags); | 199 | spin_lock_irqsave(&cs->lock, flags); |
@@ -206,7 +206,7 @@ static void if_close(struct tty_struct *tty, struct file *filp) | |||
206 | } | 206 | } |
207 | 207 | ||
208 | static int if_ioctl(struct tty_struct *tty, struct file *file, | 208 | static int if_ioctl(struct tty_struct *tty, struct file *file, |
209 | unsigned int cmd, unsigned long arg) | 209 | unsigned int cmd, unsigned long arg) |
210 | { | 210 | { |
211 | struct cardstate *cs; | 211 | struct cardstate *cs; |
212 | int retval = -ENODEV; | 212 | int retval = -ENODEV; |
@@ -216,17 +216,17 @@ static int if_ioctl(struct tty_struct *tty, struct file *file, | |||
216 | 216 | ||
217 | cs = (struct cardstate *) tty->driver_data; | 217 | cs = (struct cardstate *) tty->driver_data; |
218 | if (!cs) { | 218 | if (!cs) { |
219 | err("cs==NULL in %s", __FUNCTION__); | 219 | err("cs==NULL in %s", __func__); |
220 | return -ENODEV; | 220 | return -ENODEV; |
221 | } | 221 | } |
222 | 222 | ||
223 | dbg(DEBUG_IF, "%u: %s(0x%x)", cs->minor_index, __FUNCTION__, cmd); | 223 | gig_dbg(DEBUG_IF, "%u: %s(0x%x)", cs->minor_index, __func__, cmd); |
224 | 224 | ||
225 | if (down_interruptible(&cs->sem)) | 225 | if (down_interruptible(&cs->sem)) |
226 | return -ERESTARTSYS; // FIXME -EINTR? | 226 | return -ERESTARTSYS; // FIXME -EINTR? |
227 | 227 | ||
228 | if (!cs->open_count) | 228 | if (!cs->open_count) |
229 | warn("%s: device not opened", __FUNCTION__); | 229 | warn("%s: device not opened", __func__); |
230 | else { | 230 | else { |
231 | retval = 0; | 231 | retval = 0; |
232 | switch (cmd) { | 232 | switch (cmd) { |
@@ -247,33 +247,33 @@ static int if_ioctl(struct tty_struct *tty, struct file *file, | |||
247 | case GIGASET_BRKCHARS: | 247 | case GIGASET_BRKCHARS: |
248 | //FIXME test if MS_LOCKED | 248 | //FIXME test if MS_LOCKED |
249 | gigaset_dbg_buffer(DEBUG_IF, "GIGASET_BRKCHARS", | 249 | gigaset_dbg_buffer(DEBUG_IF, "GIGASET_BRKCHARS", |
250 | 6, (const unsigned char *) arg, 1); | 250 | 6, (const unsigned char *) arg, 1); |
251 | if (!atomic_read(&cs->connected)) { | 251 | if (!atomic_read(&cs->connected)) { |
252 | dbg(DEBUG_ANY, | 252 | gig_dbg(DEBUG_ANY, |
253 | "can't communicate with unplugged device"); | 253 | "can't communicate with unplugged device"); |
254 | retval = -ENODEV; | 254 | retval = -ENODEV; |
255 | break; | 255 | break; |
256 | } | 256 | } |
257 | retval = copy_from_user(&buf, | 257 | retval = copy_from_user(&buf, |
258 | (const unsigned char __user *) arg, 6) | 258 | (const unsigned char __user *) arg, 6) |
259 | ? -EFAULT : 0; | 259 | ? -EFAULT : 0; |
260 | if (retval >= 0) | 260 | if (retval >= 0) |
261 | retval = cs->ops->brkchars(cs, buf); | 261 | retval = cs->ops->brkchars(cs, buf); |
262 | break; | 262 | break; |
263 | case GIGASET_VERSION: | 263 | case GIGASET_VERSION: |
264 | retval = copy_from_user(version, | 264 | retval = copy_from_user(version, |
265 | (unsigned __user *) arg, | 265 | (unsigned __user *) arg, sizeof version) |
266 | sizeof version) ? -EFAULT : 0; | 266 | ? -EFAULT : 0; |
267 | if (retval >= 0) | 267 | if (retval >= 0) |
268 | retval = if_version(cs, version); | 268 | retval = if_version(cs, version); |
269 | if (retval >= 0) | 269 | if (retval >= 0) |
270 | retval = copy_to_user((unsigned __user *) arg, | 270 | retval = copy_to_user((unsigned __user *) arg, |
271 | version, sizeof version) | 271 | version, sizeof version) |
272 | ? -EFAULT : 0; | 272 | ? -EFAULT : 0; |
273 | break; | 273 | break; |
274 | default: | 274 | default: |
275 | dbg(DEBUG_ANY, "%s: arg not supported - 0x%04x", | 275 | gig_dbg(DEBUG_ANY, "%s: arg not supported - 0x%04x", |
276 | __FUNCTION__, cmd); | 276 | __func__, cmd); |
277 | retval = -ENOIOCTLCMD; | 277 | retval = -ENOIOCTLCMD; |
278 | } | 278 | } |
279 | } | 279 | } |
@@ -290,11 +290,11 @@ static int if_tiocmget(struct tty_struct *tty, struct file *file) | |||
290 | 290 | ||
291 | cs = (struct cardstate *) tty->driver_data; | 291 | cs = (struct cardstate *) tty->driver_data; |
292 | if (!cs) { | 292 | if (!cs) { |
293 | err("cs==NULL in %s", __FUNCTION__); | 293 | err("cs==NULL in %s", __func__); |
294 | return -ENODEV; | 294 | return -ENODEV; |
295 | } | 295 | } |
296 | 296 | ||
297 | dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __FUNCTION__); | 297 | gig_dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __func__); |
298 | 298 | ||
299 | if (down_interruptible(&cs->sem)) | 299 | if (down_interruptible(&cs->sem)) |
300 | return -ERESTARTSYS; // FIXME -EINTR? | 300 | return -ERESTARTSYS; // FIXME -EINTR? |
@@ -308,7 +308,7 @@ static int if_tiocmget(struct tty_struct *tty, struct file *file) | |||
308 | } | 308 | } |
309 | 309 | ||
310 | static int if_tiocmset(struct tty_struct *tty, struct file *file, | 310 | static int if_tiocmset(struct tty_struct *tty, struct file *file, |
311 | unsigned int set, unsigned int clear) | 311 | unsigned int set, unsigned int clear) |
312 | { | 312 | { |
313 | struct cardstate *cs; | 313 | struct cardstate *cs; |
314 | int retval; | 314 | int retval; |
@@ -316,18 +316,18 @@ static int if_tiocmset(struct tty_struct *tty, struct file *file, | |||
316 | 316 | ||
317 | cs = (struct cardstate *) tty->driver_data; | 317 | cs = (struct cardstate *) tty->driver_data; |
318 | if (!cs) { | 318 | if (!cs) { |
319 | err("cs==NULL in %s", __FUNCTION__); | 319 | err("cs==NULL in %s", __func__); |
320 | return -ENODEV; | 320 | return -ENODEV; |
321 | } | 321 | } |
322 | 322 | ||
323 | dbg(DEBUG_IF, | 323 | gig_dbg(DEBUG_IF, "%u: %s(0x%x, 0x%x)", |
324 | "%u: %s(0x%x, 0x%x)", cs->minor_index, __FUNCTION__, set, clear); | 324 | cs->minor_index, __func__, set, clear); |
325 | 325 | ||
326 | if (down_interruptible(&cs->sem)) | 326 | if (down_interruptible(&cs->sem)) |
327 | return -ERESTARTSYS; // FIXME -EINTR? | 327 | return -ERESTARTSYS; // FIXME -EINTR? |
328 | 328 | ||
329 | if (!atomic_read(&cs->connected)) { | 329 | if (!atomic_read(&cs->connected)) { |
330 | dbg(DEBUG_ANY, "can't communicate with unplugged device"); | 330 | gig_dbg(DEBUG_ANY, "can't communicate with unplugged device"); |
331 | retval = -ENODEV; | 331 | retval = -ENODEV; |
332 | } else { | 332 | } else { |
333 | mc = (cs->control_state | set) & ~clear & (TIOCM_RTS|TIOCM_DTR); | 333 | mc = (cs->control_state | set) & ~clear & (TIOCM_RTS|TIOCM_DTR); |
@@ -347,26 +347,26 @@ static int if_write(struct tty_struct *tty, const unsigned char *buf, int count) | |||
347 | 347 | ||
348 | cs = (struct cardstate *) tty->driver_data; | 348 | cs = (struct cardstate *) tty->driver_data; |
349 | if (!cs) { | 349 | if (!cs) { |
350 | err("cs==NULL in %s", __FUNCTION__); | 350 | err("cs==NULL in %s", __func__); |
351 | return -ENODEV; | 351 | return -ENODEV; |
352 | } | 352 | } |
353 | 353 | ||
354 | dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __FUNCTION__); | 354 | gig_dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __func__); |
355 | 355 | ||
356 | if (down_interruptible(&cs->sem)) | 356 | if (down_interruptible(&cs->sem)) |
357 | return -ERESTARTSYS; // FIXME -EINTR? | 357 | return -ERESTARTSYS; // FIXME -EINTR? |
358 | 358 | ||
359 | if (!cs->open_count) | 359 | if (!cs->open_count) |
360 | warn("%s: device not opened", __FUNCTION__); | 360 | warn("%s: device not opened", __func__); |
361 | else if (atomic_read(&cs->mstate) != MS_LOCKED) { | 361 | else if (atomic_read(&cs->mstate) != MS_LOCKED) { |
362 | warn("can't write to unlocked device"); | 362 | warn("can't write to unlocked device"); |
363 | retval = -EBUSY; | 363 | retval = -EBUSY; |
364 | } else if (!atomic_read(&cs->connected)) { | 364 | } else if (!atomic_read(&cs->connected)) { |
365 | dbg(DEBUG_ANY, "can't write to unplugged device"); | 365 | gig_dbg(DEBUG_ANY, "can't write to unplugged device"); |
366 | retval = -EBUSY; //FIXME | 366 | retval = -EBUSY; //FIXME |
367 | } else { | 367 | } else { |
368 | retval = cs->ops->write_cmd(cs, buf, count, | 368 | retval = cs->ops->write_cmd(cs, buf, count, |
369 | &cs->if_wake_tasklet); | 369 | &cs->if_wake_tasklet); |
370 | } | 370 | } |
371 | 371 | ||
372 | up(&cs->sem); | 372 | up(&cs->sem); |
@@ -381,22 +381,22 @@ static int if_write_room(struct tty_struct *tty) | |||
381 | 381 | ||
382 | cs = (struct cardstate *) tty->driver_data; | 382 | cs = (struct cardstate *) tty->driver_data; |
383 | if (!cs) { | 383 | if (!cs) { |
384 | err("cs==NULL in %s", __FUNCTION__); | 384 | err("cs==NULL in %s", __func__); |
385 | return -ENODEV; | 385 | return -ENODEV; |
386 | } | 386 | } |
387 | 387 | ||
388 | dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __FUNCTION__); | 388 | gig_dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __func__); |
389 | 389 | ||
390 | if (down_interruptible(&cs->sem)) | 390 | if (down_interruptible(&cs->sem)) |
391 | return -ERESTARTSYS; // FIXME -EINTR? | 391 | return -ERESTARTSYS; // FIXME -EINTR? |
392 | 392 | ||
393 | if (!cs->open_count) | 393 | if (!cs->open_count) |
394 | warn("%s: device not opened", __FUNCTION__); | 394 | warn("%s: device not opened", __func__); |
395 | else if (atomic_read(&cs->mstate) != MS_LOCKED) { | 395 | else if (atomic_read(&cs->mstate) != MS_LOCKED) { |
396 | warn("can't write to unlocked device"); | 396 | warn("can't write to unlocked device"); |
397 | retval = -EBUSY; //FIXME | 397 | retval = -EBUSY; //FIXME |
398 | } else if (!atomic_read(&cs->connected)) { | 398 | } else if (!atomic_read(&cs->connected)) { |
399 | dbg(DEBUG_ANY, "can't write to unplugged device"); | 399 | gig_dbg(DEBUG_ANY, "can't write to unplugged device"); |
400 | retval = -EBUSY; //FIXME | 400 | retval = -EBUSY; //FIXME |
401 | } else | 401 | } else |
402 | retval = cs->ops->write_room(cs); | 402 | retval = cs->ops->write_room(cs); |
@@ -413,22 +413,22 @@ static int if_chars_in_buffer(struct tty_struct *tty) | |||
413 | 413 | ||
414 | cs = (struct cardstate *) tty->driver_data; | 414 | cs = (struct cardstate *) tty->driver_data; |
415 | if (!cs) { | 415 | if (!cs) { |
416 | err("cs==NULL in %s", __FUNCTION__); | 416 | err("cs==NULL in %s", __func__); |
417 | return -ENODEV; | 417 | return -ENODEV; |
418 | } | 418 | } |
419 | 419 | ||
420 | dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __FUNCTION__); | 420 | gig_dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __func__); |
421 | 421 | ||
422 | if (down_interruptible(&cs->sem)) | 422 | if (down_interruptible(&cs->sem)) |
423 | return -ERESTARTSYS; // FIXME -EINTR? | 423 | return -ERESTARTSYS; // FIXME -EINTR? |
424 | 424 | ||
425 | if (!cs->open_count) | 425 | if (!cs->open_count) |
426 | warn("%s: device not opened", __FUNCTION__); | 426 | warn("%s: device not opened", __func__); |
427 | else if (atomic_read(&cs->mstate) != MS_LOCKED) { | 427 | else if (atomic_read(&cs->mstate) != MS_LOCKED) { |
428 | warn("can't write to unlocked device"); | 428 | warn("can't write to unlocked device"); |
429 | retval = -EBUSY; | 429 | retval = -EBUSY; |
430 | } else if (!atomic_read(&cs->connected)) { | 430 | } else if (!atomic_read(&cs->connected)) { |
431 | dbg(DEBUG_ANY, "can't write to unplugged device"); | 431 | gig_dbg(DEBUG_ANY, "can't write to unplugged device"); |
432 | retval = -EBUSY; //FIXME | 432 | retval = -EBUSY; //FIXME |
433 | } else | 433 | } else |
434 | retval = cs->ops->chars_in_buffer(cs); | 434 | retval = cs->ops->chars_in_buffer(cs); |
@@ -444,16 +444,16 @@ static void if_throttle(struct tty_struct *tty) | |||
444 | 444 | ||
445 | cs = (struct cardstate *) tty->driver_data; | 445 | cs = (struct cardstate *) tty->driver_data; |
446 | if (!cs) { | 446 | if (!cs) { |
447 | err("cs==NULL in %s", __FUNCTION__); | 447 | err("cs==NULL in %s", __func__); |
448 | return; | 448 | return; |
449 | } | 449 | } |
450 | 450 | ||
451 | dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __FUNCTION__); | 451 | gig_dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __func__); |
452 | 452 | ||
453 | down(&cs->sem); | 453 | down(&cs->sem); |
454 | 454 | ||
455 | if (!cs->open_count) | 455 | if (!cs->open_count) |
456 | warn("%s: device not opened", __FUNCTION__); | 456 | warn("%s: device not opened", __func__); |
457 | else { | 457 | else { |
458 | //FIXME | 458 | //FIXME |
459 | } | 459 | } |
@@ -467,16 +467,16 @@ static void if_unthrottle(struct tty_struct *tty) | |||
467 | 467 | ||
468 | cs = (struct cardstate *) tty->driver_data; | 468 | cs = (struct cardstate *) tty->driver_data; |
469 | if (!cs) { | 469 | if (!cs) { |
470 | err("cs==NULL in %s", __FUNCTION__); | 470 | err("cs==NULL in %s", __func__); |
471 | return; | 471 | return; |
472 | } | 472 | } |
473 | 473 | ||
474 | dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __FUNCTION__); | 474 | gig_dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __func__); |
475 | 475 | ||
476 | down(&cs->sem); | 476 | down(&cs->sem); |
477 | 477 | ||
478 | if (!cs->open_count) | 478 | if (!cs->open_count) |
479 | warn("%s: device not opened", __FUNCTION__); | 479 | warn("%s: device not opened", __func__); |
480 | else { | 480 | else { |
481 | //FIXME | 481 | //FIXME |
482 | } | 482 | } |
@@ -494,21 +494,21 @@ static void if_set_termios(struct tty_struct *tty, struct termios *old) | |||
494 | 494 | ||
495 | cs = (struct cardstate *) tty->driver_data; | 495 | cs = (struct cardstate *) tty->driver_data; |
496 | if (!cs) { | 496 | if (!cs) { |
497 | err("cs==NULL in %s", __FUNCTION__); | 497 | err("cs==NULL in %s", __func__); |
498 | return; | 498 | return; |
499 | } | 499 | } |
500 | 500 | ||
501 | dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __FUNCTION__); | 501 | gig_dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __func__); |
502 | 502 | ||
503 | down(&cs->sem); | 503 | down(&cs->sem); |
504 | 504 | ||
505 | if (!cs->open_count) { | 505 | if (!cs->open_count) { |
506 | warn("%s: device not opened", __FUNCTION__); | 506 | warn("%s: device not opened", __func__); |
507 | goto out; | 507 | goto out; |
508 | } | 508 | } |
509 | 509 | ||
510 | if (!atomic_read(&cs->connected)) { | 510 | if (!atomic_read(&cs->connected)) { |
511 | dbg(DEBUG_ANY, "can't communicate with unplugged device"); | 511 | gig_dbg(DEBUG_ANY, "can't communicate with unplugged device"); |
512 | goto out; | 512 | goto out; |
513 | } | 513 | } |
514 | 514 | ||
@@ -516,8 +516,8 @@ static void if_set_termios(struct tty_struct *tty, struct termios *old) | |||
516 | iflag = tty->termios->c_iflag; | 516 | iflag = tty->termios->c_iflag; |
517 | cflag = tty->termios->c_cflag; | 517 | cflag = tty->termios->c_cflag; |
518 | old_cflag = old ? old->c_cflag : cflag; //FIXME? | 518 | old_cflag = old ? old->c_cflag : cflag; //FIXME? |
519 | dbg(DEBUG_IF, "%u: iflag %x cflag %x old %x", cs->minor_index, | 519 | gig_dbg(DEBUG_IF, "%u: iflag %x cflag %x old %x", |
520 | iflag, cflag, old_cflag); | 520 | cs->minor_index, iflag, cflag, old_cflag); |
521 | 521 | ||
522 | /* get a local copy of the current port settings */ | 522 | /* get a local copy of the current port settings */ |
523 | control_state = cs->control_state; | 523 | control_state = cs->control_state; |
@@ -529,14 +529,15 @@ static void if_set_termios(struct tty_struct *tty, struct termios *old) | |||
529 | * Premature optimization is the root of all evil. | 529 | * Premature optimization is the root of all evil. |
530 | */ | 530 | */ |
531 | 531 | ||
532 | /* reassert DTR and (maybe) RTS on transition from B0 */ | 532 | /* reassert DTR and (maybe) RTS on transition from B0 */ |
533 | if ((old_cflag & CBAUD) == B0) { | 533 | if ((old_cflag & CBAUD) == B0) { |
534 | new_state = control_state | TIOCM_DTR; | 534 | new_state = control_state | TIOCM_DTR; |
535 | /* don't set RTS if using hardware flow control */ | 535 | /* don't set RTS if using hardware flow control */ |
536 | if (!(old_cflag & CRTSCTS)) | 536 | if (!(old_cflag & CRTSCTS)) |
537 | new_state |= TIOCM_RTS; | 537 | new_state |= TIOCM_RTS; |
538 | dbg(DEBUG_IF, "%u: from B0 - set DTR%s", cs->minor_index, | 538 | gig_dbg(DEBUG_IF, "%u: from B0 - set DTR%s", |
539 | (new_state & TIOCM_RTS) ? " only" : "/RTS"); | 539 | cs->minor_index, |
540 | (new_state & TIOCM_RTS) ? " only" : "/RTS"); | ||
540 | cs->ops->set_modem_ctrl(cs, control_state, new_state); | 541 | cs->ops->set_modem_ctrl(cs, control_state, new_state); |
541 | control_state = new_state; | 542 | control_state = new_state; |
542 | } | 543 | } |
@@ -545,7 +546,7 @@ static void if_set_termios(struct tty_struct *tty, struct termios *old) | |||
545 | 546 | ||
546 | if ((cflag & CBAUD) == B0) { | 547 | if ((cflag & CBAUD) == B0) { |
547 | /* Drop RTS and DTR */ | 548 | /* Drop RTS and DTR */ |
548 | dbg(DEBUG_IF, "%u: to B0 - drop DTR/RTS", cs->minor_index); | 549 | gig_dbg(DEBUG_IF, "%u: to B0 - drop DTR/RTS", cs->minor_index); |
549 | new_state = control_state & ~(TIOCM_DTR | TIOCM_RTS); | 550 | new_state = control_state & ~(TIOCM_DTR | TIOCM_RTS); |
550 | cs->ops->set_modem_ctrl(cs, control_state, new_state); | 551 | cs->ops->set_modem_ctrl(cs, control_state, new_state); |
551 | control_state = new_state; | 552 | control_state = new_state; |
@@ -565,14 +566,16 @@ static void if_set_termios(struct tty_struct *tty, struct termios *old) | |||
565 | * Just do what we have seen with SniffUSB on Win98. | 566 | * Just do what we have seen with SniffUSB on Win98. |
566 | */ | 567 | */ |
567 | /* Drop DTR/RTS if no flow control otherwise assert */ | 568 | /* Drop DTR/RTS if no flow control otherwise assert */ |
568 | dbg(DEBUG_IF, "%u: control_state %x", cs->minor_index, control_state); | 569 | gig_dbg(DEBUG_IF, "%u: control_state %x", |
570 | cs->minor_index, control_state); | ||
569 | new_state = control_state; | 571 | new_state = control_state; |
570 | if ((iflag & IXOFF) || (iflag & IXON) || (cflag & CRTSCTS)) | 572 | if ((iflag & IXOFF) || (iflag & IXON) || (cflag & CRTSCTS)) |
571 | new_state |= TIOCM_DTR | TIOCM_RTS; | 573 | new_state |= TIOCM_DTR | TIOCM_RTS; |
572 | else | 574 | else |
573 | new_state &= ~(TIOCM_DTR | TIOCM_RTS); | 575 | new_state &= ~(TIOCM_DTR | TIOCM_RTS); |
574 | if (new_state != control_state) { | 576 | if (new_state != control_state) { |
575 | dbg(DEBUG_IF, "%u: new_state %x", cs->minor_index, new_state); | 577 | gig_dbg(DEBUG_IF, "%u: new_state %x", |
578 | cs->minor_index, new_state); | ||
576 | gigaset_set_modem_ctrl(cs, control_state, new_state); | 579 | gigaset_set_modem_ctrl(cs, control_state, new_state); |
577 | control_state = new_state; | 580 | control_state = new_state; |
578 | } | 581 | } |
@@ -598,7 +601,7 @@ static void if_wake(unsigned long data) | |||
598 | 601 | ||
599 | if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && | 602 | if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && |
600 | tty->ldisc.write_wakeup) { | 603 | tty->ldisc.write_wakeup) { |
601 | dbg(DEBUG_IF, "write wakeup call"); | 604 | gig_dbg(DEBUG_IF, "write wakeup call"); |
602 | tty->ldisc.write_wakeup(tty); | 605 | tty->ldisc.write_wakeup(tty); |
603 | } | 606 | } |
604 | 607 | ||
@@ -633,14 +636,14 @@ void gigaset_if_free(struct cardstate *cs) | |||
633 | } | 636 | } |
634 | 637 | ||
635 | void gigaset_if_receive(struct cardstate *cs, | 638 | void gigaset_if_receive(struct cardstate *cs, |
636 | unsigned char *buffer, size_t len) | 639 | unsigned char *buffer, size_t len) |
637 | { | 640 | { |
638 | unsigned long flags; | 641 | unsigned long flags; |
639 | struct tty_struct *tty; | 642 | struct tty_struct *tty; |
640 | 643 | ||
641 | spin_lock_irqsave(&cs->lock, flags); | 644 | spin_lock_irqsave(&cs->lock, flags); |
642 | if ((tty = cs->tty) == NULL) | 645 | if ((tty = cs->tty) == NULL) |
643 | dbg(DEBUG_ANY, "receive on closed device"); | 646 | gig_dbg(DEBUG_ANY, "receive on closed device"); |
644 | else { | 647 | else { |
645 | tty_buffer_request_room(tty, len); | 648 | tty_buffer_request_room(tty, len); |
646 | tty_insert_flip_string(tty, buffer, len); | 649 | tty_insert_flip_string(tty, buffer, len); |
@@ -653,13 +656,13 @@ EXPORT_SYMBOL_GPL(gigaset_if_receive); | |||
653 | /* gigaset_if_initdriver | 656 | /* gigaset_if_initdriver |
654 | * Initialize tty interface. | 657 | * Initialize tty interface. |
655 | * parameters: | 658 | * parameters: |
656 | * drv Driver | 659 | * drv Driver |
657 | * procname Name of the driver (e.g. for /proc/tty/drivers) | 660 | * procname Name of the driver (e.g. for /proc/tty/drivers) |
658 | * devname Name of the device files (prefix without minor number) | 661 | * devname Name of the device files (prefix without minor number) |
659 | * devfsname Devfs name of the device files without %d | 662 | * devfsname Devfs name of the device files without %d |
660 | */ | 663 | */ |
661 | void gigaset_if_initdriver(struct gigaset_driver *drv, const char *procname, | 664 | void gigaset_if_initdriver(struct gigaset_driver *drv, const char *procname, |
662 | const char *devname, const char *devfsname) | 665 | const char *devname, const char *devfsname) |
663 | { | 666 | { |
664 | unsigned minors = drv->minors; | 667 | unsigned minors = drv->minors; |
665 | int ret; | 668 | int ret; |
@@ -694,7 +697,7 @@ void gigaset_if_initdriver(struct gigaset_driver *drv, const char *procname, | |||
694 | warn("failed to register tty driver (error %d)", ret); | 697 | warn("failed to register tty driver (error %d)", ret); |
695 | goto error; | 698 | goto error; |
696 | } | 699 | } |
697 | dbg(DEBUG_IF, "tty driver initialized"); | 700 | gig_dbg(DEBUG_IF, "tty driver initialized"); |
698 | drv->have_tty = 1; | 701 | drv->have_tty = 1; |
699 | return; | 702 | return; |
700 | 703 | ||
diff --git a/drivers/isdn/gigaset/isocdata.c b/drivers/isdn/gigaset/isocdata.c index e2d93e935530..4a00d22c496e 100644 --- a/drivers/isdn/gigaset/isocdata.c +++ b/drivers/isdn/gigaset/isocdata.c | |||
@@ -83,14 +83,14 @@ static inline int isowbuf_startwrite(struct isowbuf_t *iwb) | |||
83 | { | 83 | { |
84 | if (!atomic_dec_and_test(&iwb->writesem)) { | 84 | if (!atomic_dec_and_test(&iwb->writesem)) { |
85 | atomic_inc(&iwb->writesem); | 85 | atomic_inc(&iwb->writesem); |
86 | dbg(DEBUG_ISO, | 86 | gig_dbg(DEBUG_ISO, "%s: couldn't acquire iso write semaphore", |
87 | "%s: couldn't acquire iso write semaphore", __func__); | 87 | __func__); |
88 | return 0; | 88 | return 0; |
89 | } | 89 | } |
90 | #ifdef CONFIG_GIGASET_DEBUG | 90 | #ifdef CONFIG_GIGASET_DEBUG |
91 | dbg(DEBUG_ISO, | 91 | gig_dbg(DEBUG_ISO, |
92 | "%s: acquired iso write semaphore, data[write]=%02x, nbits=%d", | 92 | "%s: acquired iso write semaphore, data[write]=%02x, nbits=%d", |
93 | __func__, iwb->data[atomic_read(&iwb->write)], iwb->wbits); | 93 | __func__, iwb->data[atomic_read(&iwb->write)], iwb->wbits); |
94 | #endif | 94 | #endif |
95 | return 1; | 95 | return 1; |
96 | } | 96 | } |
@@ -143,7 +143,7 @@ static inline void isowbuf_putflag(struct isowbuf_t *iwb) | |||
143 | /* recover the idle flag byte */ | 143 | /* recover the idle flag byte */ |
144 | write = atomic_read(&iwb->write); | 144 | write = atomic_read(&iwb->write); |
145 | iwb->idle = iwb->data[write]; | 145 | iwb->idle = iwb->data[write]; |
146 | dbg(DEBUG_ISO, "idle fill byte %02x", iwb->idle); | 146 | gig_dbg(DEBUG_ISO, "idle fill byte %02x", iwb->idle); |
147 | /* mask extraneous bits in buffer */ | 147 | /* mask extraneous bits in buffer */ |
148 | iwb->data[write] &= (1 << iwb->wbits) - 1; | 148 | iwb->data[write] &= (1 << iwb->wbits) - 1; |
149 | } | 149 | } |
@@ -162,15 +162,14 @@ int gigaset_isowbuf_getbytes(struct isowbuf_t *iwb, int size) | |||
162 | read = atomic_read(&iwb->nextread); | 162 | read = atomic_read(&iwb->nextread); |
163 | write = atomic_read(&iwb->write); | 163 | write = atomic_read(&iwb->write); |
164 | if (likely(read == write)) { | 164 | if (likely(read == write)) { |
165 | //dbg(DEBUG_STREAM, "%s: send buffer empty", __func__); | ||
166 | /* return idle frame */ | 165 | /* return idle frame */ |
167 | return read < BAS_OUTBUFPAD ? | 166 | return read < BAS_OUTBUFPAD ? |
168 | BAS_OUTBUFSIZE : read - BAS_OUTBUFPAD; | 167 | BAS_OUTBUFSIZE : read - BAS_OUTBUFPAD; |
169 | } | 168 | } |
170 | 169 | ||
171 | limit = read + size; | 170 | limit = read + size; |
172 | dbg(DEBUG_STREAM, | 171 | gig_dbg(DEBUG_STREAM, "%s: read=%d write=%d limit=%d", |
173 | "%s: read=%d write=%d limit=%d", __func__, read, write, limit); | 172 | __func__, read, write, limit); |
174 | #ifdef CONFIG_GIGASET_DEBUG | 173 | #ifdef CONFIG_GIGASET_DEBUG |
175 | if (unlikely(size < 0 || size > BAS_OUTBUFPAD)) { | 174 | if (unlikely(size < 0 || size > BAS_OUTBUFPAD)) { |
176 | err("invalid size %d", size); | 175 | err("invalid size %d", size); |
@@ -195,9 +194,9 @@ int gigaset_isowbuf_getbytes(struct isowbuf_t *iwb, int size) | |||
195 | pbyte = iwb->data[write]; /* save | 194 | pbyte = iwb->data[write]; /* save |
196 | partial byte */ | 195 | partial byte */ |
197 | limit = write + BAS_OUTBUFPAD; | 196 | limit = write + BAS_OUTBUFPAD; |
198 | dbg(DEBUG_STREAM, | 197 | gig_dbg(DEBUG_STREAM, |
199 | "%s: filling %d->%d with %02x", | 198 | "%s: filling %d->%d with %02x", |
200 | __func__, write, limit, iwb->idle); | 199 | __func__, write, limit, iwb->idle); |
201 | if (write + BAS_OUTBUFPAD < BAS_OUTBUFSIZE) | 200 | if (write + BAS_OUTBUFPAD < BAS_OUTBUFSIZE) |
202 | memset(iwb->data + write, iwb->idle, | 201 | memset(iwb->data + write, iwb->idle, |
203 | BAS_OUTBUFPAD); | 202 | BAS_OUTBUFPAD); |
@@ -208,8 +207,9 @@ int gigaset_isowbuf_getbytes(struct isowbuf_t *iwb, int size) | |||
208 | - write); | 207 | - write); |
209 | limit = 0; | 208 | limit = 0; |
210 | } | 209 | } |
211 | dbg(DEBUG_STREAM, "%s: restoring %02x at %d", | 210 | gig_dbg(DEBUG_STREAM, |
212 | __func__, pbyte, limit); | 211 | "%s: restoring %02x at %d", |
212 | __func__, pbyte, limit); | ||
213 | iwb->data[limit] = pbyte; /* restore | 213 | iwb->data[limit] = pbyte; /* restore |
214 | partial byte */ | 214 | partial byte */ |
215 | atomic_set(&iwb->write, limit); | 215 | atomic_set(&iwb->write, limit); |
@@ -240,7 +240,7 @@ int gigaset_isowbuf_getbytes(struct isowbuf_t *iwb, int size) | |||
240 | * write hex bytes to syslog for debugging | 240 | * write hex bytes to syslog for debugging |
241 | */ | 241 | */ |
242 | static inline void dump_bytes(enum debuglevel level, const char *tag, | 242 | static inline void dump_bytes(enum debuglevel level, const char *tag, |
243 | unsigned char *bytes, int count) | 243 | unsigned char *bytes, int count) |
244 | { | 244 | { |
245 | #ifdef CONFIG_GIGASET_DEBUG | 245 | #ifdef CONFIG_GIGASET_DEBUG |
246 | unsigned char c; | 246 | unsigned char c; |
@@ -252,7 +252,7 @@ static inline void dump_bytes(enum debuglevel level, const char *tag, | |||
252 | while (count-- > 0) { | 252 | while (count-- > 0) { |
253 | if (i > sizeof(dbgline) - 4) { | 253 | if (i > sizeof(dbgline) - 4) { |
254 | dbgline[i] = '\0'; | 254 | dbgline[i] = '\0'; |
255 | dbg(level, "%s:%s", tag, dbgline); | 255 | gig_dbg(level, "%s:%s", tag, dbgline); |
256 | i = 0; | 256 | i = 0; |
257 | } | 257 | } |
258 | c = *bytes++; | 258 | c = *bytes++; |
@@ -262,7 +262,7 @@ static inline void dump_bytes(enum debuglevel level, const char *tag, | |||
262 | dbgline[i++] = hexdigit[c & 0x0f]; | 262 | dbgline[i++] = hexdigit[c & 0x0f]; |
263 | } | 263 | } |
264 | dbgline[i] = '\0'; | 264 | dbgline[i] = '\0'; |
265 | dbg(level, "%s:%s", tag, dbgline); | 265 | gig_dbg(level, "%s:%s", tag, dbgline); |
266 | #endif | 266 | #endif |
267 | } | 267 | } |
268 | 268 | ||
@@ -378,7 +378,7 @@ static u16 stufftab[5 * 256] = { | |||
378 | */ | 378 | */ |
379 | 379 | ||
380 | static inline int hdlc_bitstuff_byte(struct isowbuf_t *iwb, unsigned char cin, | 380 | static inline int hdlc_bitstuff_byte(struct isowbuf_t *iwb, unsigned char cin, |
381 | int ones) | 381 | int ones) |
382 | { | 382 | { |
383 | u16 stuff; | 383 | u16 stuff; |
384 | int shiftinc, newones; | 384 | int shiftinc, newones; |
@@ -420,7 +420,7 @@ static inline int hdlc_bitstuff_byte(struct isowbuf_t *iwb, unsigned char cin, | |||
420 | */ | 420 | */ |
421 | 421 | ||
422 | static inline int hdlc_buildframe(struct isowbuf_t *iwb, | 422 | static inline int hdlc_buildframe(struct isowbuf_t *iwb, |
423 | unsigned char *in, int count) | 423 | unsigned char *in, int count) |
424 | { | 424 | { |
425 | int ones; | 425 | int ones; |
426 | u16 fcs; | 426 | u16 fcs; |
@@ -429,8 +429,8 @@ static inline int hdlc_buildframe(struct isowbuf_t *iwb, | |||
429 | 429 | ||
430 | if (isowbuf_freebytes(iwb) < count + count / 5 + 6 || | 430 | if (isowbuf_freebytes(iwb) < count + count / 5 + 6 || |
431 | !isowbuf_startwrite(iwb)) { | 431 | !isowbuf_startwrite(iwb)) { |
432 | dbg(DEBUG_ISO, "%s: %d bytes free -> -EAGAIN", | 432 | gig_dbg(DEBUG_ISO, "%s: %d bytes free -> -EAGAIN", |
433 | __func__, isowbuf_freebytes(iwb)); | 433 | __func__, isowbuf_freebytes(iwb)); |
434 | return -EAGAIN; | 434 | return -EAGAIN; |
435 | } | 435 | } |
436 | 436 | ||
@@ -482,11 +482,11 @@ static inline int trans_buildframe(struct isowbuf_t *iwb, | |||
482 | 482 | ||
483 | if (isowbuf_freebytes(iwb) < count || | 483 | if (isowbuf_freebytes(iwb) < count || |
484 | !isowbuf_startwrite(iwb)) { | 484 | !isowbuf_startwrite(iwb)) { |
485 | dbg(DEBUG_ISO, "can't put %d bytes", count); | 485 | gig_dbg(DEBUG_ISO, "can't put %d bytes", count); |
486 | return -EAGAIN; | 486 | return -EAGAIN; |
487 | } | 487 | } |
488 | 488 | ||
489 | dbg(DEBUG_STREAM, "put %d bytes", count); | 489 | gig_dbg(DEBUG_STREAM, "put %d bytes", count); |
490 | write = atomic_read(&iwb->write); | 490 | write = atomic_read(&iwb->write); |
491 | do { | 491 | do { |
492 | c = gigaset_invtab[*in++]; | 492 | c = gigaset_invtab[*in++]; |
@@ -506,13 +506,13 @@ int gigaset_isoc_buildframe(struct bc_state *bcs, unsigned char *in, int len) | |||
506 | switch (bcs->proto2) { | 506 | switch (bcs->proto2) { |
507 | case ISDN_PROTO_L2_HDLC: | 507 | case ISDN_PROTO_L2_HDLC: |
508 | result = hdlc_buildframe(bcs->hw.bas->isooutbuf, in, len); | 508 | result = hdlc_buildframe(bcs->hw.bas->isooutbuf, in, len); |
509 | dbg(DEBUG_ISO, "%s: %d bytes HDLC -> %d", | 509 | gig_dbg(DEBUG_ISO, "%s: %d bytes HDLC -> %d", |
510 | __func__, len, result); | 510 | __func__, len, result); |
511 | break; | 511 | break; |
512 | default: /* assume transparent */ | 512 | default: /* assume transparent */ |
513 | result = trans_buildframe(bcs->hw.bas->isooutbuf, in, len); | 513 | result = trans_buildframe(bcs->hw.bas->isooutbuf, in, len); |
514 | dbg(DEBUG_ISO, "%s: %d bytes trans -> %d", | 514 | gig_dbg(DEBUG_ISO, "%s: %d bytes trans -> %d", |
515 | __func__, len, result); | 515 | __func__, len, result); |
516 | } | 516 | } |
517 | return result; | 517 | return result; |
518 | } | 518 | } |
@@ -528,7 +528,7 @@ static inline void hdlc_putbyte(unsigned char c, struct bc_state *bcs) | |||
528 | return; | 528 | return; |
529 | } | 529 | } |
530 | if (unlikely(bcs->skb->len == SBUFSIZE)) { | 530 | if (unlikely(bcs->skb->len == SBUFSIZE)) { |
531 | warn("received oversized packet discarded"); | 531 | dev_warn(bcs->cs->dev, "received oversized packet discarded\n"); |
532 | bcs->hw.bas->giants++; | 532 | bcs->hw.bas->giants++; |
533 | dev_kfree_skb_any(bcs->skb); | 533 | dev_kfree_skb_any(bcs->skb); |
534 | bcs->skb = NULL; | 534 | bcs->skb = NULL; |
@@ -549,7 +549,7 @@ static inline void hdlc_flush(struct bc_state *bcs) | |||
549 | if ((bcs->skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL) | 549 | if ((bcs->skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL) |
550 | skb_reserve(bcs->skb, HW_HDR_LEN); | 550 | skb_reserve(bcs->skb, HW_HDR_LEN); |
551 | else | 551 | else |
552 | err("could not allocate skb"); | 552 | dev_err(bcs->cs->dev, "could not allocate skb\n"); |
553 | } | 553 | } |
554 | 554 | ||
555 | /* reset packet state */ | 555 | /* reset packet state */ |
@@ -571,23 +571,25 @@ static inline void hdlc_done(struct bc_state *bcs) | |||
571 | 571 | ||
572 | if ((procskb = bcs->skb) == NULL) { | 572 | if ((procskb = bcs->skb) == NULL) { |
573 | /* previous error */ | 573 | /* previous error */ |
574 | dbg(DEBUG_ISO, "%s: skb=NULL", __func__); | 574 | gig_dbg(DEBUG_ISO, "%s: skb=NULL", __func__); |
575 | gigaset_rcv_error(NULL, bcs->cs, bcs); | 575 | gigaset_rcv_error(NULL, bcs->cs, bcs); |
576 | } else if (procskb->len < 2) { | 576 | } else if (procskb->len < 2) { |
577 | notice("received short frame (%d octets)", procskb->len); | 577 | dev_notice(bcs->cs->dev, "received short frame (%d octets)\n", |
578 | procskb->len); | ||
578 | bcs->hw.bas->runts++; | 579 | bcs->hw.bas->runts++; |
579 | gigaset_rcv_error(procskb, bcs->cs, bcs); | 580 | gigaset_rcv_error(procskb, bcs->cs, bcs); |
580 | } else if (bcs->fcs != PPP_GOODFCS) { | 581 | } else if (bcs->fcs != PPP_GOODFCS) { |
581 | notice("frame check error (0x%04x)", bcs->fcs); | 582 | dev_notice(bcs->cs->dev, "frame check error (0x%04x)\n", |
583 | bcs->fcs); | ||
582 | bcs->hw.bas->fcserrs++; | 584 | bcs->hw.bas->fcserrs++; |
583 | gigaset_rcv_error(procskb, bcs->cs, bcs); | 585 | gigaset_rcv_error(procskb, bcs->cs, bcs); |
584 | } else { | 586 | } else { |
585 | procskb->len -= 2; /* subtract FCS */ | 587 | procskb->len -= 2; /* subtract FCS */ |
586 | procskb->tail -= 2; | 588 | procskb->tail -= 2; |
587 | dbg(DEBUG_ISO, | 589 | gig_dbg(DEBUG_ISO, "%s: good frame (%d octets)", |
588 | "%s: good frame (%d octets)", __func__, procskb->len); | 590 | __func__, procskb->len); |
589 | dump_bytes(DEBUG_STREAM, | 591 | dump_bytes(DEBUG_STREAM, |
590 | "rcv data", procskb->data, procskb->len); | 592 | "rcv data", procskb->data, procskb->len); |
591 | bcs->hw.bas->goodbytes += procskb->len; | 593 | bcs->hw.bas->goodbytes += procskb->len; |
592 | gigaset_rcv_skb(procskb, bcs->cs, bcs); | 594 | gigaset_rcv_skb(procskb, bcs->cs, bcs); |
593 | } | 595 | } |
@@ -595,7 +597,7 @@ static inline void hdlc_done(struct bc_state *bcs) | |||
595 | if ((bcs->skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL) | 597 | if ((bcs->skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL) |
596 | skb_reserve(bcs->skb, HW_HDR_LEN); | 598 | skb_reserve(bcs->skb, HW_HDR_LEN); |
597 | else | 599 | else |
598 | err("could not allocate skb"); | 600 | dev_err(bcs->cs->dev, "could not allocate skb\n"); |
599 | bcs->fcs = PPP_INITFCS; | 601 | bcs->fcs = PPP_INITFCS; |
600 | } | 602 | } |
601 | 603 | ||
@@ -610,14 +612,14 @@ static inline void hdlc_frag(struct bc_state *bcs, unsigned inbits) | |||
610 | return; | 612 | return; |
611 | } | 613 | } |
612 | 614 | ||
613 | notice("received partial byte (%d bits)", inbits); | 615 | dev_notice(bcs->cs->dev, "received partial byte (%d bits)\n", inbits); |
614 | bcs->hw.bas->alignerrs++; | 616 | bcs->hw.bas->alignerrs++; |
615 | gigaset_rcv_error(bcs->skb, bcs->cs, bcs); | 617 | gigaset_rcv_error(bcs->skb, bcs->cs, bcs); |
616 | 618 | ||
617 | if ((bcs->skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL) | 619 | if ((bcs->skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL) |
618 | skb_reserve(bcs->skb, HW_HDR_LEN); | 620 | skb_reserve(bcs->skb, HW_HDR_LEN); |
619 | else | 621 | else |
620 | err("could not allocate skb"); | 622 | dev_err(bcs->cs->dev, "could not allocate skb\n"); |
621 | bcs->fcs = PPP_INITFCS; | 623 | bcs->fcs = PPP_INITFCS; |
622 | } | 624 | } |
623 | 625 | ||
@@ -659,7 +661,7 @@ static unsigned char bitcounts[256] = { | |||
659 | * bcs receiving B channel structure | 661 | * bcs receiving B channel structure |
660 | */ | 662 | */ |
661 | static inline void hdlc_unpack(unsigned char *src, unsigned count, | 663 | static inline void hdlc_unpack(unsigned char *src, unsigned count, |
662 | struct bc_state *bcs) | 664 | struct bc_state *bcs) |
663 | { | 665 | { |
664 | struct bas_bc_state *ubc; | 666 | struct bas_bc_state *ubc; |
665 | int inputstate; | 667 | int inputstate; |
@@ -856,7 +858,7 @@ static inline void hdlc_unpack(unsigned char *src, unsigned count, | |||
856 | * bcs receiving B channel structure | 858 | * bcs receiving B channel structure |
857 | */ | 859 | */ |
858 | static inline void trans_receive(unsigned char *src, unsigned count, | 860 | static inline void trans_receive(unsigned char *src, unsigned count, |
859 | struct bc_state *bcs) | 861 | struct bc_state *bcs) |
860 | { | 862 | { |
861 | struct sk_buff *skb; | 863 | struct sk_buff *skb; |
862 | int dobytes; | 864 | int dobytes; |
@@ -870,7 +872,7 @@ static inline void trans_receive(unsigned char *src, unsigned count, | |||
870 | if (unlikely((skb = bcs->skb) == NULL)) { | 872 | if (unlikely((skb = bcs->skb) == NULL)) { |
871 | bcs->skb = skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN); | 873 | bcs->skb = skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN); |
872 | if (!skb) { | 874 | if (!skb) { |
873 | err("could not allocate skb"); | 875 | dev_err(bcs->cs->dev, "could not allocate skb\n"); |
874 | return; | 876 | return; |
875 | } | 877 | } |
876 | skb_reserve(skb, HW_HDR_LEN); | 878 | skb_reserve(skb, HW_HDR_LEN); |
@@ -888,7 +890,8 @@ static inline void trans_receive(unsigned char *src, unsigned count, | |||
888 | gigaset_rcv_skb(skb, bcs->cs, bcs); | 890 | gigaset_rcv_skb(skb, bcs->cs, bcs); |
889 | bcs->skb = skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN); | 891 | bcs->skb = skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN); |
890 | if (!skb) { | 892 | if (!skb) { |
891 | err("could not allocate skb"); | 893 | dev_err(bcs->cs->dev, |
894 | "could not allocate skb\n"); | ||
892 | return; | 895 | return; |
893 | } | 896 | } |
894 | skb_reserve(bcs->skb, HW_HDR_LEN); | 897 | skb_reserve(bcs->skb, HW_HDR_LEN); |
@@ -921,8 +924,8 @@ static void cmd_loop(unsigned char *src, int numbytes, struct inbuf_t *inbuf) | |||
921 | case '\r': | 924 | case '\r': |
922 | case '\n': | 925 | case '\n': |
923 | /* end of line */ | 926 | /* end of line */ |
924 | dbg(DEBUG_TRANSCMD, "%s: End of Command (%d Bytes)", | 927 | gig_dbg(DEBUG_TRANSCMD, "%s: End of Command (%d Bytes)", |
925 | __func__, cbytes); | 928 | __func__, cbytes); |
926 | cs->cbytes = cbytes; | 929 | cs->cbytes = cbytes; |
927 | gigaset_handle_modem_response(cs); | 930 | gigaset_handle_modem_response(cs); |
928 | cbytes = 0; | 931 | cbytes = 0; |
@@ -932,7 +935,7 @@ static void cmd_loop(unsigned char *src, int numbytes, struct inbuf_t *inbuf) | |||
932 | if (cbytes < MAX_RESP_SIZE - 1) | 935 | if (cbytes < MAX_RESP_SIZE - 1) |
933 | cbytes++; | 936 | cbytes++; |
934 | else | 937 | else |
935 | warn("response too large"); | 938 | dev_warn(cs->dev, "response too large\n"); |
936 | } | 939 | } |
937 | } | 940 | } |
938 | 941 | ||
@@ -951,27 +954,27 @@ void gigaset_isoc_input(struct inbuf_t *inbuf) | |||
951 | 954 | ||
952 | head = atomic_read(&inbuf->head); | 955 | head = atomic_read(&inbuf->head); |
953 | while (head != (tail = atomic_read(&inbuf->tail))) { | 956 | while (head != (tail = atomic_read(&inbuf->tail))) { |
954 | dbg(DEBUG_INTR, "buffer state: %u -> %u", head, tail); | 957 | gig_dbg(DEBUG_INTR, "buffer state: %u -> %u", head, tail); |
955 | if (head > tail) | 958 | if (head > tail) |
956 | tail = RBUFSIZE; | 959 | tail = RBUFSIZE; |
957 | src = inbuf->data + head; | 960 | src = inbuf->data + head; |
958 | numbytes = tail - head; | 961 | numbytes = tail - head; |
959 | dbg(DEBUG_INTR, "processing %u bytes", numbytes); | 962 | gig_dbg(DEBUG_INTR, "processing %u bytes", numbytes); |
960 | 963 | ||
961 | if (atomic_read(&cs->mstate) == MS_LOCKED) { | 964 | if (atomic_read(&cs->mstate) == MS_LOCKED) { |
962 | gigaset_dbg_buffer(DEBUG_LOCKCMD, "received response", | 965 | gigaset_dbg_buffer(DEBUG_LOCKCMD, "received response", |
963 | numbytes, src, 0); | 966 | numbytes, src, 0); |
964 | gigaset_if_receive(inbuf->cs, src, numbytes); | 967 | gigaset_if_receive(inbuf->cs, src, numbytes); |
965 | } else { | 968 | } else { |
966 | gigaset_dbg_buffer(DEBUG_CMD, "received response", | 969 | gigaset_dbg_buffer(DEBUG_CMD, "received response", |
967 | numbytes, src, 0); | 970 | numbytes, src, 0); |
968 | cmd_loop(src, numbytes, inbuf); | 971 | cmd_loop(src, numbytes, inbuf); |
969 | } | 972 | } |
970 | 973 | ||
971 | head += numbytes; | 974 | head += numbytes; |
972 | if (head == RBUFSIZE) | 975 | if (head == RBUFSIZE) |
973 | head = 0; | 976 | head = 0; |
974 | dbg(DEBUG_INTR, "setting head to %u", head); | 977 | gig_dbg(DEBUG_INTR, "setting head to %u", head); |
975 | atomic_set(&inbuf->head, head); | 978 | atomic_set(&inbuf->head, head); |
976 | } | 979 | } |
977 | } | 980 | } |
@@ -999,8 +1002,8 @@ int gigaset_isoc_send_skb(struct bc_state *bcs, struct sk_buff *skb) | |||
999 | len = skb->len; | 1002 | len = skb->len; |
1000 | 1003 | ||
1001 | skb_queue_tail(&bcs->squeue, skb); | 1004 | skb_queue_tail(&bcs->squeue, skb); |
1002 | dbg(DEBUG_ISO, | 1005 | gig_dbg(DEBUG_ISO, "%s: skb queued, qlen=%d", |
1003 | "%s: skb queued, qlen=%d", __func__, skb_queue_len(&bcs->squeue)); | 1006 | __func__, skb_queue_len(&bcs->squeue)); |
1004 | 1007 | ||
1005 | /* tasklet submits URB if necessary */ | 1008 | /* tasklet submits URB if necessary */ |
1006 | tasklet_schedule(&bcs->hw.bas->sent_tasklet); | 1009 | tasklet_schedule(&bcs->hw.bas->sent_tasklet); |
diff --git a/drivers/isdn/gigaset/proc.c b/drivers/isdn/gigaset/proc.c index c30ea80d517a..695495ad0668 100644 --- a/drivers/isdn/gigaset/proc.c +++ b/drivers/isdn/gigaset/proc.c | |||
@@ -44,13 +44,13 @@ static ssize_t set_cidmode(struct device *dev, struct device_attribute *attr, | |||
44 | 44 | ||
45 | cs->waiting = 1; | 45 | cs->waiting = 1; |
46 | if (!gigaset_add_event(cs, &cs->at_state, EV_PROC_CIDMODE, | 46 | if (!gigaset_add_event(cs, &cs->at_state, EV_PROC_CIDMODE, |
47 | NULL, value, NULL)) { | 47 | NULL, value, NULL)) { |
48 | cs->waiting = 0; | 48 | cs->waiting = 0; |
49 | up(&cs->sem); | 49 | up(&cs->sem); |
50 | return -ENOMEM; | 50 | return -ENOMEM; |
51 | } | 51 | } |
52 | 52 | ||
53 | dbg(DEBUG_CMD, "scheduling PROC_CIDMODE"); | 53 | gig_dbg(DEBUG_CMD, "scheduling PROC_CIDMODE"); |
54 | gigaset_schedule_event(cs); | 54 | gigaset_schedule_event(cs); |
55 | 55 | ||
56 | wait_event(cs->waitqueue, !cs->waiting); | 56 | wait_event(cs->waitqueue, !cs->waiting); |
@@ -65,7 +65,7 @@ static DEVICE_ATTR(cidmode, S_IRUGO|S_IWUSR, show_cidmode, set_cidmode); | |||
65 | /* free sysfs for device */ | 65 | /* free sysfs for device */ |
66 | void gigaset_free_dev_sysfs(struct usb_interface *interface) | 66 | void gigaset_free_dev_sysfs(struct usb_interface *interface) |
67 | { | 67 | { |
68 | dbg(DEBUG_INIT, "removing sysfs entries"); | 68 | gig_dbg(DEBUG_INIT, "removing sysfs entries"); |
69 | device_remove_file(&interface->dev, &dev_attr_cidmode); | 69 | device_remove_file(&interface->dev, &dev_attr_cidmode); |
70 | } | 70 | } |
71 | EXPORT_SYMBOL_GPL(gigaset_free_dev_sysfs); | 71 | EXPORT_SYMBOL_GPL(gigaset_free_dev_sysfs); |
@@ -73,7 +73,7 @@ EXPORT_SYMBOL_GPL(gigaset_free_dev_sysfs); | |||
73 | /* initialize sysfs for device */ | 73 | /* initialize sysfs for device */ |
74 | void gigaset_init_dev_sysfs(struct usb_interface *interface) | 74 | void gigaset_init_dev_sysfs(struct usb_interface *interface) |
75 | { | 75 | { |
76 | dbg(DEBUG_INIT, "setting up sysfs"); | 76 | gig_dbg(DEBUG_INIT, "setting up sysfs"); |
77 | device_create_file(&interface->dev, &dev_attr_cidmode); | 77 | device_create_file(&interface->dev, &dev_attr_cidmode); |
78 | } | 78 | } |
79 | EXPORT_SYMBOL_GPL(gigaset_init_dev_sysfs); | 79 | EXPORT_SYMBOL_GPL(gigaset_init_dev_sysfs); |
diff --git a/drivers/isdn/gigaset/usb-gigaset.c b/drivers/isdn/gigaset/usb-gigaset.c index 0f5aa46cf8f3..f09d821b6e89 100644 --- a/drivers/isdn/gigaset/usb-gigaset.c +++ b/drivers/isdn/gigaset/usb-gigaset.c | |||
@@ -106,7 +106,7 @@ MODULE_DEVICE_TABLE(usb, gigaset_table); | |||
106 | */ | 106 | */ |
107 | 107 | ||
108 | static int gigaset_probe(struct usb_interface *interface, | 108 | static int gigaset_probe(struct usb_interface *interface, |
109 | const struct usb_device_id *id); | 109 | const struct usb_device_id *id); |
110 | static void gigaset_disconnect(struct usb_interface *interface); | 110 | static void gigaset_disconnect(struct usb_interface *interface); |
111 | 111 | ||
112 | static struct gigaset_driver *driver = NULL; | 112 | static struct gigaset_driver *driver = NULL; |
@@ -126,17 +126,17 @@ struct usb_cardstate { | |||
126 | atomic_t busy; /* bulk output in progress */ | 126 | atomic_t busy; /* bulk output in progress */ |
127 | 127 | ||
128 | /* Output buffer */ | 128 | /* Output buffer */ |
129 | unsigned char *bulk_out_buffer; /* send buffer */ | 129 | unsigned char *bulk_out_buffer; |
130 | int bulk_out_size; /* send buffer size */ | 130 | int bulk_out_size; |
131 | __u8 bulk_out_endpointAddr; /* bulk out endpoint */ | 131 | __u8 bulk_out_endpointAddr; |
132 | struct urb *bulk_out_urb; /* bulk out urb */ | 132 | struct urb *bulk_out_urb; |
133 | 133 | ||
134 | /* Input buffer */ | 134 | /* Input buffer */ |
135 | int rcvbuf_size; /* rcv buffer */ | 135 | int rcvbuf_size; |
136 | struct urb *read_urb; /* rcv buffer size */ | 136 | struct urb *read_urb; |
137 | __u8 int_in_endpointAddr; /* int in endpoint */ | 137 | __u8 int_in_endpointAddr; |
138 | 138 | ||
139 | char bchars[6]; /* request 0x19 */ | 139 | char bchars[6]; /* for request 0x19 */ |
140 | }; | 140 | }; |
141 | 141 | ||
142 | struct usb_bc_state {}; | 142 | struct usb_bc_state {}; |
@@ -149,20 +149,20 @@ static inline unsigned tiocm_to_gigaset(unsigned state) | |||
149 | #ifdef CONFIG_GIGASET_UNDOCREQ | 149 | #ifdef CONFIG_GIGASET_UNDOCREQ |
150 | /* WARNING: EXPERIMENTAL! */ | 150 | /* WARNING: EXPERIMENTAL! */ |
151 | static int gigaset_set_modem_ctrl(struct cardstate *cs, unsigned old_state, | 151 | static int gigaset_set_modem_ctrl(struct cardstate *cs, unsigned old_state, |
152 | unsigned new_state) | 152 | unsigned new_state) |
153 | { | 153 | { |
154 | struct usb_device *udev = cs->hw.usb->udev; | ||
154 | unsigned mask, val; | 155 | unsigned mask, val; |
155 | int r; | 156 | int r; |
156 | 157 | ||
157 | mask = tiocm_to_gigaset(old_state ^ new_state); | 158 | mask = tiocm_to_gigaset(old_state ^ new_state); |
158 | val = tiocm_to_gigaset(new_state); | 159 | val = tiocm_to_gigaset(new_state); |
159 | 160 | ||
160 | dbg(DEBUG_USBREQ, "set flags 0x%02x with mask 0x%02x", val, mask); | 161 | gig_dbg(DEBUG_USBREQ, "set flags 0x%02x with mask 0x%02x", val, mask); |
161 | // don't use this in an interrupt/BH | 162 | // don't use this in an interrupt/BH |
162 | r = usb_control_msg(cs->hw.usb->udev, | 163 | r = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 7, 0x41, |
163 | usb_sndctrlpipe(cs->hw.usb->udev, 0), 7, 0x41, | 164 | (val & 0xff) | ((mask & 0xff) << 8), 0, |
164 | (val & 0xff) | ((mask & 0xff) << 8), 0, | 165 | NULL, 0, 2000 /* timeout? */); |
165 | NULL, 0, 2000 /* timeout? */); | ||
166 | if (r < 0) | 166 | if (r < 0) |
167 | return r; | 167 | return r; |
168 | //.. | 168 | //.. |
@@ -171,30 +171,29 @@ static int gigaset_set_modem_ctrl(struct cardstate *cs, unsigned old_state, | |||
171 | 171 | ||
172 | static int set_value(struct cardstate *cs, u8 req, u16 val) | 172 | static int set_value(struct cardstate *cs, u8 req, u16 val) |
173 | { | 173 | { |
174 | struct usb_device *udev = cs->hw.usb->udev; | ||
174 | int r, r2; | 175 | int r, r2; |
175 | 176 | ||
176 | dbg(DEBUG_USBREQ, "request %02x (%04x)", (unsigned)req, (unsigned)val); | 177 | gig_dbg(DEBUG_USBREQ, "request %02x (%04x)", |
177 | r = usb_control_msg(cs->hw.usb->udev, | 178 | (unsigned)req, (unsigned)val); |
178 | usb_sndctrlpipe(cs->hw.usb->udev, 0), 0x12, 0x41, | 179 | r = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x12, 0x41, |
179 | 0xf /*?*/, 0, | 180 | 0xf /*?*/, 0, NULL, 0, 2000 /*?*/); |
180 | NULL, 0, 2000 /*?*/); /* no idea, what this does */ | 181 | /* no idea what this does */ |
181 | if (r < 0) { | 182 | if (r < 0) { |
182 | err("error %d on request 0x12", -r); | 183 | dev_err(&udev->dev, "error %d on request 0x12\n", -r); |
183 | return r; | 184 | return r; |
184 | } | 185 | } |
185 | 186 | ||
186 | r = usb_control_msg(cs->hw.usb->udev, | 187 | r = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), req, 0x41, |
187 | usb_sndctrlpipe(cs->hw.usb->udev, 0), req, 0x41, | 188 | val, 0, NULL, 0, 2000 /*?*/); |
188 | val, 0, | ||
189 | NULL, 0, 2000 /*?*/); | ||
190 | if (r < 0) | 189 | if (r < 0) |
191 | err("error %d on request 0x%02x", -r, (unsigned)req); | 190 | dev_err(&udev->dev, "error %d on request 0x%02x\n", |
191 | -r, (unsigned)req); | ||
192 | 192 | ||
193 | r2 = usb_control_msg(cs->hw.usb->udev, | 193 | r2 = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x19, 0x41, |
194 | usb_sndctrlpipe(cs->hw.usb->udev, 0), 0x19, 0x41, | 194 | 0, 0, cs->hw.usb->bchars, 6, 2000 /*?*/); |
195 | 0, 0, cs->hw.usb->bchars, 6, 2000 /*?*/); | ||
196 | if (r2 < 0) | 195 | if (r2 < 0) |
197 | err("error %d on request 0x19", -r2); | 196 | dev_err(&udev->dev, "error %d on request 0x19\n", -r2); |
198 | 197 | ||
199 | return r < 0 ? r : (r2 < 0 ? r2 : 0); | 198 | return r < 0 ? r : (r2 < 0 ? r2 : 0); |
200 | } | 199 | } |
@@ -222,8 +221,8 @@ static int gigaset_baud_rate(struct cardstate *cs, unsigned cflag) | |||
222 | case B115200: rate = 115200; break; | 221 | case B115200: rate = 115200; break; |
223 | default: | 222 | default: |
224 | rate = 9600; | 223 | rate = 9600; |
225 | err("unsupported baudrate request 0x%x," | 224 | dev_err(cs->dev, "unsupported baudrate request 0x%x," |
226 | " using default of B9600", cflag); | 225 | " using default of B9600\n", cflag); |
227 | } | 226 | } |
228 | 227 | ||
229 | val = 0x383fff / rate + 1; | 228 | val = 0x383fff / rate + 1; |
@@ -252,7 +251,7 @@ static int gigaset_set_line_ctrl(struct cardstate *cs, unsigned cflag) | |||
252 | case CS8: | 251 | case CS8: |
253 | val |= 8 << 8; break; | 252 | val |= 8 << 8; break; |
254 | default: | 253 | default: |
255 | err("CSIZE was not CS5-CS8, using default of 8"); | 254 | dev_err(cs->dev, "CSIZE was not CS5-CS8, using default of 8\n"); |
256 | val |= 8 << 8; | 255 | val |= 8 << 8; |
257 | break; | 256 | break; |
258 | } | 257 | } |
@@ -270,7 +269,7 @@ static int gigaset_set_line_ctrl(struct cardstate *cs, unsigned cflag) | |||
270 | 269 | ||
271 | #else | 270 | #else |
272 | static int gigaset_set_modem_ctrl(struct cardstate *cs, unsigned old_state, | 271 | static int gigaset_set_modem_ctrl(struct cardstate *cs, unsigned old_state, |
273 | unsigned new_state) | 272 | unsigned new_state) |
274 | { | 273 | { |
275 | return -EINVAL; | 274 | return -EINVAL; |
276 | } | 275 | } |
@@ -317,10 +316,10 @@ static void gigaset_modem_fill(unsigned long data) | |||
317 | unsigned long flags; | 316 | unsigned long flags; |
318 | int again; | 317 | int again; |
319 | 318 | ||
320 | dbg(DEBUG_OUTPUT, "modem_fill"); | 319 | gig_dbg(DEBUG_OUTPUT, "modem_fill"); |
321 | 320 | ||
322 | if (atomic_read(&cs->hw.usb->busy)) { | 321 | if (atomic_read(&cs->hw.usb->busy)) { |
323 | dbg(DEBUG_OUTPUT, "modem_fill: busy"); | 322 | gig_dbg(DEBUG_OUTPUT, "modem_fill: busy"); |
324 | return; | 323 | return; |
325 | } | 324 | } |
326 | 325 | ||
@@ -331,27 +330,27 @@ static void gigaset_modem_fill(unsigned long data) | |||
331 | cb = cs->cmdbuf; | 330 | cb = cs->cmdbuf; |
332 | spin_unlock_irqrestore(&cs->cmdlock, flags); | 331 | spin_unlock_irqrestore(&cs->cmdlock, flags); |
333 | if (cb) { /* commands to send? */ | 332 | if (cb) { /* commands to send? */ |
334 | dbg(DEBUG_OUTPUT, "modem_fill: cb"); | 333 | gig_dbg(DEBUG_OUTPUT, "modem_fill: cb"); |
335 | if (send_cb(cs, cb) < 0) { | 334 | if (send_cb(cs, cb) < 0) { |
336 | dbg(DEBUG_OUTPUT, | 335 | gig_dbg(DEBUG_OUTPUT, |
337 | "modem_fill: send_cb failed"); | 336 | "modem_fill: send_cb failed"); |
338 | again = 1; /* no callback will be | 337 | again = 1; /* no callback will be |
339 | called! */ | 338 | called! */ |
340 | } | 339 | } |
341 | } else { /* skbs to send? */ | 340 | } else { /* skbs to send? */ |
342 | bcs->tx_skb = skb_dequeue(&bcs->squeue); | 341 | bcs->tx_skb = skb_dequeue(&bcs->squeue); |
343 | if (bcs->tx_skb) | 342 | if (bcs->tx_skb) |
344 | dbg(DEBUG_INTR, | 343 | gig_dbg(DEBUG_INTR, |
345 | "Dequeued skb (Adr: %lx)!", | 344 | "Dequeued skb (Adr: %lx)!", |
346 | (unsigned long) bcs->tx_skb); | 345 | (unsigned long) bcs->tx_skb); |
347 | } | 346 | } |
348 | } | 347 | } |
349 | 348 | ||
350 | if (bcs->tx_skb) { | 349 | if (bcs->tx_skb) { |
351 | dbg(DEBUG_OUTPUT, "modem_fill: tx_skb"); | 350 | gig_dbg(DEBUG_OUTPUT, "modem_fill: tx_skb"); |
352 | if (write_modem(cs) < 0) { | 351 | if (write_modem(cs) < 0) { |
353 | dbg(DEBUG_OUTPUT, | 352 | gig_dbg(DEBUG_OUTPUT, |
354 | "modem_fill: write_modem failed"); | 353 | "modem_fill: write_modem failed"); |
355 | // FIXME should we tell the LL? | 354 | // FIXME should we tell the LL? |
356 | again = 1; /* no callback will be called! */ | 355 | again = 1; /* no callback will be called! */ |
357 | } | 356 | } |
@@ -362,7 +361,7 @@ static void gigaset_modem_fill(unsigned long data) | |||
362 | /** | 361 | /** |
363 | * gigaset_read_int_callback | 362 | * gigaset_read_int_callback |
364 | * | 363 | * |
365 | * It is called if the data was received from the device. | 364 | * It is called if the data was received from the device. |
366 | */ | 365 | */ |
367 | static void gigaset_read_int_callback(struct urb *urb, struct pt_regs *regs) | 366 | static void gigaset_read_int_callback(struct urb *urb, struct pt_regs *regs) |
368 | { | 367 | { |
@@ -377,12 +376,11 @@ static void gigaset_read_int_callback(struct urb *urb, struct pt_regs *regs) | |||
377 | inbuf = (struct inbuf_t *) urb->context; | 376 | inbuf = (struct inbuf_t *) urb->context; |
378 | IFNULLRET(inbuf); | 377 | IFNULLRET(inbuf); |
379 | cs = inbuf->cs; | 378 | cs = inbuf->cs; |
380 | IFNULLGOTO(cs, exit); | 379 | IFNULLRET(cs); |
381 | IFNULLGOTO(cardstate, exit); | ||
382 | 380 | ||
383 | if (!atomic_read(&cs->connected)) { | 381 | if (!atomic_read(&cs->connected)) { |
384 | err("%s: disconnected", __func__); | 382 | err("%s: disconnected", __func__); |
385 | goto exit; | 383 | return; |
386 | } | 384 | } |
387 | 385 | ||
388 | if (!urb->status) { | 386 | if (!urb->status) { |
@@ -391,29 +389,31 @@ static void gigaset_read_int_callback(struct urb *urb, struct pt_regs *regs) | |||
391 | if (numbytes) { | 389 | if (numbytes) { |
392 | src = inbuf->rcvbuf; | 390 | src = inbuf->rcvbuf; |
393 | if (unlikely(*src)) | 391 | if (unlikely(*src)) |
394 | warn("%s: There was no leading 0, but 0x%02x!", | 392 | dev_warn(cs->dev, |
395 | __func__, (unsigned) *src); | 393 | "%s: There was no leading 0, but 0x%02x!\n", |
394 | __func__, (unsigned) *src); | ||
396 | ++src; /* skip leading 0x00 */ | 395 | ++src; /* skip leading 0x00 */ |
397 | --numbytes; | 396 | --numbytes; |
398 | if (gigaset_fill_inbuf(inbuf, src, numbytes)) { | 397 | if (gigaset_fill_inbuf(inbuf, src, numbytes)) { |
399 | dbg(DEBUG_INTR, "%s-->BH", __func__); | 398 | gig_dbg(DEBUG_INTR, "%s-->BH", __func__); |
400 | gigaset_schedule_event(inbuf->cs); | 399 | gigaset_schedule_event(inbuf->cs); |
401 | } | 400 | } |
402 | } else | 401 | } else |
403 | dbg(DEBUG_INTR, "Received zero block length"); | 402 | gig_dbg(DEBUG_INTR, "Received zero block length"); |
404 | resubmit = 1; | 403 | resubmit = 1; |
405 | } else { | 404 | } else { |
406 | /* The urb might have been killed. */ | 405 | /* The urb might have been killed. */ |
407 | dbg(DEBUG_ANY, "%s - nonzero read bulk status received: %d", | 406 | gig_dbg(DEBUG_ANY, "%s - nonzero read bulk status received: %d", |
408 | __func__, urb->status); | 407 | __func__, urb->status); |
409 | if (urb->status != -ENOENT) /* not killed */ | 408 | if (urb->status != -ENOENT) /* not killed */ |
410 | resubmit = 1; | 409 | resubmit = 1; |
411 | } | 410 | } |
412 | exit: | 411 | |
413 | if (resubmit) { | 412 | if (resubmit) { |
414 | r = usb_submit_urb(urb, SLAB_ATOMIC); | 413 | r = usb_submit_urb(urb, SLAB_ATOMIC); |
415 | if (r) | 414 | if (r) |
416 | err("error %d when resubmitting urb.", -r); | 415 | dev_err(cs->dev, "error %d when resubmitting urb.\n", |
416 | -r); | ||
417 | } | 417 | } |
418 | } | 418 | } |
419 | 419 | ||
@@ -426,14 +426,15 @@ static void gigaset_write_bulk_callback(struct urb *urb, struct pt_regs *regs) | |||
426 | IFNULLRET(cs); | 426 | IFNULLRET(cs); |
427 | #ifdef CONFIG_GIGASET_DEBUG | 427 | #ifdef CONFIG_GIGASET_DEBUG |
428 | if (!atomic_read(&cs->connected)) { | 428 | if (!atomic_read(&cs->connected)) { |
429 | err("%s:not connected", __func__); | 429 | err("%s: not connected", __func__); |
430 | return; | 430 | return; |
431 | } | 431 | } |
432 | #endif | 432 | #endif |
433 | if (urb->status) | 433 | if (urb->status) |
434 | err("bulk transfer failed (status %d)", -urb->status); | 434 | dev_err(cs->dev, "bulk transfer failed (status %d)\n", |
435 | -urb->status); | ||
435 | /* That's all we can do. Communication problems | 436 | /* That's all we can do. Communication problems |
436 | are handeled by timeouts or network protocols */ | 437 | are handled by timeouts or network protocols. */ |
437 | 438 | ||
438 | atomic_set(&cs->hw.usb->busy, 0); | 439 | atomic_set(&cs->hw.usb->busy, 0); |
439 | tasklet_schedule(&cs->write_tasklet); | 440 | tasklet_schedule(&cs->write_tasklet); |
@@ -453,8 +454,8 @@ static int send_cb(struct cardstate *cs, struct cmdbuf_t *cb) | |||
453 | 454 | ||
454 | spin_lock_irqsave(&cs->cmdlock, flags); | 455 | spin_lock_irqsave(&cs->cmdlock, flags); |
455 | cs->cmdbytes -= cs->curlen; | 456 | cs->cmdbytes -= cs->curlen; |
456 | dbg(DEBUG_OUTPUT, "send_cb: sent %u bytes, %u left", | 457 | gig_dbg(DEBUG_OUTPUT, "send_cb: sent %u bytes, %u left", |
457 | cs->curlen, cs->cmdbytes); | 458 | cs->curlen, cs->cmdbytes); |
458 | cs->cmdbuf = cb = cb->next; | 459 | cs->cmdbuf = cb = cb->next; |
459 | if (cb) { | 460 | if (cb) { |
460 | cb->prev = NULL; | 461 | cb->prev = NULL; |
@@ -472,21 +473,22 @@ static int send_cb(struct cardstate *cs, struct cmdbuf_t *cb) | |||
472 | if (cb) { | 473 | if (cb) { |
473 | count = min(cb->len, ucs->bulk_out_size); | 474 | count = min(cb->len, ucs->bulk_out_size); |
474 | usb_fill_bulk_urb(ucs->bulk_out_urb, ucs->udev, | 475 | usb_fill_bulk_urb(ucs->bulk_out_urb, ucs->udev, |
475 | usb_sndbulkpipe(ucs->udev, | 476 | usb_sndbulkpipe(ucs->udev, |
476 | ucs->bulk_out_endpointAddr & 0x0f), | 477 | ucs->bulk_out_endpointAddr & 0x0f), |
477 | cb->buf + cb->offset, count, | 478 | cb->buf + cb->offset, count, |
478 | gigaset_write_bulk_callback, cs); | 479 | gigaset_write_bulk_callback, cs); |
479 | 480 | ||
480 | cb->offset += count; | 481 | cb->offset += count; |
481 | cb->len -= count; | 482 | cb->len -= count; |
482 | atomic_set(&ucs->busy, 1); | 483 | atomic_set(&ucs->busy, 1); |
483 | dbg(DEBUG_OUTPUT, "send_cb: send %d bytes", count); | 484 | gig_dbg(DEBUG_OUTPUT, "send_cb: send %d bytes", count); |
484 | 485 | ||
485 | status = usb_submit_urb(ucs->bulk_out_urb, SLAB_ATOMIC); | 486 | status = usb_submit_urb(ucs->bulk_out_urb, SLAB_ATOMIC); |
486 | if (status) { | 487 | if (status) { |
487 | atomic_set(&ucs->busy, 0); | 488 | atomic_set(&ucs->busy, 0); |
488 | err("could not submit urb (error %d).", | 489 | dev_err(cs->dev, |
489 | -status); | 490 | "could not submit urb (error %d)\n", |
491 | -status); | ||
490 | cb->len = 0; /* skip urb => remove cb+wakeup | 492 | cb->len = 0; /* skip urb => remove cb+wakeup |
491 | in next loop cycle */ | 493 | in next loop cycle */ |
492 | } | 494 | } |
@@ -498,14 +500,14 @@ static int send_cb(struct cardstate *cs, struct cmdbuf_t *cb) | |||
498 | 500 | ||
499 | /* Send command to device. */ | 501 | /* Send command to device. */ |
500 | static int gigaset_write_cmd(struct cardstate *cs, const unsigned char *buf, | 502 | static int gigaset_write_cmd(struct cardstate *cs, const unsigned char *buf, |
501 | int len, struct tasklet_struct *wake_tasklet) | 503 | int len, struct tasklet_struct *wake_tasklet) |
502 | { | 504 | { |
503 | struct cmdbuf_t *cb; | 505 | struct cmdbuf_t *cb; |
504 | unsigned long flags; | 506 | unsigned long flags; |
505 | 507 | ||
506 | gigaset_dbg_buffer(atomic_read(&cs->mstate) != MS_LOCKED ? | 508 | gigaset_dbg_buffer(atomic_read(&cs->mstate) != MS_LOCKED ? |
507 | DEBUG_TRANSCMD : DEBUG_LOCKCMD, | 509 | DEBUG_TRANSCMD : DEBUG_LOCKCMD, |
508 | "CMD Transmit", len, buf, 0); | 510 | "CMD Transmit", len, buf, 0); |
509 | 511 | ||
510 | if (!atomic_read(&cs->connected)) { | 512 | if (!atomic_read(&cs->connected)) { |
511 | err("%s: not connected", __func__); | 513 | err("%s: not connected", __func__); |
@@ -516,7 +518,7 @@ static int gigaset_write_cmd(struct cardstate *cs, const unsigned char *buf, | |||
516 | return 0; | 518 | return 0; |
517 | 519 | ||
518 | if (!(cb = kmalloc(sizeof(struct cmdbuf_t) + len, GFP_ATOMIC))) { | 520 | if (!(cb = kmalloc(sizeof(struct cmdbuf_t) + len, GFP_ATOMIC))) { |
519 | err("%s: out of memory", __func__); | 521 | dev_err(cs->dev, "%s: out of memory\n", __func__); |
520 | return -ENOMEM; | 522 | return -ENOMEM; |
521 | } | 523 | } |
522 | 524 | ||
@@ -562,11 +564,12 @@ static int gigaset_chars_in_buffer(struct cardstate *cs) | |||
562 | static int gigaset_brkchars(struct cardstate *cs, const unsigned char buf[6]) | 564 | static int gigaset_brkchars(struct cardstate *cs, const unsigned char buf[6]) |
563 | { | 565 | { |
564 | #ifdef CONFIG_GIGASET_UNDOCREQ | 566 | #ifdef CONFIG_GIGASET_UNDOCREQ |
567 | struct usb_device *udev = cs->hw.usb->udev; | ||
568 | |||
565 | gigaset_dbg_buffer(DEBUG_USBREQ, "brkchars", 6, buf, 0); | 569 | gigaset_dbg_buffer(DEBUG_USBREQ, "brkchars", 6, buf, 0); |
566 | memcpy(cs->hw.usb->bchars, buf, 6); | 570 | memcpy(cs->hw.usb->bchars, buf, 6); |
567 | return usb_control_msg(cs->hw.usb->udev, | 571 | return usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x19, 0x41, |
568 | usb_sndctrlpipe(cs->hw.usb->udev, 0), 0x19, 0x41, | 572 | 0, 0, &buf, 6, 2000); |
569 | 0, 0, &buf, 6, 2000); | ||
570 | #else | 573 | #else |
571 | return -EINVAL; | 574 | return -EINVAL; |
572 | #endif | 575 | #endif |
@@ -621,7 +624,7 @@ static int gigaset_initcshw(struct cardstate *cs) | |||
621 | //ucs->urb_cmd_out = NULL; | 624 | //ucs->urb_cmd_out = NULL; |
622 | ucs->read_urb = NULL; | 625 | ucs->read_urb = NULL; |
623 | tasklet_init(&cs->write_tasklet, | 626 | tasklet_init(&cs->write_tasklet, |
624 | &gigaset_modem_fill, (unsigned long) cs); | 627 | &gigaset_modem_fill, (unsigned long) cs); |
625 | 628 | ||
626 | return 1; | 629 | return 1; |
627 | } | 630 | } |
@@ -636,7 +639,7 @@ static int write_modem(struct cardstate *cs) | |||
636 | 639 | ||
637 | IFNULLRETVAL(bcs->tx_skb, -EINVAL); | 640 | IFNULLRETVAL(bcs->tx_skb, -EINVAL); |
638 | 641 | ||
639 | dbg(DEBUG_WRITE, "len: %d...", bcs->tx_skb->len); | 642 | gig_dbg(DEBUG_WRITE, "len: %d...", bcs->tx_skb->len); |
640 | 643 | ||
641 | ret = -ENODEV; | 644 | ret = -ENODEV; |
642 | IFNULLGOTO(ucs->bulk_out_buffer, error); | 645 | IFNULLGOTO(ucs->bulk_out_buffer, error); |
@@ -657,24 +660,24 @@ static int write_modem(struct cardstate *cs) | |||
657 | skb_pull(bcs->tx_skb, count); | 660 | skb_pull(bcs->tx_skb, count); |
658 | 661 | ||
659 | usb_fill_bulk_urb(ucs->bulk_out_urb, ucs->udev, | 662 | usb_fill_bulk_urb(ucs->bulk_out_urb, ucs->udev, |
660 | usb_sndbulkpipe(ucs->udev, | 663 | usb_sndbulkpipe(ucs->udev, |
661 | ucs->bulk_out_endpointAddr & 0x0f), | 664 | ucs->bulk_out_endpointAddr & 0x0f), |
662 | ucs->bulk_out_buffer, count, | 665 | ucs->bulk_out_buffer, count, |
663 | gigaset_write_bulk_callback, cs); | 666 | gigaset_write_bulk_callback, cs); |
664 | atomic_set(&ucs->busy, 1); | 667 | atomic_set(&ucs->busy, 1); |
665 | dbg(DEBUG_OUTPUT, "write_modem: send %d bytes", count); | 668 | gig_dbg(DEBUG_OUTPUT, "write_modem: send %d bytes", count); |
666 | 669 | ||
667 | ret = usb_submit_urb(ucs->bulk_out_urb, SLAB_ATOMIC); | 670 | ret = usb_submit_urb(ucs->bulk_out_urb, SLAB_ATOMIC); |
668 | if (ret) { | 671 | if (ret) { |
669 | err("could not submit urb (error %d).", -ret); | 672 | dev_err(cs->dev, "could not submit urb (error %d)\n", -ret); |
670 | atomic_set(&ucs->busy, 0); | 673 | atomic_set(&ucs->busy, 0); |
671 | } | 674 | } |
672 | if (!bcs->tx_skb->len) { | 675 | if (!bcs->tx_skb->len) { |
673 | /* skb sent completely */ | 676 | /* skb sent completely */ |
674 | gigaset_skb_sent(bcs, bcs->tx_skb); //FIXME also, when ret<0? | 677 | gigaset_skb_sent(bcs, bcs->tx_skb); //FIXME also, when ret<0? |
675 | 678 | ||
676 | dbg(DEBUG_INTR, | 679 | gig_dbg(DEBUG_INTR, "kfree skb (Adr: %lx)!", |
677 | "kfree skb (Adr: %lx)!", (unsigned long) bcs->tx_skb); | 680 | (unsigned long) bcs->tx_skb); |
678 | dev_kfree_skb_any(bcs->tx_skb); | 681 | dev_kfree_skb_any(bcs->tx_skb); |
679 | bcs->tx_skb = NULL; | 682 | bcs->tx_skb = NULL; |
680 | } | 683 | } |
@@ -688,7 +691,7 @@ error: | |||
688 | } | 691 | } |
689 | 692 | ||
690 | static int gigaset_probe(struct usb_interface *interface, | 693 | static int gigaset_probe(struct usb_interface *interface, |
691 | const struct usb_device_id *id) | 694 | const struct usb_device_id *id) |
692 | { | 695 | { |
693 | int retval; | 696 | int retval; |
694 | struct usb_device *udev = interface_to_usbdev(interface); | 697 | struct usb_device *udev = interface_to_usbdev(interface); |
@@ -700,9 +703,10 @@ static int gigaset_probe(struct usb_interface *interface, | |||
700 | int buffer_size; | 703 | int buffer_size; |
701 | int alt; | 704 | int alt; |
702 | 705 | ||
703 | info("%s: Check if device matches .. (Vendor: 0x%x, Product: 0x%x)", | 706 | gig_dbg(DEBUG_ANY, |
704 | __func__, le16_to_cpu(udev->descriptor.idVendor), | 707 | "%s: Check if device matches .. (Vendor: 0x%x, Product: 0x%x)", |
705 | le16_to_cpu(udev->descriptor.idProduct)); | 708 | __func__, le16_to_cpu(udev->descriptor.idVendor), |
709 | le16_to_cpu(udev->descriptor.idProduct)); | ||
706 | 710 | ||
707 | retval = -ENODEV; //FIXME | 711 | retval = -ENODEV; //FIXME |
708 | 712 | ||
@@ -717,7 +721,7 @@ static int gigaset_probe(struct usb_interface *interface, | |||
717 | ifnum = hostif->desc.bInterfaceNumber; // FIXME ? | 721 | ifnum = hostif->desc.bInterfaceNumber; // FIXME ? |
718 | 722 | ||
719 | if (alt != 0 || ifnum != 0) { | 723 | if (alt != 0 || ifnum != 0) { |
720 | warn("ifnum %d, alt %d", ifnum, alt); | 724 | dev_warn(&udev->dev, "ifnum %d, alt %d\n", ifnum, alt); |
721 | return -ENODEV; | 725 | return -ENODEV; |
722 | } | 726 | } |
723 | 727 | ||
@@ -725,20 +729,27 @@ static int gigaset_probe(struct usb_interface *interface, | |||
725 | * | 729 | * |
726 | */ | 730 | */ |
727 | if (hostif->desc.bInterfaceClass != 255) { | 731 | if (hostif->desc.bInterfaceClass != 255) { |
728 | info("%s: Device matched, but iface_desc[%d]->bInterfaceClass==%d !", | 732 | dev_info(&udev->dev, |
729 | __func__, ifnum, hostif->desc.bInterfaceClass); | 733 | "%s: Device matched but iface_desc[%d]->bInterfaceClass==%d!\n", |
734 | __func__, ifnum, hostif->desc.bInterfaceClass); | ||
730 | return -ENODEV; | 735 | return -ENODEV; |
731 | } | 736 | } |
732 | 737 | ||
733 | info("%s: Device matched ... !", __func__); | 738 | dev_info(&udev->dev, "%s: Device matched ... !\n", __func__); |
734 | 739 | ||
735 | cs = gigaset_getunassignedcs(driver); | 740 | cs = gigaset_getunassignedcs(driver); |
736 | if (!cs) { | 741 | if (!cs) { |
737 | warn("No free cardstate!"); | 742 | dev_warn(&udev->dev, "no free cardstate\n"); |
738 | return -ENODEV; | 743 | return -ENODEV; |
739 | } | 744 | } |
740 | ucs = cs->hw.usb; | 745 | ucs = cs->hw.usb; |
741 | 746 | ||
747 | /* save off device structure ptrs for later use */ | ||
748 | usb_get_dev(udev); | ||
749 | ucs->udev = udev; | ||
750 | ucs->interface = interface; | ||
751 | cs->dev = &udev->dev; | ||
752 | |||
742 | endpoint = &hostif->endpoint[0].desc; | 753 | endpoint = &hostif->endpoint[0].desc; |
743 | 754 | ||
744 | buffer_size = le16_to_cpu(endpoint->wMaxPacketSize); | 755 | buffer_size = le16_to_cpu(endpoint->wMaxPacketSize); |
@@ -746,14 +757,14 @@ static int gigaset_probe(struct usb_interface *interface, | |||
746 | ucs->bulk_out_endpointAddr = endpoint->bEndpointAddress; | 757 | ucs->bulk_out_endpointAddr = endpoint->bEndpointAddress; |
747 | ucs->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL); | 758 | ucs->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL); |
748 | if (!ucs->bulk_out_buffer) { | 759 | if (!ucs->bulk_out_buffer) { |
749 | err("Couldn't allocate bulk_out_buffer"); | 760 | dev_err(cs->dev, "Couldn't allocate bulk_out_buffer\n"); |
750 | retval = -ENOMEM; | 761 | retval = -ENOMEM; |
751 | goto error; | 762 | goto error; |
752 | } | 763 | } |
753 | 764 | ||
754 | ucs->bulk_out_urb = usb_alloc_urb(0, SLAB_KERNEL); | 765 | ucs->bulk_out_urb = usb_alloc_urb(0, SLAB_KERNEL); |
755 | if (!ucs->bulk_out_urb) { | 766 | if (!ucs->bulk_out_urb) { |
756 | err("Couldn't allocate bulk_out_buffer"); | 767 | dev_err(cs->dev, "Couldn't allocate bulk_out_urb\n"); |
757 | retval = -ENOMEM; | 768 | retval = -ENOMEM; |
758 | goto error; | 769 | goto error; |
759 | } | 770 | } |
@@ -761,12 +772,10 @@ static int gigaset_probe(struct usb_interface *interface, | |||
761 | endpoint = &hostif->endpoint[1].desc; | 772 | endpoint = &hostif->endpoint[1].desc; |
762 | 773 | ||
763 | atomic_set(&ucs->busy, 0); | 774 | atomic_set(&ucs->busy, 0); |
764 | ucs->udev = udev; | ||
765 | ucs->interface = interface; | ||
766 | 775 | ||
767 | ucs->read_urb = usb_alloc_urb(0, SLAB_KERNEL); | 776 | ucs->read_urb = usb_alloc_urb(0, SLAB_KERNEL); |
768 | if (!ucs->read_urb) { | 777 | if (!ucs->read_urb) { |
769 | err("No free urbs available"); | 778 | dev_err(cs->dev, "No free urbs available\n"); |
770 | retval = -ENOMEM; | 779 | retval = -ENOMEM; |
771 | goto error; | 780 | goto error; |
772 | } | 781 | } |
@@ -775,21 +784,21 @@ static int gigaset_probe(struct usb_interface *interface, | |||
775 | ucs->int_in_endpointAddr = endpoint->bEndpointAddress; | 784 | ucs->int_in_endpointAddr = endpoint->bEndpointAddress; |
776 | cs->inbuf[0].rcvbuf = kmalloc(buffer_size, GFP_KERNEL); | 785 | cs->inbuf[0].rcvbuf = kmalloc(buffer_size, GFP_KERNEL); |
777 | if (!cs->inbuf[0].rcvbuf) { | 786 | if (!cs->inbuf[0].rcvbuf) { |
778 | err("Couldn't allocate rcvbuf"); | 787 | dev_err(cs->dev, "Couldn't allocate rcvbuf\n"); |
779 | retval = -ENOMEM; | 788 | retval = -ENOMEM; |
780 | goto error; | 789 | goto error; |
781 | } | 790 | } |
782 | /* Fill the interrupt urb and send it to the core */ | 791 | /* Fill the interrupt urb and send it to the core */ |
783 | usb_fill_int_urb(ucs->read_urb, udev, | 792 | usb_fill_int_urb(ucs->read_urb, udev, |
784 | usb_rcvintpipe(udev, | 793 | usb_rcvintpipe(udev, |
785 | endpoint->bEndpointAddress & 0x0f), | 794 | endpoint->bEndpointAddress & 0x0f), |
786 | cs->inbuf[0].rcvbuf, buffer_size, | 795 | cs->inbuf[0].rcvbuf, buffer_size, |
787 | gigaset_read_int_callback, | 796 | gigaset_read_int_callback, |
788 | cs->inbuf + 0, endpoint->bInterval); | 797 | cs->inbuf + 0, endpoint->bInterval); |
789 | 798 | ||
790 | retval = usb_submit_urb(ucs->read_urb, SLAB_KERNEL); | 799 | retval = usb_submit_urb(ucs->read_urb, SLAB_KERNEL); |
791 | if (retval) { | 800 | if (retval) { |
792 | err("Could not submit URB!"); | 801 | dev_err(cs->dev, "Could not submit URB (error %d)\n", -retval); |
793 | goto error; | 802 | goto error; |
794 | } | 803 | } |
795 | 804 | ||
@@ -820,6 +829,9 @@ error: | |||
820 | usb_free_urb(ucs->read_urb); | 829 | usb_free_urb(ucs->read_urb); |
821 | ucs->read_urb = ucs->bulk_out_urb = NULL; | 830 | ucs->read_urb = ucs->bulk_out_urb = NULL; |
822 | cs->inbuf[0].rcvbuf = ucs->bulk_out_buffer = NULL; | 831 | cs->inbuf[0].rcvbuf = ucs->bulk_out_buffer = NULL; |
832 | usb_put_dev(ucs->udev); | ||
833 | ucs->udev = NULL; | ||
834 | ucs->interface = NULL; | ||
823 | gigaset_unassign(cs); | 835 | gigaset_unassign(cs); |
824 | return retval; | 836 | return retval; |
825 | } | 837 | } |
@@ -840,13 +852,12 @@ static void gigaset_disconnect(struct usb_interface *interface) | |||
840 | usb_set_intfdata(interface, NULL); | 852 | usb_set_intfdata(interface, NULL); |
841 | ucs = cs->hw.usb; | 853 | ucs = cs->hw.usb; |
842 | usb_kill_urb(ucs->read_urb); | 854 | usb_kill_urb(ucs->read_urb); |
843 | //info("GigaSet USB device #%d will be disconnected", minor); | ||
844 | 855 | ||
845 | gigaset_stop(cs); | 856 | gigaset_stop(cs); |
846 | 857 | ||
847 | tasklet_kill(&cs->write_tasklet); | 858 | tasklet_kill(&cs->write_tasklet); |
848 | 859 | ||
849 | usb_kill_urb(ucs->bulk_out_urb); /* FIXME: only if active? */ | 860 | usb_kill_urb(ucs->bulk_out_urb); /* FIXME: only if active? */ |
850 | 861 | ||
851 | kfree(ucs->bulk_out_buffer); | 862 | kfree(ucs->bulk_out_buffer); |
852 | if (ucs->bulk_out_urb != NULL) | 863 | if (ucs->bulk_out_urb != NULL) |
@@ -889,9 +900,9 @@ static int __init usb_gigaset_init(void) | |||
889 | 900 | ||
890 | /* allocate memory for our driver state and intialize it */ | 901 | /* allocate memory for our driver state and intialize it */ |
891 | if ((driver = gigaset_initdriver(GIGASET_MINOR, GIGASET_MINORS, | 902 | if ((driver = gigaset_initdriver(GIGASET_MINOR, GIGASET_MINORS, |
892 | GIGASET_MODULENAME, GIGASET_DEVNAME, | 903 | GIGASET_MODULENAME, GIGASET_DEVNAME, |
893 | GIGASET_DEVFSNAME, &ops, | 904 | GIGASET_DEVFSNAME, &ops, |
894 | THIS_MODULE)) == NULL) | 905 | THIS_MODULE)) == NULL) |
895 | goto error; | 906 | goto error; |
896 | 907 | ||
897 | /* allocate memory for our device state and intialize it */ | 908 | /* allocate memory for our device state and intialize it */ |
@@ -928,8 +939,8 @@ error: if (cardstate) | |||
928 | static void __exit usb_gigaset_exit(void) | 939 | static void __exit usb_gigaset_exit(void) |
929 | { | 940 | { |
930 | gigaset_blockdriver(driver); /* => probe will fail | 941 | gigaset_blockdriver(driver); /* => probe will fail |
931 | * => no gigaset_start any more | 942 | * => no gigaset_start any more |
932 | */ | 943 | */ |
933 | 944 | ||
934 | gigaset_shutdown(cardstate); | 945 | gigaset_shutdown(cardstate); |
935 | /* from now on, no isdn callback should be possible */ | 946 | /* from now on, no isdn callback should be possible */ |