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

📄 cmd9118.c

📁 SMSC NET controller 9218 driver software
💻 C
📖 第 1 页 / 共 5 页
字号:
	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 SetAutoMdixSts(PCOMMAND_DATA commandData, unsigned int AutoMdix)

{


//	if(AutoMdix<=2) {


		if(commandData==NULL) return;


		commandData->IfReq.ifr_data=(void *)&(commandData->IoctlData);


		commandData->IoctlData.dwSignature=SMSC9118_APP_SIGNATURE;


		commandData->IoctlData.dwCommand=COMMAND_SET_AMDIX_STS;


		commandData->IoctlData.Data[0]=AutoMdix;


		ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));


		if(commandData->IoctlData.dwSignature!=SMSC9118_DRIVER_SIGNATURE) {


			printf("Failed to set AMDIX State.\n");


		}


//	} else {
		
		

//		printf("Invalid AutoMdix value, %d\n",AutoMdix);


//	}


}




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 GetAutoMdixSts(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_AMDIX_STS;


	ioctl(commandData->hSockFD,SMSC9118_IOCTL,&(commandData->IfReq));


	if(commandData->IoctlData.dwSignature==SMSC9118_DRIVER_SIGNATURE) {
		
		printf("Got AutoMdix value successfully.\n");


	} else {


		printf("Failed to get AutoMdix value.\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("  rx_mode         = 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");


⌨️ 快捷键说明

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