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

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

?? raw1394.c

?? 這個是uClinux下的ieee1394驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * IEEE 1394 for Linux * * Raw interface to the bus * * Copyright (C) 1999, 2000 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/kernel.h>#include <linux/list.h>#include <linux/string.h>#include <linux/slab.h>#include <linux/fs.h>#include <linux/poll.h>#include <linux/module.h>#include <linux/init.h>#include <linux/version.h>#include <linux/smp_lock.h>#include <asm/uaccess.h>#include <asm/atomic.h>#include <linux/devfs_fs_kernel.h>#include "ieee1394.h"#include "ieee1394_types.h"#include "ieee1394_core.h"#include "hosts.h"#include "highlevel.h"#include "ieee1394_transactions.h"#include "raw1394.h"#if BITS_PER_LONG == 64#define int2ptr(x) ((void *)x)#define ptr2int(x) ((u64)x)#else#define int2ptr(x) ((void *)(u32)x)#define ptr2int(x) ((u64)(u32)x)#endifstatic devfs_handle_t devfs_handle;static LIST_HEAD(host_info_list);static int host_count;static spinlock_t host_info_lock = SPIN_LOCK_UNLOCKED;static atomic_t internal_generation = ATOMIC_INIT(0);static struct hpsb_highlevel *hl_handle;static atomic_t iso_buffer_size;static const int iso_buffer_max = 4 * 1024 * 1024; /* 4 MB */static void queue_complete_cb(struct pending_request *req);static struct pending_request *__alloc_pending_request(int flags){        struct pending_request *req;        req = (struct pending_request *)kmalloc(sizeof(struct pending_request),                                                flags);        if (req != NULL) {                memset(req, 0, sizeof(struct pending_request));                INIT_LIST_HEAD(&req->list);		INIT_TQUEUE(&req->tq, (void(*)(void*))queue_complete_cb, NULL);        }        return req;}static inline struct pending_request *alloc_pending_request(void){        return __alloc_pending_request(SLAB_KERNEL);}static void free_pending_request(struct pending_request *req){        if (req->ibs) {                if (atomic_dec_and_test(&req->ibs->refcount)) {                        atomic_sub(req->ibs->data_size, &iso_buffer_size);                        kfree(req->ibs);                }        } else if (req->free_data) {                kfree(req->data);        }        free_hpsb_packet(req->packet);        kfree(req);}static void queue_complete_req(struct pending_request *req){        unsigned long flags;        struct file_info *fi = req->file_info;        spin_lock_irqsave(&fi->reqlists_lock, flags);        list_del(&req->list);        list_add_tail(&req->list, &fi->req_complete);        spin_unlock_irqrestore(&fi->reqlists_lock, flags);        up(&fi->complete_sem);        wake_up_interruptible(&fi->poll_wait_complete);}static void queue_complete_cb(struct pending_request *req){        struct hpsb_packet *packet = req->packet;        int rcode = (packet->header[1] >> 12) & 0xf;        switch (packet->ack_code) {        case ACKX_NONE:        case ACKX_SEND_ERROR:                req->req.error = RAW1394_ERROR_SEND_ERROR;                break;        case ACKX_ABORTED:                req->req.error = RAW1394_ERROR_ABORTED;                break;        case ACKX_TIMEOUT:                req->req.error = RAW1394_ERROR_TIMEOUT;                break;        default:                req->req.error = (packet->ack_code << 16) | rcode;                break;        }        if (!((packet->ack_code == ACK_PENDING) && (rcode == RCODE_COMPLETE))) {                req->req.length = 0;        }        free_tlabel(packet->host, packet->node_id, packet->tlabel);        queue_complete_req(req);}static void add_host(struct hpsb_host *host){        struct host_info *hi;        hi = (struct host_info *)kmalloc(sizeof(struct host_info), SLAB_KERNEL);        if (hi != NULL) {                INIT_LIST_HEAD(&hi->list);                hi->host = host;                INIT_LIST_HEAD(&hi->file_info_list);                spin_lock_irq(&host_info_lock);                list_add_tail(&hi->list, &host_info_list);                host_count++;                spin_unlock_irq(&host_info_lock);        }        atomic_inc(&internal_generation);}static struct host_info *find_host_info(struct hpsb_host *host){        struct list_head *lh;        struct host_info *hi;        list_for_each(lh, &host_info_list) {                hi = list_entry(lh, struct host_info, list);                if (hi->host == host) {                        return hi;                }        }        return NULL;}static void remove_host(struct hpsb_host *host){        struct host_info *hi;        spin_lock_irq(&host_info_lock);        hi = find_host_info(host);        if (hi != NULL) {                list_del(&hi->list);                host_count--;        }        spin_unlock_irq(&host_info_lock);        if (hi == NULL) {                printk(KERN_ERR "raw1394: attempt to remove unknown host "                       "0x%p\n", host);                return;        }        kfree(hi);        atomic_inc(&internal_generation);}static void host_reset(struct hpsb_host *host){        unsigned long flags;        struct list_head *lh;        struct host_info *hi;        struct file_info *fi;        struct pending_request *req;        spin_lock_irqsave(&host_info_lock, flags);        hi = find_host_info(host);        if (hi != NULL) {                list_for_each(lh, &hi->file_info_list) {                        fi = list_entry(lh, struct file_info, list);                        req = __alloc_pending_request(SLAB_ATOMIC);                        if (req != NULL) {                                req->file_info = fi;                                req->req.type = RAW1394_REQ_BUS_RESET;                                req->req.generation = get_hpsb_generation(host);                                req->req.misc = (host->node_id << 16)                                        | host->node_count;                                if (fi->protocol_version > 3) {                                        req->req.misc |= ((host->irm_id                                                           & NODE_MASK) << 8);                                }                                queue_complete_req(req);                        }                }        }        spin_unlock_irqrestore(&host_info_lock, flags);}static void iso_receive(struct hpsb_host *host, int channel, quadlet_t *data,                        unsigned int length){        unsigned long flags;        struct list_head *lh;        struct host_info *hi;        struct file_info *fi;        struct pending_request *req;        struct iso_block_store *ibs = NULL;        LIST_HEAD(reqs);        if ((atomic_read(&iso_buffer_size) + length) > iso_buffer_max) {                HPSB_INFO("dropped iso packet");                return;        }        spin_lock_irqsave(&host_info_lock, flags);        hi = find_host_info(host);        if (hi != NULL) {		list_for_each(lh, &hi->file_info_list) {                        fi = list_entry(lh, struct file_info, list);                        if (!(fi->listen_channels & (1ULL << channel))) {                                continue;                        }                        req = __alloc_pending_request(SLAB_ATOMIC);                        if (!req) break;                        if (!ibs) {                                ibs = kmalloc(sizeof(struct iso_block_store)                                              + length, SLAB_ATOMIC);                                if (!ibs) {                                        kfree(req);                                        break;                                }                                atomic_add(length, &iso_buffer_size);                                atomic_set(&ibs->refcount, 0);                                ibs->data_size = length;                                memcpy(ibs->data, data, length);                        }                        atomic_inc(&ibs->refcount);                        req->file_info = fi;                        req->ibs = ibs;                        req->data = ibs->data;                        req->req.type = RAW1394_REQ_ISO_RECEIVE;                        req->req.generation = get_hpsb_generation(host);                        req->req.misc = 0;                        req->req.recvb = ptr2int(fi->iso_buffer);                        req->req.length = MIN(length, fi->iso_buffer_length);                                                list_add_tail(&req->list, &reqs);                }        }        spin_unlock_irqrestore(&host_info_lock, flags);        lh = reqs.next;        while (lh != &reqs) {                req = list_entry(lh, struct pending_request, list);                lh = lh->next;                queue_complete_req(req);        }}static void fcp_request(struct hpsb_host *host, int nodeid, int direction,                        int cts, u8 *data, unsigned int length){        unsigned long flags;        struct list_head *lh;        struct host_info *hi;        struct file_info *fi;        struct pending_request *req;        struct iso_block_store *ibs = NULL;        LIST_HEAD(reqs);        if ((atomic_read(&iso_buffer_size) + length) > iso_buffer_max) {                HPSB_INFO("dropped fcp request");                return;        }        spin_lock_irqsave(&host_info_lock, flags);        hi = find_host_info(host);        if (hi != NULL) {		list_for_each(lh, &hi->file_info_list) {                        fi = list_entry(lh, struct file_info, list);                        if (!fi->fcp_buffer) {                                continue;                        }                        req = __alloc_pending_request(SLAB_ATOMIC);                        if (!req) break;                        if (!ibs) {                                ibs = kmalloc(sizeof(struct iso_block_store)                                              + length, SLAB_ATOMIC);                                if (!ibs) {                                        kfree(req);                                        break;                                }                                atomic_add(length, &iso_buffer_size);                                atomic_set(&ibs->refcount, 0);                                ibs->data_size = length;                                memcpy(ibs->data, data, length);                        }                        atomic_inc(&ibs->refcount);                        req->file_info = fi;                        req->ibs = ibs;                        req->data = ibs->data;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91精品免费| 久久99精品国产麻豆婷婷| 国产欧美一区二区在线观看| 亚洲免费观看高清完整版在线| 国产精品美女视频| 综合久久国产九一剧情麻豆| 国产精品乱码人人做人人爱| 国产精品国产成人国产三级 | 欧美高清激情brazzers| 欧美性大战久久久| 91精品国产综合久久香蕉的特点 | 蜜桃久久久久久久| 狠狠色丁香久久婷婷综合丁香| 青青草精品视频| 国产美女精品一区二区三区| 国产不卡一区视频| 色嗨嗨av一区二区三区| 91精品国产一区二区三区蜜臀| 欧美不卡一区二区三区四区| 日本中文字幕一区二区有限公司| 久久国产乱子精品免费女| 丁香天五香天堂综合| 欧美在线影院一区二区| 欧美一区二区三区性视频| 久久人人爽人人爽| 一区二区三区波多野结衣在线观看| 99在线视频精品| 欧美日韩性生活| 久久亚洲一区二区三区四区| 日韩理论片中文av| 日本欧美肥老太交大片| 成人国产精品免费| 欧美剧情片在线观看| 欧美韩国日本不卡| 99久久精品情趣| 日韩女优视频免费观看| 亚洲人成小说网站色在线| 卡一卡二国产精品| 91福利在线观看| 欧美激情综合网| 免费成人小视频| 欧美激情在线观看视频免费| 午夜精品一区在线观看| 国产日韩亚洲欧美综合| 色欧美片视频在线观看| 日韩视频免费观看高清在线视频| 国产精品欧美久久久久无广告| 亚洲成在线观看| 久久人人爽爽爽人久久久| 亚洲bdsm女犯bdsm网站| 91玉足脚交白嫩脚丫在线播放| 久久久久亚洲蜜桃| 日本成人在线看| 欧美日韩在线三级| 一区二区三区在线视频观看58 | 制服.丝袜.亚洲.中文.综合| 久久se精品一区二区| 欧美日韩国产乱码电影| 一区二区三区免费网站| av中文字幕在线不卡| 久久久99精品免费观看不卡| 免费成人在线视频观看| 欧美丰满美乳xxx高潮www| 亚洲午夜免费福利视频| 久久久综合精品| 国产在线一区二区综合免费视频| 欧美一二区视频| 日本美女视频一区二区| 欧美精品xxxxbbbb| 天天综合网天天综合色| 欧美网站大全在线观看| 亚洲男人天堂av网| 久久久久久久久久久久久女国产乱 | 蜜臀久久久久久久| 日韩亚洲欧美一区二区三区| 日韩av一区二区三区四区| 欧美久久一区二区| 蜜桃av一区二区| 亚洲成人午夜影院| 欧美日韩精品欧美日韩精品一综合| 亚洲已满18点击进入久久| 在线欧美日韩国产| 日韩专区一卡二卡| 日韩亚洲欧美成人一区| 国内外成人在线| 欧美国产精品一区二区| 久久婷婷成人综合色| 国产不卡视频一区二区三区| 国产精品女主播av| 日本道色综合久久| 日韩影院免费视频| 久久久五月婷婷| 91丨九色丨黑人外教| 亚洲一区二区三区在线播放| 这里只有精品99re| 欧美福利一区二区| 国产精品一品二品| 亚洲免费资源在线播放| 欧美一区二区网站| www.视频一区| 丝袜脚交一区二区| 国产精品区一区二区三| 欧美性视频一区二区三区| 欧美久久一二三四区| 国产精品一品二品| 亚洲a一区二区| 国产亚洲成av人在线观看导航| 色综合久久中文字幕| 久久精品国产99久久6| 亚洲国产精品黑人久久久| 欧美日韩在线直播| 国产成人欧美日韩在线电影| 成人av在线播放网址| 日韩电影在线一区二区| 国产精品嫩草影院av蜜臀| 欧美酷刑日本凌虐凌虐| 不卡电影一区二区三区| 精品一区二区三区欧美| 一区二区三区欧美久久| 久久久91精品国产一区二区精品 | 亚洲va欧美va天堂v国产综合| 久久久久久一二三区| 欧美日韩中文精品| 成人深夜在线观看| 美女精品自拍一二三四| 成人av在线电影| 国内久久精品视频| 日韩成人免费在线| 亚洲综合在线第一页| 国产精品美女久久久久久| 26uuu成人网一区二区三区| 欧美日韩国产免费| 欧美性色黄大片手机版| 91无套直看片红桃| 风间由美中文字幕在线看视频国产欧美| 91一区二区在线| 风间由美一区二区三区在线观看| 久久99久久久欧美国产| 日韩精品久久理论片| 午夜欧美在线一二页| 亚洲欧美另类综合偷拍| 国产偷国产偷精品高清尤物| 欧美电影免费提供在线观看| 欧美日韩一区二区三区在线| 久久精品人人做人人爽97| 日韩一区二区三| 日韩欧美一级二级三级 | 成人一区在线看| 国产电影一区二区三区| 国产一区二区美女| 国产成人av网站| 风流少妇一区二区| 精品美女在线播放| 亚洲精品一区二区在线观看| 欧美videossexotv100| 精品久久国产字幕高潮| 久久免费偷拍视频| 久久精品视频在线看| 亚洲国产岛国毛片在线| 欧美国产国产综合| 亚洲欧美另类小说视频| 亚洲第一二三四区| 欧美在线你懂的| 欧美日韩一区二区欧美激情| 欧美日韩日日摸| 欧美成人精品福利| 日本一区二区三区dvd视频在线| 国产精品嫩草99a| 一区二区久久久| 日日摸夜夜添夜夜添国产精品| 美日韩一级片在线观看| 国产91丝袜在线播放0| 国产日韩欧美在线一区| 成人免费在线播放视频| 亚洲一级片在线观看| 久久99精品久久久久婷婷| 成人黄色大片在线观看| 欧美午夜寂寞影院| 久久先锋资源网| 一区二区三区在线不卡| 另类小说色综合网站| 成人精品一区二区三区四区 | 欧美一区二区三区在线| 国产欧美精品一区二区色综合朱莉| 国产精品久久久久久久裸模| 亚洲chinese男男1069| 国产精品一区二区久激情瑜伽| 91在线观看视频| 久久色成人在线| 亚洲成av人片观看| 制服丝袜国产精品| 亚洲图片欧美激情| 捆绑调教美女网站视频一区| 99re热视频精品| 日韩美女主播在线视频一区二区三区| 成人欧美一区二区三区| 久久99精品国产麻豆婷婷| 欧美性一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 日韩av在线发布|