#ifndef __X86_32_PAGE_H__ #define __X86_32_PAGE_H__ #define L1_PAGETABLE_SHIFT 12 #define L2_PAGETABLE_SHIFT 21 #define L3_PAGETABLE_SHIFT 30 #define PAGE_SHIFT L1_PAGETABLE_SHIFT #define ROOT_PAGETABLE_SHIFT L3_PAGETABLE_SHIFT #define PAGETABLE_ORDER 9 #define L1_PAGETABLE_ENTRIES (1<> L1_PAGETABLE_SHIFT) #define l2_linear_offset(_a) ((_a) >> L2_PAGETABLE_SHIFT) #ifndef __ASSEMBLY__ #include #include /* read access (should only be used for debug printk's) */ typedef u64 intpte_t; #define PRIpte "016llx" typedef struct { intpte_t l1; } l1_pgentry_t; typedef struct { intpte_t l2; } l2_pgentry_t; typedef struct { intpte_t l3; } l3_pgentry_t; typedef l3_pgentry_t root_pgentry_t; extern unsigned int PAGE_HYPERVISOR; extern unsigned int PAGE_HYPERVISOR_NOCACHE; #endif #define pte_read_atomic(ptep) ({ \ intpte_t __pte = *(ptep), __npte; \ while ( (__npte = cmpxchg(ptep, __pte, __pte)) != __pte ) \ __pte = __npte; \ __pte; }) #define pte_write_atomic(ptep, pte) do { \ intpte_t __pte = *(ptep), __npte; \ while ( (__npte = cmpxchg(ptep, __pte, (pte))) != __pte ) \ __pte = __npte; \ } while ( 0 ) #define pte_write(ptep, pte) do { \ u32 *__ptep_words = (u32 *)(ptep); \ __ptep_words[0] = 0; \ wmb(); \ __ptep_words[1] = (pte) >> 32; \ wmb(); \ __ptep_words[0] = (pte) >> 0; \ } while ( 0 ) /* root table */ #define root_get_pfn l3e_get_pfn #define root_get_flags l3e_get_flags #define root_get_intpte l3e_get_intpte #define root_empty l3e_empty #define root_from_paddr l3e_from_paddr #define PGT_root_page_table PGT_l3_page_table /* misc */ #define is_guest_l1_slot(s) (1) #define is_guest_l2_slot(d,t,s) \ ( !((t) & PGT_pae_xen_l2) || \ ((s) < (L2_PAGETABLE_FIRST_XEN_SLOT & (L2_PAGETABLE_ENTRIES - 1))) ) #define is_guest_l3_slot(s) (1) /* * PTE pfn and flags: * 32-bit pfn = (pte[43:12]) * 32-bit flags = (pte[63:44],pte[11:0]) */ #define _PAGE_NX_BIT (1U<<31) #define _PAGE_NX (cpu_has_nx ? _PAGE_NX_BIT : 0) /* Extract flags into 32-bit integer, or turn 32-bit flags into a pte mask. */ #define get_pte_flags(x) (((int)((x) >> 32) & ~0xFFF) | ((int)(x) & 0xFFF)) #define put_pte_flags(x) (((intpte_t)((x) & ~0xFFF) << 32) | ((x) & 0xFFF)) #define GRANT_PTE_FLAGS \ (_PAGE_PRESENT|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_GNTTAB) /* * Disallow unused flag bits plus PAT/PSE, PCD, PWT and GLOBAL. * Permit the NX bit if the hardware supports it. */ #define BASE_DISALLOW_MASK (0xFFFFF198U & ~_PAGE_NX) #define L1_DISALLOW_MASK (BASE_DISALLOW_MASK | _PAGE_GNTTAB) #define L2_DISALLOW_MASK (BASE_DISALLOW_MASK) #define L3_DISALLOW_MASK 0xFFFFF1FEU /* must-be-zero */ #endif /* __X86_32_PAGE_H__ */ /* * Local variables: * mode: C * c-set-style: "BSD" * c-basic-offset: 4 * tab-width: 4 * indent-tabs-mode: nil * End: */ 32'>32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
# 
# Copyright (C) 2006-2008 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:=fuse
PKG_VERSION:=2.7.3
PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/$(PKG_NAME)
PKG_MD5SUM:=98563fc7b265b7479a3178181cbcf59a

include $(INCLUDE_DIR)/package.mk

define Package/fuse/Default
  TITLE:=FUSE
  DEPENDS:=@LINUX_2_6
  URL:=http://fuse.sourceforge.net/
endef

define Package/fuse/Default/description
 FUSE (Filesystem in UserSpacE)
endef

define Package/fuse-utils
$(call Package/fuse/Default)
  SECTION:=utils
  CATEGORY:=Utilities
  DEPENDS:=+libfuse +kmod-fuse @LINUX_2_6
  TITLE+= (utilities)
  SUBMENU:=disc
endef

define Package/fuse-utils/description
$(call Package/fuse/Default/description)
 This package contains the FUSE utilities.
endef

define KernelPackage/fuse
$(call Package/fuse/Default)
  SUBMENU:=Filesystems
  DEPENDS:=@LINUX_2_6
  TITLE+= (kernel module)
  KCONFIG:= CONFIG_FUSE_FS
  FILES:=$(LINUX_DIR)/fs/fuse/fuse.$(LINUX_KMOD_SUFFIX)
  AUTOLOAD:=$(call AutoLoad,80,fuse)
endef

define KernelPackage/fuse/description
$(call Package/fuse/Default/description)
 This package contains the FUSE kernel module.
endef

define Package/libfuse
$(call Package/fuse/Default)
  SECTION:=libs
  CATEGORY:=Libraries
  DEPENDS:=@LINUX_2_6
  TITLE+= (library)
  SUBMENU:=disc
endef

define Package/libfuse/description
$(call Package/fuse/Default/description)
 This package contains the FUSE shared library, needed by other programs.
endef

CONFIGURE_VARS += \
	 kernsrcver="$(LINUX_VERSION)"

CONFIGURE_ARGS += \
	--enable-shared \
	--enable-static \
	--disable-rpath \
	--enable-lib \
	--enable-util \
	--disable-example \
	--disable-auto-modprobe \
	--with-kernel="$(LINUX_DIR)" \
	--disable-mtab

ifeq ($(strip $(call CompareKernelPatchVer,$(KERNEL_PATCHVER),lt,2.6.25)),1)
  define KernelPackage/fuse/2.6
    KCONFIG:=
    FILES:=$(PKG_INSTALL_DIR)/lib/modules/$(LINUX_VERSION)/kernel/fs/fuse/fuse.$(LINUX_KMOD_SUFFIX)
  endef

 CONFIGURE_ARGS += --enable-kernel-module
else
 CONFIGURE_ARGS += --disable-kernel-module
endif

define Build/Configure
	(cd $(PKG_BUILD_DIR); rm -f config.cache; \
		touch configure.in ; \
		touch aclocal.m4 ; \
		touch Makefile.in ; \
		touch include/config.h.in ; \
		touch configure ; \
	)
	$(call Build/Configure/Default)
endef

define Build/Compile
	$(MAKE) -C $(PKG_BUILD_DIR) \
		ARCH="$(LINUX_KARCH)" \
		CROSS_COMPILE="$(TARGET_CROSS)" \
		DESTDIR="$(PKG_INSTALL_DIR)" \
		AM_CFLAGS="$(TARGET_CFLAGS) -DDISABLE_COMPAT=1" \
		EXTRA_DIST="" \
		all install
endef

define Build/InstallDev
	mkdir -p $(1)/usr/include
	$(CP)	$(PKG_INSTALL_DIR)/usr/include/fuse{,.h} $(1)/usr/include/
	mkdir -p $(1)/usr/lib
	$(CP)	$(PKG_INSTALL_DIR)/usr/lib/libfuse.{a,so*} $(1)/usr/lib/
	mkdir -p $(1)/usr/lib/pkgconfig
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/fuse.pc $(1)/usr/lib/pkgconfig/
	$(SED) 's,-I$$$${includedir}/fuse,,g' $(1)/usr/lib/pkgconfig/fuse.pc
	$(SED) 's,-L$$$${libdir},,g' $(1)/usr/lib/pkgconfig/fuse.pc
endef

define Package/fuse-utils/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/fusermount $(1)/usr/bin/
endef

define Package/libfuse/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libfuse.so.* $(1)/usr/lib/
endef

$(eval $(call BuildPackage,fuse-utils))
$(eval $(call BuildPackage,libfuse))
$(eval $(call KernelPackage,fuse))