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

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

?? mouse.c

?? Linux2.4.20針對三星公司的s3c2440內(nèi)核基礎(chǔ)上的一些設(shè)備驅(qū)動代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
    unsigned long flags;    spin_lock_irqsave(&mouse_private->lock, flags);    if (!mouse_private->data_valid) {	spin_unlock_irqrestore(&mouse_private->lock, flags);	return 0;    }    if ((urb = usbd_alloc_urb(mouse_private->device,			      (mouse_private->device->function_instance_array+port),			      CONFIG_USBD_MOUSE_INT_ENDPOINT | IN, MOUSE_PACKET_SIZE))==NULL)    {	dbg_tx(0, "failed to alloc urb");	spin_unlock_irqrestore(&mouse_private->lock, flags);	return -EINVAL;    }    memcpy(urb->buffer, mouse_private->data, MOUSE_PACKET_SIZE);    urb->actual_length = MOUSE_PACKET_SIZE;    mouse_private->data_valid = 0;    spin_unlock_irqrestore(&mouse_private->lock, flags);    dbgPRINTmem(dbgflg_usbdfd_tx,3,urb->buffer,MOUSE_PACKET_SIZE);    // push it down into the usb-device layer    return usbd_send_urb(urb);}/* mouse_urb_sent - called to indicate URB transmit finished * @urb: pointer to struct urb * @rc: result */int mouse_urb_sent (struct urb *urb, int status){    int port = 0; // XXX compound device    struct usb_device_instance *device = urb->device;    struct usb_mouse_private *mouse_private = (device->function_instance_array+port)->privdata;    dbg_tx(2,"%s length: %d status : %x",urb->device->name, urb->actual_length, status);    usbd_dealloc_urb(urb);    /* send next urb */    return mouse_send(mouse_private);}/** * mouse_recv_setup - called with a control URB  * @urb - pointer to struct urb * * Check if this is a setup packet, process the device request, put results * back into the urb and return zero or non-zero to indicate success (DATA) * or failure (STALL). * * This routine IS called at interrupt time. Please use the usual precautions. * */int mouse_recv_setup (struct urb * urb){    struct usb_device_request *request;    struct usb_device_instance *device = urb->device;    int port = 0;    struct usb_mouse_private *mouse_private = (device->function_instance_array+port)->privdata;    request = &urb->device_request;    // handle HID Class-Specific Request (c.f. HID 7.2)    if ((request->bmRequestType&USB_REQ_TYPE_MASK)!=USB_REQ_TYPE_CLASS) {        dbg_ep0(1, "not class request: %x %x", request->bmRequestType, request->bmRequestType&USB_REQ_TYPE_MASK);        return 0; // XXX    }    if ((request->bmRequestType&USB_REQ_DIRECTION_MASK)) {        dbg_ep0(1, "Device-to-Host");        switch (request->bRequest) {        case USB_REQ_SET_IDLE:	    mouse_private->duration = le16_to_cpu (request->wValue) >> 8;	    break;        case USB_REQ_SET_REPORT:	    /* ignore */	    break;	}    }    else {        dbg_ep0(1, "Host-to-Device");        switch (request->bRequest) {        case USB_REQ_GET_IDLE:	    /* FIXME */            break;        case USB_REQ_GET_REPORT:	    /* FIXME */	    break;        }    }    return 0;}/* USB Device Functions ************************************************************************ *//* proc interface */static int mouse_write_proc(struct file *file, const char *buffer,			    unsigned long count, void *data){    char str[128];    int val[MOUSE_PACKET_SIZE];    unsigned long flags;    struct usb_mouse_private *mouse_private = data;    memset(str, 0, sizeof(str));    if (copy_from_user(str, buffer, min_t(unsigned long, count, sizeof(str))))	return -EFAULT;    if (sscanf(str, "%d %d %d", &val[0], &val[1], &val[2]) != 3)	return -EINVAL;    spin_lock_irqsave(&mouse_private->lock, flags);    if (mouse_private->device->device_state == STATE_CONFIGURED &&	!mouse_private->data_valid) {	int i;	for (i = 0; i < MOUSE_PACKET_SIZE; i++)	    mouse_private->data[i] = val[i];	mouse_private->data_valid = 1;	mouse_send(mouse_private);    }    spin_unlock_irqrestore(&mouse_private->lock, flags);    return count;}/* mouse_event - process a device event * */void mouse_event(struct usb_device_instance *device, usb_device_event_t event, int data){    int port = 0; // XXX compound device    struct usb_function_instance *function;    dbg_usbe(5,"%d",event);    if ((function = device->function_instance_array+port)==NULL){        dbg_usbe(1,"no function");        return;    }    dbg_usbe(3,"---> %s %d", device->name, event);    switch (event) {    case DEVICE_UNKNOWN:    case DEVICE_INIT:        dbg_usbe(1,"---> INIT %s %d", device->name, event);        break;    case DEVICE_CREATE:        dbg_usbe(1,"---> CREATE %s %d", device->name, event);        {            struct usb_mouse_private *mouse_private;	    struct proc_dir_entry *pentry;            // There is no way to indicate error, so make this unconditional            // and undo it in the DESTROY event unconditionally as well.            // It the responsibility of the USBD core and the bus interface            // to see that there is a matching DESTROY for every CREATE.            if ((mouse_private = kmalloc(sizeof(struct usb_mouse_private),GFP_ATOMIC))==NULL) {                dbg_usbe(1,"---> CREATE malloc failed %s",device->name);                return;            }            mouse_private->device = device;	    mouse_private->duration = 0;	/* infinite */	    mouse_private->data_valid = 0;	    spin_lock_init(&mouse_private->lock);	    pentry = create_proc_entry(MOUSE_PROC_NAME, 0200, NULL);	    if (pentry) {		pentry->write_proc = mouse_write_proc;		pentry->data = mouse_private;	    }            function->privdata = mouse_private;            dbg_usbe(1,"---> START %s privdata assigned: %p", device->name, mouse_private);             return;        }        break;    case DEVICE_HUB_CONFIGURED:        break;    case DEVICE_RESET:        break;    case DEVICE_ADDRESS_ASSIGNED:        break;    case DEVICE_CONFIGURED:        dbg_usbe(1,"---> CONFIGURED %s %d", device->name, event);        break;    case DEVICE_SET_INTERFACE:        break;    case DEVICE_SET_FEATURE:        break;    case DEVICE_CLEAR_FEATURE:        break;    case DEVICE_DE_CONFIGURED:        dbg_usbe(1,"---> DECONFIGURED %s %d", device->name, event);        break;    case DEVICE_BUS_INACTIVE:        break;    case DEVICE_BUS_ACTIVITY:        break;    case DEVICE_POWER_INTERRUPTION:        break;    case DEVICE_HUB_RESET:        break;    case DEVICE_DESTROY:        dbg_usbe(1, "---> DESTROY %s %d", device->name, event);        {            struct usb_mouse_private *mouse_private;            if ((mouse_private = (device->function_instance_array+port)->privdata) == NULL) {                dbg_usbe(1, "---> DESTROY %s mouse_private null", device->name);                return;            }            dbg_usbe(1, "---> DESTROY %s mouse_private %p", device->name, mouse_private);            kfree(mouse_private);	    remove_proc_entry(MOUSE_PROC_NAME, NULL);            dbg_usbe(1,"---> STOP %s",device->name);             return;        }        break;    case DEVICE_FUNCTION_PRIVATE:        dbg_usbe(3, "%s", usbd_device_events[DEVICE_FUNCTION_PRIVATE]);        break;    }}static void mouse_function_exit(struct usb_device_instance *device){    dbg_init(1, "CLOSING **************************");    /* DEVICE_DESTROY will not called when bi driver unloaded.  Call here. */    mouse_event(device, DEVICE_DESTROY, 0);}struct usb_function_operations function_ops = {    event: mouse_event,    urb_sent: mouse_urb_sent,    recv_setup:mouse_recv_setup,    function_exit: mouse_function_exit,};struct usb_function_driver function_driver = {    name: "usbd mouse",    ops: &function_ops,    device_description: &mouse_device_description,    configurations: sizeof(mouse_description)/sizeof(struct usb_configuration_description),    configuration_description: mouse_description,    this_module: THIS_MODULE,};/* * mouse_modinit - module init * */static int __init mouse_modinit(void){    printk(KERN_INFO "%s (dbg=\"%s\")\n", __usbd_module_info, dbg?dbg:"");    if (vendor_id) {        mouse_device_description.idVendor = vendor_id;    }    if (product_id) {        mouse_device_description.idProduct = product_id;    }    printk(KERN_INFO "vendor_id: %04x product_id: %04x\n",	   mouse_device_description.idVendor,	   mouse_device_description.idProduct);    if (0 != scan_debug_options("mouse_fd",dbg_table,dbg)) {        return(-EINVAL);    }    // register us with the usb device support layer    //    if (usbd_register_function(&function_driver)) {        return -EINVAL;    }    // return    return 0;}/* mouse_modexit - module cleanup */static void __exit mouse_modexit(void){    // de-register us with the usb device support layer    //     usbd_deregister_function(&function_driver);}module_init(mouse_modinit);module_exit(mouse_modexit);/* * Local variables: * c-basic-offset: 4 * End: */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲婷婷在线视频| 亚洲精品在线三区| 国产精品一级片| 久久国产精品色婷婷| 亚洲成在人线免费| 亚洲国产成人av网| 性做久久久久久免费观看欧美| 日韩伦理av电影| 国产精品久久久久久久久免费桃花 | 91麻豆精品国产91久久久使用方法| 91日韩精品一区| 91久久线看在观草草青青| www.在线成人| 91国产福利在线| 欧美三片在线视频观看| 欧美在线观看你懂的| 欧美日免费三级在线| 欧美精品亚洲一区二区在线播放| 欧美丝袜丝交足nylons图片| 精品视频在线视频| 日韩一区二区精品葵司在线 | 亚洲最快最全在线视频| 悠悠色在线精品| 亚洲18色成人| 国产美女视频91| 成人国产精品免费观看视频| 国产91色综合久久免费分享| 美女久久久精品| 国产精品香蕉一区二区三区| bt欧美亚洲午夜电影天堂| 91国产视频在线观看| 欧美一级精品在线| 久久久久久久久免费| 亚洲色图都市小说| 视频在线在亚洲| 风流少妇一区二区| 欧美在线一区二区| 精品国产乱码久久| 综合分类小说区另类春色亚洲小说欧美| 亚洲黄网站在线观看| 久久精品国产亚洲高清剧情介绍 | 久久久久亚洲蜜桃| 亚洲同性gay激情无套| 亚洲不卡一区二区三区| 激情久久五月天| 一本久道中文字幕精品亚洲嫩| 欧美男人的天堂一二区| 国产三级久久久| 亚洲成人一二三| 成人国产精品免费| 日韩欧美一区在线| 亚洲视频综合在线| 国产一区二区在线观看视频| 色成年激情久久综合| 久久美女高清视频| 日韩精品福利网| 99久久婷婷国产综合精品| 日韩一区二区三区四区| 亚洲精品日产精品乱码不卡| 国产在线麻豆精品观看| 69成人精品免费视频| 中日韩av电影| 国产一区三区三区| 91精品国产色综合久久| 亚洲精品免费播放| 成人国产免费视频| 精品粉嫩aⅴ一区二区三区四区| 亚洲女与黑人做爰| 成人毛片老司机大片| 欧美第一区第二区| 五月天中文字幕一区二区| 五月天欧美精品| 欧美日韩一区不卡| 亚洲国产日韩a在线播放性色| 不卡一区二区三区四区| 国产三级精品视频| 国产河南妇女毛片精品久久久| 欧美成人精品福利| 美女网站在线免费欧美精品| 678五月天丁香亚洲综合网| 亚洲黄色小说网站| 在线一区二区三区四区五区| 亚洲人成网站影音先锋播放| 国产成人综合在线| 国产欧美日韩在线| 成人精品小蝌蚪| 国产精品麻豆欧美日韩ww| 成人自拍视频在线观看| 国产欧美日韩在线看| 成人免费视频网站在线观看| 中文字幕精品—区二区四季| 成人av动漫在线| 亚洲女与黑人做爰| 欧美调教femdomvk| 日韩精品亚洲一区二区三区免费| 91精品婷婷国产综合久久| 日韩av不卡在线观看| 日韩欧美电影一二三| 国产一二精品视频| 亚洲日本电影在线| 欧美日韩一区二区三区四区五区| 午夜视频在线观看一区二区三区| 欧美日本一区二区三区四区| 天堂午夜影视日韩欧美一区二区| 国产欧美日韩在线| 免费一级欧美片在线观看| 狠狠色综合色综合网络| 精品欧美一区二区三区精品久久 | 日韩精品一区二区三区中文精品| 秋霞成人午夜伦在线观看| 精品国产三级a在线观看| 高清不卡在线观看| 亚洲精品视频在线观看免费| 在线91免费看| 国产成人在线看| 亚洲自拍偷拍av| 精品sm捆绑视频| 91丨九色porny丨蝌蚪| 天堂久久一区二区三区| 国产欧美一区二区精品秋霞影院 | 欧美日韩一区不卡| 国产一区在线看| 一区二区三区在线观看网站| 欧美大片拔萝卜| 91久久精品一区二区二区| 久久精品免费看| 亚洲精品成人悠悠色影视| 欧美r级在线观看| 成人av在线一区二区| 蜜桃精品在线观看| 玉足女爽爽91| 中文子幕无线码一区tr| 欧美成人一区二区三区片免费| 色欧美片视频在线观看在线视频| 国产在线一区二区| 五月婷婷激情综合网| 亚洲天堂免费看| 国产亚洲精品久| 欧美乱熟臀69xxxxxx| 99在线精品一区二区三区| 精品一区二区三区视频在线观看| 一片黄亚洲嫩模| 综合分类小说区另类春色亚洲小说欧美| 欧美一级久久久| 欧美日韩国产中文| 成人av资源在线观看| 国产福利一区在线观看| 蜜桃精品在线观看| 日本怡春院一区二区| 亚洲图片欧美一区| 亚洲自拍欧美精品| 亚洲精品亚洲人成人网在线播放| 国产精品美女久久久久久久| 欧美精品一区二区三区视频| 欧美一区二区福利在线| 51精品秘密在线观看| 欧美视频在线观看一区二区| 97se亚洲国产综合自在线| 不卡大黄网站免费看| 99国产一区二区三精品乱码| 99久久精品免费| 97aⅴ精品视频一二三区| 成人福利视频在线看| www.性欧美| 一本一道久久a久久精品综合蜜臀| av电影天堂一区二区在线观看| 不卡一区二区中文字幕| av欧美精品.com| 99综合电影在线视频| 日本韩国一区二区| 色婷婷久久久综合中文字幕| 在线观看亚洲精品视频| 欧美最新大片在线看| 7777精品伊人久久久大香线蕉的 | 秋霞影院一区二区| 青青草国产精品97视觉盛宴| 麻豆免费看一区二区三区| 国产在线视频一区二区| 成人免费福利片| 在线区一区二视频| 欧美一二三区精品| 久久久99久久精品欧美| |精品福利一区二区三区| 一区二区三区免费看视频| 首页国产欧美久久| 国产一区二区不卡| 97se亚洲国产综合自在线不卡 | 欧美午夜电影一区| 日韩视频一区二区| 国产网站一区二区| 一区二区三区日韩欧美| 美女脱光内衣内裤视频久久网站| 国产成人一级电影| 欧美三级在线播放| 久久久久久久久久久黄色| 亚洲综合久久av| 国产最新精品免费| 欧美午夜电影在线播放| 久久亚洲私人国产精品va媚药| 日韩美女精品在线|