summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Hopf <mhopf@suse.de>2009-06-26 14:33:29 +0200
committerMatthias Hopf <mhopf@suse.de>2009-06-26 14:33:29 +0200
commitb8350b86a1ea6c39c6f5213a7956f3b459bcdefd (patch)
tree936db1ab3346b8a4942bfa6bfc83cd9f3e599bee
parent25b6a9daa071c62d1f5a00b68fce59f567999ed9 (diff)
Add reverse engineered PowerPlayInfo V4.1 table dumper.
-rw-r--r--Makefile4
-rw-r--r--atombios_rev.h70
-rw-r--r--datastructs.c2
3 files changed, 74 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index dc59ff0..40fcd12 100644
--- a/Makefile
+++ b/Makefile
@@ -11,8 +11,8 @@ atomdis: $(SRC:.c=.o)
# Autogenerated files
-datastructs_gen.c: atombios.h datastructs_factory.pl
- cpp atombios.h | perl ./datastructs_factory.pl > datastructs_gen.c
+datastructs_gen.c: atombios.h atombios_rev.h datastructs_factory.pl
+ cat atombios.h atombios_rev.h | cpp | perl ./datastructs_factory.pl > datastructs_gen.c
# Clean
diff --git a/atombios_rev.h b/atombios_rev.h
new file mode 100644
index 0000000..a86e8cb
--- /dev/null
+++ b/atombios_rev.h
@@ -0,0 +1,70 @@
+/*
+ * Reverse engineered AtomBIOS entries.
+ */
+
+typedef struct
+{
+ unsigned char u[2];
+} U16;
+typedef struct
+{
+ unsigned char u[3];
+} U24;
+
+//ucTableFormatRevision=4
+//ucTableContentRevision=1
+
+typedef struct _ATOM_POWERINDEX_INFO_V4
+{
+ UCHAR Type;
+ UCHAR Index[3];
+}ATOM_POWERINDEX_INFO_V4;
+
+typedef struct _ATOM_POWERMODE_INFO_V4
+{
+ U24 engineClock;
+ U24 memoryClock;
+ U16 voltage;
+ U16 unknown8;
+ U16 unknown10;
+ U16 unknown12Flags;
+ U16 unknown14;
+}ATOM_POWERMODE_INFO_V4;
+
+typedef struct _ATOM_POWERUNKNOWN_INFO_V4
+{
+ UCHAR unknown0;
+ UCHAR unknown1;
+ UCHAR unknown2;
+ UCHAR unknown3;
+ U16 unknown4;
+ U16 unknown6;
+ UCHAR unknown8;
+ UCHAR unknown9;
+ U16 unknown10;
+}ATOM_POWERUNKNOWN_INFO_V4;
+
+#define ATOM_MAX_NUMBEROF_POWERMODE_BLOCK_V4 10
+#define ATOM_MAX_NUMBEROF_POWERUNKNOWN_BLOCK_V4 4
+
+typedef struct _ATOM_POWERPLAY_INFO_V4
+{
+ ATOM_COMMON_TABLE_HEADER sHeader;
+ UCHAR unknown4;
+ UCHAR NumPowerIndexEntries;
+ UCHAR SizeOfPowerIndexEntry;
+ UCHAR SizeOfPowerModeEntry;
+ UCHAR SizeOfPowerUnknownEntry;
+ U16 OffsetPowerIndexEntries;
+ U16 OffsetPowerModeEntries;
+ U16 OffsetPowerUnknownEntries;
+ U16 unknown15[3];
+ U16 unknownFlags;
+ U16 unknown23[5];
+ U16 OffsetPowerModeEntries2;
+ U16 OffsetPowerUnknownEntries2;
+ UCHAR unknown37[3]; // RV770 only
+ ATOM_POWERINDEX_INFO_V4 asPowerIndexInfo[4];
+ ATOM_POWERMODE_INFO_V4 asPowerModeInfo[ATOM_MAX_NUMBEROF_POWERMODE_BLOCK_V4];
+ ATOM_POWERUNKNOWN_INFO_V4 asPowerUnknownInfo[ATOM_MAX_NUMBEROF_POWERUNKNOWN_BLOCK_V4];
+}ATOM_POWERPLAY_INFO_V4;
diff --git a/datastructs.c b/datastructs.c
index 1a558ad..fc2b759 100644
--- a/datastructs.c
+++ b/datastructs.c
@@ -17,6 +17,7 @@
#ifdef USE_ATOMBIOS_RELATED_STUFF
# include "atombios.h"
+# include "atombios_rev.h"
#endif
@@ -61,6 +62,7 @@ data_dumper_struct_t data_dumpers[] = {
{ 15, 1, 0, ATOM_POWERPLAY_INFO_dumper, NULL },
{ 15, 2, 1, ATOM_POWERPLAY_INFO_V2_dumper, NULL },
{ 15, 2, 2, ATOM_POWERPLAY_INFO_V3_dumper, NULL },
+ { 15, 4, 1, ATOM_POWERPLAY_INFO_V4_dumper, NULL },
{ 16, 0, 0, COMPASSIONATE_DATA_dumper, NULL },
{ 17, 0, 0, NULL /*ATOM_SAVE_RESTORE_INFO_dumper*/, NULL },
{ 18, 0, 0, NULL /*ATOM_PPLL_SS_INFO_dumper*/, NULL },