acked-by: idlogin <<span><a href="mailto:putlinuxonit@gmail.com" target="_blank">putlinuxonit@gmail.com</a></span>><br><br><div class="gmail_quote">2009/8/17 Carl-Daniel Hailfinger <span dir="ltr"><<a href="mailto:c-d.hailfinger.devel.2006@gmx.net">c-d.hailfinger.devel.2006@gmx.net</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">On 13.08.2009 00:43, Carl-Daniel Hailfinger wrote:<br>
> On 13.08.2009 00:19, Carl-Daniel Hailfinger wrote:<br>
><br>
>> On 12.08.2009 20:44, Stefan Reinauer wrote:<br>
>><br>
>><br>
>>> This needs /dev/cpu0 from ports/sysutils<br>
>>><br>
>>><br>
>> Stefan, since the original patch is from you, you may want to add<br>
>> your Signoff here as well.<br>
>><br>
<br>
Compiles on FreeBSD and Linux and is the least invasive solution I could<br>
come up with.<br>
<br>
This is 0.9.1 material.<br>
<br>
Signed-off-by: Carl-Daniel Hailfinger <<a href="mailto:c-d.hailfinger.devel.2006@gmx.net">c-d.hailfinger.devel.2006@gmx.net</a>><br>
<br>
Index: flashrom-rdmsr_freebsd/flash.h<br>
===================================================================<br>
--- flashrom-rdmsr_freebsd/flash.h (Revision 685)<br>
+++ flashrom-rdmsr_freebsd/flash.h (Arbeitskopie)<br>
@@ -309,11 +309,21 @@<br>
void physunmap(void *virt_addr, size_t len);<br>
int setup_cpu_msr(int cpu);<br>
void cleanup_cpu_msr(void);<br>
-#ifndef __DARWIN__<br>
+#if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__DragonFly__)<br>
typedef struct { uint32_t hi, lo; } msr_t;<br>
msr_t rdmsr(int addr);<br>
int wrmsr(int addr, msr_t msr);<br>
#endif<br>
+#if defined(__FreeBSD__) || defined(__DragonFly__)<br>
+/* FreeBSD already has conflicting definitions for wrmsr/rdmsr. */<br>
+#undef rdmsr<br>
+#undef wrmsr<br>
+#define rdmsr freebsd_rdmsr<br>
+#define wrmsr freebsd_wrmsr<br>
+typedef struct { uint32_t hi, lo; } msr_t;<br>
+msr_t freebsd_rdmsr(int addr);<br>
+int freebsd_wrmsr(int addr, msr_t msr);<br>
+#endif<br>
<br>
/* internal.c */<br>
struct pci_dev *pci_dev_find_filter(struct pci_filter filter);<br>
Index: flashrom-rdmsr_freebsd/physmap.c<br>
===================================================================<br>
--- flashrom-rdmsr_freebsd/physmap.c (Revision 685)<br>
+++ flashrom-rdmsr_freebsd/physmap.c (Arbeitskopie)<br>
@@ -215,6 +215,91 @@<br>
fd_msr = -1;<br>
}<br>
#else<br>
+#if defined(__FreeBSD__) || defined(__DragonFly__)<br>
+#include <sys/ioctl.h><br>
+<br>
+typedef struct {<br>
+ int msr;<br>
+ uint64_t data;<br>
+} cpu_msr_args_t;<br>
+#define CPU_RDMSR _IOWR('c', 1, cpu_msr_args_t)<br>
+#define CPU_WRMSR _IOWR('c', 2, cpu_msr_args_t)<br>
+<br>
+static int fd_msr = -1;<br>
+<br>
+msr_t rdmsr(int addr)<br>
+{<br>
+ cpu_msr_args_t args;<br>
+<br>
+ msr_t msr = { 0xffffffff, 0xffffffff };<br>
+<br>
+ args.msr = addr;<br>
+<br>
+ if (ioctl(fd_msr, CPU_RDMSR, &args) < 0) {<br>
+ perror("CPU_RDMSR");<br>
+ close(fd_msr);<br>
+ exit(1);<br>
+ }<br>
+<br>
+ msr.lo = args.data & 0xffffffff;<br>
+ msr.hi = args.data >> 32;<br>
+<br>
+ return msr;<br>
+}<br>
+<br>
+int wrmsr(int addr, msr_t msr)<br>
+{<br>
+ cpu_msr_args_t args;<br>
+<br>
+ args.msr = addr;<br>
+ args.data = (((uint64_t)msr.hi) << 32) | msr.lo;<br>
+<br>
+ if (ioctl(fd_msr, CPU_WRMSR, &args) < 0) {<br>
+ perror("CPU_WRMSR");<br>
+ close(fd_msr);<br>
+ exit(1);<br>
+ }<br>
+<br>
+ return 0;<br>
+}<br>
+<br>
+int setup_cpu_msr(int cpu)<br>
+{<br>
+ char msrfilename[64];<br>
+ memset(msrfilename, 0, 64);<br>
+ sprintf(msrfilename, "/dev/cpu%d", cpu);<br>
+<br>
+ if (fd_msr != -1) {<br>
+ printf("MSR was already initialized\n");<br>
+ return -1;<br>
+ }<br>
+<br>
+ fd_msr = open(msrfilename, O_RDWR);<br>
+<br>
+ if (fd_msr < 0) {<br>
+ perror("Error while opening /dev/cpu0");<br>
+ printf("Did you install ports/sysutils/devcpu?\n");<br>
+ return -1;<br>
+ }<br>
+<br>
+ return 0;<br>
+}<br>
+<br>
+void cleanup_cpu_msr(void)<br>
+{<br>
+ if (fd_msr == -1) {<br>
+ printf("No MSR initialized.\n");<br>
+ return;<br>
+ }<br>
+<br>
+ close(fd_msr);<br>
+<br>
+ /* Clear MSR file descriptor */<br>
+ fd_msr = -1;<br>
+}<br>
+<br>
+#else<br>
+<br>
#ifdef __DARWIN__<br>
int setup_cpu_msr(int cpu)<br>
{<br>
@@ -251,4 +336,5 @@<br>
}<br>
#endif<br>
#endif<br>
+#endif<br>
<font color="#888888"><br>
<br>
<br>
--<br>
<a href="http://www.hailfinger.org/" target="_blank">http://www.hailfinger.org/</a><br>
<br>
<br>
_______________________________________________<br>
flashrom mailing list<br>
<a href="mailto:flashrom@flashrom.org">flashrom@flashrom.org</a><br>
<a href="http://www.flashrom.org/mailman/listinfo/flashrom" target="_blank">http://www.flashrom.org/mailman/listinfo/flashrom</a><br>
</font></blockquote></div><br><br clear="all"><br>-- <br> Udu E. Ogah<br>.~~~~~~~~~~.<br>