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

📄 config.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 4 页
字号:
extern 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_NETJET_Sextern int setup_netjet_s(struct IsdnCard *card);#endif#if CARD_HFCSextern int setup_hfcs(struct IsdnCard *card);#endif#if CARD_HFC_PCIextern int setup_hfcpci(struct IsdnCard *card);#endif#if CARD_HFC_SXextern int setup_hfcsx(struct IsdnCard *card);#endif#if CARD_AMD7930extern int setup_amd7930(struct IsdnCard *card);#endif#if CARD_NICCYextern int setup_niccy(struct IsdnCard *card);#endif#if CARD_ISURFextern int setup_isurf(struct IsdnCard *card);#endif#if CARD_HSTSAPHIRextern int setup_saphir(struct IsdnCard *card);#endif#if CARD_TESTEMUextern int setup_testemu(struct IsdnCard *card);#endif#if CARD_BKM_A4Textern int setup_bkm_a4t(struct IsdnCard *card);#endif#if CARD_SCT_QUADROextern int setup_sct_quadro(struct IsdnCard *card);#endif#if CARD_GAZELextern int setup_gazel(struct IsdnCard *card);#endif#if CARD_W6692extern int setup_w6692(struct IsdnCard *card);#endif#if CARD_NETJET_Uextern int setup_netjet_u(struct IsdnCard *card);#endif#if CARD_FN_ENTERNOW_PCIextern int setup_enternow_pci(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;}/* * Find card with given card number */#if 0struct IsdnCardState *hisax_get_card(int cardnr){	if ((cardnr <= nrcards) && (cardnr > 0))		if (cards[cardnr - 1].cs)			return cards[cardnr - 1].cs;	return NULL;}#endif  /*  0  */static int HiSax_readstatus(u_char __user *buf, int len, int id, int channel){	int count, cnt;	u_char __user *p = buf;	struct IsdnCardState *cs = hisax_findcard(id);	if (cs) {		if (len > HISAX_STATUS_BUFSIZE) {			printk(KERN_WARNING			       "HiSax: status overflow readstat %d/%d\n",			       len, HISAX_STATUS_BUFSIZE);		}		count = cs->status_end - cs->status_read + 1;		if (count >= len)			count = len;		copy_to_user(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;		while (count) {			if (count > HISAX_STATUS_BUFSIZE)				cnt = HISAX_STATUS_BUFSIZE;			else				cnt = count;			copy_to_user(p, cs->status_read, cnt);			p += cnt;			cs->status_read += cnt % HISAX_STATUS_BUFSIZE;			count -= cnt;		}		return len;	} else {		printk(KERN_ERR		       "HiSax: if_readstatus called with invalid driverId!\n");		return -ENODEV;	}}int jiftime(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];void VHiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt,		      va_list args){	/* if head == NULL the fmt contains the full info */	u_long		flags;	int		count, i;	u_char		*p;	isdn_ctrl	ic;	int		len;	if (!cs) {		printk(KERN_WARNING "HiSax: No CardStatus for message");		return;	}	spin_lock_irqsave(&cs->statlock, flags);	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 (len > HISAX_STATUS_BUFSIZE) {		spin_unlock_irqrestore(&cs->statlock, flags);		printk(KERN_WARNING "HiSax: status overflow %d/%d\n",		       len, HISAX_STATUS_BUFSIZE);		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	spin_unlock_irqrestore(&cs->statlock, flags);	if (count) {		ic.command = ISDN_STAT_STAVAIL;		ic.driver = cs->myid;		ic.arg = count;		cs->iif.statcallb(&ic);	}}void HiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, ...){	va_list args;	va_start(args, fmt);	VHiSax_putstatus(cs, head, fmt, args);	va_end(args);}int ll_run(struct IsdnCardState *cs, int addfeatures){	isdn_ctrl ic;	ic.driver = cs->myid;	ic.command = ISDN_STAT_RUN;	cs->iif.features |= addfeatures;	cs->iif.statcallb(&ic);	return 0;}static void ll_stop(struct IsdnCardState *cs){	isdn_ctrl ic;	ic.command = ISDN_STAT_STOP;	ic.driver = cs->myid;	cs->iif.statcallb(&ic);	//      CallcFreeChan(cs);}static void ll_unload(struct IsdnCardState *cs){	isdn_ctrl ic;	ic.command = ISDN_STAT_UNLOAD;	ic.driver = cs->myid;	cs->iif.statcallb(&ic);	kfree(cs->status_buf);	cs->status_read = NULL;	cs->status_write = NULL;	cs->status_end = NULL;	kfree(cs->dlog);	cs->dlog = NULL;}static void closecard(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);	}	skb_queue_purge(&csta->rq);	skb_queue_purge(&csta->sq);	kfree(csta->rcvbuf);	csta->rcvbuf = NULL;	if (csta->tx_skb) {		dev_kfree_skb(csta->tx_skb);		csta->tx_skb = NULL;	}	if (csta->DC_Close != NULL) {		csta->DC_Close(csta);	}	if (csta->cardmsg)		csta->cardmsg(csta, CARD_RELEASE, NULL);	if (csta->dbusytimer.function != NULL) // FIXME?		del_timer(&csta->dbusytimer);	ll_unload(csta);}static int init_card(struct IsdnCardState *cs){	int 	irq_cnt, cnt = 3, ret;	if (!cs->irq) {		ret = cs->cardmsg(cs, CARD_INIT, NULL);		return(ret);	}	irq_cnt = kstat_irqs(cs->irq);	printk(KERN_INFO "%s: IRQ %d count %d\n", CardType[cs->typ],	       cs->irq, irq_cnt);	if (request_irq(cs->irq, cs->irq_func, cs->irq_flags, "HiSax", cs)) {		printk(KERN_WARNING "HiSax: couldn't get interrupt %d\n",		       cs->irq);		return 1;	}	while (cnt) {		cs->cardmsg(cs, CARD_INIT, NULL);		/* Timeout 10ms */		msleep(10);		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;		}	}	return 3;}static int checkcard(int cardnr, char *id, int *busy_flag, struct module *lockowner){	int ret = 0;	struct IsdnCard *card = cards + cardnr;	struct IsdnCardState *cs;	cs = kmalloc(sizeof(struct IsdnCardState), GFP_ATOMIC);	if (!cs) {		printk(KERN_WARNING		       "HiSax: No memory for IsdnCardState(card %d)\n",		       cardnr + 1);		goto out;	}	memset(cs, 0, sizeof(struct IsdnCardState));	card->cs = cs;	spin_lock_init(&cs->statlock);	spin_lock_init(&cs->lock);	cs->chanlimit = 2;	/* maximum B-channel number */	cs->logecho = 0;	/* No echo logging */	cs->cardnr = cardnr;	cs->debug = L1_DEB_WARN;	cs->HW_Flags = 0;	cs->busy_flag = busy_flag;	cs->irq_flags = I4L_IRQ_FLAG;#if TEI_PER_CARD	if (card->protocol == ISDN_PTYPE_NI1)		test_and_set_bit(FLG_TWO_DCHAN, &cs->HW_Flags);#else	test_and_set_bit(FLG_TWO_DCHAN, &cs->HW_Flags);#endif	cs->protocol = card->protocol;	if (card->typ <= 0 || card->typ > ISDN_CTYPE_COUNT) {		printk(KERN_WARNING		       "HiSax: Card Type %d out of range\n", card->typ);		goto outf_cs;	}	if (!(cs->dlog = kmalloc(MAX_DLOG_SPACE, GFP_ATOMIC))) {		printk(KERN_WARNING		       "HiSax: No memory for dlog(card %d)\n", cardnr + 1);		goto outf_cs;	}	if (!(cs->status_buf = kmalloc(HISAX_STATUS_BUFSIZE, GFP_ATOMIC))) {		printk(KERN_WARNING		       "HiSax: No memory for status_buf(card %d)\n",		       cardnr + 1);		goto outf_dlog;	}	cs->stlist = 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;#ifdef MODULE	cs->iif.owner = lockowner;#endif	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_HDLC_56K |		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

⌨️ 快捷键说明

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