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

📄 config.c

📁 arm平台上的uclinux系统全部源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#if CARD_S0BOXextern int setup_s0box(struct IsdnCard *card);#endif#if CARD_TELESPCIextern int setup_telespci(struct IsdnCard *card);#endif#if CARD_AVM_A1extern int setup_avm_a1(struct IsdnCard *card);#endif#if CARD_AVM_A1_PCMCIAextern int setup_avm_a1_pcmcia(struct IsdnCard *card);#endif#if CARD_FRITZPCIextern int setup_avm_pcipnp(struct IsdnCard *card);#endif#if CARD_ELSAextern int setup_elsa(struct IsdnCard *card);#endif#if CARD_IX1MICROR2extern int setup_ix1micro(struct IsdnCard *card);#endif#if CARD_DIEHLDIVAextern	int  setup_diva(struct IsdnCard *card);#endif#if CARD_ASUSCOMextern int setup_asuscom(struct IsdnCard *card);#endif#if CARD_TELEINTextern int setup_TeleInt(struct IsdnCard *card);#endif#if CARD_SEDLBAUERextern int setup_sedlbauer(struct IsdnCard *card);#endif#if CARD_SPORTSTERextern int setup_sportster(struct IsdnCard *card);#endif#if CARD_MICextern int setup_mic(struct IsdnCard *card);#endif#if CARD_NETJETextern int setup_netjet(struct IsdnCard *card);#endif#if CARD_TELES3Cextern int setup_t163c(struct IsdnCard *card);#endif#if CARD_AMD7930extern int setup_amd7930(struct IsdnCard *card);#endif#if CARD_NICCYextern int setup_niccy(struct IsdnCard *card);#endif/* * Find card with given driverId */static inline struct IsdnCardState*hisax_findcard(int driverid){	int i;	for (i = 0; i < nrcards; i++)		if (cards[i].cs)			if (cards[i].cs->myid == driverid)				return (cards[i].cs);	return (NULL);}intHiSax_readstatus(u_char * buf, int len, int user, int id, int channel){	int count;	u_char *p = buf;	struct IsdnCardState *cs = hisax_findcard(id);	if (cs) {		if (len > HISAX_STATUS_BUFSIZE) {			printk(KERN_WARNING "HiSax: status overflow readstat %d/%d",				len, HISAX_STATUS_BUFSIZE);			return -ENODEV;		}		count = cs->status_end - cs->status_read +1;		if (count >= len)			count = len;		if (user)			copy_to_user(p, cs->status_read, count);		else			memcpy(p, cs->status_read, count);		cs->status_read += count;		if (cs->status_read > cs->status_end)			cs->status_read = cs->status_buf;		p += count;		count = len - count;		if (count) {			if (user)				copy_to_user(p, cs->status_read, count);			else				memcpy(p, cs->status_read, count);			cs->status_read += count;		}		return len;	} else {		printk(KERN_ERR		 "HiSax: if_readstatus called with invalid driverId!\n");		return -ENODEV;	}}inline intjiftime(char *s, long mark){	s += 8;	*s-- = '\0';	*s-- = mark % 10 + '0';	mark /= 10;	*s-- = mark % 10 + '0';	mark /= 10;	*s-- = '.';	*s-- = mark % 10 + '0';	mark /= 10;	*s-- = mark % 6 + '0';	mark /= 6;	*s-- = ':';	*s-- = mark % 10 + '0';	mark /= 10;	*s-- = mark % 10 + '0';	return(8);}static u_char tmpbuf[HISAX_STATUS_BUFSIZE];voidVHiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, va_list args){/* if head == NULL the fmt contains the full info */	long flags;	int count, i;	u_char *p;	isdn_ctrl ic;	int len;	save_flags(flags);	cli();	p = tmpbuf;	if (head) {		p += jiftime(p, jiffies);		p += sprintf(p, " %s", head);		p += vsprintf(p, fmt, args);		*p++ = '\n';		*p = 0;		len = p - tmpbuf;		p = tmpbuf;	} else {		p = fmt;		len = strlen(fmt);	}	if (!cs) {		printk(KERN_WARNING "HiSax: No CardStatus for message %s", p);		restore_flags(flags);		return;	}	if (len > HISAX_STATUS_BUFSIZE) {		printk(KERN_WARNING "HiSax: status overflow %d/%d",			len, HISAX_STATUS_BUFSIZE);		restore_flags(flags);		return;	}	count = len;	i = cs->status_end - cs->status_write +1;	if (i >= len)		i = len;	len -= i;	memcpy(cs->status_write, p, i);	cs->status_write += i;	if (cs->status_write > cs->status_end)		cs->status_write = cs->status_buf;	p += i;	if (len) {		memcpy(cs->status_write, p, len);		cs->status_write += len;	}#ifdef KERNELSTACK_DEBUG	i = (ulong)&len - current->kernel_stack_page;	sprintf(tmpbuf, "kstack %s %lx use %ld\n", current->comm,		current->kernel_stack_page, i);	len = strlen(tmpbuf);	for (p = tmpbuf, i = len; i > 0; i--, p++) {		*cs->status_write++ = *p;		if (cs->status_write > cs->status_end)			cs->status_write = cs->status_buf;		count++;	}#endif	restore_flags(flags);	if (count) {		ic.command = ISDN_STAT_STAVAIL;		ic.driver = cs->myid;		ic.arg = count;		cs->iif.statcallb(&ic);	}}voidHiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, ...){	va_list args;	va_start(args, fmt);	VHiSax_putstatus(cs, head, fmt, args);	va_end(args);}intll_run(struct IsdnCardState *cs){	long flags;	isdn_ctrl ic;	save_flags(flags);	cli();	ic.driver = cs->myid;	ic.command = ISDN_STAT_RUN;	cs->iif.statcallb(&ic);	restore_flags(flags);	return 0;}voidll_stop(struct IsdnCardState *cs){	isdn_ctrl ic;	ic.command = ISDN_STAT_STOP;	ic.driver = cs->myid;	cs->iif.statcallb(&ic);	CallcFreeChan(cs);}static voidll_unload(struct IsdnCardState *cs){	isdn_ctrl ic;	ic.command = ISDN_STAT_UNLOAD;	ic.driver = cs->myid;	cs->iif.statcallb(&ic);	if (cs->status_buf)		kfree(cs->status_buf);	cs->status_read = NULL;	cs->status_write = NULL;	cs->status_end = NULL;	kfree(cs->dlog);}static voidclosecard(int cardnr){	struct IsdnCardState *csta = cards[cardnr].cs;	if (csta->bcs->BC_Close != NULL) {		csta->bcs->BC_Close(csta->bcs + 1);		csta->bcs->BC_Close(csta->bcs);	}	if (csta->rcvbuf) {		kfree(csta->rcvbuf);		csta->rcvbuf = NULL;	}	discard_queue(&csta->rq);	discard_queue(&csta->sq);	if (csta->tx_skb) {		dev_kfree_skb(csta->tx_skb, FREE_WRITE);		csta->tx_skb = NULL;	}	if (csta->mon_rx) {		kfree(csta->mon_rx);		csta->mon_rx = NULL;	}	if (csta->mon_tx) {		kfree(csta->mon_tx);		csta->mon_tx = NULL;	}	csta->cardmsg(csta, CARD_RELEASE, NULL);	if (csta->dbusytimer.function != NULL)		del_timer(&csta->dbusytimer);	ll_unload(csta);}HISAX_INITFUNC(static int init_card(struct IsdnCardState *cs)){	int irq_cnt, cnt = 3;	long flags;	save_flags(flags);	cli();	irq_cnt = kstat_irqs(cs->irq);	printk(KERN_INFO "%s: IRQ %d count %d\n", CardType[cs->typ], cs->irq,		irq_cnt);	if (cs->cardmsg(cs, CARD_SETIRQ, NULL)) {		printk(KERN_WARNING "HiSax: couldn't get interrupt %d\n",			cs->irq);		restore_flags(flags);		return(1);	}	while (cnt) {		cs->cardmsg(cs, CARD_INIT, NULL);		sti();		current->state = TASK_INTERRUPTIBLE;		/* Timeout 10ms */		current->timeout = jiffies + (10 * HZ) / 1000;		schedule();		restore_flags(flags);		printk(KERN_INFO "%s: IRQ %d count %d\n", CardType[cs->typ],			cs->irq, kstat_irqs(cs->irq));		if (kstat_irqs(cs->irq) == irq_cnt) {			printk(KERN_WARNING			       "%s: IRQ(%d) getting no interrupts during init %d\n",			       CardType[cs->typ], cs->irq, 4 - cnt);			if (cnt == 1) {				free_irq(cs->irq, cs);				return (2);			} else {				cs->cardmsg(cs, CARD_RESET, NULL);				cnt--;			}		} else {			cs->cardmsg(cs, CARD_TEST, NULL);			return(0);		}	}	restore_flags(flags);	return(3);}HISAX_INITFUNC(static intcheckcard(int cardnr, char *id, int *busy_flag)){	long flags;	int ret = 0;	struct IsdnCard *card = cards + cardnr;	struct IsdnCardState *cs;	save_flags(flags);	cli();	if (!(cs = (struct IsdnCardState *)		kmalloc(sizeof(struct IsdnCardState), GFP_ATOMIC))) {		printk(KERN_WARNING		       "HiSax: No memory for IsdnCardState(card %d)\n",		       cardnr + 1);		restore_flags(flags);		return (0);	}	memset(cs, 0, sizeof(struct IsdnCardState));	card->cs = cs;	cs->cardnr = cardnr;	cs->debug = L1_DEB_WARN;	cs->HW_Flags = 0;	cs->busy_flag = busy_flag;#if TEI_PER_CARD#else	test_and_set_bit(FLG_TWO_DCHAN, &cs->HW_Flags);#endif	cs->protocol = card->protocol;	if ((card->typ > 0) && (card->typ < 31)) {		if (!((1 << card->typ) & SUPORTED_CARDS)) {			printk(KERN_WARNING			     "HiSax: Support for %s Card not selected\n",			       CardType[card->typ]);			restore_flags(flags);			return (0);		}	} else {		printk(KERN_WARNING		       "HiSax: Card Type %d out of range\n",		       card->typ);		restore_flags(flags);		return (0);	}	if (!(cs->dlog = kmalloc(MAX_DLOG_SPACE, GFP_ATOMIC))) {		printk(KERN_WARNING		       "HiSax: No memory for dlog(card %d)\n",		       cardnr + 1);		restore_flags(flags);		return (0);	}	if (!(cs->status_buf = kmalloc(HISAX_STATUS_BUFSIZE, GFP_ATOMIC))) {		printk(KERN_WARNING		       "HiSax: No memory for status_buf(card %d)\n",		       cardnr + 1);		kfree(cs->dlog);		restore_flags(flags);		return (0);	}	cs->stlist = NULL;	cs->mon_tx = NULL;	cs->mon_rx = NULL;	cs->status_read = cs->status_buf;	cs->status_write = cs->status_buf;	cs->status_end = cs->status_buf + HISAX_STATUS_BUFSIZE - 1;	cs->typ = card->typ;	strcpy(cs->iif.id, id);	cs->iif.channels = 2;	cs->iif.maxbufsize = MAX_DATA_SIZE;	cs->iif.hl_hdrlen = MAX_HEADER_LEN;	cs->iif.features =	    ISDN_FEATURE_L2_X75I |	    ISDN_FEATURE_L2_HDLC |//	    ISDN_FEATURE_L2_MODEM |	    ISDN_FEATURE_L2_TRANS |	    ISDN_FEATURE_L3_TRANS |#ifdef	CONFIG_HISAX_1TR6	    ISDN_FEATURE_P_1TR6 |#endif#ifdef	CONFIG_HISAX_EURO	    ISDN_FEATURE_P_EURO |#endif#ifdef        CONFIG_HISAX_NI1	    ISDN_FEATURE_P_NI1 |#endif	    0;	cs->iif.command = HiSax_command;	cs->iif.writecmd = NULL;	cs->iif.writebuf_skb = HiSax_writebuf_skb;	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);	switch (card->typ) {#if CARD_TELES0		case ISDN_CTYPE_16_0:		case ISDN_CTYPE_8_0:			ret = setup_teles0(card);			break;#endif#if CARD_TELES3		case ISDN_CTYPE_16_3:		case ISDN_CTYPE_PNP:		case ISDN_CTYPE_TELESPCMCIA:		case ISDN_CTYPE_COMPAQ_ISA:			ret = setup_teles3(card);			break;#endif#if CARD_S0BOX		case ISDN_CTYPE_S0BOX:			ret = setup_s0box(card);			break;#endif#if CARD_TELESPCI		case ISDN_CTYPE_TELESPCI:			ret = setup_telespci(card);			break;#endif#if CARD_AVM_A1		case ISDN_CTYPE_A1:			ret = setup_avm_a1(card);			break;#endif#if CARD_AVM_A1_PCMCIA		case ISDN_CTYPE_A1_PCMCIA:			ret = setup_avm_a1_pcmcia(card);			break;#endif#if CARD_FRITZPCI		case ISDN_CTYPE_FRITZPCI:			ret = setup_avm_pcipnp(card);			break;#endif#if CARD_ELSA		case ISDN_CTYPE_ELSA:		case ISDN_CTYPE_ELSA_PNP:		case ISDN_CTYPE_ELSA_PCMCIA:		case ISDN_CTYPE_ELSA_PCI:			ret = setup_elsa(card);			break;#endif#if CARD_IX1MICROR2		case ISDN_CTYPE_IX1MICROR2:			ret = setup_ix1micro(card);			break;#endif#if CARD_DIEHLDIVA		case ISDN_CTYPE_DIEHLDIVA:			ret = setup_diva(card);			break;#endif#if CARD_ASUSCOM		case ISDN_CTYPE_ASUSCOM:			ret = setup_asuscom(card);			break;#endif#if CARD_TELEINT		case ISDN_CTYPE_TELEINT:			ret = setup_TeleInt(card);			break;#endif#if CARD_SEDLBAUER		case ISDN_CTYPE_SEDLBAUER:		case ISDN_CTYPE_SEDLBAUER_PCMCIA:

⌨️ 快捷键说明

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