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

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

?? rndis.c

?? omap3 linux 2.6 用nocc去除了冗余代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
			 __FUNCTION__, OID, buf_len);	}	return retval;}/* * Response Functions */static int rndis_init_response (int configNr, rndis_init_msg_type *buf){	rndis_init_cmplt_type	*resp;	rndis_resp_t            *r;	if (!rndis_per_dev_params [configNr].dev) return -ENOTSUPP;	r = rndis_add_response (configNr, sizeof (rndis_init_cmplt_type));	if (!r)		return -ENOMEM;	resp = (rndis_init_cmplt_type *) r->buf;	resp->MessageType = __constant_cpu_to_le32 (			REMOTE_NDIS_INITIALIZE_CMPLT);	resp->MessageLength = __constant_cpu_to_le32 (52);	resp->RequestID = buf->RequestID; /* Still LE in msg buffer */	resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);	resp->MajorVersion = __constant_cpu_to_le32 (RNDIS_MAJOR_VERSION);	resp->MinorVersion = __constant_cpu_to_le32 (RNDIS_MINOR_VERSION);	resp->DeviceFlags = __constant_cpu_to_le32 (RNDIS_DF_CONNECTIONLESS);	resp->Medium = __constant_cpu_to_le32 (RNDIS_MEDIUM_802_3);	resp->MaxPacketsPerTransfer = __constant_cpu_to_le32 (1);	resp->MaxTransferSize = cpu_to_le32 (		  rndis_per_dev_params [configNr].dev->mtu		+ sizeof (struct ethhdr)		+ sizeof (struct rndis_packet_msg_type)		+ 22);	resp->PacketAlignmentFactor = __constant_cpu_to_le32 (0);	resp->AFListOffset = __constant_cpu_to_le32 (0);	resp->AFListSize = __constant_cpu_to_le32 (0);	if (rndis_per_dev_params [configNr].ack)		rndis_per_dev_params [configNr].ack (			rndis_per_dev_params [configNr].dev);	return 0;}static int rndis_query_response (int configNr, rndis_query_msg_type *buf){	rndis_query_cmplt_type *resp;	rndis_resp_t            *r;	// DEBUG("%s: OID = %08X\n", __FUNCTION__, cpu_to_le32(buf->OID));	if (!rndis_per_dev_params [configNr].dev) return -ENOTSUPP;	/*	 * we need more memory:	 * gen_ndis_query_resp expects enough space for	 * rndis_query_cmplt_type followed by data.	 * oid_supported_list is the largest data reply	 */	r = rndis_add_response (configNr,		sizeof (oid_supported_list) + sizeof(rndis_query_cmplt_type));	if (!r)		return -ENOMEM;	resp = (rndis_query_cmplt_type *) r->buf;	resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_QUERY_CMPLT);	resp->RequestID = buf->RequestID; /* Still LE in msg buffer */	if (gen_ndis_query_resp (configNr, le32_to_cpu (buf->OID),			le32_to_cpu(buf->InformationBufferOffset)					+ 8 + (u8 *) buf,			le32_to_cpu(buf->InformationBufferLength),			r)) {		/* OID not supported */		resp->Status = __constant_cpu_to_le32 (				RNDIS_STATUS_NOT_SUPPORTED);		resp->MessageLength = __constant_cpu_to_le32 (sizeof *resp);		resp->InformationBufferLength = __constant_cpu_to_le32 (0);		resp->InformationBufferOffset = __constant_cpu_to_le32 (0);	} else		resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);	if (rndis_per_dev_params [configNr].ack)		rndis_per_dev_params [configNr].ack (			rndis_per_dev_params [configNr].dev);	return 0;}static int rndis_set_response (int configNr, rndis_set_msg_type *buf){	u32			BufLength, BufOffset;	rndis_set_cmplt_type	*resp;	rndis_resp_t		*r;	r = rndis_add_response (configNr, sizeof (rndis_set_cmplt_type));	if (!r)		return -ENOMEM;	resp = (rndis_set_cmplt_type *) r->buf;	BufLength = le32_to_cpu (buf->InformationBufferLength);	BufOffset = le32_to_cpu (buf->InformationBufferOffset);	resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_SET_CMPLT);	resp->MessageLength = __constant_cpu_to_le32 (16);	resp->RequestID = buf->RequestID; /* Still LE in msg buffer */	if (gen_ndis_set_resp (configNr, le32_to_cpu (buf->OID),			((u8 *) buf) + 8 + BufOffset, BufLength, r))		resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_NOT_SUPPORTED);	else		resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);	if (rndis_per_dev_params [configNr].ack)		rndis_per_dev_params [configNr].ack (			rndis_per_dev_params [configNr].dev);	return 0;}static int rndis_reset_response (int configNr, rndis_reset_msg_type *buf){	rndis_reset_cmplt_type	*resp;	rndis_resp_t		*r;	r = rndis_add_response (configNr, sizeof (rndis_reset_cmplt_type));	if (!r)		return -ENOMEM;	resp = (rndis_reset_cmplt_type *) r->buf;	resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_RESET_CMPLT);	resp->MessageLength = __constant_cpu_to_le32 (16);	resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);	/* resent information */	resp->AddressingReset = __constant_cpu_to_le32 (1);	if (rndis_per_dev_params [configNr].ack)		rndis_per_dev_params [configNr].ack (			rndis_per_dev_params [configNr].dev);	return 0;}static int rndis_keepalive_response (int configNr,				rndis_keepalive_msg_type *buf){	rndis_keepalive_cmplt_type	*resp;	rndis_resp_t			*r;	/* host "should" check only in RNDIS_DATA_INITIALIZED state */	r = rndis_add_response (configNr, sizeof (rndis_keepalive_cmplt_type));	if (!r)		return -ENOMEM;	resp = (rndis_keepalive_cmplt_type *) r->buf;	resp->MessageType = __constant_cpu_to_le32 (			REMOTE_NDIS_KEEPALIVE_CMPLT);	resp->MessageLength = __constant_cpu_to_le32 (16);	resp->RequestID = buf->RequestID; /* Still LE in msg buffer */	resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);	if (rndis_per_dev_params [configNr].ack)		rndis_per_dev_params [configNr].ack (			rndis_per_dev_params [configNr].dev);	return 0;}/* * Device to Host Comunication */static int rndis_indicate_status_msg (int configNr, u32 status){	rndis_indicate_status_msg_type	*resp;	rndis_resp_t			*r;	if (rndis_per_dev_params [configNr].state == RNDIS_UNINITIALIZED)		return -ENOTSUPP;	r = rndis_add_response (configNr,				sizeof (rndis_indicate_status_msg_type));	if (!r)		return -ENOMEM;	resp = (rndis_indicate_status_msg_type *) r->buf;	resp->MessageType = __constant_cpu_to_le32 (			REMOTE_NDIS_INDICATE_STATUS_MSG);	resp->MessageLength = __constant_cpu_to_le32 (20);	resp->Status = cpu_to_le32 (status);	resp->StatusBufferLength = __constant_cpu_to_le32 (0);	resp->StatusBufferOffset = __constant_cpu_to_le32 (0);	if (rndis_per_dev_params [configNr].ack)		rndis_per_dev_params [configNr].ack (			rndis_per_dev_params [configNr].dev);	return 0;}int rndis_signal_connect (int configNr){	rndis_per_dev_params [configNr].media_state			= NDIS_MEDIA_STATE_CONNECTED;	return rndis_indicate_status_msg (configNr,					  RNDIS_STATUS_MEDIA_CONNECT);}int rndis_signal_disconnect (int configNr){	rndis_per_dev_params [configNr].media_state			= NDIS_MEDIA_STATE_DISCONNECTED;	return rndis_indicate_status_msg (configNr,					  RNDIS_STATUS_MEDIA_DISCONNECT);}void rndis_uninit (int configNr){	u8 *buf;	u32 length;	if (configNr >= RNDIS_MAX_CONFIGS)		return;	rndis_per_dev_params [configNr].used = 0;	rndis_per_dev_params [configNr].state = RNDIS_UNINITIALIZED;	/* drain the response queue */	while ((buf = rndis_get_next_response(configNr, &length)))		rndis_free_response(configNr, buf);}void rndis_set_host_mac (int configNr, const u8 *addr){	rndis_per_dev_params [configNr].host_mac = addr;}/* * Message Parser */int rndis_msg_parser (u8 configNr, u8 *buf){	u32 MsgType, MsgLength;	__le32 *tmp;	struct rndis_params		*params;	if (!buf)		return -ENOMEM;	tmp = (__le32 *) buf;	MsgType   = le32_to_cpu(get_unaligned(tmp++));	MsgLength = le32_to_cpu(get_unaligned(tmp++));	if (configNr >= RNDIS_MAX_CONFIGS)		return -ENOTSUPP;	params = &rndis_per_dev_params [configNr];	/* NOTE: RNDIS is *EXTREMELY* chatty ... Windows constantly polls for	 * rx/tx statistics and link status, in addition to KEEPALIVE traffic	 * and normal HC level polling to see if there's any IN traffic.	 */	/* For USB: responses may take up to 10 seconds */	switch (MsgType) {	case REMOTE_NDIS_INITIALIZE_MSG:		DEBUG("%s: REMOTE_NDIS_INITIALIZE_MSG\n",			__FUNCTION__ );		params->state = RNDIS_INITIALIZED;		return  rndis_init_response (configNr,					(rndis_init_msg_type *) buf);	case REMOTE_NDIS_HALT_MSG:		DEBUG("%s: REMOTE_NDIS_HALT_MSG\n",			__FUNCTION__ );		params->state = RNDIS_UNINITIALIZED;		if (params->dev) {			netif_carrier_off (params->dev);			netif_stop_queue (params->dev);		}		return 0;	case REMOTE_NDIS_QUERY_MSG:		return rndis_query_response (configNr,					(rndis_query_msg_type *) buf);	case REMOTE_NDIS_SET_MSG:		return rndis_set_response (configNr,					(rndis_set_msg_type *) buf);	case REMOTE_NDIS_RESET_MSG:		DEBUG("%s: REMOTE_NDIS_RESET_MSG\n",			__FUNCTION__ );		return rndis_reset_response (configNr,					(rndis_reset_msg_type *) buf);	case REMOTE_NDIS_KEEPALIVE_MSG:		/* For USB: host does this every 5 seconds */		if (rndis_debug > 1)			DEBUG("%s: REMOTE_NDIS_KEEPALIVE_MSG\n",				__FUNCTION__ );		return rndis_keepalive_response (configNr,						 (rndis_keepalive_msg_type *)						 buf);	default:		/* At least Windows XP emits some undefined RNDIS messages.		 * In one case those messages seemed to relate to the host		 * suspending itself.		 */		printk (KERN_WARNING			"%s: unknown RNDIS message 0x%08X len %d\n",			__FUNCTION__ , MsgType, MsgLength);		{			unsigned i;			for (i = 0; i < MsgLength; i += 16) {				DEBUG ("%03d: "					" %02x %02x %02x %02x"					" %02x %02x %02x %02x"					" %02x %02x %02x %02x"					" %02x %02x %02x %02x"					"\n",					i,					buf[i], buf [i+1],						buf[i+2], buf[i+3],					buf[i+4], buf [i+5],						buf[i+6], buf[i+7],					buf[i+8], buf [i+9],						buf[i+10], buf[i+11],					buf[i+12], buf [i+13],						buf[i+14], buf[i+15]);			}		}		break;	}	return -ENOTSUPP;}int rndis_register (int (* rndis_control_ack) (struct net_device *)){	u8 i;	for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {		if (!rndis_per_dev_params [i].used) {			rndis_per_dev_params [i].used = 1;			rndis_per_dev_params [i].ack = rndis_control_ack;			DEBUG("%s: configNr = %d\n", __FUNCTION__, i);			return i;		}	}	DEBUG("failed\n");	return -1;}void rndis_deregister (int configNr){	DEBUG("%s: \n", __FUNCTION__ );	if (configNr >= RNDIS_MAX_CONFIGS) return;	rndis_per_dev_params [configNr].used = 0;	return;}int rndis_set_param_dev (u8 configNr, struct net_device *dev,			 struct net_device_stats *stats,			 u16 *cdc_filter){	DEBUG("%s:\n", __FUNCTION__ );	if (!dev || !stats) return -1;	if (configNr >= RNDIS_MAX_CONFIGS) return -1;	rndis_per_dev_params [configNr].dev = dev;	rndis_per_dev_params [configNr].stats = stats;	rndis_per_dev_params [configNr].filter = cdc_filter;	return 0;}int rndis_set_param_vendor (u8 configNr, u32 vendorID, const char *vendorDescr){	DEBUG("%s:\n", __FUNCTION__ );	if (!vendorDescr) return -1;	if (configNr >= RNDIS_MAX_CONFIGS) return -1;	rndis_per_dev_params [configNr].vendorID = vendorID;	rndis_per_dev_params [configNr].vendorDescr = vendorDescr;	return 0;}int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed){	DEBUG("%s: %u %u\n", __FUNCTION__, medium, speed);	if (configNr >= RNDIS_MAX_CONFIGS) return -1;	rndis_per_dev_params [configNr].medium = medium;	rndis_per_dev_params [configNr].speed = speed;	return 0;}void rndis_add_hdr (struct sk_buff *skb){	struct rndis_packet_msg_type	*header;	if (!skb)		return;	header = (void *) skb_push (skb, sizeof *header);	memset (header, 0, sizeof *header);	header->MessageType = __constant_cpu_to_le32(REMOTE_NDIS_PACKET_MSG);	header->MessageLength = cpu_to_le32(skb->len);	header->DataOffset = __constant_cpu_to_le32 (36);	header->DataLength = cpu_to_le32(skb->len - sizeof *header);}void rndis_free_response (int configNr, u8 *buf){	rndis_resp_t		*r;	struct list_head	*act, *tmp;	list_for_each_safe (act, tmp,			&(rndis_per_dev_params [configNr].resp_queue))	{		r = list_entry (act, rndis_resp_t, list);		if (r && r->buf == buf) {			list_del (&r->list);			kfree (r);		}	}}u8 *rndis_get_next_response (int configNr, u32 *length){	rndis_resp_t		*r;	struct list_head	*act, *tmp;	if (!length) return NULL;	list_for_each_safe (act, tmp,			&(rndis_per_dev_params [configNr].resp_queue))	{		r = list_entry (act, rndis_resp_t, list);		if (!r->send) {			r->send = 1;			*length = r->length;			return r->buf;		}	}	return NULL;}static rndis_resp_t *rndis_add_response (int configNr, u32 length){	rndis_resp_t	*r;	/* NOTE:  this gets copied into ether.c USB_BUFSIZ bytes ... */	r = kmalloc (sizeof (rndis_resp_t) + length, GFP_ATOMIC);	if (!r) return NULL;	r->buf = (u8 *) (r + 1);	r->length = length;	r->send = 0;	list_add_tail (&r->list,		&(rndis_per_dev_params [configNr].resp_queue));	return r;}int rndis_rm_hdr(struct sk_buff *skb){	/* tmp points to a struct rndis_packet_msg_type */	__le32		*tmp = (void *) skb->data;	/* MessageType, MessageLength */	if (__constant_cpu_to_le32(REMOTE_NDIS_PACKET_MSG)			!= get_unaligned(tmp++))		return -EINVAL;	tmp++;	/* DataOffset, DataLength */	if (!skb_pull(skb, le32_to_cpu(get_unaligned(tmp++))			+ 8 /* offset of DataOffset */))		return -EOVERFLOW;	skb_trim(skb, le32_to_cpu(get_unaligned(tmp++)));	return 0;}int __devinit rndis_init (void){	u8 i;	for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {		rndis_per_dev_params [i].confignr = i;		rndis_per_dev_params [i].used = 0;		rndis_per_dev_params [i].state = RNDIS_UNINITIALIZED;		rndis_per_dev_params [i].media_state				= NDIS_MEDIA_STATE_DISCONNECTED;		INIT_LIST_HEAD (&(rndis_per_dev_params [i].resp_queue));	}	return 0;}void rndis_exit (void){}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www欧美成人18+| 粉嫩av一区二区三区粉嫩| 国产资源在线一区| 99精品在线观看视频| 欧美日韩综合不卡| 久久久久久亚洲综合影院红桃| 国产精品黄色在线观看| 水蜜桃久久夜色精品一区的特点| 国产一区二区三区四区五区入口 | xvideos.蜜桃一区二区| 奇米色一区二区| 久久精品免费在线观看| 亚洲精品美腿丝袜| 激情综合网天天干| 色老汉一区二区三区| www成人在线观看| 亚洲激情网站免费观看| 精品一区二区三区久久| 91污片在线观看| 精品国产第一区二区三区观看体验| 亚洲欧美视频一区| 国产一区二区中文字幕| 欧美日韩国产一区二区三区地区| 欧美国产97人人爽人人喊| 日韩高清一区二区| 99久久综合国产精品| 欧美成人伊人久久综合网| 亚洲一区二区三区视频在线播放| 国产精品中文有码| 欧美一区二区福利在线| 亚洲精品欧美专区| 国产98色在线|日韩| 91麻豆精品国产自产在线| 亚洲欧洲国产日韩| 国产精品一级二级三级| 欧美一区二区三区精品| 亚洲综合一区二区| 高清不卡一二三区| 精品国产免费一区二区三区香蕉 | 欧美网站一区二区| 国产精品私房写真福利视频| 精品制服美女丁香| 欧美另类久久久品| 亚洲嫩草精品久久| 不卡一区在线观看| 久久久久久99精品| 狠狠色狠狠色综合系列| 3d成人动漫网站| 亚洲国产婷婷综合在线精品| 不卡的电视剧免费网站有什么| 久久久久久久av麻豆果冻| 久久99精品国产.久久久久| 欧美美女黄视频| 国产剧情一区二区三区| 在线不卡中文字幕| 亚洲成人av一区二区三区| 色女孩综合影院| 亚洲婷婷国产精品电影人久久| 高清不卡在线观看av| 久久久国产精华| 国产一区二区精品久久| 久久久三级国产网站| 狠狠色综合播放一区二区| 精品精品欲导航| 精品一区二区三区欧美| 日韩欧美综合在线| 强制捆绑调教一区二区| 这里只有精品电影| 麻豆91在线播放免费| 欧美成人免费网站| 国产一区二区三区四区五区入口| 亚洲精品一区二区三区四区高清| 久久福利资源站| 久久精品一区二区三区四区| 国产成人免费视频| 中文字幕一区二区不卡| 91在线视频免费观看| 亚洲乱码国产乱码精品精小说 | 一区二区日韩av| 欧美性大战久久久| 三级在线观看一区二区| 日韩午夜av电影| 另类小说视频一区二区| 久久毛片高清国产| 99久久精品国产毛片| 亚洲免费观看视频| 欧美美女网站色| 久久福利资源站| 欧美高清在线一区二区| 色综合中文综合网| 中文字幕不卡在线播放| 不卡视频在线看| 一区二区在线免费| 欧美精品123区| 久久99国产精品久久99果冻传媒| 久久影院午夜片一区| 成人久久久精品乱码一区二区三区| 成人免费在线视频观看| 欧美日韩一区二区在线观看| 男男gaygay亚洲| 国产日韩精品一区二区三区| 91亚洲精华国产精华精华液| 亚洲国产精品一区二区久久| 日韩亚洲欧美一区| 国产精品1区2区3区| 亚洲人成小说网站色在线| 91麻豆精品国产| 国产精品一区二区三区四区 | 欧美亚州韩日在线看免费版国语版| 三级成人在线视频| 久久精品综合网| 91成人在线精品| 精品亚洲国产成人av制服丝袜| 中文字幕一区二区三区在线播放 | 全国精品久久少妇| 国产日韩欧美a| 欧美日韩在线亚洲一区蜜芽| 国产一区美女在线| 亚洲精品自拍动漫在线| 精品国一区二区三区| 97精品视频在线观看自产线路二| 日韩va亚洲va欧美va久久| 亚洲国产精品国自产拍av| 欧美日韩一区成人| 成人小视频在线| 日本美女一区二区三区视频| 国产精品视频九色porn| 91精品国产乱码久久蜜臀| 9人人澡人人爽人人精品| 男女视频一区二区| 亚洲人成精品久久久久| 久久综合狠狠综合久久综合88 | 日韩中文字幕一区二区三区| 国产亚洲美州欧州综合国| 欧美精品日韩精品| 99视频国产精品| 国产乱子轮精品视频| 亚洲国产精品久久久久婷婷884| 久久久久成人黄色影片| 欧美日韩精品一区二区三区四区| 盗摄精品av一区二区三区| 日本不卡中文字幕| 亚洲在线一区二区三区| 国产精品欧美一区喷水| 精品国产成人在线影院| 91精品国模一区二区三区| 色一情一乱一乱一91av| 成人午夜又粗又硬又大| 精品一区二区影视| 婷婷国产在线综合| 一区二区三区四区在线播放| 国产精品欧美久久久久一区二区| 精品对白一区国产伦| 宅男噜噜噜66一区二区66| 欧美午夜片在线观看| 色先锋aa成人| av在线不卡电影| 国产精品88888| 国产在线不卡视频| 麻豆成人综合网| 午夜精品久久久久久久99樱桃| 亚洲天堂久久久久久久| 国产欧美一区二区三区鸳鸯浴| 欧美成人三级电影在线| 日韩视频免费观看高清完整版在线观看 | 欧美乱熟臀69xxxxxx| 色综合天天综合网国产成人综合天 | 欧美一区二区三区系列电影| 欧美婷婷六月丁香综合色| 在线视频一区二区三区| 色偷偷久久一区二区三区| 91蜜桃网址入口| 99国产精品久| 色综合久久66| 色94色欧美sute亚洲线路一ni| 97超碰欧美中文字幕| 97久久精品人人做人人爽50路| 99久久精品一区| 91在线观看视频| 91麻豆精品在线观看| 99久久99久久精品免费看蜜桃| 成人午夜av电影| 99国产精品久久久久久久久久久| 99久久精品国产网站| 色久综合一二码| 欧美亚洲日本一区| 欧美人与z0zoxxxx视频| 制服丝袜中文字幕亚洲| 欧美一级一级性生活免费录像| 欧美一二三四在线| 精品久久久久久久人人人人传媒| 欧美精品一区二区久久久| 久久久久久久久久美女| 国产日韩一级二级三级| 中文字幕一区二区三中文字幕| 亚洲欧美激情小说另类| 亚洲第一av色| 久久99精品国产麻豆婷婷洗澡| 国产在线视频一区二区三区| 成人高清视频在线观看|