summaryrefslogtreecommitdiff
path: root/payloads/coreinfo/cpuid.S
diff options
context:
space:
mode:
authorJordan Crouse <jordan.crouse@amd.com>2008-03-20 00:11:05 +0000
committerJordan Crouse <jordan.crouse@amd.com>2008-03-20 00:11:05 +0000
commit7249f7979237d7f14941036dd931545b5c9e73fb (patch)
tree06e7db61c87c2204ec48623c59cf4ec11b0d98c8 /payloads/coreinfo/cpuid.S
parentc52761be0a67f31af13ffd2c6f0217988c8b5175 (diff)
corinfo: Inital release of the coreinfo code
This is the intial release of the coreinfo payload code. Signed-off-by: Jordan Crouse <jordan.crouse@amd.com> Acked-by: Uwe Hermann <uwe@hermann-uwe.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3173 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'payloads/coreinfo/cpuid.S')
-rw-r--r--payloads/coreinfo/cpuid.S67
1 files changed, 67 insertions, 0 deletions
diff --git a/payloads/coreinfo/cpuid.S b/payloads/coreinfo/cpuid.S
new file mode 100644
index 0000000000..9b1d13448f
--- /dev/null
+++ b/payloads/coreinfo/cpuid.S
@@ -0,0 +1,67 @@
+/*
+ * This file is part of the coreinfo project.
+ *
+ * It is derived from the x86info project, which is GPLv2-licensed.
+ *
+ * Copyright (C) 2001-2007 Dave Jones <davej@codemonkey.org.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/* calling syntax: docpuid(idx,eax,ebx,ecx,edx) */
+
+.align 4
+.text
+
+.global docpuid
+ .type docpuid,@function
+
+docpuid:
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %edi
+ pushl %ebx
+ pushl %ecx
+ pushl %edx
+ movl 8(%ebp),%eax
+ cpuid
+ movl 12(%ebp),%edi
+ test %edi,%edi
+ jz L1
+ movl %eax, (%edi)
+
+L1: movl 16(%ebp),%edi
+ test %edi,%edi
+ jz L2
+ movl %ebx,(%edi)
+
+L2: movl 20(%ebp),%edi
+ test %edi,%edi
+ jz L3
+ movl %ecx,(%edi)
+
+L3: movl 24(%ebp), %edi
+ test %edi,%edi
+ jz L4
+ movl %edx,(%edi)
+
+L4: popl %edx
+ popl %ecx
+ popl %ebx
+ popl %edi
+ movl %ebp,%esp
+ popl %ebp
+ ret
+
+.section .note.GNU-stack,"", @progbits