亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? pc300_drv.c

?? 優(yōu)龍2410linux2.6.8內(nèi)核源代碼
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
}/*---------------------------------------------------------------------------- * falc_generate_loop_up_code *---------------------------------------------------------------------------- * Description:	This routine writes the proper FALC chip register in order *		to generate a LOOP activation code over a T1/E1 line. *---------------------------------------------------------------------------- */void falc_generate_loop_up_code(pc300_t * card, int ch){	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;	falc_t *pfalc = (falc_t *) & chan->falc;	uclong falcbase = card->hw.falcbase;	if (conf->media == IF_IFACE_T1) {		cpc_writeb(falcbase + F_REG(FMR5, ch),			   cpc_readb(falcbase + F_REG(FMR5, ch)) | FMR5_XLU);	} else {		cpc_writeb(falcbase + F_REG(FMR3, ch),			   cpc_readb(falcbase + F_REG(FMR3, ch)) | FMR3_XLU);	}	// EVENT_FALC_ABNORMAL	if (conf->media == IF_IFACE_T1) {		/* Disable this interrupt as it may otherwise interfere with 		 * other working boards. */		cpc_writeb(falcbase + F_REG(IMR0, ch),			   cpc_readb(falcbase + F_REG(IMR0, ch)) | IMR0_PDEN);	}	falc_disable_comm(card, ch);	// EVENT_FALC_ABNORMAL	pfalc->loop_gen = 1;}/*---------------------------------------------------------------------------- * falc_generate_loop_down_code *---------------------------------------------------------------------------- * Description:	This routine writes the proper FALC chip register in order *		to generate a LOOP deactivation code over a T1/E1 line. *---------------------------------------------------------------------------- */void falc_generate_loop_down_code(pc300_t * card, int ch){	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;	falc_t *pfalc = (falc_t *) & chan->falc;	uclong falcbase = card->hw.falcbase;	if (conf->media == IF_IFACE_T1) {		cpc_writeb(falcbase + F_REG(FMR5, ch),			   cpc_readb(falcbase + F_REG(FMR5, ch)) | FMR5_XLD);	} else {		cpc_writeb(falcbase + F_REG(FMR3, ch),			   cpc_readb(falcbase + F_REG(FMR3, ch)) | FMR3_XLD);	}	pfalc->sync = 0;	cpc_writeb(falcbase + card->hw.cpld_reg2,		   cpc_readb(falcbase + card->hw.cpld_reg2) &		   ~(CPLD_REG2_FALC_LED2 << (2 * ch)));	pfalc->active = 0;//?    falc_issue_cmd(card, ch, CMDR_XRES);	pfalc->loop_gen = 0;}/*---------------------------------------------------------------------------- * falc_pattern_test *---------------------------------------------------------------------------- * Description:	This routine generates a pattern code and checks *		it on the reception side. *---------------------------------------------------------------------------- */void falc_pattern_test(pc300_t * card, int ch, unsigned int activate){	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;	falc_t *pfalc = (falc_t *) & chan->falc;	uclong falcbase = card->hw.falcbase;	if (activate) {		pfalc->prbs = 1;		pfalc->bec = 0;		if (conf->media == IF_IFACE_T1) {			/* Disable local loop activation/deactivation detect */			cpc_writeb(falcbase + F_REG(IMR3, ch),				   cpc_readb(falcbase + F_REG(IMR3, ch)) | IMR3_LLBSC);		} else {			/* Disable local loop activation/deactivation detect */			cpc_writeb(falcbase + F_REG(IMR1, ch),				   cpc_readb(falcbase + F_REG(IMR1, ch)) | IMR1_LLBSC);		}		/* Activates generation and monitoring of PRBS 		 * (Pseudo Random Bit Sequence) */		cpc_writeb(falcbase + F_REG(LCR1, ch),			   cpc_readb(falcbase + F_REG(LCR1, ch)) | LCR1_EPRM | LCR1_XPRBS);	} else {		pfalc->prbs = 0;		/* Deactivates generation and monitoring of PRBS 		 * (Pseudo Random Bit Sequence) */		cpc_writeb(falcbase + F_REG(LCR1, ch),			   cpc_readb(falcbase+F_REG(LCR1,ch)) & ~(LCR1_EPRM | LCR1_XPRBS));		if (conf->media == IF_IFACE_T1) {			/* Enable local loop activation/deactivation detect */			cpc_writeb(falcbase + F_REG(IMR3, ch),				   cpc_readb(falcbase + F_REG(IMR3, ch)) & ~IMR3_LLBSC);		} else {			/* Enable local loop activation/deactivation detect */			cpc_writeb(falcbase + F_REG(IMR1, ch),				   cpc_readb(falcbase + F_REG(IMR1, ch)) & ~IMR1_LLBSC);		}	}}/*---------------------------------------------------------------------------- * falc_pattern_test_error *---------------------------------------------------------------------------- * Description:	This routine returns the bit error counter value *---------------------------------------------------------------------------- */ucshort falc_pattern_test_error(pc300_t * card, int ch){	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];	falc_t *pfalc = (falc_t *) & chan->falc;	return (pfalc->bec);}/**********************************//***   Net Interface Routines   ***//**********************************/static voidcpc_trace(struct net_device *dev, struct sk_buff *skb_main, char rx_tx){	struct sk_buff *skb;	if ((skb = dev_alloc_skb(10 + skb_main->len)) == NULL) {		printk("%s: out of memory\n", dev->name);		return;	}	skb_put(skb, 10 + skb_main->len);	skb->dev = dev;	skb->protocol = htons(ETH_P_CUST);	skb->mac.raw = skb->data;	skb->pkt_type = PACKET_HOST;	skb->len = 10 + skb_main->len;	memcpy(skb->data, dev->name, 5);	skb->data[5] = '[';	skb->data[6] = rx_tx;	skb->data[7] = ']';	skb->data[8] = ':';	skb->data[9] = ' ';	memcpy(&skb->data[10], skb_main->data, skb_main->len);	netif_rx(skb);}void cpc_tx_timeout(struct net_device *dev){	pc300dev_t *d = (pc300dev_t *) dev->priv;	pc300ch_t *chan = (pc300ch_t *) d->chan;	pc300_t *card = (pc300_t *) chan->card;	struct net_device_stats *stats = hdlc_stats(dev);	int ch = chan->channel;	uclong flags;	ucchar ilar;	stats->tx_errors++;	stats->tx_aborted_errors++;	CPC_LOCK(card, flags);	if ((ilar = cpc_readb(card->hw.scabase + ILAR)) != 0) {		printk("%s: ILAR=0x%x\n", dev->name, ilar);		cpc_writeb(card->hw.scabase + ILAR, ilar);		cpc_writeb(card->hw.scabase + DMER, 0x80);	}	if (card->hw.type == PC300_TE) {		cpc_writeb(card->hw.falcbase + card->hw.cpld_reg2,			   cpc_readb(card->hw.falcbase + card->hw.cpld_reg2) &			   ~(CPLD_REG2_FALC_LED1 << (2 * ch)));	}	dev->trans_start = jiffies;	CPC_UNLOCK(card, flags);	netif_wake_queue(dev);}int cpc_queue_xmit(struct sk_buff *skb, struct net_device *dev){	pc300dev_t *d = (pc300dev_t *) dev->priv;	pc300ch_t *chan = (pc300ch_t *) d->chan;	pc300_t *card = (pc300_t *) chan->card;	struct net_device_stats *stats = hdlc_stats(dev);	int ch = chan->channel;	uclong flags;#ifdef PC300_DEBUG_TX	int i;#endif	if (chan->conf.monitor) {		/* In monitor mode no Tx is done: ignore packet */		dev_kfree_skb(skb);		return 0;	} else if (!netif_carrier_ok(dev)) {		/* DCD must be OFF: drop packet */		dev_kfree_skb(skb);		stats->tx_errors++;		stats->tx_carrier_errors++;		return 0;	} else if (cpc_readb(card->hw.scabase + M_REG(ST3, ch)) & ST3_DCD) {		printk("%s: DCD is OFF. Going administrative down.\n", dev->name);		stats->tx_errors++;		stats->tx_carrier_errors++;		dev_kfree_skb(skb);		netif_carrier_off(dev);		CPC_LOCK(card, flags);		cpc_writeb(card->hw.scabase + M_REG(CMD, ch), CMD_TX_BUF_CLR);		if (card->hw.type == PC300_TE) {			cpc_writeb(card->hw.falcbase + card->hw.cpld_reg2,				   cpc_readb(card->hw.falcbase + card->hw.cpld_reg2) & 				   			~(CPLD_REG2_FALC_LED1 << (2 * ch)));		}		CPC_UNLOCK(card, flags);		netif_wake_queue(dev);		return 0;	}	/* Write buffer to DMA buffers */	if (dma_buf_write(card, ch, (ucchar *) skb->data, skb->len) != 0) {//		printk("%s: write error. Dropping TX packet.\n", dev->name);		netif_stop_queue(dev);		dev_kfree_skb(skb);		stats->tx_errors++;		stats->tx_dropped++;		return 0;	}#ifdef PC300_DEBUG_TX	printk("%s T:", dev->name);	for (i = 0; i < skb->len; i++)		printk(" %02x", *(skb->data + i));	printk("\n");#endif	if (d->trace_on) {		cpc_trace(dev, skb, 'T');	}	dev->trans_start = jiffies;	/* Start transmission */	CPC_LOCK(card, flags);	/* verify if it has more than one free descriptor */	if (card->chan[ch].nfree_tx_bd <= 1) {		/* don't have so stop the queue */		netif_stop_queue(dev);	}	cpc_writel(card->hw.scabase + DTX_REG(EDAL, ch),		   TX_BD_ADDR(ch, chan->tx_next_bd));	cpc_writeb(card->hw.scabase + M_REG(CMD, ch), CMD_TX_ENA);	cpc_writeb(card->hw.scabase + DSR_TX(ch), DSR_DE);	if (card->hw.type == PC300_TE) {		cpc_writeb(card->hw.falcbase + card->hw.cpld_reg2,			   cpc_readb(card->hw.falcbase + card->hw.cpld_reg2) |			   (CPLD_REG2_FALC_LED1 << (2 * ch)));	}	CPC_UNLOCK(card, flags);	dev_kfree_skb(skb);	return 0;}void cpc_net_rx(struct net_device *dev){	pc300dev_t *d = (pc300dev_t *) dev->priv;	pc300ch_t *chan = (pc300ch_t *) d->chan;	pc300_t *card = (pc300_t *) chan->card;	struct net_device_stats *stats = hdlc_stats(dev);	int ch = chan->channel;#ifdef PC300_DEBUG_RX	int i;#endif	int rxb;	struct sk_buff *skb;	while (1) {		if ((rxb = dma_get_rx_frame_size(card, ch)) == -1)			return;		if (!netif_carrier_ok(dev)) {			/* DCD must be OFF: drop packet */		    printk("%s : DCD is OFF - drop %d rx bytes\n", dev->name, rxb); 			skb = NULL;		} else {			if (rxb > (dev->mtu + 40)) { /* add headers */				printk("%s : MTU exceeded %d\n", dev->name, rxb); 				skb = NULL;			} else {				skb = dev_alloc_skb(rxb);				if (skb == NULL) {					printk("%s: Memory squeeze!!\n", dev->name);					return;				}				skb->dev = dev;			}		}		if (((rxb = dma_buf_read(card, ch, skb)) <= 0) || (skb == NULL)) {#ifdef PC300_DEBUG_RX			printk("%s: rxb = %x\n", dev->name, rxb);#endif			if ((skb == NULL) && (rxb > 0)) {				/* rxb > dev->mtu */				stats->rx_errors++;				stats->rx_length_errors++;				continue;			}			if (rxb < 0) {	/* Invalid frame */				rxb = -rxb;				if (rxb & DST_OVR) {					stats->rx_errors++;					stats->rx_fifo_errors++;				}				if (rxb & DST_CRC) {					stats->rx_errors++;					stats->rx_crc_errors++;				}				if (rxb & (DST_RBIT | DST_SHRT | DST_ABT)) {					stats->rx_errors++;					stats->rx_frame_errors++;				}			}			if (skb) {				dev_kfree_skb_irq(skb);			}			continue;		}		stats->rx_bytes += rxb;#ifdef PC300_DEBUG_RX		printk("%s R:", dev->name);		for (i = 0; i < skb->len; i++)			printk(" %02x", *(skb->data + i));		printk("\n");#endif		if (d->trace_on) {			cpc_trace(dev, skb, 'R');		}		stats->rx_packets++;		skb->mac.raw = skb->data;		skb->protocol = hdlc_type_trans(skb, dev);		netif_rx(skb);	}}/************************************//***   PC300 Interrupt Routines   ***//************************************/static void sca_tx_intr(pc300dev_t *dev){	pc300ch_t *chan = (pc300ch_t *)dev->chan; 	pc300_t *card = (pc300_t *)chan->card; 	int ch = chan->channel; 	volatile pcsca_bd_t * ptdescr; 	struct net_device_stats *stats = hdlc_stats(dev->dev);    /* Clean up descriptors from previous transmission */	ptdescr = (pcsca_bd_t *)(card->hw.rambase +						TX_BD_ADDR(ch,chan->tx_first_bd));	while ((cpc_readl(card->hw.scabase + DTX_REG(CDAL,ch)) != 							TX_BD_ADDR(ch,chan->tx_first_bd)) && 			(cpc_readb(&ptdescr->status) & DST_OSB)) {		stats->tx_packets++;		stats->tx_bytes += cpc_readw(&ptdescr->len);		cpc_writeb(&ptdescr->status, DST_OSB);		cpc_writew(&ptdescr->len, 0);		chan->nfree_tx_bd++;		chan->tx_first_bd = (chan->tx_first_bd + 1) & (N_DMA_TX_BUF - 1);		ptdescr = (pcsca_bd_t *)(card->hw.rambase +						TX_BD_ADDR(ch,chan->tx_first_bd));    }#ifdef CONFIG_PC300_MLPPP	if (chan->conf.proto == PC300_PROTO_MLPPP) {			cpc_tty_trigger_poll(dev);	} else {#endif	/* Tell the upper layer we are ready to transmit more packets */		netif_wake_queue(dev->dev);#ifdef CONFIG_PC300_MLPPP	}#endif}static void sca_intr(pc300_t * card){	uclong scabase = card->hw.scabase;	volatile uclong status;	int ch;	int intr_count = 0;	unsigned char dsr_rx;	while ((stat

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
18成人在线视频| 一级做a爱片久久| 91久久人澡人人添人人爽欧美| 日日噜噜夜夜狠狠视频欧美人 | 亚洲精品免费在线| 欧美mv和日韩mv的网站| 欧美视频一区二区在线观看| 粉嫩蜜臀av国产精品网站| 污片在线观看一区二区| 国产精品美女久久久久高潮| 日韩一区二区高清| 欧美婷婷六月丁香综合色| 国产成人亚洲精品青草天美| 日本欧美加勒比视频| 一区二区三区不卡在线观看| 国产精品―色哟哟| 久久婷婷国产综合国色天香| 欧美电影在线免费观看| 日本高清不卡aⅴ免费网站| 国产91在线观看丝袜| 精品一区二区影视| 免费的成人av| 三级久久三级久久久| 一区二区三区在线视频播放 | 亚洲女性喷水在线观看一区| 国产拍揄自揄精品视频麻豆| 欧美xxxxx裸体时装秀| 欧美日韩国产综合视频在线观看 | 国产亚洲综合av| 亚洲精品一区二区三区蜜桃下载 | 丝袜亚洲另类欧美| 亚洲国产欧美在线| 亚洲一区二区综合| 亚洲精品伦理在线| 樱花草国产18久久久久| 亚洲精品日日夜夜| 一区二区在线观看不卡| 亚洲日本青草视频在线怡红院 | 青娱乐精品在线视频| 日韩激情av在线| 五月婷婷久久综合| 秋霞电影网一区二区| 麻豆国产精品视频| 国产一区二区三区在线观看精品 | 中文一区二区在线观看| 国产片一区二区三区| 中文字幕一区二区三区在线播放| 国产精品对白交换视频 | 亚洲一线二线三线视频| 午夜日韩在线电影| 日本一区中文字幕| 国产在线观看一区二区| 国产福利精品导航| 成人av高清在线| 在线观看亚洲a| 91精品国产欧美日韩| 精品久久久久久久久久久久久久久久久 | 色综合激情五月| 欧美美女bb生活片| 日韩免费视频一区| 中文字幕国产精品一区二区| 亚洲天堂免费在线观看视频| 亚洲一区二区三区三| 偷拍一区二区三区四区| 国产精品一区二区在线观看不卡| 成人黄色在线视频| 欧美四级电影在线观看| 精品国产免费一区二区三区四区| 久久亚洲一区二区三区明星换脸| 中文字幕一区二区三区蜜月| 视频一区欧美日韩| 国产伦精一区二区三区| 91天堂素人约啪| 欧美一二三区在线| 国产精品久久二区二区| 天天影视色香欲综合网老头| 国产美女精品人人做人人爽| 91丨九色丨国产丨porny| 欧美人牲a欧美精品| 国产日本欧美一区二区| 亚洲va韩国va欧美va精品 | 久久精品噜噜噜成人av农村| 国产a视频精品免费观看| 欧美在线视频日韩| 久久精品人人做人人综合 | 日韩欧美中文字幕精品| 亚洲国产精品精华液ab| 日韩av在线发布| 99国产精品久| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲视频在线一区二区| 美女mm1313爽爽久久久蜜臀| 成人ar影院免费观看视频| 欧美男同性恋视频网站| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 免费在线视频一区| 色综合欧美在线| 国产日韩欧美一区二区三区综合| 一区二区三区国产豹纹内裤在线| 国产一区激情在线| 69p69国产精品| 中文字幕佐山爱一区二区免费| 韩国女主播一区二区三区| 欧美亚一区二区| 亚洲日本va在线观看| 国内成人精品2018免费看| 欧美日韩国产一级片| 亚洲色图欧洲色图| 粉嫩13p一区二区三区| 欧美va亚洲va香蕉在线| 亚洲成人av电影在线| 91麻豆国产精品久久| 欧美国产97人人爽人人喊| 久久精工是国产品牌吗| 7777精品伊人久久久大香线蕉的| 国产精品色哟哟| 狠狠v欧美v日韩v亚洲ⅴ| 日韩一卡二卡三卡国产欧美| 亚洲一区二区三区爽爽爽爽爽| 91视频.com| 国产精品欧美一区喷水| 久久电影网电视剧免费观看| 精品视频在线免费看| 亚洲精品视频免费观看| 色欲综合视频天天天| 国产精品国产三级国产专播品爱网 | 国产精品第13页| 国产精品自拍网站| 久久精品综合网| 久久不见久久见免费视频1| 91麻豆精品91久久久久久清纯| 亚洲自拍偷拍图区| 91九色02白丝porn| 亚洲欧美日韩中文播放| 色悠悠久久综合| 一区二区三区欧美日韩| 93久久精品日日躁夜夜躁欧美| 国产午夜三级一区二区三| 国产成人精品亚洲777人妖| 国产欧美视频一区二区| 国产精品亚洲а∨天堂免在线| 精品久久久久久久久久久久久久久 | 色综合久久中文字幕综合网| 亚洲精品第1页| 91黄色在线观看| 亚洲国产精品久久人人爱| 欧美日韩国产另类一区| 亚洲超碰97人人做人人爱| 在线综合亚洲欧美在线视频| 精品一区二区日韩| 国产午夜精品久久| 一本色道久久综合狠狠躁的推荐| 亚洲女子a中天字幕| 欧美日精品一区视频| 麻豆视频观看网址久久| 久久久国产精品午夜一区ai换脸| 高清久久久久久| 一区二区三区在线看| 日韩一级视频免费观看在线| 国产精品伊人色| 亚洲嫩草精品久久| 91麻豆精品国产91久久久使用方法 | 亚洲一区二区在线免费观看视频| 欧美高清激情brazzers| 韩国欧美国产1区| 中文字幕亚洲一区二区av在线| 欧洲在线/亚洲| 久久se这里有精品| 亚洲色图第一区| 日韩免费一区二区| 91香蕉视频mp4| 美女www一区二区| 亚洲女爱视频在线| 精品国产免费人成在线观看| 99精品视频在线观看| 三级在线观看一区二区 | 国产精品电影一区二区三区| 欧美日韩国产高清一区二区三区 | 亚洲一区视频在线| 久久综合精品国产一区二区三区| 色综合天天综合色综合av | 欧美一区二区女人| 播五月开心婷婷综合| 亚洲高清免费观看 | 日本欧美在线观看| 国产精品久久久久久久久久免费看 | 欧美精选午夜久久久乱码6080| 国产精品一区二区不卡| 亚洲国产成人av网| 国产精品麻豆欧美日韩ww| 欧美一区二区精品在线| 91免费版pro下载短视频| 久久精品国产亚洲高清剧情介绍| 18成人在线视频| 久久九九久久九九| 538在线一区二区精品国产| 99re成人在线| 国产传媒久久文化传媒| 免费成人在线播放| 亚洲一区在线免费观看|