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

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

?? skyeye_mach_s3c4510b.c

?? skyeye-1.0.0.rar surce code
?? C
字號:
/*

	skyeye_mach_s3c4510b.c - define machine s3c4510b for skyeye

	Copyright (C) 2003 Skyeye Develop Group

	for help please send mail to <skyeye-developer@lists.gro.clinux.org>

	

	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 

 

*/  

/*

 * 06/20/2005	move ethernet simulation to dev_net_s3c4510b.c

 * 		walimis <wlm@student.dlut.edu.cn>

 *

 * 9/05/2004	add ethernet controller support. 

 *		get patch from <telpro2003@yahoo.com.cn> 

 * 		walimis <wlm@student.dlut.edu.cn>

 *

 * 10/05/2003	correct interrupt support. now it can boot uclinux to invoke shell.

 * 		walimis <wlm@student.dlut.edu.cn>

 *

 * 7/21/2003	correct timer support.

 * 		now it can boot uclinux.

 * 		walimis <wlm@student.dlut.edu.cn>

 * 

 * 7/17/2003	add interrupt, timer and uart support.

 * 		walimis <wlm@student.dlut.edu.cn> 

 *

 * 3/28/2003 	init this file.

 * 		add machine s3c4510b's function.Most taken from original armio.c 

 * 		include: s3c4510b_mach_init, s3c4510b_io_do_cycle

 * 		s3c4510b_io_read_word, s3c4510b_io_write_word

 *		walimis <walimi@peoplemail.com.cn> 

 *		

 * */ 

#include "armdefs.h"

#include "s3c4510b.h"

//zzc:2005-1-1

#ifdef __CYGWIN__

//chy 2005-07-28
#include <time.h>
  struct timeval
{
  long tv_sec;
  long tv_usec;
};


#endif	/* 
 */
  
ARMword s3c4510b_io_read_word (ARMul_State * state, ARMword addr);

void s3c4510b_io_write_word (ARMul_State * state, ARMword addr,
			      ARMword data);



/* s3c4510b Internal IO Registers

 * */ 

  
typedef struct s3c4510b_io
{
  

    /*System Manager control */ 

  ARMword syscfg;
  
ARMword clkcon;
  


    /*Interrupt Controller Registers */ 

  ARMword intmod;
  
ARMword intpnd;
  
ARMword intmsk;
  
ARMword intoffset;
  
ARMword intpndtst;
  
ARMword intoset_fiq;
  
ARMword intoset_irq;
  


    /*UART Registers */ 

  ARMword ulcon0;
  
ARMword ulcon1;
  
ARMword ucon0;
  
ARMword ucon1;
  
ARMword ustat0;
  
ARMword ustat1;
  
ARMword utxbuf0;
  
ARMword utxbuf1;
  
ARMword urxbuf0;
  
ARMword urxbuf1;
  
ARMword ubrdiv0;
  
ARMword ubrdiv1;
  


    /*Timers Registers */ 

  ARMword tmod;
  
ARMword tdata0;
  
ARMword tdata1;
  
int tcnt0;
   
int tcnt1;
 

} s3c4510b_io_t;


static s3c4510b_io_t s3c4510b_io;



#define io s3c4510b_io

#define ENABLE_TIMER0 io.tmod & 0x1

#define ENABLE_TIMER1 io.tmod & 0x8

  


//extern int skyeye_net_on; 

static unsigned char mac_buf[4096];


static void
s3c4510b_update_int (ARMul_State * state) 

{
  
ARMword requests = io.intpnd & (~io.intmsk & INT_MASK_INIT);
  
state->NfiqSig = (requests & io.intmod) ? LOW : HIGH;
  
state->NirqSig = (requests & ~io.intmod) ? LOW : HIGH;

} 
static void
s3c4510b_set_interrupt (unsigned int irq) 

{
  
io.intpnd |= (1 << irq);

} 

static int 


s3c4510b_pending_intr (u32 interrupt) 

{
  
return ((io.intpnd & (1 << interrupt)));

}

static void 

s3c4510b_update_intr (void *mach) 

{
  
struct machine_config *mc = (struct machine_config *) mach;
  
ARMul_State * state = (ARMul_State *) mc->state;
  
s3c4510b_update_int (state);

} 

static void

s3c4510b_io_reset (ARMul_State * state) 

{
  
memset (&s3c4510b_io, 0, sizeof (s3c4510b_io));
  
io.syscfg = 0x37ffff91;
  
io.intmsk = INT_MASK_INIT;
  
io.intoffset = io.intoset_fiq = io.intoset_irq = 0x00000054;
  

io.ustat0 = io.ustat1 = 0xc0;
  
io.tcnt0 = io.tcnt1 = 0xffffffff;

};




/*s3c4510b io_do_cycle*/ 

  void
s3c4510b_io_do_cycle (ARMul_State * state) 

{
  
unsigned int t;
  
fd_set rfds;
  
struct timeval tv;
  
int maxfd;
  


    /*Timer */ 

    
if (ENABLE_TIMER0)
    {
      
io.tcnt0--;
      
if (io.tcnt0 < 0)
	{
	  
io.tcnt0 = io.tdata0;
	  
s3c4510b_set_interrupt (INT_TIMER0);
	  
s3c4510b_update_int (state);
	  
return;
	
}
    
}
  
if (ENABLE_TIMER1)
    {
      
if (--io.tcnt1 < 0)
	{
	  
io.tcnt1 = io.tdata1;
	  
s3c4510b_set_interrupt (INT_TIMER1);
	  
s3c4510b_update_int (state);
	
}
    
}
  
 /*UART*/ 
FD_SET (skyeye_config.uart.fd_in, &rfds);
  
maxfd = skyeye_config.uart.fd_in;
  
tv.tv_sec = 0;
  
tv.tv_usec = 0;
  
if (select (maxfd + 1, &rfds, NULL, NULL, &tv) > 0)
    {
      
if (FD_ISSET (skyeye_config.uart.fd_in, &rfds))
	{
	  
unsigned char buf;
	  
int n;
	  
n = read (skyeye_config.uart.fd_in, &buf, 1);
	  
if (n > 0)
	    {
	      

		//ctrl_c support,replace by ctrl_a

		if (buf == 1)
		buf = 3;
	      
io.urxbuf0 = io.urxbuf1 = (int) buf;
	      
io.ustat0 |= UART_LSR_DR;
	      
io.ustat1 |= UART_LSR_DR;
	      
if (!(io.intpnd & (1 << INT_UARTRX0))
		   || !(io.intpnd & (1 << INT_UARTRX1)))
		{
		  
if ((io.ucon0 & 0x3) == 0x1)
		    {
		      
s3c4510b_set_interrupt (INT_UARTRX0);
		      
s3c4510b_update_int (state);
		      
return;
		    
}
		  
if ((io.ucon1 & 0x3) == 0x1)
		    {
		      
s3c4510b_set_interrupt (INT_UARTRX1);
		      
s3c4510b_update_int (state);
		      
return;
		    
}
		
}
	    
}
	
}
    
}
  
s3c4510b_update_int (state);

}




/* IO Read Routine

 * */ 

  ARMword s3c4510b_io_read_byte (ARMul_State * state, ARMword addr) 

{
  

    //printf("SKYEYE: s3c4510b_io_read_byte error\n");

    s3c4510b_io_read_word (state, addr);

}


ARMword s3c4510b_io_read_halfword (ARMul_State * state, ARMword addr) 

{
  

    //printf("SKYEYE: s3c4510b_io_read_halfword error\n");

    s3c4510b_io_read_word (state, addr);

}


ARMword s3c4510b_io_read_word (ARMul_State * state, ARMword addr) 

{
  
ARMword data = -1;
  
switch (addr)
    {
    
case SYSCFG:
      
data = io.syscfg;
      
break;
    
case CLKCON:
      
data = io.clkcon;
      
break;
    
case INTMOD:
      
data = io.intmod;
      
break;
    
case INTPND:
      
data = io.intpnd;
      
break;
    
case INTMSK:
      
data = io.intmsk;
      
break;
    
case INTOFFSET:
    
case INTPNDTST:
      
data = io.intpndtst;
      
break;
    
case INTOSET_FIQ:
      
data = io.intoset_fiq;
      
break;
    
case INTOSET_IRQ:
      

      {
	

	  /*find which interrupt is pending */ 

	int i;
	
for (i = 0; i < 26; i++)
	  {
	    
if (io.intpnd & (1 << i))
	      
break;
	  
}
	
if (i < 26)
	  {
	    
data = (i << 2);
	  
}
	else
	  
data = 0x54;		/*no interrupt is pending, 0x54 is init data. */
      

}
      

	//data = io.intoset_irq;

	break;
    
 /*UART*/ 
case ULCON0:
      
data = io.ulcon0;
      
break;
    
case ULCON1:
      
data = io.ulcon1;
      
break;
    
case UCON0:
      
data = io.ucon0;
      
break;
    
case UCON1:
      
data = io.ucon1;
      
break;
    
case USTAT0:
      
data = io.ustat0;
      
io.ustat0 &= ~0xf;
      
break;
    
case USTAT1:
      
data = io.ustat1;
      
io.ustat1 &= ~0xf;
      
break;
      

	//case UTXBUF0:         

	//case UTXBUF1:         

    case URXBUF0:
      
data = io.urxbuf0;
      
io.ustat0 &= ~UART_LSR_DR;
      
break;
    
case URXBUF1:
      
data = io.urxbuf1;
      
io.ustat1 &= ~UART_LSR_DR;
      
break;
    
case UBRDIV0:
      
data = io.ubrdiv0;
      
break;
    
case UBRDIV1:
      
data = io.ubrdiv1;
      
break;
      

	/*Timer */ 

    case TMOD:
      
data = io.tmod;
      
break;
    
case TDATA0:
      
data = io.tdata0;
      
break;
    
case TDATA1:
      
data = io.tdata1;
      
break;
    
case TCNT0:
      
data = io.tcnt0;
      
break;
    
case TCNT1:
      
data = io.tcnt1;
      
break;
    
default:
      
SKYEYE_DBG ("%s (addr = 0x%08x)\n", __FUNCTION__, addr);
      
break;
    
}
  
return data;

}



/* IO Write Routine

 * */ 

  void
s3c4510b_io_write_byte (ARMul_State * state, ARMword addr, ARMword data) 

{
  

    //printf("SKYEYE: s3c4510b_io_write_byte error\n");

    s3c4510b_io_write_word (state, addr, data);

} 

void

s3c4510b_io_write_halfword (ARMul_State * state, ARMword addr, ARMword data) 

{
  

    //printf("SKYEYE: s3c4510b_io_write_halfword error\n");

    s3c4510b_io_write_word (state, addr, data);

} 

void

s3c4510b_io_write_word (ARMul_State * state, ARMword addr, ARMword data) 

{
  
switch (addr)
    {
    
case SYSCFG:
      
io.syscfg = data;
      
break;
    
case CLKCON:
      
io.clkcon = data;
      
break;
    
case INTMOD:
      
io.intmod = data;
      
break;
    
case INTPND:
      

	/*when write bit 1, we clear apropiate pendind bit.

	 * */ 

	io.intpnd &= (~data & INT_MASK_INIT);
      
break;
    
case INTMSK:
      
io.intmsk = data;
      
break;
    
case INTOFFSET:
    
case INTPNDTST:
      
io.intpndtst = io.intpnd = data;
      
break;
    
case INTOSET_FIQ:
      
io.intoset_fiq = data;
      
break;
    
case INTOSET_IRQ:
      
io.intoset_irq = data;
      
break;
    
 /*UART*/ 
case ULCON0:
      
io.ulcon0 = data;
      
break;
    
case ULCON1:
      
io.ulcon1 = data;
      
break;
    
case UCON0:
      
io.ucon0 = data;
      
break;
    
case UCON1:
      
io.ucon1 = data;
      
break;
    
case USTAT0:
      
io.ustat0 = data;
      
break;
    
case USTAT1:
      
io.ustat1 = data;
      
break;
    
case UTXBUF0:
      

      {
	
char c = data;
	
write (skyeye_config.uart.fd_out, &c, 1);
	
io.ustat0 |= (UART_LSR_THRE | UART_LSR_TEMT);
	
if ((io.ucon0 & 0xc) == 0xc)
	  {			/*enable interrupt */
	    
s3c4510b_set_interrupt (INT_UARTTX0);
	    
s3c4510b_update_int (state);
	  
}
      
}
      
break;
    
case UTXBUF1:
      
break;
    
case UBRDIV0:
      
io.ubrdiv0 = data;
      
break;
    
case UBRDIV1:
      
io.ubrdiv1 = data;
      
break;
      

	/*Timer */ 

    case TMOD:
      
io.tmod = data;
      
if (ENABLE_TIMER0)
	
io.tcnt0 = io.tdata0;
      
if (ENABLE_TIMER1)
	
io.tcnt1 = io.tdata1;
      
break;
    
case TDATA0:
      
if (!ENABLE_TIMER0)
	
io.tdata0 = data;
      

	/*we manually set tdata0 register,  uclinux's data is so big */ 

	io.tdata0 = 0xfff;
      
break;
    
case TDATA1:
      

	//if (!ENABLE_TIMER1)

	io.tdata1 = data;
      
break;
    
case TCNT0:
      
io.tcnt0 = data;
      
break;
    
case TCNT1:
      
io.tcnt1 = data;
      
break;
    
default:
      
SKYEYE_DBG ("%s(0x%08x) = 0x%08x\n", __FUNCTION__, addr, data);
      
break;
    

}

}


void
s3c4510b_mach_init (ARMul_State * state, machine_config_t * this_mach) 

{
  
ARMul_SelectProcessor (state, ARM_v4_Prop);
  
state->lateabtSig = HIGH;
  

this_mach->mach_io_do_cycle = s3c4510b_io_do_cycle;
  
this_mach->mach_io_reset = s3c4510b_io_reset;
  
this_mach->mach_io_read_word = s3c4510b_io_read_word;
  
this_mach->mach_io_write_word = s3c4510b_io_write_word;
  
this_mach->mach_io_read_halfword = s3c4510b_io_read_halfword;
  
this_mach->mach_io_write_halfword = s3c4510b_io_write_halfword;
  
this_mach->mach_io_read_byte = s3c4510b_io_read_byte;
  
this_mach->mach_io_write_byte = s3c4510b_io_write_byte;
  
this_mach->mach_update_int = s3c4510b_update_int;
  

this_mach->mach_set_intr = s3c4510b_set_interrupt;
  
this_mach->mach_pending_intr = s3c4510b_pending_intr;
  
this_mach->mach_update_intr = s3c4510b_update_intr;
  


    //this_mach->mach_mem_read_byte = s3c4510b_mem_read_byte;

    //this_mach->mach_mem_write_byte = s3c4510b_mem_write_byte;

    
this_mach->state = (void *) state;


} 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人aa大片| 亚洲免费观看视频| 午夜视频一区在线观看| 成人爱爱电影网址| 国产日韩综合av| 成人精品国产福利| 久久综合久久综合亚洲| 天堂精品中文字幕在线| 午夜精品福利久久久| 欧美一区二区三区四区高清| 亚洲综合成人在线视频| 91免费视频网| 日韩电影免费一区| 91 com成人网| 亚洲成人精品在线观看| 日韩成人精品在线| 日韩欧美国产综合在线一区二区三区| 亚洲国产一二三| 欧美午夜一区二区| 久久精品国产亚洲aⅴ| 欧美一区午夜精品| 麻豆一区二区三区| 91黄色免费网站| 免费看日韩精品| 91精品国产欧美一区二区成人| 性做久久久久久久久| 久久久久久久精| 丁香桃色午夜亚洲一区二区三区 | 国产精品乱码妇女bbbb| 国产乱人伦精品一区二区在线观看| 91精品在线一区二区| 麻豆国产欧美一区二区三区| 精品久久人人做人人爱| 美腿丝袜在线亚洲一区| 国产精品视频线看| 色一区在线观看| 亚洲国产精品欧美一二99| wwwwww.欧美系列| 粉嫩av一区二区三区粉嫩| 国产午夜精品一区二区三区视频| 成人性生交大片免费看中文 | 国产欧美精品一区二区色综合 | 久久夜色精品一区| 欧洲一区二区三区免费视频| 日韩二区三区四区| 久久久精品综合| 欧美精品久久99久久在免费线 | 久久噜噜亚洲综合| 国产成人精品午夜视频免费| 日本美女视频一区二区| 国产视频不卡一区| 色婷婷av一区二区三区gif| 亚洲色图欧洲色图婷婷| 久久精品一区二区| 91视频精品在这里| 日韩电影免费在线| 国产精品日产欧美久久久久| 欧美日韩夫妻久久| 国产精品羞羞答答xxdd| 国产精品久久久久久久久搜平片 | 国产成人三级在线观看| 中文字幕日韩av资源站| 欧美精品国产精品| 五月激情综合色| 久久久高清一区二区三区| 91久久精品日日躁夜夜躁欧美| 舔着乳尖日韩一区| 亚洲成人tv网| 国产精品福利一区二区| 欧美精品久久天天躁| 国产精品二三区| 国产偷国产偷亚洲高清人白洁| 欧美男同性恋视频网站| 成年人午夜久久久| 成人免费毛片app| 久久激情综合网| 一区二区三区美女视频| 色吊一区二区三区| 色94色欧美sute亚洲线路一久| 久久超级碰视频| 亚洲国产精品一区二区www在线| 一区二区三区四区中文字幕| 国产精品视频一区二区三区不卡| 日韩午夜电影av| 欧美电影免费观看高清完整版在线| 欧美日韩国产另类一区| 91丨九色丨蝌蚪丨老版| 国产.欧美.日韩| 福利视频网站一区二区三区| 日本不卡免费在线视频| 一区二区三区国产豹纹内裤在线| 日韩视频一区在线观看| 色综合久久久久网| 国产不卡一区视频| 久久福利资源站| 粉嫩高潮美女一区二区三区| 国产伦精品一区二区三区视频青涩| 日韩精品亚洲一区二区三区免费| 欧美视频一区二区三区四区| 欧美精品久久久久久久多人混战 | 成人综合婷婷国产精品久久蜜臀 | 91在线你懂得| 岛国一区二区三区| 色偷偷一区二区三区| 91在线码无精品| eeuss鲁一区二区三区| 国产麻豆欧美日韩一区| 不卡在线视频中文字幕| 国产suv精品一区二区6| 国产一区二区美女诱惑| 在线观看欧美黄色| 日韩一区二区精品葵司在线| 欧美精品免费视频| 欧美电影影音先锋| 国产91精品在线观看| 欧美日韩一区三区| 欧美日本在线视频| 欧美军同video69gay| 国产亚洲欧美一区在线观看| 国产欧美日韩一区二区三区在线观看| 精品国产凹凸成av人导航| 精品国产青草久久久久福利| 一区二区中文视频| 亚洲女同一区二区| 亚洲尤物在线视频观看| 亚洲私人黄色宅男| 国产一区二区免费在线| voyeur盗摄精品| 99re这里只有精品6| 精品视频一区二区不卡| 日韩欧美国产午夜精品| 久久久久九九视频| 中文字幕一区二区不卡| 韩国毛片一区二区三区| 亚洲国产精品久久久久婷婷884| 亚洲aⅴ怡春院| 国内精品不卡在线| 91污在线观看| 911精品国产一区二区在线| 色天天综合色天天久久| 91精品国产综合久久蜜臀| 欧美精品一区二区久久婷婷| www.亚洲激情.com| 国产亚洲欧美激情| 尤物视频一区二区| 热久久一区二区| 欧美日韩三级一区| 精品乱人伦一区二区三区| 亚洲三级理论片| 毛片av一区二区三区| 99国产一区二区三精品乱码| 国产91丝袜在线观看| www激情久久| 一区二区视频在线看| 日本大胆欧美人术艺术动态| 欧美怡红院视频| 国产亚洲福利社区一区| 亚洲日本在线a| 久久精品二区亚洲w码| 欧美成人aa大片| 一区二区三区免费网站| 国产乱码精品一区二区三区忘忧草 | 精品欧美一区二区三区精品久久| 一卡二卡三卡日韩欧美| 国产一区二区福利视频| 在线观看免费视频综合| 婷婷综合在线观看| 亚洲一区二区av电影| 日韩精品一卡二卡三卡四卡无卡| 国模冰冰炮一区二区| 国产网站一区二区三区| 国产一区二区三区电影在线观看| 久久免费电影网| gogogo免费视频观看亚洲一| 综合久久一区二区三区| 欧美精品久久天天躁| 国产最新精品免费| 亚洲久草在线视频| 精品成人一区二区三区四区| 99久久婷婷国产| 美女视频黄频大全不卡视频在线播放| 欧美国产1区2区| 日韩一区二区三区视频在线| a4yy欧美一区二区三区| 日本不卡视频在线| 亚洲视频在线一区观看| 日韩精品在线一区| 99久久久精品免费观看国产蜜| 日韩和的一区二区| 中文字幕精品三区| 91精品免费在线| 91麻豆产精品久久久久久 | 一区二区三区中文免费| 欧美一级搡bbbb搡bbbb| 99久久精品免费精品国产| 久久99国产精品免费网站| 亚洲精品高清视频在线观看| 久久久亚洲午夜电影| 欧美精品久久久久久久久老牛影院| 成人高清免费观看|