diff options
Diffstat (limited to 'drivers/isdn/capi/capidrv.c')
| -rw-r--r-- | drivers/isdn/capi/capidrv.c | 1163 | 
1 files changed, 680 insertions, 483 deletions
diff --git a/drivers/isdn/capi/capidrv.c b/drivers/isdn/capi/capidrv.c index e54e79d4e2c..fd6d28f3fc3 100644 --- a/drivers/isdn/capi/capidrv.c +++ b/drivers/isdn/capi/capidrv.c @@ -40,7 +40,7 @@ static int debugmode = 0;  MODULE_DESCRIPTION("CAPI4Linux: Interface to ISDN4Linux");  MODULE_AUTHOR("Carsten Paeth");  MODULE_LICENSE("GPL"); -module_param(debugmode, uint, S_IRUGO|S_IWUSR); +module_param(debugmode, uint, S_IRUGO | S_IWUSR);  /* -------- type definitions ----------------------------------------- */ @@ -64,7 +64,7 @@ struct capidrv_contr {  	int state;  	u32 cipmask;  	u32 cipmask2; -        struct timer_list listentimer; +	struct timer_list listentimer;  	/*  	 * ID of capi message sent @@ -105,9 +105,9 @@ struct capidrv_contr {  				/* */  				u16 datahandle;  				struct ncci_datahandle_queue { -				    struct ncci_datahandle_queue *next; -				    u16                         datahandle; -				    int                           len; +					struct ncci_datahandle_queue *next; +					u16                         datahandle; +					int                           len;  				} *ackqueue;  			} *ncci_list;  		} *plcip; @@ -142,7 +142,7 @@ static capidrv_data global;  static DEFINE_SPINLOCK(global_lock);  static void handle_dtrace_data(capidrv_contr *card, -	int send, int level2, u8 *data, u16 len); +			       int send, int level2, u8 *data, u16 len);  /* -------- convert functions ---------------------------------------- */ @@ -158,11 +158,11 @@ static inline u32 b1prot(int l2, int l3)  		return 0;  	case ISDN_PROTO_L2_TRANS:  		return 1; -        case ISDN_PROTO_L2_V11096: -        case ISDN_PROTO_L2_V11019: -        case ISDN_PROTO_L2_V11038: +	case ISDN_PROTO_L2_V11096: +	case ISDN_PROTO_L2_V11019: +	case ISDN_PROTO_L2_V11038:  		return 2; -        case ISDN_PROTO_L2_FAX: +	case ISDN_PROTO_L2_FAX:  		return 4;  	case ISDN_PROTO_L2_MODEM:  		return 8; @@ -179,12 +179,12 @@ static inline u32 b2prot(int l2, int l3)  		return 0;  	case ISDN_PROTO_L2_HDLC:  	case ISDN_PROTO_L2_TRANS: -        case ISDN_PROTO_L2_V11096: -        case ISDN_PROTO_L2_V11019: -        case ISDN_PROTO_L2_V11038: +	case ISDN_PROTO_L2_V11096: +	case ISDN_PROTO_L2_V11019: +	case ISDN_PROTO_L2_V11038:  	case ISDN_PROTO_L2_MODEM:  		return 1; -        case ISDN_PROTO_L2_FAX: +	case ISDN_PROTO_L2_FAX:  		return 4;  	}  } @@ -197,13 +197,13 @@ static inline u32 b3prot(int l2, int l3)  	case ISDN_PROTO_L2_X75BUI:  	case ISDN_PROTO_L2_HDLC:  	case ISDN_PROTO_L2_TRANS: -        case ISDN_PROTO_L2_V11096: -        case ISDN_PROTO_L2_V11019: -        case ISDN_PROTO_L2_V11038: +	case ISDN_PROTO_L2_V11096: +	case ISDN_PROTO_L2_V11019: +	case ISDN_PROTO_L2_V11038:  	case ISDN_PROTO_L2_MODEM:  	default:  		return 0; -        case ISDN_PROTO_L2_FAX: +	case ISDN_PROTO_L2_FAX:  		return 4;  	}  } @@ -231,38 +231,38 @@ static _cstruct b1config(int l2, int l3)  	case ISDN_PROTO_L2_TRANS:  	default:  		return NULL; -        case ISDN_PROTO_L2_V11096: -	    return b1config_async_v110(9600); -        case ISDN_PROTO_L2_V11019: -	    return b1config_async_v110(19200); -        case ISDN_PROTO_L2_V11038: -	    return b1config_async_v110(38400); +	case ISDN_PROTO_L2_V11096: +		return b1config_async_v110(9600); +	case ISDN_PROTO_L2_V11019: +		return b1config_async_v110(19200); +	case ISDN_PROTO_L2_V11038: +		return b1config_async_v110(38400);  	}  }  static inline u16 si2cip(u8 si1, u8 si2)  {  	static const u8 cip[17][5] = -	{ -	/*  0  1  2  3  4  */ -		{0, 0, 0, 0, 0},	/*0 */ -		{16, 16, 4, 26, 16},	/*1 */ -		{17, 17, 17, 4, 4},	/*2 */ -		{2, 2, 2, 2, 2},	/*3 */ -		{18, 18, 18, 18, 18},	/*4 */ -		{2, 2, 2, 2, 2},	/*5 */ -		{0, 0, 0, 0, 0},	/*6 */ -		{2, 2, 2, 2, 2},	/*7 */ -		{2, 2, 2, 2, 2},	/*8 */ -		{21, 21, 21, 21, 21},	/*9 */ -		{19, 19, 19, 19, 19},	/*10 */ -		{0, 0, 0, 0, 0},	/*11 */ -		{0, 0, 0, 0, 0},	/*12 */ -		{0, 0, 0, 0, 0},	/*13 */ -		{0, 0, 0, 0, 0},	/*14 */ -		{22, 22, 22, 22, 22},	/*15 */ -		{27, 27, 27, 28, 27}	/*16 */ -	}; +		{ +			/*  0  1  2  3  4  */ +			{0, 0, 0, 0, 0},	/*0 */ +			{16, 16, 4, 26, 16},	/*1 */ +			{17, 17, 17, 4, 4},	/*2 */ +			{2, 2, 2, 2, 2},	/*3 */ +			{18, 18, 18, 18, 18},	/*4 */ +			{2, 2, 2, 2, 2},	/*5 */ +			{0, 0, 0, 0, 0},	/*6 */ +			{2, 2, 2, 2, 2},	/*7 */ +			{2, 2, 2, 2, 2},	/*8 */ +			{21, 21, 21, 21, 21},	/*9 */ +			{19, 19, 19, 19, 19},	/*10 */ +			{0, 0, 0, 0, 0},	/*11 */ +			{0, 0, 0, 0, 0},	/*12 */ +			{0, 0, 0, 0, 0},	/*13 */ +			{0, 0, 0, 0, 0},	/*14 */ +			{22, 22, 22, 22, 22},	/*15 */ +			{27, 27, 27, 28, 27}	/*16 */ +		};  	if (si1 > 16)  		si1 = 0;  	if (si2 > 4) @@ -274,10 +274,10 @@ static inline u16 si2cip(u8 si1, u8 si2)  static inline u8 cip2si1(u16 cipval)  {  	static const u8 si[32] = -	{7, 1, 7, 7, 1, 1, 7, 7,	/*0-7 */ -	 7, 1, 0, 0, 0, 0, 0, 0,	/*8-15 */ -	 1, 2, 4, 10, 9, 9, 15, 7,	/*16-23 */ -	 7, 7, 1, 16, 16, 0, 0, 0};	/*24-31 */ +		{7, 1, 7, 7, 1, 1, 7, 7,	/*0-7 */ +		 7, 1, 0, 0, 0, 0, 0, 0,	/*8-15 */ +		 1, 2, 4, 10, 9, 9, 15, 7,	/*16-23 */ +		 7, 7, 1, 16, 16, 0, 0, 0};	/*24-31 */  	if (cipval > 31)  		cipval = 0;	/* .... */ @@ -287,10 +287,10 @@ static inline u8 cip2si1(u16 cipval)  static inline u8 cip2si2(u16 cipval)  {  	static const u8 si[32] = -	{0, 0, 0, 0, 2, 3, 0, 0,	/*0-7 */ -	 0, 3, 0, 0, 0, 0, 0, 0,	/*8-15 */ -	 1, 2, 0, 0, 9, 0, 0, 0,	/*16-23 */ -	 0, 0, 3, 2, 3, 0, 0, 0};	/*24-31 */ +		{0, 0, 0, 0, 2, 3, 0, 0,	/*0-7 */ +		 0, 3, 0, 0, 0, 0, 0, 0,	/*8-15 */ +		 1, 2, 0, 0, 9, 0, 0, 0,	/*16-23 */ +		 0, 0, 3, 2, 3, 0, 0, 0};	/*24-31 */  	if (cipval > 31)  		cipval = 0;	/* .... */ @@ -302,7 +302,7 @@ static inline u8 cip2si2(u16 cipval)  static inline capidrv_contr *findcontrbydriverid(int driverid)  { -    	unsigned long flags; +	unsigned long flags;  	capidrv_contr *p;  	spin_lock_irqsave(&global_lock, flags); @@ -329,7 +329,7 @@ static capidrv_contr *findcontrbynumber(u32 contr)  /* -------- plci management ------------------------------------------ */ -static capidrv_plci *new_plci(capidrv_contr * card, int chan) +static capidrv_plci *new_plci(capidrv_contr *card, int chan)  {  	capidrv_plci *plcip; @@ -349,7 +349,7 @@ static capidrv_plci *new_plci(capidrv_contr * card, int chan)  	return plcip;  } -static capidrv_plci *find_plci_by_plci(capidrv_contr * card, u32 plci) +static capidrv_plci *find_plci_by_plci(capidrv_contr *card, u32 plci)  {  	capidrv_plci *p;  	for (p = card->plci_list; p; p = p->next) @@ -358,7 +358,7 @@ static capidrv_plci *find_plci_by_plci(capidrv_contr * card, u32 plci)  	return NULL;  } -static capidrv_plci *find_plci_by_msgid(capidrv_contr * card, u16 msgid) +static capidrv_plci *find_plci_by_msgid(capidrv_contr *card, u16 msgid)  {  	capidrv_plci *p;  	for (p = card->plci_list; p; p = p->next) @@ -367,7 +367,7 @@ static capidrv_plci *find_plci_by_msgid(capidrv_contr * card, u16 msgid)  	return NULL;  } -static capidrv_plci *find_plci_by_ncci(capidrv_contr * card, u32 ncci) +static capidrv_plci *find_plci_by_ncci(capidrv_contr *card, u32 ncci)  {  	capidrv_plci *p;  	for (p = card->plci_list; p; p = p->next) @@ -376,7 +376,7 @@ static capidrv_plci *find_plci_by_ncci(capidrv_contr * card, u32 ncci)  	return NULL;  } -static void free_plci(capidrv_contr * card, capidrv_plci * plcip) +static void free_plci(capidrv_contr *card, capidrv_plci *plcip)  {  	capidrv_plci **pp; @@ -396,8 +396,8 @@ static void free_plci(capidrv_contr * card, capidrv_plci * plcip)  /* -------- ncci management ------------------------------------------ */ -static inline capidrv_ncci *new_ncci(capidrv_contr * card, -				     capidrv_plci * plcip, +static inline capidrv_ncci *new_ncci(capidrv_contr *card, +				     capidrv_plci *plcip,  				     u32 ncci)  {  	capidrv_ncci *nccip; @@ -421,7 +421,7 @@ static inline capidrv_ncci *new_ncci(capidrv_contr * card,  	return nccip;  } -static inline capidrv_ncci *find_ncci(capidrv_contr * card, u32 ncci) +static inline capidrv_ncci *find_ncci(capidrv_contr *card, u32 ncci)  {  	capidrv_plci *plcip;  	capidrv_ncci *p; @@ -435,7 +435,7 @@ static inline capidrv_ncci *find_ncci(capidrv_contr * card, u32 ncci)  	return NULL;  } -static inline capidrv_ncci *find_ncci_by_msgid(capidrv_contr * card, +static inline capidrv_ncci *find_ncci_by_msgid(capidrv_contr *card,  					       u32 ncci, u16 msgid)  {  	capidrv_plci *plcip; @@ -450,7 +450,7 @@ static inline capidrv_ncci *find_ncci_by_msgid(capidrv_contr * card,  	return NULL;  } -static void free_ncci(capidrv_contr * card, struct capidrv_ncci *nccip) +static void free_ncci(capidrv_contr *card, struct capidrv_ncci *nccip)  {  	struct capidrv_ncci **pp; @@ -465,20 +465,19 @@ static void free_ncci(capidrv_contr * card, struct capidrv_ncci *nccip)  }  static int capidrv_add_ack(struct capidrv_ncci *nccip, -		           u16 datahandle, int len) +			   u16 datahandle, int len)  {  	struct ncci_datahandle_queue *n, **pp; -	n = (struct ncci_datahandle_queue *) -		kmalloc(sizeof(struct ncci_datahandle_queue), GFP_ATOMIC); +	n = kmalloc(sizeof(struct ncci_datahandle_queue), GFP_ATOMIC);  	if (!n) { -	   printk(KERN_ERR "capidrv: kmalloc ncci_datahandle failed\n"); -	   return -1; +		printk(KERN_ERR "capidrv: kmalloc ncci_datahandle failed\n"); +		return -1;  	}  	n->next = NULL;  	n->datahandle = datahandle;  	n->len = len; -	for (pp = &nccip->ackqueue; *pp; pp = &(*pp)->next) ; +	for (pp = &nccip->ackqueue; *pp; pp = &(*pp)->next);  	*pp = n;  	return 0;  } @@ -489,11 +488,11 @@ static int capidrv_del_ack(struct capidrv_ncci *nccip, u16 datahandle)  	int len;  	for (pp = &nccip->ackqueue; *pp; pp = &(*pp)->next) { - 		if ((*pp)->datahandle == datahandle) { +		if ((*pp)->datahandle == datahandle) {  			p = *pp;  			len = p->len;  			*pp = (*pp)->next; -		        kfree(p); +			kfree(p);  			return len;  		}  	} @@ -502,7 +501,7 @@ static int capidrv_del_ack(struct capidrv_ncci *nccip, u16 datahandle)  /* -------- convert and send capi message ---------------------------- */ -static void send_message(capidrv_contr * card, _cmsg * cmsg) +static void send_message(capidrv_contr *card, _cmsg *cmsg)  {  	struct sk_buff *skb;  	size_t len; @@ -529,18 +528,18 @@ struct listenstatechange {  static struct listenstatechange listentable[] =  { -  {ST_LISTEN_NONE, ST_LISTEN_WAIT_CONF, EV_LISTEN_REQ}, -  {ST_LISTEN_ACTIVE, ST_LISTEN_ACTIVE_WAIT_CONF, EV_LISTEN_REQ}, -  {ST_LISTEN_WAIT_CONF, ST_LISTEN_NONE, EV_LISTEN_CONF_ERROR}, -  {ST_LISTEN_ACTIVE_WAIT_CONF, ST_LISTEN_ACTIVE, EV_LISTEN_CONF_ERROR}, -  {ST_LISTEN_WAIT_CONF, ST_LISTEN_NONE, EV_LISTEN_CONF_EMPTY}, -  {ST_LISTEN_ACTIVE_WAIT_CONF, ST_LISTEN_NONE, EV_LISTEN_CONF_EMPTY}, -  {ST_LISTEN_WAIT_CONF, ST_LISTEN_ACTIVE, EV_LISTEN_CONF_OK}, -  {ST_LISTEN_ACTIVE_WAIT_CONF, ST_LISTEN_ACTIVE, EV_LISTEN_CONF_OK}, -  {}, +	{ST_LISTEN_NONE, ST_LISTEN_WAIT_CONF, EV_LISTEN_REQ}, +	{ST_LISTEN_ACTIVE, ST_LISTEN_ACTIVE_WAIT_CONF, EV_LISTEN_REQ}, +	{ST_LISTEN_WAIT_CONF, ST_LISTEN_NONE, EV_LISTEN_CONF_ERROR}, +	{ST_LISTEN_ACTIVE_WAIT_CONF, ST_LISTEN_ACTIVE, EV_LISTEN_CONF_ERROR}, +	{ST_LISTEN_WAIT_CONF, ST_LISTEN_NONE, EV_LISTEN_CONF_EMPTY}, +	{ST_LISTEN_ACTIVE_WAIT_CONF, ST_LISTEN_NONE, EV_LISTEN_CONF_EMPTY}, +	{ST_LISTEN_WAIT_CONF, ST_LISTEN_ACTIVE, EV_LISTEN_CONF_OK}, +	{ST_LISTEN_ACTIVE_WAIT_CONF, ST_LISTEN_ACTIVE, EV_LISTEN_CONF_OK}, +	{},  }; -static void listen_change_state(capidrv_contr * card, int event) +static void listen_change_state(capidrv_contr *card, int event)  {  	struct listenstatechange *p = listentable;  	while (p->event) { @@ -560,7 +559,7 @@ static void listen_change_state(capidrv_contr * card, int event)  /* ------------------------------------------------------------------ */ -static void p0(capidrv_contr * card, capidrv_plci * plci) +static void p0(capidrv_contr *card, capidrv_plci *plci)  {  	isdn_ctrl cmd; @@ -578,71 +577,71 @@ struct plcistatechange {  	int actstate;  	int nextstate;  	int event; -	void (*changefunc) (capidrv_contr * card, capidrv_plci * plci); +	void (*changefunc)(capidrv_contr *card, capidrv_plci *plci);  };  static struct plcistatechange plcitable[] =  { -  /* P-0 */ -  {ST_PLCI_NONE, ST_PLCI_OUTGOING, EV_PLCI_CONNECT_REQ, NULL}, -  {ST_PLCI_NONE, ST_PLCI_ALLOCATED, EV_PLCI_FACILITY_IND_UP, NULL}, -  {ST_PLCI_NONE, ST_PLCI_INCOMING, EV_PLCI_CONNECT_IND, NULL}, -  {ST_PLCI_NONE, ST_PLCI_RESUMEING, EV_PLCI_RESUME_REQ, NULL}, -  /* P-0.1 */ -  {ST_PLCI_OUTGOING, ST_PLCI_NONE, EV_PLCI_CONNECT_CONF_ERROR, p0}, -  {ST_PLCI_OUTGOING, ST_PLCI_ALLOCATED, EV_PLCI_CONNECT_CONF_OK, NULL}, -  /* P-1 */ -  {ST_PLCI_ALLOCATED, ST_PLCI_ACTIVE, EV_PLCI_CONNECT_ACTIVE_IND, NULL}, -  {ST_PLCI_ALLOCATED, ST_PLCI_DISCONNECTING, EV_PLCI_DISCONNECT_REQ, NULL}, -  {ST_PLCI_ALLOCATED, ST_PLCI_DISCONNECTING, EV_PLCI_FACILITY_IND_DOWN, NULL}, -  {ST_PLCI_ALLOCATED, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, -  /* P-ACT */ -  {ST_PLCI_ACTIVE, ST_PLCI_DISCONNECTING, EV_PLCI_DISCONNECT_REQ, NULL}, -  {ST_PLCI_ACTIVE, ST_PLCI_DISCONNECTING, EV_PLCI_FACILITY_IND_DOWN, NULL}, -  {ST_PLCI_ACTIVE, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, -  {ST_PLCI_ACTIVE, ST_PLCI_HELD, EV_PLCI_HOLD_IND, NULL}, -  {ST_PLCI_ACTIVE, ST_PLCI_DISCONNECTING, EV_PLCI_SUSPEND_IND, NULL}, -  /* P-2 */ -  {ST_PLCI_INCOMING, ST_PLCI_DISCONNECTING, EV_PLCI_CONNECT_REJECT, NULL}, -  {ST_PLCI_INCOMING, ST_PLCI_FACILITY_IND, EV_PLCI_FACILITY_IND_UP, NULL}, -  {ST_PLCI_INCOMING, ST_PLCI_ACCEPTING, EV_PLCI_CONNECT_RESP, NULL}, -  {ST_PLCI_INCOMING, ST_PLCI_DISCONNECTING, EV_PLCI_DISCONNECT_REQ, NULL}, -  {ST_PLCI_INCOMING, ST_PLCI_DISCONNECTING, EV_PLCI_FACILITY_IND_DOWN, NULL}, -  {ST_PLCI_INCOMING, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, -  {ST_PLCI_INCOMING, ST_PLCI_DISCONNECTING, EV_PLCI_CD_IND, NULL}, -  /* P-3 */ -  {ST_PLCI_FACILITY_IND, ST_PLCI_DISCONNECTING, EV_PLCI_CONNECT_REJECT, NULL}, -  {ST_PLCI_FACILITY_IND, ST_PLCI_ACCEPTING, EV_PLCI_CONNECT_ACTIVE_IND, NULL}, -  {ST_PLCI_FACILITY_IND, ST_PLCI_DISCONNECTING, EV_PLCI_DISCONNECT_REQ, NULL}, -  {ST_PLCI_FACILITY_IND, ST_PLCI_DISCONNECTING, EV_PLCI_FACILITY_IND_DOWN, NULL}, -  {ST_PLCI_FACILITY_IND, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, -  /* P-4 */ -  {ST_PLCI_ACCEPTING, ST_PLCI_ACTIVE, EV_PLCI_CONNECT_ACTIVE_IND, NULL}, -  {ST_PLCI_ACCEPTING, ST_PLCI_DISCONNECTING, EV_PLCI_DISCONNECT_REQ, NULL}, -  {ST_PLCI_ACCEPTING, ST_PLCI_DISCONNECTING, EV_PLCI_FACILITY_IND_DOWN, NULL}, -  {ST_PLCI_ACCEPTING, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, -  /* P-5 */ -  {ST_PLCI_DISCONNECTING, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, -  /* P-6 */ -  {ST_PLCI_DISCONNECTED, ST_PLCI_NONE, EV_PLCI_DISCONNECT_RESP, p0}, -  /* P-0.Res */ -  {ST_PLCI_RESUMEING, ST_PLCI_NONE, EV_PLCI_RESUME_CONF_ERROR, p0}, -  {ST_PLCI_RESUMEING, ST_PLCI_RESUME, EV_PLCI_RESUME_CONF_OK, NULL}, -  /* P-RES */ -  {ST_PLCI_RESUME, ST_PLCI_ACTIVE, EV_PLCI_RESUME_IND, NULL}, -  /* P-HELD */ -  {ST_PLCI_HELD, ST_PLCI_ACTIVE, EV_PLCI_RETRIEVE_IND, NULL}, -  {}, +	/* P-0 */ +	{ST_PLCI_NONE, ST_PLCI_OUTGOING, EV_PLCI_CONNECT_REQ, NULL}, +	{ST_PLCI_NONE, ST_PLCI_ALLOCATED, EV_PLCI_FACILITY_IND_UP, NULL}, +	{ST_PLCI_NONE, ST_PLCI_INCOMING, EV_PLCI_CONNECT_IND, NULL}, +	{ST_PLCI_NONE, ST_PLCI_RESUMEING, EV_PLCI_RESUME_REQ, NULL}, +	/* P-0.1 */ +	{ST_PLCI_OUTGOING, ST_PLCI_NONE, EV_PLCI_CONNECT_CONF_ERROR, p0}, +	{ST_PLCI_OUTGOING, ST_PLCI_ALLOCATED, EV_PLCI_CONNECT_CONF_OK, NULL}, +	/* P-1 */ +	{ST_PLCI_ALLOCATED, ST_PLCI_ACTIVE, EV_PLCI_CONNECT_ACTIVE_IND, NULL}, +	{ST_PLCI_ALLOCATED, ST_PLCI_DISCONNECTING, EV_PLCI_DISCONNECT_REQ, NULL}, +	{ST_PLCI_ALLOCATED, ST_PLCI_DISCONNECTING, EV_PLCI_FACILITY_IND_DOWN, NULL}, +	{ST_PLCI_ALLOCATED, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, +	/* P-ACT */ +	{ST_PLCI_ACTIVE, ST_PLCI_DISCONNECTING, EV_PLCI_DISCONNECT_REQ, NULL}, +	{ST_PLCI_ACTIVE, ST_PLCI_DISCONNECTING, EV_PLCI_FACILITY_IND_DOWN, NULL}, +	{ST_PLCI_ACTIVE, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, +	{ST_PLCI_ACTIVE, ST_PLCI_HELD, EV_PLCI_HOLD_IND, NULL}, +	{ST_PLCI_ACTIVE, ST_PLCI_DISCONNECTING, EV_PLCI_SUSPEND_IND, NULL}, +	/* P-2 */ +	{ST_PLCI_INCOMING, ST_PLCI_DISCONNECTING, EV_PLCI_CONNECT_REJECT, NULL}, +	{ST_PLCI_INCOMING, ST_PLCI_FACILITY_IND, EV_PLCI_FACILITY_IND_UP, NULL}, +	{ST_PLCI_INCOMING, ST_PLCI_ACCEPTING, EV_PLCI_CONNECT_RESP, NULL}, +	{ST_PLCI_INCOMING, ST_PLCI_DISCONNECTING, EV_PLCI_DISCONNECT_REQ, NULL}, +	{ST_PLCI_INCOMING, ST_PLCI_DISCONNECTING, EV_PLCI_FACILITY_IND_DOWN, NULL}, +	{ST_PLCI_INCOMING, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, +	{ST_PLCI_INCOMING, ST_PLCI_DISCONNECTING, EV_PLCI_CD_IND, NULL}, +	/* P-3 */ +	{ST_PLCI_FACILITY_IND, ST_PLCI_DISCONNECTING, EV_PLCI_CONNECT_REJECT, NULL}, +	{ST_PLCI_FACILITY_IND, ST_PLCI_ACCEPTING, EV_PLCI_CONNECT_ACTIVE_IND, NULL}, +	{ST_PLCI_FACILITY_IND, ST_PLCI_DISCONNECTING, EV_PLCI_DISCONNECT_REQ, NULL}, +	{ST_PLCI_FACILITY_IND, ST_PLCI_DISCONNECTING, EV_PLCI_FACILITY_IND_DOWN, NULL}, +	{ST_PLCI_FACILITY_IND, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, +	/* P-4 */ +	{ST_PLCI_ACCEPTING, ST_PLCI_ACTIVE, EV_PLCI_CONNECT_ACTIVE_IND, NULL}, +	{ST_PLCI_ACCEPTING, ST_PLCI_DISCONNECTING, EV_PLCI_DISCONNECT_REQ, NULL}, +	{ST_PLCI_ACCEPTING, ST_PLCI_DISCONNECTING, EV_PLCI_FACILITY_IND_DOWN, NULL}, +	{ST_PLCI_ACCEPTING, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, +	/* P-5 */ +	{ST_PLCI_DISCONNECTING, ST_PLCI_DISCONNECTED, EV_PLCI_DISCONNECT_IND, NULL}, +	/* P-6 */ +	{ST_PLCI_DISCONNECTED, ST_PLCI_NONE, EV_PLCI_DISCONNECT_RESP, p0}, +	/* P-0.Res */ +	{ST_PLCI_RESUMEING, ST_PLCI_NONE, EV_PLCI_RESUME_CONF_ERROR, p0}, +	{ST_PLCI_RESUMEING, ST_PLCI_RESUME, EV_PLCI_RESUME_CONF_OK, NULL}, +	/* P-RES */ +	{ST_PLCI_RESUME, ST_PLCI_ACTIVE, EV_PLCI_RESUME_IND, NULL}, +	/* P-HELD */ +	{ST_PLCI_HELD, ST_PLCI_ACTIVE, EV_PLCI_RETRIEVE_IND, NULL}, +	{},  }; -static void plci_change_state(capidrv_contr * card, capidrv_plci * plci, int event) +static void plci_change_state(capidrv_contr *card, capidrv_plci *plci, int event)  {  	struct plcistatechange *p = plcitable;  	while (p->event) {  		if (plci->state == p->actstate && p->event == event) {  			if (debugmode)  				printk(KERN_DEBUG "capidrv-%d: plci_change_state:0x%x %d -> %d\n", -				  card->contrnr, plci->plci, plci->state, p->nextstate); +				       card->contrnr, plci->plci, plci->state, p->nextstate);  			plci->state = p->nextstate;  			if (p->changefunc)  				p->changefunc(card, plci); @@ -658,7 +657,7 @@ static void plci_change_state(capidrv_contr * card, capidrv_plci * plci, int eve  static _cmsg cmsg; -static void n0(capidrv_contr * card, capidrv_ncci * ncci) +static void n0(capidrv_contr *card, capidrv_ncci *ncci)  {  	isdn_ctrl cmd; @@ -670,7 +669,7 @@ static void n0(capidrv_contr * card, capidrv_ncci * ncci)  				 NULL,	/* Keypadfacility */  				 NULL,	/* Useruserdata */   /* $$$$ */  				 NULL	/* Facilitydataarray */ -	); +		);  	plci_change_state(card, ncci->plcip, EV_PLCI_DISCONNECT_REQ);  	send_message(card, &cmsg); @@ -687,51 +686,51 @@ struct nccistatechange {  	int actstate;  	int nextstate;  	int event; -	void (*changefunc) (capidrv_contr * card, capidrv_ncci * ncci); +	void (*changefunc)(capidrv_contr *card, capidrv_ncci *ncci);  };  static struct nccistatechange nccitable[] =  { -  /* N-0 */ -  {ST_NCCI_NONE, ST_NCCI_OUTGOING, EV_NCCI_CONNECT_B3_REQ, NULL}, -  {ST_NCCI_NONE, ST_NCCI_INCOMING, EV_NCCI_CONNECT_B3_IND, NULL}, -  /* N-0.1 */ -  {ST_NCCI_OUTGOING, ST_NCCI_ALLOCATED, EV_NCCI_CONNECT_B3_CONF_OK, NULL}, -  {ST_NCCI_OUTGOING, ST_NCCI_NONE, EV_NCCI_CONNECT_B3_CONF_ERROR, n0}, -  /* N-1 */ -  {ST_NCCI_INCOMING, ST_NCCI_DISCONNECTING, EV_NCCI_CONNECT_B3_REJECT, NULL}, -  {ST_NCCI_INCOMING, ST_NCCI_ALLOCATED, EV_NCCI_CONNECT_B3_RESP, NULL}, -  {ST_NCCI_INCOMING, ST_NCCI_DISCONNECTED, EV_NCCI_DISCONNECT_B3_IND, NULL}, -  {ST_NCCI_INCOMING, ST_NCCI_DISCONNECTING, EV_NCCI_DISCONNECT_B3_REQ, NULL}, -  /* N-2 */ -  {ST_NCCI_ALLOCATED, ST_NCCI_ACTIVE, EV_NCCI_CONNECT_B3_ACTIVE_IND, NULL}, -  {ST_NCCI_ALLOCATED, ST_NCCI_DISCONNECTED, EV_NCCI_DISCONNECT_B3_IND, NULL}, -  {ST_NCCI_ALLOCATED, ST_NCCI_DISCONNECTING, EV_NCCI_DISCONNECT_B3_REQ, NULL}, -  /* N-ACT */ -  {ST_NCCI_ACTIVE, ST_NCCI_ACTIVE, EV_NCCI_RESET_B3_IND, NULL}, -  {ST_NCCI_ACTIVE, ST_NCCI_RESETING, EV_NCCI_RESET_B3_REQ, NULL}, -  {ST_NCCI_ACTIVE, ST_NCCI_DISCONNECTED, EV_NCCI_DISCONNECT_B3_IND, NULL}, -  {ST_NCCI_ACTIVE, ST_NCCI_DISCONNECTING, EV_NCCI_DISCONNECT_B3_REQ, NULL}, -  /* N-3 */ -  {ST_NCCI_RESETING, ST_NCCI_ACTIVE, EV_NCCI_RESET_B3_IND, NULL}, -  {ST_NCCI_RESETING, ST_NCCI_DISCONNECTED, EV_NCCI_DISCONNECT_B3_IND, NULL}, -  {ST_NCCI_RESETING, ST_NCCI_DISCONNECTING, EV_NCCI_DISCONNECT_B3_REQ, NULL}, -  /* N-4 */ -  {ST_NCCI_DISCONNECTING, ST_NCCI_DISCONNECTED, EV_NCCI_DISCONNECT_B3_IND, NULL}, -  {ST_NCCI_DISCONNECTING, ST_NCCI_PREVIOUS, EV_NCCI_DISCONNECT_B3_CONF_ERROR,NULL}, -  /* N-5 */ -  {ST_NCCI_DISCONNECTED, ST_NCCI_NONE, EV_NCCI_DISCONNECT_B3_RESP, n0}, -  {}, +	/* N-0 */ +	{ST_NCCI_NONE, ST_NCCI_OUTGOING, EV_NCCI_CONNECT_B3_REQ, NULL}, +	{ST_NCCI_NONE, ST_NCCI_INCOMING, EV_NCCI_CONNECT_B3_IND, NULL}, +	/* N-0.1 */ +	{ST_NCCI_OUTGOING, ST_NCCI_ALLOCATED, EV_NCCI_CONNECT_B3_CONF_OK, NULL}, +	{ST_NCCI_OUTGOING, ST_NCCI_NONE, EV_NCCI_CONNECT_B3_CONF_ERROR, n0}, +	/* N-1 */ +	{ST_NCCI_INCOMING, ST_NCCI_DISCONNECTING, EV_NCCI_CONNECT_B3_REJECT, NULL}, +	{ST_NCCI_INCOMING, ST_NCCI_ALLOCATED, EV_NCCI_CONNECT_B3_RESP, NULL}, +	{ST_NCCI_INCOMING, ST_NCCI_DISCONNECTED, EV_NCCI_DISCONNECT_B3_IND, NULL}, +	{ST_NCCI_INCOMING, ST_NCCI_DISCONNECTING, EV_NCCI_DISCONNECT_B3_REQ, NULL}, +	/* N-2 */ +	{ST_NCCI_ALLOCATED, ST_NCCI_ACTIVE, EV_NCCI_CONNECT_B3_ACTIVE_IND, NULL}, +	{ST_NCCI_ALLOCATED, ST_NCCI_DISCONNECTED, EV_NCCI_DISCONNECT_B3_IND, NULL}, +	{ST_NCCI_ALLOCATED, ST_NCCI_DISCONNECTING, EV_NCCI_DISCONNECT_B3_REQ, NULL}, +	/* N-ACT */ +	{ST_NCCI_ACTIVE, ST_NCCI_ACTIVE, EV_NCCI_RESET_B3_IND, NULL}, +	{ST_NCCI_ACTIVE, ST_NCCI_RESETING, EV_NCCI_RESET_B3_REQ, NULL}, +	{ST_NCCI_ACTIVE, ST_NCCI_DISCONNECTED, EV_NCCI_DISCONNECT_B3_IND, NULL}, +	{ST_NCCI_ACTIVE, ST_NCCI_DISCONNECTING, EV_NCCI_DISCONNECT_B3_REQ, NULL}, +	/* N-3 */ +	{ST_NCCI_RESETING, ST_NCCI_ACTIVE, EV_NCCI_RESET_B3_IND, NULL}, +	{ST_NCCI_RESETING, ST_NCCI_DISCONNECTED, EV_NCCI_DISCONNECT_B3_IND, NULL}, +	{ST_NCCI_RESETING, ST_NCCI_DISCONNECTING, EV_NCCI_DISCONNECT_B3_REQ, NULL}, +	/* N-4 */ +	{ST_NCCI_DISCONNECTING, ST_NCCI_DISCONNECTED, EV_NCCI_DISCONNECT_B3_IND, NULL}, +	{ST_NCCI_DISCONNECTING, ST_NCCI_PREVIOUS, EV_NCCI_DISCONNECT_B3_CONF_ERROR, NULL}, +	/* N-5 */ +	{ST_NCCI_DISCONNECTED, ST_NCCI_NONE, EV_NCCI_DISCONNECT_B3_RESP, n0}, +	{},  }; -static void ncci_change_state(capidrv_contr * card, capidrv_ncci * ncci, int event) +static void ncci_change_state(capidrv_contr *card, capidrv_ncci *ncci, int event)  {  	struct nccistatechange *p = nccitable;  	while (p->event) {  		if (ncci->state == p->actstate && p->event == event) {  			if (debugmode)  				printk(KERN_DEBUG "capidrv-%d: ncci_change_state:0x%x %d -> %d\n", -				  card->contrnr, ncci->ncci, ncci->state, p->nextstate); +				       card->contrnr, ncci->ncci, ncci->state, p->nextstate);  			if (p->nextstate == ST_NCCI_PREVIOUS) {  				ncci->state = ncci->oldstate;  				ncci->oldstate = p->actstate; @@ -751,7 +750,7 @@ static void ncci_change_state(capidrv_contr * card, capidrv_ncci * ncci, int eve  /* ------------------------------------------------------------------- */ -static inline int new_bchan(capidrv_contr * card) +static inline int new_bchan(capidrv_contr *card)  {  	int i;  	for (i = 0; i < card->nbchan; i++) { @@ -764,8 +763,203 @@ static inline int new_bchan(capidrv_contr * card)  }  /* ------------------------------------------------------------------- */ +static char *capi_info2str(u16 reason) +{ +#ifndef CONFIG_ISDN_CAPI_CAPIDRV_VERBOSE +	return ".."; +#else +	switch (reason) { + +/*-- informative values (corresponding message was processed) -----*/ +	case 0x0001: +		return "NCPI not supported by current protocol, NCPI ignored"; +	case 0x0002: +		return "Flags not supported by current protocol, flags ignored"; +	case 0x0003: +		return "Alert already sent by another application"; + +/*-- error information concerning CAPI_REGISTER -----*/ +	case 0x1001: +		return "Too many applications"; +	case 0x1002: +		return "Logical block size too small, must be at least 128 Bytes"; +	case 0x1003: +		return "Buffer exceeds 64 kByte"; +	case 0x1004: +		return "Message buffer size too small, must be at least 1024 Bytes"; +	case 0x1005: +		return "Max. number of logical connections not supported"; +	case 0x1006: +		return "Reserved"; +	case 0x1007: +		return "The message could not be accepted because of an internal busy condition"; +	case 0x1008: +		return "OS resource error (no memory ?)"; +	case 0x1009: +		return "CAPI not installed"; +	case 0x100A: +		return "Controller does not support external equipment"; +	case 0x100B: +		return "Controller does only support external equipment"; + +/*-- error information concerning message exchange functions -----*/ +	case 0x1101: +		return "Illegal application number"; +	case 0x1102: +		return "Illegal command or subcommand or message length less than 12 bytes"; +	case 0x1103: +		return "The message could not be accepted because of a queue full condition !! The error code does not imply that CAPI cannot receive messages directed to another controller, PLCI or NCCI"; +	case 0x1104: +		return "Queue is empty"; +	case 0x1105: +		return "Queue overflow, a message was lost !! This indicates a configuration error. The only recovery from this error is to perform a CAPI_RELEASE"; +	case 0x1106: +		return "Unknown notification parameter"; +	case 0x1107: +		return "The Message could not be accepted because of an internal busy condition"; +	case 0x1108: +		return "OS Resource error (no memory ?)"; +	case 0x1109: +		return "CAPI not installed"; +	case 0x110A: +		return "Controller does not support external equipment"; +	case 0x110B: +		return "Controller does only support external equipment"; + +/*-- error information concerning resource / coding problems -----*/ +	case 0x2001: +		return "Message not supported in current state"; +	case 0x2002: +		return "Illegal Controller / PLCI / NCCI"; +	case 0x2003: +		return "Out of PLCI"; +	case 0x2004: +		return "Out of NCCI"; +	case 0x2005: +		return "Out of LISTEN"; +	case 0x2006: +		return "Out of FAX resources (protocol T.30)"; +	case 0x2007: +		return "Illegal message parameter coding"; + +/*-- error information concerning requested services  -----*/ +	case 0x3001: +		return "B1 protocol not supported"; +	case 0x3002: +		return "B2 protocol not supported"; +	case 0x3003: +		return "B3 protocol not supported"; +	case 0x3004: +		return "B1 protocol parameter not supported"; +	case 0x3005: +		return "B2 protocol parameter not supported"; +	case 0x3006: +		return "B3 protocol parameter not supported"; +	case 0x3007: +		return "B protocol combination not supported"; +	case 0x3008: +		return "NCPI not supported"; +	case 0x3009: +		return "CIP Value unknown"; +	case 0x300A: +		return "Flags not supported (reserved bits)"; +	case 0x300B: +		return "Facility not supported"; +	case 0x300C: +		return "Data length not supported by current protocol"; +	case 0x300D: +		return "Reset procedure not supported by current protocol"; + +/*-- informations about the clearing of a physical connection -----*/ +	case 0x3301: +		return "Protocol error layer 1 (broken line or B-channel removed by signalling protocol)"; +	case 0x3302: +		return "Protocol error layer 2"; +	case 0x3303: +		return "Protocol error layer 3"; +	case 0x3304: +		return "Another application got that call"; +/*-- T.30 specific reasons -----*/ +	case 0x3311: +		return "Connecting not successful (remote station is no FAX G3 machine)"; +	case 0x3312: +		return "Connecting not successful (training error)"; +	case 0x3313: +		return "Disconnected before transfer (remote station does not support transfer mode, e.g. resolution)"; +	case 0x3314: +		return "Disconnected during transfer (remote abort)"; +	case 0x3315: +		return "Disconnected during transfer (remote procedure error, e.g. unsuccessful repetition of T.30 commands)"; +	case 0x3316: +		return "Disconnected during transfer (local tx data underrun)"; +	case 0x3317: +		return "Disconnected during transfer (local rx data overflow)"; +	case 0x3318: +		return "Disconnected during transfer (local abort)"; +	case 0x3319: +		return "Illegal parameter coding (e.g. SFF coding error)"; + +/*-- disconnect causes from the network according to ETS 300 102-1/Q.931 -----*/ +	case 0x3481: return "Unallocated (unassigned) number"; +	case 0x3482: return "No route to specified transit network"; +	case 0x3483: return "No route to destination"; +	case 0x3486: return "Channel unacceptable"; +	case 0x3487: +		return "Call awarded and being delivered in an established channel"; +	case 0x3490: return "Normal call clearing"; +	case 0x3491: return "User busy"; +	case 0x3492: return "No user responding"; +	case 0x3493: return "No answer from user (user alerted)"; +	case 0x3495: return "Call rejected"; +	case 0x3496: return "Number changed"; +	case 0x349A: return "Non-selected user clearing"; +	case 0x349B: return "Destination out of order"; +	case 0x349C: return "Invalid number format"; +	case 0x349D: return "Facility rejected"; +	case 0x349E: return "Response to STATUS ENQUIRY"; +	case 0x349F: return "Normal, unspecified"; +	case 0x34A2: return "No circuit / channel available"; +	case 0x34A6: return "Network out of order"; +	case 0x34A9: return "Temporary failure"; +	case 0x34AA: return "Switching equipment congestion"; +	case 0x34AB: return "Access information discarded"; +	case 0x34AC: return "Requested circuit / channel not available"; +	case 0x34AF: return "Resources unavailable, unspecified"; +	case 0x34B1: return "Quality of service unavailable"; +	case 0x34B2: return "Requested facility not subscribed"; +	case 0x34B9: return "Bearer capability not authorized"; +	case 0x34BA: return "Bearer capability not presently available"; +	case 0x34BF: return "Service or option not available, unspecified"; +	case 0x34C1: return "Bearer capability not implemented"; +	case 0x34C2: return "Channel type not implemented"; +	case 0x34C5: return "Requested facility not implemented"; +	case 0x34C6: return "Only restricted digital information bearer capability is available"; +	case 0x34CF: return "Service or option not implemented, unspecified"; +	case 0x34D1: return "Invalid call reference value"; +	case 0x34D2: return "Identified channel does not exist"; +	case 0x34D3: return "A suspended call exists, but this call identity does not"; +	case 0x34D4: return "Call identity in use"; +	case 0x34D5: return "No call suspended"; +	case 0x34D6: return "Call having the requested call identity has been cleared"; +	case 0x34D8: return "Incompatible destination"; +	case 0x34DB: return "Invalid transit network selection"; +	case 0x34DF: return "Invalid message, unspecified"; +	case 0x34E0: return "Mandatory information element is missing"; +	case 0x34E1: return "Message type non-existent or not implemented"; +	case 0x34E2: return "Message not compatible with call state or message type non-existent or not implemented"; +	case 0x34E3: return "Information element non-existent or not implemented"; +	case 0x34E4: return "Invalid information element contents"; +	case 0x34E5: return "Message not compatible with call state"; +	case 0x34E6: return "Recovery on timer expiry"; +	case 0x34EF: return "Protocol error, unspecified"; +	case 0x34FF: return "Interworking, unspecified"; + +	default: return "No additional information"; +	} +#endif +} -static void handle_controller(_cmsg * cmsg) +static void handle_controller(_cmsg *cmsg)  {  	capidrv_contr *card = findcontrbynumber(cmsg->adr.adrController & 0x7f); @@ -791,54 +985,54 @@ static void handle_controller(_cmsg * cmsg)  		break;  	case CAPI_MANUFACTURER_IND:	/* Controller */ -		if (   cmsg->ManuID == 0x214D5641 +		if (cmsg->ManuID == 0x214D5641  		    && cmsg->Class == 0  		    && cmsg->Function == 1) { -		   u8  *data = cmsg->ManuData+3; -		   u16  len = cmsg->ManuData[0]; -		   u16 layer; -		   int direction; -		   if (len == 255) { -		      len = (cmsg->ManuData[1] | (cmsg->ManuData[2] << 8)); -		      data += 2; -		   } -		   len -= 2; -		   layer = ((*(data-1)) << 8) | *(data-2); -		   if (layer & 0x300) -			direction = (layer & 0x200) ? 0 : 1; -		   else direction = (layer & 0x800) ? 0 : 1; -		   if (layer & 0x0C00) { -		   	if ((layer & 0xff) == 0x80) { -		           handle_dtrace_data(card, direction, 1, data, len); -		           break; -		   	} -		   } else if ((layer & 0xff) < 0x80) { -		      handle_dtrace_data(card, direction, 0, data, len); -		      break; -		   } -	           printk(KERN_INFO "capidrv-%d: %s from controller 0x%x layer 0x%x, ignored\n", -                        card->contrnr,  -			capi_cmd2str(cmsg->Command, cmsg->Subcommand), -			cmsg->adr.adrController, layer); -                   break; +			u8  *data = cmsg->ManuData + 3; +			u16  len = cmsg->ManuData[0]; +			u16 layer; +			int direction; +			if (len == 255) { +				len = (cmsg->ManuData[1] | (cmsg->ManuData[2] << 8)); +				data += 2; +			} +			len -= 2; +			layer = ((*(data - 1)) << 8) | *(data - 2); +			if (layer & 0x300) +				direction = (layer & 0x200) ? 0 : 1; +			else direction = (layer & 0x800) ? 0 : 1; +			if (layer & 0x0C00) { +				if ((layer & 0xff) == 0x80) { +					handle_dtrace_data(card, direction, 1, data, len); +					break; +				} +			} else if ((layer & 0xff) < 0x80) { +				handle_dtrace_data(card, direction, 0, data, len); +				break; +			} +			printk(KERN_INFO "capidrv-%d: %s from controller 0x%x layer 0x%x, ignored\n", +			       card->contrnr, +			       capi_cmd2str(cmsg->Command, cmsg->Subcommand), +			       cmsg->adr.adrController, layer); +			break;  		}  		goto ignored;  	case CAPI_MANUFACTURER_CONF:	/* Controller */  		if (cmsg->ManuID == 0x214D5641) { -		   char *s = NULL; -		   switch (cmsg->Class) { -		      case 0: break; -		      case 1: s = "unknown class"; break; -		      case 2: s = "unknown function"; break; -		      default: s = "unknown error"; break; -		   } -		   if (s) -	           printk(KERN_INFO "capidrv-%d: %s from controller 0x%x function %d: %s\n", -			card->contrnr, -			capi_cmd2str(cmsg->Command, cmsg->Subcommand), -			cmsg->adr.adrController, -			cmsg->Function, s); -		   break; +			char *s = NULL; +			switch (cmsg->Class) { +			case 0: break; +			case 1: s = "unknown class"; break; +			case 2: s = "unknown function"; break; +			default: s = "unknown error"; break; +			} +			if (s) +				printk(KERN_INFO "capidrv-%d: %s from controller 0x%x function %d: %s\n", +				       card->contrnr, +				       capi_cmd2str(cmsg->Command, cmsg->Subcommand), +				       cmsg->adr.adrController, +				       cmsg->Function, s); +			break;  		}  		goto ignored;  	case CAPI_FACILITY_IND:	/* Controller/plci/ncci */ @@ -858,14 +1052,14 @@ static void handle_controller(_cmsg * cmsg)  	}  	return; -      ignored: +ignored:  	printk(KERN_INFO "capidrv-%d: %s from controller 0x%x ignored\n",  	       card->contrnr,  	       capi_cmd2str(cmsg->Command, cmsg->Subcommand),  	       cmsg->adr.adrController);  } -static void handle_incoming_call(capidrv_contr * card, _cmsg * cmsg) +static void handle_incoming_call(capidrv_contr *card, _cmsg *cmsg)  {  	capidrv_plci *plcip;  	capidrv_bchan *bchan; @@ -890,27 +1084,27 @@ static void handle_incoming_call(capidrv_contr * card, _cmsg * cmsg)  	cmd.arg = chan;  	memset(&cmd.parm.setup, 0, sizeof(cmd.parm.setup));  	strncpy(cmd.parm.setup.phone, -	        cmsg->CallingPartyNumber + 3, +		cmsg->CallingPartyNumber + 3,  		cmsg->CallingPartyNumber[0] - 2);  	strncpy(cmd.parm.setup.eazmsn, -	        cmsg->CalledPartyNumber + 2, +		cmsg->CalledPartyNumber + 2,  		cmsg->CalledPartyNumber[0] - 1);  	cmd.parm.setup.si1 = cip2si1(cmsg->CIPValue);  	cmd.parm.setup.si2 = cip2si2(cmsg->CIPValue);  	cmd.parm.setup.plan = cmsg->CallingPartyNumber[1];  	cmd.parm.setup.screen = cmsg->CallingPartyNumber[2]; -	printk(KERN_INFO "capidrv-%d: incoming call %s,%d,%d,%s\n",  -			card->contrnr, -			cmd.parm.setup.phone, -			cmd.parm.setup.si1, -			cmd.parm.setup.si2, -			cmd.parm.setup.eazmsn); +	printk(KERN_INFO "capidrv-%d: incoming call %s,%d,%d,%s\n", +	       card->contrnr, +	       cmd.parm.setup.phone, +	       cmd.parm.setup.si1, +	       cmd.parm.setup.si2, +	       cmd.parm.setup.eazmsn);  	if (cmd.parm.setup.si1 == 1 && cmd.parm.setup.si2 != 0) { -		printk(KERN_INFO "capidrv-%d: patching si2=%d to 0 for VBOX\n",  -			card->contrnr, -			cmd.parm.setup.si2); +		printk(KERN_INFO "capidrv-%d: patching si2=%d to 0 for VBOX\n", +		       card->contrnr, +		       cmd.parm.setup.si2);  		cmd.parm.setup.si2 = 0;  	} @@ -927,11 +1121,11 @@ static void handle_incoming_call(capidrv_contr * card, _cmsg * cmsg)  		plci_change_state(card, plcip, EV_PLCI_CONNECT_REJECT);  		send_message(card, cmsg);  		printk(KERN_INFO "capidrv-%d: incoming call %s,%d,%d,%s ignored\n", -			card->contrnr, -			cmd.parm.setup.phone, -			cmd.parm.setup.si1, -			cmd.parm.setup.si2, -			cmd.parm.setup.eazmsn); +		       card->contrnr, +		       cmd.parm.setup.phone, +		       cmd.parm.setup.si1, +		       cmd.parm.setup.si2, +		       cmd.parm.setup.eazmsn);  		break;  	case 1:  		/* At least one device matching this call (RING on ttyI) @@ -945,11 +1139,11 @@ static void handle_incoming_call(capidrv_contr * card, _cmsg * cmsg)  		 */  		if (plcip->state == ST_PLCI_INCOMING) {  			printk(KERN_INFO "capidrv-%d: incoming call %s,%d,%d,%s tty alerting\n", -				card->contrnr, -				cmd.parm.setup.phone, -				cmd.parm.setup.si1, -				cmd.parm.setup.si2, -				cmd.parm.setup.eazmsn); +			       card->contrnr, +			       cmd.parm.setup.phone, +			       cmd.parm.setup.si1, +			       cmd.parm.setup.si2, +			       cmd.parm.setup.eazmsn);  			capi_fill_ALERT_REQ(cmsg,  					    global.ap.applid,  					    card->msgid++, @@ -958,16 +1152,16 @@ static void handle_incoming_call(capidrv_contr * card, _cmsg * cmsg)  					    NULL,/* Keypadfacility */  					    NULL,/* Useruserdata */  					    NULL /* Facilitydataarray */ -			); +				);  			plcip->msgid = cmsg->Messagenumber;  			send_message(card, cmsg);  		} else {  			printk(KERN_INFO "capidrv-%d: incoming call %s,%d,%d,%s on netdev\n", -				card->contrnr, -				cmd.parm.setup.phone, -				cmd.parm.setup.si1, -				cmd.parm.setup.si2, -				cmd.parm.setup.eazmsn); +			       card->contrnr, +			       cmd.parm.setup.phone, +			       cmd.parm.setup.si1, +			       cmd.parm.setup.si2, +			       cmd.parm.setup.eazmsn);  		}  		break; @@ -990,7 +1184,7 @@ static void handle_incoming_call(capidrv_contr * card, _cmsg * cmsg)  	return;  } -static void handle_plci(_cmsg * cmsg) +static void handle_plci(_cmsg *cmsg)  {  	capidrv_contr *card = findcontrbynumber(cmsg->adr.adrController & 0x7f);  	capidrv_plci *plcip; @@ -1008,8 +1202,8 @@ static void handle_plci(_cmsg * cmsg)  	case CAPI_DISCONNECT_IND:	/* plci */  		if (cmsg->Reason) {  			printk(KERN_INFO "capidrv-%d: %s reason 0x%x (%s) for plci 0x%x\n", -			   card->contrnr, -			   capi_cmd2str(cmsg->Command, cmsg->Subcommand), +			       card->contrnr, +			       capi_cmd2str(cmsg->Command, cmsg->Subcommand),  			       cmsg->Reason, capi_info2str(cmsg->Reason), cmsg->adr.adrPLCI);  		}  		if (!(plcip = find_plci_by_plci(card, cmsg->adr.adrPLCI))) { @@ -1027,9 +1221,9 @@ static void handle_plci(_cmsg * cmsg)  	case CAPI_DISCONNECT_CONF:	/* plci */  		if (cmsg->Info) {  			printk(KERN_INFO "capidrv-%d: %s info 0x%x (%s) for plci 0x%x\n", -			   card->contrnr, -			   capi_cmd2str(cmsg->Command, cmsg->Subcommand), -			       cmsg->Info, capi_info2str(cmsg->Info),  +			       card->contrnr, +			       capi_cmd2str(cmsg->Command, cmsg->Subcommand), +			       cmsg->Info, capi_info2str(cmsg->Info),  			       cmsg->adr.adrPLCI);  		}  		if (!(plcip = find_plci_by_plci(card, cmsg->adr.adrPLCI))) @@ -1041,9 +1235,9 @@ static void handle_plci(_cmsg * cmsg)  	case CAPI_ALERT_CONF:	/* plci */  		if (cmsg->Info) {  			printk(KERN_INFO "capidrv-%d: %s info 0x%x (%s) for plci 0x%x\n", -			   card->contrnr, -			   capi_cmd2str(cmsg->Command, cmsg->Subcommand), -			       cmsg->Info, capi_info2str(cmsg->Info),  +			       card->contrnr, +			       capi_cmd2str(cmsg->Command, cmsg->Subcommand), +			       cmsg->Info, capi_info2str(cmsg->Info),  			       cmsg->adr.adrPLCI);  		}  		break; @@ -1055,9 +1249,9 @@ static void handle_plci(_cmsg * cmsg)  	case CAPI_CONNECT_CONF:	/* plci */  		if (cmsg->Info) {  			printk(KERN_INFO "capidrv-%d: %s info 0x%x (%s) for plci 0x%x\n", -			   card->contrnr, -			   capi_cmd2str(cmsg->Command, cmsg->Subcommand), -			       cmsg->Info, capi_info2str(cmsg->Info),  +			       card->contrnr, +			       capi_cmd2str(cmsg->Command, cmsg->Subcommand), +			       cmsg->Info, capi_info2str(cmsg->Info),  			       cmsg->adr.adrPLCI);  		}  		if (!(plcip = find_plci_by_msgid(card, cmsg->Messagenumber))) @@ -1096,7 +1290,7 @@ static void handle_plci(_cmsg * cmsg)  						 card->msgid++,  						 plcip->plci,	/* adr */  						 NULL	/* NCPI */ -			); +				);  			nccip->msgid = cmsg->Messagenumber;  			plci_change_state(card, plcip,  					  EV_PLCI_CONNECT_ACTIVE_IND); @@ -1122,8 +1316,8 @@ static void handle_plci(_cmsg * cmsg)  				sprintf(cmd.parm.num, "%lu",  					(unsigned long)  					((u32) cmsg->InfoElement[1] -				  | ((u32) (cmsg->InfoElement[2]) << 8) -				 | ((u32) (cmsg->InfoElement[3]) << 16) +					 | ((u32) (cmsg->InfoElement[2]) << 8) +					 | ((u32) (cmsg->InfoElement[3]) << 16)  					 | ((u32) (cmsg->InfoElement[4]) << 24)));  				card->interface.statcallb(&cmd);  				break; @@ -1132,11 +1326,11 @@ static void handle_plci(_cmsg * cmsg)  		cdb = capi_cmsg2str(cmsg);  		if (cdb) {  			printk(KERN_WARNING "capidrv-%d: %s\n", -				card->contrnr, cdb->buf); +			       card->contrnr, cdb->buf);  			cdebbuf_free(cdb);  		} else  			printk(KERN_WARNING "capidrv-%d: CAPI_INFO_IND InfoNumber %x not handled\n", -				card->contrnr, cmsg->InfoNumber); +			       card->contrnr, cmsg->InfoNumber);  		break; @@ -1159,13 +1353,13 @@ static void handle_plci(_cmsg * cmsg)  		       cmsg->adr.adrPLCI);  	}  	return; -      ignored: +ignored:  	printk(KERN_INFO "capidrv-%d: %s for plci 0x%x ignored\n",  	       card->contrnr,  	       capi_cmd2str(cmsg->Command, cmsg->Subcommand),  	       cmsg->adr.adrPLCI);  	return; -      notfound: +notfound:  	printk(KERN_ERR "capidrv-%d: %s: plci 0x%x not found\n",  	       card->contrnr,  	       capi_cmd2str(cmsg->Command, cmsg->Subcommand), @@ -1173,7 +1367,7 @@ static void handle_plci(_cmsg * cmsg)  	return;  } -static void handle_ncci(_cmsg * cmsg) +static void handle_ncci(_cmsg *cmsg)  {  	capidrv_contr *card = findcontrbynumber(cmsg->adr.adrController & 0x7f);  	capidrv_plci *plcip; @@ -1222,7 +1416,7 @@ static void handle_ncci(_cmsg * cmsg)  							  nccip->ncci,	/* adr */  							  0,	/* Reject */  							  NULL	/* NCPI */ -				); +					);  				ncci_change_state(card, nccip, EV_NCCI_CONNECT_B3_RESP);  				send_message(card, cmsg);  				break; @@ -1230,8 +1424,8 @@ static void handle_ncci(_cmsg * cmsg)  			printk(KERN_ERR "capidrv-%d: no mem for ncci, sorry\n",							card->contrnr);  		} else {  			printk(KERN_ERR "capidrv-%d: %s: plci for ncci 0x%x not found\n", -			   card->contrnr, -			   capi_cmd2str(cmsg->Command, cmsg->Subcommand), +			       card->contrnr, +			       capi_cmd2str(cmsg->Command, cmsg->Subcommand),  			       cmsg->adr.adrNCCI);  		}  		capi_fill_CONNECT_B3_RESP(cmsg, @@ -1240,7 +1434,7 @@ static void handle_ncci(_cmsg * cmsg)  					  cmsg->adr.adrNCCI,  					  2,	/* Reject */  					  NULL	/* NCPI */ -		); +			);  		send_message(card, cmsg);  		break; @@ -1254,9 +1448,9 @@ static void handle_ncci(_cmsg * cmsg)  		nccip->ncci = cmsg->adr.adrNCCI;  		if (cmsg->Info) {  			printk(KERN_INFO "capidrv-%d: %s info 0x%x (%s) for ncci 0x%x\n", -			   card->contrnr, -			   capi_cmd2str(cmsg->Command, cmsg->Subcommand), -			       cmsg->Info, capi_info2str(cmsg->Info),  +			       card->contrnr, +			       capi_cmd2str(cmsg->Command, cmsg->Subcommand), +			       cmsg->Info, capi_info2str(cmsg->Info),  			       cmsg->adr.adrNCCI);  		} @@ -1278,7 +1472,7 @@ static void handle_ncci(_cmsg * cmsg)  	case CAPI_DATA_B3_CONF:	/* ncci */  		if (cmsg->Info) {  			printk(KERN_WARNING "CAPI_DATA_B3_CONF: Info %x - %s\n", -				cmsg->Info, capi_info2str(cmsg->Info)); +			       cmsg->Info, capi_info2str(cmsg->Info));  		}  		if (!(nccip = find_ncci(card, cmsg->adr.adrNCCI)))  			goto notfound; @@ -1286,11 +1480,11 @@ static void handle_ncci(_cmsg * cmsg)  		len = capidrv_del_ack(nccip, cmsg->DataHandle);  		if (len < 0)  			break; -	        cmd.command = ISDN_STAT_BSENT; -	        cmd.driver = card->myid; -	        cmd.arg = nccip->chan; +		cmd.command = ISDN_STAT_BSENT; +		cmd.driver = card->myid; +		cmd.arg = nccip->chan;  		cmd.parm.length = len; -	        card->interface.statcallb(&cmd); +		card->interface.statcallb(&cmd);  		break;  	case CAPI_DISCONNECT_B3_IND:	/* ncci */ @@ -1309,9 +1503,9 @@ static void handle_ncci(_cmsg * cmsg)  			goto notfound;  		if (cmsg->Info) {  			printk(KERN_INFO "capidrv-%d: %s info 0x%x (%s) for ncci 0x%x\n", -			   card->contrnr, -			   capi_cmd2str(cmsg->Command, cmsg->Subcommand), -			       cmsg->Info, capi_info2str(cmsg->Info),  +			       card->contrnr, +			       capi_cmd2str(cmsg->Command, cmsg->Subcommand), +			       cmsg->Info, capi_info2str(cmsg->Info),  			       cmsg->adr.adrNCCI);  			ncci_change_state(card, nccip, EV_NCCI_DISCONNECT_B3_CONF_ERROR);  		} @@ -1340,13 +1534,13 @@ static void handle_ncci(_cmsg * cmsg)  		       cmsg->adr.adrNCCI);  	}  	return; -      ignored: +ignored:  	printk(KERN_INFO "capidrv-%d: %s for ncci 0x%x ignored\n",  	       card->contrnr,  	       capi_cmd2str(cmsg->Command, cmsg->Subcommand),  	       cmsg->adr.adrNCCI);  	return; -      notfound: +notfound:  	printk(KERN_ERR "capidrv-%d: %s: ncci 0x%x not found\n",  	       card->contrnr,  	       capi_cmd2str(cmsg->Command, cmsg->Subcommand), @@ -1354,7 +1548,7 @@ static void handle_ncci(_cmsg * cmsg)  } -static void handle_data(_cmsg * cmsg, struct sk_buff *skb) +static void handle_data(_cmsg *cmsg, struct sk_buff *skb)  {  	capidrv_contr *card = findcontrbynumber(cmsg->adr.adrController & 0x7f);  	capidrv_ncci *nccip; @@ -1390,12 +1584,12 @@ static void capidrv_recv_message(struct capi20_appl *ap, struct sk_buff *skb)  		if (cdb) {  			printk(KERN_DEBUG "%s: applid=%d %s\n", __func__, -				ap->applid, cdb->buf); +			       ap->applid, cdb->buf);  			cdebbuf_free(cdb);  		} else  			printk(KERN_DEBUG "%s: applid=%d %s not traced\n", -				__func__, ap->applid, -				capi_cmd2str(s_cmsg.Command, s_cmsg.Subcommand)); +			       __func__, ap->applid, +			       capi_cmd2str(s_cmsg.Command, s_cmsg.Subcommand));  	}  	if (s_cmsg.Command == CAPI_DATA_B3  	    && s_cmsg.Subcommand == CAPI_IND) { @@ -1418,38 +1612,38 @@ static void capidrv_recv_message(struct capi20_appl *ap, struct sk_buff *skb)  /* ------------------------------------------------------------------- */ -#define PUTBYTE_TO_STATUS(card, byte) \ -	do { \ -		*(card)->q931_write++ = (byte); \ -        	if ((card)->q931_write > (card)->q931_end) \ -	  		(card)->q931_write = (card)->q931_buf; \ +#define PUTBYTE_TO_STATUS(card, byte)				\ +	do {							\ +		*(card)->q931_write++ = (byte);			\ +		if ((card)->q931_write > (card)->q931_end)	\ +			(card)->q931_write = (card)->q931_buf;	\  	} while (0)  static void handle_dtrace_data(capidrv_contr *card, -			     int send, int level2, u8 *data, u16 len) +			       int send, int level2, u8 *data, u16 len)  { -    	u8 *p, *end; -    	isdn_ctrl cmd; +	u8 *p, *end; +	isdn_ctrl cmd; -    	if (!len) { +	if (!len) {  		printk(KERN_DEBUG "capidrv-%d: avmb1_q931_data: len == %d\n", -				card->contrnr, len); +		       card->contrnr, len);  		return;  	}  	if (level2) {  		PUTBYTE_TO_STATUS(card, 'D');  		PUTBYTE_TO_STATUS(card, '2'); -        	PUTBYTE_TO_STATUS(card, send ? '>' : '<'); -        	PUTBYTE_TO_STATUS(card, ':'); +		PUTBYTE_TO_STATUS(card, send ? '>' : '<'); +		PUTBYTE_TO_STATUS(card, ':');  	} else { -        	PUTBYTE_TO_STATUS(card, 'D'); -        	PUTBYTE_TO_STATUS(card, '3'); -        	PUTBYTE_TO_STATUS(card, send ? '>' : '<'); -        	PUTBYTE_TO_STATUS(card, ':'); -    	} +		PUTBYTE_TO_STATUS(card, 'D'); +		PUTBYTE_TO_STATUS(card, '3'); +		PUTBYTE_TO_STATUS(card, send ? '>' : '<'); +		PUTBYTE_TO_STATUS(card, ':'); +	} -	for (p = data, end = data+len; p < end; p++) { +	for (p = data, end = data + len; p < end; p++) {  		PUTBYTE_TO_STATUS(card, ' ');  		PUTBYTE_TO_STATUS(card, hex_asc_hi(*p));  		PUTBYTE_TO_STATUS(card, hex_asc_lo(*p)); @@ -1458,7 +1652,7 @@ static void handle_dtrace_data(capidrv_contr *card,  	cmd.command = ISDN_STAT_STAVAIL;  	cmd.driver = card->myid; -	cmd.arg = len*3+5; +	cmd.arg = len * 3 + 5;  	card->interface.statcallb(&cmd);  } @@ -1466,17 +1660,17 @@ static void handle_dtrace_data(capidrv_contr *card,  static _cmsg cmdcmsg; -static int capidrv_ioctl(isdn_ctrl * c, capidrv_contr * card) +static int capidrv_ioctl(isdn_ctrl *c, capidrv_contr *card)  {  	switch (c->arg) {  	case 1:  		debugmode = (int)(*((unsigned int *)c->parm.num));  		printk(KERN_DEBUG "capidrv-%d: debugmode=%d\n", -				card->contrnr, debugmode); +		       card->contrnr, debugmode);  		return 0;  	default:  		printk(KERN_DEBUG "capidrv-%d: capidrv_ioctl(%ld) called ??\n", -				card->contrnr, c->arg); +		       card->contrnr, c->arg);  		return -EINVAL;  	}  	return -EINVAL; @@ -1487,9 +1681,9 @@ static int capidrv_ioctl(isdn_ctrl * c, capidrv_contr * card)   */  struct internal_bchannelinfo { -   unsigned short channelalloc; -   unsigned short operation; -   unsigned char  cmask[31]; +	unsigned short channelalloc; +	unsigned short operation; +	unsigned char  cmask[31];  };  static int decodeFVteln(char *teln, unsigned long *bmaskp, int *activep) @@ -1540,10 +1734,10 @@ static int decodeFVteln(char *teln, unsigned long *bmaskp, int *activep)  		if (digit2 <= 0 || digit2 > 30) return -4;  		if (*s == 0 || *s == ',' || *s == ' ') {  			if (digit1 > digit2) -				for (i = digit2; i <= digit1 ; i++) +				for (i = digit2; i <= digit1; i++)  					bmask |= (1 << i); -			else  -				for (i = digit1; i <= digit2 ; i++) +			else +				for (i = digit1; i <= digit2; i++)  					bmask |= (1 << i);  			digit1 = digit2 = 0;  			if (*s) s++; @@ -1556,131 +1750,131 @@ static int decodeFVteln(char *teln, unsigned long *bmaskp, int *activep)  	return 0;  } -static int FVteln2capi20(char *teln, u8 AdditionalInfo[1+2+2+31]) +static int FVteln2capi20(char *teln, u8 AdditionalInfo[1 + 2 + 2 + 31])  {  	unsigned long bmask;  	int active;  	int rc, i; -    +  	rc = decodeFVteln(teln, &bmask, &active);  	if (rc) return rc;  	/* Length */ -	AdditionalInfo[0] = 2+2+31; -        /* Channel: 3 => use channel allocation */ -        AdditionalInfo[1] = 3; AdditionalInfo[2] = 0; +	AdditionalInfo[0] = 2 + 2 + 31; +	/* Channel: 3 => use channel allocation */ +	AdditionalInfo[1] = 3; AdditionalInfo[2] = 0;  	/* Operation: 0 => DTE mode, 1 => DCE mode */ -        if (active) { -   		AdditionalInfo[3] = 0; AdditionalInfo[4] = 0; -   	} else { -   		AdditionalInfo[3] = 1; AdditionalInfo[4] = 0; +	if (active) { +		AdditionalInfo[3] = 0; AdditionalInfo[4] = 0; +	} else { +		AdditionalInfo[3] = 1; AdditionalInfo[4] = 0;  	}  	/* Channel mask array */  	AdditionalInfo[5] = 0; /* no D-Channel */ -	for (i=1; i <= 30; i++) -		AdditionalInfo[5+i] = (bmask & (1 << i)) ? 0xff : 0; +	for (i = 1; i <= 30; i++) +		AdditionalInfo[5 + i] = (bmask & (1 << i)) ? 0xff : 0;  	return 0;  } -static int capidrv_command(isdn_ctrl * c, capidrv_contr * card) +static int capidrv_command(isdn_ctrl *c, capidrv_contr *card)  {  	isdn_ctrl cmd;  	struct capidrv_bchan *bchan;  	struct capidrv_plci *plcip; -	u8 AdditionalInfo[1+2+2+31]; -        int rc, isleasedline = 0; +	u8 AdditionalInfo[1 + 2 + 2 + 31]; +	int rc, isleasedline = 0;  	if (c->command == ISDN_CMD_IOCTL)  		return capidrv_ioctl(c, card);  	switch (c->command) { -	case ISDN_CMD_DIAL:{ -			u8 calling[ISDN_MSNLEN + 3]; -			u8 called[ISDN_MSNLEN + 2]; +	case ISDN_CMD_DIAL: { +		u8 calling[ISDN_MSNLEN + 3]; +		u8 called[ISDN_MSNLEN + 2]; -			if (debugmode) -				printk(KERN_DEBUG "capidrv-%d: ISDN_CMD_DIAL(ch=%ld,\"%s,%d,%d,%s\")\n", -					card->contrnr, -					c->arg, -				        c->parm.setup.phone, -				        c->parm.setup.si1, -				        c->parm.setup.si2, -				        c->parm.setup.eazmsn); - -			bchan = &card->bchans[c->arg % card->nbchan]; - -			if (bchan->plcip) { -				printk(KERN_ERR "capidrv-%d: dail ch=%ld,\"%s,%d,%d,%s\" in use (plci=0x%x)\n", -					card->contrnr, -			        	c->arg,  -				        c->parm.setup.phone, -				        c->parm.setup.si1, -				        c->parm.setup.si2, -				        c->parm.setup.eazmsn, -				        bchan->plcip->plci); -				return 0; -			} -			bchan->si1 = c->parm.setup.si1; -			bchan->si2 = c->parm.setup.si2; - -			strncpy(bchan->num, c->parm.setup.phone, sizeof(bchan->num)); -			strncpy(bchan->mynum, c->parm.setup.eazmsn, sizeof(bchan->mynum)); -                        rc = FVteln2capi20(bchan->num, AdditionalInfo); -			isleasedline = (rc == 0); -			if (rc < 0) -				printk(KERN_ERR "capidrv-%d: WARNING: invalid leased linedefinition \"%s\"\n", card->contrnr, bchan->num); - -			if (isleasedline) { -				calling[0] = 0; -				called[0] = 0; -			        if (debugmode) -					printk(KERN_DEBUG "capidrv-%d: connecting leased line\n", card->contrnr); -			} else { -		        	calling[0] = strlen(bchan->mynum) + 2; -		        	calling[1] = 0; -		     		calling[2] = 0x80; -			   	strncpy(calling + 3, bchan->mynum, ISDN_MSNLEN); -				called[0] = strlen(bchan->num) + 1; -				called[1] = 0x80; -				strncpy(called + 2, bchan->num, ISDN_MSNLEN); -			} +		if (debugmode) +			printk(KERN_DEBUG "capidrv-%d: ISDN_CMD_DIAL(ch=%ld,\"%s,%d,%d,%s\")\n", +			       card->contrnr, +			       c->arg, +			       c->parm.setup.phone, +			       c->parm.setup.si1, +			       c->parm.setup.si2, +			       c->parm.setup.eazmsn); -			capi_fill_CONNECT_REQ(&cmdcmsg, -					      global.ap.applid, -					      card->msgid++, -					      card->contrnr,	/* adr */ -					  si2cip(bchan->si1, bchan->si2),	/* cipvalue */ -					      called,	/* CalledPartyNumber */ -					      calling,	/* CallingPartyNumber */ -					      NULL,	/* CalledPartySubaddress */ -					      NULL,	/* CallingPartySubaddress */ -					    b1prot(bchan->l2, bchan->l3),	/* B1protocol */ -					    b2prot(bchan->l2, bchan->l3),	/* B2protocol */ -					    b3prot(bchan->l2, bchan->l3),	/* B3protocol */ -					    b1config(bchan->l2, bchan->l3),	/* B1configuration */ -					      NULL,	/* B2configuration */ -					      NULL,	/* B3configuration */ -					      NULL,	/* BC */ -					      NULL,	/* LLC */ -					      NULL,	/* HLC */ -					      /* BChannelinformation */ -					      isleasedline ? AdditionalInfo : NULL, -					      NULL,	/* Keypadfacility */ -					      NULL,	/* Useruserdata */ -					      NULL	/* Facilitydataarray */ -			    ); -			if ((plcip = new_plci(card, (c->arg % card->nbchan))) == NULL) { -				cmd.command = ISDN_STAT_DHUP; -				cmd.driver = card->myid; -				cmd.arg = (c->arg % card->nbchan); -				card->interface.statcallb(&cmd); -				return -1; -			} -			plcip->msgid = cmdcmsg.Messagenumber; -			plcip->leasedline = isleasedline; -			plci_change_state(card, plcip, EV_PLCI_CONNECT_REQ); -			send_message(card, &cmdcmsg); +		bchan = &card->bchans[c->arg % card->nbchan]; + +		if (bchan->plcip) { +			printk(KERN_ERR "capidrv-%d: dail ch=%ld,\"%s,%d,%d,%s\" in use (plci=0x%x)\n", +			       card->contrnr, +			       c->arg, +			       c->parm.setup.phone, +			       c->parm.setup.si1, +			       c->parm.setup.si2, +			       c->parm.setup.eazmsn, +			       bchan->plcip->plci);  			return 0;  		} +		bchan->si1 = c->parm.setup.si1; +		bchan->si2 = c->parm.setup.si2; + +		strncpy(bchan->num, c->parm.setup.phone, sizeof(bchan->num)); +		strncpy(bchan->mynum, c->parm.setup.eazmsn, sizeof(bchan->mynum)); +		rc = FVteln2capi20(bchan->num, AdditionalInfo); +		isleasedline = (rc == 0); +		if (rc < 0) +			printk(KERN_ERR "capidrv-%d: WARNING: invalid leased linedefinition \"%s\"\n", card->contrnr, bchan->num); + +		if (isleasedline) { +			calling[0] = 0; +			called[0] = 0; +			if (debugmode) +				printk(KERN_DEBUG "capidrv-%d: connecting leased line\n", card->contrnr); +		} else { +			calling[0] = strlen(bchan->mynum) + 2; +			calling[1] = 0; +			calling[2] = 0x80; +			strncpy(calling + 3, bchan->mynum, ISDN_MSNLEN); +			called[0] = strlen(bchan->num) + 1; +			called[1] = 0x80; +			strncpy(called + 2, bchan->num, ISDN_MSNLEN); +		} + +		capi_fill_CONNECT_REQ(&cmdcmsg, +				      global.ap.applid, +				      card->msgid++, +				      card->contrnr,	/* adr */ +				      si2cip(bchan->si1, bchan->si2),	/* cipvalue */ +				      called,	/* CalledPartyNumber */ +				      calling,	/* CallingPartyNumber */ +				      NULL,	/* CalledPartySubaddress */ +				      NULL,	/* CallingPartySubaddress */ +				      b1prot(bchan->l2, bchan->l3),	/* B1protocol */ +				      b2prot(bchan->l2, bchan->l3),	/* B2protocol */ +				      b3prot(bchan->l2, bchan->l3),	/* B3protocol */ +				      b1config(bchan->l2, bchan->l3),	/* B1configuration */ +				      NULL,	/* B2configuration */ +				      NULL,	/* B3configuration */ +				      NULL,	/* BC */ +				      NULL,	/* LLC */ +				      NULL,	/* HLC */ +				      /* BChannelinformation */ +				      isleasedline ? AdditionalInfo : NULL, +				      NULL,	/* Keypadfacility */ +				      NULL,	/* Useruserdata */ +				      NULL	/* Facilitydataarray */ +			); +		if ((plcip = new_plci(card, (c->arg % card->nbchan))) == NULL) { +			cmd.command = ISDN_STAT_DHUP; +			cmd.driver = card->myid; +			cmd.arg = (c->arg % card->nbchan); +			card->interface.statcallb(&cmd); +			return -1; +		} +		plcip->msgid = cmdcmsg.Messagenumber; +		plcip->leasedline = isleasedline; +		plci_change_state(card, plcip, EV_PLCI_CONNECT_REQ); +		send_message(card, &cmdcmsg); +		return 0; +	}  	case ISDN_CMD_ACCEPTD: @@ -1708,7 +1902,7 @@ static int capidrv_command(isdn_ctrl * c, capidrv_contr * card)  				       NULL,	/* Keypadfacility */  				       NULL,	/* Useruserdata */  				       NULL	/* Facilitydataarray */ -		); +			);  		capi_cmsg2message(&cmdcmsg, cmdcmsg.buf);  		plci_change_state(card, bchan->plcip, EV_PLCI_CONNECT_RESP);  		send_message(card, &cmdcmsg); @@ -1742,7 +1936,7 @@ static int capidrv_command(isdn_ctrl * c, capidrv_contr * card)  						    card->msgid++,  						    bchan->nccip->ncci,  						    NULL	/* NCPI */ -			); +				);  			ncci_change_state(card, bchan->nccip, EV_NCCI_DISCONNECT_B3_REQ);  			send_message(card, &cmdcmsg);  			return 0; @@ -1761,12 +1955,12 @@ static int capidrv_command(isdn_ctrl * c, capidrv_contr * card)  				capi_fill_DISCONNECT_REQ(&cmdcmsg,  							 global.ap.applid,  							 card->msgid++, -						      bchan->plcip->plci, +							 bchan->plcip->plci,  							 NULL,	/* BChannelinformation */  							 NULL,	/* Keypadfacility */  							 NULL,	/* Useruserdata */  							 NULL	/* Facilitydataarray */ -				); +					);  				plci_change_state(card, bchan->plcip, EV_PLCI_DISCONNECT_REQ);  				send_message(card, &cmdcmsg);  				return 0; @@ -1778,8 +1972,8 @@ static int capidrv_command(isdn_ctrl * c, capidrv_contr * card)  			}  		}  		printk(KERN_ERR "capidrv-%d: chan %ld disconnect request on free channel\n", -				       card->contrnr, -				       c->arg); +		       card->contrnr, +		       c->arg);  		return -EINVAL;  /* ready */ @@ -1813,20 +2007,20 @@ static int capidrv_command(isdn_ctrl * c, capidrv_contr * card)  	case ISDN_CMD_CLREAZ:  		if (debugmode)  			printk(KERN_DEBUG "capidrv-%d: clearing EAZ on chan %ld\n", -					card->contrnr, c->arg); +			       card->contrnr, c->arg);  		bchan = &card->bchans[c->arg % card->nbchan];  		bchan->msn[0] = 0;  		return 0;  	default:  		printk(KERN_ERR "capidrv-%d: ISDN_CMD_%d, Huh?\n", -					card->contrnr, c->command); +		       card->contrnr, c->command);  		return -EINVAL;  	}  	return 0;  } -static int if_command(isdn_ctrl * c) +static int if_command(isdn_ctrl *c)  {  	capidrv_contr *card = findcontrbydriverid(c->driver); @@ -1834,8 +2028,8 @@ static int if_command(isdn_ctrl * c)  		return capidrv_command(c, card);  	printk(KERN_ERR -	     "capidrv: if_command %d called with invalid driverId %d!\n", -						c->command, c->driver); +	       "capidrv: if_command %d called with invalid driverId %d!\n", +	       c->command, c->driver);  	return -ENODEV;  } @@ -1859,7 +2053,7 @@ static int if_sendbuf(int id, int channel, int doack, struct sk_buff *skb)  	}  	if (debugmode > 4)  		printk(KERN_DEBUG "capidrv-%d: sendbuf len=%d skb=%p doack=%d\n", -					card->contrnr, len, skb, doack); +		       card->contrnr, len, skb, doack);  	bchan = &card->bchans[channel % card->nbchan];  	nccip = bchan->nccip;  	if (!nccip || nccip->state != ST_NCCI_ACTIVE) { @@ -1891,10 +2085,10 @@ static int if_sendbuf(int id, int channel, int doack, struct sk_buff *skb)  			      skb->len,		/* DataLength */  			      datahandle,	/* DataHandle */  			      0	/* Flags */ -	    ); +		);  	if (capidrv_add_ack(nccip, datahandle, doack ? (int)skb->len : -1) < 0) -	   return 0; +		return 0;  	capi_cmsg2message(&sendcmsg, sendcmsg.buf);  	msglen = CAPIMSG_LEN(sendcmsg.buf); @@ -1902,8 +2096,8 @@ static int if_sendbuf(int id, int channel, int doack, struct sk_buff *skb)  		struct sk_buff *nskb = skb_realloc_headroom(skb, msglen);  		if (!nskb) {  			printk(KERN_ERR "capidrv-%d: if_sendbuf: no memory\n", -				card->contrnr); -		        (void)capidrv_del_ack(nccip, datahandle); +			       card->contrnr); +			(void)capidrv_del_ack(nccip, datahandle);  			return 0;  		}  		printk(KERN_DEBUG "capidrv-%d: only %d bytes headroom, need %d\n", @@ -1917,9 +2111,9 @@ static int if_sendbuf(int id, int channel, int doack, struct sk_buff *skb)  		}  		if (debugmode > 3)  			printk(KERN_DEBUG "capidrv-%d: sendbuf putmsg ret(%x) - %s\n", -				card->contrnr, errcode, capi_info2str(errcode)); -	        (void)capidrv_del_ack(nccip, datahandle); -	        dev_kfree_skb(nskb); +			       card->contrnr, errcode, capi_info2str(errcode)); +		(void)capidrv_del_ack(nccip, datahandle); +		dev_kfree_skb(nskb);  		return errcode == CAPI_SENDQUEUEFULL ? 0 : -1;  	} else {  		memcpy(skb_push(skb, msglen), sendcmsg.buf, msglen); @@ -1930,9 +2124,9 @@ static int if_sendbuf(int id, int channel, int doack, struct sk_buff *skb)  		}  		if (debugmode > 3)  			printk(KERN_DEBUG "capidrv-%d: sendbuf putmsg ret(%x) - %s\n", -				card->contrnr, errcode, capi_info2str(errcode)); +			       card->contrnr, errcode, capi_info2str(errcode));  		skb_pull(skb, msglen); -	        (void)capidrv_del_ack(nccip, datahandle); +		(void)capidrv_del_ack(nccip, datahandle);  		return errcode == CAPI_SENDQUEUEFULL ? 0 : -1;  	}  } @@ -1949,11 +2143,11 @@ static int if_readstat(u8 __user *buf, int len, int id, int channel)  		return -ENODEV;  	} -	for (p=buf, count=0; count < len; p++, count++) { +	for (p = buf, count = 0; count < len; p++, count++) {  		if (put_user(*card->q931_read++, p))  			return -EFAULT; -	        if (card->q931_read > card->q931_end) -	                card->q931_read = card->q931_buf; +		if (card->q931_read > card->q931_end) +			card->q931_read = card->q931_buf;  	}  	return count; @@ -1961,35 +2155,35 @@ static int if_readstat(u8 __user *buf, int len, int id, int channel)  static void enable_dchannel_trace(capidrv_contr *card)  { -        u8 manufacturer[CAPI_MANUFACTURER_LEN]; -        capi_version version; +	u8 manufacturer[CAPI_MANUFACTURER_LEN]; +	capi_version version;  	u16 contr = card->contrnr;  	u16 errcode;  	u16 avmversion[3]; -        errcode = capi20_get_manufacturer(contr, manufacturer); -        if (errcode != CAPI_NOERROR) { -	   printk(KERN_ERR "%s: can't get manufacturer (0x%x)\n", -			card->name, errcode); -	   return; +	errcode = capi20_get_manufacturer(contr, manufacturer); +	if (errcode != CAPI_NOERROR) { +		printk(KERN_ERR "%s: can't get manufacturer (0x%x)\n", +		       card->name, errcode); +		return;  	}  	if (strstr(manufacturer, "AVM") == NULL) { -	   printk(KERN_ERR "%s: not from AVM, no d-channel trace possible (%s)\n", -			card->name, manufacturer); -	   return; +		printk(KERN_ERR "%s: not from AVM, no d-channel trace possible (%s)\n", +		       card->name, manufacturer); +		return;  	} -        errcode = capi20_get_version(contr, &version); -        if (errcode != CAPI_NOERROR) { -	   printk(KERN_ERR "%s: can't get version (0x%x)\n", -			card->name, errcode); -	   return; +	errcode = capi20_get_version(contr, &version); +	if (errcode != CAPI_NOERROR) { +		printk(KERN_ERR "%s: can't get version (0x%x)\n", +		       card->name, errcode); +		return;  	}  	avmversion[0] = (version.majormanuversion >> 4) & 0x0f;  	avmversion[1] = (version.majormanuversion << 4) & 0xf0;  	avmversion[1] |= (version.minormanuversion >> 4) & 0x0f;  	avmversion[2] |= version.minormanuversion & 0x0f; -        if (avmversion[0] > 3 || (avmversion[0] == 3 && avmversion[1] > 5)) { +	if (avmversion[0] > 3 || (avmversion[0] == 3 && avmversion[1] > 5)) {  		printk(KERN_INFO "%s: D2 trace enabled\n", card->name);  		capi_fill_MANUFACTURER_REQ(&cmdcmsg, global.ap.applid,  					   card->msgid++, @@ -2030,8 +2224,8 @@ static void listentimerfunc(unsigned long x)  	capidrv_contr *card = (capidrv_contr *)x;  	if (card->state != ST_LISTEN_NONE && card->state != ST_LISTEN_ACTIVE)  		printk(KERN_ERR "%s: controller dead ??\n", card->name); -        send_listen(card); -	mod_timer(&card->listentimer, jiffies + 60*HZ); +	send_listen(card); +	mod_timer(&card->listentimer, jiffies + 60 * HZ);  } @@ -2050,7 +2244,7 @@ static int capidrv_addcontr(u16 contr, struct capi_profile *profp)  	}  	if (!(card = kzalloc(sizeof(capidrv_contr), GFP_ATOMIC))) {  		printk(KERN_WARNING -		 "capidrv: (%s) Could not allocate contr-struct.\n", id); +		       "capidrv: (%s) Could not allocate contr-struct.\n", id);  		return -1;  	}  	card->owner = THIS_MODULE; @@ -2061,7 +2255,7 @@ static int capidrv_addcontr(u16 contr, struct capi_profile *profp)  	card->bchans = kmalloc(sizeof(capidrv_bchan) * card->nbchan, GFP_ATOMIC);  	if (!card->bchans) {  		printk(KERN_WARNING -		"capidrv: (%s) Could not allocate bchan-structs.\n", id); +		       "capidrv: (%s) Could not allocate bchan-structs.\n", id);  		module_put(card->owner);  		kfree(card);  		return -1; @@ -2072,18 +2266,20 @@ static int capidrv_addcontr(u16 contr, struct capi_profile *profp)  	card->interface.writebuf_skb = if_sendbuf;  	card->interface.writecmd = NULL;  	card->interface.readstat = if_readstat; -	card->interface.features = ISDN_FEATURE_L2_HDLC | -	    			   ISDN_FEATURE_L2_TRANS | -	    			   ISDN_FEATURE_L3_TRANS | -				   ISDN_FEATURE_P_UNKNOWN | -				   ISDN_FEATURE_L2_X75I | -				   ISDN_FEATURE_L2_X75UI | -				   ISDN_FEATURE_L2_X75BUI; -	if (profp->support1 & (1<<2)) -		card->interface.features |= ISDN_FEATURE_L2_V11096 | -	    				    ISDN_FEATURE_L2_V11019 | -	    				    ISDN_FEATURE_L2_V11038; -	if (profp->support1 & (1<<8)) +	card->interface.features = +		ISDN_FEATURE_L2_HDLC | +		ISDN_FEATURE_L2_TRANS | +		ISDN_FEATURE_L3_TRANS | +		ISDN_FEATURE_P_UNKNOWN | +		ISDN_FEATURE_L2_X75I | +		ISDN_FEATURE_L2_X75UI | +		ISDN_FEATURE_L2_X75BUI; +	if (profp->support1 & (1 << 2)) +		card->interface.features |= +			ISDN_FEATURE_L2_V11096 | +			ISDN_FEATURE_L2_V11019 | +			ISDN_FEATURE_L2_V11038; +	if (profp->support1 & (1 << 8))  		card->interface.features |= ISDN_FEATURE_L2_MODEM;  	card->interface.hl_hdrlen = 22; /* len of DATA_B3_REQ */  	strncpy(card->interface.id, id, sizeof(card->interface.id) - 1); @@ -2122,10 +2318,10 @@ static int capidrv_addcontr(u16 contr, struct capi_profile *profp)  	card->listentimer.data = (unsigned long)card;  	card->listentimer.function = listentimerfunc;  	send_listen(card); -	mod_timer(&card->listentimer, jiffies + 60*HZ); +	mod_timer(&card->listentimer, jiffies + 60 * HZ);  	printk(KERN_INFO "%s: now up (%d B channels)\n", -		card->name, card->nbchan); +	       card->name, card->nbchan);  	enable_dchannel_trace(card); @@ -2158,7 +2354,7 @@ static int capidrv_delcontr(u16 contr)  	if (debugmode)  		printk(KERN_DEBUG "capidrv-%d: id=%d unloading\n", -					card->contrnr, card->myid); +		       card->contrnr, card->myid);  	cmd.command = ISDN_STAT_STOP;  	cmd.driver = card->myid; @@ -2168,17 +2364,17 @@ static int capidrv_delcontr(u16 contr)  		cmd.command = ISDN_STAT_DISCH;  		cmd.driver = card->myid; -		cmd.arg = card->nbchan-1; -	        cmd.parm.num[0] = 0; +		cmd.arg = card->nbchan - 1; +		cmd.parm.num[0] = 0;  		if (debugmode)  			printk(KERN_DEBUG "capidrv-%d: id=%d disable chan=%ld\n", -					card->contrnr, card->myid, cmd.arg); +			       card->contrnr, card->myid, cmd.arg);  		card->interface.statcallb(&cmd); -		if (card->bchans[card->nbchan-1].nccip) -			free_ncci(card, card->bchans[card->nbchan-1].nccip); -		if (card->bchans[card->nbchan-1].plcip) -			free_plci(card, card->bchans[card->nbchan-1].plcip); +		if (card->bchans[card->nbchan - 1].nccip) +			free_ncci(card, card->bchans[card->nbchan - 1].nccip); +		if (card->bchans[card->nbchan - 1].plcip) +			free_plci(card, card->bchans[card->nbchan - 1].plcip);  		if (card->plci_list)  			printk(KERN_ERR "capidrv: bug in free_plci()\n");  		card->nbchan--; @@ -2188,7 +2384,7 @@ static int capidrv_delcontr(u16 contr)  	if (debugmode)  		printk(KERN_DEBUG "capidrv-%d: id=%d isdn unload\n", -					card->contrnr, card->myid); +		       card->contrnr, card->myid);  	cmd.command = ISDN_STAT_UNLOAD;  	cmd.driver = card->myid; @@ -2196,7 +2392,7 @@ static int capidrv_delcontr(u16 contr)  	if (debugmode)  		printk(KERN_DEBUG "capidrv-%d: id=%d remove contr from list\n", -					card->contrnr, card->myid); +		       card->contrnr, card->myid);  	spin_lock_irqsave(&global_lock, flags);  	for (pp = &global.contr_list; *pp; pp = &(*pp)->next) { @@ -2243,10 +2439,10 @@ lower_callback(struct notifier_block *nb, unsigned long val, void *v)  static int capidrv_proc_show(struct seq_file *m, void *v)  {  	seq_printf(m, "%lu %lu %lu %lu\n", -			global.ap.nrecvctlpkt, -			global.ap.nrecvdatapkt, -			global.ap.nsentctlpkt, -			global.ap.nsentdatapkt); +		   global.ap.nrecvctlpkt, +		   global.ap.nrecvdatapkt, +		   global.ap.nsentctlpkt, +		   global.ap.nsentdatapkt);  	return 0;  } @@ -2297,6 +2493,7 @@ static int __init capidrv_init(void)  	errcode = capi20_get_profile(0, &profile);  	if (errcode != CAPI_NOERROR) { +		unregister_capictr_notifier(&capictr_nb);  		capi20_release(&global.ap);  		return -EIO;  	}  | 
