[LinuxBIOS] r2779 - trunk/util/superiotool

svn at openbios.org svn at openbios.org
Sun Sep 16 22:59:01 CEST 2007


Author: uwe
Date: 2007-09-16 22:59:01 +0200 (Sun, 16 Sep 2007)
New Revision: 2779

Modified:
   trunk/util/superiotool/ite.c
   trunk/util/superiotool/superiotool.c
   trunk/util/superiotool/superiotool.h
Log:
Split out a dump_superio() function from ite.c, and make it slightly more
generic, so that we can use it for other Super I/Os, too.

Signed-off-by: Uwe Hermann <uwe at hermann-uwe.de>
Acked-by: Uwe Hermann <uwe at hermann-uwe.de>



Modified: trunk/util/superiotool/ite.c
===================================================================
--- trunk/util/superiotool/ite.c	2007-09-16 18:17:44 UTC (rev 2778)
+++ trunk/util/superiotool/ite.c	2007-09-16 20:59:01 UTC (rev 2779)
@@ -21,7 +21,7 @@
 
 #include "superiotool.h"
 
-const static struct superio_registers ite_reg_table[] = {
+const static struct superio_registers reg_table[] = {
 	{0x8702, "IT8702", {
 		{EOT}}},
 	{0x8705, "IT8705 or IT8700", {
@@ -189,11 +189,8 @@
 
 void dump_ite(unsigned short port, unsigned short id)
 {
-	int i, j, k;
-	signed short *idx;
+	int i;
 
-	printf("ITE ");
-
 	/* TODO: Get datasheets for IT8711 and IT8712. */
 	switch (id) {
 	case 0x8702:
@@ -204,47 +201,7 @@
 	case 0x8716:
 	/* Note: IT8726F has ID 0x8726 (datasheet wrongly says 0x8716). */
 	case 0x8718:
-		for (i = 0;; i++) {
-			if (ite_reg_table[i].superio_id == EOT)
-				break;
-			if ((unsigned short)ite_reg_table[i].superio_id != id)
-				continue;
-			printf("%s\n", ite_reg_table[i].name);
-			for (j = 0;; j++) {
-				if (ite_reg_table[i].ldn[j].ldn == EOT)
-					break;
-				if (ite_reg_table[i].ldn[j].ldn != NOLDN) {
-					printf("Switching to LDN 0x%01x\n",
-					       ite_reg_table[i].ldn[j].ldn);
-					regwrite(port, 0x07,
-						 ite_reg_table[i].ldn[j].ldn);
-				}
-				idx = ite_reg_table[i].ldn[j].idx;
-				printf("idx ");
-				for (k = 0;; k++) {
-					if (idx[k] == EOT)
-						break;
-					printf("%02x ", idx[k]);
-				}
-				printf("\nval ");
-				for (k = 0;; k++) {
-					if (idx[k] == EOT)
-						break;
-					printf("%02x ", regval(port, idx[k]));
-				}
-				printf("\ndef ");
-				idx = ite_reg_table[i].ldn[j].def;
-				for (k = 0;; k++) {
-					if (idx[k] == EOT)
-						break;
-					if (idx[k] == NANA)
-						printf("NA ");
-					else
-						printf("%02x ", idx[k]);
-				}
-				printf("\n");
-			}
-		}
+		dump_superio("ITE", reg_table, port, id);
 		break;
 	default:
 		printf("Unknown ITE chip, id=%04x\n", id);

Modified: trunk/util/superiotool/superiotool.c
===================================================================
--- trunk/util/superiotool/superiotool.c	2007-09-16 18:17:44 UTC (rev 2778)
+++ trunk/util/superiotool/superiotool.c	2007-09-16 20:59:01 UTC (rev 2779)
@@ -3,6 +3,7 @@
  *
  * Copyright (C) 2006 Ronald Minnich <rminnich at gmail.com>
  * Copyright (C) 2007 Uwe Hermann <uwe at hermann-uwe.de>
+ * Copyright (C) 2007 Carl-Daniel Hailfinger
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -33,6 +34,65 @@
 	outb(val, port + 1);
 }
 
+void dump_superio(const char *name, const struct superio_registers reg_table[],
+		  unsigned short port, unsigned short id)
+{
+	int i, j, k;
+	signed short *idx;
+
+	printf("%s ", name);
+
+	for (i = 0; /* Nothing */; i++) {
+		if (reg_table[i].superio_id == EOT)
+			break;
+
+		if ((unsigned short)reg_table[i].superio_id != id)
+			continue;
+
+		printf("%s\n", reg_table[i].name);
+
+		for (j = 0;; j++) {
+			if (reg_table[i].ldn[j].ldn == EOT)
+				break;
+
+			if (reg_table[i].ldn[j].ldn != NOLDN) {
+				printf("Switching to LDN 0x%01x\n",
+				       reg_table[i].ldn[j].ldn);
+				regwrite(port, 0x07,
+					 reg_table[i].ldn[j].ldn);
+			}
+
+			idx = reg_table[i].ldn[j].idx;
+
+			printf("idx ");
+			for (k = 0;; k++) {
+				if (idx[k] == EOT)
+					break;
+				printf("%02x ", idx[k]);
+			}
+
+			printf("\nval ");
+			for (k = 0;; k++) {
+				if (idx[k] == EOT)
+					break;
+				printf("%02x ", regval(port, idx[k]));
+			}
+
+			printf("\ndef ");
+			idx = reg_table[i].ldn[j].def;
+			for (k = 0;; k++) {
+				if (idx[k] == EOT)
+					break;
+				if (idx[k] == NANA)
+					printf("NA ");
+				else
+					printf("%02x ", idx[k]);
+			}
+			printf("\n");
+		}
+	}
+}
+
 void probe_superio(unsigned short port)
 {
 	probe_idregs_simple(port);

Modified: trunk/util/superiotool/superiotool.h
===================================================================
--- trunk/util/superiotool/superiotool.h	2007-09-16 18:17:44 UTC (rev 2778)
+++ trunk/util/superiotool/superiotool.h	2007-09-16 20:59:01 UTC (rev 2779)
@@ -49,6 +49,8 @@
 /* superiotool.c */
 unsigned char regval(unsigned short port, unsigned char reg);
 void regwrite(unsigned short port, unsigned char reg, unsigned char val);
+void dump_superio(const char *name, const struct superio_registers reg_table[],
+                  unsigned short port, unsigned short id);
 void probe_superio(unsigned short port);
 
 /* fintek.c */





More information about the coreboot mailing list