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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ioc3.c

?? linux 內核源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * SGI IOC3 master driver and IRQ demuxer * * Copyright (c) 2005 Stanislaw Skowronek <skylark@linux-mips.org> * Heavily based on similar work by: *   Brent Casavant <bcasavan@sgi.com> - IOC4 master driver *   Pat Gefre <pfg@sgi.com> - IOC3 serial port IRQ demuxer */#include <linux/errno.h>#include <linux/module.h>#include <linux/pci.h>#include <linux/dma-mapping.h>#include <linux/interrupt.h>#include <linux/spinlock.h>#include <linux/delay.h>#include <linux/ioc3.h>#include <linux/rwsem.h>#define IOC3_PCI_SIZE 0x100000static LIST_HEAD(ioc3_devices);static int ioc3_counter;static DECLARE_RWSEM(ioc3_devices_rwsem);static struct ioc3_submodule *ioc3_submodules[IOC3_MAX_SUBMODULES];static struct ioc3_submodule *ioc3_ethernet;static DEFINE_RWLOCK(ioc3_submodules_lock);/* NIC probing code */#define GPCR_MLAN_EN    0x00200000      /* enable MCR to pin 8 */static inline unsigned mcr_pack(unsigned pulse, unsigned sample){	return (pulse << 10) | (sample << 2);}static int nic_wait(struct ioc3_driver_data *idd){	unsigned mcr;        do {                mcr = readl(&idd->vma->mcr);        } while (!(mcr & 2));        return mcr & 1;}static int nic_reset(struct ioc3_driver_data *idd){        int presence;	unsigned long flags;	local_irq_save(flags);	writel(mcr_pack(500, 65), &idd->vma->mcr);	presence = nic_wait(idd);	local_irq_restore(flags);	udelay(500);        return presence;}static int nic_read_bit(struct ioc3_driver_data *idd){	int result;	unsigned long flags;	local_irq_save(flags);	writel(mcr_pack(6, 13), &idd->vma->mcr);	result = nic_wait(idd);	local_irq_restore(flags);	udelay(500);	return result;}static void nic_write_bit(struct ioc3_driver_data *idd, int bit){	if (bit)		writel(mcr_pack(6, 110), &idd->vma->mcr);	else		writel(mcr_pack(80, 30), &idd->vma->mcr);	nic_wait(idd);}static unsigned nic_read_byte(struct ioc3_driver_data *idd){	unsigned result = 0;	int i;	for (i = 0; i < 8; i++)		result = (result >> 1) | (nic_read_bit(idd) << 7);	return result;}static void nic_write_byte(struct ioc3_driver_data *idd, int byte){	int i, bit;	for (i = 8; i; i--) {		bit = byte & 1;		byte >>= 1;		nic_write_bit(idd, bit);	}}static unsigned longnic_find(struct ioc3_driver_data *idd, int *last, unsigned long addr){	int a, b, index, disc;	nic_reset(idd);	/* Search ROM.  */	nic_write_byte(idd, 0xF0);	/* Algorithm from ``Book of iButton Standards''.  */	for (index = 0, disc = 0; index < 64; index++) {		a = nic_read_bit(idd);		b = nic_read_bit(idd);		if (a && b) {			printk(KERN_WARNING "IOC3 NIC search failed.\n");			*last = 0;			return 0;		}		if (!a && !b) {			if (index == *last) {				addr |= 1UL << index;			} else if (index > *last) {				addr &= ~(1UL << index);				disc = index;			} else if ((addr & (1UL << index)) == 0)				disc = index;			nic_write_bit(idd, (addr>>index)&1);			continue;		} else {			if (a)				addr |= 1UL << index;			else				addr &= ~(1UL << index);			nic_write_bit(idd, a);			continue;		}	}	*last = disc;	return addr;}static void nic_addr(struct ioc3_driver_data *idd, unsigned long addr){	int index;	nic_reset(idd);	nic_write_byte(idd, 0xF0);	for (index = 0; index < 64; index++) {		nic_read_bit(idd);		nic_read_bit(idd);		nic_write_bit(idd, (addr>>index)&1);	}}static void crc16_byte(unsigned int *crc, unsigned char db){	int i;	for(i=0;i<8;i++) {		*crc <<= 1;		if((db^(*crc>>16)) & 1)			*crc ^= 0x8005;		db >>= 1;	}	*crc &= 0xFFFF;}static unsigned int crc16_area(unsigned char *dbs, int size, unsigned int crc){	while(size--)		crc16_byte(&crc, *(dbs++));	return crc;}static void crc8_byte(unsigned int *crc, unsigned char db){	int i,f;	for(i=0;i<8;i++) {		f = (*crc ^ db) & 1;		*crc >>= 1;		db >>= 1;		if(f)			*crc ^= 0x8c;	}	*crc &= 0xff;}static unsigned int crc8_addr(unsigned long addr){	int i;	unsigned int crc = 0x00;	for(i=0;i<8;i++)		crc8_byte(&crc, addr>>(i<<3));	return crc;}static voidread_redir_page(struct ioc3_driver_data *idd, unsigned long addr, int page,			unsigned char *redir, unsigned char *data){	int loops = 16, i;	while(redir[page] != 0xFF) {		page = redir[page]^0xFF;		loops--;		if(loops<0) {			printk(KERN_ERR "IOC3: NIC circular redirection\n");			return;		}	}	loops = 3;	while(loops>0) {		nic_addr(idd, addr);		nic_write_byte(idd, 0xF0);		nic_write_byte(idd, (page << 5) & 0xE0);		nic_write_byte(idd, (page >> 3) & 0x1F);		for(i=0;i<0x20;i++)			data[i] = nic_read_byte(idd);		if(crc16_area(data, 0x20, 0x0000) == 0x800d)			return;		loops--;	}	printk(KERN_ERR "IOC3: CRC error in data page\n");	for(i=0;i<0x20;i++)		data[i] = 0x00;}static voidread_redir_map(struct ioc3_driver_data *idd, unsigned long addr,					 unsigned char *redir){	int i,j,loops = 3,crc_ok;	unsigned int crc;	while(loops>0) {		crc_ok = 1;		nic_addr(idd, addr);		nic_write_byte(idd, 0xAA);		nic_write_byte(idd, 0x00);		nic_write_byte(idd, 0x01);		for(i=0;i<64;i+=8) {			for(j=0;j<8;j++)				redir[i+j] = nic_read_byte(idd);			crc = crc16_area(redir+i, 8, (i==0)?0x8707:0x0000);			crc16_byte(&crc, nic_read_byte(idd));			crc16_byte(&crc, nic_read_byte(idd));			if(crc != 0x800d)				crc_ok = 0;		}		if(crc_ok)			return;		loops--;	}	printk(KERN_ERR "IOC3: CRC error in redirection page\n");	for(i=0;i<64;i++)		redir[i] = 0xFF;}static void read_nic(struct ioc3_driver_data *idd, unsigned long addr){	unsigned char redir[64];	unsigned char data[64],part[32];	int i,j;	/* read redirections */	read_redir_map(idd, addr, redir);	/* read data pages */	read_redir_page(idd, addr, 0, redir, data);	read_redir_page(idd, addr, 1, redir, data+32);	/* assemble the part # */	j=0;	for(i=0;i<19;i++)		if(data[i+11] != ' ')			part[j++] = data[i+11];	for(i=0;i<6;i++)		if(data[i+32] != ' ')			part[j++] = data[i+32];	part[j] = 0;	/* skip Octane power supplies */	if(!strncmp(part, "060-0035-", 9))		return;	if(!strncmp(part, "060-0038-", 9))		return;	strcpy(idd->nic_part, part);	/* assemble the serial # */	j=0;	for(i=0;i<10;i++)		if(data[i+1] != ' ')			idd->nic_serial[j++] = data[i+1];	idd->nic_serial[j] = 0;}static void read_mac(struct ioc3_driver_data *idd, unsigned long addr){	int i, loops = 3;	unsigned char data[13];	while(loops>0) {		nic_addr(idd, addr);		nic_write_byte(idd, 0xF0);		nic_write_byte(idd, 0x00);		nic_write_byte(idd, 0x00);		nic_read_byte(idd);		for(i=0;i<13;i++)			data[i] = nic_read_byte(idd);		if(crc16_area(data, 13, 0x0000) == 0x800d) {			for(i=10;i>4;i--)				idd->nic_mac[10-i] = data[i];			return;		}		loops--;	}	printk(KERN_ERR "IOC3: CRC error in MAC address\n");	for(i=0;i<6;i++)		idd->nic_mac[i] = 0x00;}static void probe_nic(struct ioc3_driver_data *idd){        int save = 0, loops = 3;        unsigned long first, addr;        writel(GPCR_MLAN_EN, &idd->vma->gpcr_s);        while(loops>0) {                idd->nic_part[0] = 0;                idd->nic_serial[0] = 0;                addr = first = nic_find(idd, &save, 0);                if(!first)                        return;                while(1) {                        if(crc8_addr(addr))                                break;                        else {                                switch(addr & 0xFF) {                                case 0x0B:                                        read_nic(idd, addr);                                        break;                                case 0x09:                                case 0x89:                                case 0x91:                                        read_mac(idd, addr);                                        break;                                }                        }                        addr = nic_find(idd, &save, addr);                        if(addr == first)                                return;                }                loops--;        }        printk(KERN_ERR "IOC3: CRC error in NIC address\n");}/* Interrupts */static void write_ireg(struct ioc3_driver_data *idd, uint32_t val, int which){	unsigned long flags;	spin_lock_irqsave(&idd->ir_lock, flags);	switch (which) {	case IOC3_W_IES:		writel(val, &idd->vma->sio_ies);		break;	case IOC3_W_IEC:		writel(val, &idd->vma->sio_iec);		break;	}	spin_unlock_irqrestore(&idd->ir_lock, flags);}static inline uint32_t get_pending_intrs(struct ioc3_driver_data *idd){	unsigned long flag;	uint32_t intrs = 0;	spin_lock_irqsave(&idd->ir_lock, flag);	intrs = readl(&idd->vma->sio_ir);	intrs &= readl(&idd->vma->sio_ies);	spin_unlock_irqrestore(&idd->ir_lock, flag);	return intrs;}static irqreturn_t ioc3_intr_io(int irq, void *arg){	unsigned long flags;	struct ioc3_driver_data *idd = arg;	int handled = 1, id;	unsigned int pending;	read_lock_irqsave(&ioc3_submodules_lock, flags);	if(idd->dual_irq && readb(&idd->vma->eisr)) {		/* send Ethernet IRQ to the driver */		if(ioc3_ethernet && idd->active[ioc3_ethernet->id] &&						ioc3_ethernet->intr) {			handled = handled && !ioc3_ethernet->intr(ioc3_ethernet,							idd, 0);		}	}	pending = get_pending_intrs(idd);	/* look at the IO IRQs */	for(id=0;id<IOC3_MAX_SUBMODULES;id++) {		if(idd->active[id] && ioc3_submodules[id]				&& (pending & ioc3_submodules[id]->irq_mask)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合偷拍欧美一区色| 日韩理论片在线| 精品久久久久久久久久久久久久久久久| 粉嫩一区二区三区在线看| 成人午夜激情在线| 99精品一区二区| 欧美日韩亚洲不卡| 91精品国产综合久久精品app| 欧美自拍丝袜亚洲| 欧美日韩国产综合一区二区| 制服.丝袜.亚洲.另类.中文 | 欧美日韩亚洲高清一区二区| 欧美日韩国产高清一区| 91精品国产综合久久婷婷香蕉| 日韩欧美在线影院| 中文字幕高清一区| 亚洲精品视频一区二区| 美脚の诱脚舐め脚责91| 国产成人高清在线| 欧美一区二区视频免费观看| 精品88久久久久88久久久| 1024亚洲合集| 九九久久精品视频| 成人v精品蜜桃久久一区| 69成人精品免费视频| 国产精品网友自拍| 免费成人av在线播放| 91丨九色porny丨蝌蚪| 欧美哺乳videos| 亚洲国产乱码最新视频| av一区二区不卡| 精品免费日韩av| 亚洲欧美aⅴ...| 中文字幕日本不卡| 亚洲综合视频在线| aa级大片欧美| 亚洲婷婷国产精品电影人久久| 日韩电影免费在线看| 91免费视频网址| 亚洲欧洲av在线| 99久久精品国产精品久久| 欧美电影免费观看高清完整版在线| 国产日产欧产精品推荐色| 国产福利精品一区| 欧美精品一区二区三区四区| 美腿丝袜亚洲三区| 日韩精品一区二| 国产99一区视频免费| 中文字幕精品三区| 高清av一区二区| 亚洲人成网站精品片在线观看 | 欧美日韩精品一区视频| 亚洲v中文字幕| 精品日韩欧美在线| 成人三级在线视频| 一区av在线播放| 日韩欧美中文字幕精品| 成人在线视频首页| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲女人的天堂| 欧美三级蜜桃2在线观看| 蜜桃一区二区三区在线| 国产午夜亚洲精品理论片色戒| av电影天堂一区二区在线| 国产毛片一区二区| 国产精品国产三级国产aⅴ中文 | 久久久久国产精品免费免费搜索| 成熟亚洲日本毛茸茸凸凹| 亚洲一区二区三区中文字幕在线| 日韩欧美中文字幕一区| 99精品桃花视频在线观看| 麻豆视频一区二区| 亚洲精品视频在线观看免费| 精品国产一区二区三区四区四| 99精品偷自拍| 成人爱爱电影网址| 国模一区二区三区白浆| 亚洲成人av电影在线| 亚洲欧洲国产专区| 国产精品视频一二三| 日韩欧美一区二区免费| 欧美群妇大交群的观看方式| 91视频观看视频| 99精品视频免费在线观看| 久久不见久久见中文字幕免费| 亚洲精品va在线观看| 国产精品美女久久久久久久久| 日韩午夜小视频| 手机精品视频在线观看| 久久男人中文字幕资源站| 欧美不卡一区二区三区四区| 欧美一级日韩一级| 欧美一区二区观看视频| 欧美一区二区啪啪| 日韩欧美激情一区| 26uuu国产日韩综合| 精品动漫一区二区三区在线观看| 欧美一区二区国产| 欧美精品一区二| 国产人成一区二区三区影院| 欧美激情一区在线观看| 亚洲人成影院在线观看| 性做久久久久久| 精品综合免费视频观看| 成人福利在线看| 欧美男女性生活在线直播观看| 欧美一级久久久| 中文字幕一区三区| 视频一区在线播放| 国产精品18久久久久久久久久久久| 成人高清在线视频| 91精品国产色综合久久ai换脸| xfplay精品久久| 一区二区三区在线视频免费| 麻豆国产精品视频| 欧美亚洲动漫制服丝袜| 国产精品夫妻自拍| 另类的小说在线视频另类成人小视频在线| 国产剧情一区二区三区| 欧美日韩中文字幕一区二区| 国产精品国产精品国产专区不片| 一级精品视频在线观看宜春院| 亚洲乱码一区二区三区在线观看| 亚洲自拍欧美精品| 国产1区2区3区精品美女| 日本精品一级二级| 国产精品久线观看视频| 国内精品嫩模私拍在线| 欧美亚洲一区三区| 欧美日韩在线亚洲一区蜜芽| 国产亚洲一区二区三区| 手机精品视频在线观看| 91麻豆swag| 中文字幕亚洲电影| 国内精品国产成人国产三级粉色| 在线中文字幕一区二区| 中文字幕日韩精品一区| 丝袜美腿亚洲综合| 国产成人免费视频一区| 亚洲精品一区二区三区在线观看| 夜夜嗨av一区二区三区四季av | 国产精品免费视频观看| 国产乱人伦偷精品视频免下载| 日韩视频不卡中文| 日日夜夜精品视频免费| 69久久夜色精品国产69蝌蚪网| 尤物视频一区二区| 精品视频1区2区| 久草这里只有精品视频| 2022国产精品视频| 国产精品系列在线播放| 中国色在线观看另类| 成人精品国产福利| 亚洲一区二区美女| 亚洲精品一区二区三区福利| 国产尤物一区二区在线| 国产精品私人自拍| 成人深夜福利app| 91精彩视频在线| 亚洲精品免费在线播放| 日韩午夜精品视频| 亚洲第一会所有码转帖| 3d动漫精品啪啪1区2区免费| 久久99精品久久久久久国产越南| 久久久国际精品| 在线一区二区视频| 国产一区在线不卡| 亚洲精品一卡二卡| 欧美一区2区视频在线观看| 美女在线观看视频一区二区| 国产精品天干天干在线综合| 欧美一区二区三区免费视频| 国产精品一区二区视频| 婷婷综合另类小说色区| 国产精品毛片大码女人 | 久久精品亚洲麻豆av一区二区 | 色综合久久中文综合久久牛| 亚洲精品国久久99热| 中文av一区二区| 国产调教视频一区| 久久日韩精品一区二区五区| 欧美理论片在线| 在线观看91视频| 91美女精品福利| 色婷婷av一区二区三区软件| 国产福利一区二区三区视频| 精品系列免费在线观看| 蜜臀av性久久久久av蜜臀妖精 | 国产精品理论在线观看| 国产精品电影一区二区| 中文字幕成人av| 日韩亚洲欧美成人一区| 欧美日韩综合在线| 91精品综合久久久久久| 日韩一区二区在线看片| 欧美大片免费久久精品三p| 欧美mv日韩mv国产| 日本一区二区三区高清不卡| 亚洲欧美韩国综合色| 性做久久久久久久免费看|