[flashrom] quick shot at BSD RDMSR support

Stefan Reinauer stepan at coresystems.de
Wed Aug 19 12:24:43 CEST 2009


On 8/19/09 3:36 AM, Idwer Vollering wrote:
> 2009/8/17 Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net
> <mailto:c-d.hailfinger.devel.2006 at gmx.net>>
>
>     On 13.08.2009 00:43, Carl-Daniel Hailfinger wrote:
>     > On 13.08.2009 00:19, Carl-Daniel Hailfinger wrote:
>     >
>     >> On 12.08.2009 20:44, Stefan Reinauer wrote:
>     >>
>     >>
>     >>> This needs /dev/cpu0 from ports/sysutils
>     >>>
>     >>>
>     >> Stefan, since the original patch is from you, you may want to add
>     >> your Signoff here as well.
>     >>
>
>     Compiles on FreeBSD and Linux and is the least invasive solution I
>     could
>     come up with.
>
>     This is 0.9.1 material.
>

Signed-off-by: Stefan Reinauer <stepan at coresystems.de>
>
>     Signed-off-by: Carl-Daniel Hailfinger
>     <c-d.hailfinger.devel.2006 at gmx.net
>     <mailto:c-d.hailfinger.devel.2006 at gmx.net>>
>
>
> Having sysutils/devcpu installed doesn't look necessary to me (patch
> compiles/flashrom ELF runs without errors).
> No, I don't own GeodeLX hardware.
>
> Acked-by: Idwer Vollering <vidwer at gmail.com <mailto:vidwer at gmail.com>>
>
>
>
>     Index: flashrom-rdmsr_freebsd/flash.h
>     ===================================================================
>     --- flashrom-rdmsr_freebsd/flash.h      (Revision 685)
>     +++ flashrom-rdmsr_freebsd/flash.h      (Arbeitskopie)
>     @@ -309,11 +309,21 @@
>      void physunmap(void *virt_addr, size_t len);
>      int setup_cpu_msr(int cpu);
>      void cleanup_cpu_msr(void);
>     -#ifndef __DARWIN__
>     +#if !defined(__DARWIN__) && !defined(__FreeBSD__) &&
>     !defined(__DragonFly__)
>      typedef struct { uint32_t hi, lo; } msr_t;
>      msr_t rdmsr(int addr);
>      int wrmsr(int addr, msr_t msr);
>      #endif
>     +#if defined(__FreeBSD__) || defined(__DragonFly__)
>     +/* FreeBSD already has conflicting definitions for wrmsr/rdmsr. */
>     +#undef rdmsr
>     +#undef wrmsr
>     +#define rdmsr freebsd_rdmsr
>     +#define wrmsr freebsd_wrmsr
>     +typedef struct { uint32_t hi, lo; } msr_t;
>     +msr_t freebsd_rdmsr(int addr);
>     +int freebsd_wrmsr(int addr, msr_t msr);
>     +#endif
>
>      /* internal.c */
>      struct pci_dev *pci_dev_find_filter(struct pci_filter filter);
>     Index: flashrom-rdmsr_freebsd/physmap.c
>     ===================================================================
>     --- flashrom-rdmsr_freebsd/physmap.c    (Revision 685)
>     +++ flashrom-rdmsr_freebsd/physmap.c    (Arbeitskopie)
>     @@ -215,6 +215,91 @@
>            fd_msr = -1;
>      }
>      #else
>     +#if defined(__FreeBSD__) || defined(__DragonFly__)
>     +#include <sys/ioctl.h>
>     +
>     +typedef struct {
>     +       int msr;
>     +       uint64_t data;
>     +} cpu_msr_args_t;
>     +#define CPU_RDMSR _IOWR('c', 1, cpu_msr_args_t)
>     +#define CPU_WRMSR _IOWR('c', 2, cpu_msr_args_t)
>     +
>     +static int fd_msr = -1;
>     +
>     +msr_t rdmsr(int addr)
>     +{
>     +       cpu_msr_args_t args;
>     +
>     +       msr_t msr = { 0xffffffff, 0xffffffff };
>     +
>     +       args.msr = addr;
>     +
>     +       if (ioctl(fd_msr, CPU_RDMSR, &args) < 0) {
>     +               perror("CPU_RDMSR");
>     +               close(fd_msr);
>     +               exit(1);
>     +       }
>     +
>     +       msr.lo = args.data & 0xffffffff;
>     +       msr.hi = args.data >> 32;
>     +
>     +       return msr;
>     +}
>     +
>     +int wrmsr(int addr, msr_t msr)
>     +{
>     +       cpu_msr_args_t args;
>     +
>     +       args.msr = addr;
>     +       args.data = (((uint64_t)msr.hi) << 32) | msr.lo;
>     +
>     +       if (ioctl(fd_msr, CPU_WRMSR, &args) < 0) {
>     +               perror("CPU_WRMSR");
>     +               close(fd_msr);
>     +               exit(1);
>     +       }
>     +
>     +       return 0;
>     +}
>     +
>     +int setup_cpu_msr(int cpu)
>     +{
>     +       char msrfilename[64];
>     +       memset(msrfilename, 0, 64);
>     +       sprintf(msrfilename, "/dev/cpu%d", cpu);
>     +
>     +       if (fd_msr != -1) {
>     +               printf("MSR was already initialized\n");
>     +               return -1;
>     +       }
>     +
>     +       fd_msr = open(msrfilename, O_RDWR);
>     +
>     +       if (fd_msr < 0) {
>     +               perror("Error while opening /dev/cpu0");
>     +               printf("Did you install ports/sysutils/devcpu?\n");
>     +               return -1;
>     +       }
>     +
>     +       return 0;
>     +}
>     +
>     +void cleanup_cpu_msr(void)
>     +{
>     +       if (fd_msr == -1) {
>     +               printf("No MSR initialized.\n");
>     +               return;
>     +       }
>     +
>     +       close(fd_msr);
>     +
>     +       /* Clear MSR file descriptor */
>     +       fd_msr = -1;
>     +}
>     +
>     +#else
>     +
>      #ifdef __DARWIN__
>      int setup_cpu_msr(int cpu)
>      {
>     @@ -251,4 +336,5 @@
>      }
>      #endif
>      #endif
>     +#endif
>
>
>
>     --
>     http://www.hailfinger.org/
>
>
>     _______________________________________________
>     flashrom mailing list
>     flashrom at flashrom.org <mailto:flashrom at flashrom.org>
>     http://www.flashrom.org/mailman/listinfo/flashrom
>
>


-- 
coresystems GmbH • Brahmsstr. 16 • D-79104 Freiburg i. Br.
      Tel.: +49 761 7668825 • Fax: +49 761 7664613
Email: info at coresystems.dehttp://www.coresystems.de/
Registergericht: Amtsgericht Freiburg • HRB 7656
Geschäftsführer: Stefan Reinauer • Ust-IdNr.: DE245674866

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.flashrom.org/pipermail/flashrom/attachments/20090819/6ba81015/attachment.html>


More information about the flashrom mailing list