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

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

?? h8.c

?? linux和2410結合開發 用他可以生成2410所需的zImage文件
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * Hitachi H8/337 Microcontroller driver * * The H8 is used to deal with the power and thermal environment * of a system. * * Fixes: *	June 1999, AV	added releasing /proc/driver/h8 *	Feb  2000, Borislav Deianov *			changed queues to use list.h instead of lists.h */#include <linux/config.h>#include <linux/module.h>#include <asm/system.h>#include <asm/segment.h>#include <asm/io.h>#include <linux/types.h>#include <linux/stddef.h>#include <linux/timer.h>#include <linux/fcntl.h>#include <linux/linkage.h>#include <linux/stat.h>#include <linux/proc_fs.h>#include <linux/miscdevice.h>#include <linux/list.h>#include <linux/ioport.h>#include <linux/poll.h>#include <linux/init.h>#include <linux/slab.h>#define __KERNEL_SYSCALLS__#include <asm/unistd.h>#include "h8.h"#define DEBUG_H8#ifdef DEBUG_H8#define Dprintk		printk#else#define Dprintk#endif#define XDprintk if(h8_debug==-1)printk/* * The h8 device is one of the misc char devices. */#define H8_MINOR_DEV   140/* * Forward declarations. */static int  h8_init(void);static int  h8_display_blank(void);static int  h8_display_unblank(void);static void  h8_intr(int irq, void *dev_id, struct pt_regs *regs);static int   h8_get_info(char *, char **, off_t, int);/* * Support Routines. */static void h8_hw_init(void);static void h8_start_new_cmd(void);static void h8_send_next_cmd_byte(void);static void h8_read_event_status(void);static void h8_sync(void);static void h8_q_cmd(u_char *, int, int);static void h8_cmd_done(h8_cmd_q_t *qp);static int  h8_alloc_queues(void);static u_long h8_get_cpu_speed(void);static int h8_get_curr_temp(u_char curr_temp[]);static void h8_get_max_temp(void);static void h8_get_upper_therm_thold(void);static void h8_set_upper_therm_thold(int);static int h8_get_ext_status(u_char stat_word[]);static int h8_monitor_thread(void *);static int h8_manage_therm(void);static void h8_set_cpu_speed(int speed_divisor);static void h8_start_monitor_timer(unsigned long secs);static void h8_activate_monitor(unsigned long unused);/* in arch/alpha/kernel/lca.c */extern void lca_clock_print(void);extern int  lca_get_clock(void);extern void lca_clock_fiddle(int);static void h8_set_event_mask(int);static void h8_clear_event_mask(int);/* * Driver structures */static struct timer_list h8_monitor_timer;static int h8_monitor_timer_active = 0;static char  driver_version[] = "X0.0";/* no spaces */static union	intr_buf intrbuf;static int	intr_buf_ptr;static union   intr_buf xx;	static u_char  last_temp;/* * I/O Macros for register reads and writes. */#define H8_READ(a) 	inb((a))#define H8_WRITE(d,a)	outb((d),(a))#define	H8_GET_STATUS	H8_READ((h8_base) + H8_STATUS_REG_OFF)#define H8_READ_DATA	H8_READ((h8_base) + H8_DATA_REG_OFF)#define WRITE_DATA(d)	H8_WRITE((d), h8_base + H8_DATA_REG_OFF)#define WRITE_CMD(d)	H8_WRITE((d), h8_base + H8_CMD_REG_OFF)static unsigned int h8_base = H8_BASE_ADDR;static unsigned int h8_irq = H8_IRQ;static unsigned int h8_state = H8_IDLE;static unsigned int h8_index = -1;static unsigned int h8_enabled = 0;static LIST_HEAD(h8_actq);static LIST_HEAD(h8_cmdq);static LIST_HEAD(h8_freeq);/*  * Globals used in thermal control of Alphabook1. */static int cpu_speed_divisor = -1;			static int h8_event_mask = 0;			static DECLARE_WAIT_QUEUE_HEAD(h8_monitor_wait);static unsigned int h8_command_mask = 0;static int h8_uthermal_threshold = DEFAULT_UTHERMAL_THRESHOLD;static int h8_uthermal_window = UTH_HYSTERESIS;		      static int h8_debug = 0xfffffdfc;static int h8_ldamp = MHZ_115;static int h8_udamp = MHZ_57;static u_char h8_current_temp = 0;static u_char h8_system_temp = 0;static int h8_sync_channel = 0;static DECLARE_WAIT_QUEUE_HEAD(h8_sync_wait);static int h8_init_performed;/* CPU speeds and clock divisor values */static int speed_tab[6] = {230, 153, 115, 57, 28, 14};  /* * H8 interrupt handler  */static void h8_intr(int irq, void *dev_id, struct pt_regs *regs){	u_char	stat_reg, data_reg;	h8_cmd_q_t *qp = list_entry(h8_actq.next, h8_cmd_q_t, link);	stat_reg = H8_GET_STATUS;	data_reg = H8_READ_DATA;	XDprintk("h8_intr: state %d status 0x%x data 0x%x\n", h8_state, stat_reg, data_reg);	switch (h8_state) {	  /* Response to an asynchronous event. */	case H8_IDLE: { /* H8_IDLE */	    if (stat_reg & H8_OFULL) {	        if (data_reg == H8_INTR) {		    h8_state = H8_INTR_MODE;		    /* Executing a command to determine what happened. */		    WRITE_CMD(H8_RD_EVENT_STATUS);		    intr_buf_ptr = 1;		    WRITE_CMD(H8_RD_EVENT_STATUS);		} else {		    Dprintk("h8_intr: idle stat 0x%x data 0x%x\n",			    stat_reg, data_reg);		}	    } else {	        Dprintk("h8_intr: bogus interrupt\n");	    }	    break;	}	case H8_INTR_MODE: { /* H8_INTR_MODE */	    XDprintk("H8 intr/intr_mode\n");	    if (data_reg == H8_BYTE_LEVEL_ACK) {	        return;	    } else if (data_reg == H8_CMD_ACK) {	        return;	    } else {	        intrbuf.byte[intr_buf_ptr] = data_reg;		if(!intr_buf_ptr) {		    h8_state = H8_IDLE;		    h8_read_event_status();		}		intr_buf_ptr--;	    }	    break;	}	/* Placed in this state by h8_start_new_cmd(). */	case H8_XMIT: { /* H8_XMIT */	    XDprintk("H8 intr/xmit\n");	    /* If a byte level acknowledgement has been received */	    if (data_reg == H8_BYTE_LEVEL_ACK) {	        XDprintk("H8 intr/xmit BYTE ACK\n");		qp->nacks++;		if (qp->nacks > qp->ncmd)		    if(h8_debug & 0x1)		        Dprintk("h8intr: bogus # of acks!\n");		/* 		 * If the number of bytes sent is less than the total 		 * number of bytes in the command.		 */ 		if (qp->cnt < qp->ncmd) {		    h8_send_next_cmd_byte();		}		return;		/* If the complete command has produced an acknowledgement. */	    } else if (data_reg == H8_CMD_ACK) {	        XDprintk("H8 intr/xmit CMD ACK\n");		/* If there are response bytes */		if (qp->nrsp)		    h8_state = H8_RCV;		else		    h8_state = H8_IDLE;		qp->cnt = 0;		return;		/* Error, need to start over with a clean slate. */	    } else if (data_reg == H8_NACK) {	        XDprintk("h8_intr: NACK received restarting command\n");		qp->nacks = 0;		qp->cnt = 0;		h8_state = H8_IDLE;		WRITE_CMD(H8_SYNC);		return;	    } else {	        Dprintk ("h8intr: xmit unknown data 0x%x \n", data_reg);		return;	    }	    break;	}	case H8_RESYNC: { /* H8_RESYNC */	    XDprintk("H8 intr/resync\n");	    if (data_reg == H8_BYTE_LEVEL_ACK) {	        return;	    } else if (data_reg == H8_SYNC_BYTE) {	        h8_state = H8_IDLE;		if (!list_empty(&h8_actq))		    h8_send_next_cmd_byte();	    } else {	        Dprintk ("h8_intr: resync unknown data 0x%x \n", data_reg);		return;	    }	    break;	} 	case H8_RCV: { /* H8_RCV */	    XDprintk("H8 intr/rcv\n");	    if (qp->cnt < qp->nrsp) {	        qp->rcvbuf[qp->cnt] = data_reg;		qp->cnt++;		/* If command reception finished. */		if (qp->cnt == qp->nrsp) {		    h8_state = H8_IDLE;		    list_del(&qp->link);		    h8_cmd_done (qp);		    /* More commands to send over? */		    if (!list_empty(&h8_cmdq))		        h8_start_new_cmd();		}		return;	    } else {	        Dprintk ("h8intr: rcv overflow cmd 0x%x\n", qp->cmdbuf[0]);	    }	    break;	}	default: /* default */	    Dprintk("H8 intr/unknown\n");	    break;	}	return;}static void __exit h8_cleanup (void){	remove_proc_entry("driver/h8", NULL);        release_region(h8_base, 8);        free_irq(h8_irq, NULL);}static int __init h8_init(void){        if(request_irq(h8_irq, h8_intr, SA_INTERRUPT, "h8", NULL))        {                printk(KERN_ERR "H8: error: IRQ %d is not free\n", h8_irq);                return -EIO;        }        printk(KERN_INFO "H8 at 0x%x IRQ %d\n", h8_base, h8_irq);        create_proc_info_entry("driver/h8", 0, NULL, h8_get_info);        request_region(h8_base, 8, "h8");	h8_alloc_queues();	h8_hw_init();	kernel_thread(h8_monitor_thread, NULL, 0);        return 0;}module_init(h8_init);module_exit(h8_cleanup);static void __init h8_hw_init(void){	u_char	buf[H8_MAX_CMD_SIZE];	/* set CPU speed to max for booting */	h8_set_cpu_speed(MHZ_230);	/*	 * Initialize the H8	 */	h8_sync();  /* activate interrupts */	/* To clear conditions left by console */	h8_read_event_status(); 	/* Perform a conditioning read */	buf[0] = H8_DEVICE_CONTROL;	buf[1] = 0xff;	buf[2] = 0x0;	h8_q_cmd(buf, 3, 1);	/* Turn on built-in and external mice, capture power switch */	buf[0] = H8_DEVICE_CONTROL;	buf[1] = 0x0;	buf[2] = H8_ENAB_INT_PTR | H8_ENAB_EXT_PTR |	       /*H8_DISAB_PWR_OFF_SW |*/ H8_ENAB_LOW_SPD_IND;	h8_q_cmd(buf, 3, 1);        h8_enabled = 1;	return;}static int h8_get_info(char *buf, char **start, off_t fpos, int length){#ifdef CONFIG_PROC_FS        char *p;        if (!h8_enabled)                return 0;        p = buf;        /*           0) Linux driver version (this will change if format changes)           1)            2)            3)           4)	*/                    p += sprintf(p, "%s \n",                     driver_version		     );        return p - buf;#else	return 0;#endif}/* Called from console driver -- must make sure h8_enabled. */static int h8_display_blank(void){#ifdef CONFIG_H8_DISPLAY_BLANK        int     error;        if (!h8_enabled)                return 0;        error = h8_set_display_power_state(H8_STATE_STANDBY);        if (error == H8_SUCCESS)                return 1;        h8_error("set display standby", error);#endif        return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产欧美久久久精品| 日本午夜精品视频在线观看 | 欧美一区二区国产| 亚欧色一区w666天堂| 欧美丰满少妇xxxxx高潮对白| 五月婷婷久久综合| 精品国产乱子伦一区| 欧美日韩成人高清| 久久精品噜噜噜成人av农村| 精品99999| av中文一区二区三区| 亚洲精品精品亚洲| 欧美老女人第四色| 蜜桃精品视频在线| 亚洲国产精品激情在线观看| av一二三不卡影片| 日韩精品国产欧美| 久久亚洲一级片| 不卡在线视频中文字幕| 亚洲国产精品视频| 精品国产sm最大网站| 不卡一区二区三区四区| 一区二区久久久| 日韩视频一区二区| 白白色 亚洲乱淫| 天天综合网 天天综合色| 国产亚洲1区2区3区| 欧美三级午夜理伦三级中视频| 奇米色一区二区三区四区| 中文字幕av一区二区三区高 | 一区二区三区小说| 日韩精品一区二区三区视频| 成人晚上爱看视频| 日本视频在线一区| 国产精品久久久久精k8 | 亚洲美女精品一区| 日韩欧美综合在线| 91成人在线精品| 国产在线不卡视频| 日韩一区精品视频| 自拍偷拍亚洲激情| 久久久www成人免费无遮挡大片 | 在线成人免费观看| 99re热视频精品| 久久精品国产精品亚洲精品| 亚洲免费观看高清完整版在线观看| 精品免费日韩av| 欧美色综合天天久久综合精品| 国产精品一卡二卡| 日韩成人av影视| 国产成人免费9x9x人网站视频| 午夜精品福利一区二区三区av| 中文字幕av在线一区二区三区| 欧美videofree性高清杂交| 91国偷自产一区二区开放时间 | 欧美一区午夜精品| 在线观看免费视频综合| 99精品欧美一区二区三区小说 | 爽好久久久欧美精品| 久久精品亚洲麻豆av一区二区| 久久综合狠狠综合久久激情| 色视频一区二区| 高清不卡在线观看av| 九色|91porny| 美女爽到高潮91| 天天亚洲美女在线视频| 亚洲蜜桃精久久久久久久| 成人免费在线视频观看| 欧美激情一区二区三区全黄| 国产午夜精品久久久久久免费视| 精品久久国产老人久久综合| 欧美一区在线视频| 日韩欧美一区二区视频| 日韩一级高清毛片| 日韩欧美黄色影院| 日韩欧美国产午夜精品| 日韩欧美一区在线| 日韩精品一区二区三区四区| 日韩欧美的一区| 欧美精品一区在线观看| 久久蜜臀精品av| 国产亚洲精品免费| 国产欧美精品一区aⅴ影院| 久久亚洲一区二区三区明星换脸| 精品一区二区三区免费播放| 欧美中文字幕久久| www.在线成人| 成人在线视频一区二区| 成人免费毛片片v| 91美女在线看| 欧美色图在线观看| 欧美日韩国产123区| 91精品国产91综合久久蜜臀| 精品va天堂亚洲国产| 国产午夜精品一区二区三区视频| 国产精品久久午夜夜伦鲁鲁| 亚洲日本在线天堂| 亚洲a一区二区| 久久国内精品自在自线400部| 国产精品影视在线观看| 成人av在线观| 欧美日韩成人高清| 亚洲精品一区二区精华| 国产一二三精品| 本田岬高潮一区二区三区| 色爱区综合激月婷婷| 欧美日本在线观看| 26uuu国产日韩综合| 亚洲欧美日韩小说| 欧美午夜电影网| 色婷婷av久久久久久久| 91一区二区三区在线播放| 在线国产电影不卡| 欧美成人国产一区二区| 国产情人综合久久777777| 尤物在线观看一区| 精品一区二区影视| 91麻豆精品在线观看| 91麻豆精品国产| 国产精品国产三级国产aⅴ中文 | 日韩三级在线免费观看| 日本一区二区成人| 视频一区二区中文字幕| 国产a视频精品免费观看| 欧美日韩视频在线一区二区| 久久久久9999亚洲精品| 婷婷丁香激情综合| 99视频精品全部免费在线| 日韩欧美aaaaaa| 91精品办公室少妇高潮对白| 欧美a级一区二区| 成人性视频网站| 欧美一区二区三区四区视频 | 中文av一区特黄| 肉丝袜脚交视频一区二区| 国产成a人亚洲精品| 777午夜精品视频在线播放| 欧美国产在线观看| 美女尤物国产一区| 在线亚洲一区二区| 国产欧美日韩精品a在线观看| 无码av免费一区二区三区试看| 成人午夜精品在线| 欧美精品一区二区高清在线观看| 亚洲一区二区三区四区五区中文| 国产成人午夜精品5599| 日韩女优制服丝袜电影| 日日骚欧美日韩| 欧美特级限制片免费在线观看| 国产精品久久久久婷婷二区次| 国产自产高清不卡| 欧美电视剧在线观看完整版| 亚洲午夜羞羞片| 在线观看免费一区| 亚洲欧美二区三区| 欧美卡1卡2卡| 午夜激情久久久| 大美女一区二区三区| 日韩三级伦理片妻子的秘密按摩| 亚洲最快最全在线视频| 色综合久久综合中文综合网| 国产精品夫妻自拍| 国产成人免费xxxxxxxx| 久久久亚洲欧洲日产国码αv| 另类专区欧美蜜桃臀第一页| 91精品国产免费| 婷婷综合久久一区二区三区| 欧美三级日韩三级| 午夜精品久久久久久久99水蜜桃 | 国内精品在线播放| 日韩美女在线视频 | 亚洲午夜久久久久久久久电影院| 91影院在线观看| 亚洲天堂a在线| 在线亚洲人成电影网站色www| 亚洲视频免费在线观看| 一本大道久久a久久综合| 亚洲一区成人在线| 91精品久久久久久久99蜜桃| 日韩电影在线一区二区三区| 蜜臂av日日欢夜夜爽一区| 欧美天天综合网| 午夜免费欧美电影| 欧美一卡2卡三卡4卡5免费| 捆绑变态av一区二区三区| 精品欧美乱码久久久久久1区2区| 国内成人自拍视频| 国产日韩综合av| 97精品久久久午夜一区二区三区| 亚洲精品网站在线观看| 欧美日韩国产大片| 国产原创一区二区三区| 国产精品欧美精品| 欧美日韩五月天| 狠狠色伊人亚洲综合成人| 欧美激情一区二区三区全黄 | 国产精品美女久久久久aⅴ国产馆| www.性欧美| 性欧美疯狂xxxxbbbb| 精品国产欧美一区二区|