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

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

?? csr.c

?? linux 內核源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
                        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一区二区三区免费野_久草精品视频
www国产精品av| 久久久不卡影院| 中文无字幕一区二区三区 | 色拍拍在线精品视频8848| 精品欧美一区二区三区精品久久| 亚洲乱码国产乱码精品精98午夜| 狠狠狠色丁香婷婷综合久久五月| 精品视频色一区| 中文字幕一区免费在线观看| 久久成人久久爱| 91精品福利在线一区二区三区| 樱花草国产18久久久久| 国产99久久精品| 精品国产1区二区| 免费观看久久久4p| 欧美年轻男男videosbes| 亚洲色图一区二区三区| 成人免费视频app| 精品国产网站在线观看| 91丝袜美腿高跟国产极品老师 | 欧美最猛性xxxxx直播| 国产喂奶挤奶一区二区三区| 久久成人综合网| 欧美一激情一区二区三区| 一卡二卡欧美日韩| 91麻豆国产自产在线观看| 国产喷白浆一区二区三区| 激情都市一区二区| 欧美刺激午夜性久久久久久久| 视频在线观看一区| 欧美三级电影网站| 亚洲成人免费观看| 欧美日韩一区在线观看| 亚洲成人免费在线观看| 欧美午夜一区二区三区免费大片| 亚洲男女一区二区三区| 91日韩精品一区| 中文字幕一区二区在线播放| 成人av动漫网站| ...中文天堂在线一区| aa级大片欧美| 亚洲乱码国产乱码精品精的特点| 91视频一区二区三区| 亚洲欧洲精品一区二区三区| 99久久久久免费精品国产| 国产精品美女久久久久久2018| 成人在线视频首页| 综合精品久久久| 91色综合久久久久婷婷| 亚洲最大成人综合| 欧美日韩日日夜夜| 日本不卡123| 久久影院电视剧免费观看| 高清不卡一二三区| 亚洲男人的天堂一区二区| 在线观看精品一区| 午夜激情综合网| 精品久久久久久久一区二区蜜臀| 国产精品亚洲一区二区三区在线 | 国产精品亚洲综合一区在线观看| 在线观看亚洲精品| 亚洲高清三级视频| 亚洲三级久久久| 国产精品剧情在线亚洲| 日本一区中文字幕 | 日韩黄色小视频| 欧美一级国产精品| 国产伦精品一区二区三区在线观看| 久久久久国产精品麻豆| 成人av在线网站| 亚洲第一电影网| 欧美成人三级电影在线| 丁香天五香天堂综合| 亚洲精品乱码久久久久久黑人| 在线91免费看| 国产伦精品一区二区三区免费迷 | 日日摸夜夜添夜夜添国产精品| 91精品福利在线一区二区三区| 国产一区二区三区蝌蚪| 综合中文字幕亚洲| 欧美丰满一区二区免费视频| 国产裸体歌舞团一区二区| 亚洲色图一区二区| 欧美一区午夜精品| 成人免费视频app| 午夜欧美在线一二页| 久久女同性恋中文字幕| 在线观看视频欧美| 国内不卡的二区三区中文字幕| 亚洲色图欧美激情| 日韩一区二区三区免费观看| 成人av免费在线| 人人狠狠综合久久亚洲| 国产精品日韩成人| 欧美一区二区三区不卡| www.亚洲激情.com| 日韩激情在线观看| 国产精品美女久久久久aⅴ | 色婷婷av久久久久久久| 久久99久久精品| 亚洲激情校园春色| 精品久久久久久久久久久久包黑料 | 国产亚洲精品中文字幕| 欧美色综合天天久久综合精品| 狠狠色丁香婷婷综合| 亚洲激情第一区| 久久综合九色综合久久久精品综合| 在线免费观看成人短视频| 国产乱码精品一区二区三区五月婷| 亚洲精品视频免费观看| 久久久精品影视| 欧美日韩精品系列| proumb性欧美在线观看| 激情综合色播激情啊| 亚洲精品高清在线| 中文字幕精品三区| 欧美不卡视频一区| 7777精品伊人久久久大香线蕉完整版| av在线免费不卡| 国产一区二区三区免费在线观看 | 国产精品区一区二区三区| 日韩视频一区在线观看| 欧美视频在线一区二区三区 | 国产 日韩 欧美大片| 久久精品国产77777蜜臀| 亚洲自拍偷拍综合| 亚洲欧美另类在线| 国产日韩欧美高清在线| 日韩三级视频中文字幕| 欧美三级视频在线播放| 99v久久综合狠狠综合久久| 国产成人免费视| 捆绑调教一区二区三区| 午夜精品久久久久久久蜜桃app| 亚洲欧美在线高清| 国产精品青草综合久久久久99| 精品日韩在线观看| 日韩欧美第一区| 欧美一级欧美一级在线播放| 欧美午夜精品久久久| 色综合天天做天天爱| 91免费看视频| av午夜一区麻豆| 不卡的电视剧免费网站有什么| 国产成人aaa| 国产成人免费视频网站| 国产高清不卡一区| 国产福利精品一区| 国产精品亚洲第一| 东方欧美亚洲色图在线| 国产成人欧美日韩在线电影 | 亚洲精品日韩专区silk| 亚洲欧美日韩精品久久久久| 中文字幕在线观看不卡| 欧美国产激情一区二区三区蜜月| 久久精品人人做人人爽人人| 久久蜜桃香蕉精品一区二区三区| 精品国产一区久久| 久久一区二区三区四区| 久久精品一区二区三区不卡牛牛| 精品久久久久久综合日本欧美| 久久午夜羞羞影院免费观看| 久久久精品黄色| 国产精品网站一区| 亚洲女同一区二区| 亚洲激情网站免费观看| 亚洲成精国产精品女| 日韩av一区二区三区| 青青草原综合久久大伊人精品 | 日韩成人伦理电影在线观看| 日本美女一区二区| 久久99日本精品| 国产精品综合av一区二区国产馆| 国产成人综合自拍| 成人动漫精品一区二区| 日本韩国欧美一区| 欧美日韩一区三区四区| 欧美成人精品二区三区99精品| 精品国产3级a| 国产精品高潮呻吟久久| 亚洲人成伊人成综合网小说| 亚洲五码中文字幕| 日产国产高清一区二区三区| 国产一区二区不卡在线| 99精品热视频| 欧美久久久影院| 久久综合九色综合欧美98| 中文字幕 久热精品 视频在线| 一区二区三区四区五区视频在线观看| 五月综合激情日本mⅴ| 国产一区二区三区视频在线播放| a美女胸又www黄视频久久| 欧美色成人综合| 精品99一区二区三区| 综合欧美亚洲日本| 视频一区视频二区中文| 国产麻豆精品在线观看| 一本大道久久精品懂色aⅴ| 在线播放视频一区| 欧美国产精品专区|