diff options
| author | Leah Rowe <leah@libreboot.org> | 2022-11-26 23:16:33 +0000 | 
|---|---|---|
| committer | Leah Rowe <leah@libreboot.org> | 2022-11-26 23:19:57 +0000 | 
| commit | cea1beeac56473728f0c63a7ab7e59e9caf8a5b3 (patch) | |
| tree | 4cef97b79986d57b797884f08bd8f2f02ef36327 | |
| parent | 59e4f560d68449f2ab9ec8439e36750bc1c20430 (diff) | |
util/nvmutil: split "dump" into smaller functions
| -rw-r--r-- | util/nvmutil/nvmutil.c | 100 | 
1 files changed, 63 insertions, 37 deletions
diff --git a/util/nvmutil/nvmutil.c b/util/nvmutil/nvmutil.c index 86e9c814..67ae77f4 100644 --- a/util/nvmutil/nvmutil.c +++ b/util/nvmutil/nvmutil.c @@ -38,6 +38,9 @@ ssize_t readFromFile(int *fd, uint8_t *buf, const char *path, int flags,  	size_t size);  void setmac(const char *strMac);  void cmd(const char *command); +void cmd_dump(void); +void showmac(int partnum); +void hexdump(int partnum);  int validChecksum(int partnum);  uint16_t word(int pos16, int partnum);  void setWord(int pos16, int partnum, uint16_t val); @@ -233,46 +236,11 @@ invalid_mac_address:  void  cmd(const char *command)  { -	int c, partnum, part0, part1, row, numInvalid; -	uint8_t *byte; +	int c, part0, part1;  	uint16_t val16;  	if (strcmp(command, "dump") == 0) { -		numInvalid = 0; -		for (partnum = 0; partnum < 2; partnum++) { -			if (!validChecksum(partnum)) -				++numInvalid; - -			printf("Part %d:\n", partnum); - -			printf("MAC: "); -			for (c = 0; c < 3; c++) { -				val16 = word(c, partnum); -				byte = (uint8_t *) &val16; -				if (!little_endian) -					byteswap(byte); -				printf("%02x:%02x", byte[0], byte[1]); -				if (c == 2) -					printf("\n"); -				else -					printf(":"); -			} - -			for (row = 0; row < 8; row++) { -				printf("%07x ", row << 4); -				for (c = 0; c < 8; c++) { -					val16 = word((row << 3) + c, partnum); -					byte = (uint8_t *) &val16; -					if (!little_endian) -						byteswap(byte); -					printf("%02x%02x ", byte[1], byte[0]); -				} -				printf("\n"); -			} -		} -		if (numInvalid < 2) { -			errno = 0; -		} +		cmd_dump();  	} else if (strcmp(command, "setchecksum") == 0) {  		val16 = 0;  		for (c = 0; c < 0x3F; c++) @@ -299,6 +267,64 @@ cmd(const char *command)  		errno = EINVAL;  } +void +cmd_dump(void) +{ +	int numInvalid, partnum; + +	numInvalid = 0; +	for (partnum = 0; partnum < 2; partnum++) { +		if (!validChecksum(partnum)) +			++numInvalid; +		printf("MAC (part %d): ", partnum); +		showmac(partnum); +		hexdump(partnum); +	} +	if (numInvalid < 2) +		errno = 0; + +} + +void +showmac(int partnum) +{ +	int c; +	uint16_t val16; +	uint8_t *byte; + +	for (c = 0; c < 3; c++) { +		val16 = word(c, partnum); +		byte = (uint8_t *) &val16; +		if (!little_endian) +			byteswap(byte); +		printf("%02x:%02x", byte[0], byte[1]); +		if (c == 2) +			printf("\n"); +		else +			printf(":"); +	} +} + +void +hexdump(int partnum) +{ +	int row, c; +	uint16_t val16; +	uint8_t *byte; + +	for (row = 0; row < 8; row++) { +		printf("%07x ", row << 4); +		for (c = 0; c < 8; c++) { +			val16 = word((row << 3) + c, partnum); +			byte = (uint8_t *) &val16; +			if (!little_endian) +				byteswap(byte); +			printf("%02x%02x ", byte[1], byte[0]); +		} +		printf("\n"); +	} +} +  int  validChecksum(int partnum)  {  | 
