亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产精品三级视频| 久久成人免费电影| 欧美中文字幕一区二区三区| 香蕉成人啪国产精品视频综合网| 亚洲午夜电影在线| 亚洲欧洲av在线| 99re热这里只有精品免费视频| 91在线国产观看| 日韩欧美www| 99久久亚洲一区二区三区青草| 欧美国产激情一区二区三区蜜月| 国产精品自拍三区| 欧美日韩久久不卡| 国产精品影视网| 亚洲人快播电影网| 国产伦精品一区二区三区免费| 精品欧美一区二区在线观看| 亚洲最大成人综合| 久久久久久久性| 免费观看久久久4p| 91搞黄在线观看| 日韩久久一区二区| 丝袜a∨在线一区二区三区不卡 | 国产精品国产三级国产专播品爱网| 午夜久久电影网| 久久天天做天天爱综合色| 另类专区欧美蜜桃臀第一页| 国产女人18毛片水真多成人如厕 | 成人午夜视频福利| 欧美一区二区三区成人| 福利视频网站一区二区三区| 亚洲自拍偷拍网站| 欧洲生活片亚洲生活在线观看| 在线观看免费一区| 成人黄色综合网站| 亚洲精品五月天| 色综合欧美在线| 国产精品福利一区| av中文字幕在线不卡| 国精产品一区一区三区mba视频 | 国产麻豆午夜三级精品| 亚洲一卡二卡三卡四卡五卡| 精品国免费一区二区三区| 91麻豆自制传媒国产之光| 久久久久久久网| 久久精品一区八戒影视| 国产成人在线观看免费网站| 国产精品福利av| 中文字幕永久在线不卡| 日本一区二区电影| 亚洲精品一区二区精华| 精品久久人人做人人爱| 欧美精选在线播放| 色婷婷亚洲婷婷| 奇米影视在线99精品| 欧美系列日韩一区| 成人午夜在线视频| 91精品福利视频| 精品写真视频在线观看 | 日韩黄色免费网站| 欧美激情中文字幕一区二区| 精品久久久久久无| 欧美日本一区二区三区四区| 欧美二区在线观看| 色婷婷av一区二区三区大白胸| 色哟哟在线观看一区二区三区| 成人开心网精品视频| 欧美亚洲尤物久久| 色呦呦国产精品| 亚洲国产婷婷综合在线精品| 欧美日韩国产三级| 日本高清免费不卡视频| 成人综合婷婷国产精品久久蜜臀 | 国产欧美精品区一区二区三区| 欧美一级欧美三级在线观看 | 日韩视频在线永久播放| 在线一区二区三区四区五区| av不卡在线播放| 国产激情91久久精品导航| 国产精品电影院| 欧美激情在线看| 粉嫩蜜臀av国产精品网站| 亚洲人成精品久久久久久| 欧美巨大另类极品videosbest| 91蝌蚪porny成人天涯| 不卡的av网站| 免费成人结看片| 精品制服美女丁香| 丁香婷婷深情五月亚洲| 韩国女主播成人在线| 国产麻豆精品一区二区| 成人免费看黄yyy456| 波多野结衣91| 色综合久久久久综合体| 欧美老肥妇做.爰bbww| 日韩视频一区二区三区在线播放| 欧美一区二区在线看| 久色婷婷小香蕉久久| 99久久综合色| 欧美日韩一区二区三区不卡| 91精品国产综合久久精品app| 欧美一区二区美女| 中文字幕一区二区三区蜜月| 亚洲国产精品久久人人爱| 91麻豆成人久久精品二区三区| 欧美一二三区精品| 国产在线视频一区二区| 91精品国产综合久久香蕉麻豆| 成人天堂资源www在线| 日韩激情在线观看| 国产精品久久免费看| 日本中文一区二区三区| 欧亚一区二区三区| 秋霞电影一区二区| 国产欧美日韩久久| 色综合久久中文综合久久牛| 亚洲国产精品久久久久婷婷884| 欧美日韩国产高清一区| 亚洲欧美经典视频| 欧美一区日韩一区| av亚洲产国偷v产偷v自拍| zzijzzij亚洲日本少妇熟睡| 国产精品乱码人人做人人爱| 精品视频一区三区九区| 中文字幕一区二区三区四区| 欧美一级二级三级乱码| a在线欧美一区| 视频在线观看91| 亚洲欧美激情插| 精品国产a毛片| 欧美亚洲动漫另类| 久久99国产精品尤物| 亚洲午夜免费电影| 国产精品入口麻豆原神| 日韩欧美三级在线| 欧美色爱综合网| 91久久免费观看| 99视频热这里只有精品免费| 国产一区二区不卡在线| 色婷婷综合五月| 成人国产精品免费观看视频| 亚洲综合激情另类小说区| 91精品婷婷国产综合久久性色 | 精品国产乱码久久久久久浪潮 | 91麻豆精品一区二区三区| 一级中文字幕一区二区| 中文字幕第一区二区| 精品国产电影一区二区| 日韩免费在线观看| 欧美一区二区三区思思人| 在线一区二区三区四区五区 | 精品在线一区二区| 日韩黄色在线观看| 美女任你摸久久| 久久av老司机精品网站导航| 美洲天堂一区二卡三卡四卡视频| 婷婷开心激情综合| 奇米777欧美一区二区| 久久99精品久久久| 精品一区二区久久| 成人av资源下载| 欧美性高清videossexo| 69堂精品视频| 久久这里只有精品6| 国产精品情趣视频| 亚洲一区二区三区四区五区中文| 亚洲动漫第一页| 久久99国产精品尤物| 午夜国产精品影院在线观看| 麻豆精品视频在线观看免费| 国产69精品久久777的优势| 99久久夜色精品国产网站| 欧洲视频一区二区| 欧美电影影音先锋| 欧美国产一区在线| 亚洲国产一二三| 蜜桃一区二区三区在线观看| zzijzzij亚洲日本少妇熟睡| 欧美日韩午夜在线| 亚洲视频一二三| 国产在线精品一区二区夜色| 色网综合在线观看| 国产精品丝袜黑色高跟| 麻豆极品一区二区三区| 色综合天天天天做夜夜夜夜做| 91精品国产欧美一区二区18| 亚洲精品免费电影| 成人av在线播放网址| 久久综合久久久久88| 亚洲一区在线观看视频| 一本久久精品一区二区| 国产精品欧美一区喷水| 免费观看91视频大全| 日韩精品资源二区在线| 免费在线一区观看| 欧美岛国在线观看| 蜜桃精品在线观看| 精品国产第一区二区三区观看体验| 亚洲国产美女搞黄色| 欧美喷潮久久久xxxxx|