diff options
author | Matthias Hopf <mhopf@suse.de> | 2009-06-26 14:33:29 +0200 |
---|---|---|
committer | Matthias Hopf <mhopf@suse.de> | 2009-06-26 14:33:29 +0200 |
commit | b8350b86a1ea6c39c6f5213a7956f3b459bcdefd (patch) | |
tree | 936db1ab3346b8a4942bfa6bfc83cd9f3e599bee | |
parent | 25b6a9daa071c62d1f5a00b68fce59f567999ed9 (diff) |
Add reverse engineered PowerPlayInfo V4.1 table dumper.
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | atombios_rev.h | 70 | ||||
-rw-r--r-- | datastructs.c | 2 |
3 files changed, 74 insertions, 2 deletions
@@ -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 }, |