Loading drivers/isdn/hisax/config.c +54 −18 Original line number Diff line number Diff line Loading @@ -1016,12 +1016,14 @@ static int hisax_cs_setup_card(struct IsdnCard *card) return ret; } static int checkcard(int cardnr, char *id, int *busy_flag, struct module *lockowner) static int hisax_cs_new(int cardnr, char *id, struct IsdnCard *card, struct IsdnCardState **cs_out, int *busy_flag, struct module *lockowner) { int ret = 0; struct IsdnCard *card = cards + cardnr; struct IsdnCardState *cs; *cs_out = NULL; cs = kzalloc(sizeof(struct IsdnCardState), GFP_ATOMIC); if (!cs) { printk(KERN_WARNING Loading Loading @@ -1098,20 +1100,24 @@ static int checkcard(int cardnr, char *id, int *busy_flag, struct module *lockow cs->iif.readstat = HiSax_readstatus; register_isdn(&cs->iif); cs->myid = cs->iif.channels; printk(KERN_INFO "HiSax: Card %d Protocol %s Id=%s (%d)\n", cardnr + 1, (card->protocol == ISDN_PTYPE_1TR6) ? "1TR6" : (card->protocol == ISDN_PTYPE_EURO) ? "EDSS1" : (card->protocol == ISDN_PTYPE_LEASED) ? "LEASED" : (card->protocol == ISDN_PTYPE_NI1) ? "NI1" : "NONE", cs->iif.id, cs->myid); ret = hisax_cs_setup_card(card); if (!ret) { ll_unload(cs); goto outf_cs; *cs_out = cs; return 1; /* success */ outf_dlog: kfree(cs->dlog); outf_cs: kfree(cs); card->cs = NULL; out: return 0; /* error */ } static int hisax_cs_setup(int cardnr, struct IsdnCard *card, struct IsdnCardState *cs) { int ret; if (!(cs->rcvbuf = kmalloc(MAX_DFRAME_LEN_L1, GFP_ATOMIC))) { printk(KERN_WARNING "HiSax: No memory for isac rcvbuf\n"); ll_unload(cs); Loading Loading @@ -1154,11 +1160,41 @@ static int checkcard(int cardnr, char *id, int *busy_flag, struct module *lockow if (!test_bit(HW_ISAR, &cs->HW_Flags)) ll_run(cs, 0); ret = 1; return 1; outf_cs: kfree(cs); card->cs = NULL; return ret; } static int checkcard(int cardnr, char *id, int *busy_flag, struct module *lockowner) { int ret; struct IsdnCard *card = cards + cardnr; struct IsdnCardState *cs; ret = hisax_cs_new(cardnr, id, card, &cs, busy_flag, lockowner); if (!ret) return 0; printk(KERN_INFO "HiSax: Card %d Protocol %s Id=%s (%d)\n", cardnr + 1, (card->protocol == ISDN_PTYPE_1TR6) ? "1TR6" : (card->protocol == ISDN_PTYPE_EURO) ? "EDSS1" : (card->protocol == ISDN_PTYPE_LEASED) ? "LEASED" : (card->protocol == ISDN_PTYPE_NI1) ? "NI1" : "NONE", cs->iif.id, cs->myid); ret = hisax_cs_setup_card(card); if (!ret) { ll_unload(cs); goto outf_cs; } ret = hisax_cs_setup(cardnr, card, cs); goto out; outf_dlog: kfree(cs->dlog); outf_cs: kfree(cs); card->cs = NULL; Loading Loading
drivers/isdn/hisax/config.c +54 −18 Original line number Diff line number Diff line Loading @@ -1016,12 +1016,14 @@ static int hisax_cs_setup_card(struct IsdnCard *card) return ret; } static int checkcard(int cardnr, char *id, int *busy_flag, struct module *lockowner) static int hisax_cs_new(int cardnr, char *id, struct IsdnCard *card, struct IsdnCardState **cs_out, int *busy_flag, struct module *lockowner) { int ret = 0; struct IsdnCard *card = cards + cardnr; struct IsdnCardState *cs; *cs_out = NULL; cs = kzalloc(sizeof(struct IsdnCardState), GFP_ATOMIC); if (!cs) { printk(KERN_WARNING Loading Loading @@ -1098,20 +1100,24 @@ static int checkcard(int cardnr, char *id, int *busy_flag, struct module *lockow cs->iif.readstat = HiSax_readstatus; register_isdn(&cs->iif); cs->myid = cs->iif.channels; printk(KERN_INFO "HiSax: Card %d Protocol %s Id=%s (%d)\n", cardnr + 1, (card->protocol == ISDN_PTYPE_1TR6) ? "1TR6" : (card->protocol == ISDN_PTYPE_EURO) ? "EDSS1" : (card->protocol == ISDN_PTYPE_LEASED) ? "LEASED" : (card->protocol == ISDN_PTYPE_NI1) ? "NI1" : "NONE", cs->iif.id, cs->myid); ret = hisax_cs_setup_card(card); if (!ret) { ll_unload(cs); goto outf_cs; *cs_out = cs; return 1; /* success */ outf_dlog: kfree(cs->dlog); outf_cs: kfree(cs); card->cs = NULL; out: return 0; /* error */ } static int hisax_cs_setup(int cardnr, struct IsdnCard *card, struct IsdnCardState *cs) { int ret; if (!(cs->rcvbuf = kmalloc(MAX_DFRAME_LEN_L1, GFP_ATOMIC))) { printk(KERN_WARNING "HiSax: No memory for isac rcvbuf\n"); ll_unload(cs); Loading Loading @@ -1154,11 +1160,41 @@ static int checkcard(int cardnr, char *id, int *busy_flag, struct module *lockow if (!test_bit(HW_ISAR, &cs->HW_Flags)) ll_run(cs, 0); ret = 1; return 1; outf_cs: kfree(cs); card->cs = NULL; return ret; } static int checkcard(int cardnr, char *id, int *busy_flag, struct module *lockowner) { int ret; struct IsdnCard *card = cards + cardnr; struct IsdnCardState *cs; ret = hisax_cs_new(cardnr, id, card, &cs, busy_flag, lockowner); if (!ret) return 0; printk(KERN_INFO "HiSax: Card %d Protocol %s Id=%s (%d)\n", cardnr + 1, (card->protocol == ISDN_PTYPE_1TR6) ? "1TR6" : (card->protocol == ISDN_PTYPE_EURO) ? "EDSS1" : (card->protocol == ISDN_PTYPE_LEASED) ? "LEASED" : (card->protocol == ISDN_PTYPE_NI1) ? "NI1" : "NONE", cs->iif.id, cs->myid); ret = hisax_cs_setup_card(card); if (!ret) { ll_unload(cs); goto outf_cs; } ret = hisax_cs_setup(cardnr, card, cs); goto out; outf_dlog: kfree(cs->dlog); outf_cs: kfree(cs); card->cs = NULL; Loading