⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkrom.c

📁 智邦网卡测试程序源码(2张网卡pingpong)
💻 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 + -