📄 checkrom.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>
#include <conio.h>
#include <graph.h>
#include "common.h"
/* constant definition area */
#define PCI_FUNCTION_ID 0xB1
#define PCI_BIOS_PRESENT 0x01
#define FIND_PCI_DEVICE 0x02
#define READ_CONFIG_BYTE 0x08
#define READ_CONFIG_WORD 0x09
#define WRITE_CONFIG_BYTE 0x0B
#define SUCCESS 0
#define FAIL 1
/* prototype declaration area */
extern void ReadCfg(unsigned int [], int);
extern void WriteCfg(unsigned int [],int);
extern unsigned char ResetCard(int);
extern AutoLoad(int);
extern unsigned int FindEthernet();
unsigned int bios_rd_iobase(void);
unsigned int pci_bios_status(void);
void print_EEPROM_Error(void);
void print_OX(int OX);
void print_ID_Error(void);
/* global variables declaration area */
unsigned int i, Tmp, IOBase, Action;
union REGS inregs, outregs;
unsigned int NewConfig[64],Config[64]={0x8129, 0x1113, 0x1211, 0x1113,\
0x9211, 0x4020, 0xF110, 0x0000,\
0x0000, 0x0000, 0x0D10, 0xF601,\
0x0001, 0x8388, 0x78FA, 0x070A,\
0xDE43, 0xA538, 0x0000, 0x0000,\
0xDE43, 0x0000, 0xDE43, 0x0000,\
0xDE43, 0xA438, 0x0000, 0x0000,\
0xDE43, 0x0000, 0xDE43, 0x0000,\
0x0000, 0x0000, 0x0000, 0x0000,\
0x0000, 0x0000, 0x0000, 0x0000,\
0x0000, 0x0000, 0x0000, 0x0000,\
0x0000, 0x0000, 0x0000, 0x0000,\
0x0000, 0x0000, 0x0000, 0x0000,\
0x0000, 0x0000, 0x0000, 0x0000,\
0x0000, 0x0000, 0x0000, 0x0000,\
0x0000, 0x0000, 0x0000, 0x0000};
main(int argc,char* argv[])
{
int ID_flag=0;
if(strncmp(argv[1],"/c",2)==0 || strncmp(argv[1],"/C",2)==0)
Action=1; // clear EEPROM
else if(strncmp(argv[1],"/r",2)==0 || strncmp(argv[1],"/R",2)==0)
Action=2; // read EEPROM
else
Action=0;
if(pci_bios_status() == 0 ){
printf("\aPCI system is not found !!! \n");
return 1;
}
IOBase = bios_rd_iobase();
if(ResetCard(IOBase)!=(char)0){
printf("\a\nNo card found !");
return 1;
}
if(Action==1){
for(i=0;i<64;i++)
Config[i]=0xFFFF;
WriteCfg(&Config,IOBase);
ReadCfg(&NewConfig,IOBase);
for(i=0;i<64;i++)
if(NewConfig[i]!=0xFFFF){
printf("\a\nClear EEPROM ERROR!!");
return 1;
}
AutoLoad(IOBase);
printf("\nClear EEPROM Success!!");
return 0;
}
ReadCfg(&NewConfig,IOBase);
if(Action==2){
printf("\nNodeID = ");
for(i=0;i<3;i++)
printf(" %02X %02X",(unsigned char)(NewConfig[7+i]&0xFF),(unsigned char)((NewConfig[7+i]>>8)& 0xFF));
for(i=0;i<64;i++){
if(i % 8 == 0)
printf("\n");
printf(" %04X",NewConfig[i]);
}
return 0;
}
if((NewConfig[7]!=0x0000 || ((NewConfig[8]&0xFF)!=0xE8))&&
(NewConfig[7]!=0x1000 || ((NewConfig[8]&0xFF)!=0xB5))){
ID_flag=1;
print_ID_Error();
}
else{
for(i=0;i<64;i++){
if(i==7) // skip MAC ID Config[7] -> Config[9]
i=10;
if(Config[i]!=NewConfig[i]){
print_EEPROM_Error();
break;
}
}
}
if(i==64 && ID_flag==0){
print_OX(SUCCESS);
return 0;
}
else{
print_OX(FAIL);
return 1;
}
}
/*苘苘苘苘苘苘苘苘苘苘苘苘苘苘
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -