annotate usr/src/uts/i86pc/os/cpupm/cpu_acpi.c @ 14169:ae5fcf7b2a38

4048 cpu_acpi is too verbose about disabled SpeedStep/PowerNow! support Reviewed by: Albert Lee <trisk@nexenta.com> Reviewed by: Garrett D'Amore <garrett@damore.org> Approved by: Dan McDonald <danmcd@nexenta.com>
author Yuri Pankov <yuri.pankov@nexenta.com>
date Thu, 29 Aug 2013 02:06:39 +0400
parents 01b2fa2ff254
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1 /*
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
2 * CDDL HEADER START
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
3 *
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
4 * The contents of this file are subject to the terms of the
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
5 * Common Development and Distribution License (the "License").
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
6 * You may not use this file except in compliance with the License.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
7 *
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
9 * or http://www.opensolaris.org/os/licensing.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
10 * See the License for the specific language governing permissions
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
11 * and limitations under the License.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
12 *
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
13 * When distributing Covered Code, include this CDDL HEADER in each
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
15 * If applicable, add the following below this CDDL HEADER, with the
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
16 * fields enclosed by brackets "[]" replaced with your own identifying
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
17 * information: Portions Copyright [yyyy] [name of copyright owner]
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
18 *
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
19 * CDDL HEADER END
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
20 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
21 /*
12511
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
22 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
23 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
24
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
25 #include <sys/cpu_acpi.h>
8983
981f8c40440c 6807891 system does not consider C3 when ACPI _CST object did not contain a C2 state
Bill Holler <Bill.Holler@Sun.COM>
parents: 8906
diff changeset
26 #include <sys/cpu_idle.h>
9004
0f2f9c0e4285 6756843 Clean up messages related to P and T states
Anup Pemmaiah <Napanda.Pemmaiah@Sun.COM>
parents: 8983
diff changeset
27 #include <sys/dtrace.h>
0f2f9c0e4285 6756843 Clean up messages related to P and T states
Anup Pemmaiah <Napanda.Pemmaiah@Sun.COM>
parents: 8983
diff changeset
28 #include <sys/sdt.h>
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
29
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
30 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
31 * List of the processor ACPI object types that are being used.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
32 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
33 typedef enum cpu_acpi_obj {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
34 PDC_OBJ = 0,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
35 PCT_OBJ,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
36 PSS_OBJ,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
37 PSD_OBJ,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
38 PPC_OBJ,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
39 PTC_OBJ,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
40 TSS_OBJ,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
41 TSD_OBJ,
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
42 TPC_OBJ,
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
43 CST_OBJ,
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
44 CSD_OBJ,
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
45 } cpu_acpi_obj_t;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
46
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
47 /*
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
48 * Container to store object name.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
49 * Other attributes can be added in the future as necessary.
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
50 */
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
51 typedef struct cpu_acpi_obj_attr {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
52 char *name;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
53 } cpu_acpi_obj_attr_t;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
54
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
55 /*
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
56 * List of object attributes.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
57 * NOTE: Please keep the ordering of the list as same as cpu_acpi_obj_t.
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
58 */
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
59 static cpu_acpi_obj_attr_t cpu_acpi_obj_attrs[] = {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
60 {"_PDC"},
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
61 {"_PCT"},
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
62 {"_PSS"},
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
63 {"_PSD"},
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
64 {"_PPC"},
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
65 {"_PTC"},
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
66 {"_TSS"},
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
67 {"_TSD"},
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
68 {"_TPC"},
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
69 {"_CST"},
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
70 {"_CSD"}
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
71 };
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
72
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
73 /*
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
74 * Cache the ACPI CPU control data objects.
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
75 */
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
76 static int
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
77 cpu_acpi_cache_ctrl_regs(cpu_acpi_handle_t handle, cpu_acpi_obj_t objtype,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
78 cpu_acpi_ctrl_regs_t *regs)
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
79 {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
80 ACPI_STATUS astatus;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
81 ACPI_BUFFER abuf;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
82 ACPI_OBJECT *obj;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
83 AML_RESOURCE_GENERIC_REGISTER *greg;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
84 int ret = -1;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
85 int i;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
86
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
87 /*
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
88 * Fetch the control registers (if present) for the CPU node.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
89 * Since they are optional, non-existence is not a failure
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
90 * (we just consider it a fixed hardware case).
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
91 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
92 abuf.Length = ACPI_ALLOCATE_BUFFER;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
93 abuf.Pointer = NULL;
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
94 astatus = AcpiEvaluateObjectTyped(handle->cs_handle,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
95 cpu_acpi_obj_attrs[objtype].name, NULL, &abuf, ACPI_TYPE_PACKAGE);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
96 if (ACPI_FAILURE(astatus)) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
97 if (astatus == AE_NOT_FOUND) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
98 DTRACE_PROBE3(cpu_acpi__eval__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
99 int, objtype, int, astatus);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
100 regs[0].cr_addrspace_id = ACPI_ADR_SPACE_FIXED_HARDWARE;
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
101 regs[1].cr_addrspace_id = ACPI_ADR_SPACE_FIXED_HARDWARE;
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
102 return (1);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
103 }
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
104 cmn_err(CE_NOTE, "!cpu_acpi: error %d evaluating %s package "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
105 "for CPU %d.", astatus, cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
106 handle->cs_id);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
107 goto out;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
108 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
109
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
110 obj = abuf.Pointer;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
111 if (obj->Package.Count != 2) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
112 cmn_err(CE_NOTE, "!cpu_acpi: %s package bad count %d for "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
113 "CPU %d.", cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
114 obj->Package.Count, handle->cs_id);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
115 goto out;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
116 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
117
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
118 /*
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
119 * Does the package look coherent?
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
120 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
121 for (i = 0; i < obj->Package.Count; i++) {
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
122 if (obj->Package.Elements[i].Type != ACPI_TYPE_BUFFER) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
123 cmn_err(CE_NOTE, "!cpu_acpi: Unexpected data in "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
124 "%s package for CPU %d.",
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
125 cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
126 handle->cs_id);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
127 goto out;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
128 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
129
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
130 greg = (AML_RESOURCE_GENERIC_REGISTER *)
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
131 obj->Package.Elements[i].Buffer.Pointer;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
132 if (greg->DescriptorType !=
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
133 ACPI_RESOURCE_NAME_GENERIC_REGISTER) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
134 cmn_err(CE_NOTE, "!cpu_acpi: %s package has format "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
135 "error for CPU %d.",
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
136 cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
137 handle->cs_id);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
138 goto out;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
139 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
140 if (greg->ResourceLength !=
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
141 ACPI_AML_SIZE_LARGE(AML_RESOURCE_GENERIC_REGISTER)) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
142 cmn_err(CE_NOTE, "!cpu_acpi: %s package not right "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
143 "size for CPU %d.",
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
144 cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
145 handle->cs_id);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
146 goto out;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
147 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
148 if (greg->AddressSpaceId != ACPI_ADR_SPACE_FIXED_HARDWARE &&
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
149 greg->AddressSpaceId != ACPI_ADR_SPACE_SYSTEM_IO) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
150 cmn_err(CE_NOTE, "!cpu_apci: %s contains unsupported "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
151 "address space type %x for CPU %d.",
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
152 cpu_acpi_obj_attrs[objtype].name,
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
153 greg->AddressSpaceId,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
154 handle->cs_id);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
155 goto out;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
156 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
157 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
158
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
159 /*
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
160 * Looks good!
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
161 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
162 for (i = 0; i < obj->Package.Count; i++) {
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
163 greg = (AML_RESOURCE_GENERIC_REGISTER *)
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
164 obj->Package.Elements[i].Buffer.Pointer;
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
165 regs[i].cr_addrspace_id = greg->AddressSpaceId;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
166 regs[i].cr_width = greg->BitWidth;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
167 regs[i].cr_offset = greg->BitOffset;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
168 regs[i].cr_asize = greg->AccessSize;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
169 regs[i].cr_address = greg->Address;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
170 }
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
171 ret = 0;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
172 out:
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
173 if (abuf.Pointer != NULL)
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
174 AcpiOsFree(abuf.Pointer);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
175 return (ret);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
176 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
177
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
178 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
179 * Cache the ACPI _PCT data. The _PCT data defines the interface to use
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
180 * when making power level transitions (i.e., system IO ports, fixed
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
181 * hardware port, etc).
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
182 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
183 static int
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
184 cpu_acpi_cache_pct(cpu_acpi_handle_t handle)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
185 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
186 cpu_acpi_pct_t *pct;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
187 int ret;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
188
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
189 CPU_ACPI_OBJ_IS_NOT_CACHED(handle, CPU_ACPI_PCT_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
190 pct = &CPU_ACPI_PCT(handle)[0];
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
191 if ((ret = cpu_acpi_cache_ctrl_regs(handle, PCT_OBJ, pct)) == 0)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
192 CPU_ACPI_OBJ_IS_CACHED(handle, CPU_ACPI_PCT_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
193 return (ret);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
194 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
195
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
196 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
197 * Cache the ACPI _PTC data. The _PTC data defines the interface to use
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
198 * when making T-state transitions (i.e., system IO ports, fixed
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
199 * hardware port, etc).
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
200 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
201 static int
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
202 cpu_acpi_cache_ptc(cpu_acpi_handle_t handle)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
203 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
204 cpu_acpi_ptc_t *ptc;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
205 int ret;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
206
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
207 CPU_ACPI_OBJ_IS_NOT_CACHED(handle, CPU_ACPI_PTC_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
208 ptc = &CPU_ACPI_PTC(handle)[0];
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
209 if ((ret = cpu_acpi_cache_ctrl_regs(handle, PTC_OBJ, ptc)) == 0)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
210 CPU_ACPI_OBJ_IS_CACHED(handle, CPU_ACPI_PTC_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
211 return (ret);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
212 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
213
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
214 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
215 * Cache the ACPI CPU state dependency data objects.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
216 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
217 static int
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
218 cpu_acpi_cache_state_dependencies(cpu_acpi_handle_t handle,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
219 cpu_acpi_obj_t objtype, cpu_acpi_state_dependency_t *sd)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
220 {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
221 ACPI_STATUS astatus;
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
222 ACPI_BUFFER abuf;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
223 ACPI_OBJECT *pkg, *elements;
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
224 int number;
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
225 int ret = -1;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
226
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
227 if (objtype == CSD_OBJ) {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
228 number = 6;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
229 } else {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
230 number = 5;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
231 }
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
232 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
233 * Fetch the dependencies (if present) for the CPU node.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
234 * Since they are optional, non-existence is not a failure
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
235 * (it's up to the caller to determine how to handle non-existence).
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
236 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
237 abuf.Length = ACPI_ALLOCATE_BUFFER;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
238 abuf.Pointer = NULL;
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
239 astatus = AcpiEvaluateObjectTyped(handle->cs_handle,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
240 cpu_acpi_obj_attrs[objtype].name, NULL, &abuf, ACPI_TYPE_PACKAGE);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
241 if (ACPI_FAILURE(astatus)) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
242 if (astatus == AE_NOT_FOUND) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
243 DTRACE_PROBE3(cpu_acpi__eval__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
244 int, objtype, int, astatus);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
245 return (1);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
246 }
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
247 cmn_err(CE_NOTE, "!cpu_acpi: error %d evaluating %s package "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
248 "for CPU %d.", astatus, cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
249 handle->cs_id);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
250 goto out;
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
251 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
252
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
253 pkg = abuf.Pointer;
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
254
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
255 if (((objtype != CSD_OBJ) && (pkg->Package.Count != 1)) ||
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
256 ((objtype == CSD_OBJ) && (pkg->Package.Count != 1) &&
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
257 (pkg->Package.Count != 2))) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
258 cmn_err(CE_NOTE, "!cpu_acpi: %s unsupported package count %d "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
259 "for CPU %d.", cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
260 pkg->Package.Count, handle->cs_id);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
261 goto out;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
262 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
263
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
264 /*
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
265 * For C-state domain, we assume C2 and C3 have the same
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
266 * domain information
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
267 */
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
268 if (pkg->Package.Elements[0].Type != ACPI_TYPE_PACKAGE ||
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
269 pkg->Package.Elements[0].Package.Count != number) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
270 cmn_err(CE_NOTE, "!cpu_acpi: Unexpected data in %s package "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
271 "for CPU %d.", cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
272 handle->cs_id);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
273 goto out;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
274 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
275 elements = pkg->Package.Elements[0].Package.Elements;
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
276 if (elements[0].Integer.Value != number ||
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
277 elements[1].Integer.Value != 0) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
278 cmn_err(CE_NOTE, "!cpu_acpi: Unexpected %s revision for "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
279 "CPU %d.", cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
280 handle->cs_id);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
281 goto out;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
282 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
283
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
284 sd->sd_entries = elements[0].Integer.Value;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
285 sd->sd_revision = elements[1].Integer.Value;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
286 sd->sd_domain = elements[2].Integer.Value;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
287 sd->sd_type = elements[3].Integer.Value;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
288 sd->sd_num = elements[4].Integer.Value;
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
289 if (objtype == CSD_OBJ) {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
290 sd->sd_index = elements[5].Integer.Value;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
291 }
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
292
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
293 ret = 0;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
294 out:
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
295 if (abuf.Pointer != NULL)
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
296 AcpiOsFree(abuf.Pointer);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
297 return (ret);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
298 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
299
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
300 /*
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
301 * Cache the ACPI _PSD data. The _PSD data defines P-state CPU dependencies
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
302 * (think CPU domains).
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
303 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
304 static int
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
305 cpu_acpi_cache_psd(cpu_acpi_handle_t handle)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
306 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
307 cpu_acpi_psd_t *psd;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
308 int ret;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
309
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
310 CPU_ACPI_OBJ_IS_NOT_CACHED(handle, CPU_ACPI_PSD_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
311 psd = &CPU_ACPI_PSD(handle);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
312 ret = cpu_acpi_cache_state_dependencies(handle, PSD_OBJ, psd);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
313 if (ret == 0)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
314 CPU_ACPI_OBJ_IS_CACHED(handle, CPU_ACPI_PSD_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
315 return (ret);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
316
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
317 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
318
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
319 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
320 * Cache the ACPI _TSD data. The _TSD data defines T-state CPU dependencies
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
321 * (think CPU domains).
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
322 */
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
323 static int
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
324 cpu_acpi_cache_tsd(cpu_acpi_handle_t handle)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
325 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
326 cpu_acpi_tsd_t *tsd;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
327 int ret;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
328
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
329 CPU_ACPI_OBJ_IS_NOT_CACHED(handle, CPU_ACPI_TSD_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
330 tsd = &CPU_ACPI_TSD(handle);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
331 ret = cpu_acpi_cache_state_dependencies(handle, TSD_OBJ, tsd);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
332 if (ret == 0)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
333 CPU_ACPI_OBJ_IS_CACHED(handle, CPU_ACPI_TSD_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
334 return (ret);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
335
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
336 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
337
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
338 /*
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
339 * Cache the ACPI _CSD data. The _CSD data defines C-state CPU dependencies
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
340 * (think CPU domains).
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
341 */
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
342 static int
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
343 cpu_acpi_cache_csd(cpu_acpi_handle_t handle)
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
344 {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
345 cpu_acpi_csd_t *csd;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
346 int ret;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
347
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
348 CPU_ACPI_OBJ_IS_NOT_CACHED(handle, CPU_ACPI_CSD_CACHED);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
349 csd = &CPU_ACPI_CSD(handle);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
350 ret = cpu_acpi_cache_state_dependencies(handle, CSD_OBJ, csd);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
351 if (ret == 0)
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
352 CPU_ACPI_OBJ_IS_CACHED(handle, CPU_ACPI_CSD_CACHED);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
353 return (ret);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
354
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
355 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
356
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
357 static void
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
358 cpu_acpi_cache_pstate(cpu_acpi_handle_t handle, ACPI_OBJECT *obj, int cnt)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
359 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
360 cpu_acpi_pstate_t *pstate;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
361 ACPI_OBJECT *q, *l;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
362 int i, j;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
363
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
364 CPU_ACPI_PSTATES_COUNT(handle) = cnt;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
365 CPU_ACPI_PSTATES(handle) = kmem_zalloc(CPU_ACPI_PSTATES_SIZE(cnt),
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
366 KM_SLEEP);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
367 pstate = (cpu_acpi_pstate_t *)CPU_ACPI_PSTATES(handle);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
368 for (i = 0, l = NULL; i < obj->Package.Count && cnt > 0; i++, l = q) {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
369 uint32_t *up;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
370
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
371 q = obj->Package.Elements[i].Package.Elements;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
372
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
373 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
374 * Skip duplicate entries.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
375 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
376 if (l != NULL && l[0].Integer.Value == q[0].Integer.Value)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
377 continue;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
378
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
379 up = (uint32_t *)pstate;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
380 for (j = 0; j < CPU_ACPI_PSS_CNT; j++)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
381 up[j] = q[j].Integer.Value;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
382 pstate++;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
383 cnt--;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
384 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
385 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
386
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
387 static void
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
388 cpu_acpi_cache_tstate(cpu_acpi_handle_t handle, ACPI_OBJECT *obj, int cnt)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
389 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
390 cpu_acpi_tstate_t *tstate;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
391 ACPI_OBJECT *q, *l;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
392 int i, j;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
393
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
394 CPU_ACPI_TSTATES_COUNT(handle) = cnt;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
395 CPU_ACPI_TSTATES(handle) = kmem_zalloc(CPU_ACPI_TSTATES_SIZE(cnt),
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
396 KM_SLEEP);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
397 tstate = (cpu_acpi_tstate_t *)CPU_ACPI_TSTATES(handle);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
398 for (i = 0, l = NULL; i < obj->Package.Count && cnt > 0; i++, l = q) {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
399 uint32_t *up;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
400
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
401 q = obj->Package.Elements[i].Package.Elements;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
402
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
403 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
404 * Skip duplicate entries.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
405 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
406 if (l != NULL && l[0].Integer.Value == q[0].Integer.Value)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
407 continue;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
408
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
409 up = (uint32_t *)tstate;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
410 for (j = 0; j < CPU_ACPI_TSS_CNT; j++)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
411 up[j] = q[j].Integer.Value;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
412 tstate++;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
413 cnt--;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
414 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
415 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
416
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
417 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
418 * Cache the _PSS or _TSS data.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
419 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
420 static int
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
421 cpu_acpi_cache_supported_states(cpu_acpi_handle_t handle,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
422 cpu_acpi_obj_t objtype, int fcnt)
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
423 {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
424 ACPI_STATUS astatus;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
425 ACPI_BUFFER abuf;
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
426 ACPI_OBJECT *obj, *q, *l;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
427 boolean_t eot = B_FALSE;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
428 int ret = -1;
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
429 int cnt;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
430 int i, j;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
431
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
432 /*
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
433 * Fetch the state data (if present) for the CPU node.
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
434 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
435 abuf.Length = ACPI_ALLOCATE_BUFFER;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
436 abuf.Pointer = NULL;
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
437 astatus = AcpiEvaluateObjectTyped(handle->cs_handle,
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
438 cpu_acpi_obj_attrs[objtype].name, NULL, &abuf,
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
439 ACPI_TYPE_PACKAGE);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
440 if (ACPI_FAILURE(astatus)) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
441 if (astatus == AE_NOT_FOUND) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
442 DTRACE_PROBE3(cpu_acpi__eval__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
443 int, objtype, int, astatus);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
444 return (1);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
445 }
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
446 cmn_err(CE_NOTE, "!cpu_acpi: error %d evaluating %s package "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
447 "for CPU %d.", astatus, cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
448 handle->cs_id);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
449 goto out;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
450 }
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
451 obj = abuf.Pointer;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
452 if (obj->Package.Count < 2) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
453 cmn_err(CE_NOTE, "!cpu_acpi: %s package bad count %d for "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
454 "CPU %d.", cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
455 obj->Package.Count, handle->cs_id);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
456 goto out;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
457 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
458
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
459 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
460 * Does the package look coherent?
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
461 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
462 cnt = 0;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
463 for (i = 0, l = NULL; i < obj->Package.Count; i++, l = q) {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
464 if (obj->Package.Elements[i].Type != ACPI_TYPE_PACKAGE ||
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
465 obj->Package.Elements[i].Package.Count != fcnt) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
466 cmn_err(CE_NOTE, "!cpu_acpi: Unexpected data in "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
467 "%s package for CPU %d.",
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
468 cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
469 handle->cs_id);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
470 goto out;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
471 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
472
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
473 q = obj->Package.Elements[i].Package.Elements;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
474 for (j = 0; j < fcnt; j++) {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
475 if (q[j].Type != ACPI_TYPE_INTEGER) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
476 cmn_err(CE_NOTE, "!cpu_acpi: %s element "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
477 "invalid (type) for CPU %d.",
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
478 cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
479 handle->cs_id);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
480 goto out;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
481 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
482 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
483
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
484 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
485 * Ignore duplicate entries.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
486 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
487 if (l != NULL && l[0].Integer.Value == q[0].Integer.Value)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
488 continue;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
489
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
490 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
491 * Some supported state tables are larger than required
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
492 * and unused elements are filled with patterns
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
493 * of 0xff. Simply check here for frequency = 0xffff
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
494 * and stop counting if found.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
495 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
496 if (q[0].Integer.Value == 0xffff) {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
497 eot = B_TRUE;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
498 continue;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
499 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
500
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
501 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
502 * We should never find a valid entry after we've hit
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
503 * an the end-of-table entry.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
504 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
505 if (eot) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
506 cmn_err(CE_NOTE, "!cpu_acpi: Unexpected data in %s "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
507 "package after eot for CPU %d.",
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
508 cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
509 handle->cs_id);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
510 goto out;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
511 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
512
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
513 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
514 * states must be defined in order from highest to lowest.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
515 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
516 if (l != NULL && l[0].Integer.Value < q[0].Integer.Value) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
517 cmn_err(CE_NOTE, "!cpu_acpi: %s package state "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
518 "definitions out of order for CPU %d.",
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
519 cpu_acpi_obj_attrs[objtype].name,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
520 handle->cs_id);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
521 goto out;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
522 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
523
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
524 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
525 * This entry passes.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
526 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
527 cnt++;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
528 }
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
529 if (cnt == 0)
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
530 goto out;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
531
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
532 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
533 * Yes, fill in the structure.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
534 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
535 ASSERT(objtype == PSS_OBJ || objtype == TSS_OBJ);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
536 (objtype == PSS_OBJ) ? cpu_acpi_cache_pstate(handle, obj, cnt) :
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
537 cpu_acpi_cache_tstate(handle, obj, cnt);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
538
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
539 ret = 0;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
540 out:
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
541 if (abuf.Pointer != NULL)
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
542 AcpiOsFree(abuf.Pointer);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
543 return (ret);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
544 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
545
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
546 /*
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
547 * Cache the _PSS data. The _PSS data defines the different power levels
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
548 * supported by the CPU and the attributes associated with each power level
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
549 * (i.e., frequency, voltage, etc.). The power levels are number from
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
550 * highest to lowest. That is, the highest power level is _PSS entry 0
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
551 * and the lowest power level is the last _PSS entry.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
552 */
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
553 static int
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
554 cpu_acpi_cache_pstates(cpu_acpi_handle_t handle)
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
555 {
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
556 int ret;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
557
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
558 CPU_ACPI_OBJ_IS_NOT_CACHED(handle, CPU_ACPI_PSS_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
559 ret = cpu_acpi_cache_supported_states(handle, PSS_OBJ,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
560 CPU_ACPI_PSS_CNT);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
561 if (ret == 0)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
562 CPU_ACPI_OBJ_IS_CACHED(handle, CPU_ACPI_PSS_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
563 return (ret);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
564 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
565
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
566 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
567 * Cache the _TSS data. The _TSS data defines the different freq throttle
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
568 * levels supported by the CPU and the attributes associated with each
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
569 * throttle level (i.e., frequency throttle percentage, voltage, etc.).
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
570 * The throttle levels are number from highest to lowest.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
571 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
572 static int
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
573 cpu_acpi_cache_tstates(cpu_acpi_handle_t handle)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
574 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
575 int ret;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
576
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
577 CPU_ACPI_OBJ_IS_NOT_CACHED(handle, CPU_ACPI_TSS_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
578 ret = cpu_acpi_cache_supported_states(handle, TSS_OBJ,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
579 CPU_ACPI_TSS_CNT);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
580 if (ret == 0)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
581 CPU_ACPI_OBJ_IS_CACHED(handle, CPU_ACPI_TSS_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
582 return (ret);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
583 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
584
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
585 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
586 * Cache the ACPI CPU present capabilities data objects.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
587 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
588 static int
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
589 cpu_acpi_cache_present_capabilities(cpu_acpi_handle_t handle,
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
590 cpu_acpi_obj_t objtype, cpu_acpi_present_capabilities_t *pc)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
591
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
592 {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
593 ACPI_STATUS astatus;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
594 ACPI_BUFFER abuf;
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
595 ACPI_OBJECT *obj;
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
596 int ret = -1;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
597
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
598 /*
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
599 * Fetch the present capabilites object (if present) for the CPU node.
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
600 */
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
601 abuf.Length = ACPI_ALLOCATE_BUFFER;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
602 abuf.Pointer = NULL;
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
603 astatus = AcpiEvaluateObject(handle->cs_handle,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
604 cpu_acpi_obj_attrs[objtype].name, NULL, &abuf);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
605 if (ACPI_FAILURE(astatus) && astatus != AE_NOT_FOUND) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
606 cmn_err(CE_NOTE, "!cpu_acpi: error %d evaluating %s "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
607 "package for CPU %d.", astatus,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
608 cpu_acpi_obj_attrs[objtype].name, handle->cs_id);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
609 goto out;
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
610 }
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
611 if (astatus == AE_NOT_FOUND || abuf.Length == 0) {
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
612 *pc = 0;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
613 return (1);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
614 }
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
615
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
616 obj = (ACPI_OBJECT *)abuf.Pointer;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
617 *pc = obj->Integer.Value;
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
618
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
619 ret = 0;
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
620 out:
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
621 if (abuf.Pointer != NULL)
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
622 AcpiOsFree(abuf.Pointer);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
623 return (ret);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
624 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
625
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
626 /*
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
627 * Cache the _PPC data. The _PPC simply contains an integer value which
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
628 * represents the highest power level that a CPU should transition to.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
629 * That is, it's an index into the array of _PSS entries and will be
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
630 * greater than or equal to zero.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
631 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
632 void
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
633 cpu_acpi_cache_ppc(cpu_acpi_handle_t handle)
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
634 {
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
635 cpu_acpi_ppc_t *ppc;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
636 int ret;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
637
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
638 CPU_ACPI_OBJ_IS_NOT_CACHED(handle, CPU_ACPI_PPC_CACHED);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
639 ppc = &CPU_ACPI_PPC(handle);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
640 ret = cpu_acpi_cache_present_capabilities(handle, PPC_OBJ, ppc);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
641 if (ret == 0)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
642 CPU_ACPI_OBJ_IS_CACHED(handle, CPU_ACPI_PPC_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
643 }
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
644
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
645 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
646 * Cache the _TPC data. The _TPC simply contains an integer value which
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
647 * represents the throttle level that a CPU should transition to.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
648 * That is, it's an index into the array of _TSS entries and will be
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
649 * greater than or equal to zero.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
650 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
651 void
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
652 cpu_acpi_cache_tpc(cpu_acpi_handle_t handle)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
653 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
654 cpu_acpi_tpc_t *tpc;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
655 int ret;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
656
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
657 CPU_ACPI_OBJ_IS_NOT_CACHED(handle, CPU_ACPI_TPC_CACHED);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
658 tpc = &CPU_ACPI_TPC(handle);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
659 ret = cpu_acpi_cache_present_capabilities(handle, TPC_OBJ, tpc);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
660 if (ret == 0)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
661 CPU_ACPI_OBJ_IS_CACHED(handle, CPU_ACPI_TPC_CACHED);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
662 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
663
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
664 int
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
665 cpu_acpi_verify_cstate(cpu_acpi_cstate_t *cstate)
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
666 {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
667 uint32_t addrspaceid = cstate->cs_addrspace_id;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
668
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
669 if ((addrspaceid != ACPI_ADR_SPACE_FIXED_HARDWARE) &&
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
670 (addrspaceid != ACPI_ADR_SPACE_SYSTEM_IO)) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
671 cmn_err(CE_NOTE, "!cpu_acpi: _CST unsupported address space id"
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
672 ":C%d, type: %d\n", cstate->cs_type, addrspaceid);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
673 return (1);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
674 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
675 return (0);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
676 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
677
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
678 int
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
679 cpu_acpi_cache_cst(cpu_acpi_handle_t handle)
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
680 {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
681 ACPI_STATUS astatus;
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
682 ACPI_BUFFER abuf;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
683 ACPI_OBJECT *obj;
12511
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
684 ACPI_INTEGER cnt, old_cnt;
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
685 cpu_acpi_cstate_t *cstate, *p;
9148
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
686 size_t alloc_size;
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
687 int i, count;
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
688 int ret = 1;
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
689
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
690 CPU_ACPI_OBJ_IS_NOT_CACHED(handle, CPU_ACPI_CST_CACHED);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
691
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
692 abuf.Length = ACPI_ALLOCATE_BUFFER;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
693 abuf.Pointer = NULL;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
694
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
695 /*
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
696 * Fetch the C-state data (if present) for the CPU node.
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
697 */
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
698 astatus = AcpiEvaluateObjectTyped(handle->cs_handle, "_CST",
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
699 NULL, &abuf, ACPI_TYPE_PACKAGE);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
700 if (ACPI_FAILURE(astatus)) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
701 if (astatus == AE_NOT_FOUND) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
702 DTRACE_PROBE3(cpu_acpi__eval__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
703 int, CST_OBJ, int, astatus);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
704 return (1);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
705 }
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
706 cmn_err(CE_NOTE, "!cpu_acpi: error %d evaluating _CST package "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
707 "for CPU %d.", astatus, handle->cs_id);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
708 goto out;
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
709
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
710 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
711 obj = (ACPI_OBJECT *)abuf.Pointer;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
712 if (obj->Package.Count < 2) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
713 cmn_err(CE_NOTE, "!cpu_acpi: _CST unsupported package "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
714 "count %d for CPU %d.", obj->Package.Count, handle->cs_id);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
715 goto out;
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
716 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
717
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
718 /*
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
719 * Does the package look coherent?
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
720 */
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
721 cnt = obj->Package.Elements[0].Integer.Value;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
722 if (cnt < 1 || cnt != obj->Package.Count - 1) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
723 cmn_err(CE_NOTE, "!cpu_acpi: _CST invalid element "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
724 "count %d != Package count %d for CPU %d",
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
725 (int)cnt, (int)obj->Package.Count - 1, handle->cs_id);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
726 goto out;
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
727 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
728
12511
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
729 /*
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
730 * Reuse the old buffer if the number of C states is the same.
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
731 */
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
732 if (CPU_ACPI_CSTATES(handle) &&
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
733 (old_cnt = CPU_ACPI_CSTATES_COUNT(handle)) != cnt) {
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
734 kmem_free(CPU_ACPI_CSTATES(handle),
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
735 CPU_ACPI_CSTATES_SIZE(old_cnt));
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
736 CPU_ACPI_CSTATES(handle) = NULL;
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
737 }
01b2fa2ff254 6949969 cpu_acpi_cache_cst writes past the end of allocated memory, corrupting the kernel heap
jiang.liu@intel.com
parents: 12004
diff changeset
738
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
739 CPU_ACPI_CSTATES_COUNT(handle) = (uint32_t)cnt;
9148
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
740 alloc_size = CPU_ACPI_CSTATES_SIZE(cnt);
12004
93f274d4a367 PSARC/2009/104 Hot-Plug Support for ACPI-based Systems
Gerry Liu <jiang.liu@intel.com>
parents: 10488
diff changeset
741 if (CPU_ACPI_CSTATES(handle) == NULL)
93f274d4a367 PSARC/2009/104 Hot-Plug Support for ACPI-based Systems
Gerry Liu <jiang.liu@intel.com>
parents: 10488
diff changeset
742 CPU_ACPI_CSTATES(handle) = kmem_zalloc(alloc_size, KM_SLEEP);
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
743 cstate = (cpu_acpi_cstate_t *)CPU_ACPI_CSTATES(handle);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
744 p = cstate;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
745
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
746 for (i = 1, count = 1; i <= cnt; i++) {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
747 ACPI_OBJECT *pkg;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
748 AML_RESOURCE_GENERIC_REGISTER *reg;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
749 ACPI_OBJECT *element;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
750
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
751 pkg = &(obj->Package.Elements[i]);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
752 reg = (AML_RESOURCE_GENERIC_REGISTER *)
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
753 pkg->Package.Elements[0].Buffer.Pointer;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
754 cstate->cs_addrspace_id = reg->AddressSpaceId;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
755 cstate->cs_address = reg->Address;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
756 element = &(pkg->Package.Elements[1]);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
757 cstate->cs_type = element->Integer.Value;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
758 element = &(pkg->Package.Elements[2]);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
759 cstate->cs_latency = element->Integer.Value;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
760 element = &(pkg->Package.Elements[3]);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
761 cstate->cs_power = element->Integer.Value;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
762
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
763 if (cpu_acpi_verify_cstate(cstate)) {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
764 /*
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
765 * ignore this entry if it's not valid
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
766 */
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
767 continue;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
768 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
769 if (cstate == p) {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
770 cstate++;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
771 } else if (p->cs_type == cstate->cs_type) {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
772 /*
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
773 * if there are duplicate entries, we keep the
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
774 * last one. This fixes:
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
775 * 1) some buggy BIOS have total duplicate entries.
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
776 * 2) ACPI Spec allows the same cstate entry with
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
777 * different power and latency, we use the one
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
778 * with more power saving.
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
779 */
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
780 (void) memcpy(p, cstate, sizeof (cpu_acpi_cstate_t));
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
781 } else {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
782 /*
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
783 * we got a valid entry, cache it to the
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
784 * cstate structure
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
785 */
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
786 p = cstate++;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
787 count++;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
788 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
789 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
790
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
791 if (count < 2) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
792 cmn_err(CE_NOTE, "!cpu_acpi: _CST invalid count %d < 2 for "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
793 "CPU %d", count, handle->cs_id);
9148
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
794 kmem_free(CPU_ACPI_CSTATES(handle), alloc_size);
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
795 CPU_ACPI_CSTATES(handle) = NULL;
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
796 CPU_ACPI_CSTATES_COUNT(handle) = (uint32_t)0;
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
797 goto out;
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
798 }
8983
981f8c40440c 6807891 system does not consider C3 when ACPI _CST object did not contain a C2 state
Bill Holler <Bill.Holler@Sun.COM>
parents: 8906
diff changeset
799 cstate = (cpu_acpi_cstate_t *)CPU_ACPI_CSTATES(handle);
981f8c40440c 6807891 system does not consider C3 when ACPI _CST object did not contain a C2 state
Bill Holler <Bill.Holler@Sun.COM>
parents: 8906
diff changeset
800 if (cstate[0].cs_type != CPU_ACPI_C1) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
801 cmn_err(CE_NOTE, "!cpu_acpi: _CST first element type not "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
802 "C1: %d for CPU %d", (int)cstate->cs_type, handle->cs_id);
9148
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
803 kmem_free(CPU_ACPI_CSTATES(handle), alloc_size);
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
804 CPU_ACPI_CSTATES(handle) = NULL;
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
805 CPU_ACPI_CSTATES_COUNT(handle) = (uint32_t)0;
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
806 goto out;
8983
981f8c40440c 6807891 system does not consider C3 when ACPI _CST object did not contain a C2 state
Bill Holler <Bill.Holler@Sun.COM>
parents: 8906
diff changeset
807 }
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
808
9148
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
809 if (count != cnt) {
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
810 void *orig = CPU_ACPI_CSTATES(handle);
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
811
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
812 CPU_ACPI_CSTATES_COUNT(handle) = (uint32_t)count;
9148
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
813 CPU_ACPI_CSTATES(handle) = kmem_zalloc(
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
814 CPU_ACPI_CSTATES_SIZE(count), KM_SLEEP);
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
815 (void) memcpy(CPU_ACPI_CSTATES(handle), orig,
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
816 CPU_ACPI_CSTATES_SIZE(count));
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
817 kmem_free(orig, alloc_size);
cbc850545d32 6819156 cpu_acpi_free_cstate_data can free the wrong size
Bill Holler <Bill.Holler@Sun.COM>
parents: 9147
diff changeset
818 }
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
819
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
820 CPU_ACPI_OBJ_IS_CACHED(handle, CPU_ACPI_CST_CACHED);
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
821
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
822 ret = 0;
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
823
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
824 out:
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
825 if (abuf.Pointer != NULL)
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
826 AcpiOsFree(abuf.Pointer);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
827 return (ret);
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
828 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
829
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
830 /*
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
831 * Cache the _PCT, _PSS, _PSD and _PPC data.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
832 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
833 int
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
834 cpu_acpi_cache_pstate_data(cpu_acpi_handle_t handle)
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
835 {
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
836 if (cpu_acpi_cache_pct(handle) < 0) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
837 DTRACE_PROBE2(cpu_acpi__cache__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
838 int, PCT_OBJ);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
839 return (-1);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
840 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
841
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
842 if (cpu_acpi_cache_pstates(handle) != 0) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
843 DTRACE_PROBE2(cpu_acpi__cache__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
844 int, PSS_OBJ);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
845 return (-1);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
846 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
847
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
848 if (cpu_acpi_cache_psd(handle) < 0) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
849 DTRACE_PROBE2(cpu_acpi__cache__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
850 int, PSD_OBJ);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
851 return (-1);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
852 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
853
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
854 cpu_acpi_cache_ppc(handle);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
855
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
856 return (0);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
857 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
858
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
859 void
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
860 cpu_acpi_free_pstate_data(cpu_acpi_handle_t handle)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
861 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
862 if (handle != NULL) {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
863 if (CPU_ACPI_PSTATES(handle)) {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
864 kmem_free(CPU_ACPI_PSTATES(handle),
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
865 CPU_ACPI_PSTATES_SIZE(
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
866 CPU_ACPI_PSTATES_COUNT(handle)));
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
867 CPU_ACPI_PSTATES(handle) = NULL;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
868 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
869 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
870 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
871
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
872 /*
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
873 * Cache the _PTC, _TSS, _TSD and _TPC data.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
874 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
875 int
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
876 cpu_acpi_cache_tstate_data(cpu_acpi_handle_t handle)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
877 {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
878 int ret;
9004
0f2f9c0e4285 6756843 Clean up messages related to P and T states
Anup Pemmaiah <Napanda.Pemmaiah@Sun.COM>
parents: 8983
diff changeset
879
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
880 if (cpu_acpi_cache_ptc(handle) < 0) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
881 DTRACE_PROBE2(cpu_acpi__cache__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
882 int, PTC_OBJ);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
883 return (-1);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
884 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
885
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
886 if ((ret = cpu_acpi_cache_tstates(handle)) != 0) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
887 DTRACE_PROBE2(cpu_acpi__cache__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
888 int, TSS_OBJ);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
889 return (ret);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
890 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
891
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
892 if (cpu_acpi_cache_tsd(handle) < 0) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
893 DTRACE_PROBE2(cpu_acpi__cache__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
894 int, TSD_OBJ);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
895 return (-1);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
896 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
897
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
898 cpu_acpi_cache_tpc(handle);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
899
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
900 return (0);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
901 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
902
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
903 void
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
904 cpu_acpi_free_tstate_data(cpu_acpi_handle_t handle)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
905 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
906 if (handle != NULL) {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
907 if (CPU_ACPI_TSTATES(handle)) {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
908 kmem_free(CPU_ACPI_TSTATES(handle),
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
909 CPU_ACPI_TSTATES_SIZE(
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
910 CPU_ACPI_TSTATES_COUNT(handle)));
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
911 CPU_ACPI_TSTATES(handle) = NULL;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
912 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
913 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
914 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
915
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
916 /*
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
917 * Cache the _CST data.
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
918 */
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
919 int
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
920 cpu_acpi_cache_cstate_data(cpu_acpi_handle_t handle)
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
921 {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
922 int ret;
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
923
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
924 if ((ret = cpu_acpi_cache_cst(handle)) != 0) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
925 DTRACE_PROBE2(cpu_acpi__cache__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
926 int, CST_OBJ);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
927 return (ret);
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
928 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
929
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
930 if (cpu_acpi_cache_csd(handle) < 0) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
931 DTRACE_PROBE2(cpu_acpi__cache__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
932 int, CSD_OBJ);
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
933 return (-1);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
934 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
935
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
936 return (0);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
937 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
938
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
939 void
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
940 cpu_acpi_free_cstate_data(cpu_acpi_handle_t handle)
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
941 {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
942 if (handle != NULL) {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
943 if (CPU_ACPI_CSTATES(handle)) {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
944 kmem_free(CPU_ACPI_CSTATES(handle),
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
945 CPU_ACPI_CSTATES_SIZE(
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
946 CPU_ACPI_CSTATES_COUNT(handle)));
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
947 CPU_ACPI_CSTATES(handle) = NULL;
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
948 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
949 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
950 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
951
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
952 /*
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
953 * Register a handler for processor change notifications.
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
954 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
955 void
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
956 cpu_acpi_install_notify_handler(cpu_acpi_handle_t handle,
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
957 ACPI_NOTIFY_HANDLER handler, void *ctx)
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
958 {
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
959 if (ACPI_FAILURE(AcpiInstallNotifyHandler(handle->cs_handle,
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
960 ACPI_DEVICE_NOTIFY, handler, ctx)))
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
961 cmn_err(CE_NOTE, "!cpu_acpi: Unable to register "
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
962 "notify handler for CPU %d.", handle->cs_id);
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
963 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
964
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
965 /*
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
966 * Remove a handler for processor change notifications.
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
967 */
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
968 void
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
969 cpu_acpi_remove_notify_handler(cpu_acpi_handle_t handle,
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
970 ACPI_NOTIFY_HANDLER handler)
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
971 {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
972 if (ACPI_FAILURE(AcpiRemoveNotifyHandler(handle->cs_handle,
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
973 ACPI_DEVICE_NOTIFY, handler)))
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
974 cmn_err(CE_NOTE, "!cpu_acpi: Unable to remove "
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
975 "notify handler for CPU %d.", handle->cs_id);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
976 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
977
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
978 /*
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
979 * Write _PDC.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
980 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
981 int
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
982 cpu_acpi_write_pdc(cpu_acpi_handle_t handle, uint32_t revision, uint32_t count,
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
983 uint32_t *capabilities)
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
984 {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
985 ACPI_STATUS astatus;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
986 ACPI_OBJECT obj;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
987 ACPI_OBJECT_LIST list = { 1, &obj};
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
988 uint32_t *buffer;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
989 uint32_t *bufptr;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
990 uint32_t bufsize;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
991 int i;
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
992 int ret = 0;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
993
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
994 bufsize = (count + 2) * sizeof (uint32_t);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
995 buffer = kmem_zalloc(bufsize, KM_SLEEP);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
996 buffer[0] = revision;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
997 buffer[1] = count;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
998 bufptr = &buffer[2];
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
999 for (i = 0; i < count; i++)
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1000 *bufptr++ = *capabilities++;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1001
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1002 obj.Type = ACPI_TYPE_BUFFER;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1003 obj.Buffer.Length = bufsize;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1004 obj.Buffer.Pointer = (void *)buffer;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1005
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1006 /*
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1007 * Fetch the ??? (if present) for the CPU node.
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1008 */
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1009 astatus = AcpiEvaluateObject(handle->cs_handle, "_PDC", &list, NULL);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1010 if (ACPI_FAILURE(astatus)) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1011 if (astatus == AE_NOT_FOUND) {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1012 DTRACE_PROBE3(cpu_acpi__eval__err, int, handle->cs_id,
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1013 int, PDC_OBJ, int, astatus);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1014 ret = 1;
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1015 } else {
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1016 cmn_err(CE_NOTE, "!cpu_acpi: error %d evaluating _PDC "
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1017 "package for CPU %d.", astatus, handle->cs_id);
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1018 ret = -1;
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1019 }
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1020 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1021
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1022 kmem_free(buffer, bufsize);
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1023 return (ret);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1024 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1025
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1026 /*
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1027 * Write to system IO port.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1028 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1029 int
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1030 cpu_acpi_write_port(ACPI_IO_ADDRESS address, uint32_t value, uint32_t width)
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1031 {
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1032 if (ACPI_FAILURE(AcpiOsWritePort(address, value, width))) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1033 cmn_err(CE_NOTE, "!cpu_acpi: error writing system IO port "
4872
d29c11d096f3 6589662 Error messages from cpu_acpi on install boot w/snv_70
mh27603
parents: 4667
diff changeset
1034 "%lx.", (long)address);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1035 return (-1);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1036 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1037 return (0);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1038 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1039
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1040 /*
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1041 * Read from a system IO port.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1042 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1043 int
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1044 cpu_acpi_read_port(ACPI_IO_ADDRESS address, uint32_t *value, uint32_t width)
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1045 {
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1046 if (ACPI_FAILURE(AcpiOsReadPort(address, value, width))) {
10075
254480e5218d 6856778 cpu_acpi: error messages could be more user friendly.
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 9980
diff changeset
1047 cmn_err(CE_NOTE, "!cpu_acpi: error reading system IO port "
4872
d29c11d096f3 6589662 Error messages from cpu_acpi on install boot w/snv_70
mh27603
parents: 4667
diff changeset
1048 "%lx.", (long)address);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1049 return (-1);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1050 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1051 return (0);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1052 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1053
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1054 /*
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1055 * Return supported frequencies.
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1056 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1057 uint_t
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1058 cpu_acpi_get_speeds(cpu_acpi_handle_t handle, int **speeds)
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1059 {
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1060 cpu_acpi_pstate_t *pstate;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1061 int *hspeeds;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1062 uint_t nspeeds;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1063 int i;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1064
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1065 nspeeds = CPU_ACPI_PSTATES_COUNT(handle);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1066 pstate = (cpu_acpi_pstate_t *)CPU_ACPI_PSTATES(handle);
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1067 hspeeds = kmem_zalloc(nspeeds * sizeof (int), KM_SLEEP);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1068 for (i = 0; i < nspeeds; i++) {
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1069 hspeeds[i] = CPU_ACPI_FREQ(pstate);
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1070 pstate++;
4667
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1071 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1072 *speeds = hspeeds;
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1073 return (nspeeds);
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1074 }
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1075
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1076 /*
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1077 * Free resources allocated by cpu_acpi_get_speeds().
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1078 */
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1079 void
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1080 cpu_acpi_free_speeds(int *speeds, uint_t nspeeds)
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1081 {
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1082 kmem_free(speeds, nspeeds * sizeof (int));
2cb417b1d90c PSARC/2004/826 Opteron Athlon64 Frequency Management
mh27603
parents:
diff changeset
1083 }
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1084
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1085 uint_t
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1086 cpu_acpi_get_max_cstates(cpu_acpi_handle_t handle)
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1087 {
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1088 if (CPU_ACPI_CSTATES(handle))
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1089 return (CPU_ACPI_CSTATES_COUNT(handle));
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1090 else
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1091 return (1);
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1092 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1093
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1094 void
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1095 cpu_acpi_set_register(uint32_t bitreg, uint32_t value)
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1096 {
10488
296c315b92df 6878359 CPU power management driver needs to support detach
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 10447
diff changeset
1097 (void) AcpiWriteBitRegister(bitreg, value);
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1098 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1099
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1100 void
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1101 cpu_acpi_get_register(uint32_t bitreg, uint32_t *value)
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1102 {
10488
296c315b92df 6878359 CPU power management driver needs to support detach
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 10447
diff changeset
1103 (void) AcpiReadBitRegister(bitreg, value);
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1104 }
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1105
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1106 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1107 * Map the dip to an ACPI handle for the device.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1108 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1109 cpu_acpi_handle_t
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1110 cpu_acpi_init(cpu_t *cp)
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1111 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1112 cpu_acpi_handle_t handle;
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1113
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1114 handle = kmem_zalloc(sizeof (cpu_acpi_state_t), KM_SLEEP);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1115
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1116 if (ACPI_FAILURE(acpica_get_handle_cpu(cp->cpu_id,
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1117 &handle->cs_handle))) {
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1118 kmem_free(handle, sizeof (cpu_acpi_state_t));
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1119 return (NULL);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1120 }
8906
e559381f1e2b PSARC 2008/777 cpupm keyword mode extensions
Eric Saxe <Eric.Saxe@Sun.COM>
parents: 7851
diff changeset
1121 handle->cs_id = cp->cpu_id;
7319
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1122 return (handle);
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1123 }
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1124
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1125 /*
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1126 * Free any resources.
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1127 */
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1128 void
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1129 cpu_acpi_fini(cpu_acpi_handle_t handle)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1130 {
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1131 if (handle)
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1132 kmem_free(handle, sizeof (cpu_acpi_state_t));
d281dd2d2049 6715149 T-State support for intel based processors
Mark Haywood <Mark.Haywood@Sun.COM>
parents: 6968
diff changeset
1133 }