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

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

?? csr.c

?? Linux Kernel 2.6.9 for OMAP1710
?? C
?? 第 1 頁 / 共 2 頁
字號:
                *(buf++) = cpu_to_be32(ret);                out;        case CSR_CHANNELS_AVAILABLE_HI:                if (host->driver->hw_csr_reg)                        ret = host->driver->hw_csr_reg(host, 2, 0, 0);                else                        ret = host->csr.channels_available_hi;                *(buf++) = cpu_to_be32(ret);                out;        case CSR_CHANNELS_AVAILABLE_LO:                if (host->driver->hw_csr_reg)                        ret = host->driver->hw_csr_reg(host, 3, 0, 0);                else                        ret = host->csr.channels_available_lo;                *(buf++) = cpu_to_be32(ret);                out;	case CSR_BROADCAST_CHANNEL:		*(buf++) = cpu_to_be32(host->csr.broadcast_channel);		out;                /* address gap to end - fall through to default */        default:                return RCODE_ADDRESS_ERROR;        }        return RCODE_COMPLETE;}static int write_regs(struct hpsb_host *host, int nodeid, int destid,		      quadlet_t *data, u64 addr, size_t length, u16 flags){        int csraddr = addr - CSR_REGISTER_BASE;        if ((csraddr | length) & 0x3)                return RCODE_TYPE_ERROR;        length /= 4;        switch (csraddr) {        case CSR_STATE_CLEAR:                /* FIXME FIXME FIXME */                printk("doh, someone wants to mess with state clear\n");                out;        case CSR_STATE_SET:                printk("doh, someone wants to mess with state set\n");                out;        case CSR_NODE_IDS:                host->csr.node_ids &= NODE_MASK << 16;                host->csr.node_ids |= be32_to_cpu(*(data++)) & (BUS_MASK << 16);                host->node_id = host->csr.node_ids >> 16;                host->driver->devctl(host, SET_BUS_ID, host->node_id >> 6);                out;        case CSR_RESET_START:                /* FIXME - perform command reset */                out;                /* address gap */                return RCODE_ADDRESS_ERROR;        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 int read_config_rom(struct hpsb_host *host, int nodeid, quadlet_t *buffer,			   u64 addr, size_t length, u16 fl){	u32 offset = addr - CSR1212_REGISTER_SPACE_BASE;	if (csr1212_read(host->csr.rom, offset, buffer, length) == CSR1212_SUCCESS)		return RCODE_COMPLETE;	else		return RCODE_ADDRESS_ERROR;}static u64 allocate_addr_range(u64 size, u32 alignment, void *__host){ 	struct hpsb_host *host = (struct hpsb_host*)__host;	return hpsb_allocate_and_register_addrspace(&csr_highlevel,						    host,						    &config_rom_ops,						    size, alignment,						    CSR1212_UNITS_SPACE_BASE,						    CSR1212_UNITS_SPACE_END);}static void release_addr_range(u64 addr, void *__host){ 	struct hpsb_host *host = (struct hpsb_host*)__host;	hpsb_unregister_addrspace(&csr_highlevel, host, addr);}int init_csr(void){	node_cap = csr1212_new_immediate(CSR1212_KV_ID_NODE_CAPABILITIES, 0x0083c0);	if (!node_cap) {		HPSB_ERR("Failed to allocate memory for Node Capabilties ConfigROM entry!");		return -ENOMEM;	}	hpsb_register_highlevel(&csr_highlevel);	return 0;}void cleanup_csr(void){	if (node_cap)		csr1212_release_keyval(node_cap);        hpsb_unregister_highlevel(&csr_highlevel);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一二精品视频| 欧美性生活大片视频| 欧美亚男人的天堂| 精品久久人人做人人爽| 亚洲男同性恋视频| 成人av午夜电影| 国产婷婷精品av在线| 一区二区三区中文在线| 国产91色综合久久免费分享| 337p亚洲精品色噜噜噜| 亚洲欧美电影院| 青青草国产精品97视觉盛宴| 91福利在线观看| 日韩毛片视频在线看| 国产在线视视频有精品| 欧美福利视频导航| 亚洲成av人片在线观看| 欧美日韩激情在线| 秋霞影院一区二区| www国产亚洲精品久久麻豆| 久久精品免视看| 精品国产在天天线2019| 夜夜亚洲天天久久| 欧美日本一区二区在线观看| 天天综合色天天| 91精品国产综合久久精品麻豆| 亚洲一区二区成人在线观看| 欧美日韩国产精品自在自线| 麻豆91在线观看| 欧美午夜不卡在线观看免费| 国产精品久久久久久久久久久免费看| 国产精品一级二级三级| 亚洲精品日韩一| 欧美大片在线观看一区| 国内精品伊人久久久久av一坑 | 5858s免费视频成人| 美女网站一区二区| 国产色一区二区| 欧美日韩国产色站一区二区三区| 国产伦精品一区二区三区在线观看| 中文字幕一区免费在线观看| 日韩午夜中文字幕| 欧美在线免费播放| 粉嫩13p一区二区三区| 日韩高清在线电影| 亚洲国产成人91porn| 最新热久久免费视频| 久久久久久久久久久99999| 91精品国产品国语在线不卡| 色综合久久综合网| 成人av电影在线观看| 久久www免费人成看片高清| 亚洲男人天堂av| √…a在线天堂一区| 中文字幕一区二区三区精华液| 久久先锋影音av鲁色资源网| 欧美猛男gaygay网站| 欧美伊人精品成人久久综合97| 一本一本久久a久久精品综合麻豆| 国产又粗又猛又爽又黄91精品| 日韩国产欧美在线播放| 亚洲超碰97人人做人人爱| 亚洲高清不卡在线观看| 日韩在线一二三区| 精品一区二区三区免费观看| 日韩成人午夜精品| 国产在线国偷精品免费看| 国产精品一级片在线观看| 97se亚洲国产综合自在线观| 波多野结衣中文一区| 色婷婷久久久综合中文字幕| 欧美电影一区二区三区| 久久久亚洲综合| 国产精品久久久久久亚洲伦| 亚洲一区二区三区国产| 蜜桃视频免费观看一区| 国产69精品久久99不卡| 欧美网站一区二区| 国产精品热久久久久夜色精品三区| 亚洲欧洲国产日韩| 免费观看一级欧美片| 99久久99精品久久久久久| 欧美日韩在线电影| 欧美激情一区二区| 蜜臀久久久99精品久久久久久| 成人aa视频在线观看| 在线不卡的av| 亚洲最大色网站| 成人免费av资源| 国产亚洲精品中文字幕| 蜜桃一区二区三区四区| 欧美色图激情小说| 国产精品国产三级国产aⅴ入口| 午夜精品久久久久影视| 在线观看视频一区| 亚洲最大成人网4388xx| 久久综合九色综合97_久久久| 精品国内片67194| 午夜伦理一区二区| 欧美三级韩国三级日本一级| 国产精品美女久久久久aⅴ| 久久成人综合网| 日韩欧美亚洲国产另类| 麻豆一区二区三区| 日韩一区二区电影| 日韩av中文字幕一区二区三区| 欧美人成免费网站| 蜜桃av噜噜一区| 精品国产91乱码一区二区三区| 日本欧美久久久久免费播放网| 7777精品伊人久久久大香线蕉超级流畅| 亚洲最大的成人av| 日韩写真欧美这视频| 久草精品在线观看| 中文字幕制服丝袜一区二区三区| 成人性色生活片| 亚洲一区视频在线观看视频| 91久久精品一区二区二区| 日韩av不卡一区二区| 欧美电影免费观看高清完整版在| 国模一区二区三区白浆| 国产午夜精品一区二区三区视频| 国产精品中文字幕日韩精品| 国产精品乱子久久久久| 欧美挠脚心视频网站| 国产成人亚洲综合a∨婷婷 | 91免费看片在线观看| 亚洲最大的成人av| 精品第一国产综合精品aⅴ| eeuss影院一区二区三区| 亚洲一区二区欧美激情| 国产亚洲成aⅴ人片在线观看| 日本久久一区二区三区| 激情欧美一区二区三区在线观看| 亚洲男同性恋视频| 亚洲精品一区二区三区精华液| 99久久夜色精品国产网站| 美国av一区二区| 亚洲综合自拍偷拍| 亚洲欧洲日产国码二区| 久久综合中文字幕| 91精品免费在线| 欧美亚洲综合网| 91免费观看视频| 国产精品亚洲一区二区三区在线 | 亚洲人精品午夜| 中文字幕一区二区在线观看| 26uuu国产在线精品一区二区| 欧美日韩精品一区二区三区蜜桃| 91蝌蚪porny九色| 色综合久久99| 欧美午夜一区二区三区| 99久久国产免费看| 成人精品在线视频观看| 成人app在线| 一本久久a久久精品亚洲| 欧美在线观看一二区| 欧美性色综合网| 日韩亚洲欧美在线观看| 精品区一区二区| 亚洲国产精品国自产拍av| 国产精品久久久久久亚洲伦 | 精久久久久久久久久久| 国内外成人在线视频| 懂色一区二区三区免费观看| 成人综合婷婷国产精品久久免费| 国产精品88888| caoporn国产精品| 欧美日韩视频在线第一区| 欧美日韩一区二区三区在线| 日韩免费高清视频| 亚洲欧美日韩电影| 免费视频一区二区| 成人精品电影在线观看| 欧美色中文字幕| 中文字幕的久久| 午夜一区二区三区在线观看| 久久91精品国产91久久小草| www.成人在线| 精品久久久久久最新网址| 亚洲日本一区二区| 国产一区二区三区视频在线播放| 一区二区三区中文在线观看| 亚洲激情一二三区| 国产麻豆精品在线| 欧美精品在欧美一区二区少妇| 国产婷婷色一区二区三区| 国产.欧美.日韩| 欧美日韩成人在线一区| 亚洲精品国产精华液| 高清成人在线观看| 欧美不卡在线视频| 日本成人在线视频网站| 91女厕偷拍女厕偷拍高清| 国产色产综合产在线视频| 在线观看国产一区二区| 亚洲日本在线观看| 91小视频免费观看| 亚洲欧美另类小说视频| www.av亚洲|