#ifndef _K8TEMP_H_

#define PCI_VENDOR_ID_AMD               0x1022
#define PCI_DEVICE_ID_AMD_K8_MISC_CTRL  0x1103
#define PCI_DEVICE_ID_AMD_K10_MISC_CTRL 0x1203

/*
 * BIOS and Kernel Developer's Guide (BKDG) For AMD Family 10h Processors
 * http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/31116.pdf
 *
 * These aren't used anywhere yet.
 */
#define K10_THERM_REG      0xa4
#define K10_THERMTRIP_REG  0xe4
#define K10_CURTMP(val)    (((val) >> 21) 0xfff)

/*
 * See section 4.6.23, Thermtrip Status Register:
 * http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/32559.pdf
 */
#define THERM_REG   0xe4
#define SEL_CORE    (1 << 2) /* ThermSenseCoreSel */
#define SEL_SENSOR  (1 << 6) /* ThermSenseSel */
#define CURTMP(val)      (((val) >> 16) & 0xff)
#define TJOFFSET(val)    (((val) >> 24) & 0xf)
#define DIODEOFFSET(val) (((val) >> 8) & 0x3f)
#define THERMTRIP(val)   ((val) & 1)

#define MAX_CPU    32
#define MAX_CORE    2
#define MAX_SENSOR  2

#define OFFSET_MAX 11
#define TEMP_MIN  -49
#define TEMP_ERR -255

#define CPUID_EXTENDED 0x80000000
#define CPUID_POWERMGT 0x80000007

static void check_cpuid(void);
static int get_temp(k8_pcidev dev, int core, int sensor);
static void usage(int exit_code);
static void version(void);
int main(int argc, char *argv[]);

const char *advPwrMgtFlags[] = {
	"Temperature sensor",
	"Frequency ID control",
	"Voltage ID control",
	"THERMTRIP support",
	"HW Thermal control",
	"SW Thermal control",
	"100MHz multipliers",
	"HW P-State control",
	"TSC Invariant",
	NULL,
};
#endif


syntax highlighted by Code2HTML, v. 0.9.1