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

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

?? csr.c

?? 講述linux的初始化過程
?? C
字號:
/* * IEEE 1394 for Linux * * CSR implementation, iso/bus manager implementation. * * Copyright (C) 1999 Andreas E. Bombe * * This code is licensed under the GPL.  See the file COPYING in the root * directory of the kernel sources for details. */#include <linux/string.h>#include "ieee1394_types.h"#include "hosts.h"#include "ieee1394.h"#include "highlevel.h"/* FIXME: this one won't work on little endian with big endian data */static u16 csr_crc16(unsigned *data, int length){        int check=0, i;        int shift, sum, next=0;        for (i = length; i; i--) {                for (next = check, shift = 28; shift >= 0; shift -= 4 ) {                        sum = ((next >> 12) ^ (*data >> shift)) & 0xf;                        next = (next << 4) ^ (sum << 12) ^ (sum << 5) ^ (sum);                }                check = next & 0xffff;                data++;        }        return check;}static void host_reset(struct hpsb_host *host){        host->csr.state &= 0x300;        host->csr.bus_manager_id = 0x3f;        host->csr.bandwidth_available = 4915;        host->csr.channels_available_hi = ~0;        host->csr.channels_available_lo = ~0;        host->csr.node_ids = host->node_id << 16;        if (!host->is_root) {                /* clear cmstr bit */                host->csr.state &= ~0x100;        }        host->csr.topology_map[1] =                 cpu_to_be32(be32_to_cpu(host->csr.topology_map[1]) + 1);        host->csr.topology_map[2] = cpu_to_be32(host->node_count << 16                                                 | host->selfid_count);        host->csr.topology_map[0] =                 cpu_to_be32((host->selfid_count + 2) << 16                            | csr_crc16(host->csr.topology_map + 1,                                        host->selfid_count + 2));        host->csr.speed_map[0] = cpu_to_be32(0x3f1 << 16                                              | csr_crc16(host->csr.speed_map+1,                                                         0x3f1));}static void add_host(struct hpsb_host *host){        host->csr.lock = SPIN_LOCK_UNLOCKED;        host->csr.rom_size = host->template->get_rom(host, &host->csr.rom);        host->csr.state                 = 0;        host->csr.node_ids              = 0;        host->csr.split_timeout_hi      = 0;        host->csr.split_timeout_lo      = 800 << 19;        host->csr.cycle_time            = 0;        host->csr.bus_time              = 0;        host->csr.bus_manager_id        = 0x3f;        host->csr.bandwidth_available   = 4915;        host->csr.channels_available_hi = ~0;        host->csr.channels_available_lo = ~0;}/* Read topology / speed maps and configuration ROM */static int read_maps(struct hpsb_host *host, int nodeid, quadlet_t *buffer,                     u64 addr, unsigned int length){        int csraddr = addr - CSR_REGISTER_BASE;        const char *src;        if (csraddr < CSR_TOPOLOGY_MAP) {                if (csraddr + length > CSR_CONFIG_ROM + host->csr.rom_size) {                        return RCODE_ADDRESS_ERROR;                }                src = ((char *)host->csr.rom) + csraddr - CSR_CONFIG_ROM;        } else if (csraddr < CSR_SPEED_MAP) {                src = ((char *)host->csr.topology_map) + csraddr                         - CSR_TOPOLOGY_MAP;        } else {                src = ((char *)host->csr.speed_map) + csraddr - CSR_SPEED_MAP;        }        memcpy(buffer, src, length);        return RCODE_COMPLETE;}#define out if (--length == 0) breakstatic int read_regs(struct hpsb_host *host, int nodeid, quadlet_t *buf,                     u64 addr, unsigned int length){        int csraddr = addr - CSR_REGISTER_BASE;        int oldcycle;        quadlet_t ret;                if ((csraddr | length) & 0x3) {                return RCODE_TYPE_ERROR;        }        length /= 4;        switch (csraddr) {        case CSR_STATE_CLEAR:                *(buf++) = cpu_to_be32(host->csr.state);                out;        case CSR_STATE_SET:                *(buf++) = cpu_to_be32(host->csr.state);                out;        case CSR_NODE_IDS:                *(buf++) = cpu_to_be32(host->csr.node_ids);                out;        case CSR_RESET_START:                return RCODE_TYPE_ERROR;                /* address gap - handled by default below */        case CSR_SPLIT_TIMEOUT_HI:                *(buf++) = cpu_to_be32(host->csr.split_timeout_hi);                out;        case CSR_SPLIT_TIMEOUT_LO:                *(buf++) = cpu_to_be32(host->csr.split_timeout_lo);                out;                /* address gap */                return RCODE_ADDRESS_ERROR;        case CSR_CYCLE_TIME:                oldcycle = host->csr.cycle_time;                host->csr.cycle_time =                        host->template->devctl(host, GET_CYCLE_COUNTER, 0);                if (oldcycle > host->csr.cycle_time) {                        /* cycle time wrapped around */                        host->csr.bus_time += 1 << 7;                }                *(buf++) = cpu_to_be32(host->csr.cycle_time);                out;        case CSR_BUS_TIME:                oldcycle = host->csr.cycle_time;                host->csr.cycle_time =                        host->template->devctl(host, GET_CYCLE_COUNTER, 0);                if (oldcycle > host->csr.cycle_time) {                        /* cycle time wrapped around */                        host->csr.bus_time += (1 << 7);                }                *(buf++) = cpu_to_be32(host->csr.bus_time                                        | (host->csr.cycle_time >> 25));                out;                /* address gap */                return RCODE_ADDRESS_ERROR;        case CSR_BUSY_TIMEOUT:                /* not yet implemented */                return RCODE_ADDRESS_ERROR;        case CSR_BUS_MANAGER_ID:                if (host->template->hw_csr_reg)                        ret = host->template->hw_csr_reg(host, 0, 0, 0);                else                        ret = host->csr.bus_manager_id;                *(buf++) = cpu_to_be32(ret);                out;        case CSR_BANDWIDTH_AVAILABLE:                if (host->template->hw_csr_reg)                        ret = host->template->hw_csr_reg(host, 1, 0, 0);                else                        ret = host->csr.bandwidth_available;                *(buf++) = cpu_to_be32(ret);                out;        case CSR_CHANNELS_AVAILABLE_HI:                if (host->template->hw_csr_reg)                        ret = host->template->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->template->hw_csr_reg)                        ret = host->template->hw_csr_reg(host, 3, 0, 0);                else                        ret = host->csr.channels_available_lo;                *(buf++) = cpu_to_be32(ret);                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, quadlet_t *data,                      u64 addr, unsigned int length){        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->template->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;                out;        case CSR_SPLIT_TIMEOUT_LO:                host->csr.split_timeout_lo =                         be32_to_cpu(*(data++)) & 0xfff80000;                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->template->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;                /* 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){        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);        if (host->template->hw_csr_reg) {                quadlet_t old;                old = host->template->                        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;                break;        case CSR_BANDWIDTH_AVAILABLE:                regptr = &host->csr.bandwidth_available;                break;        case CSR_CHANNELS_AVAILABLE_HI:                regptr = &host->csr.channels_available_hi;                break;        case CSR_CHANNELS_AVAILABLE_LO:                regptr = &host->csr.channels_available_lo;                break;        }        *store = cpu_to_be32(*regptr);        if (*regptr == arg) *regptr = data;        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_BUS_MANAGER_ID:        case CSR_BANDWIDTH_AVAILABLE:        case CSR_CHANNELS_AVAILABLE_HI:        case CSR_CHANNELS_AVAILABLE_LO:                return RCODE_TYPE_ERROR;        case CSR_BUSY_TIMEOUT:                /* not yet implemented - fall through */        default:                return RCODE_ADDRESS_ERROR;        }}static int write_fcp(struct hpsb_host *host, int nodeid, quadlet_t *data,                     u64 addr, unsigned int length){        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;}struct hpsb_highlevel_ops csr_ops = {        add_host: add_host,        host_reset: host_reset,};struct hpsb_address_ops map_ops = {        read: read_maps,};struct hpsb_address_ops fcp_ops = {        write: write_fcp,};struct hpsb_address_ops reg_ops = {        read: read_regs,        write: write_regs,        lock: lock_regs,};void init_csr(void){        struct hpsb_highlevel *hl;        hl = hpsb_register_highlevel("standard registers", &csr_ops);        if (hl == NULL) {                HPSB_ERR("out of memory during ieee1394 initialization");                return;        }        hpsb_register_addrspace(hl, &reg_ops, CSR_REGISTER_BASE,                                CSR_REGISTER_BASE + CSR_CONFIG_ROM);        hpsb_register_addrspace(hl, &map_ops,                                 CSR_REGISTER_BASE + CSR_CONFIG_ROM,                                CSR_REGISTER_BASE + CSR_CONFIG_ROM_END);        hpsb_register_addrspace(hl, &fcp_ops,                                CSR_REGISTER_BASE + CSR_FCP_COMMAND,                                CSR_REGISTER_BASE + CSR_FCP_END);        hpsb_register_addrspace(hl, &map_ops,                                CSR_REGISTER_BASE + CSR_TOPOLOGY_MAP,                                CSR_REGISTER_BASE + CSR_TOPOLOGY_MAP_END);        hpsb_register_addrspace(hl, &map_ops,                                CSR_REGISTER_BASE + CSR_SPEED_MAP,                                CSR_REGISTER_BASE + CSR_SPEED_MAP_END);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
1000部国产精品成人观看| www.色精品| 欧美一区二区三区影视| 亚洲午夜电影在线| 色94色欧美sute亚洲线路一ni| 国产精品毛片a∨一区二区三区| 国产成人啪午夜精品网站男同| 中文字幕乱码亚洲精品一区| 99久久er热在这里只有精品15| 亚洲欧洲www| 欧美无砖专区一中文字| 免费一级片91| 亚洲精品一区二区三区四区高清| 国产伦精品一区二区三区视频青涩 | 日韩免费福利电影在线观看| 老汉av免费一区二区三区| 久久久天堂av| 日本韩国欧美一区| 无码av中文一区二区三区桃花岛| 日韩欧美综合一区| 国产成人精品亚洲午夜麻豆| 一区二区三区在线看| 这里只有精品视频在线观看| 国产精品1区2区| 亚洲日韩欧美一区二区在线| 在线综合亚洲欧美在线视频| 91尤物视频在线观看| 午夜欧美2019年伦理| 久久精品一区二区三区四区| 91蜜桃在线免费视频| 免费看黄色91| 中文字幕一区二区三区精华液| 欧美精品一卡二卡| 成人18视频日本| 日韩电影在线一区二区| 中文字幕免费观看一区| 91精品在线麻豆| 99视频精品全部免费在线| 欧美a级理论片| 亚洲另类中文字| 国产亚洲视频系列| 欧美日韩国产系列| av午夜精品一区二区三区| 青椒成人免费视频| 一区二区三区国产| 337p日本欧洲亚洲大胆精品| 91福利在线导航| 成人一区在线观看| 麻豆91精品91久久久的内涵| 亚洲柠檬福利资源导航| 久久久精品国产99久久精品芒果| 欧美日韩国产大片| 99久久99精品久久久久久| 精品一区免费av| 日韩专区一卡二卡| 一区二区三区**美女毛片| 国产女人18水真多18精品一级做| 91精品午夜视频| 欧美三级韩国三级日本一级| 91麻豆国产在线观看| 国产91精品露脸国语对白| 精彩视频一区二区三区| 男男成人高潮片免费网站| 亚洲香肠在线观看| 有坂深雪av一区二区精品| 国产精品美女久久久久久| 久久久99精品免费观看不卡| 日韩欧美的一区二区| 91精品国产综合久久精品| 欧美午夜片在线看| 一本色道亚洲精品aⅴ| www.在线成人| 91影院在线免费观看| 99久久国产综合精品色伊 | 日本欧洲一区二区| 午夜视频在线观看一区二区三区| 亚洲精品中文在线观看| 亚洲色图视频免费播放| 亚洲永久免费视频| 亚洲精品国产a| 亚洲精品乱码久久久久久久久 | 亚洲免费在线电影| 国产精品久久看| 亚洲国产成人一区二区三区| 国产精品欧美一区喷水| 国产精品久久毛片av大全日韩| 亚洲同性gay激情无套| 亚洲视频每日更新| 亚洲综合网站在线观看| 午夜精品在线视频一区| 蜜桃av一区二区三区电影| 美女视频黄免费的久久| 激情久久五月天| 国产精品亚洲成人| 成人激情视频网站| av在线不卡电影| 色哟哟日韩精品| 欧美在线观看一区| 91精品国产一区二区| www国产成人| 国产精品短视频| 亚洲在线中文字幕| 日本免费新一区视频| 国产成人免费xxxxxxxx| 91蝌蚪porny九色| 欧美私模裸体表演在线观看| 日韩欧美国产精品一区| 亚洲国产精品精华液ab| 亚洲精品乱码久久久久久| 亚洲午夜一区二区| 久久国产婷婷国产香蕉| 99精品国产99久久久久久白柏| 色综合天天狠狠| 欧美一区二区三区的| 久久久久久久久久久久久女国产乱| 综合激情成人伊人| 免费精品视频最新在线| 不卡视频一二三| 欧美喷潮久久久xxxxx| 国产日产欧美一区| 亚洲一区二区视频在线观看| 久久av资源站| 91免费国产视频网站| 精品成人佐山爱一区二区| 综合久久久久久久| 六月丁香婷婷久久| 91小视频免费看| 欧美一区二区美女| 亚洲视频在线一区| 麻豆91在线看| 91视视频在线观看入口直接观看www| 日韩一区和二区| 亚洲欧美区自拍先锋| 韩国一区二区三区| 这里只有精品免费| 亚洲精品中文在线观看| 成人性色生活片| 日韩一区二区在线看| 亚洲婷婷在线视频| 久久99精品国产91久久来源| 欧美日韩免费高清一区色橹橹 | 国产乱码精品一区二区三区忘忧草 | 免费精品视频最新在线| 欧洲一区二区三区免费视频| 国产精品视频在线看| 久久99日本精品| 欧美男生操女生| 亚洲一区自拍偷拍| 不卡av免费在线观看| 久久久久高清精品| 免费一级欧美片在线观看| 777午夜精品视频在线播放| 亚洲综合在线电影| 色一情一乱一乱一91av| 中文字幕一区二区5566日韩| 国产东北露脸精品视频| 久久一区二区三区四区| 精品一区二区久久| 91麻豆精品国产无毒不卡在线观看| 亚洲成av人片www| 欧美在线视频你懂得| 一区二区在线观看免费| 色哟哟一区二区| 亚洲欧美另类小说| av激情亚洲男人天堂| 欧美激情一区二区三区不卡 | av网站免费线看精品| 国产精品午夜在线| 精品一区二区三区在线观看国产 | 国产一二精品视频| 久久亚洲影视婷婷| 日本在线不卡一区| 欧美一区二区三区免费在线看| 亚洲女人****多毛耸耸8| 成人h版在线观看| ●精品国产综合乱码久久久久| 国产成人亚洲精品青草天美| 国产欧美在线观看一区| 国产在线乱码一区二区三区| 久久久久亚洲综合| 福利视频网站一区二区三区| 欧美精品一区男女天堂| 国产福利精品导航| 久久在线观看免费| 成人免费视频视频在线观看免费| 欧美日韩精品一区二区| 日本不卡视频在线观看| 欧美精品一区二区三区视频| 另类调教123区| 国产日韩欧美a| 国产宾馆实践打屁股91| 亚洲人成伊人成综合网小说| 欧美在线一区二区三区| 亚洲午夜精品在线| 欧美电视剧免费观看| 久久99久久精品| 国产精品久久久久久一区二区三区| 免费观看在线综合| 中文字幕欧美国产| 欧美日韩二区三区|