<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
On 8/19/09 3:36 AM, Idwer Vollering wrote:
<blockquote
 cite="mid:fdea27e40908181836s25789c60i84e4d8e053f34cce@mail.gmail.com"
 type="cite">2009/8/17 Carl-Daniel Hailfinger <span dir="ltr"><<a
 moz-do-not-send="true" href="mailto:c-d.hailfinger.devel.2006@gmx.net">c-d.hailfinger.devel.2006@gmx.net</a>></span><br>
  <div class="gmail_quote">
  <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div class="im">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>
    </div>
    <div class="im">>> Stefan, since the original patch is from
you, you may want to add<br>
>> your Signoff here as well.<br>
>><br>
    <br>
    </div>
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>
  </blockquote>
  </div>
</blockquote>
<br>
Signed-off-by: Stefan Reinauer <a class="moz-txt-link-rfc2396E" href="mailto:stepan@coresystems.de"><stepan@coresystems.de></a><br>
<blockquote
 cite="mid:fdea27e40908181836s25789c60i84e4d8e053f34cce@mail.gmail.com"
 type="cite">
  <div class="gmail_quote">
  <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div class="im">Signed-off-by: Carl-Daniel Hailfinger <<a
 moz-do-not-send="true" href="mailto:c-d.hailfinger.devel.2006@gmx.net">c-d.hailfinger.devel.2006@gmx.net</a>></div>
  </blockquote>
  <div><br>
Having sysutils/devcpu installed doesn't look necessary to me (patch
compiles/flashrom ELF runs without errors).<br>
No, I don't own GeodeLX hardware.<br>
  <br>
Acked-by: <span class="gI">Idwer Vollering <<a
 moz-do-not-send="true" href="mailto:vidwer@gmail.com">vidwer@gmail.com</a>></span><br>
  <br>
  </div>
  <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div class="im"><br>
    <br>
    </div>
    <div class="im">Index: flashrom-rdmsr_freebsd/flash.h<br>
===================================================================<br>
    </div>
--- flashrom-rdmsr_freebsd/flash.h      (Revision 685)<br>
    <div class="im">+++ flashrom-rdmsr_freebsd/flash.h    
 (Arbeitskopie)<br>
    </div>
@@ -309,11 +309,21 @@<br>
 void physunmap(void *virt_addr, size_t len);<br>
 int setup_cpu_msr(int cpu);<br>
    <div class="im"> void cleanup_cpu_msr(void);<br>
-#ifndef __DARWIN__<br>
    </div>
+#if !defined(__DARWIN__) && !defined(__FreeBSD__) &&
!defined(__DragonFly__)<br>
    <div class="im"> typedef struct { uint32_t hi, lo; } msr_t;<br>
 msr_t rdmsr(int addr);<br>
 int wrmsr(int addr, msr_t msr);<br>
    </div>
 #endif<br>
    <div class="im">+#if defined(__FreeBSD__) || defined(__DragonFly__)<br>
    </div>
+/* 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>
    <div class="im">Index: flashrom-rdmsr_freebsd/physmap.c<br>
===================================================================<br>
    </div>
--- flashrom-rdmsr_freebsd/physmap.c    (Revision 685)<br>
    <div class="im">+++ flashrom-rdmsr_freebsd/physmap.c  
 (Arbeitskopie)<br>
    </div>
    <div class="im">@@ -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>
    </div>
+msr_t rdmsr(int addr)<br>
    <div class="im">+{<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>
    </div>
+       msr.lo = args.data & 0xffffffff;<br>
+       msr.hi = args.data >> 32;<br>
+<br>
+       return msr;<br>
+}<br>
+<br>
    <div class="im">+int wrmsr(int addr, msr_t msr)<br>
    </div>
    <div>
    <div class="h5">+{<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>
    </div>
    </div>
    <div class="im">@@ -251,4 +336,5 @@<br>
 }<br>
 #endif<br>
 #endif<br>
+#endif<br>
    <br>
    <br>
    <br>
    </div>
    <div>
    <div class="h5">--<br>
    <a moz-do-not-send="true" href="http://www.hailfinger.org/"
 target="_blank">http://www.hailfinger.org/</a><br>
    <br>
    <br>
_______________________________________________<br>
flashrom mailing list<br>
    <a moz-do-not-send="true" href="mailto:flashrom@flashrom.org">flashrom@flashrom.org</a><br>
    <a moz-do-not-send="true"
 href="http://www.flashrom.org/mailman/listinfo/flashrom"
 target="_blank">http://www.flashrom.org/mailman/listinfo/flashrom</a><br>
    </div>
    </div>
  </blockquote>
  </div>
  <br>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">-- 
coresystems GmbH • Brahmsstr. 16 • D-79104 Freiburg i. Br.
      Tel.: +49 761 7668825 • Fax: +49 761 7664613
Email: <a class="moz-txt-link-abbreviated" href="mailto:info@coresystems.de">info@coresystems.de</a>  • <a class="moz-txt-link-freetext" href="http://www.coresystems.de/">http://www.coresystems.de/</a>
Registergericht: Amtsgericht Freiburg • HRB 7656
Geschäftsführer: Stefan Reinauer • Ust-IdNr.: DE245674866
</pre>
</body>
</html>