aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/gigaset
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/isdn/gigaset')
-rw-r--r--drivers/isdn/gigaset/capi.c46
-rw-r--r--drivers/isdn/gigaset/common.c6
-rw-r--r--drivers/isdn/gigaset/dummyll.c14
-rw-r--r--drivers/isdn/gigaset/ev-layer.c12
-rw-r--r--drivers/isdn/gigaset/gigaset.h6
-rw-r--r--drivers/isdn/gigaset/i4l.c28
-rw-r--r--drivers/isdn/gigaset/interface.c1
7 files changed, 69 insertions, 44 deletions
diff --git a/drivers/isdn/gigaset/capi.c b/drivers/isdn/gigaset/capi.c
index 6643d6533ccb..0220c19351d9 100644
--- a/drivers/isdn/gigaset/capi.c
+++ b/drivers/isdn/gigaset/capi.c
@@ -1301,7 +1301,7 @@ static void do_connect_req(struct gigaset_capi_ctr *iif,
1301 } 1301 }
1302 1302
1303 /* check parameter: CIP Value */ 1303 /* check parameter: CIP Value */
1304 if (cmsg->CIPValue > ARRAY_SIZE(cip2bchlc) || 1304 if (cmsg->CIPValue >= ARRAY_SIZE(cip2bchlc) ||
1305 (cmsg->CIPValue > 0 && cip2bchlc[cmsg->CIPValue].bc == NULL)) { 1305 (cmsg->CIPValue > 0 && cip2bchlc[cmsg->CIPValue].bc == NULL)) {
1306 dev_notice(cs->dev, "%s: unknown CIP value %d\n", 1306 dev_notice(cs->dev, "%s: unknown CIP value %d\n",
1307 "CONNECT_REQ", cmsg->CIPValue); 1307 "CONNECT_REQ", cmsg->CIPValue);
@@ -2191,36 +2191,24 @@ static const struct file_operations gigaset_proc_fops = {
2191 .release = single_release, 2191 .release = single_release,
2192}; 2192};
2193 2193
2194static struct capi_driver capi_driver_gigaset = {
2195 .name = "gigaset",
2196 .revision = "1.0",
2197};
2198
2199/** 2194/**
2200 * gigaset_isdn_register() - register to LL 2195 * gigaset_isdn_regdev() - register device to LL
2201 * @cs: device descriptor structure. 2196 * @cs: device descriptor structure.
2202 * @isdnid: device name. 2197 * @isdnid: device name.
2203 * 2198 *
2204 * Called by main module to register the device with the LL.
2205 *
2206 * Return value: 1 for success, 0 for failure 2199 * Return value: 1 for success, 0 for failure
2207 */ 2200 */
2208int gigaset_isdn_register(struct cardstate *cs, const char *isdnid) 2201int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid)
2209{ 2202{
2210 struct gigaset_capi_ctr *iif; 2203 struct gigaset_capi_ctr *iif;
2211 int rc; 2204 int rc;
2212 2205
2213 pr_info("Kernel CAPI interface\n");
2214
2215 iif = kmalloc(sizeof(*iif), GFP_KERNEL); 2206 iif = kmalloc(sizeof(*iif), GFP_KERNEL);
2216 if (!iif) { 2207 if (!iif) {
2217 pr_err("%s: out of memory\n", __func__); 2208 pr_err("%s: out of memory\n", __func__);
2218 return 0; 2209 return 0;
2219 } 2210 }
2220 2211
2221 /* register driver with CAPI (ToDo: what for?) */
2222 register_capi_driver(&capi_driver_gigaset);
2223
2224 /* prepare controller structure */ 2212 /* prepare controller structure */
2225 iif->ctr.owner = THIS_MODULE; 2213 iif->ctr.owner = THIS_MODULE;
2226 iif->ctr.driverdata = cs; 2214 iif->ctr.driverdata = cs;
@@ -2241,7 +2229,6 @@ int gigaset_isdn_register(struct cardstate *cs, const char *isdnid)
2241 rc = attach_capi_ctr(&iif->ctr); 2229 rc = attach_capi_ctr(&iif->ctr);
2242 if (rc) { 2230 if (rc) {
2243 pr_err("attach_capi_ctr failed (%d)\n", rc); 2231 pr_err("attach_capi_ctr failed (%d)\n", rc);
2244 unregister_capi_driver(&capi_driver_gigaset);
2245 kfree(iif); 2232 kfree(iif);
2246 return 0; 2233 return 0;
2247 } 2234 }
@@ -2252,17 +2239,36 @@ int gigaset_isdn_register(struct cardstate *cs, const char *isdnid)
2252} 2239}
2253 2240
2254/** 2241/**
2255 * gigaset_isdn_unregister() - unregister from LL 2242 * gigaset_isdn_unregdev() - unregister device from LL
2256 * @cs: device descriptor structure. 2243 * @cs: device descriptor structure.
2257 *
2258 * Called by main module to unregister the device from the LL.
2259 */ 2244 */
2260void gigaset_isdn_unregister(struct cardstate *cs) 2245void gigaset_isdn_unregdev(struct cardstate *cs)
2261{ 2246{
2262 struct gigaset_capi_ctr *iif = cs->iif; 2247 struct gigaset_capi_ctr *iif = cs->iif;
2263 2248
2264 detach_capi_ctr(&iif->ctr); 2249 detach_capi_ctr(&iif->ctr);
2265 kfree(iif); 2250 kfree(iif);
2266 cs->iif = NULL; 2251 cs->iif = NULL;
2252}
2253
2254static struct capi_driver capi_driver_gigaset = {
2255 .name = "gigaset",
2256 .revision = "1.0",
2257};
2258
2259/**
2260 * gigaset_isdn_regdrv() - register driver to LL
2261 */
2262void gigaset_isdn_regdrv(void)
2263{
2264 pr_info("Kernel CAPI interface\n");
2265 register_capi_driver(&capi_driver_gigaset);
2266}
2267
2268/**
2269 * gigaset_isdn_unregdrv() - unregister driver from LL
2270 */
2271void gigaset_isdn_unregdrv(void)
2272{
2267 unregister_capi_driver(&capi_driver_gigaset); 2273 unregister_capi_driver(&capi_driver_gigaset);
2268} 2274}
diff --git a/drivers/isdn/gigaset/common.c b/drivers/isdn/gigaset/common.c
index 85de3399a2f2..bdc01cb9f0ab 100644
--- a/drivers/isdn/gigaset/common.c
+++ b/drivers/isdn/gigaset/common.c
@@ -507,7 +507,7 @@ void gigaset_freecs(struct cardstate *cs)
507 case 2: /* error in initcshw */ 507 case 2: /* error in initcshw */
508 /* Deregister from LL */ 508 /* Deregister from LL */
509 make_invalid(cs, VALID_ID); 509 make_invalid(cs, VALID_ID);
510 gigaset_isdn_unregister(cs); 510 gigaset_isdn_unregdev(cs);
511 511
512 /* fall through */ 512 /* fall through */
513 case 1: /* error when registering to LL */ 513 case 1: /* error when registering to LL */
@@ -769,7 +769,7 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels,
769 cs->cmdbytes = 0; 769 cs->cmdbytes = 0;
770 770
771 gig_dbg(DEBUG_INIT, "setting up iif"); 771 gig_dbg(DEBUG_INIT, "setting up iif");
772 if (!gigaset_isdn_register(cs, modulename)) { 772 if (!gigaset_isdn_regdev(cs, modulename)) {
773 pr_err("error registering ISDN device\n"); 773 pr_err("error registering ISDN device\n");
774 goto error; 774 goto error;
775 } 775 }
@@ -1205,11 +1205,13 @@ static int __init gigaset_init_module(void)
1205 gigaset_debuglevel = DEBUG_DEFAULT; 1205 gigaset_debuglevel = DEBUG_DEFAULT;
1206 1206
1207 pr_info(DRIVER_DESC DRIVER_DESC_DEBUG "\n"); 1207 pr_info(DRIVER_DESC DRIVER_DESC_DEBUG "\n");
1208 gigaset_isdn_regdrv();
1208 return 0; 1209 return 0;
1209} 1210}
1210 1211
1211static void __exit gigaset_exit_module(void) 1212static void __exit gigaset_exit_module(void)
1212{ 1213{
1214 gigaset_isdn_unregdrv();
1213} 1215}
1214 1216
1215module_init(gigaset_init_module); 1217module_init(gigaset_init_module);
diff --git a/drivers/isdn/gigaset/dummyll.c b/drivers/isdn/gigaset/dummyll.c
index 5b27c996af6d..bd0b1eaa7572 100644
--- a/drivers/isdn/gigaset/dummyll.c
+++ b/drivers/isdn/gigaset/dummyll.c
@@ -57,12 +57,20 @@ void gigaset_isdn_stop(struct cardstate *cs)
57{ 57{
58} 58}
59 59
60int gigaset_isdn_register(struct cardstate *cs, const char *isdnid) 60int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid)
61{ 61{
62 pr_info("no ISDN subsystem interface\n");
63 return 1; 62 return 1;
64} 63}
65 64
66void gigaset_isdn_unregister(struct cardstate *cs) 65void gigaset_isdn_unregdev(struct cardstate *cs)
66{
67}
68
69void gigaset_isdn_regdrv(void)
70{
71 pr_info("no ISDN subsystem interface\n");
72}
73
74void gigaset_isdn_unregdrv(void)
67{ 75{
68} 76}
diff --git a/drivers/isdn/gigaset/ev-layer.c b/drivers/isdn/gigaset/ev-layer.c
index c8f89b78b233..206c380c5235 100644
--- a/drivers/isdn/gigaset/ev-layer.c
+++ b/drivers/isdn/gigaset/ev-layer.c
@@ -1258,14 +1258,10 @@ static void do_action(int action, struct cardstate *cs,
1258 * note that bcs may be NULL if no B channel is free 1258 * note that bcs may be NULL if no B channel is free
1259 */ 1259 */
1260 at_state2->ConState = 700; 1260 at_state2->ConState = 700;
1261 kfree(at_state2->str_var[STR_NMBR]); 1261 for (i = 0; i < STR_NUM; ++i) {
1262 at_state2->str_var[STR_NMBR] = NULL; 1262 kfree(at_state2->str_var[i]);
1263 kfree(at_state2->str_var[STR_ZCPN]); 1263 at_state2->str_var[i] = NULL;
1264 at_state2->str_var[STR_ZCPN] = NULL; 1264 }
1265 kfree(at_state2->str_var[STR_ZBC]);
1266 at_state2->str_var[STR_ZBC] = NULL;
1267 kfree(at_state2->str_var[STR_ZHLC]);
1268 at_state2->str_var[STR_ZHLC] = NULL;
1269 at_state2->int_var[VAR_ZCTP] = -1; 1265 at_state2->int_var[VAR_ZCTP] = -1;
1270 1266
1271 spin_lock_irqsave(&cs->lock, flags); 1267 spin_lock_irqsave(&cs->lock, flags);
diff --git a/drivers/isdn/gigaset/gigaset.h b/drivers/isdn/gigaset/gigaset.h
index 1875ab80b335..cdd144ecdc5f 100644
--- a/drivers/isdn/gigaset/gigaset.h
+++ b/drivers/isdn/gigaset/gigaset.h
@@ -675,8 +675,10 @@ int gigaset_isowbuf_getbytes(struct isowbuf_t *iwb, int size);
675 */ 675 */
676 676
677/* Called from common.c for setting up/shutting down with the ISDN subsystem */ 677/* Called from common.c for setting up/shutting down with the ISDN subsystem */
678int gigaset_isdn_register(struct cardstate *cs, const char *isdnid); 678void gigaset_isdn_regdrv(void);
679void gigaset_isdn_unregister(struct cardstate *cs); 679void gigaset_isdn_unregdrv(void);
680int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid);
681void gigaset_isdn_unregdev(struct cardstate *cs);
680 682
681/* Called from hardware module to indicate completion of an skb */ 683/* Called from hardware module to indicate completion of an skb */
682void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb); 684void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb);
diff --git a/drivers/isdn/gigaset/i4l.c b/drivers/isdn/gigaset/i4l.c
index f0acb9dc9e33..c22e5ace8276 100644
--- a/drivers/isdn/gigaset/i4l.c
+++ b/drivers/isdn/gigaset/i4l.c
@@ -592,15 +592,13 @@ void gigaset_isdn_stop(struct cardstate *cs)
592} 592}
593 593
594/** 594/**
595 * gigaset_isdn_register() - register to LL 595 * gigaset_isdn_regdev() - register to LL
596 * @cs: device descriptor structure. 596 * @cs: device descriptor structure.
597 * @isdnid: device name. 597 * @isdnid: device name.
598 * 598 *
599 * Called by main module to register the device with the LL.
600 *
601 * Return value: 1 for success, 0 for failure 599 * Return value: 1 for success, 0 for failure
602 */ 600 */
603int gigaset_isdn_register(struct cardstate *cs, const char *isdnid) 601int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid)
604{ 602{
605 isdn_if *iif; 603 isdn_if *iif;
606 604
@@ -650,15 +648,29 @@ int gigaset_isdn_register(struct cardstate *cs, const char *isdnid)
650} 648}
651 649
652/** 650/**
653 * gigaset_isdn_unregister() - unregister from LL 651 * gigaset_isdn_unregdev() - unregister device from LL
654 * @cs: device descriptor structure. 652 * @cs: device descriptor structure.
655 *
656 * Called by main module to unregister the device from the LL.
657 */ 653 */
658void gigaset_isdn_unregister(struct cardstate *cs) 654void gigaset_isdn_unregdev(struct cardstate *cs)
659{ 655{
660 gig_dbg(DEBUG_CMD, "sending UNLOAD"); 656 gig_dbg(DEBUG_CMD, "sending UNLOAD");
661 gigaset_i4l_cmd(cs, ISDN_STAT_UNLOAD); 657 gigaset_i4l_cmd(cs, ISDN_STAT_UNLOAD);
662 kfree(cs->iif); 658 kfree(cs->iif);
663 cs->iif = NULL; 659 cs->iif = NULL;
664} 660}
661
662/**
663 * gigaset_isdn_regdrv() - register driver to LL
664 */
665void gigaset_isdn_regdrv(void)
666{
667 /* nothing to do */
668}
669
670/**
671 * gigaset_isdn_unregdrv() - unregister driver from LL
672 */
673void gigaset_isdn_unregdrv(void)
674{
675 /* nothing to do */
676}
diff --git a/drivers/isdn/gigaset/interface.c b/drivers/isdn/gigaset/interface.c
index a1bcbc21ff71..f0dc6c9cc283 100644
--- a/drivers/isdn/gigaset/interface.c
+++ b/drivers/isdn/gigaset/interface.c
@@ -628,7 +628,6 @@ void gigaset_if_receive(struct cardstate *cs,
628 if (tty == NULL) 628 if (tty == NULL)
629 gig_dbg(DEBUG_IF, "receive on closed device"); 629 gig_dbg(DEBUG_IF, "receive on closed device");
630 else { 630 else {
631 tty_buffer_request_room(tty, len);
632 tty_insert_flip_string(tty, buffer, len); 631 tty_insert_flip_string(tty, buffer, len);
633 tty_flip_buffer_push(tty); 632 tty_flip_buffer_push(tty);
634 } 633 }