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

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

?? icap.c

?? fpga上的icap端口的驅(qū)動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
		size_t copy_length = local_buffer_copy_length > user_buffer_copy_length 			? user_buffer_copy_length : local_buffer_copy_length;		if(false) /* disable the next line */		printk("<2>\t\t%s: local = %8.8X, user = %8.8X, actual = %8.8X\n",hwicap_driver_name,			local_buffer_copy_length,user_buffer_copy_length,copy_length);		// transfer the next chunk from the user buffer		copy_from_user(local_buffer_pos,user_buffer_pos,copy_length);		if(false) /* disable the next line */		printk("<2>\t\t%s: copied %8.8X bytes from user buffer position %8.8X-%8.8X\n",			hwicap_driver_name,copy_length,user_buffer_pos-user_buffer_start+(int)*f_pos,			copy_length+user_buffer_pos-user_buffer_start+(int)*f_pos);		// walk through the state machine, deciding what to do with the local buffer data		local_buffer_end = local_buffer_pos + copy_length;		local_buffer_pos = local_buffer_start;		size_t processed_length = run_write_state_machine();		// if an error was detected, be sure to return it		if((int) processed_length < 0) return processed_length;		// copy any residual data to the beginning of the buffer		char* local_buffer_mark = local_buffer_pos;		local_buffer_pos = local_buffer_start;		if(false) /* disable the next line */		printk("<2>\t\t%s: moving %d bytes from local buffer position %8.8X to %8.8X\n",			hwicap_driver_name,local_buffer_end-local_buffer_mark,(unsigned int) local_buffer_mark,			(unsigned int) local_buffer_pos);		while(local_buffer_mark < local_buffer_end) *local_buffer_pos++ = *local_buffer_mark++;		// update the user buffer position		user_buffer_pos += copy_length;		// ensure that we don't flip out and hang up the machine		if(max_iterations++ > 10000) {			printk("<1>\t%s: aborted writing at %d iterations\n",hwicap_driver_name,max_iterations);			return count;		}	}	// update the file pointer	*f_pos += count;	// update the expected file pointer	expected_pos += count;	// and return the number of bytes written	return count;}// run the write state machinessize_t run_write_state_machine(void) {	// declare variables	int exit_loop = false;	int flush = false;	size_t bytes_wanted = 0;	char* ptr = NULL;	// declare static iterators	static char* field_start = NULL;	static char* field_pos = NULL;	static char* field_end = NULL;	static char field_divider = 0;	static int field_index = 0;	static char* field_length[5];	static char** field_bytes[5];	// run through the state machine as long as we still have input data	while(flush || (local_buffer_pos < local_buffer_end && !exit_loop)) {		// determine how many bytes remain		size_t bytes_available = local_buffer_end - local_buffer_pos;		// handle the current state		switch(write_state) {			// this special state is only used to collect field bytes			case FSM_WRITE_STATE_COLLECT:				// determine how many bytes we want				bytes_wanted = field_end - field_pos;				if(bytes_wanted > bytes_available) bytes_wanted = bytes_available;				while(bytes_wanted--) *field_pos++ = *local_buffer_pos++;				if(field_pos == field_end) write_state = next_write_state;				break;			case FSM_WRITE_STATE_START:				// initialize the field arrays				field_index = 0;				field_length[field_index] = (char*) &header.file_magic_length;				field_bytes[field_index] = &header.file_magic_bytes;				field_index++;				field_length[field_index] = (char*) &header.design_name_length;				field_bytes[field_index] = &header.design_name_bytes;				field_index++;				field_length[field_index] = (char*) &header.device_name_length;				field_bytes[field_index] = &header.device_name_bytes;				field_index++;				field_length[field_index] = (char*) &header.date_string_length;				field_bytes[field_index] = &header.date_string_bytes;				field_index++;				field_length[field_index] = (char*) &header.time_string_length;				field_bytes[field_index] = &header.time_string_bytes;				field_index++;				field_divider = 'a';				field_index = 0;				word_count = 0;				total_word_count = 0;				// prepare to collect the magic length				field_start = field_pos = (char*) &header.file_magic_length;				field_end = field_start + 2;				next_write_state = FSM_WRITE_STATE_MAGIC;				write_state = FSM_WRITE_STATE_COLLECT;				break;			case FSM_WRITE_STATE_MAGIC:				// check the magic length				if(header.file_magic_length != 9) return -EINVAL;				//printk("<2>\t\t%s: detected magic length\n",hwicap_driver_name);				// prepare to collect the magic				header.file_magic_bytes = kmalloc(header.file_magic_length,GFP_KERNEL);				if(header.file_magic_bytes == NULL) return -ENOMEM;				field_start = field_pos = header.file_magic_bytes;				field_end = field_start + header.file_magic_length;				next_write_state = FSM_WRITE_STATE_ZERO_ONE;				write_state = FSM_WRITE_STATE_COLLECT;				break;			case FSM_WRITE_STATE_ZERO_ONE:				// check the magic string				ptr = header.file_magic_bytes;				for(int i = 0;i < 4;i++) if(*ptr++ != 0x0f || *ptr++ != 0xf0) return -EINVAL;				if(*ptr != 0) return -EINVAL;				//printk("<2>\t\t%s: detected magic 0FF00FF00FF000\n",hwicap_driver_name);				// prepare to collect the zero-one string				field_start = field_pos = (char*) &header.zero_one;				field_end = field_start + 2;				next_write_state = FSM_WRITE_STATE_A;				write_state = FSM_WRITE_STATE_COLLECT;				break;			case FSM_WRITE_STATE_A:			case FSM_WRITE_STATE_B:			case FSM_WRITE_STATE_C:			case FSM_WRITE_STATE_D:			case FSM_WRITE_STATE_E:				// check the zero-one string				if(write_state == FSM_WRITE_STATE_A) {					if(header.zero_one != 1) return -EINVAL;					//printk("<2>\t\t%s: detected zero-one\n",hwicap_driver_name);				} else {					//printk("<2>\t\t%s: detected field %s\n",					//	hwicap_driver_name,*field_bytes[field_index]);				}				// check the field divider				if(*local_buffer_pos++ != field_divider) return -EINVAL;				field_divider++;				field_index++;				write_state++;				break;			case FSM_WRITE_STATE_DESIGN_LENGTH:			case FSM_WRITE_STATE_DEVICE_LENGTH:			case FSM_WRITE_STATE_DATE_LENGTH:			case FSM_WRITE_STATE_TIME_LENGTH:				// prepare to collect the field length				field_start = field_pos = field_length[field_index];				field_end = field_start + 2;				next_write_state = write_state + 1;				write_state = FSM_WRITE_STATE_COLLECT;				break;			case FSM_WRITE_STATE_DESIGN:			case FSM_WRITE_STATE_DEVICE:			case FSM_WRITE_STATE_DATE:			case FSM_WRITE_STATE_TIME:				// prepare to collect the field bytes				*field_bytes[field_index] = kmalloc(*(Xuint16*) field_length[field_index],GFP_KERNEL);				if(*field_bytes[field_index] == NULL) return -ENOMEM;				field_start = field_pos = *field_bytes[field_index];				field_end = field_start + *(Xuint16*) field_length[field_index];				next_write_state = write_state + 1;				write_state = FSM_WRITE_STATE_COLLECT;				break;			case FSM_WRITE_STATE_LENGTH:				// prepare to collect the length field				field_start = field_pos = (char*) &header.bitstream_length;				field_end = field_start + 4;				next_write_state = FSM_WRITE_STATE_FULL_HEADER;				write_state = FSM_WRITE_STATE_COLLECT;				break;			case FSM_WRITE_STATE_FULL_HEADER:				// provide user feedback				printk("<2>\t%s: %s, %s, %s, %s (%8.8X bytes)\n",hwicap_driver_name,					header.design_name_bytes,header.device_name_bytes,					header.date_string_bytes,header.time_string_bytes,					(int) header.bitstream_length);				write_state = FSM_WRITE_STATE_STREAM;				break;			case FSM_WRITE_STATE_STREAM:				// apply words from the word buffer to the ICAP port				if(word_count) {					if(false) /* disable the next line */					printk("<2>\t\t%s: writing %8.8X words to ICAP from %8.8X\n",						hwicap_driver_name,word_count,(unsigned int) word_buffer);					XStatus status = XHwIcap_SetConfiguration_Fixed(&xhwicap,word_buffer,word_count);					if(status != XST_SUCCESS) {						printk("<2>\t\t%s: XHwIcap_SetConfiguration() returned %d\n",							hwicap_driver_name,(int) status);					}					total_word_count += word_count;				}				if((total_word_count << 2) == header.bitstream_length) {					Xuint32 stat_reg = XHwIcap_GetConfigReg(&xhwicap,XHI_STAT);					printk("<2>\t%s: done writing %8.8X bytes: stat = %8.8X\n",						hwicap_driver_name,(int) header.bitstream_length,(int) stat_reg);					if(stat_reg & 1) printk("<2>\t%s: CRC error\n",hwicap_driver_name);					write_state = FSM_WRITE_STATE_NULL;					flush = false;					break;				}				// prepare to collect the bitstream words				field_start = field_pos = (char*) &word_buffer;				field_end = field_start + sizeof(word_buffer);				if(sizeof(word_buffer) > bytes_available) field_end = field_start + bytes_available;				field_end = (char*) ((int) field_end & ~0x03);				word_count = (field_end - field_start) >> 2;				next_write_state = write_state;				write_state = FSM_WRITE_STATE_COLLECT;				if(false) /* disable the next line */				printk("<2>\t\t%s: collecting %8.8X words from %8.8X to %8.8X\n",					hwicap_driver_name,(field_end - field_start) >> 2,(unsigned int) field_start,					(unsigned int) field_end);				if(bytes_available < 4) exit_loop = true;				break;			case FSM_WRITE_STATE_NULL:				printk("<2>\t%s: ignoring unexptected bytes\n",hwicap_driver_name);				local_buffer_pos = local_buffer_end;				break;		}		// be sure to flush the final words if this is the end of the bitstream		if(local_buffer_pos == local_buffer_end && write_state == FSM_WRITE_STATE_STREAM			&& ((total_word_count + word_count) << 2) == header.bitstream_length)			flush = true;	}	// return the amount of data that we processed	return local_buffer_pos - local_buffer_start;}// remap the base address of the XHwIcap structure to the appropriate virtual addressint XHwIcap_init_remap_baseaddress(XHwIcap *xhwicap) {	// if we have no mapped virtual base address, the device is not initialized	if(!hwicap_virt_ptr) return -ENODEV;	// set the mapped virtual base address and return success	xhwicap->BaseAddress = (Xuint32) hwicap_virt_ptr;	return 0;}// this function corrects and replaces XHwIcap_SetConfiguration provided with EDK#define XHI_BUFFER_START 0XStatus XHwIcap_SetConfiguration_Fixed(XHwIcap *InstancePtr, Xuint32 *Data,                                 Xuint32 Size){    XStatus Status;    Xint32 BufferCount=0;    Xint32 NumWrites=0;    Xboolean Dirty=XFALSE;    Xuint32 I;    /* Loop through all the data */    for (I=0,BufferCount=0;I<Size;I++)    {        /* Copy data to bram */        XHwIcap_StorageBufferWrite(InstancePtr, BufferCount, Data[I]);        Dirty=XTRUE;        if (BufferCount == XHI_MAX_BUFFER_INTS-1)        {            /* Write data to ICAP */            Status = XHwIcap_DeviceWrite(InstancePtr, XHI_BUFFER_START,                                         XHI_MAX_BUFFER_INTS);            if (Status != XST_SUCCESS)            {                return Status;            }            BufferCount=0;            NumWrites++;            Dirty=XFALSE;        } else        {         BufferCount++;        }    }   /* Write unwritten data to ICAP */   if (Dirty==XTRUE)   {      /* Write data to ICAP */      Status = XHwIcap_DeviceWrite(InstancePtr, XHI_BUFFER_START,                                    BufferCount);      return Status;   }   return XST_SUCCESS;};

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色丁香久久婷婷综合_中| 美女视频黄久久| 制服丝袜国产精品| 国产成人一级电影| 亚洲va欧美va人人爽| 欧美高清在线一区二区| 欧美一卡在线观看| 色婷婷亚洲综合| 国产成人亚洲精品狼色在线| 亚洲国产视频一区二区| 国产精品美女久久久久久久网站| 欧美日韩国产区一| 99re在线精品| 国产美女主播视频一区| 亚洲bt欧美bt精品| 亚洲三级电影网站| 国产日韩av一区| 日韩精品一区二区三区视频在线观看 | 一区二区三区国产精华| 国产午夜精品美女毛片视频| 欧美精品第1页| 91蜜桃免费观看视频| 成人精品鲁一区一区二区| 久久97超碰国产精品超碰| 亚洲成人1区2区| 一区二区在线观看免费视频播放| 久久久久97国产精华液好用吗| 欧美日韩精品一区二区三区蜜桃 | 欧美精品久久久久久久多人混战 | 欧美一区二区免费视频| 欧美私模裸体表演在线观看| 91在线视频网址| 波多野结衣中文字幕一区二区三区 | 久久免费午夜影院| 精品乱人伦小说| 日韩视频123| 日韩一区二区三区免费看| 欧美三级日韩三级| 欧美吞精做爰啪啪高潮| 欧美在线|欧美| 色94色欧美sute亚洲线路一久| 成人av在线资源| 国产99久久久久| 国产成人综合网站| 成人综合激情网| 国产91精品露脸国语对白| 国产精品88888| 国产精品亚洲视频| 粉嫩aⅴ一区二区三区四区| 岛国精品在线播放| 99视频精品在线| 色婷婷av一区二区三区软件| 欧美在线一二三| 欧美日韩国产小视频| 日韩欧美你懂的| 久久久精品国产免费观看同学| 国产亚洲女人久久久久毛片| 中文字幕欧美激情一区| 亚洲色图一区二区三区| 亚洲一区视频在线| 日本午夜一本久久久综合| 精品亚洲免费视频| heyzo一本久久综合| 91久久国产最好的精华液| 91精品综合久久久久久| 精品动漫一区二区三区在线观看| 久久久精品黄色| 日韩一区在线免费观看| 国产精品污污网站在线观看| 一区二区中文字幕在线| 亚洲丝袜美腿综合| 一区二区三区在线观看国产| 中文子幕无线码一区tr| 亚洲激情av在线| 午夜精品在线看| 五月天国产精品| 另类小说图片综合网| 国产裸体歌舞团一区二区| 粉嫩绯色av一区二区在线观看| eeuss鲁片一区二区三区 | 精品成人在线观看| 国产午夜久久久久| 中文字幕亚洲欧美在线不卡| 亚洲卡通欧美制服中文| 丝袜a∨在线一区二区三区不卡 | 国产传媒久久文化传媒| 91小视频在线观看| 欧美一区二区三区精品| 久久久不卡网国产精品二区| 国产精品国产自产拍在线| 亚洲图片一区二区| 裸体歌舞表演一区二区| 波波电影院一区二区三区| av日韩在线网站| 欧美人与z0zoxxxx视频| 一本久道中文字幕精品亚洲嫩| 欧美成人精品3d动漫h| 国产欧美一区视频| 一区二区国产盗摄色噜噜| 日本不卡视频一二三区| 国产91丝袜在线播放九色| 一本大道久久a久久综合婷婷| 欧美日韩国产精品自在自线| 久久久综合视频| 亚洲视频网在线直播| 亚洲va欧美va国产va天堂影院| 国产在线观看一区二区| 在线观看一区二区视频| 亚洲精品一区二区在线观看| 一区在线观看视频| 九九九精品视频| 色综合一区二区三区| 日韩欧美精品在线| 在线播放中文字幕一区| 国产日产亚洲精品系列| 日韩和欧美的一区| www.av精品| 日韩三级免费观看| 亚洲欧美日韩在线不卡| 国内精品国产成人| 成人免费毛片app| 3d动漫精品啪啪| 亚洲欧洲中文日韩久久av乱码| 精品一区二区在线视频| 97精品视频在线观看自产线路二| 欧美变态口味重另类| 一区二区三区精密机械公司| 大胆亚洲人体视频| 精品国产一区二区三区不卡| 免费亚洲电影在线| 欧美性极品少妇| 亚洲日本中文字幕区| 国产一区美女在线| 欧美一区二区三区四区五区| 亚洲精选视频免费看| 国产一区视频网站| 久久精品夜夜夜夜久久| 精品久久久久久久久久久久包黑料| 精品国产精品一区二区夜夜嗨| 亚洲老妇xxxxxx| 免费观看30秒视频久久| 一本色道综合亚洲| 中文字幕制服丝袜一区二区三区 | 五月婷婷激情综合| 91麻豆swag| 亚洲人成人一区二区在线观看| 国产福利一区二区三区在线视频| 日韩一区二区影院| 国产精品久久久久久久久免费桃花| 成人教育av在线| 久久精品亚洲乱码伦伦中文| 国产剧情在线观看一区二区| 日韩西西人体444www| 日本成人中文字幕在线视频| 欧美日韩国产一区| 亚洲三级免费电影| 欧美精品xxxxbbbb| 人妖欧美一区二区| 欧美一级免费观看| 麻豆91精品视频| 91精品在线免费| 久久国产精品一区二区| 精品美女一区二区| 国产在线视频一区二区| 国产午夜亚洲精品午夜鲁丝片| 亚洲国产日韩精品| 欧美一区二区视频在线观看| 日本在线不卡视频一二三区| 欧美日韩另类一区| 亚洲超丰满肉感bbw| 欧美一区二区三区男人的天堂| 日本成人中文字幕在线视频| 精品免费国产一区二区三区四区| 国产一区二区中文字幕| 国产片一区二区| 91碰在线视频| 亚洲成av人在线观看| 欧美mv日韩mv国产| 国产成人h网站| 亚洲免费观看高清完整| 欧美区视频在线观看| 蜜桃视频在线一区| 欧美激情一区二区三区四区| 色综合久久99| 麻豆视频一区二区| 国产精品免费av| 一本色道久久综合亚洲aⅴ蜜桃| 久久精品国产免费| 国产精品嫩草99a| 欧美性受xxxx| 国模套图日韩精品一区二区 | 成人aaaa免费全部观看| 日韩黄色小视频| 欧美极品aⅴ影院| 色猫猫国产区一区二在线视频| 美女高潮久久久| 国产精品久久夜| 欧美日韩日本视频| 国产一区二区三区精品视频| 亚洲天堂免费在线观看视频|