Hi,
attached patch is updated to current trunk, with some minor cleanup in
the MSR routines (no need to explicitely cast to unsigned long long).
With this patch, it's easier to build flashrom with libpayload, but some
crucial parts are still missing, most notably the frontend.
Once flashrom is a library, it will be relatively easy to use.
Signed-off-by: Patrick Georgi <[email protected]>
Index: hwaccess.c
===================================================================
--- hwaccess.c (revision 1183)
+++ hwaccess.c (working copy)
@@ -22,9 +22,11 @@
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
-#if !defined (__DJGPP__)
+#if !defined (__DJGPP__) && !defined(__LIBPAYLOAD__)
#include <unistd.h>
#include <fcntl.h>
+#endif
+#if !defined (__DJGPP__)
#include <errno.h>
#endif
#include "flash.h"
@@ -44,7 +46,7 @@
void get_io_perms(void)
{
-#if defined(__DJGPP__)
+#if defined(__DJGPP__) || defined(__LIBPAYLOAD__)
/* We have full permissions by default. */
return;
#else
Index: hwaccess.h
===================================================================
--- hwaccess.h (revision 1183)
+++ hwaccess.h (working copy)
@@ -292,7 +292,7 @@
#endif
#endif
-#if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__DragonFly__)
+#if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__DragonFly__)
&& !defined(__LIBPAYLOAD__)
typedef struct { uint32_t hi, lo; } msr_t;
msr_t rdmsr(int addr);
int wrmsr(int addr, msr_t msr);
@@ -307,6 +307,16 @@
msr_t freebsd_rdmsr(int addr);
int freebsd_wrmsr(int addr, msr_t msr);
#endif
+#if defined(__LIBPAYLOAD__)
+#include <arch/io.h>
+#include <arch/msr.h>
+typedef struct { uint32_t hi, lo; } msr_t;
+msr_t libpayload_rdmsr(int addr);
+int libpayload_wrmsr(int addr, msr_t msr);
+#undef rdmsr
+#define rdmsr libpayload_rdmsr
+#define wrmsr libpayload_wrmsr
+#endif
#elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) ||
defined(__ppc64__)
Index: layout.c
===================================================================
--- layout.c (revision 1183)
+++ layout.c (working copy)
@@ -134,6 +134,7 @@
}
#endif
+#ifndef __LIBPAYLOAD__
int read_romlayout(char *name)
{
FILE *romlayout;
@@ -181,6 +182,7 @@
return 0;
}
+#endif
int find_romentry(char *name)
{
Index: physmap.c
===================================================================
--- physmap.c (revision 1183)
+++ physmap.c (working copy)
@@ -28,7 +28,7 @@
#include "flash.h"
/* Do we need any file access or ioctl for physmap or MSR? */
-#if !defined(__DJGPP__)
+#if !defined(__DJGPP__) && !defined(__LIBPAYLOAD__)
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
@@ -104,6 +104,31 @@
__dpmi_free_physical_address_mapping(&mi);
}
+#elif defined(__LIBPAYLOAD__)
+#include <arch/virtual.h>
+
+#define MEM_DEV ""
+
+void *sys_physmap(unsigned long phys_addr, size_t len)
+{
+ return (void*)phys_to_virt(phys_addr);
+}
+
+#define sys_physmap_rw_uncached sys_physmap
+#define sys_physmap_ro_cached sys_physmap
+
+void physunmap(void *virt_addr, size_t len)
+{
+}
+
+int setup_cpu_msr(int cpu)
+{
+ return 0;
+}
+
+void cleanup_cpu_msr(void)
+{
+}
#elif defined(__DARWIN__)
#include <DirectIO/darwinio.h>
@@ -453,6 +478,20 @@
{
// Nothing, yet.
}
+#elif defined(__LIBPAYLOAD__)
+msr_t libpayload_rdmsr(int addr)
+{
+ msr_t msr;
+ unsigned long long val = _rdmsr(addr);
+ msr.lo = val & 0xffffffff;
+ msr.hi = val >> 32;
+ return msr;
+}
+
+int libpayload_wrmsr(int addr, msr_t msr)
+{
+ _wrmsr(addr, msr.lo | ((unsigned long long)msr.hi << 32));
+}
#else
msr_t rdmsr(int addr)
{
Index: flashrom.c
===================================================================
--- flashrom.c (revision 1183)
+++ flashrom.c (working copy)
@@ -22,9 +22,11 @@
*/
#include <stdio.h>
+#include <sys/types.h>
+#ifndef __LIBPAYLOAD__
#include <fcntl.h>
-#include <sys/types.h>
#include <sys/stat.h>
+#endif
#include <string.h>
#include <stdlib.h>
#include <getopt.h>
Index: udelay.c
===================================================================
--- udelay.c (revision 1183)
+++ udelay.c (working copy)
@@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#ifndef __LIBPAYLOAD__
+
#include <unistd.h>
#include <sys/time.h>
#include <stdlib.h>
@@ -179,3 +181,15 @@
}
}
+#else
+
+void myusec_calibrate_delay(void)
+{
+ get_cpu_speed();
+}
+
+void internal_delay(int usecs)
+{
+ udelay(usecs);
+}
+#endif
_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom