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

📄 cmd9118.c

📁 基于pxa270的linux下smsc9118的网卡驱动源码
💻 C
📖 第 1 页 / 共 5 页
字号:


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 + -