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

📄 client.c

📁 智邦网卡测试程序源码(2张网卡pingpong)
💻 C
字号:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>
#include <conio.h>
#include <graph.h>
#include <time.h>
#include "common.h"

#define RTL_CR             0x37
#define RTL_9346CR         0x50
//#define C_DEVICE_ID        0x1211
//#define C_VENDOR_ID        0x1113
#define C_DEVICE_ID        0x0803
#define C_VENDOR_ID        0x1516
#define MSR_LINKB          0x0004
#define NIC_MSR            0x58
#define NIC_ISR            0x3E
#define NIC_BMCR           0x62
#define BMCR_DUPLEX        0x0100
#define BMCR_NWAY          0x1000
#define SUCCESSFUL         0x00

extern void ReadCfg(unsigned int [], int);
extern void WriteCfg(unsigned int [],int);
extern unsigned char ResetCard(int);
extern AutoLoad(int);
extern unsigned int FindEthernet();
extern void print_msg(char, char *);
unsigned int pci_bios_status(void);
unsigned int bios_rd_iobase(void);
void print_ID_Error(void);
int init_card2(void);
int set_PCI_D3(void);
int set_PCI_D0(void);
int chk_ACPI(void);
int cable_test(void);

extern unsigned int c_io_base;
extern unsigned char ether_id2[6],error_code,c_slot;
extern unsigned int PM_CSR;
char c_bus_num,c_dev_fun_num;
union REGS inregs, outregs;

unsigned char c_Hard_Int;
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};

int init_card2(void)
{
 int i;
 unsigned int VID,DID;
 char tmp,str[10];
 FILE *logfile;

 if(pci_bios_status()==0){
    print_msg(RED,"This is not an PCI machine !!");
    return 1;
    }

 _settextwindow(1,1,25,80);
 _settextposition(10,17);
 if((c_io_base = bios_rd_iobase())==0){
    _settextcolor(PINK);
    _outtext("FAIL");
    print_msg(RED,"Client Card Not found !!");
    return 1;
    }
 else{
    _settextcolor(GREEN_L);
    _outtext("OK");
    }
 _settextwindow(1,1,25,80);
 _settextposition(9,17);
 _settextcolor(WHITE);
 sprintf(str,"%04Xh",c_io_base);          // print IO BASE
 _outtext(str);
/*
 if(ResetCard(c_io_base)!=0){
    print_msg(RED,"Can't reset Client Card !!");
    return 1;
    }

  logfile = fopen( "scan.log", "rb");
  if(logfile==NULL){
    print_msg(RED,"File scan.log open Fail!!!");
    return 1;
    }
  for(i=0;i<6;i++)
      ether_id2[i]=fgetc(logfile);
  fclose(logfile);

  Config[7]=(unsigned int)(ether_id2[0]+ether_id2[1]*256);
  Config[8]=(unsigned int)(ether_id2[2]+ether_id2[3]*256);
  Config[9]=(unsigned int)(ether_id2[4]+ether_id2[5]*256);

// check MAC ID 0000E8XXXXXX & 0010B5XXXXXX
  if((ether_id2[0]!=0x00 || ether_id2[1]!=0x00 || ether_id2[2]!=0xE8) &&
     (ether_id2[0]!=0x00 || ether_id2[1]!=0x10 || ether_id2[2]!=0xB5)){
    print_ID_Error();
    _settextcolor(WHITE);
    _settextwindow(1,1,25,80);
    _settextposition(8,17);
    for(i=0;i<6;i++){
        sprintf(str,"%02X ",ether_id2[i]);    // print MAC ADDRESS
        _outtext(str);
        }
    return 1;
    }

  WriteCfg(Config,c_io_base);
  ReadCfg(NewConfig,c_io_base);

 _settextposition(11,17);
  for(i=0;i< 64 ;i++)
    if(NewConfig[i] != Config[i]) {
      _settextcolor(PINK);
      _outtext("FAIL");
      print_msg(RED,"Program EEPROM Fail!!!");
      return 1;
      }
  _settextcolor(GREEN_L);
  _outtext("OK");
  print_msg(GREEN,"Program EEPROM Success!!");
  AutoLoad(c_io_base);
*/

 _settextwindow(1,1,25,80);
// VID=Config[1]; DID=Config[2];


 _asm mov ah,PCI_FUNCTION_ID       // get BUS number,DEVICE number
 _asm mov al,FIND_PCI_DEVICE
 _asm mov cx,C_DEVICE_ID
 _asm mov dx,C_VENDOR_ID
 _asm mov si,0x0
 _asm int PCI_BIOS_INT
 _asm mov error_code,ah
 _asm mov c_bus_num,bh
 _asm mov c_dev_fun_num,bl

 if(error_code !=0){
   print_msg(RED,"Client Card Not found !!");
   error_code=0x21;
   return 1;
   }
 else{
   _settextcolor(RED);
   _settextposition(6,17);
   _outtext("MTD 803");
   }

 _settextcolor(WHITE);
 _settextposition(6,34);                   // print SLOT
 c_slot=(unsigned char)c_dev_fun_num>>3;
 sprintf(str,"%02d",c_slot);
 _outtext(str);
 _settextposition(7,17);
 sprintf(str,"%04Xh",C_DEVICE_ID);        // print DEVICE ID
 _outtext(str);
 _settextposition(7,34);
 sprintf(str,"%04Xh",C_VENDOR_ID);        // print VENDER ID
 _outtext(str);

 _asm mov ah,PCI_FUNCTION_ID
 _asm mov al,READ_CONFIG_BYTE
 _asm mov bh,c_bus_num
 _asm mov bl,c_dev_fun_num
 _asm mov di,0x3c                         // read Interrupt Line
 _asm int PCI_BIOS_INT
 _asm mov c_Hard_Int,cl
 _settextposition(9,34);
 sprintf(str,"%02Xh",c_Hard_Int);         // print H_Int
 _outtext(str);


 _settextcolor(WHITE);
 _settextwindow(1,1,25,80);
 _settextposition(8,17);
 for(i=0;i<6;i++){
    _asm mov dx,c_io_base
    _asm add dx,i
    _asm in  al,dx
    _asm mov tmp,al
    ether_id2[i]=tmp;                    // print MAC ADDRESS
    sprintf(str,"%02X ",(unsigned char)tmp);
    _outtext(str);
    }
 _settextposition(14,17);
 if(cable_test()==0){
   _settextcolor(GREEN_L);
   _outtext("OK");
   return 0;
   }
 else{
   _settextcolor(PINK);
   _outtext("Fail");
   print_msg(RED_L,"Cable Test fail....");
   return 1;
   }
return 0;
}

/*苘苘苘苘苘苘苘苘苘苘苘苘苘苘

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -