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

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

?? fruid.c

?? Write Fruid in DOS system
?? C
?? 第 1 頁 / 共 2 頁
字號:
//********************************************************************
//*  Munich Update Motherboard FRUID Tool                            *
//********************************************************************
//*
//* Chipset:  NVDIA MCP55
//* EEPROM:   ATMEL AT24C64
//* Author:   Yuanjie Xu, ESBU/SW MiTAC Shanghai
//* Modifier: Jessie.Jing, SW2, ESBU, MiTAC Shanghai
//* 
//********************************************************************
//* Rev. Date        Description                                     *
//********************************************************************
//* 0.1  2006-06-19  Initial version
//* 1.0  2007-04-29  Check whether burning time is earlier than 2005

#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <mem.h>
#include <conio.h>
#pragma inline

extern unsigned _floatconvert;
#pragma extref _floatconvert

#define inb_p(p)		inportb(p)
#define outb_p(v, p)	outportb(p, v)

typedef unsigned char		BYTE;
typedef unsigned short		WORD;
typedef unsigned long		u32;
typedef unsigned long long 	u64;

typedef long uint32_t;
typedef unsigned bool;

#define	FALSE 0
#define	TRUE  1

static u32 smbus_base_addr = 0;
static u32 smbus_base_offset = 0;
static u32 smbus_value_bit = 0;

struct smbus_controller
{
	u32 pci_id;
	u32 base_offset;
	u32 value_bit;
};


static struct smbus_controller smbus_controller_list[] = 
{
	{ 0x25a48086, 0x20, 0xffe0}, //Hance Rapids ICH SMBus Controller
	{ 0x24838086, 0x20, 0xffe0}, //ICH3 SMBus Controller
	{ 0x005210de, 0x24, 0xffff}, //CK804 SMBus Controller, NVDIA
	{ 0x036810de, 0x24, 0xffff}, //MCP55 SMBus Controller, NVDIA
	{ 0, 0, 0},
};

/*SMBus address offsets */
#define PRTCL  (smbus_base_addr + 0)
#define STS    (smbus_base_addr + 1)
#define ADDR   (smbus_base_addr + 2)
#define CMD    (smbus_base_addr + 3)
#define DATA0  (smbus_base_addr + 4)
#define DATA1  (smbus_base_addr + 5)

#define FruSize 0x2000

struct Fru_table
{
   char            *Field_descript;
   WORD            Location;
   unsigned        Length;
};

/*Fru Table for Motherboard or FPB*/
struct Fru_table FruTable_MFS[] = {
	{"UNIX_Timestamp32"     , 0x1F37 , 4 },
	{"FRUID_Info"           , 0x1F3B , 29},
	{"Manufacture_Loc"      , 0x1F8B , 64},
	{"Sun_Part_No"          , 0x1FCB , 7 },
	{"Sun_Serial_No"        , 0x1FD2 , 6 },
	{"Vendor_Name"          , 0x1FD8 , 2 },
	{"Initial_HW_Rev_Level" , 0x1FDC , 2 },
	{"FRUID_Source_BIN_Info", 0x1FF0 , 11},
	{"CRC"                  , 0x1F33 , 200},
	{"CRC32"                , 0x1FFC , 4 },
	{NULL,0,0}
};

/*Fru Table for SAS SBP, chicago*/
struct Fru_table FruTable_CS[] = {
	{"UNIX_Timestamp32"     , 0x1F34 , 4 },
	{"FRUID_Info"           , 0x1F38 , 29},
	{"Manufacture_Loc"      , 0x1F88 , 64},
	{"Sun_Part_No"          , 0x1FC8 , 7 },
	{"Sun_Serial_No"        , 0x1FCF , 6 },
	{"Vendor_Name"          , 0x1FD5 , 2 },
	{"Initial_HW_Rev_Level" , 0x1FD9 , 2 },
	{"FRUID_Source_BIN_Info", 0x1FED , 11},
	{"CRC"                  , 0x1F30 , 203},
	{"CRC32"                , 0x1FFC , 4 },
	{NULL,0,0}
};

struct Fru_table *fru=NULL;

WORD CRClength;
BYTE FruBuffer[FruSize];

/* CRC Model Abstract Type */
/* ----------------------- */
/* The following type stores the context of an executing instance of the */
/* model algorithm. Most of the fields are model parameters which must be */
/* set before the first initializing call to cm_ini. */
typedef struct
{
        int cm_width; /* Parameter: Width in bits [8,32]. */
        uint32_t cm_poly; /* Parameter: The algorithm's polynomial. */
        uint32_t cm_init; /* Parameter: Initial register value. */
        bool cm_refin; /* Parameter: Reflect input bytes? */
        bool cm_refot; /* Parameter: Reflect output CRC? */
        uint32_t cm_xorot; /* Parameter: XOR this to output CRC. */

        uint32_t cm_reg; /* Context: Context during execution. */
} cm_t;
typedef cm_t *p_cm_t;


/* The following definitions make the code more readable. */

#define BITMASK(X) (1L << (X))

static uint32_t reflect(uint32_t v, int b)
/* Returns the value v with the bottom b [0,32] bits reflected. */
/* Example: reflect(0x3e23L,3) == 0x3e26 */
{
        int i;
        uint32_t t = v;
        for (i = 0; i < b; i++) {
                if (t & 1L)
                        v |=  BITMASK((b-1)-i);
                else
                        v &= ~BITMASK((b-1)-i);
                t >>= 1;
        }
        return (v);
}

static uint32_t widmask(p_cm_t p_cm)
/* Returns a longword whose value is (2^p_cm->cm_width)-1. */
/* The trick is to do this portably (e.g. without doing <<32). */
{
        return ((((1L<<(p_cm->cm_width-1))-1L)<<1)|1L);
}

//void outb_p(int value, int addr);
//unsigned int inb_p(int addr);

u32 pcibios_read_config_dword(u32 busnum, u32 devnum, u32 funnum, u32 regnum);
int probe_smbus (u32 pci_id);
int get_smbus_addr (void);
BYTE i2c_read_word(WORD offset1);
void  i2c_write_word(WORD offset, BYTE data);

void cm_ini(p_cm_t p_cm);
void cm_nxt(p_cm_t p_cm, int ch);
uint32_t cm_crc(p_cm_t p_cm);
uint32_t compute_crc32(BYTE *bytes, int length);

void Display_All_Context(void);
void Update_Binfile(void);
int Update_time(void);
void Update_Serial_NO(void);
void Update_CRC32(void);
void DoubleCheck_CRC32(void);

void Check_Info(void);
void Check_time(void);
void Check_ManuLoc(void);
void Check_PN(void);
void Check_SN(void);
void Check_VendorName(void);
void Check_HW_Rev_Lev(void);
void Check_bin_info(void);
int Check_CRC32(void);

void usage(void);


void cm_ini(p_cm_t p_cm)
{
	p_cm->cm_reg = p_cm->cm_init;
}

void cm_nxt(p_cm_t p_cm, int ch)
{
	int i;
	uint32_t uch = (uint32_t)ch;
	uint32_t topbit = BITMASK(p_cm->cm_width-1);

	if (p_cm->cm_refin)
		uch = reflect(uch, 8);

	p_cm->cm_reg ^= (uch << (p_cm->cm_width-8));
	for (i = 0; i < 8; i++) {
		if (p_cm->cm_reg & topbit)
			p_cm->cm_reg = (p_cm->cm_reg << 1) ^ p_cm->cm_poly;
		else
			p_cm->cm_reg <<= 1;

		p_cm->cm_reg &= widmask(p_cm);
	}
}

uint32_t cm_crc(p_cm_t p_cm)
{
	if (p_cm->cm_refot)
		return (p_cm->cm_xorot ^ reflect(p_cm->cm_reg, p_cm->cm_width));
	else
		return (p_cm->cm_xorot ^ p_cm->cm_reg);
}

uint32_t compute_crc32(BYTE *bytes, int length)
{
	cm_t crc_mdl;
	p_cm_t p_crc;
	int i;
	uint32_t aCRC;

	p_crc = &crc_mdl;

	p_crc->cm_width = 32;
	p_crc->cm_poly = 0x04c11db7;
	p_crc->cm_init = 0xffffffff;
	p_crc->cm_refin = TRUE;
	p_crc->cm_refot = TRUE;
	p_crc->cm_xorot = 0xffffffff;

	cm_ini(p_crc);

	for (i = 0; i < length; i++)
	{
		cm_nxt(p_crc, bytes[i]);
	}

	aCRC = (uint32_t)cm_crc(p_crc);

	return (aCRC);
}

static BYTE slave_addr;
BYTE Low128_Bufer[128],Hi128_Bufer[128],buffer[265];
char SFileName[20];  //source file
char TSFileName[20]; //target file
char SN_number[7];
char compare_time[5];
char compare_info[30];
char compare_ManuLoc[65];
char compare_pn[8];
char compare_sn[7];
char compare_vn[3];
char compare_hw[3];
char compare_bin_info[12];

void Display_All_Context(void)
{
	int i, j = 0;

	printf("\n\t");
	for(i = 0;i<= 0xF;i++)
		printf("%2x  ",i);
	printf("\n");
	for(i = 0;i<= 0x1FFF;i++)
	{
		j = i % 16;
		if (j == 0)
		{
			printf("\n");
			printf("0x%2x\t", i);
		}
		FruBuffer[i] = i2c_read_word(i);
		printf("%2.2x  ",i2c_read_word(i));
	}
	printf("\n");
}

void Update_Binfile()
{
    int length = 0,i,count = 0;
    BYTE buffer[80];
    FILE *file = NULL;
    file = fopen(SFileName,"rb");

    memset (buffer, 0, 80);
    do
    {
		length = fread((void *)buffer,1,80,file);
		for(i = 0;i < length;i++)
		{
			i2c_write_word(count*80+i,buffer[i]);
//			printf("%x\t",buffer[i]);
		}
		count++;
		memset(buffer,0,80);
	}while(length == 80);
    fclose(file);
//  printf("\n");
}

int Update_time()
{
	time_t Timestamp, Timestamp1;
	time_t Timestamp_comp = 0;
	int i;

	putenv("TZ=EST-8");
	tzset();

	Timestamp = time(NULL);
	Timestamp1 = Timestamp;
	printf("Current Time  : %s", ctime(&Timestamp));

	// Unix_Timestamp32
	for (i=(fru[0].Length-1);i>=0;i--)
	{
		i2c_write_word(fru[0].Location + i, Timestamp & 0xFF);
		Timestamp>>=8;
	}
	printf("Write Time    : %s", ctime(&Timestamp1));
	
	for (i=0;i<=3;i++)
	{
		Timestamp_comp += i2c_read_word(fru[0].Location + i);
		if (i != 3)
		    Timestamp_comp <<=8;
	}
	printf("Compare Time  : %s", ctime(&Timestamp_comp));

	if(Timestamp_comp == Timestamp1)
	{
		printf("Update UNIX_Timestamp32 Pass\n");
		return 0;
	}
	else
	{
		printf("Update UNIX_Timestamp32 Fail\n");
		return 1;
	}
}

void Update_Serial_NO(void)
{
//  WORD offset = 0x1FD2;
    WORD index;

    for(index = 0;index < fru[4].Length;index++)
    {
		i2c_write_word(fru[4].Location+index,SN_number[index]);
//		FruBuffer[offset+index] = SN_number[index];
    }
}

void Update_CRC32()
{
    u32 CRC32 = 0;
    int i,j;
    BYTE crc1;
    BYTE crc2;
    BYTE crc3;
    BYTE crc4;

    CRClength = fru[8].Length;
    for(j=0;j<CRClength;j++)
       FruBuffer[fru[8].Location+j] = i2c_read_word(fru[8].Location+j);
    CRC32=compute_crc32(&FruBuffer[fru[8].Location],CRClength);
    for (i=3;i>=0;i--)
    {
       FruBuffer[fru[9].Location + i] = CRC32 & 0xFF;
       i2c_write_word(fru[9].Location + i, CRC32 & 0xFF);
       CRC32>>=8;
    }
    crc1 =  i2c_read_word(fru[9].Location);
    crc2 =  i2c_read_word(fru[9].Location+1);
    crc3 =  i2c_read_word(fru[9].Location+2);
    crc4 =  i2c_read_word(fru[9].Location+3);
    printf("CRC32: 0x%2.2X%2.2X%2.2X%2.2X\n", crc1, crc2, crc3, crc4);
}

void DoubleCheck_CRC32()
{
    u32 CRC32 = 0, CRC32_1 = 0;
    char buff[100];
    int i;
    CRClength = fru[8].Length;

    for (i=0;i<=3;i++)
    {
        CRC32_1+=FruBuffer[fru[9].Location+i];
        if (i<=2)
           CRC32_1*=256;
    }
    sprintf(buff,"%08lX",CRC32_1);
//    printf("%20s : 0x%s\n","CRC32_1",buff);

    CRC32 = compute_crc32(&FruBuffer[fru[8].Location],CRClength);
    sprintf(buff,"%08lX",CRC32);
//    printf("%20s : 0x%s\n","Re-Caculate CRC32",buff);
 
	if (CRC32 == CRC32_1)
    {
        printf("Double check EEPROM Checksum32 Pass\n");
        exit(0);
    }
    else
    {
        printf("Double check EEPROM Checksum32 Error\n");
        exit(1);
    }
}

void Check_time()
{
	time_t Timestamp = 0;
	char tmpbuf[10];
	int year = 0;
	int i;
	BYTE time1;
	BYTE time2;
	BYTE time3;
	BYTE time4;

	printf("0x%4X Field:  %s\n", fru[0].Location, fru[0].Field_descript);
	putenv("TZ=EST-8");
	tzset();
	for (i = 0; i <= 3; i++)
	{
		Timestamp += i2c_read_word(fru[0].Location + i);;
		if (i != 3)
			Timestamp <<= 8;
	}
	time1 =  i2c_read_word(fru[0].Location);
	time2 =  i2c_read_word(fru[0].Location+1);
	time3 =  i2c_read_word(fru[0].Location+2);
	time4 =  i2c_read_word(fru[0].Location+3);
	printf("Burning UNIX_Timestamp32 in fruid:  %s", ctime(&Timestamp));
	printf("                                    (0x%2.2X%2.2X%2.2X%2.2X)\n", time1, time2, time3, time4);

	strftime(tmpbuf, 10, "%Y", localtime(&Timestamp));
	year = atoi(tmpbuf);
	if(year < 2005)
	{
		printf( "Burning year: %4i is earlier than 2005! Error!", year);
		exit(1);
	}
}

void Check_Info()
{
	WORD index;
	WORD offset = fru[1].Location;
	printf("0x%4X Field:  %s\n", offset, fru[1].Field_descript);

	memset(compare_info, 0, 30);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月激情丁香一区二区三区| 天天操天天干天天综合网| 欧美天堂一区二区三区| 经典一区二区三区| 亚洲午夜久久久久久久久电影网| wwwwww.欧美系列| 91极品美女在线| 国产精品77777| 日韩中文字幕不卡| 日韩伦理av电影| 久久久综合视频| 日韩一区二区在线看片| 色综合久久久久| 国产99精品国产| 青青青爽久久午夜综合久久午夜| 一区二区高清免费观看影视大全 | 精品一区二区综合| 一二三区精品视频| 最新国产精品久久精品| 久久网站最新地址| 日韩色视频在线观看| 欧美日韩免费电影| 欧美中文字幕久久| 波多野结衣一区二区三区| 极品少妇一区二区三区精品视频| 日韩中文字幕区一区有砖一区| 亚洲女子a中天字幕| 国产精品丝袜一区| 久久精品免费在线观看| 日韩精品一区二区在线| 欧美理论在线播放| 欧美日韩一区精品| 在线免费观看日本欧美| jlzzjlzz亚洲女人18| 国产91精品欧美| 国产乱码精品一区二区三区av| 美美哒免费高清在线观看视频一区二区 | 国产精品88av| 国产激情偷乱视频一区二区三区| 黄色精品一二区| 精品一区二区三区免费| 精品综合久久久久久8888| 免费成人美女在线观看.| 日韩av一级片| 日本女优在线视频一区二区| 日韩av中文字幕一区二区三区| 日韩成人一级片| 经典一区二区三区| 国产成人午夜视频| 成人h精品动漫一区二区三区| 成人晚上爱看视频| av不卡免费在线观看| 91亚洲精品久久久蜜桃网站| 色香蕉久久蜜桃| 欧美在线观看视频一区二区 | 国产欧美一区二区精品性色| 中文无字幕一区二区三区| 国产精品乱人伦中文| 亚洲免费资源在线播放| 亚洲高清三级视频| 看片的网站亚洲| 国产成人精品综合在线观看 | 精品99一区二区| 国产欧美一二三区| 亚洲欧美一区二区三区极速播放 | 成人免费视频播放| 色综合久久久久综合体| 欧美顶级少妇做爰| 精品国产亚洲一区二区三区在线观看| 久久久久久综合| 最新中文字幕一区二区三区| 午夜欧美电影在线观看| 免费欧美在线视频| 成人国产精品视频| 欧美日韩精品一区二区| 精品国产麻豆免费人成网站| 国产精品萝li| 日韩电影免费在线看| 成人永久aaa| 欧美日韩国产综合视频在线观看| 精品久久一二三区| 亚洲免费在线看| 激情国产一区二区| 在线影视一区二区三区| 欧美岛国在线观看| 亚洲欧美日韩在线不卡| 久久99国产精品免费网站| 色综合久久久久| 久久久夜色精品亚洲| 亚洲成人手机在线| 国产精品12区| 欧美一区二区日韩| 亚洲欧美日韩国产综合| 久久精品国产亚洲高清剧情介绍| 92国产精品观看| 久久影音资源网| 日韩有码一区二区三区| 99这里都是精品| 日韩欧美中文一区二区| 一区二区三区四区不卡视频 | 国产一区在线精品| 欧美精品乱人伦久久久久久| 国产精品久久久久四虎| 激情深爱一区二区| 欧美日韩成人激情| 1024国产精品| 国产98色在线|日韩| 精品久久人人做人人爽| 天天av天天翘天天综合网色鬼国产| jlzzjlzz欧美大全| 国产免费观看久久| 国内精品伊人久久久久av影院| 欧美最新大片在线看| 国产精品高潮呻吟| 国产一区二区导航在线播放| 欧美女孩性生活视频| 亚洲自拍偷拍av| 99国产精品视频免费观看| 国产婷婷色一区二区三区四区| 久久精品理论片| 欧美丰满美乳xxx高潮www| 一区二区三区中文字幕精品精品| 成人性生交大片免费看在线播放| 精品国一区二区三区| 日本怡春院一区二区| 欧美丰满少妇xxxxx高潮对白| 亚洲高清视频在线| 欧美在线观看视频一区二区三区| 亚洲男同性恋视频| 色哟哟一区二区在线观看| 综合久久国产九一剧情麻豆| 不卡av在线免费观看| 国产精品免费aⅴ片在线观看| 国产激情精品久久久第一区二区| 26uuuu精品一区二区| 韩国一区二区视频| 亚洲精品在线观| 狠狠色狠狠色合久久伊人| 欧美变态口味重另类| 精品一区二区综合| 久久久综合视频| 成人小视频在线观看| 中文字幕一区二区三区在线不卡| eeuss鲁一区二区三区| 中文字幕亚洲一区二区va在线| a美女胸又www黄视频久久| 中文字幕一区二区三区色视频 | 成人午夜视频在线| 一区在线播放视频| 91蜜桃传媒精品久久久一区二区| 中文字幕一区二区不卡| 色综合久久88色综合天天6 | 亚洲精品老司机| 欧美性做爰猛烈叫床潮| 午夜亚洲国产au精品一区二区| 91麻豆精品国产自产在线| 久久疯狂做爰流白浆xx| 国产欧美久久久精品影院| 成人av在线影院| 亚洲美女淫视频| 欧美一区二区啪啪| 国产麻豆日韩欧美久久| 最近中文字幕一区二区三区| 欧美日韩久久不卡| 激情欧美一区二区三区在线观看| 国产精品免费视频网站| 欧美日韩久久不卡| 国产一区二区在线影院| 综合久久国产九一剧情麻豆| 欧美肥大bbwbbw高潮| 国产黄色91视频| 亚洲国产日韩一级| xvideos.蜜桃一区二区| 99v久久综合狠狠综合久久| 亚洲不卡av一区二区三区| 精品区一区二区| 99久久综合精品| 强制捆绑调教一区二区| 国产精品夫妻自拍| 91超碰这里只有精品国产| 国产成人超碰人人澡人人澡| 亚洲一区二区三区四区五区黄| 日韩精品专区在线影院重磅| 成年人网站91| 青椒成人免费视频| 亚洲欧美偷拍卡通变态| 2023国产一二三区日本精品2022| 色欧美乱欧美15图片| 国产做a爰片久久毛片| 亚洲精品久久久蜜桃| 国产亚洲综合色| 91福利精品第一导航| 国产成人免费视频一区| 日韩av电影免费观看高清完整版 | 亚洲午夜日本在线观看| 欧美国产日韩亚洲一区| 91精品国产福利| 色av成人天堂桃色av| 国产成人av一区二区三区在线| 日韩中文字幕不卡|