⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isdnl1.c

📁 arm平台上的uclinux系统全部源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		case 0x63:			return "UA";		case 0x87:			return "FRMR";		case 0xaf:			return "XID";		default:			if (!(cmd & 1))				return "I";			else				return "invalid command";	}}static char tmpdeb[32];char *l2frames(u_char * ptr){	switch (ptr[2] & ~0x10) {		case 1:		case 5:		case 9:			sprintf(tmpdeb, "%s[%d](nr %d)", l2cmd(ptr[2]), ptr[3] & 1, ptr[3] >> 1);			break;		case 0x6f:		case 0x0f:		case 3:		case 0x43:		case 0x63:		case 0x87:		case 0xaf:			sprintf(tmpdeb, "%s[%d]", l2cmd(ptr[2]), (ptr[2] & 0x10) >> 4);			break;		default:			if (!(ptr[2] & 1)) {				sprintf(tmpdeb, "I[%d](ns %d, nr %d)", ptr[3] & 1, ptr[2] >> 1, ptr[3] >> 1);				break;			} else				return "invalid command";	}	return tmpdeb;}voidLogl2Frame(struct IsdnCardState *cs, struct sk_buff *skb, char *buf, int dir){	u_char *ptr;	ptr = skb->data;	if (ptr[0] & 1 || !(ptr[1] & 1))		debugl1(cs, "Address not LAPD");	else		debugl1(cs, "%s %s: %s%c (sapi %d, tei %d)",			(dir ? "<-" : "->"), buf, l2frames(ptr),			((ptr[0] & 2) >> 1) == dir ? 'C' : 'R', ptr[0] >> 2, ptr[1] >> 1);}#endifstatic voidl1_reset(struct FsmInst *fi, int event, void *arg){	FsmChangeState(fi, ST_L1_F3);}static voidl1_deact_cnf(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	FsmChangeState(fi, ST_L1_F3);	if (test_bit(FLG_L1_ACTIVATING, &st->l1.Flags))		st->l1.l1hw(st, HW_ENABLE | REQUEST, NULL);}static voidl1_deact_req(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	FsmChangeState(fi, ST_L1_F3);//	if (!test_bit(FLG_L1_T3RUN, &st->l1.Flags)) {		FsmDelTimer(&st->l1.timer, 1);		FsmAddTimer(&st->l1.timer, 550, EV_TIMER_DEACT, NULL, 2);		test_and_set_bit(FLG_L1_DEACTTIMER, &st->l1.Flags);//	}}static voidl1_power_up(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	if (test_bit(FLG_L1_ACTIVATING, &st->l1.Flags)) {		FsmChangeState(fi, ST_L1_F4);		st->l1.l1hw(st, HW_INFO3 | REQUEST, NULL);		FsmDelTimer(&st->l1.timer, 1);		FsmAddTimer(&st->l1.timer, TIMER3_VALUE, EV_TIMER3, NULL, 2);		test_and_set_bit(FLG_L1_T3RUN, &st->l1.Flags);	} else		FsmChangeState(fi, ST_L1_F3);}static voidl1_go_F5(struct FsmInst *fi, int event, void *arg){	FsmChangeState(fi, ST_L1_F5);}static voidl1_go_F8(struct FsmInst *fi, int event, void *arg){	FsmChangeState(fi, ST_L1_F8);}static voidl1_info2_ind(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	FsmChangeState(fi, ST_L1_F6);	st->l1.l1hw(st, HW_INFO3 | REQUEST, NULL);}static voidl1_info4_ind(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	FsmChangeState(fi, ST_L1_F7);	st->l1.l1hw(st, HW_INFO3 | REQUEST, NULL);	if (test_and_clear_bit(FLG_L1_DEACTTIMER, &st->l1.Flags))		FsmDelTimer(&st->l1.timer, 4);	if (!test_bit(FLG_L1_ACTIVATED, &st->l1.Flags)) {		if (test_and_clear_bit(FLG_L1_T3RUN, &st->l1.Flags))			FsmDelTimer(&st->l1.timer, 3);		FsmAddTimer(&st->l1.timer, 110, EV_TIMER_ACT, NULL, 2);		test_and_set_bit(FLG_L1_ACTTIMER, &st->l1.Flags);	}}static voidl1_timer3(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	test_and_clear_bit(FLG_L1_T3RUN, &st->l1.Flags);		if (test_and_clear_bit(FLG_L1_ACTIVATING, &st->l1.Flags))		L1deactivated(st->l1.hardware);	if (st->l1.l1m.state != ST_L1_F6) {		FsmChangeState(fi, ST_L1_F3);		st->l1.l1hw(st, HW_ENABLE | REQUEST, NULL);	}}static voidl1_timer_act(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;		test_and_clear_bit(FLG_L1_ACTTIMER, &st->l1.Flags);	test_and_set_bit(FLG_L1_ACTIVATED, &st->l1.Flags);	L1activated(st->l1.hardware);}static voidl1_timer_deact(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;		test_and_clear_bit(FLG_L1_DEACTTIMER, &st->l1.Flags);	test_and_clear_bit(FLG_L1_ACTIVATED, &st->l1.Flags);	L1deactivated(st->l1.hardware);	st->l1.l1hw(st, HW_DEACTIVATE | RESPONSE, NULL);}static voidl1_activate(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;                	st->l1.l1hw(st, HW_RESET | REQUEST, NULL);}static voidl1_activate_no(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	if ((!test_bit(FLG_L1_DEACTTIMER, &st->l1.Flags)) && (!test_bit(FLG_L1_T3RUN, &st->l1.Flags))) {		test_and_clear_bit(FLG_L1_ACTIVATING, &st->l1.Flags);		L1deactivated(st->l1.hardware);	}}static struct FsmNode L1DFnList[] HISAX_INITDATA ={	{ST_L1_F3, EV_PH_ACTIVATE, l1_activate},	{ST_L1_F6, EV_PH_ACTIVATE, l1_activate_no},	{ST_L1_F8, EV_PH_ACTIVATE, l1_activate_no},	{ST_L1_F3, EV_RESET_IND, l1_reset},	{ST_L1_F4, EV_RESET_IND, l1_reset},	{ST_L1_F5, EV_RESET_IND, l1_reset},	{ST_L1_F6, EV_RESET_IND, l1_reset},	{ST_L1_F7, EV_RESET_IND, l1_reset},	{ST_L1_F8, EV_RESET_IND, l1_reset},	{ST_L1_F3, EV_DEACT_CNF, l1_deact_cnf},	{ST_L1_F4, EV_DEACT_CNF, l1_deact_cnf},	{ST_L1_F5, EV_DEACT_CNF, l1_deact_cnf},	{ST_L1_F6, EV_DEACT_CNF, l1_deact_cnf},	{ST_L1_F7, EV_DEACT_CNF, l1_deact_cnf},	{ST_L1_F8, EV_DEACT_CNF, l1_deact_cnf},	{ST_L1_F6, EV_DEACT_IND, l1_deact_req},	{ST_L1_F7, EV_DEACT_IND, l1_deact_req},	{ST_L1_F8, EV_DEACT_IND, l1_deact_req},	{ST_L1_F3, EV_POWER_UP, l1_power_up},	{ST_L1_F4, EV_RSYNC_IND, l1_go_F5},	{ST_L1_F6, EV_RSYNC_IND, l1_go_F8},	{ST_L1_F7, EV_RSYNC_IND, l1_go_F8},	{ST_L1_F3, EV_INFO2_IND, l1_info2_ind},	{ST_L1_F4, EV_INFO2_IND, l1_info2_ind},	{ST_L1_F5, EV_INFO2_IND, l1_info2_ind},	{ST_L1_F7, EV_INFO2_IND, l1_info2_ind},	{ST_L1_F8, EV_INFO2_IND, l1_info2_ind},	{ST_L1_F3, EV_INFO4_IND, l1_info4_ind},	{ST_L1_F4, EV_INFO4_IND, l1_info4_ind},	{ST_L1_F5, EV_INFO4_IND, l1_info4_ind},	{ST_L1_F6, EV_INFO4_IND, l1_info4_ind},	{ST_L1_F8, EV_INFO4_IND, l1_info4_ind},	{ST_L1_F3, EV_TIMER3, l1_timer3},	{ST_L1_F4, EV_TIMER3, l1_timer3},	{ST_L1_F5, EV_TIMER3, l1_timer3},	{ST_L1_F6, EV_TIMER3, l1_timer3},	{ST_L1_F8, EV_TIMER3, l1_timer3},	{ST_L1_F7, EV_TIMER_ACT, l1_timer_act},	{ST_L1_F3, EV_TIMER_DEACT, l1_timer_deact},	{ST_L1_F4, EV_TIMER_DEACT, l1_timer_deact},	{ST_L1_F5, EV_TIMER_DEACT, l1_timer_deact},	{ST_L1_F6, EV_TIMER_DEACT, l1_timer_deact},	{ST_L1_F7, EV_TIMER_DEACT, l1_timer_deact},	{ST_L1_F8, EV_TIMER_DEACT, l1_timer_deact},};#define L1D_FN_COUNT (sizeof(L1DFnList)/sizeof(struct FsmNode))static voidl1b_activate(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	FsmChangeState(fi, ST_L1_WAIT_ACT);	FsmAddTimer(&st->l1.timer, st->l1.delay, EV_TIMER_ACT, NULL, 2);}static voidl1b_deactivate(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	FsmChangeState(fi, ST_L1_WAIT_DEACT);	FsmAddTimer(&st->l1.timer, 10, EV_TIMER_DEACT, NULL, 2);}static voidl1b_timer_act(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	FsmChangeState(fi, ST_L1_ACTIV);	st->l1.l1l2(st, PH_ACTIVATE | CONFIRM, NULL);}static voidl1b_timer_deact(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	FsmChangeState(fi, ST_L1_NULL);	st->l2.l2l1(st, PH_DEACTIVATE | CONFIRM, NULL);}static struct FsmNode L1BFnList[] HISAX_INITDATA ={	{ST_L1_NULL, EV_PH_ACTIVATE, l1b_activate},	{ST_L1_WAIT_ACT, EV_TIMER_ACT, l1b_timer_act},	{ST_L1_ACTIV, EV_PH_DEACTIVATE, l1b_deactivate},	{ST_L1_WAIT_DEACT, EV_TIMER_DEACT, l1b_timer_deact},};#define L1B_FN_COUNT (sizeof(L1BFnList)/sizeof(struct FsmNode))HISAX_INITFUNC(void Isdnl1New(void)){	l1fsm_d.state_count = L1D_STATE_COUNT;	l1fsm_d.event_count = L1_EVENT_COUNT;	l1fsm_d.strEvent = strL1Event;	l1fsm_d.strState = strL1DState;	FsmNew(&l1fsm_d, L1DFnList, L1D_FN_COUNT);	l1fsm_b.state_count = L1B_STATE_COUNT;	l1fsm_b.event_count = L1_EVENT_COUNT;	l1fsm_b.strEvent = strL1Event;	l1fsm_b.strState = strL1BState;	FsmNew(&l1fsm_b, L1BFnList, L1B_FN_COUNT);}void Isdnl1Free(void){	FsmFree(&l1fsm_d);	FsmFree(&l1fsm_b);}static voiddch_l2l1(struct PStack *st, int pr, void *arg){	struct IsdnCardState *cs = (struct IsdnCardState *) st->l1.hardware;	switch (pr) {		case (PH_DATA | REQUEST):		case (PH_PULL | REQUEST):		case (PH_PULL |INDICATION):			st->l1.l1hw(st, pr, arg);			break;		case (PH_ACTIVATE | REQUEST):			if (cs->debug)				debugl1(cs, "PH_ACTIVATE_REQ %s",					strL1DState[st->l1.l1m.state]);			if (test_bit(FLG_L1_ACTIVATED, &st->l1.Flags))				st->l1.l1l2(st, PH_ACTIVATE | CONFIRM, NULL);			else {				test_and_set_bit(FLG_L1_ACTIVATING, &st->l1.Flags);				FsmEvent(&st->l1.l1m, EV_PH_ACTIVATE, arg);			}			break;		case (PH_TESTLOOP | REQUEST):			if (1 & (long) arg)				debugl1(cs, "PH_TEST_LOOP B1");			if (2 & (long) arg)				debugl1(cs, "PH_TEST_LOOP B2");			if (!(3 & (long) arg))				debugl1(cs, "PH_TEST_LOOP DISABLED");			st->l1.l1hw(st, HW_TESTLOOP | REQUEST, arg);			break;		default:			if (cs->debug)				debugl1(cs, "dch_l2l1 msg %04X unhandled", pr);			break;	}}voidl1_msg(struct IsdnCardState *cs, int pr, void *arg) {	struct PStack *st;	st = cs->stlist;		while (st) {		switch(pr) {			case (HW_RESET | INDICATION):				FsmEvent(&st->l1.l1m, EV_RESET_IND, arg);				break;			case (HW_DEACTIVATE | CONFIRM):				FsmEvent(&st->l1.l1m, EV_DEACT_CNF, arg);				break;			case (HW_DEACTIVATE | INDICATION):				FsmEvent(&st->l1.l1m, EV_DEACT_IND, arg);				break;			case (HW_POWERUP | CONFIRM):				FsmEvent(&st->l1.l1m, EV_POWER_UP, arg);				break;			case (HW_RSYNC | INDICATION):				FsmEvent(&st->l1.l1m, EV_RSYNC_IND, arg);				break;			case (HW_INFO2 | INDICATION):				FsmEvent(&st->l1.l1m, EV_INFO2_IND, arg);				break;			case (HW_INFO4_P8 | INDICATION):			case (HW_INFO4_P10 | INDICATION):				FsmEvent(&st->l1.l1m, EV_INFO4_IND, arg);				break;			default:				if (cs->debug)					debugl1(cs, "l1msg %04X unhandled", pr);				break;		}		st = st->next;	}}voidl1_msg_b(struct PStack *st, int pr, void *arg) {	switch(pr) {		case (PH_ACTIVATE | REQUEST):			FsmEvent(&st->l1.l1m, EV_PH_ACTIVATE, NULL);			break;		case (PH_DEACTIVATE | REQUEST):			FsmEvent(&st->l1.l1m, EV_PH_DEACTIVATE, NULL);			break;	}}voidsetstack_HiSax(struct PStack *st, struct IsdnCardState *cs){	st->l1.hardware = cs;	st->protocol = cs->protocol;	st->l1.l1m.fsm = &l1fsm_d;	st->l1.l1m.state = ST_L1_F3;	st->l1.l1m.debug = cs->debug;	st->l1.l1m.userdata = st;	st->l1.l1m.userint = 0;	st->l1.l1m.printdebug = l1m_debug;	FsmInitTimer(&st->l1.l1m, &st->l1.timer);	setstack_tei(st);	setstack_manager(st);	st->l1.stlistp = &(cs->stlist);	st->l2.l2l1  = dch_l2l1;	st->l1.Flags = 0;	cs->setstack_d(st, cs);}voidsetstack_l1_B(struct PStack *st){	struct IsdnCardState *cs = st->l1.hardware;	st->l1.l1m.fsm = &l1fsm_b;	st->l1.l1m.state = ST_L1_NULL;	st->l1.l1m.debug = cs->debug;	st->l1.l1m.userdata = st;	st->l1.l1m.userint = 0;	st->l1.l1m.printdebug = l1m_debug;	st->l1.Flags = 0;	FsmInitTimer(&st->l1.l1m, &st->l1.timer);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -