@@ -33,7 +33,7 @@
-Werror-implicit-function-declaration -ansi -pedantic $(SVNDEF)
LDFLAGS += -lz
-OBJS = superiotool.o ali.o fintek.o ite.o nsc.o nuvoton.o smsc.o winbond.o
+OBJS = superiotool.o serverengine.o ali.o fintek.o ite.o nsc.o nuvoton.o smsc.o winbond.o
OS_ARCH = $(shell uname)
ifeq ($(OS_ARCH), Darwin)
@@ -0,0 +1,106 @@
+/*
+ * This file is part of the superiotool project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "superiotool.h"
+
+#define DEVICE_ID_BYTE1_REG 0x20
+#define DEVICE_ID_BYTE2_REG 0x21
+
+#define DEVICE_REV_REG 0x1f
+
+static const struct superio_registers reg_table[] = {
+ /* TODO: M5113 doesn't seem to have ID registers? */
+ {0x02c0, "Server Engine SE-SM 4210-P01", {
+ {NOLDN, NULL,
+ {0x1f,0x20,0x21,0x22,0x23,0x2c,0x2d,0x2e,EOT},
+ {NANA,0x02,0xc0,0x00,0x00,RSVD,RSVD,RSVD,EOT}},
+ {0x0, "UNK",
+ {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+ {NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+ {0x1, "COM2",
+ {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+ {0x00,0x02,0xf8,0x03,0x00,0x00,0x0c,EOT}},
+ {0x2, "COM1",
+ {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+ {0x00,0x03,0xf8,0x04,0x00,0x00,0x0c,EOT}},
+ {0x3, "UNK",
+ {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+ {NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+ {0x4, "UNK",
+ {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+ {NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+ {0x5, "UNK",
+ {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+ {NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+ {0x6, "UNK",
+ {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+ {NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+ {0x7, "UNK",
+ {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+ {NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+ {EOT}}},
+ {EOT}
+};
+
+static void enter_conf_mode_serverengines(uint16_t port)
+{
+ OUTB(0x5A, port);
+}
+
+static void exit_conf_mode_serverengines(uint16_t port)
+{
+ OUTB(0xA5, port);
+}
+
+void probe_idregs_serverengines(uint16_t port)
+{
+ uint16_t id;
+ uint8_t rev;
+
+ probing_for("Server Engines", "", port);
+
+ enter_conf_mode_serverengines(port);
+
+ id = regval(port, DEVICE_ID_BYTE1_REG) << 8;
+ id |= regval(port, DEVICE_ID_BYTE2_REG);
+
+ /* TODO: Not documented/available on M512x (?) */
+ rev = regval(port, DEVICE_REV_REG);
+
+ if (superio_unknown(reg_table, id)) {
+ if (verbose)
+ printf(NOTFOUND "id=0x%04x, rev=0x%02x\n", id, rev);
+ exit_conf_mode_serverengines(port);
+ return;
+ }
+
+ printf("Found Server Engines %s (id=0x%04x, rev=0x%02x) at 0x%x\n",
+ get_superio_name(reg_table, id), id, rev, port);
+ chip_found = 1;
+
+ dump_superio("Server Engines", reg_table, port, id, LDN_SEL);
+
+ exit_conf_mode_serverengines(port);
+}
+
+void print_serverengines_chips(void)
+{
+ print_vendor_chips("Server Engines", reg_table);
+}
@@ -182,6 +182,10 @@
void probe_idregs_ali(uint16_t port);
void print_ali_chips(void);
+/* serverengines.c */
+void probe_idregs_serverengines(uint16_t port);
+void print_serverengines_chips(void);
+
/* fintek.c */
void probe_idregs_fintek(uint16_t port);
void probe_idregs_fintek_alternative(uint16_t port);
@@ -232,6 +236,7 @@
#ifdef PCI_SUPPORT
{probe_idregs_via, {0x3f0, EOT}},
#endif
+ {probe_idregs_serverengines, {0x2e, EOT}},
};
/** Table of functions to print out supported Super I/O chips. */
@@ -248,6 +253,7 @@
#ifdef PCI_SUPPORT
{print_via_chips},
#endif
+ {print_serverengines_chips},
};
#endif
Hi guys, Do not know how to handle the unknown devices (LDN's) yet. For now I dump all IO base registers etc for information purposed. I have identified two LDN's as Serial port; (LDN 0x01 and LDN 0x02) Best regards, Ruud Signed-off-by: Ruud Schramp <schramp@holmes.nl> Example output: ./superiotool -d superiotool r Found serverengines Server Engine SE-SM 4210-P01 (id=0x02c0, rev=0x00) at 0x2e Register dump: idx 1f 20 21 22 23 2c 2d 2e val 00 02 c0 00 05 00 00 00 def NA 02 c0 00 00 RR RR RR LDN 0x00 (UNK) idx 30 60 61 70 f0 f1 f2 val 00 00 00 00 00 00 00 def NA NA NA NA NA NA NA LDN 0x01 (COM2) idx 30 60 61 70 f0 f1 f2 val 00 02 f8 03 00 00 00 def 00 02 f8 03 00 00 0c LDN 0x02 (COM1) idx 30 60 61 70 f0 f1 f2 val 01 03 f8 04 00 00 00 def 00 03 f8 04 00 00 0c LDN 0x03 (UNK) idx 30 60 61 70 f0 f1 f2 val 00 00 00 00 00 00 00 def NA NA NA NA NA NA NA LDN 0x04 (UNK) idx 30 60 61 70 f0 f1 f2 val 00 00 00 00 00 00 00 def NA NA NA NA NA NA NA LDN 0x05 (UNK) idx 30 60 61 70 f0 f1 f2 val 00 00 00 00 00 00 00 def NA NA NA NA NA NA NA LDN 0x06 (UNK) idx 30 60 61 70 f0 f1 f2 val 00 00 00 00 00 00 00 def NA NA NA NA NA NA NA LDN 0x07 (UNK) idx 30 60 61 70 f0 f1 f2 val 00 00 00 00 00 00 00 def NA NA NA NA NA NA NA