Annotation of sys/dev/isa/viasioreg.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: viasioreg.h,v 1.3 2006/02/24 11:16:17 grange Exp $ */
! 2: /*
! 3: * Copyright (c) 2005 Alexander Yurchenko <grange@openbsd.org>
! 4: *
! 5: * Permission to use, copy, modify, and distribute this software for any
! 6: * purpose with or without fee is hereby granted, provided that the above
! 7: * copyright notice and this permission notice appear in all copies.
! 8: *
! 9: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 10: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 11: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 12: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 13: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 14: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 15: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 16: */
! 17:
! 18: #ifndef _DEV_ISA_VIASIOREG_H_
! 19: #define _DEV_ISA_VIASIOREG_H_
! 20:
! 21: /*
! 22: * VIA VT1211 LPC Super I/O register definitions.
! 23: */
! 24:
! 25: /*
! 26: * Obtained from the following datasheet:
! 27: *
! 28: * VT1211
! 29: * Low Pin Count Super I/O And Hardware Monitor
! 30: * Revision 1.0
! 31: * January 8, 2002
! 32: * VIA TECHNOLOGIES, INC.
! 33: */
! 34:
! 35: /* ISA bus registers */
! 36: #define VT1211_INDEX 0x00 /* Configuration Index Register */
! 37: #define VT1211_DATA 0x01 /* Configuration Data Register */
! 38:
! 39: #define VT1211_IOSIZE 0x02 /* ISA I/O space size */
! 40:
! 41: #define VT1211_CONF_EN_MAGIC 0x87 /* enable configuration mode */
! 42: #define VT1211_CONF_DS_MAGIC 0xaa /* disable configuration mode */
! 43:
! 44: /* Configuration Space Registers */
! 45: #define VT1211_LDN 0x07 /* Logical Device Number */
! 46: #define VT1211_ID 0x20 /* Device ID */
! 47: #define VT1211_REV 0x21 /* Device Revision */
! 48: #define VT1211_PDC 0x22 /* Power Down Control */
! 49: #define VT1211_LPCWSS 0x23 /* LPC Wait State Select */
! 50: #define VT1211_GPIO1PS 0x24 /* GPIO Port 1 Pin Select */
! 51: #define VT1211_GPIO2PS 0x25 /* GPIO Port 2 Pin Select */
! 52: #define VT1211_GPIO7PS 0x26 /* GPIO Port 7 Pin Select */
! 53: #define VT1211_UART2PS 0x27 /* UART2 Multi Function Pin Select */
! 54: #define VT1211_MIDIPS 0x28 /* MIDI Multi Function Pin Select */
! 55: #define VT1211_HWMPS 0x29 /* HWM Multi Function Pin Select */
! 56: #define VT1211_TMA 0x2e /* Test Mode A */
! 57: #define VT1211_TMB 0x2f /* Test Mode B */
! 58:
! 59: #define VT1211_ID_VT1211 0x3c /* VT1211 Device ID */
! 60:
! 61: /* Logical Device Number (LDN) Assignments */
! 62: #define VT1211_LDN_FDC 0x00 /* Floppy Disk Controller */
! 63: #define VT1211_LDN_PP 0x01 /* Parallel Port */
! 64: #define VT1211_LDN_UART1 0x02 /* Serial Port 1 */
! 65: #define VT1211_LDN_UART2 0x03 /* Serial Port 2 */
! 66: #define VT1211_LDN_MIDI 0x06 /* MIDI */
! 67: #define VT1211_LDN_GMP 0x07 /* Game Port */
! 68: #define VT1211_LDN_GPIO 0x08 /* GPIO */
! 69: #define VT1211_LDN_WDG 0x09 /* Watch Dog */
! 70: #define VT1211_LDN_WUC 0x0a /* Wake-up Control */
! 71: #define VT1211_LDN_HM 0x0b /* Hardware Monitor */
! 72: #define VT1211_LDN_VFIR 0x0c /* Very Fast IR */
! 73: #define VT1211_LDN_ROM 0x0d /* Flash ROM */
! 74:
! 75: /* Watchdog Timer Control Registers (LDN 9) */
! 76: #define VT1211_WDG_ACT 0x30 /* Activate */
! 77: #define VT1211_WDG_ACT_EN (1 << 0) /* enabled */
! 78: #define VT1211_WDG_ADDR_MSB 0x60 /* Address [15:8] */
! 79: #define VT1211_WDG_ADDR_LSB 0x61 /* Address [7:0] */
! 80: #define VT1211_WDG_IRQSEL 0x70 /* IRQ Select */
! 81: #define VT1211_WDG_CONF 0xf0 /* Configuration */
! 82:
! 83: /* Hardware Monitor Control Registers (LDN B) */
! 84: #define VT1211_HM_ACT 0x30 /* Activate */
! 85: #define VT1211_HM_ACT_EN (1 << 0) /* enabled */
! 86: #define VT1211_HM_ADDR_MSB 0x60 /* Address [15:8] */
! 87: #define VT1211_HM_ADDR_LSB 0x61 /* Address [7:0] */
! 88: #define VT1211_HM_IRQSEL 0x70 /* IRQ Select */
! 89:
! 90: /* Watchdog Timer I/O Space Registers */
! 91: #define VT1211_WDG_STAT 0x00 /* Status */
! 92: #define VT1211_WDG_STAT_ACT (1 << 0) /* timer is active */
! 93: #define VT1211_WDG_MASK 0x01 /* Mask */
! 94: #define VT1211_WDG_MASK_COM1 (1 << 1) /* COM1 trigger */
! 95: #define VT1211_WDG_MASK_COM2 (1 << 2) /* COM2 trigger */
! 96: #define VT1211_WDG_TIMEOUT 0x02 /* Timeout */
! 97:
! 98: #define VT1211_WDG_IOSIZE 0x04 /* Watchdog timer I/O space size */
! 99:
! 100: /* Hardware Monitor I/O Space Registers */
! 101: #define VT1211_HM_SELD0 0x10 /* SELD[7:0] */
! 102: #define VT1211_HM_SELD1 0x11 /* SELD[15:8] */
! 103: #define VT1211_HM_SELD2 0x12 /* SELD[19:16] */
! 104: #define VT1211_HM_ADATA_MSB 0x13 /* Analog Data D[15:8] */
! 105: #define VT1211_HM_ADATA_LSB 0x14 /* Analog Data D[7:0] */
! 106: #define VT1211_HM_DDATA 0x15 /* Digital Data D[7:0] */
! 107: #define VT1211_HM_CHCNT 0x16 /* Channel Counter */
! 108: #define VT1211_HM_DVCI 0x17 /* Data Valid & Channel Indications */
! 109: #define VT1211_HM_SMBUSCTL 0x18 /* SMBus Control */
! 110: #define VT1211_HM_AFECTL 0x19 /* AFE Control */
! 111: #define VT1211_HM_AFETCTL 0x1a /* AFE Test Control */
! 112: #define VT1211_HM_CHSET 0x1b /* Channel Setting */
! 113: #define VT1211_HM_HTL3 0x1d /* Hot Temp Limit 3 */
! 114: #define VT1211_HM_HTHL3 0x1e /* Hot Temp Hysteresis Limit 3 */
! 115: #define VT1211_HM_TEMP1 0x1f /* Temperature Reading 1 */
! 116: #define VT1211_HM_TEMP3 0x20 /* Temperature Reading 3 */
! 117: #define VT1211_HM_UCH1 0x21 /* UCH1 */
! 118: #define VT1211_HM_UCH2 0x22 /* UCH2 */
! 119: #define VT1211_HM_UCH3 0x23 /* UCH3 */
! 120: #define VT1211_HM_UCH4 0x24 /* UCH4 */
! 121: #define VT1211_HM_UCH5 0x25 /* UCH5 */
! 122: #define VT1211_HM_33V 0x26 /* +3.3V (Internal Vcc ) */
! 123: #define VT1211_HM_FAN1 0x29 /* FAN1 Reading */
! 124: #define VT1211_HM_FAN2 0x2a /* FAN2 Reading */
! 125: #define VT1211_HM_UCH2HL 0x2b /* UCH2 High Limit */
! 126: #define VT1211_HM_UCH2LL 0x2c /* UCH2 Low Limit */
! 127: #define VT1211_HM_UCH3HL 0x2d /* UCH3 High Limit */
! 128: #define VT1211_HM_UCH3LL 0x2e /* UCH3 Low Limit */
! 129: #define VT1211_HM_UCH4HL 0x2f /* UCH4 High Limit */
! 130: #define VT1211_HM_UCH4LL 0x30 /* UCH4 Low Limit */
! 131: #define VT1211_HM_UCH5HL 0x31 /* UCH5 High Limit */
! 132: #define VT1211_HM_UCH5LL 0x32 /* UCH5 Low Limit */
! 133: #define VT1211_HM_33VHL 0x33 /* Internal +3.3V High Limit */
! 134: #define VT1211_HM_33VLL 0x34 /* Internal +3.3V Low Limit */
! 135: #define VT1211_HM_HTL1 0x39 /* Hot Temp Limit 1 */
! 136: #define VT1211_HM_HTHL1 0x3a /* Hot Temp Hysteresis Limit 1 */
! 137: #define VT1211_HM_FAN1CL 0x3b /* FAN1 Fan Count Limit */
! 138: #define VT1211_HM_FAN2CL 0x3c /* FAN2 Fan Count Limit */
! 139: #define VT1211_HM_UCH1HL 0x3d /* UCH1 High Limit */
! 140: #define VT1211_HM_UCH1LL 0x3e /* UCH1 Low Limit */
! 141: #define VT1211_HM_STEPID 0x3f /* Stepping ID Number */
! 142: #define VT1211_HM_CONF 0x40 /* Configuration */
! 143: #define VT1211_HM_CONF_START (1 << 0)
! 144: #define VT1211_HM_INTST1 0x41 /* Interrupt INT Status 1 */
! 145: #define VT1211_HM_INTST2 0x42 /* Interrupt INT Status 2 */
! 146: #define VT1211_HM_INTMASK1 0x43 /* INT Mask 1 */
! 147: #define VT1211_HM_INTMASK2 0x44 /* INT Mask 2 */
! 148: #define VT1211_HM_VID 0x45 /* VID */
! 149: #define VT1211_HM_OVOFCTL 0x46 /* Over Voltage & Over Fan Control */
! 150: #define VT1211_HM_FSCTL 0x47 /* Fan Speed Control */
! 151: #define VT1211_HM_FSCTL_DIV1(v) (((v) >> 4) & 0x03)
! 152: #define VT1211_HM_FSCTL_DIV2(v) (((v) >> 6) & 0x03)
! 153: #define VT1211_HM_SBA 0x48 /* Serial Bus Address */
! 154: #define VT1211_HM_VID4 0x49 /* VID 4 */
! 155: #define VT1211_HM_VID4_UCH1(v) (((v) >> 4) & 0x03)
! 156: #define VT1211_HM_UCHCONF 0x4a /* Universal Channel Configuration */
! 157: #define VT1211_HM_UCHCONF_ISTEMP(v, n) (((v) & (1 << ((n) + 1))) != 0)
! 158: #define VT1211_HM_TCONF1 0x4b /* Temperature Configuration 1 */
! 159: #define VT1211_HM_TCONF1_TEMP1(v) (((v) >> 6) & 0x03)
! 160: #define VT1211_HM_TCONF2 0x4c /* Temperature Configuration 2 */
! 161: #define VT1211_HM_ETR 0x4d /* Extended Temperature Resolution */
! 162: #define VT1211_HM_ETR_UCH(v, n) (((v) >> (((n) - 2) * 2)) & 0x03)
! 163: #define VT1211_HM_OTCTL 0x4e /* Over Temperature Control */
! 164: #define VT1211_HM_PWMCS 0x50 /* PWM Clock Select */
! 165: #define VT1211_HM_PWMCTL 0x51 /* PWM Control */
! 166: #define VT1211_HM_PWMFST 0x52 /* PWM Full Speed Temperature Value */
! 167: #define VT1211_HM_PWMHST 0x53 /* PWM High Speed Temperature Value */
! 168: #define VT1211_HM_PWMLST 0x54 /* PWM Low Speed Temperature Value */
! 169: #define VT1211_HM_PWMFOT 0x55 /* PWM Fan Off Temperature Value */
! 170: #define VT1211_HM_PWMO1HSDC 0x56 /* PWM Output 1 Hi Speed Duty Cycle */
! 171: #define VT1211_HM_PWMO1LSDC 0x57 /* PWM Output 1 Lo Speed Duty Cycle */
! 172: #define VT1211_HM_PWMO2HSDC 0x58 /* PWM Output 2 Hi Speed Duty Cycle */
! 173: #define VT1211_HM_PWMO2LSDC 0x59 /* PWM Output 2 Lo Speed Duty Cycle */
! 174: #define VT1211_HM_PWMO3HSDC 0x5a /* PWM Output 3 Hi Speed Duty Cycle */
! 175: #define VT1211_HM_PWMO3LSDC 0x5b /* PWM Output 3 Lo Speed Duty Cycle */
! 176: #define VT1211_HM_BEEPEN 0x5c /* BEEP Event Enable */
! 177: #define VT1211_HM_FEBFD 0x5d /* Fan Event BEEP Frequency Divisor */
! 178: #define VT1211_HM_VEBFD 0x5e /* Volt Event BEEP Frequency Divisor */
! 179: #define VT1211_HM_TEBFD 0x5f /* Temp Event BEEP Frequency Divisor */
! 180: #define VT1211_HM_PWM1CDC 0x60 /* PWM1 Current Duty Cycle */
! 181: #define VT1211_HM_PWM2CDC 0x61 /* PWM2 Current Duty Cycle */
! 182:
! 183: #define VT1211_HM_IOSIZE 0x80 /* Hardware monitor I/O space size */
! 184:
! 185: /* PWM clock frequencies */
! 186: static const int vt1211_hm_clock[] = {
! 187: 90000, 45000, 22500, 11250, 5630, 2800, 1400, 700
! 188: };
! 189:
! 190: /* Voltage inputs resistor factors */
! 191: static const int vt1211_hm_vrfact[] = {
! 192: 5952, 8333, 5952, 4167, 1754, 6296
! 193: };
! 194:
! 195: /*
! 196: * Temperature lookup table for the following conversion formula:
! 197: *
! 198: * temp (degC) = (1.0 / (((1.0 / 3435.0) * (log((253.0 - raw / 4.0) /
! 199: * (raw / 4.0 - 43.0)))) + (1.0 / 298.15))) - 273.15;
! 200: *
! 201: */
! 202: static const struct {
! 203: int raw; /* raw value */
! 204: int64_t temp; /* temperature in uK */
! 205: } vt1211_hm_temptbl[] = {
! 206: { 176, 203690000LL },
! 207: { 184, 218020000LL },
! 208: { 192, 225470000LL },
! 209: { 200, 230710000LL },
! 210: { 208, 234830000LL },
! 211: { 216, 238260000LL },
! 212: { 224, 241230000LL },
! 213: { 232, 243850000LL },
! 214: { 240, 246220000LL },
! 215: { 248, 248390000LL },
! 216: { 256, 250390000LL },
! 217: { 264, 252260000LL },
! 218: { 272, 254020000LL },
! 219: { 280, 255680000LL },
! 220: { 288, 257260000LL },
! 221: { 296, 258760000LL },
! 222: { 304, 260210000LL },
! 223: { 312, 261600000LL },
! 224: { 320, 262940000LL },
! 225: { 328, 264240000LL },
! 226: { 336, 265500000LL },
! 227: { 344, 266730000LL },
! 228: { 352, 267930000LL },
! 229: { 360, 269100000LL },
! 230: { 368, 270240000LL },
! 231: { 376, 271360000LL },
! 232: { 384, 272460000LL },
! 233: { 392, 273540000LL },
! 234: { 400, 274610000LL },
! 235: { 408, 275660000LL },
! 236: { 416, 276700000LL },
! 237: { 424, 277720000LL },
! 238: { 432, 278730000LL },
! 239: { 440, 279740000LL },
! 240: { 448, 280730000LL },
! 241: { 456, 281720000LL },
! 242: { 464, 282700000LL },
! 243: { 472, 283670000LL },
! 244: { 480, 284640000LL },
! 245: { 488, 285610000LL },
! 246: { 496, 286570000LL },
! 247: { 504, 287530000LL },
! 248: { 512, 288490000LL },
! 249: { 520, 289450000LL },
! 250: { 528, 290400000LL },
! 251: { 536, 291360000LL },
! 252: { 544, 292320000LL },
! 253: { 552, 293280000LL },
! 254: { 560, 294250000LL },
! 255: { 568, 295210000LL },
! 256: { 576, 296190000LL },
! 257: { 584, 297160000LL },
! 258: { 592, 298150000LL },
! 259: { 600, 299130000LL },
! 260: { 608, 300130000LL },
! 261: { 616, 301140000LL },
! 262: { 624, 302150000LL },
! 263: { 632, 303170000LL },
! 264: { 640, 304210000LL },
! 265: { 648, 305250000LL },
! 266: { 656, 306310000LL },
! 267: { 664, 307380000LL },
! 268: { 672, 308470000LL },
! 269: { 680, 309570000LL },
! 270: { 688, 310690000LL },
! 271: { 696, 311830000LL },
! 272: { 704, 312990000LL },
! 273: { 712, 314170000LL },
! 274: { 720, 315380000LL },
! 275: { 728, 316610000LL },
! 276: { 736, 317860000LL },
! 277: { 744, 319150000LL },
! 278: { 752, 320460000LL },
! 279: { 760, 321810000LL },
! 280: { 768, 323200000LL },
! 281: { 776, 324620000LL },
! 282: { 784, 326090000LL },
! 283: { 792, 327610000LL },
! 284: { 800, 329170000LL },
! 285: { 808, 330790000LL },
! 286: { 816, 332470000LL },
! 287: { 824, 334220000LL },
! 288: { 832, 336040000LL },
! 289: { 840, 337940000LL },
! 290: { 848, 339940000LL },
! 291: { 856, 342030000LL },
! 292: { 864, 344230000LL },
! 293: { 872, 346560000LL },
! 294: { 880, 349030000LL },
! 295: { 888, 351670000LL },
! 296: { 896, 354490000LL },
! 297: { 904, 357530000LL },
! 298: { 912, 360830000LL },
! 299: { 920, 364430000LL },
! 300: { 928, 368410000LL },
! 301: { 936, 372830000LL },
! 302: { 944, 377820000LL },
! 303: { 952, 383530000LL },
! 304: { 960, 390210000LL },
! 305: { 968, 398230000LL },
! 306: { 976, 408200000LL },
! 307: { 984, 421270000LL },
! 308: { 992, 439960000LL }
! 309: };
! 310:
! 311: /* Hardware monitor sensors */
! 312: enum {
! 313: VT1211_HMS_TEMP1 = 0,
! 314: VT1211_HMS_UCH1,
! 315: VT1211_HMS_UCH2,
! 316: VT1211_HMS_UCH3,
! 317: VT1211_HMS_UCH4,
! 318: VT1211_HMS_UCH5,
! 319: VT1211_HMS_33V,
! 320: VT1211_HMS_FAN1,
! 321: VT1211_HMS_FAN2,
! 322: VT1211_HM_NSENSORS /* must be the last */
! 323: };
! 324:
! 325: #endif /* !_DEV_ISA_VIASIOREG_H_ */
CVSweb