[flashrom] quick shot at BSD RDMSR support

Putlinuxonit putlinuxonit at gmail.com
Wed Aug 19 00:46:26 CEST 2009


acked-by: idlogin <putlinuxonit at gmail.com>

2009/8/17 Carl-Daniel Hailfinger <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: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
>
> 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
> http://www.flashrom.org/mailman/listinfo/flashrom
>



-- 
Udu E. Ogah
.~~~~~~~~~~.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.flashrom.org/pipermail/flashrom/attachments/20090818/92197b06/attachment.html>


More information about the flashrom mailing list