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

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

?? csr.c

?? IEE1394 火線接口驅動 for linux
?? C
?? 第 1 頁 / 共 2 頁
字號:
        case CSR_SPLIT_TIMEOUT_HI:                host->csr.split_timeout_hi =                         be32_to_cpu(*(data++)) & 0x00000007;		calculate_expire(&host->csr);                out;        case CSR_SPLIT_TIMEOUT_LO:                host->csr.split_timeout_lo =                         be32_to_cpu(*(data++)) & 0xfff80000;		calculate_expire(&host->csr);                out;                /* address gap */                return RCODE_ADDRESS_ERROR;        case CSR_CYCLE_TIME:                /* should only be set by cycle start packet, automatically */                host->csr.cycle_time = be32_to_cpu(*data);                host->driver->devctl(host, SET_CYCLE_COUNTER,                                       be32_to_cpu(*(data++)));                out;        case CSR_BUS_TIME:                host->csr.bus_time = be32_to_cpu(*(data++)) & 0xffffff80;                out;                /* address gap */                return RCODE_ADDRESS_ERROR;        case CSR_BUSY_TIMEOUT:                /* not yet implemented */                return RCODE_ADDRESS_ERROR;        case CSR_BUS_MANAGER_ID:        case CSR_BANDWIDTH_AVAILABLE:        case CSR_CHANNELS_AVAILABLE_HI:        case CSR_CHANNELS_AVAILABLE_LO:                /* these are not writable, only lockable */                return RCODE_TYPE_ERROR;	case CSR_BROADCAST_CHANNEL:		/* only the valid bit can be written */		host->csr.broadcast_channel = (host->csr.broadcast_channel & ~0x40000000)                        | (be32_to_cpu(*data) & 0x40000000);		out;                /* address gap to end - fall through */        default:                return RCODE_ADDRESS_ERROR;        }        return RCODE_COMPLETE;}#undef outstatic int lock_regs(struct hpsb_host *host, int nodeid, quadlet_t *store,                     u64 addr, quadlet_t data, quadlet_t arg, int extcode, u16 fl){        int csraddr = addr - CSR_REGISTER_BASE;        unsigned long flags;        quadlet_t *regptr = NULL;        if (csraddr & 0x3)		return RCODE_TYPE_ERROR;        if (csraddr < CSR_BUS_MANAGER_ID || csraddr > CSR_CHANNELS_AVAILABLE_LO            || extcode != EXTCODE_COMPARE_SWAP)                goto unsupported_lockreq;        data = be32_to_cpu(data);        arg = be32_to_cpu(arg);	/* Is somebody releasing the broadcast_channel on us? */	if (csraddr == CSR_CHANNELS_AVAILABLE_HI && (data & 0x1)) {		/* Note: this is may not be the right way to handle		 * the problem, so we should look into the proper way		 * eventually. */		HPSB_WARN("Node [" NODE_BUS_FMT "] wants to release "			  "broadcast channel 31.  Ignoring.",			  NODE_BUS_ARGS(host, nodeid));		data &= ~0x1;	/* keep broadcast channel allocated */	}        if (host->driver->hw_csr_reg) {                quadlet_t old;                old = host->driver->                        hw_csr_reg(host, (csraddr - CSR_BUS_MANAGER_ID) >> 2,                                   data, arg);                *store = cpu_to_be32(old);                return RCODE_COMPLETE;        }        spin_lock_irqsave(&host->csr.lock, flags);        switch (csraddr) {        case CSR_BUS_MANAGER_ID:                regptr = &host->csr.bus_manager_id;		*store = cpu_to_be32(*regptr);		if (*regptr == arg)			*regptr = data;                break;        case CSR_BANDWIDTH_AVAILABLE:        {                quadlet_t bandwidth;                quadlet_t old;                quadlet_t new;                regptr = &host->csr.bandwidth_available;                old = *regptr;                /* bandwidth available algorithm adapted from IEEE 1394a-2000 spec */                if (arg > 0x1fff) {                        *store = cpu_to_be32(old);	/* change nothing */			break;                }                data &= 0x1fff;                if (arg >= data) {                        /* allocate bandwidth */                        bandwidth = arg - data;                        if (old >= bandwidth) {                                new = old - bandwidth;                                *store = cpu_to_be32(arg);                                *regptr = new;                        } else {                                *store = cpu_to_be32(old);                        }                } else {                        /* deallocate bandwidth */                        bandwidth = data - arg;                        if (old + bandwidth < 0x2000) {                                new = old + bandwidth;                                *store = cpu_to_be32(arg);                                *regptr = new;                        } else {                                *store = cpu_to_be32(old);                        }                }                break;        }        case CSR_CHANNELS_AVAILABLE_HI:        {                /* Lock algorithm for CHANNELS_AVAILABLE as recommended by 1394a-2000 */                quadlet_t affected_channels = arg ^ data;                regptr = &host->csr.channels_available_hi;                if ((arg & affected_channels) == (*regptr & affected_channels)) {                        *regptr ^= affected_channels;                        *store = cpu_to_be32(arg);                } else {                        *store = cpu_to_be32(*regptr);                }                break;        }        case CSR_CHANNELS_AVAILABLE_LO:        {                /* Lock algorithm for CHANNELS_AVAILABLE as recommended by 1394a-2000 */                quadlet_t affected_channels = arg ^ data;                regptr = &host->csr.channels_available_lo;                if ((arg & affected_channels) == (*regptr & affected_channels)) {                        *regptr ^= affected_channels;                        *store = cpu_to_be32(arg);                } else {                        *store = cpu_to_be32(*regptr);                }                break;        }        }        spin_unlock_irqrestore(&host->csr.lock, flags);        return RCODE_COMPLETE; unsupported_lockreq:        switch (csraddr) {        case CSR_STATE_CLEAR:        case CSR_STATE_SET:        case CSR_RESET_START:        case CSR_NODE_IDS:        case CSR_SPLIT_TIMEOUT_HI:        case CSR_SPLIT_TIMEOUT_LO:        case CSR_CYCLE_TIME:        case CSR_BUS_TIME:	case CSR_BROADCAST_CHANNEL:                return RCODE_TYPE_ERROR;        case CSR_BUSY_TIMEOUT:                /* not yet implemented - fall through */        default:                return RCODE_ADDRESS_ERROR;        }}static int lock64_regs(struct hpsb_host *host, int nodeid, octlet_t * store,		       u64 addr, octlet_t data, octlet_t arg, int extcode, u16 fl){	int csraddr = addr - CSR_REGISTER_BASE;	unsigned long flags;	data = be64_to_cpu(data);	arg = be64_to_cpu(arg);	if (csraddr & 0x3)		return RCODE_TYPE_ERROR;	if (csraddr != CSR_CHANNELS_AVAILABLE	    || extcode != EXTCODE_COMPARE_SWAP)		goto unsupported_lock64req;	/* Is somebody releasing the broadcast_channel on us? */	if (csraddr == CSR_CHANNELS_AVAILABLE_HI && (data & 0x100000000ULL)) {		/* Note: this is may not be the right way to handle		 * the problem, so we should look into the proper way                 * eventually. */		HPSB_WARN("Node [" NODE_BUS_FMT "] wants to release "			  "broadcast channel 31.  Ignoring.",			  NODE_BUS_ARGS(host, nodeid));		data &= ~0x100000000ULL;	/* keep broadcast channel allocated */	}	if (host->driver->hw_csr_reg) {		quadlet_t data_hi, data_lo;		quadlet_t arg_hi, arg_lo;		quadlet_t old_hi, old_lo;		data_hi = data >> 32;		data_lo = data & 0xFFFFFFFF;		arg_hi = arg >> 32;		arg_lo = arg & 0xFFFFFFFF;		old_hi = host->driver->hw_csr_reg(host, (csraddr - CSR_BUS_MANAGER_ID) >> 2,                                                  data_hi, arg_hi);		old_lo = host->driver->hw_csr_reg(host, ((csraddr + 4) - CSR_BUS_MANAGER_ID) >> 2,                                                  data_lo, arg_lo);		*store = cpu_to_be64(((octlet_t)old_hi << 32) | old_lo);	} else {		octlet_t old;		octlet_t affected_channels = arg ^ data;		spin_lock_irqsave(&host->csr.lock, flags);		old = ((octlet_t)host->csr.channels_available_hi << 32) | host->csr.channels_available_lo;		if ((arg & affected_channels) == (old & affected_channels)) {			host->csr.channels_available_hi ^= (affected_channels >> 32);			host->csr.channels_available_lo ^= (affected_channels & 0xffffffff);			*store = cpu_to_be64(arg);		} else {			*store = cpu_to_be64(old);		}		spin_unlock_irqrestore(&host->csr.lock, flags);	}	/* Is somebody erroneously releasing the broadcast_channel on us? */	if (host->csr.channels_available_hi & 0x1)		host->csr.channels_available_hi &= ~0x1;	return RCODE_COMPLETE; unsupported_lock64req:	switch (csraddr) {	case CSR_STATE_CLEAR:	case CSR_STATE_SET:	case CSR_RESET_START:	case CSR_NODE_IDS:	case CSR_SPLIT_TIMEOUT_HI:	case CSR_SPLIT_TIMEOUT_LO:	case CSR_CYCLE_TIME:	case CSR_BUS_TIME:	case CSR_BUS_MANAGER_ID:	case CSR_BROADCAST_CHANNEL:	case CSR_BUSY_TIMEOUT:	case CSR_BANDWIDTH_AVAILABLE:		return RCODE_TYPE_ERROR;	default:		return RCODE_ADDRESS_ERROR;	}}static int write_fcp(struct hpsb_host *host, int nodeid, int dest,		     quadlet_t *data, u64 addr, size_t length, u16 flags){        int csraddr = addr - CSR_REGISTER_BASE;        if (length > 512)                return RCODE_TYPE_ERROR;        switch (csraddr) {        case CSR_FCP_COMMAND:                highlevel_fcp_request(host, nodeid, 0, (u8 *)data, length);                break;        case CSR_FCP_RESPONSE:                highlevel_fcp_request(host, nodeid, 1, (u8 *)data, length);                break;        default:                return RCODE_TYPE_ERROR;        }        return RCODE_COMPLETE;}static struct hpsb_highlevel csr_highlevel = {	.name =		"standard registers",	.add_host =	add_host,        .host_reset =	host_reset,};static struct hpsb_address_ops map_ops = {        .read = read_maps,};static struct hpsb_address_ops fcp_ops = {        .write = write_fcp,};static struct hpsb_address_ops reg_ops = {        .read = read_regs,        .write = write_regs,        .lock = lock_regs,	.lock64 = lock64_regs,};void init_csr(void){	hpsb_register_highlevel(&csr_highlevel);        hpsb_register_addrspace(&csr_highlevel, &reg_ops, CSR_REGISTER_BASE,                                CSR_REGISTER_BASE + CSR_CONFIG_ROM);        hpsb_register_addrspace(&csr_highlevel, &map_ops,                                 CSR_REGISTER_BASE + CSR_CONFIG_ROM,                                CSR_REGISTER_BASE + CSR_CONFIG_ROM_END);        if (fcp) {		hpsb_register_addrspace(&csr_highlevel, &fcp_ops,                                CSR_REGISTER_BASE + CSR_FCP_COMMAND,                                CSR_REGISTER_BASE + CSR_FCP_END);	}        hpsb_register_addrspace(&csr_highlevel, &map_ops,                                CSR_REGISTER_BASE + CSR_TOPOLOGY_MAP,                                CSR_REGISTER_BASE + CSR_TOPOLOGY_MAP_END);        hpsb_register_addrspace(&csr_highlevel, &map_ops,                                CSR_REGISTER_BASE + CSR_SPEED_MAP,                                CSR_REGISTER_BASE + CSR_SPEED_MAP_END);}void cleanup_csr(void){        hpsb_unregister_highlevel(&csr_highlevel);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99视频一区二区| 国产日产欧美一区二区视频| 色天天综合久久久久综合片| www.亚洲国产| www.日本不卡| 99精品热视频| 久久美女高清视频| 69堂精品视频| 一本大道久久a久久综合| 99久久99久久精品免费看蜜桃| 国产精品 欧美精品| 国产精品99久久久| 视频一区中文字幕| 国产精品免费看片| 亚洲精品国产无套在线观| 亚洲精品国产成人久久av盗摄| 一区二区三区在线播| 亚洲国产日韩综合久久精品| 日本成人在线电影网| 韩国精品久久久| 色婷婷久久综合| 91精品免费在线| 国产女同互慰高潮91漫画| 亚洲色图视频网站| 蜜臀av性久久久久蜜臀aⅴ流畅 | 91麻豆国产自产在线观看| 91美女视频网站| 欧美成va人片在线观看| 国产精品国产a| 奇米影视一区二区三区小说| 成人福利在线看| 欧美日韩一区二区在线视频| 久久精品亚洲精品国产欧美| 综合激情网...| 精久久久久久久久久久| 99精品桃花视频在线观看| 欧美久久免费观看| 国产精品免费视频观看| 久久99精品久久久久| 在线精品视频免费观看| 国产日韩v精品一区二区| 午夜电影网一区| 成人国产精品免费观看| 亚洲精品一线二线三线无人区| 国产精品福利在线播放| 麻豆精品久久久| 欧美日韩精品欧美日韩精品| 中文欧美字幕免费| 久久99国内精品| 在线观看91av| 一区二区三区资源| 丁香六月综合激情| 26uuu国产一区二区三区| 天天操天天色综合| 欧美午夜不卡在线观看免费| 日本一区二区三区免费乱视频| 老司机午夜精品99久久| 91麻豆精品国产91久久久资源速度 | 国产成人精品免费看| 欧美一级免费观看| 亚洲最新视频在线播放| 91在线观看视频| 欧美韩国一区二区| 国产一区不卡在线| 精品福利在线导航| 激情深爱一区二区| 日韩欧美精品在线| 蜜臀国产一区二区三区在线播放| 91精品福利视频| **性色生活片久久毛片| 成人高清免费观看| 国产精品夫妻自拍| 99精品国产热久久91蜜凸| 国产精品久久久久一区| 国产91精品一区二区麻豆网站| 精品久久国产97色综合| 韩国三级在线一区| 久久久国产一区二区三区四区小说| 久久精品理论片| 久久在线观看免费| 国产成人av影院| 中文文精品字幕一区二区| 国产91精品一区二区麻豆网站| 国产日韩欧美高清在线| 成人黄色小视频| 亚洲色图第一区| 日本韩国一区二区三区| 亚洲国产精品久久人人爱蜜臀 | 精品国产91乱码一区二区三区| 麻豆91在线观看| 日本一区二区三区免费乱视频| 白白色 亚洲乱淫| 亚洲一区二区美女| 欧美一区二区三区四区五区| 激情图片小说一区| 国产日韩高清在线| 91久久精品午夜一区二区| 亚洲一区二区在线视频| 欧美一级二级三级蜜桃| 懂色av一区二区三区蜜臀| 亚洲精品视频一区| 7777精品伊人久久久大香线蕉最新版 | 国产区在线观看成人精品| 成人黄色免费短视频| 婷婷久久综合九色综合绿巨人 | 91精品国产欧美日韩| 国产成人亚洲综合a∨婷婷图片| 国产精品传媒视频| 欧美男生操女生| 成人高清视频免费观看| 午夜电影网亚洲视频| 中文幕一区二区三区久久蜜桃| 欧美日韩在线播| 成人免费视频一区| 男女激情视频一区| 亚洲另类在线视频| 精品日韩在线一区| 欧美午夜精品久久久久久超碰 | 五月天中文字幕一区二区| 久久久综合激的五月天| 日本韩国一区二区| 国产91综合网| 精品制服美女久久| 亚洲国产综合91精品麻豆| 欧美激情中文字幕一区二区| 欧美美女激情18p| av亚洲精华国产精华| 国产精品综合一区二区三区| 三级一区在线视频先锋| 一区二区在线看| 综合久久久久综合| 国产欧美日韩综合精品一区二区| 欧美精品久久天天躁| 一本大道久久a久久综合| 国产精品一色哟哟哟| 久久精品国产免费看久久精品| 亚洲国产日韩精品| 亚洲精品国产视频| 亚洲品质自拍视频| 国产精品国产三级国产普通话99| 久久久久久亚洲综合| 日韩三级免费观看| 337p亚洲精品色噜噜噜| 欧美精品xxxxbbbb| 欧美怡红院视频| 在线一区二区三区四区五区 | 久久蜜桃av一区二区天堂 | 亚洲国产经典视频| 国产亚洲精久久久久久| 欧美不卡一二三| 精品国产一区二区三区久久影院| 91麻豆精品国产91久久久使用方法| 欧美日韩一区二区欧美激情| 欧美性三三影院| 91精品婷婷国产综合久久性色 | 亚洲一区视频在线| 亚洲成av人片一区二区| 亚洲高清免费视频| 蜜芽一区二区三区| 久久99在线观看| 国产精品一区二区三区网站| 国产精品一卡二卡| 欧美怡红院视频| 91精品国产色综合久久ai换脸| 欧美人与z0zoxxxx视频| 欧美成人video| 欧美国产成人精品| 亚洲视频免费在线观看| 亚洲一区二区影院| 久久精品国产**网站演员| 国产伦精品一区二区三区免费 | 91美女在线观看| 7777精品伊人久久久大香线蕉超级流畅 | 成人一区二区三区| 99国产精品国产精品久久| 91福利国产精品| 欧美videos中文字幕| 国产亲近乱来精品视频| 亚洲精品视频在线看| 免费看日韩a级影片| 国产一区二区三区在线观看精品 | 久久色.com| 亚洲品质自拍视频网站| 日本vs亚洲vs韩国一区三区二区 | 色综合久久久久综合| 8x福利精品第一导航| 欧美经典三级视频一区二区三区| 亚洲乱码日产精品bd| 老司机午夜精品| 99国产精品久久久久久久久久| 在线播放欧美女士性生活| 久久先锋影音av鲁色资源网| 亚洲精品成a人| 国产美女视频一区| 欧美偷拍一区二区| 国产欧美日韩不卡免费| 免费高清在线一区| 色成人在线视频| 国产日产精品一区| 日本不卡中文字幕|