1Version 1:
2
3Offset  Type      Description
4
5  0     uint16_t  Length of the PInS data, in bytes.  This must be 64.
6  2     uint16_t  Product ID.  Possible values are:
7        0: MGA-S1P20 (2MB base with 175MHz RAMDAC)
8        1: MGA-S1P21 (2MB base with 220MHz RAMDAC)
9        2: Reserved
10        3: Reserved
11        4: MGA-S1P40 (4MB base with 175MHz RAMDAC)
12        5: MGA-S1P41 (4MB base with 220MHz RAMDAC)
13  4     char[8]   Serial number of the board.  NUL terminated string.
14 12     uint16_t  Manufacturing date of the board (at product test).
15                  Format (stored little-endian) yyyyyyymmmmddddd.
16 14     uint16_t  Identification of manufacturing site.
17 16     uint16_t  Number and revision level of the PCB.  Format (stored
18                  little-endian): nnnnnnnnnnnrrrrr, where n = PCB number
19                  ex:576 (from 0->2047) and r = PCB revision (from 0->31).
20 18     uint16_t  Identification of any PMBs.
21 20     uint8_t   RAMDAC speed (0=175MHz, 1=220MHz).
22 21     uint8_t   RAMDAC type (0=TVP3026, 1=TVP3027).
23 22     uint16_t  Maximum PCLK of the ramdac.
24 24     uint16_t  Maximum LDCLK supported by the WRAM memory.
25 26     uint16_t  Maximum MCLK of base board.
26 28     uint16_t  Maximum MCLK of 4Mb board.
27 30     uint16_t  Maximum MCLK of 8Mb board.
28 32     uint16_t  Maximum MCLK of board with multimedia module.
29 34     uint16_t  Diagnostic test pass frequency.
30 36     uint16_t  Default VGA mode1 pixel frequency.
31 38     uint16_t  Default VGA mode2 pixel frequency.
32 40     uint16_t  Date of last BIOS programming / update.
33 42     uint16_t  Number of times BIOS has been programmed.
34 44     uint32_t  Support for up to 32 hardware/software options.
35 48     uint32_t  Support for up to 32 hardware/software features.
36 52     uint16_t  Definition of VGA mode MCLK.
37 54     uint16_t  Indicate the revision level of this header struct.
38 56     char[7]   Unused.
39 63     uint8_t   Check-sum byte.
40
41
42Version 2:
43
44Unless otherwise noted, all clock speeds stored in this version of the PInS
45data are stored as the clock speed in MHz minus 100.  To convert a stored
46clock speed, C, to kHz, use ((C + 100) * 1000).
47
48Offset  Type      Description
49  0     uint16_t  PInS structure signature.  This must be the 16-bit
50                  value (stored little-endian) 0x412E.
51  2     uint8_t   Length of the PInS data, in bytes.  For version 2, this
52                  must be 64.
53  3     uint8_t   Reserved.
54  4     uint16_t  Version of the structure.  For version 2, this must be the
55                  value (stored little-endian) 0x02XX.
56  6     uint16_t  Date of last BIOS programming / update.
57  8     uint16_t  Number of times BIOS has been programmed.
58 10     uint16_t  Product ID.
59 12     char[16]  Serial number of the board.  NUL terminated string.
60 28     char[6]   Parts list identification.  NUL terminated string.
61 34     uint16_t  Number and revision level of the PCB.  Format (stored
62                  little-endian): nnnnnnnnnnnrrrrr, where n = PCB number
63                  ex:576 (from 0->2047) and r = PCB revision (from 0->31).
64 36     uint32_t  Support for up to 32 hardware/software features.
65 40     uint8_t   RAMDAC type.
66 41     uint8_t   RAMDAC speed.  Stored using standard clock encoding (see
67                  above).
68 42     uint8_t   PclkMax
69 43     uint8_t   Memory clock.  Stored using standard clock encoding (see
70                  above).
71 44     uint8_t   Maximum MCLK of base board.
72 45     uint8_t   Maximum MCLK of 4Mb board.
73 46     uint8_t   Maximum MCLK of 8Mb board.
74 47     uint8_t   Maximum MCLK of board with multimedia module.
75 48     uint8_t   TestClk
76 49     uint8_t   Default VGA mode1 pixel frequency.
77 50     uint8_t   Default VGA mode2 pixel frequency.
78 51     uint8_t   MCTLWTST
79 52     uint8_t   VidCtrl
80 53     uint8_t   Maximum MCLK of 12Mb board.
81 54     uint8_t   Maximum MCLK of 16Mb board.
82 55     char[8]   Unused
83 63     uint8_t   Check-sum byte
84
85
86Version 3:
87
88Unless otherwise noted, all clock speeds stored in this version of the PInS
89data are stored as the clock speed in MHz minus 100.  To convert a stored
90clock speed, C, to kHz, use ((C + 100) * 1000).
91
92Offset  Type      Description
93  0     uint16_t  PInS structure signature.  This must be the 16-bit
94                  value (stored little-endian) 0x412E.
95  2     uint8_t   Length of the PInS data, in bytes.  For version 3, this
96                  must be 64.
97  3     uint8_t   Reserved.
98  4     uint16_t  Version of the structure.  For version 3, this must be the
99                  value (stored little-endian) 0x03XX.
100  6     uint16_t  Date of last BIOS programming / update.
101  8     uint16_t  Number of times BIOS has been programmed.
102 10     uint16_t  Product ID.
103 12     char[16]  Serial number of the board.  NUL terminated string.
104 28     char[6]   Parts list identification.  NUL terminated string.
105 34     uint16_t  Number and revision level of the PCB.  Format (stored
106                  little-endian): nnnnnnnnnnnrrrrr, where n = PCB number
107                  ex:576 (from 0->2047) and r = PCB revision (from 0->31).
108 36     uint8_t   RAMDAC speed.  Stored using standard clock encoding (see
109                  above).
110 37     char[15]  Unknown?
111 52     uint32_t  OPTION?  Stored little-endian.
112                  Bits     Meaning
113		  0 - 4    Unknown?
114		  5        0 = Reference PLL speed is 27.050MHz.
115		           1 = Reference PLL speed is 14.318MHz.
116		  6 - 31   Unknown?
117 56     uint16_t  MEMRDBK?
118 58     uint32_t  OPTION2?
119 62     char      Unused
120 63     uint8_t   Check-sum byte
121
122
123Version 4:
124
125Unless otherwise noted, all clock speeds stored in this version of the PInS
126data are stored as the clock speed in MHz divided by 4.  To convert a stored
127clock speed, C, to kHz, use ((C * 4) * 1000).
128
129Offset  Type      Description
130  0     uint16_t  PInS structure signature.  This must be the 16-bit
131                  value (stored little-endian) 0x412E.
132  2     uint8_t   Length of the PInS data, in bytes.  For version 4, this
133                  must be 128.
134  3     uint8_t   Reserved.
135  4     uint16_t  Version of the structure.  For version 4, this must be the
136                  value (stored little-endian) 0x04XX.
137  6     uint16_t  Date of last BIOS programming / update.
138  8     uint16_t  Number of times BIOS has been programmed.
139 10     uint16_t  Product ID.
140 12     char[16]  Serial number of the board.  NUL terminated string.
141 28     char[6]   Parts list identification.  NUL terminated string.
142 34     uint16_t  Number and revision level of the PCB.  Format (stored
143                  little-endian): nnnnnnnnnnnrrrrr, where n = PCB number
144                  ex:576 (from 0->2047) and r = PCB revision (from 0->31).
145 36     char      Unknown?
146 37     char      Unknown?
147 38     uint8_t   VCO max for system PLL
148 39     uint8_t   VCO max for pixel PLL
149 40     char[13]  Unknown?
150 53     uint8_t   OPTION?
151 54     char[11]  Unknown?
152 65     uint8_t   System PLL?  Stored using standard clock encoding (see
153                  above).
154 66     char      Unknown?
155 67     uint32_t  OPTION3?  This offset seems wrong, but that's what
156                  matroxfb does.
157 71     char[15]  Unknown?
158 86     uint16_t  MEMRDBK?
159 88     char[4]   Unknown?
160 92     uint32_t  OPTIONx?
161                  Bits     Meaning
162		  0        0 = Reference PLL speed is 27.050MHz.
163		           1 = Reference PLL speed is 14.318MHz.
164		  1 - 31   Unknown?
165 96     char[21]  Unknown?
166127     uint8_t   Check-sum byte
167
168
169Version 5:
170
171Unless otherwise noted, all clock speeds stored in this version of the PInS
172data are stored as the clock speed in MHz divided by 6 for version 0x500 or
173by 8 for all other versions.  To convert a stored clock speed, C, to kHz, on
174version 0x0500, use ((C * 6) * 1000).  For all other versions, use ((C * 8) *
1751000).
176
177Offset  Type      Description
178  0     uint16_t  PInS structure signature.  This must be the 16-bit
179                  value (stored little-endian) 0x412E.
180  2     uint8_t   Length of the PInS data, in bytes.  For version 5, this
181                  must be 128.
182  3     uint8_t   Reserved.
183  4     uint16_t  Version of the structure.  For version 5, this must be the
184                  value (stored little-endian) 0x05XX.
185  6     uint16_t  Date of last BIOS programming / update.
186  8     uint16_t  Number of times BIOS has been programmed.
187 10     uint16_t  Product ID.
188 12     char[16]  Serial number of the board.  NUL terminated string.
189 28     char[6]   Parts list identification.  NUL terminated string.
190 34     uint16_t  Number and revision level of the PCB.  Format (stored
191                  little-endian): nnnnnnnnnnnrrrrr, where n = PCB number
192                  ex:576 (from 0->2047) and r = PCB revision (from 0->31).
193 36     uint8_t   VCO max for system PLL.  Stored using standard clock
194                  encoding (see above).
195 37     uint8_t   VCO max for video PLL.  Stored using standard clock
196                  encoding (see above).
197 38     uint8_t   VCO max for pixel PLL.  Stored using standard clock
198                  encoding (see above).
199 39     char[9]   Unknown?
200 48     uint32_t  OPTION1?
201 52     uint32_t  OPTION2?
202 56     char[38]  Unknown?
203 94     uint32_t  OPTION3?
204 98     uint32_t  MCTLWTST?
205102     uint32_t  MEMMISC?
206106     uint32_t  MEMRDBK?
207110     uint32_t  OPTIONx?
208                  Bits     Meaning
209		  0        0 = Reference PLL speed is 27.050MHz.
210		           1 = Reference PLL speed is 14.318MHz.
211		  1 - 31   Unknown?
212114     uint16_t  MEMINFO?
213                  Bits     Meaning
214		  0 - 4    Unknown
215		  5 - 6    0 = SDR memory installed?
216		           1 = DDR memory installed
217		           2 = Unknown
218		           3 = Unknown
219		  7        Unknown
220		  8        EMRSWEN?
221		  9        Has DLL?
222		  10       Core uses MCTLWTST?
223		  11 - 15  MCTLWTST values for core?
224116     uint16_t  Display Info.
225                  Bits     Meaning
226                  0-3      Primary display info (see below)
227                  4-7      Secondary display info (see below)
228                  8-10     Primary modes (see below)
229                  13       Default output
230                           0 = default output is secondary connector
231                           1 = default output is primary connector
232                  12-14    Secondary modes (see below)
233                  15       Primary hardware detect
234                           0 = hardware detection is off
235                           1 = use hardware detection to determine main output
236                           
237                  Display info values:
238                  0000     None
239                  0001     HD15
240                  0010     DVI
241                  0011     TV
242                  x1xx     Reserved
243                  1xxx     Reserved
244
245                  Modes values:
246                  xx1      Analog
247                  x1x      Digital
248                  1xx      TV
249
250118     char[3]   Unknown?
251121     uint8_t   VCO min for system PLL.  Stored using standard clock
252                  encoding (see above).
253122     uint8_t   VCO min for video PLL.  Stored using standard clock
254                  encoding (see above).
255123     uint8_t   VCO min for pixel PLL.  Stored using standard clock
256                  encoding (see above).
257124     char[3]   Unknown?
258127     uint8_t   Check-sum byte
259