aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/isdn')
-rw-r--r--drivers/isdn/gigaset/asyncdata.c55
-rw-r--r--drivers/isdn/gigaset/capi.c29
-rw-r--r--drivers/isdn/gigaset/gigaset.h2
-rw-r--r--drivers/isdn/gigaset/i4l.c28
-rw-r--r--drivers/isdn/gigaset/isocdata.c6
5 files changed, 70 insertions, 50 deletions
diff --git a/drivers/isdn/gigaset/asyncdata.c b/drivers/isdn/gigaset/asyncdata.c
index a25216bf475e..256fc4809c81 100644
--- a/drivers/isdn/gigaset/asyncdata.c
+++ b/drivers/isdn/gigaset/asyncdata.c
@@ -156,7 +156,7 @@ byte_stuff:
156 156
157 /* end of frame */ 157 /* end of frame */
158 gigaset_isdn_rcv_err(bcs); 158 gigaset_isdn_rcv_err(bcs);
159 dev_kfree_skb(skb); 159 dev_kfree_skb_any(skb);
160 } else if (!(inputstate & INS_have_data)) { /* 7E 7E */ 160 } else if (!(inputstate & INS_have_data)) { /* 7E 7E */
161#ifdef CONFIG_GIGASET_DEBUG 161#ifdef CONFIG_GIGASET_DEBUG
162 ++bcs->emptycount; 162 ++bcs->emptycount;
@@ -172,7 +172,7 @@ byte_stuff:
172 "Checksum failed, %u bytes corrupted!\n", 172 "Checksum failed, %u bytes corrupted!\n",
173 skb->len); 173 skb->len);
174 gigaset_isdn_rcv_err(bcs); 174 gigaset_isdn_rcv_err(bcs);
175 dev_kfree_skb(skb); 175 dev_kfree_skb_any(skb);
176 } else if (likely(skb->len > 2)) { 176 } else if (likely(skb->len > 2)) {
177 __skb_trim(skb, skb->len - 2); 177 __skb_trim(skb, skb->len - 2);
178 gigaset_skb_rcvd(bcs, skb); 178 gigaset_skb_rcvd(bcs, skb);
@@ -182,7 +182,7 @@ byte_stuff:
182 "invalid packet size (%d)\n", skb->len); 182 "invalid packet size (%d)\n", skb->len);
183 gigaset_isdn_rcv_err(bcs); 183 gigaset_isdn_rcv_err(bcs);
184 } 184 }
185 dev_kfree_skb(skb); 185 dev_kfree_skb_any(skb);
186 } 186 }
187 } 187 }
188 188
@@ -430,11 +430,11 @@ EXPORT_SYMBOL_GPL(gigaset_m10x_input);
430 * opening and closing flags, preserving headroom data. 430 * opening and closing flags, preserving headroom data.
431 * parameters: 431 * parameters:
432 * skb skb containing original packet (freed upon return) 432 * skb skb containing original packet (freed upon return)
433 * headroom number of headroom bytes to preserve
434 * Return value: 433 * Return value:
435 * pointer to newly allocated skb containing the result frame 434 * pointer to newly allocated skb containing the result frame
435 * and the original link layer header, NULL on error
436 */ 436 */
437static struct sk_buff *HDLC_Encode(struct sk_buff *skb, int headroom) 437static struct sk_buff *HDLC_Encode(struct sk_buff *skb)
438{ 438{
439 struct sk_buff *hdlc_skb; 439 struct sk_buff *hdlc_skb;
440 __u16 fcs; 440 __u16 fcs;
@@ -456,17 +456,19 @@ static struct sk_buff *HDLC_Encode(struct sk_buff *skb, int headroom)
456 456
457 /* size of new buffer: original size + number of stuffing bytes 457 /* size of new buffer: original size + number of stuffing bytes
458 * + 2 bytes FCS + 2 stuffing bytes for FCS (if needed) + 2 flag bytes 458 * + 2 bytes FCS + 2 stuffing bytes for FCS (if needed) + 2 flag bytes
459 * + room for acknowledgement header 459 * + room for link layer header
460 */ 460 */
461 hdlc_skb = dev_alloc_skb(skb->len + stuf_cnt + 6 + headroom); 461 hdlc_skb = dev_alloc_skb(skb->len + stuf_cnt + 6 + skb->mac_len);
462 if (!hdlc_skb) { 462 if (!hdlc_skb) {
463 dev_kfree_skb(skb); 463 dev_kfree_skb_any(skb);
464 return NULL; 464 return NULL;
465 } 465 }
466 466
467 /* Copy acknowledgement header into new skb */ 467 /* Copy link layer header into new skb */
468 skb_reserve(hdlc_skb, headroom); 468 skb_reset_mac_header(hdlc_skb);
469 memcpy(hdlc_skb->head, skb->head, headroom); 469 skb_reserve(hdlc_skb, skb->mac_len);
470 memcpy(skb_mac_header(hdlc_skb), skb_mac_header(skb), skb->mac_len);
471 hdlc_skb->mac_len = skb->mac_len;
470 472
471 /* Add flag sequence in front of everything.. */ 473 /* Add flag sequence in front of everything.. */
472 *(skb_put(hdlc_skb, 1)) = PPP_FLAG; 474 *(skb_put(hdlc_skb, 1)) = PPP_FLAG;
@@ -497,7 +499,7 @@ static struct sk_buff *HDLC_Encode(struct sk_buff *skb, int headroom)
497 499
498 *(skb_put(hdlc_skb, 1)) = PPP_FLAG; 500 *(skb_put(hdlc_skb, 1)) = PPP_FLAG;
499 501
500 dev_kfree_skb(skb); 502 dev_kfree_skb_any(skb);
501 return hdlc_skb; 503 return hdlc_skb;
502} 504}
503 505
@@ -506,28 +508,33 @@ static struct sk_buff *HDLC_Encode(struct sk_buff *skb, int headroom)
506 * preserving headroom data. 508 * preserving headroom data.
507 * parameters: 509 * parameters:
508 * skb skb containing original packet (freed upon return) 510 * skb skb containing original packet (freed upon return)
509 * headroom number of headroom bytes to preserve
510 * Return value: 511 * Return value:
511 * pointer to newly allocated skb containing the result frame 512 * pointer to newly allocated skb containing the result frame
513 * and the original link layer header, NULL on error
512 */ 514 */
513static struct sk_buff *iraw_encode(struct sk_buff *skb, int headroom) 515static struct sk_buff *iraw_encode(struct sk_buff *skb)
514{ 516{
515 struct sk_buff *iraw_skb; 517 struct sk_buff *iraw_skb;
516 unsigned char c; 518 unsigned char c;
517 unsigned char *cp; 519 unsigned char *cp;
518 int len; 520 int len;
519 521
520 /* worst case: every byte must be stuffed */ 522 /* size of new buffer (worst case = every byte must be stuffed):
521 iraw_skb = dev_alloc_skb(2*skb->len + headroom); 523 * 2 * original size + room for link layer header
524 */
525 iraw_skb = dev_alloc_skb(2*skb->len + skb->mac_len);
522 if (!iraw_skb) { 526 if (!iraw_skb) {
523 dev_kfree_skb(skb); 527 dev_kfree_skb_any(skb);
524 return NULL; 528 return NULL;
525 } 529 }
526 530
527 /* Copy acknowledgement header into new skb */ 531 /* copy link layer header into new skb */
528 skb_reserve(iraw_skb, headroom); 532 skb_reset_mac_header(iraw_skb);
529 memcpy(iraw_skb->head, skb->head, headroom); 533 skb_reserve(iraw_skb, skb->mac_len);
534 memcpy(skb_mac_header(iraw_skb), skb_mac_header(skb), skb->mac_len);
535 iraw_skb->mac_len = skb->mac_len;
530 536
537 /* copy and stuff data */
531 cp = skb->data; 538 cp = skb->data;
532 len = skb->len; 539 len = skb->len;
533 while (len--) { 540 while (len--) {
@@ -536,7 +543,7 @@ static struct sk_buff *iraw_encode(struct sk_buff *skb, int headroom)
536 *(skb_put(iraw_skb, 1)) = c; 543 *(skb_put(iraw_skb, 1)) = c;
537 *(skb_put(iraw_skb, 1)) = c; 544 *(skb_put(iraw_skb, 1)) = c;
538 } 545 }
539 dev_kfree_skb(skb); 546 dev_kfree_skb_any(skb);
540 return iraw_skb; 547 return iraw_skb;
541} 548}
542 549
@@ -548,7 +555,7 @@ static struct sk_buff *iraw_encode(struct sk_buff *skb, int headroom)
548 * Called by LL to encode and queue an skb for sending, and start 555 * Called by LL to encode and queue an skb for sending, and start
549 * transmission if necessary. 556 * transmission if necessary.
550 * Once the payload data has been transmitted completely, gigaset_skb_sent() 557 * Once the payload data has been transmitted completely, gigaset_skb_sent()
551 * will be called with the first cs->hw_hdr_len bytes of skb->head preserved. 558 * will be called with the skb's link layer header preserved.
552 * 559 *
553 * Return value: 560 * Return value:
554 * number of bytes accepted for sending (skb->len) if ok, 561 * number of bytes accepted for sending (skb->len) if ok,
@@ -560,9 +567,9 @@ int gigaset_m10x_send_skb(struct bc_state *bcs, struct sk_buff *skb)
560 unsigned long flags; 567 unsigned long flags;
561 568
562 if (bcs->proto2 == L2_HDLC) 569 if (bcs->proto2 == L2_HDLC)
563 skb = HDLC_Encode(skb, bcs->cs->hw_hdr_len); 570 skb = HDLC_Encode(skb);
564 else 571 else
565 skb = iraw_encode(skb, bcs->cs->hw_hdr_len); 572 skb = iraw_encode(skb);
566 if (!skb) { 573 if (!skb) {
567 dev_err(bcs->cs->dev, 574 dev_err(bcs->cs->dev,
568 "unable to allocate memory for encoding!\n"); 575 "unable to allocate memory for encoding!\n");
diff --git a/drivers/isdn/gigaset/capi.c b/drivers/isdn/gigaset/capi.c
index d1afac2bf650..3f5cd06af104 100644
--- a/drivers/isdn/gigaset/capi.c
+++ b/drivers/isdn/gigaset/capi.c
@@ -362,6 +362,7 @@ void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *dskb)
362 struct cardstate *cs = bcs->cs; 362 struct cardstate *cs = bcs->cs;
363 struct gigaset_capi_ctr *iif = cs->iif; 363 struct gigaset_capi_ctr *iif = cs->iif;
364 struct gigaset_capi_appl *ap = bcs->ap; 364 struct gigaset_capi_appl *ap = bcs->ap;
365 unsigned char *req = skb_mac_header(dskb);
365 struct sk_buff *cskb; 366 struct sk_buff *cskb;
366 u16 flags; 367 u16 flags;
367 368
@@ -380,7 +381,7 @@ void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *dskb)
380 } 381 }
381 382
382 /* ToDo: honor unset "delivery confirmation" bit */ 383 /* ToDo: honor unset "delivery confirmation" bit */
383 flags = CAPIMSG_FLAGS(dskb->head); 384 flags = CAPIMSG_FLAGS(req);
384 385
385 /* build DATA_B3_CONF message */ 386 /* build DATA_B3_CONF message */
386 cskb = alloc_skb(CAPI_DATA_B3_CONF_LEN, GFP_ATOMIC); 387 cskb = alloc_skb(CAPI_DATA_B3_CONF_LEN, GFP_ATOMIC);
@@ -393,11 +394,11 @@ void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *dskb)
393 CAPIMSG_SETAPPID(cskb->data, ap->id); 394 CAPIMSG_SETAPPID(cskb->data, ap->id);
394 CAPIMSG_SETCOMMAND(cskb->data, CAPI_DATA_B3); 395 CAPIMSG_SETCOMMAND(cskb->data, CAPI_DATA_B3);
395 CAPIMSG_SETSUBCOMMAND(cskb->data, CAPI_CONF); 396 CAPIMSG_SETSUBCOMMAND(cskb->data, CAPI_CONF);
396 CAPIMSG_SETMSGID(cskb->data, CAPIMSG_MSGID(dskb->head)); 397 CAPIMSG_SETMSGID(cskb->data, CAPIMSG_MSGID(req));
397 CAPIMSG_SETCONTROLLER(cskb->data, iif->ctr.cnr); 398 CAPIMSG_SETCONTROLLER(cskb->data, iif->ctr.cnr);
398 CAPIMSG_SETPLCI_PART(cskb->data, bcs->channel + 1); 399 CAPIMSG_SETPLCI_PART(cskb->data, bcs->channel + 1);
399 CAPIMSG_SETNCCI_PART(cskb->data, 1); 400 CAPIMSG_SETNCCI_PART(cskb->data, 1);
400 CAPIMSG_SETHANDLE_CONF(cskb->data, CAPIMSG_HANDLE_REQ(dskb->head)); 401 CAPIMSG_SETHANDLE_CONF(cskb->data, CAPIMSG_HANDLE_REQ(req));
401 if (flags & ~CAPI_FLAGS_DELIVERY_CONFIRMATION) 402 if (flags & ~CAPI_FLAGS_DELIVERY_CONFIRMATION)
402 CAPIMSG_SETINFO_CONF(cskb->data, 403 CAPIMSG_SETINFO_CONF(cskb->data,
403 CapiFlagsNotSupportedByProtocol); 404 CapiFlagsNotSupportedByProtocol);
@@ -437,7 +438,7 @@ void gigaset_skb_rcvd(struct bc_state *bcs, struct sk_buff *skb)
437 /* don't send further B3 messages if disconnected */ 438 /* don't send further B3 messages if disconnected */
438 if (ap->connected < APCONN_ACTIVE) { 439 if (ap->connected < APCONN_ACTIVE) {
439 gig_dbg(DEBUG_LLDATA, "disconnected, discarding data"); 440 gig_dbg(DEBUG_LLDATA, "disconnected, discarding data");
440 dev_kfree_skb(skb); 441 dev_kfree_skb_any(skb);
441 return; 442 return;
442 } 443 }
443 444
@@ -1461,7 +1462,7 @@ static void do_connect_resp(struct gigaset_capi_ctr *iif,
1461 /* decode message */ 1462 /* decode message */
1462 capi_message2cmsg(cmsg, skb->data); 1463 capi_message2cmsg(cmsg, skb->data);
1463 dump_cmsg(DEBUG_CMD, __func__, cmsg); 1464 dump_cmsg(DEBUG_CMD, __func__, cmsg);
1464 dev_kfree_skb(skb); 1465 dev_kfree_skb_any(skb);
1465 1466
1466 /* extract and check channel number from PLCI */ 1467 /* extract and check channel number from PLCI */
1467 channel = (cmsg->adr.adrPLCI >> 8) & 0xff; 1468 channel = (cmsg->adr.adrPLCI >> 8) & 0xff;
@@ -1652,7 +1653,7 @@ static void do_connect_b3_resp(struct gigaset_capi_ctr *iif,
1652 ((cmsg->adr.adrNCCI >> 16) & 0xffff) != 1) { 1653 ((cmsg->adr.adrNCCI >> 16) & 0xffff) != 1) {
1653 dev_notice(cs->dev, "%s: invalid %s 0x%02x\n", 1654 dev_notice(cs->dev, "%s: invalid %s 0x%02x\n",
1654 "CONNECT_B3_RESP", "NCCI", cmsg->adr.adrNCCI); 1655 "CONNECT_B3_RESP", "NCCI", cmsg->adr.adrNCCI);
1655 dev_kfree_skb(skb); 1656 dev_kfree_skb_any(skb);
1656 return; 1657 return;
1657 } 1658 }
1658 bcs = &cs->bcs[channel-1]; 1659 bcs = &cs->bcs[channel-1];
@@ -1665,7 +1666,7 @@ static void do_connect_b3_resp(struct gigaset_capi_ctr *iif,
1665 if (!gigaset_add_event(cs, &bcs->at_state, 1666 if (!gigaset_add_event(cs, &bcs->at_state,
1666 EV_HUP, NULL, 0, NULL)) { 1667 EV_HUP, NULL, 0, NULL)) {
1667 dev_err(cs->dev, "%s: out of memory\n", __func__); 1668 dev_err(cs->dev, "%s: out of memory\n", __func__);
1668 dev_kfree_skb(skb); 1669 dev_kfree_skb_any(skb);
1669 return; 1670 return;
1670 } 1671 }
1671 gig_dbg(DEBUG_CMD, "scheduling HUP"); 1672 gig_dbg(DEBUG_CMD, "scheduling HUP");
@@ -1880,12 +1881,12 @@ static void do_data_b3_req(struct gigaset_capi_ctr *iif,
1880 return; 1881 return;
1881 } 1882 }
1882 1883
1883 /* 1884 /* pull CAPI message into link layer header */
1884 * pull CAPI message from skb, 1885 skb_reset_mac_header(skb);
1885 * pass payload data to device-specific module 1886 skb->mac_len = msglen;
1886 * CAPI message will be preserved in headroom
1887 */
1888 skb_pull(skb, msglen); 1887 skb_pull(skb, msglen);
1888
1889 /* pass to device-specific module */
1889 if (cs->ops->send_skb(&cs->bcs[channel-1], skb) < 0) { 1890 if (cs->ops->send_skb(&cs->bcs[channel-1], skb) < 0) {
1890 send_conf(iif, ap, skb, CAPI_MSGOSRESOURCEERR); 1891 send_conf(iif, ap, skb, CAPI_MSGOSRESOURCEERR);
1891 return; 1892 return;
@@ -1946,7 +1947,7 @@ static void do_nothing(struct gigaset_capi_ctr *iif,
1946 capi_message2cmsg(&iif->acmsg, skb->data); 1947 capi_message2cmsg(&iif->acmsg, skb->data);
1947 dump_cmsg(DEBUG_CMD, __func__, &iif->acmsg); 1948 dump_cmsg(DEBUG_CMD, __func__, &iif->acmsg);
1948 } 1949 }
1949 dev_kfree_skb(skb); 1950 dev_kfree_skb_any(skb);
1950} 1951}
1951 1952
1952static void do_data_b3_resp(struct gigaset_capi_ctr *iif, 1953static void do_data_b3_resp(struct gigaset_capi_ctr *iif,
@@ -1954,7 +1955,7 @@ static void do_data_b3_resp(struct gigaset_capi_ctr *iif,
1954 struct sk_buff *skb) 1955 struct sk_buff *skb)
1955{ 1956{
1956 dump_rawmsg(DEBUG_LLDATA, __func__, skb->data); 1957 dump_rawmsg(DEBUG_LLDATA, __func__, skb->data);
1957 dev_kfree_skb(skb); 1958 dev_kfree_skb_any(skb);
1958} 1959}
1959 1960
1960/* table of outgoing CAPI message handlers with lookup function */ 1961/* table of outgoing CAPI message handlers with lookup function */
diff --git a/drivers/isdn/gigaset/gigaset.h b/drivers/isdn/gigaset/gigaset.h
index 4749ef100fd3..c59216b9c1d0 100644
--- a/drivers/isdn/gigaset/gigaset.h
+++ b/drivers/isdn/gigaset/gigaset.h
@@ -625,7 +625,7 @@ struct gigaset_ops {
625 625
626 /* Called from LL interface to put an skb into the send-queue. 626 /* Called from LL interface to put an skb into the send-queue.
627 * After sending is completed, gigaset_skb_sent() must be called 627 * After sending is completed, gigaset_skb_sent() must be called
628 * with the first cs->hw_hdr_len bytes of skb->head preserved. */ 628 * with the skb's link layer header preserved. */
629 int (*send_skb)(struct bc_state *bcs, struct sk_buff *skb); 629 int (*send_skb)(struct bc_state *bcs, struct sk_buff *skb);
630 630
631 /* Called from ev-layer.c to process a block of data 631 /* Called from ev-layer.c to process a block of data
diff --git a/drivers/isdn/gigaset/i4l.c b/drivers/isdn/gigaset/i4l.c
index aca72a06184e..828824f905c4 100644
--- a/drivers/isdn/gigaset/i4l.c
+++ b/drivers/isdn/gigaset/i4l.c
@@ -41,8 +41,8 @@ static int writebuf_from_LL(int driverID, int channel, int ack,
41{ 41{
42 struct cardstate *cs; 42 struct cardstate *cs;
43 struct bc_state *bcs; 43 struct bc_state *bcs;
44 unsigned char *ack_header;
44 unsigned len; 45 unsigned len;
45 unsigned skblen;
46 46
47 if (!(cs = gigaset_get_cs_by_id(driverID))) { 47 if (!(cs = gigaset_get_cs_by_id(driverID))) {
48 pr_err("%s: invalid driver ID (%d)\n", __func__, driverID); 48 pr_err("%s: invalid driver ID (%d)\n", __func__, driverID);
@@ -78,11 +78,23 @@ static int writebuf_from_LL(int driverID, int channel, int ack,
78 return -EINVAL; 78 return -EINVAL;
79 } 79 }
80 80
81 skblen = ack ? len : 0; 81 /* set up acknowledgement header */
82 skb->head[0] = skblen & 0xff; 82 if (skb_headroom(skb) < HW_HDR_LEN) {
83 skb->head[1] = skblen >> 8; 83 /* should never happen */
84 gig_dbg(DEBUG_MCMD, "skb: len=%u, skblen=%u: %02x %02x", 84 dev_err(cs->dev, "%s: insufficient skb headroom\n", __func__);
85 len, skblen, (unsigned) skb->head[0], (unsigned) skb->head[1]); 85 return -ENOMEM;
86 }
87 skb_set_mac_header(skb, -HW_HDR_LEN);
88 skb->mac_len = HW_HDR_LEN;
89 ack_header = skb_mac_header(skb);
90 if (ack) {
91 ack_header[0] = len & 0xff;
92 ack_header[1] = len >> 8;
93 } else {
94 ack_header[0] = ack_header[1] = 0;
95 }
96 gig_dbg(DEBUG_MCMD, "skb: len=%u, ack=%d: %02x %02x",
97 len, ack, ack_header[0], ack_header[1]);
86 98
87 /* pass to device-specific module */ 99 /* pass to device-specific module */
88 return cs->ops->send_skb(bcs, skb); 100 return cs->ops->send_skb(bcs, skb);
@@ -99,6 +111,7 @@ static int writebuf_from_LL(int driverID, int channel, int ack,
99void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb) 111void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb)
100{ 112{
101 isdn_if *iif = bcs->cs->iif; 113 isdn_if *iif = bcs->cs->iif;
114 unsigned char *ack_header = skb_mac_header(skb);
102 unsigned len; 115 unsigned len;
103 isdn_ctrl response; 116 isdn_ctrl response;
104 117
@@ -108,8 +121,7 @@ void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb)
108 dev_warn(bcs->cs->dev, "%s: skb->len==%d\n", 121 dev_warn(bcs->cs->dev, "%s: skb->len==%d\n",
109 __func__, skb->len); 122 __func__, skb->len);
110 123
111 len = (unsigned char) skb->head[0] | 124 len = ack_header[0] + ((unsigned) ack_header[1] << 8);
112 (unsigned) (unsigned char) skb->head[1] << 8;
113 if (len) { 125 if (len) {
114 gig_dbg(DEBUG_MCMD, "ACKing to LL (id: %d, ch: %d, sz: %u)", 126 gig_dbg(DEBUG_MCMD, "ACKing to LL (id: %d, ch: %d, sz: %u)",
115 bcs->cs->myid, bcs->channel, len); 127 bcs->cs->myid, bcs->channel, len);
diff --git a/drivers/isdn/gigaset/isocdata.c b/drivers/isdn/gigaset/isocdata.c
index 7dabfd35874c..bc41611e541d 100644
--- a/drivers/isdn/gigaset/isocdata.c
+++ b/drivers/isdn/gigaset/isocdata.c
@@ -576,12 +576,12 @@ static inline void hdlc_done(struct bc_state *bcs)
576 dev_notice(cs->dev, "received short frame (%d octets)\n", 576 dev_notice(cs->dev, "received short frame (%d octets)\n",
577 procskb->len); 577 procskb->len);
578 bcs->hw.bas->runts++; 578 bcs->hw.bas->runts++;
579 dev_kfree_skb(procskb); 579 dev_kfree_skb_any(procskb);
580 gigaset_isdn_rcv_err(bcs); 580 gigaset_isdn_rcv_err(bcs);
581 } else if (bcs->fcs != PPP_GOODFCS) { 581 } else if (bcs->fcs != PPP_GOODFCS) {
582 dev_notice(cs->dev, "frame check error (0x%04x)\n", bcs->fcs); 582 dev_notice(cs->dev, "frame check error (0x%04x)\n", bcs->fcs);
583 bcs->hw.bas->fcserrs++; 583 bcs->hw.bas->fcserrs++;
584 dev_kfree_skb(procskb); 584 dev_kfree_skb_any(procskb);
585 gigaset_isdn_rcv_err(bcs); 585 gigaset_isdn_rcv_err(bcs);
586 } else { 586 } else {
587 len = procskb->len; 587 len = procskb->len;
@@ -985,7 +985,7 @@ void gigaset_isoc_input(struct inbuf_t *inbuf)
985 * Called by LL to queue an skb for sending, and start transmission if 985 * Called by LL to queue an skb for sending, and start transmission if
986 * necessary. 986 * necessary.
987 * Once the payload data has been transmitted completely, gigaset_skb_sent() 987 * Once the payload data has been transmitted completely, gigaset_skb_sent()
988 * will be called with the first cs->hw_hdr_len bytes of skb->head preserved. 988 * will be called with the skb's link layer header preserved.
989 * 989 *
990 * Return value: 990 * Return value:
991 * number of bytes accepted for sending (skb->len) if ok, 991 * number of bytes accepted for sending (skb->len) if ok,