📄 client.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 + -