[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