/ util / superiotool / nsc.c
nsc.c
  1  /* SPDX-License-Identifier: GPL-2.0-or-later */
  2  
  3  #include "superiotool.h"
  4  
  5  #define CHIP_ID_REG	0x20	/* Super I/O ID (SID) / family */
  6  #define CHIP_REV_REG	0x27	/* Super I/O revision ID (SRID) */
  7  
  8  static const struct superio_registers reg_table[] = {
  9  	{0xcf, "PC97307", {
 10  		{NOLDN, NULL,
 11  			{0x20,0x21,0x22,0x23,0x24,0x27,EOT},
 12  			{0xcf,MISC,MISC,0x00,0x00,NANA,EOT}},
 13  		{0x0, "Keyboard",
 14  			{0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,
 15  			 0xf0,EOT},
 16  			{MISC,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,
 17  			 0x40,EOT}},
 18  		{0x1, "Mouse",
 19  			{0x30,0x70,0x71,0x74,0x75,EOT},
 20  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
 21  		{0x2, "Real-time clock (RTC), advanced power control (APC)",
 22  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,EOT},
 23  			{MISC,0x00,0x00,0x70,0x08,0x00,0x04,0x04,EOT}},
 24  		{0x3, "Floppy",
 25  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,
 26  			 EOT},
 27  			{MISC,0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x20,0x00,
 28  			 EOT}},
 29  		{0x4, "Parallel port",
 30  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
 31  			{0x00,0x00,0x02,0x78,0x07,0x00,0x04,0x04,0xf2,EOT}},
 32  		{0x5, "COM2 / IR",
 33  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
 34  			{0x00,0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
 35  		{0x6, "COM1",
 36  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
 37  			{0x00,0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
 38  		{0x7, "GPIO",
 39  			{0x30,0x31,0x60,0x61,0x74,0x75,EOT},
 40  			{0x00,0x00,0x00,0x00,0x04,0x04,EOT}},
 41  		{0x8, "Power management",
 42  			{0x30,0x31,0x60,0x61,0x74,0x75,EOT},
 43  			{0x00,0x00,0x00,0x00,0x04,0x04,EOT}},
 44  		{EOT}}},
 45  	{0xd0, "PC87317", {
 46  		{NOLDN, NULL,
 47  			{0x20,0x21,0x22,0x23,0x24,0x25,EOT},
 48  			{0xd0,MISC,MISC,0x00,0x00,0x00,EOT}},
 49  		{0x0, "Keyboard",
 50  			{0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,
 51  			 0xf0,EOT},
 52  			{MISC,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,
 53  			 0x40,EOT}},
 54  		{0x1, "Mouse",
 55  			{0x30,0x70,0x71,0x74,0x75,EOT},
 56  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
 57  		{0x2, "Real-time clock (RTC), advanced power control (APC)",
 58  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,EOT},
 59  			{MISC,0x00,0x00,0x70,0x08,0x00,0x04,0x04,EOT}},
 60  		{0x3, "Floppy",
 61  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,
 62  			 EOT},
 63  			{MISC,0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x20,0x00,
 64  			 EOT}},
 65  		{0x4, "Parallel port",
 66  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
 67  			{0x00,0x00,0x02,0x78,0x07,0x00,0x04,0x04,0xf2,EOT}},
 68  		{0x5, "COM2 / IR",
 69  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
 70  			{0x00,0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
 71  		{0x6, "COM1",
 72  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
 73  			{0x00,0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
 74  		{0x7, "GPIO",
 75  			{0x30,0x31,0x60,0x61,0x74,0x75,EOT},
 76  			{0x00,0x00,0x00,0x00,0x04,0x04,EOT}},
 77  		{0x8, "Power management",
 78  			{0x30,0x31,0x60,0x61,0x74,0x75,EOT},
 79  			{0x00,0x00,0x00,0x00,0x04,0x04,EOT}},
 80  		{EOT}}},
 81  	{0xdf, "PC97317", {
 82  		{NOLDN, NULL,
 83  			{0x20,0x21,0x22,0x23,0x24,0x25,0x27,EOT},
 84  			{0xdf,MISC,MISC,0x00,0x00,0x00,NANA,EOT}},
 85  		{0x0, "Keyboard",
 86  			{0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,
 87  			 0xf0,EOT},
 88  			{MISC,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,
 89  			 0x40,EOT}},
 90  		{0x1, "Mouse",
 91  			{0x30,0x70,0x71,0x74,0x75,EOT},
 92  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
 93  		{0x2, "Real-time clock (RTC), advanced power control (APC)",
 94  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,EOT},
 95  			{MISC,0x00,0x00,0x70,0x08,0x00,0x04,0x04,EOT}},
 96  		{0x3, "Floppy",
 97  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,
 98  			 EOT},
 99  			{MISC,0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x20,0x00,
100  			 EOT}},
101  		{0x4, "Parallel port",
102  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
103  			{0x00,0x00,0x02,0x78,0x07,0x00,0x04,0x04,0xf2,EOT}},
104  		{0x5, "COM2 / IR",
105  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
106  			{0x00,0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
107  		{0x6, "COM1",
108  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
109  			{0x00,0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
110  		{0x7, "GPIO",
111  			{0x30,0x31,0x60,0x61,0x74,0x75,EOT},
112  			{0x00,0x00,0x00,0x00,0x04,0x04,EOT}},
113  		{0x8, "Power management",
114  			{0x30,0x31,0x60,0x61,0x74,0x75,EOT},
115  			{0x00,0x00,0x00,0x00,0x04,0x04,EOT}},
116  		{EOT}}},
117  	{0xe0, "PC87309", {
118  		{NOLDN, NULL,
119  			{0x20,0x21,0x22,0x27,0x2e,EOT},
120  			{0xe0,MISC,0x00,NANA,RSVD,EOT}},
121  		{0x0, "Floppy",
122  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,
123  			 EOT},
124  			{MISC,0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x20,0x00,
125  			 EOT}},
126  		{0x1, "Parallel port",
127  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
128  			{0x00,0x00,0x02,0x78,0x07,0x00,0x04,0x04,0xf2,EOT}},
129  		{0x2, "COM2 / IR",
130  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
131  			{0x00,0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
132  		{0x3, "COM1",
133  			{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
134  			{0x00,0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
135  		{0x4, "Power management",
136  			{0x30,0x31,0x60,0x61,0x74,0x75,EOT},
137  			{0x00,0x00,0x00,0x00,0x04,0x04,EOT}},
138  		{0x5, "Mouse",
139  			{0x30,0x70,0x71,0x74,0x75,EOT},
140  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
141  		{0x6, "Keyboard",
142  			{0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,
143  			 0xf0,EOT},
144  			{0x01,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,
145  			 0x40,EOT}},
146  		{EOT}}},
147  	{0xe1, "PC87360", {
148  		{NOLDN, NULL,
149  			{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x2a,
150  			 0x2b,0x2c,0x2d,0x2e,EOT},
151  			{0xe1,0x11,0x00,0x03,0x00,0x00,0x00,NANA,0x00,MISC,
152  			 0x00,0x00,0x00,RSVD,EOT}},
153  		{0x0, "Floppy",
154  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,EOT},
155  			{0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x24,0x00,EOT}},
156  		{0x1, "Parallel port",
157  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
158  			{0x00,0x02,0x78,0x07,0x02,0x04,0x04,0xf2,EOT}},
159  		{0x2, "COM2",
160  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
161  			{0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
162  		{0x3, "COM1",
163  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
164  			{0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
165  		{0x4, "System wake-up control (SWC)",
166  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,EOT},
167  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,EOT}},
168  		{0x5, "Mouse",
169  			{0x30,0x70,0x71,0x74,0x75,EOT},
170  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
171  		{0x6, "Keyboard",
172  			{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,0xf0,
173  			 EOT},
174  			{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,0x40,
175  			 EOT}},
176  		{0x7, "GPIO",
177  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,0xf2,
178  			 EOT},
179  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,0x00,0x00,
180  			 EOT}},
181  		{0x8, "ACCESS.bus (ACB)",
182  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
183  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,EOT}},
184  		{0x9, "Fan speed control and monitor (FSCM)",
185  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
186  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,EOT}},
187  		{0xa, "Watchdog timer",
188  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
189  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x02,EOT}},
190  		{EOT}}},
191  	{0xe2, "PC87351", {
192  		{NOLDN, NULL,
193  			{0x20,0x21,0x22,0x23,0x24,0x27,0x2e,EOT},
194  			{0xe2,0x11,0xa1,0x00,MISC,NANA,RSVD,EOT}},
195  		{0x0, "Floppy",
196  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,EOT},
197  			{0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x24,0x00,EOT}},
198  		{0x1, "Parallel port",
199  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
200  			{0x00,0x02,0x78,0x07,0x02,0x04,0x04,0xf2,EOT}},
201  		{0x2, "COM2",
202  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
203  			{0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
204  		{0x3, "COM1",
205  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
206  			{0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
207  		{0x4, "System wake-up control (SWC)",
208  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,EOT},
209  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,EOT}},
210  		{0x5, "Mouse",
211  			{0x30,0x70,0x71,0x74,0x75,EOT},
212  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
213  		{0x6, "Keyboard",
214  			{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,
215  			 0xf0,EOT},
216  			{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,
217  			 0x40,EOT}},
218  		{0x7, "GPIO",
219  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,EOT},
220  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,0x00,EOT}},
221  		{0x8, "Fan speed control",
222  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
223  			{0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x00,EOT}},
224  		{EOT}}},
225  	{0xe4, "PC87364", {
226  		{NOLDN, NULL,
227  			{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x2a,
228  			 0x2b,0x2c,0x2d,0x2e,EOT},
229  			{0xe4,0x11,0x00,0x03,0x00,0x00,0x00,NANA,0x00,MISC,
230  			 0x00,0x00,NANA,RSVD,EOT}},
231  		{0x0, "Floppy",
232  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,EOT},
233  			{0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x24,0x00,EOT}},
234  		{0x1, "Parallel port",
235  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
236  			{0x00,0x02,0x78,0x07,0x02,0x04,0x04,0xf2,EOT}},
237  		{0x2, "COM2",
238  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
239  			{0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
240  		{0x3, "COM1",
241  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
242  			{0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
243  		{0x4, "System wake-up control (SWC)",
244  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,EOT},
245  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,EOT}},
246  		{0x5, "Mouse",
247  			{0x30,0x70,0x71,0x74,0x75,EOT},
248  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
249  		{0x6, "Keyboard",
250  			{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,0xf0,
251  			 EOT},
252  			{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,0x40,
253  			 EOT}},
254  		{0x7, "GPIO",
255  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,0xf2,
256  			 EOT},
257  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,0x00,0x00,
258  			 EOT}},
259  		{0x8, "ACCESS.bus (ACB)",
260  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
261  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,EOT}},
262  		{0x9, "Fan speed control and monitor (FSCM)",
263  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,EOT},
264  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,0x00,EOT}},
265  		{0xa, "Watchdog timer",
266  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
267  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x02,EOT}},
268  		{EOT}}},
269  	{0xe5, "PC87365", {	/* SRID[7..0] == chip revision */
270  		{EOT}}},
271  	{0xe8, "PC87363", {
272  		{EOT}}},
273  	{0xe9, "PC87366", {
274  		{NOLDN, NULL,
275  			{0x20,0x21,0x22,0x23,0x24,0x25,0x27,0x28,0x2a,0x2b,
276  			 0x2c,0x2d,0x2e,EOT},
277  			{0xe9,0x11,0x00,0x03,0x00,0x00,NANA,0x00,MISC,MISC,
278  			 0x00,MISC,RSVD,EOT}},
279  		{0x0, "Floppy",
280  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,EOT},
281  			{0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x24,0x00,EOT}},
282  		{0x1, "Parallel port",
283  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
284  			{0x00,0x02,0x78,0x07,0x02,0x04,0x04,0xf2,EOT}},
285  		{0x2, "COM2",
286  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
287  			{0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
288  		{0x3, "COM1",
289  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
290  			{0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
291  		{0x4, "System wake-up control (SWC)",
292  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,EOT},
293  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,EOT}},
294  		{0x5, "Mouse",
295  			{0x30,0x70,0x71,0x74,0x75,EOT},
296  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
297  		{0x6, "Keyboard",
298  			{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,0xf0,
299  			 EOT},
300  			{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,0x40,
301  			 EOT}},
302  		{0x7, "GPIO",
303  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,0xf2,
304  			 EOT},
305  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,0x00,0x00,
306  			 EOT}},
307  		{0x8, "ACCESS.bus (ACB)",
308  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
309  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,EOT}},
310  		{0x9, "Fan speed control and monitor (FSCM)",
311  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,0xf2,
312  			 EOT},
313  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,0x00,0x00,
314  			 EOT}},
315  		{0xa, "Watchdog timer (WDT)",
316  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
317  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x02,EOT}},
318  		{0xb, "Game port",
319  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
320  			{0x00,0x02,0x00,0x00,0x03,0x04,0x04,0x00,EOT}},
321  		{0xc, "MIDI port",
322  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
323  			{0x00,0x03,0x30,0x00,0x03,0x04,0x04,0x00,EOT}},
324  		{0xd, "Voltage level monitor (VLM)",
325  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,EOT},
326  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,EOT}},
327  		{0xe, "Temperature sensor (TMS)",
328  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,EOT},
329  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,EOT}},
330  		{EOT}}},
331  	{0xf4, "PC87382", {
332  		{NOLDN, NULL,
333  			{0x20,0x21,0x22,0x26,0x27,0x29,EOT},
334  			{0xf4,0x11,0x63,0x00,0x00,0x00,EOT}},
335  		{0x02, "IR",
336  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
337  			{0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
338  		{0x03, "COM1",
339  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
340  			{0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
341  		{0x07, "GPIO",
342  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,
343  			 0xf2,EOT},
344  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,MISC,
345  			 0x01,EOT}},
346  		{0x19, "Docking LPC switch",
347  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,EOT},
348  			{0x00,0x00,0x00,0x00,0x00,0x04,0x04,EOT}},
349  		{EOT}}},
350  	/* SID[7..0]: family, SRID[7..5]: ID, SRID[4..0]: rev. */
351  	{0xea, "PC8739x", {
352  		{NOLDN, NULL,
353  			{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
354  			 0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
355  			{0xea,0x11,MISC,MISC,MISC,0x80,0x00,NANA,0x00,MISC,
356  			 0x37,RSVD,RSVD,RSVD,RSVD,RSVD,EOT}},
357  		{0x0, "Floppy",
358  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,EOT},
359  			{0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x24,0x00,EOT}},
360  		{0x1, "Parallel port",
361  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
362  			{0x00,0x02,0x78,0x07,0x02,0x04,0x04,0xf2,EOT}},
363  		{0x2, "COM2 / FIR",
364  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
365  			{0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
366  		{0x3, "COM1",
367  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
368  			{0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
369  		{0x7, "GPIO",
370  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,0xf2,
371  			 EOT},
372  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,0x44,0x01,
373  			 EOT}},
374  		{0xa, "Watchdog timer (WDT)",
375  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
376  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x02,EOT}},
377  		{0xb, "Game port",
378  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
379  			{0x00,0x02,0x01,0x00,0x03,0x04,0x04,0x00,EOT}},
380  		{0xc, "MIDI port",
381  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
382  			{0x00,0x03,0x30,0x00,0x03,0x04,0x04,0x00,EOT}},
383  		{0xf, "X-Bus",
384  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,0xf2,
385  			 0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,EOT},
386  			{0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x00,0x00,0x00,
387  			 0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
388  		{EOT}}},
389  	{0xec, "PC87591x", {
390  		/* SRID[7..5]: 000=PC87591E, 001=PC87591S, 100=PC87591L */
391  		{EOT}}},
392  	{0xee, "PC8741x", {
393  		/* SRID[7..5] is marked as "not applicable for the PC8741x". */
394  		{NOLDN, NULL,
395  			{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
396  			 0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
397  			{0xee,0x11,0x20,MISC,MISC,MISC,0x00,NANA,0x00,MISC,
398  			 0x00,RSVD,RSVD,RSVD,RSVD,RSVD,EOT}},
399  		{0x0, "Floppy",
400  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,EOT},
401  			{0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x24,0x00,EOT}},
402  		{0x1, "Parallel port",
403  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
404  			{0x00,0x02,0x78,0x07,0x02,0x04,0x04,0xf2,EOT}},
405  		{0x2, "COM2",
406  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
407  			{0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
408  		{0x3, "COM1",
409  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
410  			{0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
411  		{0x4, "System wake-up control (SWC)",
412  			{0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x70,
413  			 0x71,0x74,0x75,EOT},
414  			{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
415  			 0x03,0x04,0x04,EOT}},
416  		{0x5, "Mouse",
417  			{0x30,0x70,0x71,0x74,0x75,EOT},
418  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
419  		{0x6, "Keyboard",
420  			{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,0xf0,
421  			 EOT},
422  			{0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,0x40,
423  			 EOT}},
424  		{0x7, "GPIO",
425  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,0xf2,
426  			 0xf3,EOT},
427  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,MISC,0x01,
428  			 0x00,EOT}},
429  		{0xf, "X-Bus",
430  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,0xf2,
431  			 0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
432  			 EOT},
433  			{0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x00,0x00,0x00,
434  			 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
435  			 EOT}},
436  		{0x10, "Real-time clock (RTC)",
437  			{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,0xf0,
438  			 0xf1,0xf2,0xf3,EOT},
439  			{0x00,0x00,0x70,0x00,0x72,0x08,0x00,0x04,0x04,0x00,
440  			 0x00,0x00,0x00,EOT}},
441  		{EOT}}},
442  	{0xf0, "PC87372", {
443  		{EOT}}},
444  	{0x0f1, "PC8374L", {
445  		{NOLDN, NULL,
446  			{0x10,0x12,0x13,0x20,0x21,0x22,0x23,0x24,0x25,0x26,
447  			 0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
448  			{0x00,0x00,0x00,0xf1,0x11,0x00,0x00,0x00,RSVD,0x00,
449  			 MISC,RSVD,0x01,0x2e,RSVD,RSVD,RSVD,RSVD,RSVD,EOT}},
450  		{0x0, "Floppy",
451  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,0xf8,
452  			 EOT},
453  			{0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x24,0x00,0x24,
454  			 EOT}},
455  		{0x1, "Parallel port",
456  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf8,EOT},
457  			{0x00,0x02,0x78,0x07,0x02,0x04,0x04,0xf2,0x07,EOT}},
458  		{0x2, "COM2 / IR",
459  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
460  			{0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
461  		{0x3, "COM1",
462  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
463  			{0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
464  		{0x4, "System wake-up control (SWC)",
465  			{0x30,0x50,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,
466  			 EOT},
467  			{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,
468  			 EOT}},
469  		{0x5, "Mouse",
470  			{0x30,0x70,0x71,0x74,0x75,EOT},
471  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
472  		{0x6, "Keyboard",
473  			{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,0xf0,
474  			 EOT},
475  			{0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,0x40,
476  			 EOT}},
477  		{0x7, "GPIO",
478  			{0x30,0x50,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,
479  			 0xf2,0xf3,0xf8,EOT},
480  			{0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,MISC,
481  			 0x00,MISC,0x01,EOT}},
482  		{0x8, "Health management",
483  			{0x30,0x50,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
484  			{0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x05,EOT}},
485  		{EOT}}},
486  	{0x8f1, "WPCD376I", {
487  		/* This is basically a clone/revision of NSC PC8374L. */
488  		{NOLDN, NULL,
489  			{0x10,0x12,0x13,0x20,0x21,0x22,0x23,0x24,0x25,0x26,
490  			 0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
491  			{0x00,0x00,0x00,0xf1,0x11,0x00,0x00,0x00,0x06,0x00,
492  			 MISC,RSVD,0x01,0x2e,RSVD,RSVD,RSVD,RSVD,RSVD,EOT}},
493  		{0x0, "Floppy",
494  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,0xf8,
495  			 EOT},
496  			{0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x24,0x00,0x24,
497  			 EOT}},
498  		{0x1, "Parallel port",
499  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf8,EOT},
500  			{0x00,0x02,0x78,0x07,0x02,0x04,0x04,0xf2,0x07,EOT}},
501  		{0x3, "COM1",
502  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
503  			{0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
504  		{0x4, "System wake-up control (SWC)",
505  			{0x30,0x50,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,
506  			 EOT},
507  			{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,
508  			 EOT}},
509  		{0x5, "Mouse",
510  			{0x30,0x70,0x71,0x74,0x75,EOT},
511  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
512  		{0x6, "Keyboard",
513  			{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,0xf0,
514  			 EOT},
515  			{0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,0x40,
516  			 EOT}},
517  		{0x7, "GPIO",
518  			{0x30,0x50,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,
519  			 0xf2,0xf3,0xf8,EOT},
520  			{0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,MISC,
521  			 0x00,MISC,0x01,EOT}},
522  		{0x15, "ECIR",
523  			{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,EOT},
524  			{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,EOT}},
525  		{0x16, "COM3 / IR",
526  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
527  			{0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x02,EOT}},
528  		{EOT}}},
529  	{0xf2, "PC87427", {
530  		/* SRID[7..5] is marked as "not applicable for the PC87427". */
531  		{NOLDN, NULL,
532  			{0x10,0x12,0x13,0x1d,0x20,0x21,0x22,0x23,0x24,0x25,
533  			 0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
534  			 EOT},
535  			{0x00,0x00,0x00,0x00,0xf2,0x11,0xa0,MISC,MISC,MISC,
536  			 0x02,NANA,0x00,MISC,0x00,0x00,MISC,MISC,RSVD,RSVD,
537  			 EOT}},
538  		{0x0, "Floppy",
539  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,EOT},
540  			{0x00,0x03,0xf2,0x06,0x03,0x02,0x04,0x24,0x00,EOT}},
541  		{0x2, "COM2",
542  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
543  			{0x00,0x02,0xf8,0x03,0x03,0x04,0x04,0x02,EOT}},
544  		{0x3, "COM1",
545  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
546  			{0x00,0x03,0xf8,0x04,0x03,0x04,0x04,0x02,EOT}},
547  		{0x4, "System wake-up control (SWC)",
548  			{0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x70,
549  			 0x71,0x74,0x75,EOT},
550  			{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
551  			 0x03,0x04,0x04,EOT}},
552  		{0x5, "Mouse",
553  			{0x30,0x70,0x71,0x74,0x75,EOT},
554  			{0x00,0x0c,0x02,0x04,0x04,EOT}},
555  		{0x6, "Keyboard",
556  			{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,0xf0,
557  			 EOT},
558  			{0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x04,0x04,0x40,
559  			 EOT}},
560  		{0x7, "GPIO",
561  			{0x30,0x50,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,
562  			 0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,EOT},
563  			{0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,MISC,
564  			 0x01,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
565  		{0x9, "Fan Monitor and Control (FMC)",
566  			{0x30,0x50,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,
567  			 EOT},
568  			{0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x19,0x06,
569  			 EOT}},
570  		{0xa, "Watchdog timer (WDT)",
571  			{0x30,0x50,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,EOT},
572  			{0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,EOT}},
573  		{0xf, "X-Bus",
574  			{0x30,0x60,0x61,0x70,0x71,0x74,0x75,0xf0,0xf1,0xf2,
575  			 0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
576  			 0xfd,0xfe,0xff,EOT},
577  			{0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x00,0x00,0x00,
578  			 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
579  			 0x00,0x80,0x10,EOT}},
580  		{0x10, "Real-time clock (RTC)",
581  			{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,0xf0,
582  			 0xf1,0xf2,0xf3,0xf6,0xf7,EOT},
583  			{0x00,0x00,0x70,0x00,0x72,0x08,0x00,0x04,0x04,0x00,
584  			 0x00,0x00,0x00,MISC,0x00,EOT}},
585  		{0x14, "Health monitoring and control (HMC)",
586  			{0x30,0x50,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0x75,
587  			 0xf0,EOT},
588  			{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,
589  			 0x05,EOT}},
590  		{EOT}}},
591  	{0xf3, "PC87373", {
592  		{EOT}}},
593  	{EOT}
594  };
595  
596  void probe_idregs_nsc(uint16_t port)
597  {
598  	uint8_t id, rev;
599  	uint16_t magic;
600  
601  	probing_for("NSC", "", port);
602  
603  	OUTB(CHIP_ID_REG, port);
604  	if (INB(port) != CHIP_ID_REG) {
605  		if (verbose)
606  			printf(NOTFOUND "port=0x%02x, port+1=0x%02x\n",
607  			       INB(port), INB(port + 1));
608  		return;
609  	}
610  	id = INB(port + 1);
611  
612  	OUTB(CHIP_REV_REG, port);
613  	if (INB(port) != CHIP_REV_REG) {
614  		printf("Warning: Can't get chip revision. Setting to 0xff.\n");
615  		rev = 0xff;
616  	} else {
617  		rev = INB(port + 1);
618  	}
619  
620  	/*
621  	 * NSC PC8374L has ID 0xf1, rev 0b000xxxxx according to datasheet.
622  	 * Winbond WPCD376I has ID 0xf1, rev 0b100xxxxx according to datasheet.
623  	 */
624  	if (id == 0xf1)
625  		magic = ((rev & 0xe0) << 4) | id;
626  	else
627  		magic = id;
628  
629  	if (superio_unknown(reg_table, magic)) {
630  		if (verbose)
631  			printf(NOTFOUND "sid=0x%02x, srid=0x%02x\n", id, rev);
632  		return;
633  	}
634  
635  	printf("Found %s %s (sid=0x%02x, srid=0x%02x) at 0x%x\n",
636  	       magic == 0x8f1 ? "Winbond" : "NSC",
637  	       get_superio_name(reg_table, magic), id, rev, port);
638  	chip_found = 1;
639  
640  	dump_superio(magic == 0x8f1 ? "Winbond" : "NSC",
641  		     reg_table, port, magic, LDN_SEL);
642  }
643  
644  void print_nsc_chips(void)
645  {
646  	print_vendor_chips("NSC", reg_table);
647  }