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

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

?? csr.c

?? idt mips 32365上面移植實(shí)現(xiàn)的iee1394驅(qū)動(dòng)程序
?? C
字號(hào):
/* * 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, int destid,		      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, int dest,		     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;}static struct hpsb_highlevel_ops csr_ops = {        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,};static struct hpsb_highlevel *hl;void init_csr(void){        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);}void cleanup_csr(void){        hpsb_unregister_highlevel(hl);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲香肠在线观看| 五月天国产精品| 欧美日韩国产一级| 国产乱国产乱300精品| 亚洲午夜久久久| 中文字幕精品在线不卡| 欧美丰满少妇xxxbbb| 99国产精品国产精品毛片| 蜜桃视频在线一区| 亚洲高清免费观看高清完整版在线观看| 日韩欧美国产一区在线观看| 日本韩国一区二区三区| 粉嫩蜜臀av国产精品网站| 免费观看成人av| 亚洲制服欧美中文字幕中文字幕| 久久色在线观看| 欧美老女人在线| 欧美影片第一页| 99国产欧美另类久久久精品 | 国产精品久久久久久久第一福利 | 亚洲图片激情小说| 欧美va在线播放| 7777精品伊人久久久大香线蕉| 99国产精品视频免费观看| 国产成人在线影院| 久久激五月天综合精品| 视频在线观看一区二区三区| 一区二区三区中文字幕| 亚洲欧美自拍偷拍色图| 国产亚洲人成网站| 国产欧美一区视频| 国产色91在线| 久久久久成人黄色影片| 久久久噜噜噜久久中文字幕色伊伊| 91麻豆精品久久久久蜜臀| 91成人看片片| 91行情网站电视在线观看高清版| 成人午夜av影视| 国产成人av资源| 高清不卡一二三区| 成人精品国产免费网站| 丁香亚洲综合激情啪啪综合| 国产99精品视频| 丰满亚洲少妇av| 成人av免费观看| 91污在线观看| 欧美在线免费观看亚洲| 欧美日韩视频一区二区| 8x8x8国产精品| 91精品国产综合久久久久久久 | 欧美一区二区在线视频| 欧美久久久久免费| 717成人午夜免费福利电影| 欧美精品在线一区二区三区| 欧美日高清视频| 日韩欧美亚洲一区二区| 欧美成人a视频| 国产亚洲精品福利| 亚洲四区在线观看| 一区二区三区免费网站| 午夜精品123| 精品亚洲porn| 国产激情精品久久久第一区二区 | 亚洲欧美色综合| 亚洲综合丝袜美腿| 青青草成人在线观看| 精品在线亚洲视频| gogogo免费视频观看亚洲一| 在线免费精品视频| 日韩欧美一级二级三级| 中文字幕av一区二区三区高| 亚洲精品免费电影| 免费av网站大全久久| 国产激情视频一区二区在线观看 | 久久久不卡影院| 亚洲天天做日日做天天谢日日欢 | 国产成人夜色高潮福利影视| www.亚洲精品| 在线观看免费一区| 2021国产精品久久精品| 中文字幕五月欧美| 日本va欧美va瓶| 粉嫩绯色av一区二区在线观看 | 久久香蕉国产线看观看99| 亚洲欧洲www| 日韩电影在线一区| av在线这里只有精品| 91精品国产91热久久久做人人 | 日韩1区2区3区| 国产美女在线观看一区| 欧美午夜片在线观看| 国产亚洲一二三区| 午夜精品福利视频网站| 成人国产精品免费观看动漫 | 欧美日本在线播放| 欧美国产精品一区| 日本不卡一区二区三区| av在线不卡电影| 久久精品人人爽人人爽| 亚洲18女电影在线观看| 成人高清视频在线| 日韩视频免费观看高清完整版 | 亚洲美腿欧美偷拍| 蜜臀a∨国产成人精品| 91成人在线免费观看| 久久久美女艺术照精彩视频福利播放 | 欧美一级片在线观看| 亚洲欧洲av另类| 国内精品写真在线观看| 欧美高清hd18日本| 亚洲乱码一区二区三区在线观看| 国产精品亚洲专一区二区三区| 欧美日韩国产美| 亚洲激情网站免费观看| 国产高清久久久久| 欧美成人精品3d动漫h| 日韩国产在线观看一区| 色域天天综合网| 国产精品无圣光一区二区| 激情综合五月天| 欧美一区二区三区日韩视频| 亚洲高清免费视频| 在线观看三级视频欧美| 一区二区高清视频在线观看| 99久久伊人久久99| 国产片一区二区| 国产成人综合精品三级| 欧美精品一区男女天堂| 国内外成人在线| 精品国产一区二区三区av性色 | 91极品视觉盛宴| 国产精品免费视频一区| 国产98色在线|日韩| 国产欧美日韩在线| 国产精品77777| 国产人成一区二区三区影院| 国产成人综合在线| 久久久91精品国产一区二区精品| 国产呦萝稀缺另类资源| 亚洲精品一区二区三区蜜桃下载| 精品一区二区在线看| 日韩精品一区在线| 极品瑜伽女神91| 国产午夜精品一区二区三区四区 | 91在线观看污| 亚洲男同1069视频| 欧美丝袜第三区| 午夜一区二区三区在线观看| 欧美日韩第一区日日骚| 日本午夜精品视频在线观看 | 欧美日韩国产系列| 天天av天天翘天天综合网色鬼国产| 欧美在线观看禁18| 日日夜夜精品视频天天综合网| 欧美日韩精品欧美日韩精品一综合| 五月激情丁香一区二区三区| 69久久夜色精品国产69蝌蚪网| 久久国产精品无码网站| 国产日韩av一区二区| 91网站最新网址| 亚洲 欧美综合在线网络| 欧美不卡视频一区| 高清久久久久久| 一区二区三区在线观看国产| 欧美人动与zoxxxx乱| 国产在线一区二区综合免费视频| 国产欧美一区二区精品仙草咪| 色偷偷一区二区三区| 日韩**一区毛片| 国产丝袜欧美中文另类| 日本精品一区二区三区四区的功能| 亚洲高清视频中文字幕| 久久久99久久精品欧美| 99国产精品一区| 蜜臀精品一区二区三区在线观看 | 国产精品欧美一区二区三区| 在线一区二区三区四区五区| 日本不卡高清视频| 中文字幕第一区二区| 欧美老年两性高潮| 高清国产午夜精品久久久久久| 亚洲激情男女视频| 欧美tickling网站挠脚心| 成人动漫一区二区在线| 青青草原综合久久大伊人精品优势| 国产欧美一区二区精品仙草咪 | 欧美三级视频在线| 国产精品一线二线三线| 亚洲国产另类av| 久久久99精品久久| 欧美精品免费视频| av一区二区不卡| 久久99精品国产| 亚洲一区在线播放| 欧美韩国日本不卡| 欧美精品久久久久久久多人混战| 成人18视频日本| 乱一区二区av| 亚洲午夜视频在线观看| 国产精品久久久久影院色老大|