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

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

?? devices.c

?? Linux內(nèi)核源代碼 為壓縮文件 是<<Linux內(nèi)核>>一書中的源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* * devices.c * (C) Copyright 1999 Randy Dunlap. * (C) Copyright 1999,2000 Thomas Sailer <sailer@ife.ee.ethz.ch>. (proc file per device) * (C) Copyright 1999 Deti Fliegl (new USB architecture) * * $id$ * * 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; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * ************************************************************* * * <mountpoint>/devices contains USB topology, device, config, class, * interface, & endpoint data. * * I considered using /proc/bus/usb/devices/device# for each device * as it is attached or detached, but I didn't like this for some * reason -- maybe it's just too deep of a directory structure. * I also don't like looking in multiple places to gather and view * the data.  Having only one file for ./devices also prevents race * conditions that could arise if a program was reading device info * for devices that are being removed (unplugged).  (That is, the * program may find a directory for devnum_12 then try to open it, * but it was just unplugged, so the directory is now deleted. * But programs would just have to be prepared for situations like * this in any plug-and-play environment.) * * 1999-12-16: Thomas Sailer <sailer@ife.ee.ethz.ch> *   Converted the whole proc stuff to real *   read methods. Now not the whole device list needs to fit *   into one page, only the device list for one bus. *   Added a poll method to /proc/bus/usb/devices, to wake *   up an eventual usbd * 2000-01-04: Thomas Sailer <sailer@ife.ee.ethz.ch> *   Turned into its own filesystem * 2000-07-05: Ashley Montanaro <ashley@compsoc.man.ac.uk> *   Converted file reading routine to dump to buffer once *   per device, not per bus * * $Id: devices.c,v 1.5 2000/01/11 13:58:21 tom Exp $ */#include <linux/fs.h>#include <linux/mm.h>#include <linux/slab.h>#include <linux/poll.h>#include <linux/usb.h>#include <linux/smp_lock.h>#include <linux/usbdevice_fs.h>#include <asm/uaccess.h>#define MAX_TOPO_LEVEL		6/* Define ALLOW_SERIAL_NUMBER if you want to see the serial number of devices */#define ALLOW_SERIAL_NUMBERstatic char *format_topo =/* T:  Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=ddd MxCh=dd */  "T:  Bus=%2.2d Lev=%2.2d Prnt=%2.2d Port=%2.2d Cnt=%2.2d Dev#=%3d Spd=%3s MxCh=%2d\n";static char *format_string_manufacturer =/* S:  Manufacturer=xxxx */  "S:  Manufacturer=%.100s\n";static char *format_string_product =/* S:  Product=xxxx */  "S:  Product=%.100s\n";#ifdef ALLOW_SERIAL_NUMBERstatic char *format_string_serialnumber =/* S:  SerialNumber=xxxx */  "S:  SerialNumber=%.100s\n";#endifstatic char *format_bandwidth =/* B:  Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd */  "B:  Alloc=%3d/%3d us (%2d%%), #Int=%3d, #Iso=%3d\n";  static char *format_device1 =/* D:  Ver=xx.xx Cls=xx(sssss) Sub=xx Prot=xx MxPS=dd #Cfgs=dd */  "D:  Ver=%2x.%02x Cls=%02x(%-5s) Sub=%02x Prot=%02x MxPS=%2d #Cfgs=%3d\n";static char *format_device2 =/* P:  Vendor=xxxx ProdID=xxxx Rev=xx.xx */  "P:  Vendor=%04x ProdID=%04x Rev=%2x.%02x\n";static char *format_config =/* C:  #Ifs=dd Cfg#=dd Atr=xx MPwr=dddmA */  "C:%c #Ifs=%2d Cfg#=%2d Atr=%02x MxPwr=%3dmA\n";  static char *format_iface =/* I:  If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=xxxx*/  "I:  If#=%2d Alt=%2d #EPs=%2d Cls=%02x(%-5s) Sub=%02x Prot=%02x Driver=%s\n";static char *format_endpt =/* E:  Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddms */  "E:  Ad=%02x(%c) Atr=%02x(%-4s) MxPS=%4d Ivl=%3dms\n";/* * Need access to the driver and USB bus lists. * extern struct list_head usb_driver_list; * extern struct list_head usb_bus_list; * However, these will come from functions that return ptrs to each of them. */static DECLARE_WAIT_QUEUE_HEAD(deviceconndiscwq);static unsigned int conndiscevcnt = 0;/* this struct stores the poll state for <mountpoint>/devices pollers */struct usb_device_status {	unsigned int lastev;};struct class_info {	int class;	char *class_name;};static const struct class_info clas_info[] ={					/* max. 5 chars. per name string */	{USB_CLASS_PER_INTERFACE,	">ifc"},	{USB_CLASS_AUDIO,		"audio"},	{USB_CLASS_COMM,		"comm."},	{USB_CLASS_HID,			"HID"},	{USB_CLASS_HUB,			"hub"},	{USB_CLASS_PHYSICAL,		"PID"},	{USB_CLASS_PRINTER,		"print"},	{USB_CLASS_MASS_STORAGE,	"stor."},	{USB_CLASS_DATA,		"data"},	{USB_CLASS_APP_SPEC,		"app."},	{USB_CLASS_VENDOR_SPEC,		"vend."},	{-1,				"unk."}		/* leave as last */};/*****************************************************************/void usbdevfs_conn_disc_event(void){	wake_up(&deviceconndiscwq);	conndiscevcnt++;}static const char *class_decode(const int class){	int ix;	for (ix = 0; clas_info[ix].class != -1; ix++)		if (clas_info[ix].class == class)			break;	return (clas_info[ix].class_name);}static char *usb_dump_endpoint_descriptor(char *start, char *end, const struct usb_endpoint_descriptor *desc){	char *EndpointType [4] = {"Ctrl", "Isoc", "Bulk", "Int."};	if (start > end)		return start;	start += sprintf(start, format_endpt, desc->bEndpointAddress,			 (desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_CONTROL			 	? 'B' :			/* bidirectional */			 (desc->bEndpointAddress & USB_DIR_IN) ? 'I' : 'O',			 desc->bmAttributes, EndpointType[desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK],			 desc->wMaxPacketSize, desc->bInterval);	return start;}static char *usb_dump_endpoint(char *start, char *end, const struct usb_endpoint_descriptor *endpoint){	return usb_dump_endpoint_descriptor(start, end, endpoint);}static char *usb_dump_interface_descriptor(char *start, char *end, const struct usb_interface *iface, int setno){	struct usb_interface_descriptor *desc = &iface->altsetting[setno];	if (start > end)		return start;	start += sprintf(start, format_iface,			 desc->bInterfaceNumber,			 desc->bAlternateSetting,			 desc->bNumEndpoints,			 desc->bInterfaceClass,			 class_decode(desc->bInterfaceClass),			 desc->bInterfaceSubClass,			 desc->bInterfaceProtocol,			 iface->driver ? iface->driver->name : "(none)");	return start;}static char *usb_dump_interface(char *start, char *end, const struct usb_interface *iface, int setno){	struct usb_interface_descriptor *desc = &iface->altsetting[setno];	int i;	start = usb_dump_interface_descriptor(start, end, iface, setno);	for (i = 0; i < desc->bNumEndpoints; i++) {		if (start > end)			return start;		start = usb_dump_endpoint(start, end, desc->endpoint + i);	}	return start;}/* TBD: * 0. TBDs * 1. marking active config and ifaces (code lists all, but should mark *    which ones are active, if any) * 2. add <halted> status to each endpoint line */static char *usb_dump_config_descriptor(char *start, char *end, const struct usb_config_descriptor *desc, int active){	if (start > end)		return start;	start += sprintf(start, format_config,			 active ? '*' : ' ',	/* mark active/actual/current cfg. */			 desc->bNumInterfaces,			 desc->bConfigurationValue,			 desc->bmAttributes,			 desc->MaxPower * 2);	return start;}static char *usb_dump_config(char *start, char *end, const struct usb_config_descriptor *config, int active){	int i, j;	struct usb_interface *interface;	if (start > end)		return start;	if (!config)		/* getting these some in 2.3.7; none in 2.3.6 */		return start + sprintf(start, "(null Cfg. desc.)\n");	start = usb_dump_config_descriptor(start, end, config, active);	for (i = 0; i < config->bNumInterfaces; i++) {		interface = config->interface + i;		if (!interface)			break;		for (j = 0; j < interface->num_altsetting; j++) {			if (start > end)				return start;			start = usb_dump_interface(start, end, interface, j);		}	}	return start;}/* * Dump the different USB descriptors. */static char *usb_dump_device_descriptor(char *start, char *end, const struct usb_device_descriptor *desc){	if (start > end)		return start;	start += sprintf (start, format_device1,			  desc->bcdUSB >> 8, desc->bcdUSB & 0xff,			  desc->bDeviceClass,			  class_decode (desc->bDeviceClass),			  desc->bDeviceSubClass,			  desc->bDeviceProtocol,			  desc->bMaxPacketSize0,			  desc->bNumConfigurations);	if (start > end)		return start;	start += sprintf(start, format_device2,			 desc->idVendor, desc->idProduct,			 desc->bcdDevice >> 8, desc->bcdDevice & 0xff);	return start;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产91洋老外米糕| 奇米精品一区二区三区四区| 日日夜夜精品视频免费| 国产高清久久久| 97精品国产露脸对白| 欧美一区二区三区思思人| 国产欧美精品在线观看| 亚洲1区2区3区视频| 久国产精品韩国三级视频| 成人av电影在线| 欧美一区二区精美| 亚洲人吸女人奶水| 精品中文字幕一区二区小辣椒| 一本色道久久综合亚洲91| 久久综合九色综合97婷婷| 亚洲综合另类小说| 国产成人精品一区二区三区四区 | 国产精品午夜电影| 亚洲综合色自拍一区| 国产一区二区三区黄视频| 欧美日韩在线三区| 国产精品超碰97尤物18| 日韩专区欧美专区| 一本色道a无线码一区v| 久久综合999| 奇米四色…亚洲| 欧美三级资源在线| 一区二区中文视频| 国产传媒欧美日韩成人| 日韩欧美在线一区二区三区| 亚洲国产综合91精品麻豆| 成人国产精品视频| wwww国产精品欧美| 免费精品99久久国产综合精品| 日本韩国视频一区二区| 国产精品久久久久久一区二区三区| 久久av中文字幕片| 91精品国产综合久久久久久久| 久久久五月婷婷| 九九**精品视频免费播放| 欧美男人的天堂一二区| 一区二区三区四区高清精品免费观看| 粉嫩一区二区三区在线看| 亚洲精品在线三区| 久久av老司机精品网站导航| 在线这里只有精品| 亚洲黄色尤物视频| 91在线视频网址| 国产精品视频九色porn| 另类成人小视频在线| 日韩午夜激情av| 午夜精品免费在线观看| 欧美日韩高清一区二区| 亚洲一区二区中文在线| 99久久久久免费精品国产| 国产精品美女久久久久久2018| 国产成a人亚洲精| 欧美激情综合在线| 成人激情小说网站| 亚洲欧洲三级电影| caoporen国产精品视频| 亚洲视频资源在线| 99re66热这里只有精品3直播 | 在线亚洲高清视频| 亚洲日本成人在线观看| 91伊人久久大香线蕉| 亚洲人午夜精品天堂一二香蕉| 99re这里只有精品6| 一区二区三区久久| 欧美精品亚洲一区二区在线播放| 午夜精品久久久久久久久久久 | 亚洲成av人片在线| 欧美男人的天堂一二区| 久久国产尿小便嘘嘘尿| 久久综合成人精品亚洲另类欧美| www.日韩精品| 亚洲一区二区3| 欧美videos中文字幕| 成人免费精品视频| 午夜电影一区二区三区| 久久久国产精品麻豆| 日本久久一区二区| 麻豆精品精品国产自在97香蕉| 国产欧美一区二区三区网站 | 激情图区综合网| 中文字幕一区二区三区蜜月| 欧美情侣在线播放| 高清视频一区二区| 午夜电影网一区| 国产精品麻豆久久久| 5858s免费视频成人| 国产成人午夜精品5599| 一个色在线综合| www一区二区| 欧美日韩亚洲高清一区二区| 国产成人综合亚洲网站| 亚洲chinese男男1069| 欧美经典三级视频一区二区三区| 欧美人伦禁忌dvd放荡欲情| 成人国产免费视频| 免费看欧美美女黄的网站| 亚洲欧美一区二区三区久本道91 | 精品国产成人系列| 91久久奴性调教| 激情综合色综合久久综合| 亚洲精品视频一区二区| 26uuu国产在线精品一区二区| 欧日韩精品视频| 国产成人精品www牛牛影视| 视频在线观看一区| |精品福利一区二区三区| 日韩精品一区二区三区视频播放| 色婷婷亚洲婷婷| 国产东北露脸精品视频| 免费看日韩精品| 亚洲成国产人片在线观看| 最新成人av在线| 久久精品欧美日韩精品| 日韩欧美综合一区| 欧美日韩免费观看一区三区| 99麻豆久久久国产精品免费优播| 麻豆91在线观看| 亚洲成av人片观看| 亚洲黄色免费网站| 亚洲欧洲日本在线| 久久看人人爽人人| 精品日产卡一卡二卡麻豆| 欧美欧美欧美欧美首页| 色婷婷av一区| eeuss鲁片一区二区三区| 国产精品亚洲а∨天堂免在线| 美国三级日本三级久久99| 亚洲风情在线资源站| 亚洲日本免费电影| 国产精品久久久久影院老司| 久久久精品中文字幕麻豆发布| 欧美成人三级电影在线| 欧美久久免费观看| 在线观看欧美精品| 在线亚洲免费视频| 色婷婷综合激情| 一本大道久久a久久综合婷婷| 成人av综合一区| 夫妻av一区二区| 成人综合在线网站| 成人国产亚洲欧美成人综合网 | 午夜不卡av在线| 亚洲国产色一区| 亚洲综合另类小说| 亚洲一二三四在线| 夜夜爽夜夜爽精品视频| 亚洲精选视频在线| 亚洲欧美aⅴ...| 亚洲精品视频自拍| 亚洲与欧洲av电影| 亚洲v日本v欧美v久久精品| 午夜欧美在线一二页| 五月天亚洲婷婷| 日产国产欧美视频一区精品| 日一区二区三区| 奇米精品一区二区三区四区 | 国产最新精品免费| 韩国成人精品a∨在线观看| 国产乱码精品一区二区三| 久久超级碰视频| 国产精华液一区二区三区| 成人18视频日本| 色婷婷国产精品久久包臀 | 成人国产精品视频| 一本大道久久a久久精二百| 欧美主播一区二区三区| 欧美久久久一区| 精品国产3级a| 国产网站一区二区| 亚洲精选免费视频| 日韩精品欧美精品| 精品一区二区成人精品| 国产精品小仙女| 成人激情免费网站| 欧美亚洲国产一区二区三区va| 91麻豆精品国产91久久久更新时间 | 美女视频一区在线观看| 狠狠色丁香久久婷婷综合_中| 九九视频精品免费| 国产成人av电影在线| 日本高清无吗v一区| 欧美人与禽zozo性伦| 26uuu久久综合| 成人免费一区二区三区在线观看 | 久久久久国产成人精品亚洲午夜| 国产精品超碰97尤物18| 一区二区三区久久久| 九一久久久久久| 成人免费福利片| 欧美日韩免费高清一区色橹橹| 日韩欧美三级在线| 国产精品久久久一本精品| 婷婷成人激情在线网| 国产成人综合自拍| 欧美日韩亚洲综合一区二区三区|