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

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

?? u132-hcd.c

?? host usb 主設備程序 支持sd卡 mouse keyboard 的最單單的驅動程序 gcc編譯
?? C
?? 第 1 頁 / 共 5 頁
字號:
/** Host Controller Driver for the Elan Digital Systems U132 adapter** Copyright(C) 2006 Elan Digital Systems Limited* http://www.elandigitalsystems.com** Author and Maintainer - Tony Olech - Elan Digital Systems* tony.olech@elandigitalsystems.com** This program is free software;you can redistribute it and/or* modify it under the terms of the GNU General Public License as* published by the Free Software Foundation, version 2.*** This driver was written by Tony Olech(tony.olech@elandigitalsystems.com)* based on various USB host drivers in the 2.6.15 linux kernel* with constant reference to the 3rd Edition of Linux Device Drivers* published by O'Reilly** The U132 adapter is a USB to CardBus adapter specifically designed* for PC cards that contain an OHCI host controller. Typical PC cards* are the Orange Mobile 3G Option GlobeTrotter Fusion card.** The U132 adapter will *NOT *work with PC cards that do not contain* an OHCI controller. A simple way to test whether a PC card has an* OHCI controller as an interface is to insert the PC card directly* into a laptop(or desktop) with a CardBus slot and if "lspci" shows* a new USB controller and "lsusb -v" shows a new OHCI Host Controller* then there is a good chance that the U132 adapter will support the* PC card.(you also need the specific client driver for the PC card)** Please inform the Author and Maintainer about any PC cards that* contain OHCI Host Controller and work when directly connected to* an embedded CardBus slot but do not work when they are connected* via an ELAN U132 adapter.**/#include <linux/kernel.h>#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/delay.h>#include <linux/ioport.h>#include <linux/pci_ids.h>#include <linux/sched.h>#include <linux/slab.h>#include <linux/smp_lock.h>#include <linux/errno.h>#include <linux/init.h>#include <linux/timer.h>#include <linux/list.h>#include <linux/interrupt.h>#include <linux/usb.h>#include <linux/workqueue.h>#include <linux/platform_device.h>#include <linux/pci_ids.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/system.h>#include <asm/byteorder.h>#include "../core/hcd.h"#include "ohci.h"#define OHCI_CONTROL_INIT OHCI_CTRL_CBSR#define OHCI_INTR_INIT (OHCI_INTR_MIE | OHCI_INTR_UE | OHCI_INTR_RD | \        OHCI_INTR_WDH)MODULE_AUTHOR("Tony Olech - Elan Digital Systems Limited");MODULE_DESCRIPTION("U132 USB Host Controller Driver");MODULE_LICENSE("GPL");#define INT_MODULE_PARM(n, v) static int n = v;module_param(n, int, 0444)INT_MODULE_PARM(testing, 0);/* Some boards misreport power switching/overcurrent*/static int distrust_firmware = 1;module_param(distrust_firmware, bool, 0);MODULE_PARM_DESC(distrust_firmware, "true to distrust firmware power/overcurren"        "t setup");static DECLARE_WAIT_QUEUE_HEAD(u132_hcd_wait);/** u132_module_lock exists to protect access to global variables**/static struct semaphore u132_module_lock;static int u132_exiting = 0;static int u132_instances = 0;static struct list_head u132_static_list;/** end of the global variables protected by u132_module_lock*/static struct workqueue_struct *workqueue;#define MAX_U132_PORTS 7#define MAX_U132_ADDRS 128#define MAX_U132_UDEVS 4#define MAX_U132_ENDPS 100#define MAX_U132_RINGS 4static const char *cc_to_text[16] = {        "No Error ",        "CRC Error ",        "Bit Stuff ",        "Data Togg ",        "Stall ",        "DevNotResp ",        "PIDCheck ",        "UnExpPID ",        "DataOver ",        "DataUnder ",        "(for hw) ",        "(for hw) ",        "BufferOver ",        "BuffUnder ",        "(for HCD) ",        "(for HCD) "};struct u132_port {        struct u132 *u132;        int reset;        int enable;        int power;        int Status;};struct u132_addr {        u8 address;};struct u132_udev {        struct kref kref;        struct usb_device *usb_device;        u8 enumeration;        u8 udev_number;        u8 usb_addr;        u8 portnumber;        u8 endp_number_in[16];        u8 endp_number_out[16];};#define ENDP_QUEUE_SHIFT 3#define ENDP_QUEUE_SIZE (1<<ENDP_QUEUE_SHIFT)#define ENDP_QUEUE_MASK (ENDP_QUEUE_SIZE-1)struct u132_urbq {        struct list_head urb_more;        struct urb *urb;};struct u132_spin {        spinlock_t slock;};struct u132_endp {        struct kref kref;        u8 udev_number;        u8 endp_number;        u8 usb_addr;        u8 usb_endp;        struct u132 *u132;        struct list_head endp_ring;        struct u132_ring *ring;        unsigned toggle_bits:2;        unsigned active:1;        unsigned delayed:1;        unsigned input:1;        unsigned output:1;        unsigned pipetype:2;        unsigned dequeueing:1;        unsigned edset_flush:1;        unsigned spare_bits:14;        unsigned long jiffies;        struct usb_host_endpoint *hep;        struct u132_spin queue_lock;        u16 queue_size;        u16 queue_last;        u16 queue_next;        struct urb *urb_list[ENDP_QUEUE_SIZE];        struct list_head urb_more;        struct delayed_work scheduler;};struct u132_ring {        unsigned in_use:1;        unsigned length:7;        u8 number;        struct u132 *u132;        struct u132_endp *curr_endp;        struct delayed_work scheduler;};#define OHCI_QUIRK_AMD756 0x01#define OHCI_QUIRK_SUPERIO 0x02#define OHCI_QUIRK_INITRESET 0x04#define OHCI_BIG_ENDIAN 0x08#define OHCI_QUIRK_ZFMICRO 0x10struct u132 {        struct kref kref;        struct list_head u132_list;        struct semaphore sw_lock;        struct semaphore scheduler_lock;        struct u132_platform_data *board;        struct platform_device *platform_dev;        struct u132_ring ring[MAX_U132_RINGS];        int sequence_num;        int going;        int power;        int reset;        int num_ports;        u32 hc_control;        u32 hc_fminterval;        u32 hc_roothub_status;        u32 hc_roothub_a;        u32 hc_roothub_portstatus[MAX_ROOT_PORTS];        int flags;        unsigned long next_statechange;        struct delayed_work monitor;        int num_endpoints;        struct u132_addr addr[MAX_U132_ADDRS];        struct u132_udev udev[MAX_U132_UDEVS];        struct u132_port port[MAX_U132_PORTS];        struct u132_endp *endp[MAX_U132_ENDPS];};/** these cannot be inlines because we need the structure offset!!* Does anyone have a better way?????*/#define ftdi_read_pcimem(pdev, member, data) usb_ftdi_elan_read_pcimem(pdev, \        offsetof(struct ohci_regs, member), 0, data);#define ftdi_write_pcimem(pdev, member, data) usb_ftdi_elan_write_pcimem(pdev, \        offsetof(struct ohci_regs, member), 0, data);#define u132_read_pcimem(u132, member, data) \        usb_ftdi_elan_read_pcimem(u132->platform_dev, offsetof(struct \        ohci_regs, member), 0, data);#define u132_write_pcimem(u132, member, data) \        usb_ftdi_elan_write_pcimem(u132->platform_dev, offsetof(struct \        ohci_regs, member), 0, data);static inline struct u132 *udev_to_u132(struct u132_udev *udev){        u8 udev_number = udev->udev_number;        return container_of(udev, struct u132, udev[udev_number]);}static inline struct u132 *hcd_to_u132(struct usb_hcd *hcd){        return (struct u132 *)(hcd->hcd_priv);}static inline struct usb_hcd *u132_to_hcd(struct u132 *u132){        return container_of((void *)u132, struct usb_hcd, hcd_priv);}static inline void u132_disable(struct u132 *u132){        u132_to_hcd(u132)->state = HC_STATE_HALT;}#define kref_to_u132(d) container_of(d, struct u132, kref)#define kref_to_u132_endp(d) container_of(d, struct u132_endp, kref)#define kref_to_u132_udev(d) container_of(d, struct u132_udev, kref)#include "../misc/usb_u132.h"static const char hcd_name[] = "u132_hcd";#define PORT_C_MASK ((USB_PORT_STAT_C_CONNECTION | USB_PORT_STAT_C_ENABLE | \        USB_PORT_STAT_C_SUSPEND | USB_PORT_STAT_C_OVERCURRENT | \        USB_PORT_STAT_C_RESET) << 16)static void u132_hcd_delete(struct kref *kref){        struct u132 *u132 = kref_to_u132(kref);        struct platform_device *pdev = u132->platform_dev;        struct usb_hcd *hcd = u132_to_hcd(u132);        u132->going += 1;        down(&u132_module_lock);        list_del_init(&u132->u132_list);        u132_instances -= 1;        up(&u132_module_lock);        dev_warn(&u132->platform_dev->dev, "FREEING the hcd=%p and thus the u13"                "2=%p going=%d pdev=%p\n", hcd, u132, u132->going, pdev);        usb_put_hcd(hcd);}static inline void u132_u132_put_kref(struct u132 *u132){        kref_put(&u132->kref, u132_hcd_delete);}static inline void u132_u132_init_kref(struct u132 *u132){        kref_init(&u132->kref);}static void u132_udev_delete(struct kref *kref){        struct u132_udev *udev = kref_to_u132_udev(kref);        udev->udev_number = 0;        udev->usb_device = NULL;        udev->usb_addr = 0;        udev->enumeration = 0;}static inline void u132_udev_put_kref(struct u132 *u132, struct u132_udev *udev){        kref_put(&udev->kref, u132_udev_delete);}static inline void u132_udev_get_kref(struct u132 *u132, struct u132_udev *udev){        kref_get(&udev->kref);}static inline void u132_udev_init_kref(struct u132 *u132,        struct u132_udev *udev){        kref_init(&udev->kref);}static inline void u132_ring_put_kref(struct u132 *u132, struct u132_ring *ring){        kref_put(&u132->kref, u132_hcd_delete);}static void u132_ring_requeue_work(struct u132 *u132, struct u132_ring *ring,        unsigned int delta){        if (delta > 0) {                if (queue_delayed_work(workqueue, &ring->scheduler, delta))                        return;        } else if (queue_delayed_work(workqueue, &ring->scheduler, 0))                return;        kref_put(&u132->kref, u132_hcd_delete);        return;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国产丝袜在线播放| 亚洲激情六月丁香| 一区二区三区免费网站| 久久不见久久见中文字幕免费| av中文字幕亚洲| 精品国产99国产精品| 一区二区三区四区不卡视频| 国产成人在线视频播放| 91精品国产一区二区人妖| 夜夜操天天操亚洲| av午夜精品一区二区三区| 久久精品一区二区三区不卡| 日本不卡视频一二三区| 欧亚洲嫩模精品一区三区| 国产精品丝袜久久久久久app| 另类欧美日韩国产在线| 欧美一区二区在线视频| 日韩精品91亚洲二区在线观看| 色狠狠色噜噜噜综合网| 1024精品合集| 99久久久精品| 亚洲欧美在线aaa| 丰满少妇在线播放bd日韩电影| 精品国产一区二区三区久久久蜜月| 亚洲a一区二区| 91精品免费在线观看| 婷婷成人激情在线网| 欧美日韩视频在线观看一区二区三区| 自拍视频在线观看一区二区| 成人动漫中文字幕| 中文字幕一区在线观看视频| www.成人网.com| 中文字幕视频一区| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲视频中文字幕| 欧美亚洲综合久久| 五月婷婷综合在线| 日韩视频一区二区三区在线播放| 蓝色福利精品导航| 久久久久久久综合日本| 成人午夜在线免费| 亚洲欧洲无码一区二区三区| 色婷婷久久久亚洲一区二区三区| 亚洲二区在线视频| 91麻豆精品国产91久久久久久久久 | 欧美tk—视频vk| 国产永久精品大片wwwapp | 成人久久视频在线观看| 亚洲欧美综合另类在线卡通| 欧美性大战久久久久久久| 午夜日韩在线观看| 精品福利一二区| 成人黄色电影在线| 亚洲成人动漫一区| 久久先锋资源网| 91视频精品在这里| 天天影视涩香欲综合网| 久久青草欧美一区二区三区| 99精品视频在线观看| 午夜久久电影网| 国产午夜亚洲精品理论片色戒| 色综合天天综合网国产成人综合天| 亚洲成人自拍偷拍| 久久日韩精品一区二区五区| 色婷婷国产精品久久包臀| 九一久久久久久| 亚洲免费资源在线播放| 欧美电影免费观看高清完整版在线 | 国产精品一区在线观看乱码| 伊人开心综合网| www精品美女久久久tv| 色综合一区二区| 国产原创一区二区| 亚洲亚洲精品在线观看| 国产欧美日本一区二区三区| 在线不卡a资源高清| 成人福利视频在线看| 蜜桃视频在线一区| 一区二区三区中文字幕| 国产区在线观看成人精品 | 久久99精品久久久久婷婷| 亚洲欧洲美洲综合色网| 精品国产乱码久久久久久牛牛| 91福利小视频| 成人av片在线观看| 国产综合色产在线精品| 亚洲不卡一区二区三区| 成人欧美一区二区三区视频网页| 日韩一二三区视频| 欧美在线免费观看亚洲| 91亚洲精品久久久蜜桃网站| 国产精品一区二区不卡| 日本成人在线电影网| 亚洲一卡二卡三卡四卡五卡| 国产精品夫妻自拍| 欧美激情中文字幕一区二区| 日韩欧美一区二区视频| 欧美日韩国产欧美日美国产精品| 成人免费va视频| 高清shemale亚洲人妖| 精品亚洲免费视频| 琪琪一区二区三区| 亚洲成av人片在线观看无码| 一区二区在线观看视频| 亚洲四区在线观看| 自拍偷拍欧美精品| 亚洲欧美激情一区二区| 中文字幕制服丝袜一区二区三区 | 欧美视频一区二区三区在线观看| 国产河南妇女毛片精品久久久| 美女脱光内衣内裤视频久久影院| 免费在线观看视频一区| 久久99久久久久久久久久久| 久久99国产精品麻豆| 久久精品国内一区二区三区| 免费视频一区二区| 国产在线国偷精品产拍免费yy| 免费看日韩精品| 另类小说视频一区二区| 国产美女精品人人做人人爽| 福利一区二区在线观看| 成人av资源站| 欧美亚洲图片小说| 日韩一区二区三区av| 欧美成人女星排名| 亚洲国产精品黑人久久久| 国产精品久久久久aaaa樱花| 亚洲人成在线播放网站岛国| 亚洲丰满少妇videoshd| 国产美女久久久久| 久久99精品久久久久久动态图 | 欧美性色欧美a在线播放| 欧美亚洲国产一区在线观看网站| 欧美色图在线观看| 精品久久久久一区| 国产精品高潮久久久久无| 一区二区成人在线观看| 久久aⅴ国产欧美74aaa| 成人av电影免费在线播放| 欧美性三三影院| 久久综合九色综合欧美亚洲| 国产精品毛片久久久久久| 亚洲无人区一区| 国产在线观看一区二区| 色偷偷久久人人79超碰人人澡 | 国产精品久久久久久久久果冻传媒| 一区二区三区中文字幕在线观看| 日韩精品欧美精品| 成人在线一区二区三区| 欧美色综合久久| 国产嫩草影院久久久久| 午夜a成v人精品| 成人av在线资源网站| 日韩欧美你懂的| 最新高清无码专区| 狠狠色狠狠色综合日日91app| 91美女精品福利| 精品国产伦理网| 亚洲国产日产av| 成人激情图片网| 日韩一级高清毛片| 亚洲一区二区综合| 粉嫩一区二区三区在线看| 91麻豆精品国产91久久久久久久久| 国产精品久久久久影视| 麻豆精品久久久| 欧美在线影院一区二区| 国产精品乱码一区二区三区软件 | 一本一道综合狠狠老| 精品福利在线导航| 日韩精品91亚洲二区在线观看| 99精品国产视频| 欧美激情综合五月色丁香| 美女www一区二区| 欧美日韩色综合| 亚洲精品免费在线播放| 成人av在线一区二区| 久久精品男人的天堂| 秋霞影院一区二区| 69av一区二区三区| 亚洲国产成人高清精品| 日本大香伊一区二区三区| 国产精品理论片在线观看| 国产一区二区三区在线观看免费视频| 欧美一区二区三区四区视频| 亚洲国产精品久久一线不卡| 91福利国产精品| 亚洲美女淫视频| 91在线porny国产在线看| 中文字幕一区av| 91在线观看美女| 亚洲免费av在线| 欧美在线短视频| 午夜伦欧美伦电影理论片| 欧美午夜免费电影| 亚洲一区二区三区四区五区中文| 色欧美片视频在线观看| 一区二区三区中文字幕精品精品| 91一区二区在线| 亚洲综合激情小说|