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

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

?? ib-pcmcia.c

?? linux下的無線寬帶驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* iBurst (TM) compatible driver for 2.6 Linux kernel. * based on the original ArrayComm (TM) iBurst (TM) driver. * Nicholas Jefferson <nicholas@pythontraining.com.au> * 11 May 2005 * * Ported to 2.6 Linux kernel by Nik Trevallyn-Jones. * Patches for 2.6.13 Linux kernel by Greg Cockburn and Scott McKenzie. * Patch for 2.6.16 Linux kernel by Daniel Burr. * Patch for 2.6.17 Linux kernel by Damian Ivereigh * Patch for sysfs by Scott McKenzie. * Fixes to support new hardware by Shane MacPhillamy. * * 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. */#include "ib-net.h"#include <asm/io.h>#include <linux/version.h>#include <pcmcia/cs_types.h>#include <pcmcia/cs.h>#include <pcmcia/cisreg.h>#include <pcmcia/cistpl.h>#include <pcmcia/ds.h>static int debug = 0;module_param(debug, int, 0);#define DEBUG(n, args...) if (debug < (n)) ; else printk(KERN_INFO args)/** * interval - poll interval (in milliseconds). */static int interval = 4;module_param(interval, int, 0);/** * io16 - PCMCIA 16 bit mode. */static int io16 = 0;module_param(io16, int, 0);/** * enum ib_pcmcia_ifstate - hardware interface state. */enum ib_pcmcia_ifstate{	IFSTATE_RESET = 0,	IFSTATE_WAIT = 1,	IFSTATE_NORMAL = 2,};/** * ib_pcmcia_offset - i/o mapped memory offsets. */enum ib_pcmcia_offset{	OFFSET_UT_MAGIC1 = 0x00,	OFFSET_UT_MAGIC2 = 0x01,	OFFSET_UT_SEQUENCE = 0x02,	OFFSET_UT_FEEDBACK = 0x03,	OFFSET_UT_JRX = 0x04,	OFFSET_UT_ITX = 0x05,	OFFSET_UT_PACKET = 0x06,	OFFSET_UT_STATUS = 0x07,	OFFSET_PC_MAGIC1 = 0x08,	OFFSET_PC_MAGIC2 = 0x09,	OFFSET_PC_SEQUENCE = 0x0a,	OFFSET_PC_FEEDBACK = 0x0b,	OFFSET_PC_JTX = 0x0c,	OFFSET_PC_IRX = 0x0d,	OFFSET_PC_PACKET = 0x0e,	OFFSET_PC_STATUS = 0x0f,	OFFSET_UT_ICHUNK = 0x10,	OFFSET_UT_NCHUNK = 0x11,	OFFSET_PC_JCHUNK = 0x12,	OFFSET_PC_NCHUNK = 0x13,	OFFSET_UT_ETHERNET = 0x1a,};/** * ib_pcmcia_local_t - PCMCIA device private state. * @dev: PCMCIA device state. * @node: network node. * @mem: i/o mapped memory. * @modem: corresponding modem state. * @timer: poll hardware. * @release: release configuration timer. * @ifstate: hardware state. * @sequence: hardware sync protocol. * @feedback: hardware sync protocol. * @rx_echunk: expected chunks (32 bytes) to receive. * @rx_ibuf: next index into rx_buf to use. * @rx_nbuf: packet length. * @tx_echunk: expected chunks (32 bytes) to transmit. * @tx_jbuf: next index into tx_buf to use. * @irx: most recent index into i/o mapped receive buffer. * @jtx: most recent index into i/o mapped transmit buffer. * @nreset: number of hardware resets. */struct ib_pcmcia_local_t {	struct pcmcia_device *dev;	struct dev_node_t node;	unsigned char *mem;	struct ib_net_modem_t *modem;	struct timer_list timer;	struct timer_list release;	enum ib_pcmcia_ifstate ifstate;	unsigned int sequence, feedback;	int rx_echunk, rx_ibuf, rx_nbuf;	int tx_echunk, tx_jbuf;	int irx, jtx;	int nreset;};/** * ib_pcmcia_dev_info - identifier for this driver. */static dev_info_t ib_pcmcia_dev_info = "iburst_cs";/** * ib_pcmcia_blit - the selected blit function. */static void (*ib_pcmcia_blit)(unsigned char*, unsigned char*, int);/** * ib_pcmcia_timer - poll hardware. * @_local: device private state. */static void ib_pcmcia_timer(unsigned long _local){	struct ib_pcmcia_local_t *local = (struct ib_pcmcia_local_t*) _local;	ib_net_schedule(local->modem);	local->timer.expires = jiffies + msecs_to_jiffies(interval);	local->timer.function = ib_pcmcia_timer;	local->timer.data = _local;	add_timer(&local->timer);}/** * ib_pcmcia_blit16 - blit chunks (32 bytes) 16 bits at a time. * @_dst: destination buffer. * @_src: source buffer. * @nchunk: chunk count. */static void ib_pcmcia_blit16(unsigned char *_dst, unsigned char *_src,		int nchunk){	uint16_t *dst = (uint16_t*) _dst;	uint16_t *src = (uint16_t*) _src;	while (nchunk--) {		dst[0] = src[0];		dst[1] = src[1];		dst[2] = src[2];		dst[3] = src[3];		dst[4] = src[4];		dst[5] = src[5];		dst[6] = src[6];		dst[7] = src[7];		dst[8] = src[8];		dst[9] = src[9];		dst[10] = src[10];		dst[11] = src[11];		dst[12] = src[12];		dst[13] = src[13];		dst[14] = src[14];		dst[15] = src[15];		dst += 16;		src += 16;	}}/** * ib_pcmcia_blit32 - blit chunks (32 bytes) 32 bits at a time. * @_dst: destination buffer. * @_src: source buffer. * @nchunk: chunk count. */static void ib_pcmcia_blit32(unsigned char *_dst, unsigned char *_src,		int nchunk){	uint32_t *dst = (uint32_t*) _dst;	uint32_t *src = (uint32_t*) _src;	while (1 < nchunk) {		dst[0] = src[0];		dst[1] = src[1];		dst[2] = src[2];		dst[3] = src[3];		dst[4] = src[4];		dst[5] = src[5];		dst[6] = src[6];		dst[7] = src[7];		dst[8] = src[8];		dst[9] = src[9];		dst[10] = src[10];		dst[11] = src[11];		dst[12] = src[12];		dst[13] = src[13];		dst[14] = src[14];		dst[15] = src[15];		dst += 16;		src += 16;		nchunk -= 2;	}	if (nchunk) {		dst[0] = src[0];		dst[1] = src[1];		dst[2] = src[2];		dst[3] = src[3];		dst[4] = src[4];		dst[5] = src[5];		dst[6] = src[6];		dst[7] = src[7];	}}/** * ib_pcmcia_release - release configuration. * @_local: device private state. */static void ib_pcmcia_release(unsigned long _local){	struct ib_pcmcia_local_t *local = (struct ib_pcmcia_local_t *) _local;	struct pcmcia_device *link = local->dev;	del_timer_sync(&local->timer);	ib_net_flush(local->modem);	iounmap(local->mem);	pcmcia_disable_device(link);}/** * ib_pcmcia_detach - detach device. * @link: device state. */static void ib_pcmcia_detach(struct pcmcia_device *link){	struct ib_pcmcia_local_t *local = link->priv;	del_timer_sync(&local->release);	ib_pcmcia_release((unsigned long) local);	if (local->modem)		ib_net_deregister(local->modem);	kfree(local);}/** * ib_pcmcia_reset - reset hardware protocol. *     called under ib_lock * @local: device private state. */static void ib_pcmcia_reset(struct ib_pcmcia_local_t *local){	struct ib_net_modem_t *modem = local->modem;	unsigned char *mem = local->mem;	unsigned int sequence, feedback;	mem[OFFSET_PC_MAGIC2] = 0x00;	mem[OFFSET_PC_MAGIC1] = 0x00;	sequence = mem[OFFSET_UT_SEQUENCE];	feedback = mem[OFFSET_UT_FEEDBACK];	if (local->nreset)		local->sequence = (feedback + 1) & 0xff;	else		local->sequence = (feedback + 7) & 0xff;	local->feedback = sequence;	mem[OFFSET_PC_SEQUENCE] = local->sequence;	mem[OFFSET_PC_FEEDBACK] = local->feedback;	mem[OFFSET_PC_IRX] = local->irx = 0;	mem[OFFSET_PC_JTX] = local->jtx = 0;	mem[OFFSET_PC_PACKET] = modem->stats.tx_packets & 0xff;	mem[OFFSET_PC_STATUS] = modem->pc_status;	mem[OFFSET_PC_MAGIC1] = 0xac;	mem[OFFSET_PC_MAGIC2] = 0x02;	local->ifstate = IFSTATE_WAIT;	local->nreset += 1;}/** * ib_pcmcia_check - check hardware consistent. *     called under ib_lock * @local: device private state. */static int ib_pcmcia_check(struct ib_pcmcia_local_t *local){	unsigned char *mem = local->mem;	if (mem[OFFSET_PC_MAGIC1] != 0xac || mem[OFFSET_PC_MAGIC2] != 0x02			|| mem[OFFSET_PC_SEQUENCE] != local->sequence			|| mem[OFFSET_PC_FEEDBACK] != local->feedback			|| mem[OFFSET_PC_IRX] != local->irx			|| mem[OFFSET_PC_JTX] != local->jtx) {		DEBUG(8, "ib-pcmcia: check %02X %02X %02X %02X "				"%02X %02X %02X %02X %02X %02X %02X %02X\n",				mem[OFFSET_PC_MAGIC1], mem[OFFSET_PC_MAGIC2],				mem[OFFSET_PC_PACKET], mem[OFFSET_PC_STATUS],				mem[OFFSET_PC_SEQUENCE], local->sequence,				mem[OFFSET_PC_FEEDBACK], local->feedback,				mem[OFFSET_PC_IRX], local->irx,				mem[OFFSET_PC_JTX], local->jtx);		ib_pcmcia_reset(local);		return 1;	}	return 0;}/** * ib_pcmcia_normal - normal operation; transfer chunks. *     called under ib_lock * @local: device private state. */static void ib_pcmcia_normal(struct ib_pcmcia_local_t *local){	struct ib_net_modem_t *modem = local->modem;	struct ib_net_radio_t *radio = (struct ib_net_radio_t*) modem->rx_buf;	unsigned char *mem = local->mem;	int irx, jrx, rx_ichunk, rx_nchunk;	int itx, jtx, tx_jchunk, tx_nchunk;	int nchunk, nbuf;	int packet;	if (ib_pcmcia_check(local))		return;	if (mem[OFFSET_UT_MAGIC1] != 0xac || mem[OFFSET_UT_MAGIC2] != 0x02			|| mem[OFFSET_UT_SEQUENCE] != local->feedback			|| mem[OFFSET_UT_FEEDBACK] != local->sequence) {		DEBUG(8, "ib-pcmcia: normal %02X %02X "				"%02X %02X %02X %02X\n",				mem[OFFSET_UT_MAGIC1], mem[OFFSET_UT_MAGIC2],				mem[OFFSET_UT_SEQUENCE], local->feedback,				mem[OFFSET_UT_FEEDBACK], local->sequence);		mem[OFFSET_PC_IRX] = local->irx = 0;		mem[OFFSET_PC_JTX] = local->jtx = 0;		local->ifstate = IFSTATE_WAIT;		return;	}	packet = modem->stats.tx_packets & 0xff;	ib_net_ut_status(modem, mem[OFFSET_UT_STATUS]);	if (mem[OFFSET_PC_PACKET] != packet)		mem[OFFSET_PC_PACKET] = packet;	if (mem[OFFSET_PC_STATUS] != modem->pc_status)		mem[OFFSET_PC_STATUS] = modem->pc_status;	rx_ichunk = mem[OFFSET_UT_ICHUNK];	rx_nchunk = mem[OFFSET_UT_NCHUNK];	tx_jchunk = mem[OFFSET_PC_JCHUNK];	tx_nchunk = mem[OFFSET_PC_NCHUNK];	if (rx_ichunk == 0 || rx_nchunk == 0)		goto failed;	if (tx_jchunk == 0 || tx_nchunk == 0)		goto failed;	if (tx_jchunk <= rx_ichunk && rx_ichunk < tx_jchunk + tx_nchunk)		goto failed;	if (rx_ichunk <= tx_jchunk && tx_jchunk < rx_ichunk + rx_nchunk)		goto failed;	if (0x80 < rx_ichunk + rx_nchunk || 0x80 < tx_jchunk + tx_nchunk)		goto failed;	while (1) {		irx = local->irx;		if (mem[OFFSET_PC_IRX] != irx)			goto failed;		jrx = mem[OFFSET_UT_JRX];		if (2 * rx_nchunk <= jrx)			goto failed;		if (irx == jrx)			break;		if (jrx < irx)			nchunk = jrx - irx + 2 * rx_nchunk;		else			nchunk = jrx - irx;		if (rx_nchunk < nchunk)			goto failed;		if (rx_nchunk <= irx)			irx -= rx_nchunk;		if (rx_nchunk - irx < nchunk)			nchunk = rx_nchunk - irx;		if (local->rx_echunk == 0) {			ib_pcmcia_blit(modem->rx_buf,					mem + ((rx_ichunk + irx) << 5), 1);			if (radio->word[0] & FLAG_EXTENSION)				goto failed;			nbuf = IB_NET_NBUF(radio->word[0], radio->word[1]);			if (nbuf < IB_NET_RADIO_HEAD)				goto failed;			if (IB_NET_RADIO_HEAD + ETH_DATA_LEN < nbuf)				goto failed;			local->irx += 1;			if (local->irx == 2 * rx_nchunk)				local->irx = 0;			mem[OFFSET_PC_IRX] = local->irx;			if (nbuf <= 32) {				ib_net_rx_parse(modem, nbuf);				continue;			}			local->rx_echunk = ((nbuf + 31) >> 5) - 1;			local->rx_ibuf = 32;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产禁国产网站cc| 国内精品第一页| 国产在线观看免费一区| 成人av资源在线观看| 欧美性猛交xxxxxxxx| 337p日本欧洲亚洲大胆色噜噜| 欧美伦理影视网| 成人免费一区二区三区在线观看 | 久久国内精品自在自线400部| 亚洲综合色自拍一区| 狠狠v欧美v日韩v亚洲ⅴ| 欧洲中文字幕精品| 国产精品国产三级国产三级人妇| 久久久高清一区二区三区| 国产欧美精品一区二区色综合朱莉| 亚洲精品在线观看网站| 精品成人免费观看| 亚洲国产精品av| 亚洲人成在线观看一区二区| 亚洲精品国产一区二区精华液| 亚洲精品视频自拍| 成人免费视频网站在线观看| 成人免费精品视频| 久久综合久久鬼色| 久久91精品久久久久久秒播| 国产成人综合网站| 日本一区二区三区电影| 自拍av一区二区三区| 国产成人av福利| 久久久亚洲欧洲日产国码αv| 国产欧美一区二区三区沐欲| 蜜臀av性久久久久蜜臀aⅴ| 精品视频1区2区| 亚洲成人第一页| 欧美精品1区2区| 天天综合天天综合色| 国内精品伊人久久久久av影院| 国产成人精品亚洲777人妖| 久久久久9999亚洲精品| 国产伦精一区二区三区| 久久欧美一区二区| 成人18精品视频| 亚洲男人都懂的| 欧美三级资源在线| 日韩精品乱码av一区二区| 欧美一卡二卡三卡| 日韩高清不卡一区二区| 欧美高清激情brazzers| 久久国产免费看| 国产视频911| 99精品欧美一区二区三区小说 | 成人免费一区二区三区视频| 成人福利视频网站| 91精品久久久久久久91蜜桃| 中文字幕日韩一区| 91免费视频网| 天天av天天翘天天综合网色鬼国产| 成人免费毛片app| 亚洲视频小说图片| 欧美日韩你懂的| 国产自产高清不卡| 亚洲精品国产无天堂网2021| 国产福利视频一区二区三区| 欧美一级搡bbbb搡bbbb| 国精产品一区一区三区mba桃花| 色噜噜狠狠一区二区三区果冻| 国产午夜精品久久| 欧美网站一区二区| 国产一区二区三区久久悠悠色av| 日韩午夜电影在线观看| 粉嫩aⅴ一区二区三区四区| 欧美tk丨vk视频| 欧美一区二区性放荡片| 国产成人免费视频| 午夜精品久久久久久久蜜桃app| 99国产精品国产精品久久| 日本特黄久久久高潮| 国产日韩成人精品| 国产成人精品亚洲日本在线桃色| 亚洲精品一区在线观看| 色女孩综合影院| 国模套图日韩精品一区二区| 日韩欧美的一区| 激情图区综合网| 亚洲图片一区二区| 国产精品久久久久久久久图文区 | 免费成人在线播放| 亚洲免费视频成人| 国产日韩精品一区二区三区| 国产精品一级在线| 日韩av电影天堂| 亚洲乱码精品一二三四区日韩在线| 99精品一区二区三区| 激情综合网天天干| 日本午夜精品一区二区三区电影| 91精品啪在线观看国产60岁| 99re成人精品视频| 国产69精品久久久久毛片| 另类综合日韩欧美亚洲| 国产欧美一区二区三区在线看蜜臀 | 久久综合久久鬼色| 日韩女优电影在线观看| 国产毛片精品国产一区二区三区| 欧美精品一区二区精品网| 7777精品久久久大香线蕉| 九九精品一区二区| 天天爽夜夜爽夜夜爽精品视频| 欧美一区二区在线免费播放| 在线观看欧美日本| 欧美在线小视频| 日本电影欧美片| 免费成人在线播放| 日本午夜一区二区| 美腿丝袜亚洲三区| 美女高潮久久久| 麻豆国产欧美一区二区三区| 国产欧美一区二区在线| 香港成人在线视频| 精品久久久久久综合日本欧美| 大白屁股一区二区视频| 一区二区三区久久| 亚洲一级二级在线| 精品国产免费人成在线观看| 日韩一区二区在线免费观看| 日韩一区二区三区电影在线观看| 国内精品第一页| 国产麻豆欧美日韩一区| 国产成a人无v码亚洲福利| 亚洲一区二区三区国产| 亚洲线精品一区二区三区| 丝袜美腿亚洲色图| 免费高清在线一区| 国产精品一区二区在线看| 床上的激情91.| 在线一区二区视频| 欧美军同video69gay| 欧美成人一区二区三区| 久久久久久99精品| 亚洲欧美在线观看| 水野朝阳av一区二区三区| 日产国产高清一区二区三区| 中文字幕佐山爱一区二区免费| 精品国产91乱码一区二区三区| 欧美综合视频在线观看| 欧美日韩高清在线播放| 色综合咪咪久久| 在线播放日韩导航| 国产视频一区不卡| 亚洲一二三区不卡| 九一久久久久久| 99久久综合色| 91麻豆精品国产综合久久久久久| 在线观看视频一区二区欧美日韩| 成人黄动漫网站免费app| 91官网在线观看| 欧美tickling网站挠脚心| 国产精品久久久久久久久图文区 | 久久亚洲综合av| 亚洲青青青在线视频| 日韩电影在线观看电影| 风间由美一区二区av101| 欧美日韩中字一区| 欧美体内she精视频| 精品久久久久久久人人人人传媒 | 99久久精品国产导航| 成人免费高清在线观看| 国产成人精品www牛牛影视| 欧美性大战xxxxx久久久| 日本乱码高清不卡字幕| 精品999久久久| 亚洲成人综合在线| 成人av网站大全| 精品美女被调教视频大全网站| 欧美成人bangbros| 亚洲一区在线播放| 欧美日韩精品电影| 亚洲色欲色欲www在线观看| 免费成人在线视频观看| 欧美老肥妇做.爰bbww视频| 国产精品美日韩| 国产一区在线看| 欧美一级一区二区| 亚洲福利一区二区| 日本道在线观看一区二区| 中文字幕中文字幕一区| 亚洲美腿欧美偷拍| 亚洲第一二三四区| 色天天综合色天天久久| 国产精品美女久久久久久久久久久 | 色就色 综合激情| 国产精品久久久久一区二区三区| 亚洲一区在线观看网站| av午夜一区麻豆| 中文字幕成人av| 国产成人精品免费看| 欧美国产日本韩| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲国产精品欧美一二99| 91原创在线视频| 67194成人在线观看|