17 #include <linux/isdnif.h>
18 #include <linux/export.h>
21 #define TRANSBUFSIZE 768
23 #define MAX_BUF_SIZE (SBUFSIZE - HW_HDR_LEN)
43 static int writebuf_from_LL(
int driverID,
int channel,
int ack,
48 unsigned char *ack_header;
52 pr_err(
"%s: invalid driver ID (%d)\n", __func__, driverID);
56 dev_err(cs->
dev,
"%s: invalid channel ID (%d)\n",
63 if (skb_linearize(skb) < 0) {
64 dev_err(cs->
dev,
"%s: skb_linearize failed\n", __func__);
70 "Receiving data from LL (id: %d, ch: %d, ack: %d, sz: %d)",
71 driverID, channel, ack, len);
75 dev_notice(cs->
dev,
"%s: not ACKing empty packet\n",
80 dev_err(cs->
dev,
"%s: packet too large (%d bytes)\n",
88 dev_err(cs->
dev,
"%s: insufficient skb headroom\n", __func__);
93 ack_header = skb_mac_header(skb);
95 ack_header[0] = len & 0xff;
96 ack_header[1] = len >> 8;
98 ack_header[0] = ack_header[1] = 0;
101 len, ack, ack_header[0], ack_header[1]);
104 return cs->
ops->send_skb(bcs, skb);
118 unsigned char *ack_header = skb_mac_header(skb);
128 len = ack_header[0] + ((unsigned) ack_header[1] << 8);
195 static int command_from_LL(
isdn_ctrl *cntrl)
210 pr_err(
"%s: invalid driver ID (%d)\n", __func__, cntrl->
driver);
213 ch = cntrl->
arg & 0xff;
217 dev_warn(cs->
dev,
"ISDN_CMD_IOCTL not supported\n");
222 "ISDN_CMD_DIAL (phone: %s, msn: %s, si1: %d, si2: %d)",
228 "ISDN_CMD_DIAL: invalid channel (%d)\n", ch);
233 dev_err(cs->
dev,
"ISDN_CMD_DIAL: channel not free\n");
243 dev_kfree_skb(bcs->
rx_skb);
244 gigaset_new_rx_skb(bcs);
249 dev_err(cs->
dev,
"ISDN_CMD_DIAL: out of memory\n");
279 snprintf(commands[AT_MSN], l,
"^SMSN=%s\r",
287 if (!commands[
AT_BC])
294 if (!commands[AT_BC])
307 snprintf(commands[AT_ISO], 9,
"^SISO=%u\r",
318 gigaset_schedule_event(cs);
324 "ISDN_CMD_ACCEPTD: invalid channel (%d)\n", ch);
335 dev_kfree_skb(bcs->
rx_skb);
336 gigaset_new_rx_skb(bcs);
340 gigaset_schedule_event(cs);
347 "ISDN_CMD_HANGUP: invalid channel (%d)\n", ch);
354 gigaset_schedule_event(cs);
361 dev_info(cs->
dev,
"ignoring ISDN_CMD_SETEAZ (%s)\n",
367 "ISDN_CMD_SETL2: invalid channel (%d)\n", ch);
373 "ISDN_CMD_SETL2: channel active (%d)\n", ch);
376 switch (cntrl->
arg >> 8) {
387 "ISDN_CMD_SETL2: unsupported protocol (%lu)\n",
396 "ISDN_CMD_SETL3: invalid channel (%d)\n", ch);
402 "ISDN_CMD_SETL3: unsupported protocol (%lu)\n",
418 dev_err(bcs->
cs->dev,
"out of memory\n");
426 static void gigaset_i4l_cmd(
struct cardstate *cs,
int cmd)
437 static void gigaset_i4l_channel_cmd(
struct bc_state *bcs,
int cmd)
484 dev_warn(cs->
dev,
"RING ignored - unsupported BC %s\n",
500 dev_notice(cs->
dev,
"no channel for incoming call\n");
521 "LL requested unsupported feature: Incomplete Number\n");
530 "LL requested unsupported feature: Call Deflection\n");
533 dev_err(cs->
dev,
"LL error %d on ICALL\n", retval);
629 pr_err(
"out of memory\n");
635 pr_err(
"ID too long: %s\n", isdnid);
649 iif->
command = command_from_LL;
657 pr_err(
"register_isdn failed\n");
685 pr_info(
"ISDN4Linux interface\n");