📄 cmd9118.c
字号:
void MacDumpRegs(PCOMMAND_DATA commandData)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_DUMP_MAC_REGS;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
printf("index 1, MAC_CR = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_MAC_CR]);
printf("index 2, ADDRH = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_ADDRH]);
printf("index 3, ADDRL = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_ADDRL]);
printf("index 4, HASHH = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_HASHH]);
printf("index 5, HASHL = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_HASHL]);
printf("index 6, MII_ACC = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_MII_ACC]);
printf("index 7, MII_DATA = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_MII_DATA]);
printf("index 8, FLOW = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_FLOW]);
printf("index 9, VLAN1 = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_VLAN1]);
printf("index A, VLAN2 = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_VLAN2]);
printf("index B, WUFF = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_WUFF]);
printf("index C, WUCSR = 0x%08lX\n",commandData->IoctlData.Data[MAC_REG_WUCSR]);
} else {
printf("Failed to Dump Mac Registers\n");
}
}
void DumpEEPROM(PCOMMAND_DATA commandData)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_DUMP_EEPROM;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
printf("EEPROM[0]=0x%02lX\n",commandData->IoctlData.Data[0]);
printf("EEPROM[1]=0x%02lX\n",commandData->IoctlData.Data[1]);
printf("EEPROM[2]=0x%02lX\n",commandData->IoctlData.Data[2]);
printf("EEPROM[3]=0x%02lX\n",commandData->IoctlData.Data[3]);
printf("EEPROM[4]=0x%02lX\n",commandData->IoctlData.Data[4]);
printf("EEPROM[5]=0x%02lX\n",commandData->IoctlData.Data[5]);
printf("EEPROM[6]=0x%02lX\n",commandData->IoctlData.Data[6]);
printf("EEPROM[7]=0x%02lX\n",commandData->IoctlData.Data[7]);
} else {
printf("Failed to Dump EEPROM\n");
}
}
void DumpTemp(PCOMMAND_DATA commandData)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_DUMP_TEMP;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
unsigned long c=0;
for(c=0;c<0x10;c++) {
printf("temp[0x%02lX]=0x%08lX, ",c,commandData->IoctlData.Data[c]);
printf("temp[0x%02lX]=0x%08lX, ",c+0x10,commandData->IoctlData.Data[c+0x10]);
printf("temp[0x%02lX]=0x%08lX, ",c+0x20,commandData->IoctlData.Data[c+0x20]);
printf("temp[0x%02lX]=0x%08lX\n",c+0x30,commandData->IoctlData.Data[c+0x30]);
}
} else {
printf("Failed to dump temp data.\n");
}
}
void PhyDumpRegs(PCOMMAND_DATA commandData)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_DUMP_PHY_REGS;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
printf("index 0, Basic Control Reg = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_0]);
printf("index 1, Basic Status Reg = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_1]);
printf("index 2, PHY identifier 1 = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_2]);
printf("index 3, PHY identifier 2 = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_3]);
printf("index 4, Auto Negotiation Advertisement Reg = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_4]);
printf("index 5, Auto Negotiation Link Partner Ability Reg = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_5]);
printf("index 6, Auto Negotiation Expansion Register = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_6]);
printf("index 16, Silicon Revision Reg = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_16]);
printf("index 17, Mode Control/Status Reg = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_17]);
printf("index 18, Special Modes = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_18]);
printf("index 20, TSTCNTL = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_20]);
printf("index 21, TSTREAD1 = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_21]);
printf("index 22, TSTREAD2 = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_22]);
printf("index 23, TSTWRITE = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_23]);
printf("index 27, Control/Status Indication = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_27]);
printf("index 28, Special internal testability = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_28]);
printf("index 29, Interrupt Source Register = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_29]);
printf("index 30, Interrupt Mask Register = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_30]);
printf("index 31, PHY Special Control/Status Register = 0x%04lX\n",commandData->IoctlData.Data[PHY_REG_31]);
} else {
printf("Failed to DUMP Phy Registers\n");
}
}
void SetDebugMode(PCOMMAND_DATA commandData,
unsigned long debug_mode)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_SET_DEBUG_MODE;
commandData->IoctlData.Data[0]=debug_mode;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature!=SMSC9118_DRIVER_SIGNATURE) {
printf("Failed to set debug mode.\n");
}
}
void SetLinkMode(PCOMMAND_DATA commandData,
unsigned long link_mode)
{
if(link_mode<=0x7F) {
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_SET_LINK_MODE;
commandData->IoctlData.Data[0]=link_mode;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature!=SMSC9118_DRIVER_SIGNATURE) {
printf("Failed to set link mode.\n");
}
} else {
printf("Invalid Link Mode, %ld\n",link_mode);
}
}
void SetPowerMode(PCOMMAND_DATA commandData,
unsigned long power_mode)
{
if(power_mode<4) {
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_SET_POWER_MODE;
commandData->IoctlData.Data[0]=power_mode;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature!=SMSC9118_DRIVER_SIGNATURE) {
printf("Failed to set power mode.\n");
}
} else {
printf("Invalid Power Mode, %ld\n",power_mode);
}
}
void GetLinkMode(PCOMMAND_DATA commandData)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_GET_LINK_MODE;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
unsigned long link_mode=commandData->IoctlData.Data[0];
printf("link_mode == 0x%02lX == %s,%s,%s,%s,%s,%s,%s\n",
link_mode,
(link_mode&0x40)?"ANEG":"",
(link_mode&0x20)?"SYMP":"",
(link_mode&0x10)?"ASYMP":"",
(link_mode&0x08)?"100FD":"",
(link_mode&0x04)?"100HD":"",
(link_mode&0x02)?"10FD":"",
(link_mode&0x01)?"10HD":"");
} else {
printf("Failed to get link mode\n");
}
}
void CheckLink(PCOMMAND_DATA commandData)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_CHECK_LINK;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
printf("Checked link successfully\n");
} else {
printf("Failed to check link\n");
}
}
void GetPowerMode(PCOMMAND_DATA commandData)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_GET_POWER_MODE;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
printf("PMT_CTRL == 0x%08lX, PM_MODE == D%ld\n",
commandData->IoctlData.Data[0],
(((commandData->IoctlData.Data[0])&0x00030000UL)>>16));
} else {
printf("Failed to get power mode\n");
}
}
void GetFlowParams(PCOMMAND_DATA commandData)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_GET_FLOW_PARAMS;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
const unsigned long * data=commandData->IoctlData.Data;
printf("Flow Control Parameters\n");
printf(" RxFlowMeasuredMaxThroughput = 0x%08lX\n",data[0]);
printf(" RxFlowMeasuredMaxPacketCount = 0x%08lX\n",data[1]);
printf(" RxFlowParameters.MaxThroughput = 0x%08lX\n",data[2]);
printf(" RxFlowParameters.MaxPacketCount = 0x%08lX\n",data[3]);
printf(" RxFlowParameters.PacketCost = 0x%08lX\n",data[4]);
printf(" RxFlowParameters.BurstPeriod = 0x%08lX\n",data[5]);
printf(" RxFlowMaxWorkLoad = 0x%08lX\n",data[6]);
printf(" INT_CFG.INT_DEAS = 0x%08lX\n",data[7]);
} else {
printf("Failed to get flow control parameters\n");
}
}
void GetConfiguration(PCOMMAND_DATA commandData)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_GET_CONFIGURATION;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
const unsigned long * data=commandData->IoctlData.Data;
printf("Compiled: %s\n",commandData->IoctlData.Strng1);
printf("Driver Version = %lX.%02lX\n",
data[0]>>8,data[0]&0xFFUL);
printf("Driver Parameters\n");
printf(" lan_base = 0x%08lX\n",data[1]);
printf(" bus_width = 0x%08lX\n",data[2]);
printf(" link_mode = 0x%08lX\n",data[3]);
printf(" irq = 0x%08lX\n",data[4]);
printf(" int_deas = 0x%08lX\n",data[5]);
printf(" irq_pol = 0x%08lX\n",data[6]);
printf(" irq_type = 0x%08lX\n",data[7]);
printf(" rx_dma = 0x%08lX\n",data[8]);
printf(" tx_dma = 0x%08lX\n",data[9]);
printf(" dma_threshold = 0x%08lX\n",data[10]);
printf(" mac_addr_hi16 = 0x%08lX\n",data[11]);
printf(" mac_addr_lo32 = 0x%08lX\n",data[12]);
printf(" debug_mode = 0x%08lX\n",data[13]);
printf(" tx_fif_sz = 0x%08lX\n",data[14]);
printf(" afc_cfg = 0x%08lX\n",data[15]);
printf(" tasklets = 0x%08lX\n",data[16]);
printf(" max_throughput = 0x%08lX\n",data[17]);
printf(" max_packet_count = 0x%08lX\n",data[18]);
printf(" packet_cost = 0x%08lX\n",data[19]);
printf(" burst_period = 0x%08lX\n",data[20]);
printf(" max_work_load = 0x%08lX\n",data[21]);
printf("privateData\n");
printf(" ifName = \"%s\"\n",
commandData->IoctlData.Strng2);
printf(" dwIdRev = 0x%08lX\n",data[22]);
printf(" dwFpgaRev = 0x%08lX\n",data[23]);
printf(" bPhyAddress = 0x%08lX\n",data[24]);
printf(" dwPhyId = 0x%08lX\n",data[25]);
printf(" bPhyModel = 0x%08lX\n",data[26]);
printf(" bPhyRev = 0x%08lX\n",data[27]);
printf(" dwLinkSpeed = 0x%08lX\n",data[28]);
printf(" RxFlowMeasuredMaxThroughput = 0x%08lX\n",data[29]);
printf(" RxFlowMeasuredMaxPacketCount = 0x%08lX\n",data[30]);
printf(" RxFlowMaxThroughput = 0x%08lX\n",data[31]);
printf(" RxFlowMaxPacketCount = 0x%08lX\n",data[32]);
printf(" RxFlowPacketCost = 0x%08lX\n",data[33]);
printf(" RxFlowBurstPeriod = 0x%08lX\n",data[34]);
printf(" RxFlowMaxWorkLoad = 0x%08lX\n",data[35]);
} else {
printf("Failed to get driver configuration\n");
}
}
void ReadByte(PCOMMAND_DATA commandData,unsigned long address)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_READ_BYTE;
commandData->IoctlData.Data[0]=address;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
printf("Memory Address == 0x%08lX, Read Value == 0x%02lX\n",
commandData->IoctlData.Data[0],
commandData->IoctlData.Data[1]&0xFFUL);
} else {
printf("Failed to Read Memory\n");
}
}
void ReadWord(PCOMMAND_DATA commandData, unsigned long address)
{
if(commandData==NULL) return;
commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);
commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;
commandData->IoctlData.dwCommand=COMMAND_READ_WORD;
commandData->IoctlData.Data[0]=address;
ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));
if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
printf("Memory Address == 0x%08lX, Read Value == 0x%04lX\n",
commandData->IoctlData.Data[0],
commandData->IoctlData.Data[1]&0xFFFFUL);
} else {
printf("Failed to Read Memory\n");
}
}
void ReadDWord(PCOMMAND_DATA commandData,unsigned long address)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -