Externals/ACPICA - Compiles (with hackery)
authorJohn Hodge (sonata) <[email protected]>
Sat, 1 Dec 2012 03:19:39 +0000 (11:19 +0800)
committerJohn Hodge (sonata) <[email protected]>
Sat, 1 Dec 2012 03:19:39 +0000 (11:19 +0800)
Externals/ACPICA/Makefile
Externals/ACPICA/acacess.h [new file with mode: 0644]

index 378a042..f91aa55 100644 (file)
@@ -3,23 +3,52 @@
 include $(dir $(lastword $(MAKEFILE_LIST)))../../Makefile.cfg
 
 COMPONENTS = utilities tables
-BIN := ../$(ARCH)/libacpica.a
+BIN := ../bin-$(ARCH)/libacpica.a
 
-ACPICAROOT := acpica-unix-20121114/
+ACPICAVER = 20121114
+ACPICAROOT := acpica-unix-$(ACPICAVER)/
 COMPDIR := $(ACPICAROOT)source/components/
+KERNELDIR := ../../KernelLand/Kernel/
 
-CPPFLAGS += -I $(ACPICAROOT)source/include
+CPPFLAGS       += -I $(KERNELDIR)include -I$(KERNELDIR)arch/$(ARCHDIR)/include -D_MODULE_NAME_=\"ACPICA\"
+CPPFLAGS        += -I $(ACPICAROOT)source/include -D _ACESS -D __KERNEL__
+CPPFLAGS       += -D ARCH=$(ARCH) -D ARCHDIR=$(ARCHDIR) -D PLATFORM=\"$(PLATFORM)\" -D ARCHDIR_IS_$(ARCHDIR)=1 -D PLATFORM_is_$(PLATFORM)=1
+CPPFLAGS       += -D KERNEL_VERSION=$(KERNEL_VERSION) -ffreestanding
+CFLAGS         += -Wall -fno-stack-protector -Wstrict-prototypes -std=gnu99 -g
 
 SRCS := $(foreach comp,$(COMPONENTS),$(wildcard $(COMPDIR)$(comp)/*.c))
 OBJS := $(SRCS:$(COMPDIR)%.c=obj-$(ARCH)/%.o)
 
+ACENV_H := $(ACPICAROOT)source/include/platform/acenv.h
+ACACESS_H := $(ACPICAROOT)source/include/platform/acacess.h
+
 .PHONY: all clean
 
+all: $(BIN)
+
+clean:
+       $(RM) obj-$(ARCH)/
+
 $(BIN): $(OBJS)
-       ar -cu $@ $(OBJS)
+       @mkdir -p $(dir $@)
+       @echo [AR] $@
+       @ar rcu $@ $(OBJS)
 
-obj-$(ARCH)/%.o: $(COMPDIR)%.c
+#include_exp/acpi: $(ACPICAROOT)source/include
+#      @mkdir -p $(dir $@)
+#      ln -s ../$< $@
+
+$(ACACESS_H): acacess.h
+       cp $< $@
+
+$(ACENV_H): acpica-unix-$(ACPICAVER).tar.gz Makefile
+       tar -x -O -f acpica-unix-$(ACPICAVER).tar.gz $(ACENV_H) | sed 's/aclinux/acacess/' | sed 's/_LINUX/_ACESS/' > $@
+
+obj-$(ARCH)/%.o: $(COMPDIR)%.c $(ACENV_H) $(ACACESS_H)
        @mkdir -p $(dir $@)
-       $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< 
+       @echo [CC] -o $@
+       @$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< 
        @$(CC) -M -MP -MT $@ $(CPPFLAGS) $< -o [email protected]
 
+-include $(OBJS:%=%.dep)
+
diff --git a/Externals/ACPICA/acacess.h b/Externals/ACPICA/acacess.h
new file mode 100644 (file)
index 0000000..bcbdc9d
--- /dev/null
@@ -0,0 +1,118 @@
+/******************************************************************************
+ *
+ * Name: aclinux.h - OS specific defines, etc. for Linux
+ *
+ *****************************************************************************/
+
+#ifndef _ACPICA__ACACESS_H_
+#define _ACPICA__ACACESS_H_
+
+#define ACPI_USE_SYSTEM_CLIBRARY
+#define ACPI_USE_DO_WHILE_0
+#define ACPI_MUTEX_TYPE             ACPI_BINARY_SEMAPHORE
+
+
+#ifdef __KERNEL__
+
+#include <acess.h>
+
+/* Host-dependent types and defines for in-kernel ACPICA */
+
+#define ACPI_MACHINE_WIDTH          BITS
+
+#define ACPI_SPINLOCK               tShortSpinlock
+#define ACPI_CPU_FLAGS              unsigned long
+
+#define COMPILER_DEPENDENT_UINT64      Uint64
+#define COMPILER_DEPENDENT_INT64       Sint64
+
+#define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) do { \
+       q32 = DivMod64( ((Sint64)n_hi<<32)|n_lo, d32, &r32 ); \
+       }while(0)
+#define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) do { \
+       n_lo >>= 1; \
+       if(n_hi & 1)    n_lo |= (1 << 31); \
+       n_hi >>= 1; \
+       }while(0)
+
+#else /* !__KERNEL__ */
+
+#error "Kernel only"
+
+#endif /* __KERNEL__ */
+
+/* Linux uses GCC */
+
+#include "acgcc.h"
+
+
+#if 0
+#ifdef __KERNEL__
+#define ACPI_SYSTEM_XFACE
+#include <actypes.h>
+/*
+ * Overrides for in-kernel ACPICA
+ */
+static inline acpi_thread_id acpi_os_get_thread_id(void)
+{
+    return (ACPI_THREAD_ID) (unsigned long) current;
+}
+
+/*
+ * The irqs_disabled() check is for resume from RAM.
+ * Interrupts are off during resume, just like they are for boot.
+ * However, boot has  (system_state != SYSTEM_RUNNING)
+ * to quiet __might_sleep() in kmalloc() and resume does not.
+ */
+static inline void *acpi_os_allocate(acpi_size size)
+{
+    return malloc(size);
+}
+
+static inline void *acpi_os_allocate_zeroed(acpi_size size)
+{
+    return calloc(size, 1);
+}
+
+static inline void *acpi_os_acquire_object(acpi_cache_t * cache)
+{
+//    return kmem_cache_zalloc(cache,
+//        irqs_disabled() ? GFP_ATOMIC : GFP_KERNEL);
+}
+
+#define ACPI_ALLOCATE(a)        acpi_os_allocate(a)
+#define ACPI_ALLOCATE_ZEROED(a) acpi_os_allocate_zeroed(a)
+#define ACPI_FREE(a)            free(a)
+
+#ifndef CONFIG_PREEMPT
+/*
+ * Used within ACPICA to show where it is safe to preempt execution
+ * when CONFIG_PREEMPT=n
+ */
+#define ACPI_PREEMPTION_POINT() \
+    do { \
+        Threads_Yield(); \
+    } while (0)
+#endif
+
+/*
+ * When lockdep is enabled, the spin_lock_init() macro stringifies it's
+ * argument and uses that as a name for the lock in debugging.
+ * By executing spin_lock_init() in a macro the key changes from "lock" for
+ * all locks to the name of the argument of acpi_os_create_lock(), which
+ * prevents lockdep from reporting false positives for ACPICA locks.
+ */
+#define AcpiOsCreateLock(__handle)                             \
+({                                                             \
+       tShortlock *lock = ACPI_ALLOCATE_ZEROED(sizeof(*lock)); \
+                                                               \
+       if (lock) {                                             \
+               *(__handle) = lock;                             \
+       }                                                       \
+       lock ? AE_OK : AE_NO_MEMORY;                            \
+})
+
+#endif /* __KERNEL__ */
+#endif
+
+#endif /* __ACLINUX_H__ */

UCC git Repository :: git.ucc.asn.au