#
# Automatically generated make config: don't edit
----- --# Linux kernel version: 2.6.27-rc5
----- --# Wed Sep 3 17:23:09 2008
+++++ ++# Linux kernel version: 2.6.29-rc4
+++++ ++# Thu Feb 12 12:57:57 2009
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
# CONFIG_X86_64 is not set
CONFIG_X86=y
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
----- --# CONFIG_GENERIC_LOCKBREAK is not set
CONFIG_GENERIC_TIME=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_HWEIGHT=y
----- --# CONFIG_GENERIC_GPIO is not set
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
----- --# CONFIG_ARCH_HAS_ILOG2_U32 is not set
----- --# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
# CONFIG_GENERIC_TIME_VSYSCALL is not set
CONFIG_ARCH_HAS_CPU_RELAX=y
+++++ ++CONFIG_ARCH_HAS_DEFAULT_IDLE=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
# CONFIG_ZONE_DMA32 is not set
CONFIG_ARCH_POPULATES_NODE_MAP=y
# CONFIG_AUDIT_ARCH is not set
----- --CONFIG_ARCH_SUPPORTS_AOUT=y
CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y
CONFIG_X86_SMP=y
+++++ ++CONFIG_USE_GENERIC_SMP_HELPERS=y
CONFIG_X86_32_SMP=y
CONFIG_X86_HT=y
CONFIG_X86_BIOS_REBOOT=y
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
CONFIG_AUDIT_TREE=y
+++++ ++
+++++ ++#
+++++ ++# RCU Subsystem
+++++ ++#
+++++ ++# CONFIG_CLASSIC_RCU is not set
+++++ ++CONFIG_TREE_RCU=y
+++++ ++# CONFIG_PREEMPT_RCU is not set
+++++ ++# CONFIG_RCU_TRACE is not set
+++++ ++CONFIG_RCU_FANOUT=32
+++++ ++# CONFIG_RCU_FANOUT_EXACT is not set
+++++ ++# CONFIG_TREE_RCU_TRACE is not set
+++++ ++# CONFIG_PREEMPT_RCU_TRACE is not set
# CONFIG_IKCONFIG is not set
- CONFIG_LOG_BUF_SHIFT=17
- CONFIG_CGROUPS=y
- # CONFIG_CGROUP_DEBUG is not set
- CONFIG_CGROUP_NS=y
- # CONFIG_CGROUP_DEVICE is not set
- CONFIG_CPUSETS=y
+ CONFIG_LOG_BUF_SHIFT=18
--- - --CONFIG_CGROUPS=y
--- - --# CONFIG_CGROUP_DEBUG is not set
--- - --CONFIG_CGROUP_NS=y
--- - --# CONFIG_CGROUP_DEVICE is not set
--- - --CONFIG_CPUSETS=y
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_GROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
# CONFIG_RT_GROUP_SCHED is not set
# CONFIG_USER_SCHED is not set
CONFIG_CGROUP_SCHED=y
+++++ ++CONFIG_CGROUPS=y
+++++ ++# CONFIG_CGROUP_DEBUG is not set
+++++ ++CONFIG_CGROUP_NS=y
+++++ ++CONFIG_CGROUP_FREEZER=y
+++++ ++# CONFIG_CGROUP_DEVICE is not set
+++++ ++CONFIG_CPUSETS=y
+++++ ++CONFIG_PROC_PID_CPUSET=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_RESOURCE_COUNTERS=y
# CONFIG_CGROUP_MEM_RES_CTLR is not set
# CONFIG_SYSFS_DEPRECATED_V2 is not set
----- --CONFIG_PROC_PID_CPUSET=y
CONFIG_RELAY=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
+++++ ++CONFIG_NET_NS=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
+++++ ++CONFIG_AIO=y
CONFIG_VM_EVENT_COUNTERS=y
+++++ ++CONFIG_PCI_QUIRKS=y
CONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
CONFIG_PROFILING=y
+++++ ++CONFIG_TRACEPOINTS=y
CONFIG_MARKERS=y
# CONFIG_OPROFILE is not set
CONFIG_HAVE_OPROFILE=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
----- --# CONFIG_HAVE_ARCH_TRACEHOOK is not set
----- --# CONFIG_HAVE_DMA_ATTRS is not set
----- --CONFIG_USE_GENERIC_SMP_HELPERS=y
----- --# CONFIG_HAVE_CLK is not set
----- --CONFIG_PROC_PAGE_MONITOR=y
+++++ ++CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
----- --# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
----- --CONFIG_KMOD=y
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
# CONFIG_LBD is not set
CONFIG_BLK_DEV_IO_TRACE=y
----- --# CONFIG_LSF is not set
CONFIG_BLK_DEV_BSG=y
# CONFIG_BLK_DEV_INTEGRITY is not set
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
----- --CONFIG_CLASSIC_RCU=y
+++++ ++CONFIG_FREEZER=y
#
# Processor type and features
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_SMP=y
+++++ ++CONFIG_SPARSE_IRQ=y
CONFIG_X86_FIND_SMP_CONFIG=y
CONFIG_X86_MPPARSE=y
-------CONFIG_X86_PC=y
# CONFIG_X86_ELAN is not set
# CONFIG_X86_VOYAGER is not set
# CONFIG_X86_GENERICARCH is not set
# CONFIG_X86_VSMP is not set
# CONFIG_X86_RDC321X is not set
----- --CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+++++ ++CONFIG_SCHED_OMIT_FRAME_POINTER=y
# CONFIG_PARAVIRT_GUEST is not set
# CONFIG_MEMTEST is not set
# CONFIG_M386 is not set
CONFIG_X86_CMOV=y
CONFIG_X86_MINIMUM_CPU_FAMILY=4
CONFIG_X86_DEBUGCTLMSR=y
+++++ ++CONFIG_CPU_SUP_INTEL=y
+++++ ++CONFIG_CPU_SUP_CYRIX_32=y
+++++ ++CONFIG_CPU_SUP_AMD=y
+++++ ++CONFIG_CPU_SUP_CENTAUR_32=y
+++++ ++CONFIG_CPU_SUP_TRANSMETA_32=y
+++++ ++CONFIG_CPU_SUP_UMC_32=y
+++++ ++CONFIG_X86_DS=y
+++++ ++CONFIG_X86_PTRACE_BTS=y
CONFIG_HPET_TIMER=y
CONFIG_HPET_EMULATE_RTC=y
CONFIG_DMI=y
# CONFIG_IOMMU_HELPER is not set
+++++ ++# CONFIG_IOMMU_API is not set
CONFIG_NR_CPUS=64
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
# CONFIG_PREEMPT is not set
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
+++++ ++CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
# CONFIG_X86_MCE is not set
CONFIG_VM86=y
# CONFIG_TOSHIBA is not set
# CONFIG_I8K is not set
CONFIG_X86_REBOOTFIXUPS=y
CONFIG_MICROCODE=y
+++++ ++CONFIG_MICROCODE_INTEL=y
+++++ ++CONFIG_MICROCODE_AMD=y
CONFIG_MICROCODE_OLD_INTERFACE=y
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
# CONFIG_HIGHMEM64G is not set
CONFIG_PAGE_OFFSET=0xC0000000
CONFIG_HIGHMEM=y
+++++ ++# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_SPARSEMEM_STATIC=y
----- --# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
----- --CONFIG_RESOURCES_64BIT=y
+++++ ++# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
+++++ ++CONFIG_UNEVICTABLE_LRU=y
CONFIG_HIGHPTE=y
+++++ ++CONFIG_X86_CHECK_BIOS_CORRUPTION=y
+++++ ++CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
+++++ ++CONFIG_X86_RESERVE_LOW_64K=y
# CONFIG_MATH_EMULATION is not set
CONFIG_MTRR=y
# CONFIG_MTRR_SANITIZER is not set
CONFIG_CRASH_DUMP=y
# CONFIG_KEXEC_JUMP is not set
CONFIG_PHYSICAL_START=0x1000000
- CONFIG_RELOCATABLE=y
+ # CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x200000
CONFIG_HOTPLUG_CPU=y
# CONFIG_COMPAT_VDSO is not set
+++++ ++# CONFIG_CMDLINE_BOOL is not set
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
#
----- --# Power management options
+++++ ++# Power management and ACPI options
#
CONFIG_PM=y
CONFIG_PM_DEBUG=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_DOCK=y
----- --# CONFIG_ACPI_BAY is not set
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_THERMAL=y
----- --# CONFIG_ACPI_WMI is not set
----- --# CONFIG_ACPI_ASUS is not set
----- --# CONFIG_ACPI_TOSHIBA is not set
# CONFIG_ACPI_CUSTOM_DSDT is not set
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
----- --CONFIG_ACPI_EC=y
# CONFIG_ACPI_PCI_SLOT is not set
----- --CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y
CONFIG_X86_PM_TIMER=y
CONFIG_ACPI_CONTAINER=y
#
# shared options
#
----- --# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
# CONFIG_X86_SPEEDSTEP_LIB is not set
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_PCI_MSI=y
# CONFIG_PCI_LEGACY is not set
# CONFIG_PCI_DEBUG is not set
+++++ ++# CONFIG_PCI_STUB is not set
CONFIG_HT_IRQ=y
CONFIG_ISA_DMA_API=y
# CONFIG_ISA is not set
# Executable file formats / Emulations
#
CONFIG_BINFMT_ELF=y
+++++ ++CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
+++++ ++CONFIG_HAVE_AOUT=y
# CONFIG_BINFMT_AOUT is not set
CONFIG_BINFMT_MISC=y
+++++ ++CONFIG_HAVE_ATOMIC_IOMAP=y
CONFIG_NET=y
#
# Networking options
#
+++++ ++CONFIG_COMPAT_NET_DEV_OPS=y
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="cubic"
CONFIG_TCP_MD5SIG=y
----- --# CONFIG_IP_VS is not set
CONFIG_IPV6=y
# CONFIG_IPV6_PRIVACY is not set
# CONFIG_IPV6_ROUTER_PREF is not set
CONFIG_NF_CONNTRACK_SIP=y
CONFIG_NF_CT_NETLINK=y
CONFIG_NETFILTER_XTABLES=y
+++++ ++CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
CONFIG_NETFILTER_XT_TARGET_MARK=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
CONFIG_NETFILTER_XT_TARGET_SECMARK=y
----- --CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_MARK=y
CONFIG_NETFILTER_XT_MATCH_POLICY=y
CONFIG_NETFILTER_XT_MATCH_STATE=y
+++++ ++# CONFIG_IP_VS is not set
#
# IP: Netfilter Configuration
#
+++++ ++CONFIG_NF_DEFRAG_IPV4=y
CONFIG_NF_CONNTRACK_IPV4=y
CONFIG_NF_CONNTRACK_PROC_COMPAT=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_NF_CONNTRACK_IPV6=y
CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_MATCH_IPV6HEADER=y
----- --CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_LOG=y
+++++ ++CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_MANGLE=y
# CONFIG_IP_DCCP is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
+++++ ++# CONFIG_NET_DSA is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
CONFIG_LLC=y
# CONFIG_NET_SCH_HTB is not set
# CONFIG_NET_SCH_HFSC is not set
# CONFIG_NET_SCH_PRIO is not set
+++++ ++# CONFIG_NET_SCH_MULTIQ is not set
# CONFIG_NET_SCH_RED is not set
# CONFIG_NET_SCH_SFQ is not set
# CONFIG_NET_SCH_TEQL is not set
# CONFIG_NET_SCH_GRED is not set
# CONFIG_NET_SCH_DSMARK is not set
# CONFIG_NET_SCH_NETEM is not set
+++++ ++# CONFIG_NET_SCH_DRR is not set
# CONFIG_NET_SCH_INGRESS is not set
#
# CONFIG_NET_CLS_RSVP is not set
# CONFIG_NET_CLS_RSVP6 is not set
# CONFIG_NET_CLS_FLOW is not set
+++++ ++# CONFIG_NET_CLS_CGROUP is not set
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
# CONFIG_NET_EMATCH_CMP is not set
# CONFIG_NET_ACT_NAT is not set
# CONFIG_NET_ACT_PEDIT is not set
# CONFIG_NET_ACT_SIMP is not set
+++++ ++# CONFIG_NET_ACT_SKBEDIT is not set
CONFIG_NET_SCH_FIFO=y
+++++ ++# CONFIG_DCB is not set
#
# Network testing
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_AF_RXRPC is not set
+++++ ++# CONFIG_PHONET is not set
CONFIG_FIB_RULES=y
----- --
----- --#
----- --# Wireless
----- --#
+++++ ++CONFIG_WIRELESS=y
CONFIG_CFG80211=y
+++++ ++# CONFIG_CFG80211_REG_DEBUG is not set
CONFIG_NL80211=y
+++++ ++CONFIG_WIRELESS_OLD_REGULATORY=y
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
+++++ ++# CONFIG_LIB80211 is not set
CONFIG_MAC80211=y
#
# Rate control algorithm selection
#
----- --CONFIG_MAC80211_RC_PID=y
----- --CONFIG_MAC80211_RC_DEFAULT_PID=y
----- --CONFIG_MAC80211_RC_DEFAULT="pid"
+++++ ++CONFIG_MAC80211_RC_MINSTREL=y
+++++ ++# CONFIG_MAC80211_RC_DEFAULT_PID is not set
+++++ ++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+++++ ++CONFIG_MAC80211_RC_DEFAULT="minstrel"
# CONFIG_MAC80211_MESH is not set
CONFIG_MAC80211_LEDS=y
# CONFIG_MAC80211_DEBUGFS is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
----- --# CONFIG_IEEE80211 is not set
----- --# CONFIG_RFKILL is not set
+++++ ++# CONFIG_WIMAX is not set
+++++ ++CONFIG_RFKILL=y
+++++ ++# CONFIG_RFKILL_INPUT is not set
+++++ ++CONFIG_RFKILL_LEDS=y
# CONFIG_NET_9P is not set
#
# CONFIG_MTD is not set
# CONFIG_PARPORT is not set
CONFIG_PNP=y
----- --# CONFIG_PNP_DEBUG is not set
+++++ ++CONFIG_PNP_DEBUG_MESSAGES=y
#
# Protocols
CONFIG_MISC_DEVICES=y
# CONFIG_IBM_ASM is not set
# CONFIG_PHANTOM is not set
----- --# CONFIG_EEPROM_93CX6 is not set
# CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set
----- --# CONFIG_ACER_WMI is not set
----- --# CONFIG_ASUS_LAPTOP is not set
----- --# CONFIG_FUJITSU_LAPTOP is not set
----- --# CONFIG_TC1100_WMI is not set
----- --# CONFIG_MSI_LAPTOP is not set
----- --# CONFIG_COMPAL_LAPTOP is not set
----- --# CONFIG_SONY_LAPTOP is not set
----- --# CONFIG_THINKPAD_ACPI is not set
----- --# CONFIG_INTEL_MENLOW is not set
+++++ ++# CONFIG_ICS932S401 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_HP_ILO is not set
+++++ ++# CONFIG_C2PORT is not set
+++++ ++
+++++ ++#
+++++ ++# EEPROM support
+++++ ++#
+++++ ++# CONFIG_EEPROM_AT24 is not set
+++++ ++# CONFIG_EEPROM_LEGACY is not set
+++++ ++# CONFIG_EEPROM_93CX6 is not set
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
#
CONFIG_SCSI_SPI_ATTRS=y
# CONFIG_SCSI_FC_ATTRS is not set
----- --CONFIG_SCSI_ISCSI_ATTRS=y
+++++ ++# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
CONFIG_PATA_SCH=y
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
+++++ ++CONFIG_MD_AUTODETECT=y
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
# CONFIG_MD_RAID1 is not set
# CONFIG_BROADCOM_PHY is not set
# CONFIG_ICPLUS_PHY is not set
# CONFIG_REALTEK_PHY is not set
+++++ ++# CONFIG_NATIONAL_PHY is not set
+++++ ++# CONFIG_STE10XP is not set
+++++ ++# CONFIG_LSI_ET1011C_PHY is not set
# CONFIG_FIXED_PHY is not set
# CONFIG_MDIO_BITBANG is not set
CONFIG_NET_ETHERNET=y
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+++++ ++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+++++ ++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+++++ ++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set
# CONFIG_AMD8111_ETH is not set
# CONFIG_B44 is not set
CONFIG_FORCEDETH=y
# CONFIG_FORCEDETH_NAPI is not set
----- --# CONFIG_EEPRO100 is not set
CONFIG_E100=y
# CONFIG_FEALNX is not set
# CONFIG_NATSEMI is not set
# CONFIG_R6040 is not set
# CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set
+++++ ++# CONFIG_SMSC9420 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_SC92031 is not set
+++++ ++# CONFIG_ATL2 is not set
CONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
CONFIG_E1000=y
----- --# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
CONFIG_E1000E=y
# CONFIG_IP1000 is not set
# CONFIG_IGB is not set
# CONFIG_QLA3XXX is not set
# CONFIG_ATL1 is not set
# CONFIG_ATL1E is not set
+++++ ++# CONFIG_JME is not set
CONFIG_NETDEV_10000=y
# CONFIG_CHELSIO_T1 is not set
+++++ ++CONFIG_CHELSIO_T3_DEPENDS=y
# CONFIG_CHELSIO_T3 is not set
+++++ ++# CONFIG_ENIC is not set
# CONFIG_IXGBE is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set
# CONFIG_MYRI10GE is not set
# CONFIG_NETXEN_NIC is not set
# CONFIG_NIU is not set
+++++ ++# CONFIG_MLX4_EN is not set
# CONFIG_MLX4_CORE is not set
# CONFIG_TEHUTI is not set
# CONFIG_BNX2X is not set
+++++ ++# CONFIG_QLGE is not set
# CONFIG_SFC is not set
CONFIG_TR=y
# CONFIG_IBMOL is not set
# CONFIG_WLAN_PRE80211 is not set
CONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
----- --# CONFIG_IPW2100 is not set
----- --# CONFIG_IPW2200 is not set
# CONFIG_LIBERTAS is not set
+++++ ++# CONFIG_LIBERTAS_THINFIRM is not set
# CONFIG_AIRO is not set
# CONFIG_HERMES is not set
# CONFIG_ATMEL is not set
CONFIG_ATH5K=y
# CONFIG_ATH5K_DEBUG is not set
# CONFIG_ATH9K is not set
+++++ ++# CONFIG_IPW2100 is not set
+++++ ++# CONFIG_IPW2200 is not set
# CONFIG_IWLCORE is not set
# CONFIG_IWLWIFI_LEDS is not set
# CONFIG_IWLAGN is not set
# CONFIG_ZD1211RW is not set
# CONFIG_RT2X00 is not set
+++++ ++#
+++++ ++# Enable WiMAX (Networking options) to see the WiMAX drivers
+++++ ++#
+++++ ++
#
# USB Network Adapters
#
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
+++++ ++# CONFIG_USB_HSO is not set
CONFIG_NET_PCMCIA=y
# CONFIG_PCMCIA_3C589 is not set
# CONFIG_PCMCIA_3C574 is not set
CONFIG_MOUSE_PS2_SYNAPTICS=y
CONFIG_MOUSE_PS2_LIFEBOOK=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
+++++ ++# CONFIG_MOUSE_PS2_ELANTECH is not set
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_APPLETOUCH is not set
# CONFIG_TOUCHSCREEN_FUJITSU is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_ELO is not set
+++++ ++# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_INEXIO is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
----- --# CONFIG_TOUCHSCREEN_UCB1400 is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+++++ ++# CONFIG_TOUCHSCREEN_TSC2007 is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_PCSPKR is not set
# CONFIG_INPUT_APANEL is not set
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not set
+++++ ++# CONFIG_INPUT_CM109 is not set
# CONFIG_INPUT_UINPUT is not set
#
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_UNIX98_PTYS=y
+++++ ++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
CONFIG_HW_RANDOM=y
CONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_CHARDEV is not set
CONFIG_I2C_HELPER_AUTO=y
+++++ ++CONFIG_I2C_ALGOBIT=y
#
# I2C Hardware Bus support
# Miscellaneous I2C Chip support
#
# CONFIG_DS1682 is not set
-- --# CONFIG_EEPROM_AT24 is not set
-- --# CONFIG_EEPROM_LEGACY is not set
--- # CONFIG_AT24 is not set
--- # CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
# CONFIG_BATTERY_DS2760 is not set
----- --# CONFIG_HWMON is not set
+++++ ++# CONFIG_BATTERY_BQ27x00 is not set
+++++ ++CONFIG_HWMON=y
+++++ ++# CONFIG_HWMON_VID is not set
+++++ ++# CONFIG_SENSORS_ABITUGURU is not set
+++++ ++# CONFIG_SENSORS_ABITUGURU3 is not set
+++++ ++# CONFIG_SENSORS_AD7414 is not set
+++++ ++# CONFIG_SENSORS_AD7418 is not set
+++++ ++# CONFIG_SENSORS_ADM1021 is not set
+++++ ++# CONFIG_SENSORS_ADM1025 is not set
+++++ ++# CONFIG_SENSORS_ADM1026 is not set
+++++ ++# CONFIG_SENSORS_ADM1029 is not set
+++++ ++# CONFIG_SENSORS_ADM1031 is not set
+++++ ++# CONFIG_SENSORS_ADM9240 is not set
+++++ ++# CONFIG_SENSORS_ADT7462 is not set
+++++ ++# CONFIG_SENSORS_ADT7470 is not set
+++++ ++# CONFIG_SENSORS_ADT7473 is not set
+++++ ++# CONFIG_SENSORS_ADT7475 is not set
+++++ ++# CONFIG_SENSORS_K8TEMP is not set
+++++ ++# CONFIG_SENSORS_ASB100 is not set
+++++ ++# CONFIG_SENSORS_ATXP1 is not set
+++++ ++# CONFIG_SENSORS_DS1621 is not set
+++++ ++# CONFIG_SENSORS_I5K_AMB is not set
+++++ ++# CONFIG_SENSORS_F71805F is not set
+++++ ++# CONFIG_SENSORS_F71882FG is not set
+++++ ++# CONFIG_SENSORS_F75375S is not set
+++++ ++# CONFIG_SENSORS_FSCHER is not set
+++++ ++# CONFIG_SENSORS_FSCPOS is not set
+++++ ++# CONFIG_SENSORS_FSCHMD is not set
+++++ ++# CONFIG_SENSORS_GL518SM is not set
+++++ ++# CONFIG_SENSORS_GL520SM is not set
+++++ ++# CONFIG_SENSORS_CORETEMP is not set
+++++ ++# CONFIG_SENSORS_IT87 is not set
+++++ ++# CONFIG_SENSORS_LM63 is not set
+++++ ++# CONFIG_SENSORS_LM75 is not set
+++++ ++# CONFIG_SENSORS_LM77 is not set
+++++ ++# CONFIG_SENSORS_LM78 is not set
+++++ ++# CONFIG_SENSORS_LM80 is not set
+++++ ++# CONFIG_SENSORS_LM83 is not set
+++++ ++# CONFIG_SENSORS_LM85 is not set
+++++ ++# CONFIG_SENSORS_LM87 is not set
+++++ ++# CONFIG_SENSORS_LM90 is not set
+++++ ++# CONFIG_SENSORS_LM92 is not set
+++++ ++# CONFIG_SENSORS_LM93 is not set
+++++ ++# CONFIG_SENSORS_LTC4245 is not set
+++++ ++# CONFIG_SENSORS_MAX1619 is not set
+++++ ++# CONFIG_SENSORS_MAX6650 is not set
+++++ ++# CONFIG_SENSORS_PC87360 is not set
+++++ ++# CONFIG_SENSORS_PC87427 is not set
+++++ ++# CONFIG_SENSORS_SIS5595 is not set
+++++ ++# CONFIG_SENSORS_DME1737 is not set
+++++ ++# CONFIG_SENSORS_SMSC47M1 is not set
+++++ ++# CONFIG_SENSORS_SMSC47M192 is not set
+++++ ++# CONFIG_SENSORS_SMSC47B397 is not set
+++++ ++# CONFIG_SENSORS_ADS7828 is not set
+++++ ++# CONFIG_SENSORS_THMC50 is not set
+++++ ++# CONFIG_SENSORS_VIA686A is not set
+++++ ++# CONFIG_SENSORS_VT1211 is not set
+++++ ++# CONFIG_SENSORS_VT8231 is not set
+++++ ++# CONFIG_SENSORS_W83781D is not set
+++++ ++# CONFIG_SENSORS_W83791D is not set
+++++ ++# CONFIG_SENSORS_W83792D is not set
+++++ ++# CONFIG_SENSORS_W83793 is not set
+++++ ++# CONFIG_SENSORS_W83L785TS is not set
+++++ ++# CONFIG_SENSORS_W83L786NG is not set
+++++ ++# CONFIG_SENSORS_W83627HF is not set
+++++ ++# CONFIG_SENSORS_W83627EHF is not set
+++++ ++# CONFIG_SENSORS_HDAPS is not set
+++++ ++# CONFIG_SENSORS_LIS3LV02D is not set
+++++ ++# CONFIG_SENSORS_APPLESMC is not set
+++++ ++# CONFIG_HWMON_DEBUG_CHIP is not set
CONFIG_THERMAL=y
+++++ ++# CONFIG_THERMAL_HWMON is not set
CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
# CONFIG_I6300ESB_WDT is not set
# CONFIG_ITCO_WDT is not set
# CONFIG_IT8712F_WDT is not set
+++++ ++# CONFIG_IT87_WDT is not set
# CONFIG_HP_WATCHDOG is not set
# CONFIG_SC1200_WDT is not set
# CONFIG_PC87413_WDT is not set
# CONFIG_SBC8360_WDT is not set
# CONFIG_SBC7240_WDT is not set
# CONFIG_CPU5_WDT is not set
+++++ ++# CONFIG_SMSC_SCH311X_WDT is not set
# CONFIG_SMSC37B787_WDT is not set
# CONFIG_W83627HF_WDT is not set
# CONFIG_W83697HF_WDT is not set
+++++ ++# CONFIG_W83697UG_WDT is not set
# CONFIG_W83877F_WDT is not set
# CONFIG_W83977F_WDT is not set
# CONFIG_MACHZ_WDT is not set
# USB-based Watchdog Cards
#
# CONFIG_USBPCWATCHDOG is not set
+++++ ++CONFIG_SSB_POSSIBLE=y
#
# Sonics Silicon Backplane
#
----- --CONFIG_SSB_POSSIBLE=y
# CONFIG_SSB is not set
#
# CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_HTC_PASIC3 is not set
+++++ ++# CONFIG_TWL4030_CORE is not set
# CONFIG_MFD_TMIO is not set
+++++ ++# CONFIG_PMIC_DA903X is not set
+++++ ++# CONFIG_MFD_WM8400 is not set
+++++ ++# CONFIG_MFD_WM8350_I2C is not set
+++++ ++# CONFIG_MFD_PCF50633 is not set
+++++ ++# CONFIG_REGULATOR is not set
#
# Multimedia devices
# CONFIG_DRM_I810 is not set
# CONFIG_DRM_I830 is not set
CONFIG_DRM_I915=y
+++++ ++# CONFIG_DRM_I915_KMS is not set
# CONFIG_DRM_MGA is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_VIA is not set
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
+++++ ++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_UVESA is not set
# CONFIG_FB_VESA is not set
CONFIG_FB_EFI=y
----- --# CONFIG_FB_IMAC is not set
# CONFIG_FB_N411 is not set
# CONFIG_FB_HGA is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not set
# CONFIG_FB_SIS is not set
+++++ ++# CONFIG_FB_VIA is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_CARMINE is not set
# CONFIG_FB_GEODE is not set
# CONFIG_FB_VIRTUAL is not set
+++++ ++# CONFIG_FB_METRONOME is not set
+++++ ++# CONFIG_FB_MB862XX is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
# CONFIG_LCD_CLASS_DEVICE is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y
----- --# CONFIG_BACKLIGHT_CORGI is not set
+++++ ++CONFIG_BACKLIGHT_GENERIC=y
# CONFIG_BACKLIGHT_PROGEAR is not set
# CONFIG_BACKLIGHT_MBP_NVIDIA is not set
+++++ ++# CONFIG_BACKLIGHT_SAHARA is not set
#
# Display device support
# CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_SOUND=y
+++++ ++CONFIG_SOUND_OSS_CORE=y
CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_HWDEP=y
+++++ ++CONFIG_SND_JACK=y
CONFIG_SND_SEQUENCER=y
CONFIG_SND_SEQ_DUMMY=y
CONFIG_SND_OSSEMUL=y
CONFIG_SND_PCM_OSS=y
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_SEQUENCER_OSS=y
+++++ ++CONFIG_SND_HRTIMER=y
+++++ ++CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_FM801 is not set
CONFIG_SND_HDA_INTEL=y
CONFIG_SND_HDA_HWDEP=y
+++++ ++# CONFIG_SND_HDA_RECONFIG is not set
+++++ ++# CONFIG_SND_HDA_INPUT_BEEP is not set
CONFIG_SND_HDA_CODEC_REALTEK=y
CONFIG_SND_HDA_CODEC_ANALOG=y
CONFIG_SND_HDA_CODEC_SIGMATEL=y
CONFIG_SND_HDA_CODEC_VIA=y
CONFIG_SND_HDA_CODEC_ATIHDMI=y
+++++ ++CONFIG_SND_HDA_CODEC_NVHDMI=y
+++++ ++CONFIG_SND_HDA_CODEC_INTELHDMI=y
+++++ ++CONFIG_SND_HDA_ELD=y
CONFIG_SND_HDA_CODEC_CONEXANT=y
CONFIG_SND_HDA_CODEC_CMEDIA=y
CONFIG_SND_HDA_CODEC_SI3054=y
# CONFIG_SND_USB_AUDIO is not set
# CONFIG_SND_USB_USX2Y is not set
# CONFIG_SND_USB_CAIAQ is not set
+++++ ++# CONFIG_SND_USB_US122L is not set
CONFIG_SND_PCMCIA=y
# CONFIG_SND_VXPOCKET is not set
# CONFIG_SND_PDAUDIOCF is not set
# USB Input Devices
#
CONFIG_USB_HID=y
----- --CONFIG_USB_HIDINPUT_POWERBOOK=y
----- --CONFIG_HID_FF=y
CONFIG_HID_PID=y
+++++ ++CONFIG_USB_HIDDEV=y
+++++ ++
+++++ ++#
+++++ ++# Special HID drivers
+++++ ++#
+++++ ++CONFIG_HID_COMPAT=y
+++++ ++CONFIG_HID_A4TECH=y
+++++ ++CONFIG_HID_APPLE=y
+++++ ++CONFIG_HID_BELKIN=y
+++++ ++CONFIG_HID_CHERRY=y
+++++ ++CONFIG_HID_CHICONY=y
+++++ ++CONFIG_HID_CYPRESS=y
+++++ ++CONFIG_HID_EZKEY=y
+++++ ++CONFIG_HID_GYRATION=y
+++++ ++CONFIG_HID_LOGITECH=y
CONFIG_LOGITECH_FF=y
# CONFIG_LOGIRUMBLEPAD2_FF is not set
+++++ ++CONFIG_HID_MICROSOFT=y
+++++ ++CONFIG_HID_MONTEREY=y
+++++ ++CONFIG_HID_NTRIG=y
+++++ ++CONFIG_HID_PANTHERLORD=y
CONFIG_PANTHERLORD_FF=y
+++++ ++CONFIG_HID_PETALYNX=y
+++++ ++CONFIG_HID_SAMSUNG=y
+++++ ++CONFIG_HID_SONY=y
+++++ ++CONFIG_HID_SUNPLUS=y
+++++ ++# CONFIG_GREENASIA_FF is not set
+++++ ++CONFIG_HID_TOPSEED=y
CONFIG_THRUSTMASTER_FF=y
CONFIG_ZEROPLUS_FF=y
----- --CONFIG_USB_HIDDEV=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_SUSPEND=y
# CONFIG_USB_OTG is not set
CONFIG_USB_MON=y
+++++ ++# CONFIG_USB_WUSB is not set
+++++ ++# CONFIG_USB_WUSB_CBAF is not set
#
# USB Host Controller Drivers
CONFIG_USB_EHCI_HCD=y
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+++++ ++# CONFIG_USB_OXU210HP_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1760_HCD is not set
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_UHCI_HCD=y
# CONFIG_USB_SL811_HCD is not set
# CONFIG_USB_R8A66597_HCD is not set
+++++ ++# CONFIG_USB_WHCI_HCD is not set
+++++ ++# CONFIG_USB_HWA_HCD is not set
#
# USB Device Class drivers
# CONFIG_USB_ACM is not set
CONFIG_USB_PRINTER=y
# CONFIG_USB_WDM is not set
+++++ ++# CONFIG_USB_TMC is not set
#
----- --# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+++++ ++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
#
#
----- --# may also be needed; see USB_STORAGE Help for more information
+++++ ++# see USB_STORAGE Help for more information
#
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
----- --# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_USBAT is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_ALAUDA is not set
# CONFIG_USB_STORAGE_ONETOUCH is not set
# CONFIG_USB_STORAGE_KARMA is not set
----- --# CONFIG_USB_STORAGE_SIERRA is not set
# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
CONFIG_USB_LIBUSUAL=y
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_ADUTUX is not set
+++++ ++# CONFIG_USB_SEVSEG is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
# CONFIG_USB_ISIGHTFW is not set
+++++ ++# CONFIG_USB_VST is not set
# CONFIG_USB_GADGET is not set
+++++ ++
+++++ ++#
+++++ ++# OTG and related infrastructure
+++++ ++#
+++++ ++# CONFIG_UWB is not set
# CONFIG_MMC is not set
# CONFIG_MEMSTICK is not set
CONFIG_NEW_LEDS=y
#
# LED drivers
#
+++++ ++# CONFIG_LEDS_ALIX2 is not set
# CONFIG_LEDS_PCA9532 is not set
# CONFIG_LEDS_CLEVO_MAIL is not set
# CONFIG_LEDS_PCA955X is not set
CONFIG_LEDS_TRIGGERS=y
# CONFIG_LEDS_TRIGGER_TIMER is not set
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+++++ ++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
# CONFIG_ACCESSIBILITY is not set
# CONFIG_INFINIBAND is not set
# CONFIG_RTC_DRV_M41T80 is not set
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_FM3130 is not set
+++++ ++# CONFIG_RTC_DRV_RX8581 is not set
#
# SPI RTC drivers
# Platform RTC drivers
#
CONFIG_RTC_DRV_CMOS=y
+++++ ++# CONFIG_RTC_DRV_DS1286 is not set
# CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set
+++++ ++# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not set
+++++ ++# CONFIG_RTC_DRV_BQ4802 is not set
# CONFIG_RTC_DRV_V3020 is not set
#
#
# CONFIG_INTEL_IOATDMA is not set
# CONFIG_UIO is not set
+++++ ++# CONFIG_STAGING is not set
+++++ ++CONFIG_X86_PLATFORM_DEVICES=y
+++++ ++# CONFIG_ACER_WMI is not set
+++++ ++# CONFIG_ASUS_LAPTOP is not set
+++++ ++# CONFIG_FUJITSU_LAPTOP is not set
+++++ ++# CONFIG_TC1100_WMI is not set
+++++ ++# CONFIG_MSI_LAPTOP is not set
+++++ ++# CONFIG_PANASONIC_LAPTOP is not set
+++++ ++# CONFIG_COMPAL_LAPTOP is not set
+++++ ++# CONFIG_SONY_LAPTOP is not set
+++++ ++# CONFIG_THINKPAD_ACPI is not set
+++++ ++# CONFIG_INTEL_MENLOW is not set
+++++ ++CONFIG_EEEPC_LAPTOP=y
+++++ ++# CONFIG_ACPI_WMI is not set
+++++ ++# CONFIG_ACPI_ASUS is not set
+++++ ++# CONFIG_ACPI_TOSHIBA is not set
#
# Firmware Drivers
# CONFIG_DELL_RBU is not set
# CONFIG_DCDBAS is not set
CONFIG_DMIID=y
----- --CONFIG_ISCSI_IBFT_FIND=y
----- --CONFIG_ISCSI_IBFT=y
+++++ ++# CONFIG_ISCSI_IBFT_FIND is not set
#
# File systems
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
----- --# CONFIG_EXT4DEV_FS is not set
+++++ ++# CONFIG_EXT4_FS is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
+++++ ++CONFIG_FILE_LOCKING=y
# CONFIG_XFS_FS is not set
# CONFIG_OCFS2_FS is not set
+++++ ++# CONFIG_BTRFS_FS is not set
CONFIG_DNOTIFY=y
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_PRINT_QUOTA_WARNING is not set
+++++ ++CONFIG_QUOTA_TREE=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
CONFIG_QUOTACTL=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_VMCORE=y
CONFIG_PROC_SYSCTL=y
+++++ ++CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
# CONFIG_CONFIGFS_FS is not set
----- --
----- --#
----- --# Miscellaneous filesystems
----- --#
+++++ ++CONFIG_MISC_FILESYSTEMS=y
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_ECRYPT_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
+++++ ++# CONFIG_SQUASHFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_OMFS_FS is not set
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
+++++ ++# CONFIG_SUNRPC_REGISTER_V4 is not set
CONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
#
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_PRINTK_TIME=y
----- --CONFIG_ENABLE_WARN_DEPRECATED=y
+++++ ++# CONFIG_ENABLE_WARN_DEPRECATED is not set
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=2048
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_VM is not set
+++++ ++# CONFIG_DEBUG_VIRTUAL is not set
# CONFIG_DEBUG_WRITECOUNT is not set
CONFIG_DEBUG_MEMORY_INIT=y
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set
+++++ ++# CONFIG_DEBUG_NOTIFIERS is not set
+++++ ++CONFIG_ARCH_WANT_FRAME_POINTERS=y
CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
+++++ ++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
+++++ ++# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_LKDTM is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y
----- --CONFIG_HAVE_FTRACE=y
+++++ ++CONFIG_USER_STACKTRACE_SUPPORT=y
+++++ ++CONFIG_HAVE_FUNCTION_TRACER=y
+++++ ++CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+++++ ++CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
----- --# CONFIG_FTRACE is not set
+++++ ++CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+++++ ++CONFIG_HAVE_HW_BRANCH_TRACER=y
+++++ ++
+++++ ++#
+++++ ++# Tracers
+++++ ++#
+++++ ++# CONFIG_FUNCTION_TRACER is not set
# CONFIG_IRQSOFF_TRACER is not set
# CONFIG_SYSPROF_TRACER is not set
# CONFIG_SCHED_TRACER is not set
# CONFIG_CONTEXT_SWITCH_TRACER is not set
+++++ ++# CONFIG_BOOT_TRACER is not set
+++++ ++# CONFIG_TRACE_BRANCH_PROFILING is not set
+++++ ++# CONFIG_POWER_TRACER is not set
+++++ ++# CONFIG_STACK_TRACER is not set
+++++ ++# CONFIG_HW_BRANCH_TRACER is not set
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
+++++ ++# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
# CONFIG_STRICT_DEVMEM is not set
CONFIG_X86_VERBOSE_BOOTUP=y
CONFIG_EARLY_PRINTK=y
+++++ ++CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_DEBUG_STACKOVERFLOW=y
CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_PAGEALLOC is not set
CONFIG_KEYS=y
CONFIG_KEYS_DEBUG_PROC_KEYS=y
CONFIG_SECURITY=y
+++++ ++# CONFIG_SECURITYFS is not set
CONFIG_SECURITY_NETWORK=y
# CONFIG_SECURITY_NETWORK_XFRM is not set
+++++ ++# CONFIG_SECURITY_PATH is not set
CONFIG_SECURITY_FILE_CAPABILITIES=y
# CONFIG_SECURITY_ROOTPLUG is not set
CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=65536
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
----- --# CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT is not set
# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
# CONFIG_SECURITY_SMACK is not set
CONFIG_CRYPTO=y
#
# Crypto core or helper
#
+++++ ++# CONFIG_CRYPTO_FIPS is not set
CONFIG_CRYPTO_ALGAPI=y
+++++ ++CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=y
+++++ ++CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=y
+++++ ++CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
+++++ ++CONFIG_CRYPTO_HASH2=y
+++++ ++CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_MANAGER=y
+++++ ++CONFIG_CRYPTO_MANAGER2=y
# CONFIG_CRYPTO_GF128MUL is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_CRYPTD is not set
# Digest
#
# CONFIG_CRYPTO_CRC32C is not set
+++++ ++# CONFIG_CRYPTO_CRC32C_INTEL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
#
# CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_LZO is not set
+++++ ++
+++++ ++#
+++++ ++# Random Number Generation
+++++ ++#
+++++ ++# CONFIG_CRYPTO_ANSI_CPRNG is not set
CONFIG_CRYPTO_HW=y
# CONFIG_CRYPTO_DEV_PADLOCK is not set
# CONFIG_CRYPTO_DEV_GEODE is not set
CONFIG_BITREVERSE=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
+++++ ++CONFIG_GENERIC_FIND_LAST_BIT=y
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
CONFIG_CRC_T10DIF=y
#
# Automatically generated make config: don't edit
----- --# Linux kernel version: 2.6.27-rc5
----- --# Wed Sep 3 17:13:39 2008
+++++ ++# Linux kernel version: 2.6.29-rc4
+++++ ++# Thu Feb 12 12:57:29 2009
#
CONFIG_64BIT=y
# CONFIG_X86_32 is not set
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
----- --# CONFIG_GENERIC_LOCKBREAK is not set
CONFIG_GENERIC_TIME=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_BUG=y
+++++ ++CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_GENERIC_HWEIGHT=y
----- --# CONFIG_GENERIC_GPIO is not set
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
----- --# CONFIG_ARCH_HAS_ILOG2_U32 is not set
----- --# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_ARCH_HAS_CPU_RELAX=y
+++++ ++CONFIG_ARCH_HAS_DEFAULT_IDLE=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y
CONFIG_ZONE_DMA32=y
CONFIG_ARCH_POPULATES_NODE_MAP=y
CONFIG_AUDIT_ARCH=y
----- --CONFIG_ARCH_SUPPORTS_AOUT=y
CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y
CONFIG_X86_SMP=y
+++++ ++CONFIG_USE_GENERIC_SMP_HELPERS=y
CONFIG_X86_64_SMP=y
CONFIG_X86_HT=y
CONFIG_X86_BIOS_REBOOT=y
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
CONFIG_AUDIT_TREE=y
+++++ ++
+++++ ++#
+++++ ++# RCU Subsystem
+++++ ++#
+++++ ++# CONFIG_CLASSIC_RCU is not set
+++++ ++CONFIG_TREE_RCU=y
+++++ ++# CONFIG_PREEMPT_RCU is not set
+++++ ++# CONFIG_RCU_TRACE is not set
+++++ ++CONFIG_RCU_FANOUT=64
+++++ ++# CONFIG_RCU_FANOUT_EXACT is not set
+++++ ++# CONFIG_TREE_RCU_TRACE is not set
+++++ ++# CONFIG_PREEMPT_RCU_TRACE is not set
# CONFIG_IKCONFIG is not set
- CONFIG_LOG_BUF_SHIFT=17
- CONFIG_CGROUPS=y
- # CONFIG_CGROUP_DEBUG is not set
- CONFIG_CGROUP_NS=y
- # CONFIG_CGROUP_DEVICE is not set
- CONFIG_CPUSETS=y
+ CONFIG_LOG_BUF_SHIFT=18
--- - --CONFIG_CGROUPS=y
--- - --# CONFIG_CGROUP_DEBUG is not set
--- - --CONFIG_CGROUP_NS=y
--- - --# CONFIG_CGROUP_DEVICE is not set
--- - --CONFIG_CPUSETS=y
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_GROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
# CONFIG_RT_GROUP_SCHED is not set
# CONFIG_USER_SCHED is not set
CONFIG_CGROUP_SCHED=y
+++++ ++CONFIG_CGROUPS=y
+++++ ++# CONFIG_CGROUP_DEBUG is not set
+++++ ++CONFIG_CGROUP_NS=y
+++++ ++CONFIG_CGROUP_FREEZER=y
+++++ ++# CONFIG_CGROUP_DEVICE is not set
+++++ ++CONFIG_CPUSETS=y
+++++ ++CONFIG_PROC_PID_CPUSET=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_RESOURCE_COUNTERS=y
# CONFIG_CGROUP_MEM_RES_CTLR is not set
# CONFIG_SYSFS_DEPRECATED_V2 is not set
----- --CONFIG_PROC_PID_CPUSET=y
CONFIG_RELAY=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
+++++ ++CONFIG_NET_NS=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
+++++ ++CONFIG_AIO=y
CONFIG_VM_EVENT_COUNTERS=y
+++++ ++CONFIG_PCI_QUIRKS=y
CONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
CONFIG_PROFILING=y
+++++ ++CONFIG_TRACEPOINTS=y
CONFIG_MARKERS=y
# CONFIG_OPROFILE is not set
CONFIG_HAVE_OPROFILE=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
----- --# CONFIG_HAVE_ARCH_TRACEHOOK is not set
----- --# CONFIG_HAVE_DMA_ATTRS is not set
----- --CONFIG_USE_GENERIC_SMP_HELPERS=y
----- --# CONFIG_HAVE_CLK is not set
----- --CONFIG_PROC_PAGE_MONITOR=y
+++++ ++CONFIG_HAVE_ARCH_TRACEHOOK=y
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
----- --# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
----- --CONFIG_KMOD=y
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
CONFIG_BLK_DEV_IO_TRACE=y
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
----- --CONFIG_CLASSIC_RCU=y
+++++ ++CONFIG_FREEZER=y
#
# Processor type and features
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_SMP=y
+++++ ++CONFIG_SPARSE_IRQ=y
+++++ ++# CONFIG_NUMA_MIGRATE_IRQ_DESC is not set
CONFIG_X86_FIND_SMP_CONFIG=y
CONFIG_X86_MPPARSE=y
-------CONFIG_X86_PC=y
# CONFIG_X86_ELAN is not set
# CONFIG_X86_VOYAGER is not set
# CONFIG_X86_GENERICARCH is not set
# CONFIG_X86_VSMP is not set
+++++ ++CONFIG_SCHED_OMIT_FRAME_POINTER=y
# CONFIG_PARAVIRT_GUEST is not set
# CONFIG_MEMTEST is not set
# CONFIG_M386 is not set
CONFIG_X86_CMOV=y
CONFIG_X86_MINIMUM_CPU_FAMILY=64
CONFIG_X86_DEBUGCTLMSR=y
+++++ ++CONFIG_CPU_SUP_INTEL=y
+++++ ++CONFIG_CPU_SUP_AMD=y
+++++ ++CONFIG_CPU_SUP_CENTAUR_64=y
+++++ ++CONFIG_X86_DS=y
+++++ ++CONFIG_X86_PTRACE_BTS=y
CONFIG_HPET_TIMER=y
CONFIG_HPET_EMULATE_RTC=y
CONFIG_DMI=y
CONFIG_CALGARY_IOMMU=y
CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
CONFIG_AMD_IOMMU=y
+++++ ++CONFIG_AMD_IOMMU_STATS=y
CONFIG_SWIOTLB=y
CONFIG_IOMMU_HELPER=y
+++++ ++CONFIG_IOMMU_API=y
+++++ ++# CONFIG_MAXSMP is not set
CONFIG_NR_CPUS=64
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
# CONFIG_PREEMPT is not set
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
+++++ ++CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
# CONFIG_X86_MCE is not set
# CONFIG_I8K is not set
CONFIG_MICROCODE=y
+++++ ++CONFIG_MICROCODE_INTEL=y
+++++ ++CONFIG_MICROCODE_AMD=y
CONFIG_MICROCODE_OLD_INTERFACE=y
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
+++++ ++CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
+++++ ++CONFIG_DIRECT_GBPAGES=y
CONFIG_NUMA=y
CONFIG_K8_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
CONFIG_SPARSEMEM=y
CONFIG_NEED_MULTIPLE_NODES=y
CONFIG_HAVE_MEMORY_PRESENT=y
----- --# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_MIGRATION=y
----- --CONFIG_RESOURCES_64BIT=y
+++++ ++CONFIG_PHYS_ADDR_T_64BIT=y
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
+++++ ++CONFIG_UNEVICTABLE_LRU=y
+++++ ++CONFIG_X86_CHECK_BIOS_CORRUPTION=y
+++++ ++CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
+++++ ++CONFIG_X86_RESERVE_LOW_64K=y
CONFIG_MTRR=y
# CONFIG_MTRR_SANITIZER is not set
CONFIG_X86_PAT=y
CONFIG_KEXEC=y
CONFIG_CRASH_DUMP=y
CONFIG_PHYSICAL_START=0x1000000
- CONFIG_RELOCATABLE=y
+ # CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x200000
CONFIG_HOTPLUG_CPU=y
# CONFIG_COMPAT_VDSO is not set
+++++ ++# CONFIG_CMDLINE_BOOL is not set
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
#
----- --# Power management options
+++++ ++# Power management and ACPI options
#
CONFIG_ARCH_HIBERNATION_HEADER=y
CONFIG_PM=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_DOCK=y
----- --# CONFIG_ACPI_BAY is not set
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_NUMA=y
----- --# CONFIG_ACPI_WMI is not set
----- --# CONFIG_ACPI_ASUS is not set
----- --# CONFIG_ACPI_TOSHIBA is not set
# CONFIG_ACPI_CUSTOM_DSDT is not set
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
----- --CONFIG_ACPI_EC=y
# CONFIG_ACPI_PCI_SLOT is not set
----- --CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y
CONFIG_X86_PM_TIMER=y
CONFIG_ACPI_CONTAINER=y
#
# shared options
#
----- --# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
# CONFIG_X86_SPEEDSTEP_LIB is not set
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
+++++ ++#
+++++ ++# Memory power savings
+++++ ++#
+++++ ++# CONFIG_I7300_IDLE is not set
+++++ ++
#
# Bus options (PCI etc.)
#
CONFIG_PCI_MMCONFIG=y
CONFIG_PCI_DOMAINS=y
CONFIG_DMAR=y
+++++ ++# CONFIG_DMAR_DEFAULT_ON is not set
CONFIG_DMAR_GFX_WA=y
CONFIG_DMAR_FLOPPY_WA=y
+++++ ++# CONFIG_INTR_REMAP is not set
CONFIG_PCIEPORTBUS=y
# CONFIG_HOTPLUG_PCI_PCIE is not set
CONFIG_PCIEAER=y
CONFIG_PCI_MSI=y
# CONFIG_PCI_LEGACY is not set
# CONFIG_PCI_DEBUG is not set
+++++ ++# CONFIG_PCI_STUB is not set
CONFIG_HT_IRQ=y
CONFIG_ISA_DMA_API=y
CONFIG_K8_NB=y
#
CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y
+++++ ++CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
+++++ ++# CONFIG_HAVE_AOUT is not set
CONFIG_BINFMT_MISC=y
CONFIG_IA32_EMULATION=y
# CONFIG_IA32_AOUT is not set
#
# Networking options
#
+++++ ++CONFIG_COMPAT_NET_DEV_OPS=y
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="cubic"
CONFIG_TCP_MD5SIG=y
----- --# CONFIG_IP_VS is not set
CONFIG_IPV6=y
# CONFIG_IPV6_PRIVACY is not set
# CONFIG_IPV6_ROUTER_PREF is not set
CONFIG_NF_CONNTRACK_SIP=y
CONFIG_NF_CT_NETLINK=y
CONFIG_NETFILTER_XTABLES=y
+++++ ++CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
CONFIG_NETFILTER_XT_TARGET_MARK=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
CONFIG_NETFILTER_XT_TARGET_SECMARK=y
----- --CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_MARK=y
CONFIG_NETFILTER_XT_MATCH_POLICY=y
CONFIG_NETFILTER_XT_MATCH_STATE=y
+++++ ++# CONFIG_IP_VS is not set
#
# IP: Netfilter Configuration
#
+++++ ++CONFIG_NF_DEFRAG_IPV4=y
CONFIG_NF_CONNTRACK_IPV4=y
CONFIG_NF_CONNTRACK_PROC_COMPAT=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_NF_CONNTRACK_IPV6=y
CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_MATCH_IPV6HEADER=y
----- --CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_LOG=y
+++++ ++CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_MANGLE=y
# CONFIG_IP_DCCP is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
+++++ ++# CONFIG_NET_DSA is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
CONFIG_LLC=y
# CONFIG_NET_SCH_HTB is not set
# CONFIG_NET_SCH_HFSC is not set
# CONFIG_NET_SCH_PRIO is not set
+++++ ++# CONFIG_NET_SCH_MULTIQ is not set
# CONFIG_NET_SCH_RED is not set
# CONFIG_NET_SCH_SFQ is not set
# CONFIG_NET_SCH_TEQL is not set
# CONFIG_NET_SCH_GRED is not set
# CONFIG_NET_SCH_DSMARK is not set
# CONFIG_NET_SCH_NETEM is not set
+++++ ++# CONFIG_NET_SCH_DRR is not set
# CONFIG_NET_SCH_INGRESS is not set
#
# CONFIG_NET_CLS_RSVP is not set
# CONFIG_NET_CLS_RSVP6 is not set
# CONFIG_NET_CLS_FLOW is not set
+++++ ++# CONFIG_NET_CLS_CGROUP is not set
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
# CONFIG_NET_EMATCH_CMP is not set
# CONFIG_NET_ACT_NAT is not set
# CONFIG_NET_ACT_PEDIT is not set
# CONFIG_NET_ACT_SIMP is not set
+++++ ++# CONFIG_NET_ACT_SKBEDIT is not set
CONFIG_NET_SCH_FIFO=y
+++++ ++# CONFIG_DCB is not set
#
# Network testing
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_AF_RXRPC is not set
+++++ ++# CONFIG_PHONET is not set
CONFIG_FIB_RULES=y
----- --
----- --#
----- --# Wireless
----- --#
+++++ ++CONFIG_WIRELESS=y
CONFIG_CFG80211=y
+++++ ++# CONFIG_CFG80211_REG_DEBUG is not set
CONFIG_NL80211=y
+++++ ++CONFIG_WIRELESS_OLD_REGULATORY=y
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
+++++ ++# CONFIG_LIB80211 is not set
CONFIG_MAC80211=y
#
# Rate control algorithm selection
#
----- --CONFIG_MAC80211_RC_PID=y
----- --CONFIG_MAC80211_RC_DEFAULT_PID=y
----- --CONFIG_MAC80211_RC_DEFAULT="pid"
+++++ ++CONFIG_MAC80211_RC_MINSTREL=y
+++++ ++# CONFIG_MAC80211_RC_DEFAULT_PID is not set
+++++ ++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+++++ ++CONFIG_MAC80211_RC_DEFAULT="minstrel"
# CONFIG_MAC80211_MESH is not set
CONFIG_MAC80211_LEDS=y
# CONFIG_MAC80211_DEBUGFS is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
----- --# CONFIG_IEEE80211 is not set
----- --# CONFIG_RFKILL is not set
+++++ ++# CONFIG_WIMAX is not set
+++++ ++CONFIG_RFKILL=y
+++++ ++# CONFIG_RFKILL_INPUT is not set
+++++ ++CONFIG_RFKILL_LEDS=y
# CONFIG_NET_9P is not set
#
# CONFIG_MTD is not set
# CONFIG_PARPORT is not set
CONFIG_PNP=y
----- --# CONFIG_PNP_DEBUG is not set
+++++ ++CONFIG_PNP_DEBUG_MESSAGES=y
#
# Protocols
CONFIG_MISC_DEVICES=y
# CONFIG_IBM_ASM is not set
# CONFIG_PHANTOM is not set
----- --# CONFIG_EEPROM_93CX6 is not set
# CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set
----- --# CONFIG_ACER_WMI is not set
----- --# CONFIG_ASUS_LAPTOP is not set
----- --# CONFIG_FUJITSU_LAPTOP is not set
----- --# CONFIG_MSI_LAPTOP is not set
----- --# CONFIG_COMPAL_LAPTOP is not set
----- --# CONFIG_SONY_LAPTOP is not set
----- --# CONFIG_THINKPAD_ACPI is not set
----- --# CONFIG_INTEL_MENLOW is not set
+++++ ++# CONFIG_ICS932S401 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_SGI_XP is not set
# CONFIG_HP_ILO is not set
# CONFIG_SGI_GRU is not set
+++++ ++# CONFIG_C2PORT is not set
+++++ ++
+++++ ++#
+++++ ++# EEPROM support
+++++ ++#
+++++ ++# CONFIG_EEPROM_AT24 is not set
+++++ ++# CONFIG_EEPROM_LEGACY is not set
+++++ ++# CONFIG_EEPROM_93CX6 is not set
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
#
CONFIG_SCSI_SPI_ATTRS=y
# CONFIG_SCSI_FC_ATTRS is not set
----- --CONFIG_SCSI_ISCSI_ATTRS=y
+++++ ++# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
CONFIG_PATA_SCH=y
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
+++++ ++CONFIG_MD_AUTODETECT=y
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
# CONFIG_MD_RAID1 is not set
# CONFIG_BROADCOM_PHY is not set
# CONFIG_ICPLUS_PHY is not set
# CONFIG_REALTEK_PHY is not set
+++++ ++# CONFIG_NATIONAL_PHY is not set
+++++ ++# CONFIG_STE10XP is not set
+++++ ++# CONFIG_LSI_ET1011C_PHY is not set
# CONFIG_FIXED_PHY is not set
# CONFIG_MDIO_BITBANG is not set
CONFIG_NET_ETHERNET=y
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+++++ ++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+++++ ++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+++++ ++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set
# CONFIG_AMD8111_ETH is not set
# CONFIG_B44 is not set
CONFIG_FORCEDETH=y
# CONFIG_FORCEDETH_NAPI is not set
----- --# CONFIG_EEPRO100 is not set
CONFIG_E100=y
# CONFIG_FEALNX is not set
# CONFIG_NATSEMI is not set
# CONFIG_R6040 is not set
# CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set
+++++ ++# CONFIG_SMSC9420 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_SC92031 is not set
+++++ ++# CONFIG_ATL2 is not set
CONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
CONFIG_E1000=y
----- --# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
# CONFIG_E1000E is not set
# CONFIG_IP1000 is not set
# CONFIG_IGB is not set
# CONFIG_QLA3XXX is not set
# CONFIG_ATL1 is not set
# CONFIG_ATL1E is not set
+++++ ++# CONFIG_JME is not set
CONFIG_NETDEV_10000=y
# CONFIG_CHELSIO_T1 is not set
+++++ ++CONFIG_CHELSIO_T3_DEPENDS=y
# CONFIG_CHELSIO_T3 is not set
+++++ ++# CONFIG_ENIC is not set
# CONFIG_IXGBE is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set
# CONFIG_MYRI10GE is not set
# CONFIG_NETXEN_NIC is not set
# CONFIG_NIU is not set
+++++ ++# CONFIG_MLX4_EN is not set
# CONFIG_MLX4_CORE is not set
# CONFIG_TEHUTI is not set
# CONFIG_BNX2X is not set
+++++ ++# CONFIG_QLGE is not set
# CONFIG_SFC is not set
CONFIG_TR=y
# CONFIG_IBMOL is not set
# CONFIG_WLAN_PRE80211 is not set
CONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
----- --# CONFIG_IPW2100 is not set
----- --# CONFIG_IPW2200 is not set
# CONFIG_LIBERTAS is not set
+++++ ++# CONFIG_LIBERTAS_THINFIRM is not set
# CONFIG_AIRO is not set
# CONFIG_HERMES is not set
# CONFIG_ATMEL is not set
CONFIG_ATH5K=y
# CONFIG_ATH5K_DEBUG is not set
# CONFIG_ATH9K is not set
+++++ ++# CONFIG_IPW2100 is not set
+++++ ++# CONFIG_IPW2200 is not set
# CONFIG_IWLCORE is not set
# CONFIG_IWLWIFI_LEDS is not set
# CONFIG_IWLAGN is not set
# CONFIG_ZD1211RW is not set
# CONFIG_RT2X00 is not set
+++++ ++#
+++++ ++# Enable WiMAX (Networking options) to see the WiMAX drivers
+++++ ++#
+++++ ++
#
# USB Network Adapters
#
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
+++++ ++# CONFIG_USB_HSO is not set
CONFIG_NET_PCMCIA=y
# CONFIG_PCMCIA_3C589 is not set
# CONFIG_PCMCIA_3C574 is not set
# CONFIG_PCMCIA_SMC91C92 is not set
# CONFIG_PCMCIA_XIRC2PS is not set
# CONFIG_PCMCIA_AXNET is not set
+++++ ++# CONFIG_PCMCIA_IBMTR is not set
# CONFIG_WAN is not set
CONFIG_FDDI=y
# CONFIG_DEFXX is not set
CONFIG_MOUSE_PS2_SYNAPTICS=y
CONFIG_MOUSE_PS2_LIFEBOOK=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
+++++ ++# CONFIG_MOUSE_PS2_ELANTECH is not set
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_APPLETOUCH is not set
# CONFIG_TOUCHSCREEN_FUJITSU is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_ELO is not set
+++++ ++# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_INEXIO is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
----- --# CONFIG_TOUCHSCREEN_UCB1400 is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+++++ ++# CONFIG_TOUCHSCREEN_TSC2007 is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_PCSPKR is not set
# CONFIG_INPUT_APANEL is not set
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not set
+++++ ++# CONFIG_INPUT_CM109 is not set
# CONFIG_INPUT_UINPUT is not set
#
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_UNIX98_PTYS=y
+++++ ++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
CONFIG_HW_RANDOM=y
CONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_CHARDEV is not set
CONFIG_I2C_HELPER_AUTO=y
+++++ ++CONFIG_I2C_ALGOBIT=y
#
# I2C Hardware Bus support
# Miscellaneous I2C Chip support
#
# CONFIG_DS1682 is not set
-- --# CONFIG_EEPROM_AT24 is not set
-- --# CONFIG_EEPROM_LEGACY is not set
--- # CONFIG_AT24 is not set
--- # CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
# CONFIG_BATTERY_DS2760 is not set
----- --# CONFIG_HWMON is not set
+++++ ++# CONFIG_BATTERY_BQ27x00 is not set
+++++ ++CONFIG_HWMON=y
+++++ ++# CONFIG_HWMON_VID is not set
+++++ ++# CONFIG_SENSORS_ABITUGURU is not set
+++++ ++# CONFIG_SENSORS_ABITUGURU3 is not set
+++++ ++# CONFIG_SENSORS_AD7414 is not set
+++++ ++# CONFIG_SENSORS_AD7418 is not set
+++++ ++# CONFIG_SENSORS_ADM1021 is not set
+++++ ++# CONFIG_SENSORS_ADM1025 is not set
+++++ ++# CONFIG_SENSORS_ADM1026 is not set
+++++ ++# CONFIG_SENSORS_ADM1029 is not set
+++++ ++# CONFIG_SENSORS_ADM1031 is not set
+++++ ++# CONFIG_SENSORS_ADM9240 is not set
+++++ ++# CONFIG_SENSORS_ADT7462 is not set
+++++ ++# CONFIG_SENSORS_ADT7470 is not set
+++++ ++# CONFIG_SENSORS_ADT7473 is not set
+++++ ++# CONFIG_SENSORS_ADT7475 is not set
+++++ ++# CONFIG_SENSORS_K8TEMP is not set
+++++ ++# CONFIG_SENSORS_ASB100 is not set
+++++ ++# CONFIG_SENSORS_ATXP1 is not set
+++++ ++# CONFIG_SENSORS_DS1621 is not set
+++++ ++# CONFIG_SENSORS_I5K_AMB is not set
+++++ ++# CONFIG_SENSORS_F71805F is not set
+++++ ++# CONFIG_SENSORS_F71882FG is not set
+++++ ++# CONFIG_SENSORS_F75375S is not set
+++++ ++# CONFIG_SENSORS_FSCHER is not set
+++++ ++# CONFIG_SENSORS_FSCPOS is not set
+++++ ++# CONFIG_SENSORS_FSCHMD is not set
+++++ ++# CONFIG_SENSORS_GL518SM is not set
+++++ ++# CONFIG_SENSORS_GL520SM is not set
+++++ ++# CONFIG_SENSORS_CORETEMP is not set
+++++ ++# CONFIG_SENSORS_IT87 is not set
+++++ ++# CONFIG_SENSORS_LM63 is not set
+++++ ++# CONFIG_SENSORS_LM75 is not set
+++++ ++# CONFIG_SENSORS_LM77 is not set
+++++ ++# CONFIG_SENSORS_LM78 is not set
+++++ ++# CONFIG_SENSORS_LM80 is not set
+++++ ++# CONFIG_SENSORS_LM83 is not set
+++++ ++# CONFIG_SENSORS_LM85 is not set
+++++ ++# CONFIG_SENSORS_LM87 is not set
+++++ ++# CONFIG_SENSORS_LM90 is not set
+++++ ++# CONFIG_SENSORS_LM92 is not set
+++++ ++# CONFIG_SENSORS_LM93 is not set
+++++ ++# CONFIG_SENSORS_LTC4245 is not set
+++++ ++# CONFIG_SENSORS_MAX1619 is not set
+++++ ++# CONFIG_SENSORS_MAX6650 is not set
+++++ ++# CONFIG_SENSORS_PC87360 is not set
+++++ ++# CONFIG_SENSORS_PC87427 is not set
+++++ ++# CONFIG_SENSORS_SIS5595 is not set
+++++ ++# CONFIG_SENSORS_DME1737 is not set
+++++ ++# CONFIG_SENSORS_SMSC47M1 is not set
+++++ ++# CONFIG_SENSORS_SMSC47M192 is not set
+++++ ++# CONFIG_SENSORS_SMSC47B397 is not set
+++++ ++# CONFIG_SENSORS_ADS7828 is not set
+++++ ++# CONFIG_SENSORS_THMC50 is not set
+++++ ++# CONFIG_SENSORS_VIA686A is not set
+++++ ++# CONFIG_SENSORS_VT1211 is not set
+++++ ++# CONFIG_SENSORS_VT8231 is not set
+++++ ++# CONFIG_SENSORS_W83781D is not set
+++++ ++# CONFIG_SENSORS_W83791D is not set
+++++ ++# CONFIG_SENSORS_W83792D is not set
+++++ ++# CONFIG_SENSORS_W83793 is not set
+++++ ++# CONFIG_SENSORS_W83L785TS is not set
+++++ ++# CONFIG_SENSORS_W83L786NG is not set
+++++ ++# CONFIG_SENSORS_W83627HF is not set
+++++ ++# CONFIG_SENSORS_W83627EHF is not set
+++++ ++# CONFIG_SENSORS_HDAPS is not set
+++++ ++# CONFIG_SENSORS_LIS3LV02D is not set
+++++ ++# CONFIG_SENSORS_APPLESMC is not set
+++++ ++# CONFIG_HWMON_DEBUG_CHIP is not set
CONFIG_THERMAL=y
+++++ ++# CONFIG_THERMAL_HWMON is not set
CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
# CONFIG_I6300ESB_WDT is not set
# CONFIG_ITCO_WDT is not set
# CONFIG_IT8712F_WDT is not set
+++++ ++# CONFIG_IT87_WDT is not set
# CONFIG_HP_WATCHDOG is not set
# CONFIG_SC1200_WDT is not set
# CONFIG_PC87413_WDT is not set
# CONFIG_60XX_WDT is not set
# CONFIG_SBC8360_WDT is not set
# CONFIG_CPU5_WDT is not set
+++++ ++# CONFIG_SMSC_SCH311X_WDT is not set
# CONFIG_SMSC37B787_WDT is not set
# CONFIG_W83627HF_WDT is not set
# CONFIG_W83697HF_WDT is not set
+++++ ++# CONFIG_W83697UG_WDT is not set
# CONFIG_W83877F_WDT is not set
# CONFIG_W83977F_WDT is not set
# CONFIG_MACHZ_WDT is not set
# USB-based Watchdog Cards
#
# CONFIG_USBPCWATCHDOG is not set
+++++ ++CONFIG_SSB_POSSIBLE=y
#
# Sonics Silicon Backplane
#
----- --CONFIG_SSB_POSSIBLE=y
# CONFIG_SSB is not set
#
# CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_HTC_PASIC3 is not set
+++++ ++# CONFIG_TWL4030_CORE is not set
# CONFIG_MFD_TMIO is not set
+++++ ++# CONFIG_PMIC_DA903X is not set
+++++ ++# CONFIG_MFD_WM8400 is not set
+++++ ++# CONFIG_MFD_WM8350_I2C is not set
+++++ ++# CONFIG_MFD_PCF50633 is not set
+++++ ++# CONFIG_REGULATOR is not set
#
# Multimedia devices
# CONFIG_DRM_I810 is not set
# CONFIG_DRM_I830 is not set
CONFIG_DRM_I915=y
+++++ ++CONFIG_DRM_I915_KMS=y
# CONFIG_DRM_MGA is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_VIA is not set
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
+++++ ++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_UVESA is not set
# CONFIG_FB_VESA is not set
CONFIG_FB_EFI=y
----- --# CONFIG_FB_IMAC is not set
# CONFIG_FB_N411 is not set
# CONFIG_FB_HGA is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not set
# CONFIG_FB_SIS is not set
+++++ ++# CONFIG_FB_VIA is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_CARMINE is not set
# CONFIG_FB_GEODE is not set
# CONFIG_FB_VIRTUAL is not set
+++++ ++# CONFIG_FB_METRONOME is not set
+++++ ++# CONFIG_FB_MB862XX is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
# CONFIG_LCD_CLASS_DEVICE is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y
----- --# CONFIG_BACKLIGHT_CORGI is not set
+++++ ++CONFIG_BACKLIGHT_GENERIC=y
# CONFIG_BACKLIGHT_PROGEAR is not set
# CONFIG_BACKLIGHT_MBP_NVIDIA is not set
+++++ ++# CONFIG_BACKLIGHT_SAHARA is not set
#
# Display device support
# CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_SOUND=y
+++++ ++CONFIG_SOUND_OSS_CORE=y
CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_HWDEP=y
+++++ ++CONFIG_SND_JACK=y
CONFIG_SND_SEQUENCER=y
CONFIG_SND_SEQ_DUMMY=y
CONFIG_SND_OSSEMUL=y
CONFIG_SND_PCM_OSS=y
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_SEQUENCER_OSS=y
+++++ ++CONFIG_SND_HRTIMER=y
+++++ ++CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_FM801 is not set
CONFIG_SND_HDA_INTEL=y
CONFIG_SND_HDA_HWDEP=y
+++++ ++# CONFIG_SND_HDA_RECONFIG is not set
+++++ ++# CONFIG_SND_HDA_INPUT_BEEP is not set
CONFIG_SND_HDA_CODEC_REALTEK=y
CONFIG_SND_HDA_CODEC_ANALOG=y
CONFIG_SND_HDA_CODEC_SIGMATEL=y
CONFIG_SND_HDA_CODEC_VIA=y
CONFIG_SND_HDA_CODEC_ATIHDMI=y
+++++ ++CONFIG_SND_HDA_CODEC_NVHDMI=y
+++++ ++CONFIG_SND_HDA_CODEC_INTELHDMI=y
+++++ ++CONFIG_SND_HDA_ELD=y
CONFIG_SND_HDA_CODEC_CONEXANT=y
CONFIG_SND_HDA_CODEC_CMEDIA=y
CONFIG_SND_HDA_CODEC_SI3054=y
# CONFIG_SND_USB_AUDIO is not set
# CONFIG_SND_USB_USX2Y is not set
# CONFIG_SND_USB_CAIAQ is not set
+++++ ++# CONFIG_SND_USB_US122L is not set
CONFIG_SND_PCMCIA=y
# CONFIG_SND_VXPOCKET is not set
# CONFIG_SND_PDAUDIOCF is not set
# USB Input Devices
#
CONFIG_USB_HID=y
----- --CONFIG_USB_HIDINPUT_POWERBOOK=y
----- --CONFIG_HID_FF=y
CONFIG_HID_PID=y
+++++ ++CONFIG_USB_HIDDEV=y
+++++ ++
+++++ ++#
+++++ ++# Special HID drivers
+++++ ++#
+++++ ++CONFIG_HID_COMPAT=y
+++++ ++CONFIG_HID_A4TECH=y
+++++ ++CONFIG_HID_APPLE=y
+++++ ++CONFIG_HID_BELKIN=y
+++++ ++CONFIG_HID_CHERRY=y
+++++ ++CONFIG_HID_CHICONY=y
+++++ ++CONFIG_HID_CYPRESS=y
+++++ ++CONFIG_HID_EZKEY=y
+++++ ++CONFIG_HID_GYRATION=y
+++++ ++CONFIG_HID_LOGITECH=y
CONFIG_LOGITECH_FF=y
# CONFIG_LOGIRUMBLEPAD2_FF is not set
+++++ ++CONFIG_HID_MICROSOFT=y
+++++ ++CONFIG_HID_MONTEREY=y
+++++ ++CONFIG_HID_NTRIG=y
+++++ ++CONFIG_HID_PANTHERLORD=y
CONFIG_PANTHERLORD_FF=y
+++++ ++CONFIG_HID_PETALYNX=y
+++++ ++CONFIG_HID_SAMSUNG=y
+++++ ++CONFIG_HID_SONY=y
+++++ ++CONFIG_HID_SUNPLUS=y
+++++ ++# CONFIG_GREENASIA_FF is not set
+++++ ++CONFIG_HID_TOPSEED=y
CONFIG_THRUSTMASTER_FF=y
CONFIG_ZEROPLUS_FF=y
----- --CONFIG_USB_HIDDEV=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_SUSPEND=y
# CONFIG_USB_OTG is not set
CONFIG_USB_MON=y
+++++ ++# CONFIG_USB_WUSB is not set
+++++ ++# CONFIG_USB_WUSB_CBAF is not set
#
# USB Host Controller Drivers
CONFIG_USB_EHCI_HCD=y
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+++++ ++# CONFIG_USB_OXU210HP_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1760_HCD is not set
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_UHCI_HCD=y
# CONFIG_USB_SL811_HCD is not set
# CONFIG_USB_R8A66597_HCD is not set
+++++ ++# CONFIG_USB_WHCI_HCD is not set
+++++ ++# CONFIG_USB_HWA_HCD is not set
#
# USB Device Class drivers
# CONFIG_USB_ACM is not set
CONFIG_USB_PRINTER=y
# CONFIG_USB_WDM is not set
+++++ ++# CONFIG_USB_TMC is not set
#
----- --# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+++++ ++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
#
#
----- --# may also be needed; see USB_STORAGE Help for more information
+++++ ++# see USB_STORAGE Help for more information
#
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
----- --# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_USBAT is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_ALAUDA is not set
# CONFIG_USB_STORAGE_ONETOUCH is not set
# CONFIG_USB_STORAGE_KARMA is not set
----- --# CONFIG_USB_STORAGE_SIERRA is not set
# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
CONFIG_USB_LIBUSUAL=y
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_ADUTUX is not set
+++++ ++# CONFIG_USB_SEVSEG is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
# CONFIG_USB_ISIGHTFW is not set
+++++ ++# CONFIG_USB_VST is not set
# CONFIG_USB_GADGET is not set
+++++ ++
+++++ ++#
+++++ ++# OTG and related infrastructure
+++++ ++#
+++++ ++# CONFIG_UWB is not set
# CONFIG_MMC is not set
# CONFIG_MEMSTICK is not set
CONFIG_NEW_LEDS=y
#
# LED drivers
#
+++++ ++# CONFIG_LEDS_ALIX2 is not set
# CONFIG_LEDS_PCA9532 is not set
# CONFIG_LEDS_CLEVO_MAIL is not set
# CONFIG_LEDS_PCA955X is not set
CONFIG_LEDS_TRIGGERS=y
# CONFIG_LEDS_TRIGGER_TIMER is not set
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+++++ ++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
# CONFIG_ACCESSIBILITY is not set
# CONFIG_INFINIBAND is not set
# CONFIG_RTC_DRV_M41T80 is not set
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_FM3130 is not set
+++++ ++# CONFIG_RTC_DRV_RX8581 is not set
#
# SPI RTC drivers
# Platform RTC drivers
#
CONFIG_RTC_DRV_CMOS=y
+++++ ++# CONFIG_RTC_DRV_DS1286 is not set
# CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set
+++++ ++# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not set
+++++ ++# CONFIG_RTC_DRV_BQ4802 is not set
# CONFIG_RTC_DRV_V3020 is not set
#
#
# CONFIG_INTEL_IOATDMA is not set
# CONFIG_UIO is not set
+++++ ++# CONFIG_STAGING is not set
+++++ ++CONFIG_X86_PLATFORM_DEVICES=y
+++++ ++# CONFIG_ACER_WMI is not set
+++++ ++# CONFIG_ASUS_LAPTOP is not set
+++++ ++# CONFIG_FUJITSU_LAPTOP is not set
+++++ ++# CONFIG_MSI_LAPTOP is not set
+++++ ++# CONFIG_PANASONIC_LAPTOP is not set
+++++ ++# CONFIG_COMPAL_LAPTOP is not set
+++++ ++# CONFIG_SONY_LAPTOP is not set
+++++ ++# CONFIG_THINKPAD_ACPI is not set
+++++ ++# CONFIG_INTEL_MENLOW is not set
+++++ ++CONFIG_EEEPC_LAPTOP=y
+++++ ++# CONFIG_ACPI_WMI is not set
+++++ ++# CONFIG_ACPI_ASUS is not set
+++++ ++# CONFIG_ACPI_TOSHIBA is not set
#
# Firmware Drivers
# CONFIG_DELL_RBU is not set
# CONFIG_DCDBAS is not set
CONFIG_DMIID=y
----- --CONFIG_ISCSI_IBFT_FIND=y
----- --CONFIG_ISCSI_IBFT=y
+++++ ++# CONFIG_ISCSI_IBFT_FIND is not set
#
# File systems
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
----- --# CONFIG_EXT4DEV_FS is not set
+++++ ++# CONFIG_EXT4_FS is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
+++++ ++CONFIG_FILE_LOCKING=y
# CONFIG_XFS_FS is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
+++++ ++# CONFIG_BTRFS_FS is not set
CONFIG_DNOTIFY=y
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_PRINT_QUOTA_WARNING is not set
+++++ ++CONFIG_QUOTA_TREE=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
CONFIG_QUOTACTL=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_VMCORE=y
CONFIG_PROC_SYSCTL=y
+++++ ++CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
# CONFIG_CONFIGFS_FS is not set
----- --
----- --#
----- --# Miscellaneous filesystems
----- --#
+++++ ++CONFIG_MISC_FILESYSTEMS=y
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_ECRYPT_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
+++++ ++# CONFIG_SQUASHFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_OMFS_FS is not set
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
+++++ ++# CONFIG_SUNRPC_REGISTER_V4 is not set
CONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
#
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_PRINTK_TIME=y
----- --CONFIG_ENABLE_WARN_DEPRECATED=y
+++++ ++# CONFIG_ENABLE_WARN_DEPRECATED is not set
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=2048
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_VM is not set
+++++ ++# CONFIG_DEBUG_VIRTUAL is not set
# CONFIG_DEBUG_WRITECOUNT is not set
CONFIG_DEBUG_MEMORY_INIT=y
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set
+++++ ++# CONFIG_DEBUG_NOTIFIERS is not set
+++++ ++CONFIG_ARCH_WANT_FRAME_POINTERS=y
CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
+++++ ++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
+++++ ++# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_LKDTM is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y
----- --CONFIG_HAVE_FTRACE=y
+++++ ++CONFIG_USER_STACKTRACE_SUPPORT=y
+++++ ++CONFIG_HAVE_FUNCTION_TRACER=y
+++++ ++CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+++++ ++CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
----- --# CONFIG_FTRACE is not set
+++++ ++CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+++++ ++CONFIG_HAVE_HW_BRANCH_TRACER=y
+++++ ++
+++++ ++#
+++++ ++# Tracers
+++++ ++#
+++++ ++# CONFIG_FUNCTION_TRACER is not set
# CONFIG_IRQSOFF_TRACER is not set
# CONFIG_SYSPROF_TRACER is not set
# CONFIG_SCHED_TRACER is not set
# CONFIG_CONTEXT_SWITCH_TRACER is not set
+++++ ++# CONFIG_BOOT_TRACER is not set
+++++ ++# CONFIG_TRACE_BRANCH_PROFILING is not set
+++++ ++# CONFIG_POWER_TRACER is not set
+++++ ++# CONFIG_STACK_TRACER is not set
+++++ ++# CONFIG_HW_BRANCH_TRACER is not set
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
+++++ ++# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
# CONFIG_STRICT_DEVMEM is not set
CONFIG_X86_VERBOSE_BOOTUP=y
CONFIG_EARLY_PRINTK=y
+++++ ++CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_DEBUG_STACKOVERFLOW=y
CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_DEBUG_PER_CPU_MAPS is not set
# CONFIG_X86_PTDUMP is not set
CONFIG_DEBUG_RODATA=y
----- --# CONFIG_DIRECT_GBPAGES is not set
# CONFIG_DEBUG_RODATA_TEST is not set
CONFIG_DEBUG_NX_TEST=m
# CONFIG_IOMMU_DEBUG is not set
CONFIG_KEYS=y
CONFIG_KEYS_DEBUG_PROC_KEYS=y
CONFIG_SECURITY=y
+++++ ++# CONFIG_SECURITYFS is not set
CONFIG_SECURITY_NETWORK=y
# CONFIG_SECURITY_NETWORK_XFRM is not set
+++++ ++# CONFIG_SECURITY_PATH is not set
CONFIG_SECURITY_FILE_CAPABILITIES=y
# CONFIG_SECURITY_ROOTPLUG is not set
CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=65536
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
----- --# CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT is not set
# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
# CONFIG_SECURITY_SMACK is not set
CONFIG_CRYPTO=y
#
# Crypto core or helper
#
+++++ ++# CONFIG_CRYPTO_FIPS is not set
CONFIG_CRYPTO_ALGAPI=y
+++++ ++CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=y
+++++ ++CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=y
+++++ ++CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
+++++ ++CONFIG_CRYPTO_HASH2=y
+++++ ++CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_MANAGER=y
+++++ ++CONFIG_CRYPTO_MANAGER2=y
# CONFIG_CRYPTO_GF128MUL is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_CRYPTD is not set
# Digest
#
# CONFIG_CRYPTO_CRC32C is not set
+++++ ++# CONFIG_CRYPTO_CRC32C_INTEL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
#
# CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_LZO is not set
+++++ ++
+++++ ++#
+++++ ++# Random Number Generation
+++++ ++#
+++++ ++# CONFIG_CRYPTO_ANSI_CPRNG is not set
CONFIG_CRYPTO_HW=y
# CONFIG_CRYPTO_DEV_HIFN_795X is not set
CONFIG_HAVE_KVM=y
CONFIG_BITREVERSE=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
+++++ ++CONFIG_GENERIC_FIND_LAST_BIT=y
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
CONFIG_CRC_T10DIF=y
#define ARCH_HAS_IOREMAP_WC
#include <linux/compiler.h>
+ #include <asm-generic/int-ll64.h>
++++++ +#include <asm/page.h>
#define build_mmio_read(name, size, type, reg, barrier) \
static inline type name(const volatile void __iomem *addr) \
#define mmiowb() barrier()
#ifdef CONFIG_X86_64
+
build_mmio_read(readq, "q", unsigned long, "=r", :"memory")
- build_mmio_read(__readq, "q", unsigned long, "=r", )
build_mmio_write(writeq, "q", unsigned long, "r", :"memory")
- build_mmio_write(__writeq, "q", unsigned long, "r", )
- #define readq_relaxed(a) __readq(a)
- #define __raw_readq __readq
- #define __raw_writeq writeq
+ #else
+
+ static inline __u64 readq(const volatile void __iomem *addr)
+ {
+ const volatile u32 __iomem *p = addr;
+ u32 low, high;
+
+ low = readl(p);
+ high = readl(p + 1);
+
+ return low + ((u64)high << 32);
+ }
+
+ static inline void writeq(__u64 val, volatile void __iomem *addr)
+ {
+ writel(val, addr);
+ writel(val >> 32, addr+4);
+ }
- /* Let people know we have them */
- #define readq readq
- #define writeq writeq
#endif
- extern int iommu_bio_merge;
+ #define readq_relaxed(a) readq(a)
+
+ #define __raw_readq(a) readq(a)
+ #define __raw_writeq(val, addr) writeq(val, addr)
+
+ /* Let people know that we have them */
+ #define readq readq
+ #define writeq writeq
+
++++++ +/**
++++++ + * virt_to_phys - map virtual addresses to physical
++++++ + * @address: address to remap
++++++ + *
++++++ + * The returned physical address is the physical (CPU) mapping for
++++++ + * the memory address given. It is only valid to use this function on
++++++ + * addresses directly mapped or allocated via kmalloc.
++++++ + *
++++++ + * This function does not give bus mappings for DMA transfers. In
++++++ + * almost all conceivable cases a device driver should not be using
++++++ + * this function
++++++ + */
++++++ +
++++++ +static inline phys_addr_t virt_to_phys(volatile void *address)
++++++ +{
++++++ + return __pa(address);
++++++ +}
++++++ +
++++++ +/**
++++++ + * phys_to_virt - map physical address to virtual
++++++ + * @address: address to remap
++++++ + *
++++++ + * The returned virtual address is a current CPU mapping for
++++++ + * the memory address given. It is only valid to use this function on
++++++ + * addresses that have a kernel mapping
++++++ + *
++++++ + * This function does not handle bus mappings for DMA transfers. In
++++++ + * almost all conceivable cases a device driver should not be using
++++++ + * this function
++++++ + */
++++++ +
++++++ +static inline void *phys_to_virt(phys_addr_t address)
++++++ +{
++++++ + return __va(address);
++++++ +}
++++++ +
++++++ +/*
++++++ + * Change "struct page" to physical address.
++++++ + */
++++++ +#define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
++++++ +
++++++ +/*
++++++ + * ISA I/O bus memory addresses are 1:1 with the physical address.
++++++ + */
++++++ +#define isa_virt_to_bus virt_to_phys
++++++ +#define isa_page_to_bus page_to_phys
++++++ +#define isa_bus_to_virt phys_to_virt
++++++ +
++++++ +/*
++++++ + * However PCI ones are not necessarily 1:1 and therefore these interfaces
++++++ + * are forbidden in portable PCI drivers.
++++++ + *
++++++ + * Allow them on x86 for legacy drivers, though.
++++++ + */
++++++ +#define virt_to_bus virt_to_phys
++++++ +#define bus_to_virt phys_to_virt
++++++ +
++++++ +/**
++++++ + * ioremap - map bus memory into CPU space
++++++ + * @offset: bus address of the memory
++++++ + * @size: size of the resource to map
++++++ + *
++++++ + * ioremap performs a platform specific sequence of operations to
++++++ + * make bus memory CPU accessible via the readb/readw/readl/writeb/
++++++ + * writew/writel functions and the other mmio helpers. The returned
++++++ + * address is not guaranteed to be usable directly as a virtual
++++++ + * address.
++++++ + *
++++++ + * If the area you are trying to map is a PCI BAR you should have a
++++++ + * look at pci_iomap().
++++++ + */
++++++ +extern void __iomem *ioremap_nocache(resource_size_t offset, unsigned long size);
++++++ +extern void __iomem *ioremap_cache(resource_size_t offset, unsigned long size);
++++++ +extern void __iomem *ioremap_prot(resource_size_t offset, unsigned long size,
++++++ + unsigned long prot_val);
++++++ +
++++++ +/*
++++++ + * The default ioremap() behavior is non-cached:
++++++ + */
++++++ +static inline void __iomem *ioremap(resource_size_t offset, unsigned long size)
++++++ +{
++++++ + return ioremap_nocache(offset, size);
++++++ +}
++++++ +
++++++ +extern void iounmap(volatile void __iomem *addr);
++++++ +
++++++ +extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys);
++++++ +
+++ ++ +
#ifdef CONFIG_X86_32
# include "io_32.h"
#else
extern int ioremap_change_attr(unsigned long vaddr, unsigned long size,
unsigned long prot_val);
-------extern void __iomem *ioremap_wc(unsigned long offset, unsigned long size);
+++++++extern void __iomem *ioremap_wc(resource_size_t offset, unsigned long size);
/*
* early_ioremap() and early_iounmap() are for temporary early boot-time
* A boot-time mapping is currently limited to at most 16 pages.
*/
extern void early_ioremap_init(void);
--- extern void early_ioremap_clear(void);
extern void early_ioremap_reset(void);
extern void __iomem *early_ioremap(unsigned long offset, unsigned long size);
extern void __iomem *early_memremap(unsigned long offset, unsigned long size);
extern void early_iounmap(void __iomem *addr, unsigned long size);
extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys);
+++++++#define IO_SPACE_LIMIT 0xffff
#endif /* _ASM_X86_IO_H */
*/
-------#define IO_SPACE_LIMIT 0xffff
-------
#define XQUAD_PORTIO_BASE 0xfe400000
#define XQUAD_PORTIO_QUAD 0x40000 /* 256k per quad. */
*/
#define xlate_dev_kmem_ptr(p) p
------ -/**
------ - * virt_to_phys - map virtual addresses to physical
------ - * @address: address to remap
------ - *
------ - * The returned physical address is the physical (CPU) mapping for
------ - * the memory address given. It is only valid to use this function on
------ - * addresses directly mapped or allocated via kmalloc.
------ - *
------ - * This function does not give bus mappings for DMA transfers. In
------ - * almost all conceivable cases a device driver should not be using
------ - * this function
------ - */
------ -
------ -static inline unsigned long virt_to_phys(volatile void *address)
------ -{
------ - return __pa(address);
------ -}
------ -
------ -/**
------ - * phys_to_virt - map physical address to virtual
------ - * @address: address to remap
------ - *
------ - * The returned virtual address is a current CPU mapping for
------ - * the memory address given. It is only valid to use this function on
------ - * addresses that have a kernel mapping
------ - *
------ - * This function does not handle bus mappings for DMA transfers. In
------ - * almost all conceivable cases a device driver should not be using
------ - * this function
------ - */
------ -
------ -static inline void *phys_to_virt(unsigned long address)
------ -{
------ - return __va(address);
------ -}
------ -
------ -/*
------ - * Change "struct page" to physical address.
------ - */
------ -#define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
------ -
------ -/**
------ - * ioremap - map bus memory into CPU space
------ - * @offset: bus address of the memory
------ - * @size: size of the resource to map
------ - *
------ - * ioremap performs a platform specific sequence of operations to
------ - * make bus memory CPU accessible via the readb/readw/readl/writeb/
------ - * writew/writel functions and the other mmio helpers. The returned
------ - * address is not guaranteed to be usable directly as a virtual
------ - * address.
------ - *
------ - * If the area you are trying to map is a PCI BAR you should have a
------ - * look at pci_iomap().
------ - */
------ -extern void __iomem *ioremap_nocache(resource_size_t offset, unsigned long size);
------ -extern void __iomem *ioremap_cache(resource_size_t offset, unsigned long size);
------ -extern void __iomem *ioremap_prot(resource_size_t offset, unsigned long size,
------ - unsigned long prot_val);
------ -
------ -/*
------ - * The default ioremap() behavior is non-cached:
------ - */
------ -static inline void __iomem *ioremap(resource_size_t offset, unsigned long size)
------ -{
------ - return ioremap_nocache(offset, size);
------ -}
------ -
------ -extern void iounmap(volatile void __iomem *addr);
------ -
------ -/*
------ - * ISA I/O bus memory addresses are 1:1 with the physical address.
------ - */
------ -#define isa_virt_to_bus virt_to_phys
------ -#define isa_page_to_bus page_to_phys
------ -#define isa_bus_to_virt phys_to_virt
------ -
------ -/*
------ - * However PCI ones are not necessarily 1:1 and therefore these interfaces
------ - * are forbidden in portable PCI drivers.
------ - *
------ - * Allow them on x86 for legacy drivers, though.
------ - */
------ -#define virt_to_bus virt_to_phys
------ -#define bus_to_virt phys_to_virt
------ -
static inline void
memset_io(volatile void __iomem *addr, unsigned char val, int count)
{
__OUTS(w)
__OUTS(l)
-------#define IO_SPACE_LIMIT 0xffff
-------
#if defined(__KERNEL__) && defined(__x86_64__)
#include <linux/vmalloc.h>
------ -#ifndef __i386__
------ -/*
------ - * Change virtual addresses to physical addresses and vv.
------ - * These are pretty trivial
------ - */
------ -static inline unsigned long virt_to_phys(volatile void *address)
------ -{
------ - return __pa(address);
------ -}
------ -
------ -static inline void *phys_to_virt(unsigned long address)
------ -{
------ - return __va(address);
------ -}
------ -#endif
------ -
------ -/*
------ - * Change "struct page" to physical address.
------ - */
------ -#define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
------ -
#include <asm-generic/iomap.h>
------ -/*
------ - * This one maps high address device memory and turns off caching for that area.
------ - * it's useful if some control registers are in such an area and write combining
------ - * or read caching is not desirable:
------ - */
------ -extern void __iomem *ioremap_nocache(resource_size_t offset, unsigned long size);
------ -extern void __iomem *ioremap_cache(resource_size_t offset, unsigned long size);
------ -extern void __iomem *ioremap_prot(resource_size_t offset, unsigned long size,
------ - unsigned long prot_val);
------ -
------ -/*
------ - * The default ioremap() behavior is non-cached:
------ - */
------ -static inline void __iomem *ioremap(resource_size_t offset, unsigned long size)
------ -{
------ - return ioremap_nocache(offset, size);
------ -}
------ -
------ -extern void iounmap(volatile void __iomem *addr);
------ -
------ -extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys);
------ -
------ -/*
------ - * ISA I/O bus memory addresses are 1:1 with the physical address.
------ - */
------ -#define isa_virt_to_bus virt_to_phys
------ -#define isa_page_to_bus page_to_phys
------ -#define isa_bus_to_virt phys_to_virt
------ -
------ -/*
------ - * However PCI ones are not necessarily 1:1 and therefore these interfaces
------ - * are forbidden in portable PCI drivers.
------ - *
------ - * Allow them on x86 for legacy drivers, though.
------ - */
------ -#define virt_to_bus virt_to_phys
------ -#define bus_to_virt phys_to_virt
------ -
void __memcpy_fromio(void *, unsigned long, unsigned);
void __memcpy_toio(unsigned long, const void *, unsigned);
#define flush_write_buffers()
- #define BIO_VMERGE_BOUNDARY iommu_bio_merge
-
/*
* Convert a virtual cached pointer to an uncached pointer
*/
return pgd.pgd;
}
++++++ +static inline pgdval_t pgd_flags(pgd_t pgd)
++++++ +{
++++++ + return native_pgd_val(pgd) & PTE_FLAGS_MASK;
++++++ +}
++++++ +
#if PAGETABLE_LEVELS >= 3
#if PAGETABLE_LEVELS == 4
typedef struct { pudval_t pud; } pud_t;
}
#endif /* PAGETABLE_LEVELS == 4 */
++++++ +static inline pudval_t pud_flags(pud_t pud)
++++++ +{
++++++ + return native_pud_val(pud) & PTE_FLAGS_MASK;
++++++ +}
++++++ +
typedef struct { pmdval_t pmd; } pmd_t;
static inline pmd_t native_make_pmd(pmdval_t val)
{
return pmd.pmd;
}
++++++ +
#else /* PAGETABLE_LEVELS == 2 */
#include <asm-generic/pgtable-nopmd.h>
}
#endif /* PAGETABLE_LEVELS >= 3 */
++++++ +static inline pmdval_t pmd_flags(pmd_t pmd)
++++++ +{
++++++ + return native_pmd_val(pmd) & PTE_FLAGS_MASK;
++++++ +}
++++++ +
static inline pte_t native_make_pte(pteval_t val)
{
return (pte_t) { .pte = val };
return pte.pte;
}
-------static inline pteval_t native_pte_flags(pte_t pte)
+++++++static inline pteval_t pte_flags(pte_t pte)
{
return native_pte_val(pte) & PTE_FLAGS_MASK;
}
#endif
#define pte_val(x) native_pte_val(x)
-------#define pte_flags(x) native_pte_flags(x)
#define __pte(x) native_make_pte(x)
#endif /* CONFIG_PARAVIRT */
#ifndef _ASM_X86_PGTABLE_H
#define _ASM_X86_PGTABLE_H
++++++ +#include <asm/page.h>
++++++ +
#define FIRST_USER_ADDRESS 0
#define _PAGE_BIT_PRESENT 0 /* is present */
#define _PAGE_BIT_PCD 4 /* page cache disabled */
#define _PAGE_BIT_ACCESSED 5 /* was accessed (raised by CPU) */
#define _PAGE_BIT_DIRTY 6 /* was written to (raised by CPU) */
- #define _PAGE_BIT_FILE 6
#define _PAGE_BIT_PSE 7 /* 4 MB (or 2MB) page */
#define _PAGE_BIT_PAT 7 /* on 4KB pages */
#define _PAGE_BIT_GLOBAL 8 /* Global TLB entry PPro+ */
#define _PAGE_BIT_CPA_TEST _PAGE_BIT_UNUSED1
#define _PAGE_BIT_NX 63 /* No execute: only valid after cpuid check */
+ /* If _PAGE_BIT_PRESENT is clear, we use these: */
+ /* - if the user mapped it with PROT_NONE; pte_present gives true */
+ #define _PAGE_BIT_PROTNONE _PAGE_BIT_GLOBAL
+ /* - set: nonlinear file mapping, saved PTE; unset:swap */
+ #define _PAGE_BIT_FILE _PAGE_BIT_DIRTY
+
#define _PAGE_PRESENT (_AT(pteval_t, 1) << _PAGE_BIT_PRESENT)
#define _PAGE_RW (_AT(pteval_t, 1) << _PAGE_BIT_RW)
#define _PAGE_USER (_AT(pteval_t, 1) << _PAGE_BIT_USER)
#define _PAGE_NX (_AT(pteval_t, 0))
#endif
- /* If _PAGE_PRESENT is clear, we use these: */
- #define _PAGE_FILE _PAGE_DIRTY /* nonlinear file mapping,
- * saved PTE; unset:swap */
- #define _PAGE_PROTNONE _PAGE_PSE /* if the user mapped it with PROT_NONE;
- pte_present gives true */
+ #define _PAGE_FILE (_AT(pteval_t, 1) << _PAGE_BIT_FILE)
+ #define _PAGE_PROTNONE (_AT(pteval_t, 1) << _PAGE_BIT_PROTNONE)
#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | \
_PAGE_ACCESSED | _PAGE_DIRTY)
#define PGD_IDENT_ATTR 0x001 /* PRESENT (no other attributes) */
#endif
+ /*
+ * Macro to mark a page protection value as UC-
+ */
+ #define pgprot_noncached(prot) \
+ ((boot_cpu_data.x86 > 3) \
+ ? (__pgprot(pgprot_val(prot) | _PAGE_CACHE_UC_MINUS)) \
+ : (prot))
+
#ifndef __ASSEMBLY__
+ #define pgprot_writecombine pgprot_writecombine
+ extern pgprot_t pgprot_writecombine(pgprot_t prot);
+
/*
* ZERO_PAGE is a global shared page that is always zero: used
* for zero-mapped memory areas etc..
static inline int pmd_large(pmd_t pte)
{
------ - return (pmd_val(pte) & (_PAGE_PSE | _PAGE_PRESENT)) ==
++++++ + return (pmd_flags(pte) & (_PAGE_PSE | _PAGE_PRESENT)) ==
(_PAGE_PSE | _PAGE_PRESENT);
}
+++++++static inline pte_t pte_set_flags(pte_t pte, pteval_t set)
+++++++{
+++++++ pteval_t v = native_pte_val(pte);
+++++++
+++++++ return native_make_pte(v | set);
+++++++}
+++++++
+++++++static inline pte_t pte_clear_flags(pte_t pte, pteval_t clear)
+++++++{
+++++++ pteval_t v = native_pte_val(pte);
+++++++
+++++++ return native_make_pte(v & ~clear);
+++++++}
+++++++
static inline pte_t pte_mkclean(pte_t pte)
{
------- return __pte(pte_val(pte) & ~_PAGE_DIRTY);
+++++++ return pte_clear_flags(pte, _PAGE_DIRTY);
}
static inline pte_t pte_mkold(pte_t pte)
{
------- return __pte(pte_val(pte) & ~_PAGE_ACCESSED);
+++++++ return pte_clear_flags(pte, _PAGE_ACCESSED);
}
static inline pte_t pte_wrprotect(pte_t pte)
{
------- return __pte(pte_val(pte) & ~_PAGE_RW);
+++++++ return pte_clear_flags(pte, _PAGE_RW);
}
static inline pte_t pte_mkexec(pte_t pte)
{
------- return __pte(pte_val(pte) & ~_PAGE_NX);
+++++++ return pte_clear_flags(pte, _PAGE_NX);
}
static inline pte_t pte_mkdirty(pte_t pte)
{
------- return __pte(pte_val(pte) | _PAGE_DIRTY);
+++++++ return pte_set_flags(pte, _PAGE_DIRTY);
}
static inline pte_t pte_mkyoung(pte_t pte)
{
------- return __pte(pte_val(pte) | _PAGE_ACCESSED);
+++++++ return pte_set_flags(pte, _PAGE_ACCESSED);
}
static inline pte_t pte_mkwrite(pte_t pte)
{
------- return __pte(pte_val(pte) | _PAGE_RW);
+++++++ return pte_set_flags(pte, _PAGE_RW);
}
static inline pte_t pte_mkhuge(pte_t pte)
{
------- return __pte(pte_val(pte) | _PAGE_PSE);
+++++++ return pte_set_flags(pte, _PAGE_PSE);
}
static inline pte_t pte_clrhuge(pte_t pte)
{
------- return __pte(pte_val(pte) & ~_PAGE_PSE);
+++++++ return pte_clear_flags(pte, _PAGE_PSE);
}
static inline pte_t pte_mkglobal(pte_t pte)
{
------- return __pte(pte_val(pte) | _PAGE_GLOBAL);
+++++++ return pte_set_flags(pte, _PAGE_GLOBAL);
}
static inline pte_t pte_clrglobal(pte_t pte)
{
------- return __pte(pte_val(pte) & ~_PAGE_GLOBAL);
+++++++ return pte_clear_flags(pte, _PAGE_GLOBAL);
}
static inline pte_t pte_mkspecial(pte_t pte)
{
------- return __pte(pte_val(pte) | _PAGE_SPECIAL);
+++++++ return pte_set_flags(pte, _PAGE_SPECIAL);
}
extern pteval_t __supported_pte_mask;
++++ ++/*
++++ ++ * Mask out unsupported bits in a present pgprot. Non-present pgprots
++++ ++ * can use those bits for other purposes, so leave them be.
++++ ++ */
++++ ++static inline pgprotval_t massage_pgprot(pgprot_t pgprot)
++++ ++{
++++ ++ pgprotval_t protval = pgprot_val(pgprot);
++++ ++
++++ ++ if (protval & _PAGE_PRESENT)
++++ ++ protval &= __supported_pte_mask;
++++ ++
++++ ++ return protval;
++++ ++}
++++ ++
static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
{
---- -- return __pte((((phys_addr_t)page_nr << PAGE_SHIFT) |
---- -- pgprot_val(pgprot)) & __supported_pte_mask);
++++ ++ return __pte(((phys_addr_t)page_nr << PAGE_SHIFT) |
++++ ++ massage_pgprot(pgprot));
}
static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
{
---- -- return __pmd((((phys_addr_t)page_nr << PAGE_SHIFT) |
---- -- pgprot_val(pgprot)) & __supported_pte_mask);
++++ ++ return __pmd(((phys_addr_t)page_nr << PAGE_SHIFT) |
++++ ++ massage_pgprot(pgprot));
}
static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
* the newprot (if present):
*/
val &= _PAGE_CHG_MASK;
---- -- val |= pgprot_val(newprot) & (~_PAGE_CHG_MASK) & __supported_pte_mask;
++++ ++ val |= massage_pgprot(newprot) & ~_PAGE_CHG_MASK;
return __pte(val);
}
#define pte_pgprot(x) __pgprot(pte_flags(x) & PTE_FLAGS_MASK)
---- --#define canon_pgprot(p) __pgprot(pgprot_val(p) & __supported_pte_mask)
++++ ++#define canon_pgprot(p) __pgprot(massage_pgprot(p))
++
++ static inline int is_new_memtype_allowed(unsigned long flags,
++ unsigned long new_flags)
++ {
++ /*
++ * Certain new memtypes are not allowed with certain
++ * requested memtype:
++ * - request is uncached, return cannot be write-back
++ * - request is write-combine, return cannot be write-back
++ */
++ if ((flags == _PAGE_CACHE_UC_MINUS &&
++ new_flags == _PAGE_CACHE_WB) ||
++ (flags == _PAGE_CACHE_WC &&
++ new_flags == _PAGE_CACHE_WB)) {
++ return 0;
++ }
++
++ return 1;
++ }
#ifndef __ASSEMBLY__
+ /* Indicate that x86 has its own track and untrack pfn vma functions */
+ #define __HAVE_PFNMAP_TRACKING
+
#define __HAVE_PHYS_MEM_ACCESS_PROT
struct file;
pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
# include "pgtable_64.h"
#endif
++++++ +#ifndef __ASSEMBLY__
++++++ +#include <linux/mm_types.h>
++++++ +
++++++ +static inline int pte_none(pte_t pte)
++++++ +{
++++++ + return !pte.pte;
++++++ +}
++++++ +
++++++ +#define __HAVE_ARCH_PTE_SAME
++++++ +static inline int pte_same(pte_t a, pte_t b)
++++++ +{
++++++ + return a.pte == b.pte;
++++++ +}
++++++ +
++++++ +static inline int pte_present(pte_t a)
++++++ +{
++++++ + return pte_flags(a) & (_PAGE_PRESENT | _PAGE_PROTNONE);
++++++ +}
++++++ +
++++++ +static inline int pmd_present(pmd_t pmd)
++++++ +{
++++++ + return pmd_flags(pmd) & _PAGE_PRESENT;
++++++ +}
++++++ +
++++++ +static inline int pmd_none(pmd_t pmd)
++++++ +{
++++++ + /* Only check low word on 32-bit platforms, since it might be
++++++ + out of sync with upper half. */
++++++ + return (unsigned long)native_pmd_val(pmd) == 0;
++++++ +}
++++++ +
++++++ +static inline unsigned long pmd_page_vaddr(pmd_t pmd)
++++++ +{
++++++ + return (unsigned long)__va(pmd_val(pmd) & PTE_PFN_MASK);
++++++ +}
++++++ +
++++++ +/*
++++++ + * Currently stuck as a macro due to indirect forward reference to
++++++ + * linux/mmzone.h's __section_mem_map_addr() definition:
++++++ + */
++++++ +#define pmd_page(pmd) pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT)
++++++ +
++++++ +/*
++++++ + * the pmd page can be thought of an array like this: pmd_t[PTRS_PER_PMD]
++++++ + *
++++++ + * this macro returns the index of the entry in the pmd page which would
++++++ + * control the given virtual address
++++++ + */
++++++ +static inline unsigned pmd_index(unsigned long address)
++++++ +{
++++++ + return (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
++++++ +}
++++++ +
++++++ +/*
++++++ + * Conversion functions: convert a page and protection to a page entry,
++++++ + * and a page entry and page directory to the page they refer to.
++++++ + *
++++++ + * (Currently stuck as a macro because of indirect forward reference
++++++ + * to linux/mm.h:page_to_nid())
++++++ + */
++++++ +#define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot))
++++++ +
++++++ +/*
++++++ + * the pte page can be thought of an array like this: pte_t[PTRS_PER_PTE]
++++++ + *
++++++ + * this function returns the index of the entry in the pte page which would
++++++ + * control the given virtual address
++++++ + */
++++++ +static inline unsigned pte_index(unsigned long address)
++++++ +{
++++++ + return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
++++++ +}
++++++ +
++++++ +static inline pte_t *pte_offset_kernel(pmd_t *pmd, unsigned long address)
++++++ +{
++++++ + return (pte_t *)pmd_page_vaddr(*pmd) + pte_index(address);
++++++ +}
++++++ +
++++++ +static inline int pmd_bad(pmd_t pmd)
++++++ +{
++++++ + return (pmd_flags(pmd) & ~_PAGE_USER) != _KERNPG_TABLE;
++++++ +}
++++++ +
++++++ +static inline unsigned long pages_to_mb(unsigned long npg)
++++++ +{
++++++ + return npg >> (20 - PAGE_SHIFT);
++++++ +}
++++++ +
++++++ +#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
++++++ + remap_pfn_range(vma, vaddr, pfn, size, prot)
++++++ +
++++++ +#if PAGETABLE_LEVELS == 2
++++++ +static inline int pud_large(pud_t pud)
++++++ +{
++++++ + return 0;
++++++ +}
++++++ +#endif
++++++ +
++++++ +#if PAGETABLE_LEVELS > 2
++++++ +static inline int pud_none(pud_t pud)
++++++ +{
++++++ + return native_pud_val(pud) == 0;
++++++ +}
++++++ +
++++++ +static inline int pud_present(pud_t pud)
++++++ +{
++++++ + return pud_flags(pud) & _PAGE_PRESENT;
++++++ +}
++++++ +
++++++ +static inline unsigned long pud_page_vaddr(pud_t pud)
++++++ +{
++++++ + return (unsigned long)__va((unsigned long)pud_val(pud) & PTE_PFN_MASK);
++++++ +}
++++++ +
++++++ +/*
++++++ + * Currently stuck as a macro due to indirect forward reference to
++++++ + * linux/mmzone.h's __section_mem_map_addr() definition:
++++++ + */
++++++ +#define pud_page(pud) pfn_to_page(pud_val(pud) >> PAGE_SHIFT)
++++++ +
++++++ +/* Find an entry in the second-level page table.. */
++++++ +static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address)
++++++ +{
++++++ + return (pmd_t *)pud_page_vaddr(*pud) + pmd_index(address);
++++++ +}
++++++ +
++++++ +static inline unsigned long pmd_pfn(pmd_t pmd)
++++++ +{
++++++ + return (pmd_val(pmd) & PTE_PFN_MASK) >> PAGE_SHIFT;
++++++ +}
++++++ +
++++++ +static inline int pud_large(pud_t pud)
++++++ +{
++++++ + return (pud_flags(pud) & (_PAGE_PSE | _PAGE_PRESENT)) ==
++++++ + (_PAGE_PSE | _PAGE_PRESENT);
++++++ +}
++++++ +
++++++ +static inline int pud_bad(pud_t pud)
++++++ +{
++++++ + return (pud_flags(pud) & ~(_KERNPG_TABLE | _PAGE_USER)) != 0;
++++++ +}
++++++ +#endif /* PAGETABLE_LEVELS > 2 */
++++++ +
++++++ +#if PAGETABLE_LEVELS > 3
++++++ +static inline int pgd_present(pgd_t pgd)
++++++ +{
++++++ + return pgd_flags(pgd) & _PAGE_PRESENT;
++++++ +}
++++++ +
++++++ +static inline unsigned long pgd_page_vaddr(pgd_t pgd)
++++++ +{
++++++ + return (unsigned long)__va((unsigned long)pgd_val(pgd) & PTE_PFN_MASK);
++++++ +}
++++++ +
++++++ +/*
++++++ + * Currently stuck as a macro due to indirect forward reference to
++++++ + * linux/mmzone.h's __section_mem_map_addr() definition:
++++++ + */
++++++ +#define pgd_page(pgd) pfn_to_page(pgd_val(pgd) >> PAGE_SHIFT)
++++++ +
++++++ +/* to find an entry in a page-table-directory. */
++++++ +static inline unsigned pud_index(unsigned long address)
++++++ +{
++++++ + return (address >> PUD_SHIFT) & (PTRS_PER_PUD - 1);
++++++ +}
++++++ +
++++++ +static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address)
++++++ +{
++++++ + return (pud_t *)pgd_page_vaddr(*pgd) + pud_index(address);
++++++ +}
++++++ +
++++++ +static inline int pgd_bad(pgd_t pgd)
++++++ +{
++++++ + return (pgd_flags(pgd) & ~_PAGE_USER) != _KERNPG_TABLE;
++++++ +}
++++++ +
++++++ +static inline int pgd_none(pgd_t pgd)
++++++ +{
++++++ + return !native_pgd_val(pgd);
++++++ +}
++++++ +#endif /* PAGETABLE_LEVELS > 3 */
++++++ +
++++++ +#endif /* __ASSEMBLY__ */
++++++ +
/*
* the pgd page can be thought of an array like this: pgd_t[PTRS_PER_PGD]
*
#include <asm/processor.h>
#include <linux/bitops.h>
#include <linux/threads.h>
-------#include <asm/pda.h>
extern pud_t level3_kernel_pgt[512];
extern pud_t level3_ident_pgt[512];
printk("%s:%d: bad pgd %p(%016lx).\n", \
__FILE__, __LINE__, &(e), pgd_val(e))
------ -#define pgd_none(x) (!pgd_val(x))
------ -#define pud_none(x) (!pud_val(x))
------ -
struct mm_struct;
void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte);
native_set_pgd(pgd, native_make_pgd(0));
}
------ -#define pte_same(a, b) ((a).pte == (b).pte)
------ -
#endif /* !__ASSEMBLY__ */
#define PMD_SIZE (_AC(1, UL) << PMD_SHIFT)
#define PGDIR_MASK (~(PGDIR_SIZE - 1))
- #define MAXMEM _AC(0x00003fffffffffff, UL)
+ #define MAXMEM _AC(__AC(1, UL) << MAX_PHYSMEM_BITS, UL)
#define VMALLOC_START _AC(0xffffc20000000000, UL)
#define VMALLOC_END _AC(0xffffe1ffffffffff, UL)
#define VMEMMAP_START _AC(0xffffe20000000000, UL)
#ifndef __ASSEMBLY__
------ -static inline int pgd_bad(pgd_t pgd)
------ -{
------ - return (pgd_val(pgd) & ~(PTE_PFN_MASK | _PAGE_USER)) != _KERNPG_TABLE;
------ -}
------ -
------ -static inline int pud_bad(pud_t pud)
------ -{
------ - return (pud_val(pud) & ~(PTE_PFN_MASK | _PAGE_USER)) != _KERNPG_TABLE;
------ -}
------ -
------ -static inline int pmd_bad(pmd_t pmd)
------ -{
------ - return (pmd_val(pmd) & ~(PTE_PFN_MASK | _PAGE_USER)) != _KERNPG_TABLE;
------ -}
------ -
------ -#define pte_none(x) (!pte_val((x)))
------ -#define pte_present(x) (pte_val((x)) & (_PAGE_PRESENT | _PAGE_PROTNONE))
------ -
------ -#define pages_to_mb(x) ((x) >> (20 - PAGE_SHIFT)) /* FIXME: is this right? */
-
- /*
- * Macro to mark a page protection value as "uncacheable".
- */
- #define pgprot_noncached(prot) \
- (__pgprot(pgprot_val((prot)) | _PAGE_PCD | _PAGE_PWT))
------ -
/*
* Conversion functions: convert a page and protection to a page entry,
* and a page entry and page directory to the page they refer to.
/*
* Level 4 access.
*/
------ -#define pgd_page_vaddr(pgd) \
------ - ((unsigned long)__va((unsigned long)pgd_val((pgd)) & PTE_PFN_MASK))
------ -#define pgd_page(pgd) (pfn_to_page(pgd_val((pgd)) >> PAGE_SHIFT))
------ -#define pgd_present(pgd) (pgd_val(pgd) & _PAGE_PRESENT)
static inline int pgd_large(pgd_t pgd) { return 0; }
#define mk_kernel_pgd(address) __pgd((address) | _KERNPG_TABLE)
/* PUD - Level3 access */
------ -/* to find an entry in a page-table-directory. */
------ -#define pud_page_vaddr(pud) \
------ - ((unsigned long)__va(pud_val((pud)) & PHYSICAL_PAGE_MASK))
------ -#define pud_page(pud) (pfn_to_page(pud_val((pud)) >> PAGE_SHIFT))
------ -#define pud_index(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))
------ -#define pud_offset(pgd, address) \
------ - ((pud_t *)pgd_page_vaddr(*(pgd)) + pud_index((address)))
------ -#define pud_present(pud) (pud_val((pud)) & _PAGE_PRESENT)
------ -
------ -static inline int pud_large(pud_t pte)
------ -{
------ - return (pud_val(pte) & (_PAGE_PSE | _PAGE_PRESENT)) ==
------ - (_PAGE_PSE | _PAGE_PRESENT);
------ -}
/* PMD - Level 2 access */
------ -#define pmd_page_vaddr(pmd) ((unsigned long) __va(pmd_val((pmd)) & PTE_PFN_MASK))
------ -#define pmd_page(pmd) (pfn_to_page(pmd_val((pmd)) >> PAGE_SHIFT))
------ -
------ -#define pmd_index(address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))
------ -#define pmd_offset(dir, address) ((pmd_t *)pud_page_vaddr(*(dir)) + \
------ - pmd_index(address))
------ -#define pmd_none(x) (!pmd_val((x)))
------ -#define pmd_present(x) (pmd_val((x)) & _PAGE_PRESENT)
------ -#define pfn_pmd(nr, prot) (__pmd(((nr) << PAGE_SHIFT) | pgprot_val((prot))))
------ -#define pmd_pfn(x) ((pmd_val((x)) & __PHYSICAL_MASK) >> PAGE_SHIFT)
------ -
#define pte_to_pgoff(pte) ((pte_val((pte)) & PHYSICAL_PAGE_MASK) >> PAGE_SHIFT)
#define pgoff_to_pte(off) ((pte_t) { .pte = ((off) << PAGE_SHIFT) | \
_PAGE_FILE })
/* PTE - Level 1 access. */
------ -/* page, protection -> pte */
------ -#define mk_pte(page, pgprot) pfn_pte(page_to_pfn((page)), (pgprot))
------ -
------ -#define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
------ -#define pte_offset_kernel(dir, address) ((pte_t *) pmd_page_vaddr(*(dir)) + \
------ - pte_index((address)))
------ -
/* x86-64 always has all page tables mapped. */
#define pte_offset_map(dir, address) pte_offset_kernel((dir), (address))
#define pte_offset_map_nested(dir, address) pte_offset_kernel((dir), (address))
extern int direct_gbpages;
/* Encode and de-code a swap entry */
- #define __swp_type(x) (((x).val >> 1) & 0x3f)
- #define __swp_offset(x) ((x).val >> 8)
- #define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 1) | \
- ((offset) << 8) })
+ #if _PAGE_BIT_FILE < _PAGE_BIT_PROTNONE
+ #define SWP_TYPE_BITS (_PAGE_BIT_FILE - _PAGE_BIT_PRESENT - 1)
+ #define SWP_OFFSET_SHIFT (_PAGE_BIT_PROTNONE + 1)
+ #else
+ #define SWP_TYPE_BITS (_PAGE_BIT_PROTNONE - _PAGE_BIT_PRESENT - 1)
+ #define SWP_OFFSET_SHIFT (_PAGE_BIT_FILE + 1)
+ #endif
+
+ #define MAX_SWAPFILES_CHECK() BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > SWP_TYPE_BITS)
+
+ #define __swp_type(x) (((x).val >> (_PAGE_BIT_PRESENT + 1)) \
+ & ((1U << SWP_TYPE_BITS) - 1))
+ #define __swp_offset(x) ((x).val >> SWP_OFFSET_SHIFT)
+ #define __swp_entry(type, offset) ((swp_entry_t) { \
+ ((type) << (_PAGE_BIT_PRESENT + 1)) \
+ | ((offset) << SWP_OFFSET_SHIFT) })
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val((pte)) })
#define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val })
extern int kern_addr_valid(unsigned long addr);
extern void cleanup_highmap(void);
------ -#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
------ - remap_pfn_range(vma, vaddr, pfn, size, prot)
------ -
#define HAVE_ARCH_UNMAPPED_AREA
#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
#include <asm/mpspec.h>
#include <asm/smp.h>
-------#ifdef CONFIG_X86_LOCAL_APIC
-------# include <mach_apic.h>
-------#endif
-------
static int __initdata acpi_force = 0;
-
+ u32 acpi_rsdt_forced;
#ifdef CONFIG_ACPI
int acpi_disabled = 0;
#else
EXPORT_SYMBOL(acpi_disabled);
#ifdef CONFIG_X86_64
-------
-------#include <asm/proto.h>
-------
-------#else /* X86 */
-------
-------#ifdef CONFIG_X86_LOCAL_APIC
-------#include <mach_apic.h>
-------#include <mach_mpparse.h>
-------#endif /* CONFIG_X86_LOCAL_APIC */
-------
+++++++# include <asm/proto.h>
#endif /* X86 */
#define BAD_MADT_ENTRY(entry, end) ( \
*/
char *__init __acpi_map_table(unsigned long phys, unsigned long size)
{
- ------ unsigned long base, offset, mapped_size;
- ------ int idx;
if (!phys || !size)
return NULL;
- ------ if (phys+size <= (max_low_pfn_mapped << PAGE_SHIFT))
- ------ return __va(phys);
- ------
- ------ offset = phys & (PAGE_SIZE - 1);
- ------ mapped_size = PAGE_SIZE - offset;
- ------ clear_fixmap(FIX_ACPI_END);
- ------ set_fixmap(FIX_ACPI_END, phys);
- ------ base = fix_to_virt(FIX_ACPI_END);
- ------
- ------ /*
- ------ * Most cases can be covered by the below.
- ------ */
- ------ idx = FIX_ACPI_END;
- ------ while (mapped_size < size) {
- ------ if (--idx < FIX_ACPI_BEGIN)
- ------ return NULL; /* cannot handle this */
- ------ phys += PAGE_SIZE;
- ------ clear_fixmap(idx);
- ------ set_fixmap(idx, phys);
- ------ mapped_size += PAGE_SIZE;
- ------ }
-
- return ((unsigned char *)base + offset);
+ ++++++ return early_ioremap(phys, size);
+ ++++++}
+ ++++++void __init __acpi_unmap_table(char *map, unsigned long size)
+ ++++++{
+ ++++++ if (!map || !size)
+ ++++++ return;
+
------ return ((unsigned char *)base + offset);
+ ++++++ early_iounmap(map, size);
}
#ifdef CONFIG_PCI_MMCONFIG
madt->address);
}
------- acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id);
+++++++ default_acpi_madt_oem_check(madt->header.oem_id,
+++++++ madt->header.oem_table_id);
return 0;
}
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
union acpi_object *obj;
struct acpi_madt_local_apic *lapic;
- cpumask_t tmp_map, new_map;
+ cpumask_var_t tmp_map, new_map;
u8 physid;
int cpu;
+ int retval = -ENOMEM;
if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer)))
return -EINVAL;
buffer.length = ACPI_ALLOCATE_BUFFER;
buffer.pointer = NULL;
- tmp_map = cpu_present_map;
+ if (!alloc_cpumask_var(&tmp_map, GFP_KERNEL))
+ goto out;
+
+ if (!alloc_cpumask_var(&new_map, GFP_KERNEL))
+ goto free_tmp_map;
+
+ cpumask_copy(tmp_map, cpu_present_mask);
acpi_register_lapic(physid, lapic->lapic_flags & ACPI_MADT_ENABLED);
/*
* If mp_register_lapic successfully generates a new logical cpu
* number, then the following will get us exactly what was mapped
*/
- cpus_andnot(new_map, cpu_present_map, tmp_map);
- if (cpus_empty(new_map)) {
+ cpumask_andnot(new_map, cpu_present_mask, tmp_map);
+ if (cpumask_empty(new_map)) {
printk ("Unable to map lapic to logical cpu number\n");
- return -EINVAL;
+ retval = -EINVAL;
+ goto free_new_map;
}
- cpu = first_cpu(new_map);
+ cpu = cpumask_first(new_map);
*pcpu = cpu;
- return 0;
+ retval = 0;
+
+ free_new_map:
+ free_cpumask_var(new_map);
+ free_tmp_map:
+ free_cpumask_var(tmp_map);
+ out:
+ return retval;
}
/* wrapper to silence section mismatch warning */
int acpi_unmap_lsapic(int cpu)
{
per_cpu(x86_cpu_to_apicid, cpu) = -1;
- cpu_clear(cpu, cpu_present_map);
+ set_cpu_present(cpu, false);
num_processors--;
return (0);
DECLARE_BITMAP(pin_programmed, MP_MAX_IOAPIC_PIN + 1);
} mp_ioapic_routing[MAX_IO_APICS];
-------static int mp_find_ioapic(int gsi)
+++++++int mp_find_ioapic(int gsi)
{
int i = 0;
return -1;
}
+++++++int mp_find_ioapic_pin(int ioapic, int gsi)
+++++++{
+++++++ if (WARN_ON(ioapic == -1))
+++++++ return -1;
+++++++ if (WARN_ON(gsi > mp_ioapic_routing[ioapic].gsi_end))
+++++++ return -1;
+++++++
+++++++ return gsi - mp_ioapic_routing[ioapic].gsi_base;
+++++++}
+++++++
static u8 __init uniq_ioapic_id(u8 id)
{
#ifdef CONFIG_X86_32
DECLARE_BITMAP(used, 256);
bitmap_zero(used, 256);
for (i = 0; i < nr_ioapics; i++) {
------- struct mp_config_ioapic *ia = &mp_ioapics[i];
------- __set_bit(ia->mp_apicid, used);
+++++++ struct mpc_ioapic *ia = &mp_ioapics[i];
+++++++ __set_bit(ia->apicid, used);
}
if (!test_bit(id, used))
return id;
idx = nr_ioapics;
------- mp_ioapics[idx].mp_type = MP_IOAPIC;
------- mp_ioapics[idx].mp_flags = MPC_APIC_USABLE;
------- mp_ioapics[idx].mp_apicaddr = address;
+++++++ mp_ioapics[idx].type = MP_IOAPIC;
+++++++ mp_ioapics[idx].flags = MPC_APIC_USABLE;
+++++++ mp_ioapics[idx].apicaddr = address;
set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);
------- mp_ioapics[idx].mp_apicid = uniq_ioapic_id(id);
+++++++ mp_ioapics[idx].apicid = uniq_ioapic_id(id);
#ifdef CONFIG_X86_32
------- mp_ioapics[idx].mp_apicver = io_apic_get_version(idx);
+++++++ mp_ioapics[idx].apicver = io_apic_get_version(idx);
#else
------- mp_ioapics[idx].mp_apicver = 0;
+++++++ mp_ioapics[idx].apicver = 0;
#endif
/*
* Build basic GSI lookup table to facilitate gsi->io_apic lookups
* and to prevent reprogramming of IOAPIC pins (PCI GSIs).
*/
------- mp_ioapic_routing[idx].apic_id = mp_ioapics[idx].mp_apicid;
+++++++ mp_ioapic_routing[idx].apic_id = mp_ioapics[idx].apicid;
mp_ioapic_routing[idx].gsi_base = gsi_base;
mp_ioapic_routing[idx].gsi_end = gsi_base +
io_apic_get_redir_entries(idx);
------- printk(KERN_INFO "IOAPIC[%d]: apic_id %d, version %d, address 0x%lx, "
------- "GSI %d-%d\n", idx, mp_ioapics[idx].mp_apicid,
------- mp_ioapics[idx].mp_apicver, mp_ioapics[idx].mp_apicaddr,
+++++++ printk(KERN_INFO "IOAPIC[%d]: apic_id %d, version %d, address 0x%x, "
+++++++ "GSI %d-%d\n", idx, mp_ioapics[idx].apicid,
+++++++ mp_ioapics[idx].apicver, mp_ioapics[idx].apicaddr,
mp_ioapic_routing[idx].gsi_base, mp_ioapic_routing[idx].gsi_end);
nr_ioapics++;
}
---- --static void assign_to_mp_irq(struct mp_config_intsrc *m,
---- -- struct mp_config_intsrc *mp_irq)
++++ ++int __init acpi_probe_gsi(void)
{
---- -- memcpy(mp_irq, m, sizeof(struct mp_config_intsrc));
++++ ++ int idx;
++++ ++ int gsi;
++++ ++ int max_gsi = 0;
++++ ++
++++ ++ if (acpi_disabled)
++++ ++ return 0;
++++ ++
++++ ++ if (!acpi_ioapic)
++++ ++ return 0;
++++ ++
++++ ++ max_gsi = 0;
++++ ++ for (idx = 0; idx < nr_ioapics; idx++) {
++++ ++ gsi = mp_ioapic_routing[idx].gsi_end;
++++ ++
++++ ++ if (gsi > max_gsi)
++++ ++ max_gsi = gsi;
++++ ++ }
++++ ++
++++ ++ return max_gsi + 1;
}
---- --static int mp_irq_cmp(struct mp_config_intsrc *mp_irq,
---- -- struct mp_config_intsrc *m)
- static void assign_to_mp_irq(struct mp_config_intsrc *m,
- struct mp_config_intsrc *mp_irq)
+++++++static void assign_to_mp_irq(struct mpc_intsrc *m,
+++++++ struct mpc_intsrc *mp_irq)
{
---- -- return memcmp(mp_irq, m, sizeof(struct mp_config_intsrc));
- memcpy(mp_irq, m, sizeof(struct mp_config_intsrc));
+++++++ memcpy(mp_irq, m, sizeof(struct mpc_intsrc));
}
---- --static void save_mp_irq(struct mp_config_intsrc *m)
- static int mp_irq_cmp(struct mp_config_intsrc *mp_irq,
- struct mp_config_intsrc *m)
+++++++static int mp_irq_cmp(struct mpc_intsrc *mp_irq,
+++++++ struct mpc_intsrc *m)
++++ ++{
- return memcmp(mp_irq, m, sizeof(struct mp_config_intsrc));
+++++++ return memcmp(mp_irq, m, sizeof(struct mpc_intsrc));
++++ ++}
++++ ++
- static void save_mp_irq(struct mp_config_intsrc *m)
+++++++static void save_mp_irq(struct mpc_intsrc *m)
{
int i;
{
int ioapic;
int pin;
------- struct mp_config_intsrc mp_irq;
+++++++ struct mpc_intsrc mp_irq;
/*
* Convert 'gsi' to 'ioapic.pin'.
ioapic = mp_find_ioapic(gsi);
if (ioapic < 0)
return;
------- pin = gsi - mp_ioapic_routing[ioapic].gsi_base;
+++++++ pin = mp_find_ioapic_pin(ioapic, gsi);
/*
* TBD: This check is for faulty timer entries, where the override
if ((bus_irq == 0) && (trigger == 3))
trigger = 1;
------- mp_irq.mp_type = MP_INTSRC;
------- mp_irq.mp_irqtype = mp_INT;
------- mp_irq.mp_irqflag = (trigger << 2) | polarity;
------- mp_irq.mp_srcbus = MP_ISA_BUS;
------- mp_irq.mp_srcbusirq = bus_irq; /* IRQ */
------- mp_irq.mp_dstapic = mp_ioapics[ioapic].mp_apicid; /* APIC ID */
------- mp_irq.mp_dstirq = pin; /* INTIN# */
+++++++ mp_irq.type = MP_INTSRC;
+++++++ mp_irq.irqtype = mp_INT;
+++++++ mp_irq.irqflag = (trigger << 2) | polarity;
+++++++ mp_irq.srcbus = MP_ISA_BUS;
+++++++ mp_irq.srcbusirq = bus_irq; /* IRQ */
+++++++ mp_irq.dstapic = mp_ioapics[ioapic].apicid; /* APIC ID */
+++++++ mp_irq.dstirq = pin; /* INTIN# */
save_mp_irq(&mp_irq);
}
int i;
int ioapic;
unsigned int dstapic;
------- struct mp_config_intsrc mp_irq;
+++++++ struct mpc_intsrc mp_irq;
#if defined (CONFIG_MCA) || defined (CONFIG_EISA)
/*
ioapic = mp_find_ioapic(0);
if (ioapic < 0)
return;
------- dstapic = mp_ioapics[ioapic].mp_apicid;
+++++++ dstapic = mp_ioapics[ioapic].apicid;
/*
* Use the default configuration for the IRQs 0-15. Unless
int idx;
for (idx = 0; idx < mp_irq_entries; idx++) {
------- struct mp_config_intsrc *irq = mp_irqs + idx;
+++++++ struct mpc_intsrc *irq = mp_irqs + idx;
/* Do we already have a mapping for this ISA IRQ? */
------- if (irq->mp_srcbus == MP_ISA_BUS
------- && irq->mp_srcbusirq == i)
+++++++ if (irq->srcbus == MP_ISA_BUS && irq->srcbusirq == i)
break;
/* Do we already have a mapping for this IOAPIC pin */
------- if (irq->mp_dstapic == dstapic &&
------- irq->mp_dstirq == i)
+++++++ if (irq->dstapic == dstapic && irq->dstirq == i)
break;
}
continue; /* IRQ already used */
}
------- mp_irq.mp_type = MP_INTSRC;
------- mp_irq.mp_irqflag = 0; /* Conforming */
------- mp_irq.mp_srcbus = MP_ISA_BUS;
------- mp_irq.mp_dstapic = dstapic;
------- mp_irq.mp_irqtype = mp_INT;
------- mp_irq.mp_srcbusirq = i; /* Identity mapped */
------- mp_irq.mp_dstirq = i;
+++++++ mp_irq.type = MP_INTSRC;
+++++++ mp_irq.irqflag = 0; /* Conforming */
+++++++ mp_irq.srcbus = MP_ISA_BUS;
+++++++ mp_irq.dstapic = dstapic;
+++++++ mp_irq.irqtype = mp_INT;
+++++++ mp_irq.srcbusirq = i; /* Identity mapped */
+++++++ mp_irq.dstirq = i;
save_mp_irq(&mp_irq);
}
return gsi;
}
------- ioapic_pin = gsi - mp_ioapic_routing[ioapic].gsi_base;
+++++++ ioapic_pin = mp_find_ioapic_pin(ioapic, gsi);
#ifdef CONFIG_X86_32
if (ioapic_renumber_irq)
u32 gsi, int triggering, int polarity)
{
#ifdef CONFIG_X86_MPPARSE
------- struct mp_config_intsrc mp_irq;
+++++++ struct mpc_intsrc mp_irq;
int ioapic;
if (!acpi_ioapic)
return 0;
/* print the entry should happen on mptable identically */
------- mp_irq.mp_type = MP_INTSRC;
------- mp_irq.mp_irqtype = mp_INT;
------- mp_irq.mp_irqflag = (triggering == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) |
+++++++ mp_irq.type = MP_INTSRC;
+++++++ mp_irq.irqtype = mp_INT;
+++++++ mp_irq.irqflag = (triggering == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) |
(polarity == ACPI_ACTIVE_HIGH ? 1 : 3);
------- mp_irq.mp_srcbus = number;
------- mp_irq.mp_srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3);
+++++++ mp_irq.srcbus = number;
+++++++ mp_irq.srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3);
ioapic = mp_find_ioapic(gsi);
------- mp_irq.mp_dstapic = mp_ioapic_routing[ioapic].apic_id;
------- mp_irq.mp_dstirq = gsi - mp_ioapic_routing[ioapic].gsi_base;
+++++++ mp_irq.dstapic = mp_ioapic_routing[ioapic].apic_id;
+++++++ mp_irq.dstirq = mp_find_ioapic_pin(ioapic, gsi);
save_mp_irq(&mp_irq);
#endif
if (!error) {
acpi_lapic = 1;
-------#ifdef CONFIG_X86_GENERICARCH
+++++++#ifdef CONFIG_X86_BIGSMP
generic_bigsmp_probe();
#endif
/*
error = acpi_parse_madt_ioapic_entries();
if (!error) {
acpi_irq_model = ACPI_IRQ_MODEL_IOAPIC;
- acpi_irq_balance_set(NULL);
acpi_ioapic = 1;
smp_found_config = 1;
-------#ifdef CONFIG_X86_32
------- setup_apic_routing();
-------#endif
+++++++ if (apic->setup_apic_routing)
+++++++ apic->setup_apic_routing();
}
}
if (error == -EINVAL) {
"Invalid BIOS MADT, disabling ACPI\n");
disable_acpi();
}
+ } else {
+ /*
+ * ACPI found no MADT, and so ACPI wants UP PIC mode.
+ * In the event an MPS table was found, forget it.
+ * Boot with "acpi=off" to use MPS on such a system.
+ */
+ if (smp_found_config) {
+ printk(KERN_WARNING PREFIX
+ "No APIC-table, disabling MPS\n");
+ smp_found_config = 0;
+ }
}
+
+ /*
+ * ACPI supports both logical (e.g. Hyper-Threading) and physical
+ * processors, where MPS only supports physical.
+ */
+ if (acpi_lapic && acpi_ioapic)
+ printk(KERN_INFO "Using ACPI (MADT) for SMP configuration "
+ "information\n");
+ else if (acpi_lapic)
+ printk(KERN_INFO "Using ACPI for processor (LAPIC) "
+ "configuration information\n");
#endif
return;
}
disable_acpi();
acpi_ht = 1;
}
+ /* acpi=rsdt use RSDT instead of XSDT */
+ else if (strcmp(arg, "rsdt") == 0) {
+ acpi_rsdt_forced = 1;
+ }
/* "acpi=noirq" disables ACPI interrupt routing */
else if (strcmp(arg, "noirq") == 0) {
acpi_noirq_set();
/*
* Local APIC handling, local APIC timers
*
*
* Fixes
* Maciej W. Rozycki : Bits for genuine 82489DX APICs;
* Mikael Pettersson : PM converted to driver model.
*/
-------#include <linux/init.h>
-------
-------#include <linux/mm.h>
-------#include <linux/delay.h>
-------#include <linux/bootmem.h>
-------#include <linux/interrupt.h>
-------#include <linux/mc146818rtc.h>
#include <linux/kernel_stat.h>
-------#include <linux/sysdev.h>
-------#include <linux/ioport.h>
-------#include <linux/cpu.h>
-------#include <linux/clockchips.h>
+++++++#include <linux/mc146818rtc.h>
#include <linux/acpi_pmtmr.h>
+++++++#include <linux/clockchips.h>
+++++++#include <linux/interrupt.h>
+++++++#include <linux/bootmem.h>
+++++++#include <linux/ftrace.h>
+++++++#include <linux/ioport.h>
#include <linux/module.h>
-------#include <linux/dmi.h>
+++++++#include <linux/sysdev.h>
+++++++#include <linux/delay.h>
+++++++#include <linux/timex.h>
#include <linux/dmar.h>
-- ----#include <linux/ftrace.h>
-- ----#include <linux/smp.h>
+++++++#include <linux/init.h>
+++++++#include <linux/cpu.h>
+++++++#include <linux/dmi.h>
+ #include <linux/nmi.h>
-- ----#include <linux/timex.h>
+++++++#include <linux/smp.h>
+++++++#include <linux/mm.h>
-------#include <asm/atomic.h>
- #include <asm/smp.h>
-------#include <asm/mtrr.h>
-------#include <asm/mpspec.h>
-------#include <asm/desc.h>
#include <asm/arch_hooks.h>
-------#include <asm/hpet.h>
#include <asm/pgalloc.h>
+++++++#include <asm/genapic.h>
+++++++#include <asm/atomic.h>
+++++++#include <asm/mpspec.h>
#include <asm/i8253.h>
- #include <asm/nmi.h>
-------#include <asm/idle.h>
+++++++#include <asm/i8259.h>
#include <asm/proto.h>
- #include <asm/timex.h>
#include <asm/apic.h>
-------#include <asm/i8259.h>
+++++++#include <asm/desc.h>
+++++++#include <asm/hpet.h>
+++++++#include <asm/idle.h>
+++++++#include <asm/mtrr.h>
++ #include <asm/smp.h>
++
- ----#include <mach_apic.h>
- ----#include <mach_apicdef.h>
- ----#include <mach_ipi.h>
+++++++unsigned int num_processors;
+++++++
+++++++unsigned disabled_cpus __cpuinitdata;
+ +++++
- #include <mach_apic.h>
- #include <mach_apicdef.h>
- #include <mach_ipi.h>
+++++++/* Processor that is doing the boot up */
+++++++unsigned int boot_cpu_physical_apicid = -1U;
- #include <mach_apic.h>
- #include <mach_apicdef.h>
- #include <mach_ipi.h>
+ /*
-- ---- * Sanity check
+++++++ * The highest APIC ID seen during enumeration.
+++++++ *
+++++++ * This determines the messaging protocol we can use: if all APIC IDs
+++++++ * are in the 0 ... 7 range, then we can use logical addressing which
+++++++ * has some performance advantages (better broadcasting).
+++++++ *
+++++++ * If there's an APIC ID above 8, we use physical addressing.
+ */
-- ----#if ((SPURIOUS_APIC_VECTOR & 0x0F) != 0x0F)
-- ----# error SPURIOUS_APIC_VECTOR definition error
-- ----#endif
+++++++unsigned int max_physical_apicid;
++ ++++
++ ++++/*
- * Sanity check
+++++++ * Bitmask of physically existing CPUs:
++ ++++ */
- #if ((SPURIOUS_APIC_VECTOR & 0x0F) != 0x0F)
- # error SPURIOUS_APIC_VECTOR definition error
- #endif
+++++++physid_mask_t phys_cpu_present_map;
+++++++
+++++++/*
+++++++ * Map cpu index to physical APIC ID
+++++++ */
+++++++DEFINE_EARLY_PER_CPU(u16, x86_cpu_to_apicid, BAD_APICID);
+++++++DEFINE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid, BAD_APICID);
+++++++EXPORT_EARLY_PER_CPU_SYMBOL(x86_cpu_to_apicid);
+++++++EXPORT_EARLY_PER_CPU_SYMBOL(x86_bios_cpu_apicid);
#ifdef CONFIG_X86_32
/*
#ifdef HAVE_X2APIC
int x2apic;
/* x2apic enabled before OS handover */
- int x2apic_preenabled;
- int disable_x2apic;
+ static int x2apic_preenabled;
+ static int disable_x2apic;
static __init int setup_nox2apic(char *str)
{
disable_x2apic = 1;
int first_system_vector = 0xfe;
- char system_vectors[NR_VECTORS] = { [0 ... NR_VECTORS-1] = SYS_VECTOR_FREE};
-
/*
* Debug level, exported for io_apic.c
*/
struct clock_event_device *evt);
static void lapic_timer_setup(enum clock_event_mode mode,
struct clock_event_device *evt);
- static void lapic_timer_broadcast(cpumask_t mask);
+ static void lapic_timer_broadcast(const struct cpumask *mask);
static void apic_pm_activate(void);
/*
apic_write(APIC_ICR, low);
}
- u64 xapic_icr_read(void)
+ static u64 xapic_icr_read(void)
{
u32 icr1, icr2;
wrmsrl(APIC_BASE_MSR + (APIC_ICR >> 4), ((__u64) id) << 32 | low);
}
- u64 x2apic_icr_read(void)
+ static u64 x2apic_icr_read(void)
{
unsigned long val;
v = apic_read(APIC_LVTT);
v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
apic_write(APIC_LVTT, v);
+ apic_write(APIC_TMICT, 0xffffffff);
break;
case CLOCK_EVT_MODE_RESUME:
/* Nothing to do here */
/*
* Local APIC timer broadcast function
*/
- static void lapic_timer_broadcast(cpumask_t mask)
+ static void lapic_timer_broadcast(const struct cpumask *mask)
{
#ifdef CONFIG_SMP
------- send_IPI_mask(mask, LOCAL_TIMER_VECTOR);
+++++++ apic->send_IPI_mask(mask, LOCAL_TIMER_VECTOR);
#endif
}
struct clock_event_device *levt = &__get_cpu_var(lapic_events);
memcpy(levt, &lapic_clockevent, sizeof(*levt));
- levt->cpumask = cpumask_of_cpu(smp_processor_id());
+ levt->cpumask = cpumask_of(smp_processor_id());
clockevents_register_device(levt);
}
}
}
------- static int __init calibrate_by_pmtimer(long deltapm, long *delta)
+++++++ static int __init
+++++++ calibrate_by_pmtimer(long deltapm, long *delta, long *deltatsc)
{
const long pm_100ms = PMTMR_TICKS_PER_SEC / 10;
const long pm_thresh = pm_100ms / 100;
return -1;
#endif
------- apic_printk(APIC_VERBOSE, "... PM timer delta = %ld\n", deltapm);
+++++++ apic_printk(APIC_VERBOSE, "... PM-Timer delta = %ld\n", deltapm);
/* Check, if the PM timer is available */
if (!deltapm)
if (deltapm > (pm_100ms - pm_thresh) &&
deltapm < (pm_100ms + pm_thresh)) {
------- apic_printk(APIC_VERBOSE, "... PM timer result ok\n");
------- } else {
------- res = (((u64)deltapm) * mult) >> 22;
------- do_div(res, 1000000);
--- --- pr_warning("APIC calibration not consistent "
- printk(KERN_WARNING "APIC calibration not consistent "
------- "with PM Timer: %ldms instead of 100ms\n",
------- (long)res);
------- /* Correct the lapic counter value */
------- res = (((u64)(*delta)) * pm_100ms);
+++++++ apic_printk(APIC_VERBOSE, "... PM-Timer result ok\n");
+++++++ return 0;
+++++++ }
+++++++
+++++++ res = (((u64)deltapm) * mult) >> 22;
+++++++ do_div(res, 1000000);
+++++++ pr_warning("APIC calibration not consistent "
+++++++ "with PM-Timer: %ldms instead of 100ms\n",(long)res);
+++++++
+++++++ /* Correct the lapic counter value */
+++++++ res = (((u64)(*delta)) * pm_100ms);
+++++++ do_div(res, deltapm);
+++++++ pr_info("APIC delta adjusted to PM-Timer: "
+++++++ "%lu (%ld)\n", (unsigned long)res, *delta);
+++++++ *delta = (long)res;
+++++++
+++++++ /* Correct the tsc counter value */
+++++++ if (cpu_has_tsc) {
+++++++ res = (((u64)(*deltatsc)) * pm_100ms);
do_div(res, deltapm);
--- --- pr_info("APIC delta adjusted to PM-Timer: "
- printk(KERN_INFO "APIC delta adjusted to PM-Timer: "
------- "%lu (%ld)\n", (unsigned long)res, *delta);
------- *delta = (long)res;
+++++++ apic_printk(APIC_VERBOSE, "TSC delta adjusted to "
+++++++ "PM-Timer: %lu (%ld) \n",
+++++++ (unsigned long)res, *deltatsc);
+++++++ *deltatsc = (long)res;
}
return 0;
struct clock_event_device *levt = &__get_cpu_var(lapic_events);
void (*real_handler)(struct clock_event_device *dev);
unsigned long deltaj;
------- long delta;
+++++++ long delta, deltatsc;
int pm_referenced = 0;
local_irq_disable();
delta = lapic_cal_t1 - lapic_cal_t2;
apic_printk(APIC_VERBOSE, "... lapic delta = %ld\n", delta);
+++++++ deltatsc = (long)(lapic_cal_tsc2 - lapic_cal_tsc1);
+++++++
/* we trust the PM based calibration if possible */
pm_referenced = !calibrate_by_pmtimer(lapic_cal_pm2 - lapic_cal_pm1,
------- &delta);
+++++++ &delta, &deltatsc);
/* Calculate the scaled math multiplication factor */
lapic_clockevent.mult = div_sc(delta, TICK_NSEC * LAPIC_CAL_LOOPS,
calibration_result);
if (cpu_has_tsc) {
------- delta = (long)(lapic_cal_tsc2 - lapic_cal_tsc1);
apic_printk(APIC_VERBOSE, "..... CPU clock speed is "
"%ld.%04ld MHz.\n",
------- (delta / LAPIC_CAL_LOOPS) / (1000000 / HZ),
------- (delta / LAPIC_CAL_LOOPS) % (1000000 / HZ));
+++++++ (deltatsc / LAPIC_CAL_LOOPS) / (1000000 / HZ),
+++++++ (deltatsc / LAPIC_CAL_LOOPS) % (1000000 / HZ));
}
apic_printk(APIC_VERBOSE, "..... host bus clock speed is "
*/
if (calibration_result < (1000000 / HZ)) {
local_irq_enable();
- printk(KERN_WARNING
- "APIC frequency too slow, disabling apic timer\n");
+ pr_warning("APIC frequency too slow, disabling apic timer\n");
return -1;
}
while (lapic_cal_loops <= LAPIC_CAL_LOOPS)
cpu_relax();
- local_irq_disable();
-
/* Stop the lapic timer */
lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, levt);
- local_irq_enable();
-
/* Jiffies delta */
deltaj = lapic_cal_j2 - lapic_cal_j1;
apic_printk(APIC_VERBOSE, "... jiffies delta = %lu\n", deltaj);
local_irq_enable();
if (levt->features & CLOCK_EVT_FEAT_DUMMY) {
- printk(KERN_WARNING
- "APIC timer disabled due to verification failure.\n");
+ pr_warning("APIC timer disabled due to verification failure\n");
return -1;
}
* broadcast mechanism is used. On UP systems simply ignore it.
*/
if (disable_apic_timer) {
- printk(KERN_INFO "Disabling APIC timer\n");
+ pr_info("Disabling APIC timer\n");
/* No broadcast on UP ! */
if (num_possible_cpus() > 1) {
lapic_clockevent.mult = 1;
if (nmi_watchdog != NMI_IO_APIC)
lapic_clockevent.features &= ~CLOCK_EVT_FEAT_DUMMY;
else
- printk(KERN_WARNING "APIC timer registered as dummy,"
+ pr_warning("APIC timer registered as dummy,"
" due to nmi_watchdog=%d!\n", nmi_watchdog);
/* Setup the lapic or request the broadcast */
* spurious.
*/
if (!evt->event_handler) {
- printk(KERN_WARNING
- "Spurious LAPIC timer interrupt on cpu %d\n", cpu);
+ pr_warning("Spurious LAPIC timer interrupt on cpu %d\n", cpu);
/* Switch it off */
lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, evt);
return;
/*
* the NMI deadlock-detector uses this.
*/
- #ifdef CONFIG_X86_64
- add_pda(apic_timer_irqs, 1);
- #else
- per_cpu(irq_stat, cpu).apic_timer_irqs++;
- #endif
+ inc_irq_stat(apic_timer_irqs);
evt->event_handler(evt);
}
* [ if a single-CPU system runs an SMP kernel then we call the local
* interrupt as well. Thus we cannot inline the local irq ... ]
*/
- void smp_apic_timer_interrupt(struct pt_regs *regs)
+ void __irq_entry smp_apic_timer_interrupt(struct pt_regs *regs)
{
struct pt_regs *old_regs = set_irq_regs(regs);
* Besides, if we don't timer interrupts ignore the global
* interrupt lock, which is the WrongThing (tm) to do.
*/
- #ifdef CONFIG_X86_64
exit_idle();
- #endif
irq_enter();
local_apic_timer_interrupt();
irq_exit();
{
unsigned int value;
+++ /* APIC hasn't been mapped yet */
+++ if (!apic_phys)
+++ return;
+++
clear_local_APIC();
/*
*/
reg0 = apic_read(APIC_ID);
apic_printk(APIC_DEBUG, "Getting ID: %x\n", reg0);
------- apic_write(APIC_ID, reg0 ^ APIC_ID_MASK);
+++++++ apic_write(APIC_ID, reg0 ^ apic->apic_id_mask);
reg1 = apic_read(APIC_ID);
apic_printk(APIC_DEBUG, "Getting ID: %x\n", reg1);
apic_write(APIC_ID, reg0);
------- if (reg1 != (reg0 ^ APIC_ID_MASK))
+++++++ if (reg1 != (reg0 ^ apic->apic_id_mask))
return 0;
/*
unsigned int oldvalue, value, maxlvt;
if (!lapic_is_integrated()) {
- printk(KERN_INFO "No ESR for 82489DX.\n");
+ pr_info("No ESR for 82489DX.\n");
return;
}
------- if (esr_disable) {
+++++++ if (apic->disable_esr) {
/*
* Something untraceable is creating bad interrupts on
* secondary quads ... for the moment, just leave the
* ESR disabled - we can't do anything useful with the
* errors anyway - mbligh
*/
- printk(KERN_INFO "Leaving ESR disabled.\n");
+ pr_info("Leaving ESR disabled.\n");
return;
}
unsigned int value;
int i, j;
+++++++ if (disable_apic) {
+++++++ arch_disable_smp_support();
+++++++ return;
+++++++ }
+++++++
#ifdef CONFIG_X86_32
/* Pound the ESR really hard over the head with a big hammer - mbligh */
------- if (lapic_is_integrated() && esr_disable) {
+++++++ if (lapic_is_integrated() && apic->disable_esr) {
apic_write(APIC_ESR, 0);
apic_write(APIC_ESR, 0);
apic_write(APIC_ESR, 0);
* Double-check whether this APIC is really registered.
* This is meaningless in clustered apic mode, so we skip it.
*/
------- if (!apic_id_registered())
+++++++ if (!apic->apic_id_registered())
BUG();
/*
* an APIC. See e.g. "AP-388 82489DX User's Manual" (Intel
* document number 292116). So here it goes...
*/
------- init_apic_ldr();
+++++++ apic->init_apic_ldr();
/*
* Set Task Priority to 'accept all'. We never change this
rdmsr(MSR_IA32_APICBASE, msr, msr2);
if (msr & X2APIC_ENABLE) {
- printk("x2apic enabled by BIOS, switching to x2apic ops\n");
+ pr_info("x2apic enabled by BIOS, switching to x2apic ops\n");
x2apic_preenabled = x2apic = 1;
apic_ops = &x2apic_ops;
}
rdmsr(MSR_IA32_APICBASE, msr, msr2);
if (!(msr & X2APIC_ENABLE)) {
- printk("Enabling x2apic\n");
+ pr_info("Enabling x2apic\n");
wrmsr(MSR_IA32_APICBASE, msr | X2APIC_ENABLE, 0);
}
}
- void enable_IR_x2apic(void)
+ void __init enable_IR_x2apic(void)
{
#ifdef CONFIG_INTR_REMAP
int ret;
return;
if (!x2apic_preenabled && disable_x2apic) {
- printk(KERN_INFO
- "Skipped enabling x2apic and Interrupt-remapping "
- "because of nox2apic\n");
+ pr_info("Skipped enabling x2apic and Interrupt-remapping "
+ "because of nox2apic\n");
return;
}
panic("Bios already enabled x2apic, can't enforce nox2apic");
if (!x2apic_preenabled && skip_ioapic_setup) {
- printk(KERN_INFO
- "Skipped enabling x2apic and Interrupt-remapping "
- "because of skipping io-apic setup\n");
+ pr_info("Skipped enabling x2apic and Interrupt-remapping "
+ "because of skipping io-apic setup\n");
return;
}
ret = dmar_table_init();
if (ret) {
- printk(KERN_INFO
- "dmar_table_init() failed with %d:\n", ret);
+ pr_info("dmar_table_init() failed with %d:\n", ret);
if (x2apic_preenabled)
panic("x2apic enabled by bios. But IR enabling failed");
else
- printk(KERN_INFO
- "Not enabling x2apic,Intr-remapping\n");
+ pr_info("Not enabling x2apic,Intr-remapping\n");
return;
}
ret = save_mask_IO_APIC_setup();
if (ret) {
- printk(KERN_INFO "Saving IO-APIC state failed: %d\n", ret);
+ pr_info("Saving IO-APIC state failed: %d\n", ret);
goto end;
}
if (!ret) {
if (!x2apic_preenabled)
- printk(KERN_INFO
- "Enabled x2apic and interrupt-remapping\n");
+ pr_info("Enabled x2apic and interrupt-remapping\n");
else
- printk(KERN_INFO
- "Enabled Interrupt-remapping\n");
+ pr_info("Enabled Interrupt-remapping\n");
} else
- printk(KERN_ERR
- "Failed to enable Interrupt-remapping and x2apic\n");
+ pr_err("Failed to enable Interrupt-remapping and x2apic\n");
#else
if (!cpu_has_x2apic)
return;
panic("x2apic enabled prior OS handover,"
" enable CONFIG_INTR_REMAP");
- printk(KERN_INFO "Enable CONFIG_INTR_REMAP for enabling intr-remapping "
- " and x2apic\n");
+ pr_info("Enable CONFIG_INTR_REMAP for enabling intr-remapping "
+ " and x2apic\n");
#endif
return;
static int __init detect_init_APIC(void)
{
if (!cpu_has_apic) {
- printk(KERN_INFO "No local APIC present\n");
+ pr_info("No local APIC present\n");
return -1;
}
switch (boot_cpu_data.x86_vendor) {
case X86_VENDOR_AMD:
if ((boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model > 1) ||
--- - (boot_cpu_data.x86 == 15))
+++ + (boot_cpu_data.x86 >= 15))
break;
goto no_apic;
case X86_VENDOR_INTEL:
* "lapic" specified.
*/
if (!force_enable_local_apic) {
- printk(KERN_INFO "Local APIC disabled by BIOS -- "
- "you can enable it with \"lapic\"\n");
+ pr_info("Local APIC disabled by BIOS -- "
+ "you can enable it with \"lapic\"\n");
return -1;
}
/*
*/
rdmsr(MSR_IA32_APICBASE, l, h);
if (!(l & MSR_IA32_APICBASE_ENABLE)) {
- printk(KERN_INFO
- "Local APIC disabled by BIOS -- reenabling.\n");
+ pr_info("Local APIC disabled by BIOS -- reenabling.\n");
l &= ~MSR_IA32_APICBASE_BASE;
l |= MSR_IA32_APICBASE_ENABLE | APIC_DEFAULT_PHYS_BASE;
wrmsr(MSR_IA32_APICBASE, l, h);
*/
features = cpuid_edx(1);
if (!(features & (1 << X86_FEATURE_APIC))) {
- printk(KERN_WARNING "Could not enable APIC!\n");
+ pr_warning("Could not enable APIC!\n");
return -1;
}
set_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
if (l & MSR_IA32_APICBASE_ENABLE)
mp_lapic_addr = l & MSR_IA32_APICBASE_BASE;
- printk(KERN_INFO "Found and enabled local APIC!\n");
+ pr_info("Found and enabled local APIC!\n");
apic_pm_activate();
return 0;
no_apic:
- printk(KERN_INFO "No local APIC present or hardware disabled\n");
+ pr_info("No local APIC present or hardware disabled\n");
return -1;
}
#endif
int __init APIC_init_uniprocessor(void)
{
-------#ifdef CONFIG_X86_64
if (disable_apic) {
- printk(KERN_INFO "Apic disabled\n");
+ pr_info("Apic disabled\n");
return -1;
}
+++++++#ifdef CONFIG_X86_64
if (!cpu_has_apic) {
disable_apic = 1;
- printk(KERN_INFO "Apic disabled by BIOS\n");
+ pr_info("Apic disabled by BIOS\n");
return -1;
}
#else
*/
if (!cpu_has_apic &&
APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
- printk(KERN_ERR "BIOS bug, local APIC 0x%x not detected!...\n",
- boot_cpu_physical_apicid);
+ pr_err("BIOS bug, local APIC 0x%x not detected!...\n",
+ boot_cpu_physical_apicid);
clear_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
return -1;
}
enable_IR_x2apic();
#endif
#ifdef CONFIG_X86_64
------- setup_apic_routing();
+++++++ default_setup_apic_routing();
#endif
verify_local_APIC();
{
u32 v;
- #ifdef CONFIG_X86_64
exit_idle();
- #endif
irq_enter();
/*
* Check if this really is a spurious interrupt and ACK it
if (v & (1 << (SPURIOUS_APIC_VECTOR & 0x1f)))
ack_APIC_irq();
- #ifdef CONFIG_X86_64
- add_pda(irq_spurious_count, 1);
- #else
+ inc_irq_stat(irq_spurious_count);
+
/* see sw-dev-man vol 3, chapter 7.4.13.5 */
- printk(KERN_INFO "spurious APIC interrupt on CPU#%d, "
- "should never happen.\n", smp_processor_id());
- __get_cpu_var(irq_stat).irq_spurious_count++;
- #endif
+ pr_info("spurious APIC interrupt on CPU#%d, "
+ "should never happen.\n", smp_processor_id());
irq_exit();
}
{
u32 v, v1;
- #ifdef CONFIG_X86_64
exit_idle();
- #endif
irq_enter();
/* First tickle the hardware, only then report what went on. -- REW */
v = apic_read(APIC_ESR);
ack_APIC_irq();
atomic_inc(&irq_err_count);
- /* Here is what the APIC error bits mean:
- 0: Send CS error
- 1: Receive CS error
- 2: Send accept error
- 3: Receive accept error
- 4: Reserved
- 5: Send illegal vector
- 6: Received illegal vector
- 7: Illegal register address
- */
- printk(KERN_DEBUG "APIC error on CPU%d: %02x(%02x)\n",
+ /*
+ * Here is what the APIC error bits mean:
+ * 0: Send CS error
+ * 1: Receive CS error
+ * 2: Send accept error
+ * 3: Receive accept error
+ * 4: Reserved
+ * 5: Send illegal vector
+ * 6: Received illegal vector
+ * 7: Illegal register address
+ */
+ pr_debug("APIC error on CPU%d: %02x(%02x)\n",
smp_processor_id(), v , v1);
irq_exit();
}
outb(0x01, 0x23);
}
#endif
------- enable_apic_mode();
+++++++ if (apic->enable_apic_mode)
+++++++ apic->enable_apic_mode();
}
/**
void __cpuinit generic_processor_info(int apicid, int version)
{
int cpu;
- cpumask_t tmp_map;
/*
* Validate version
*/
if (version == 0x0) {
- printk(KERN_WARNING "BIOS bug, APIC version is 0 for CPU#%d! "
- "fixing up to 0x10. (tell your hw vendor)\n",
+ pr_warning("BIOS bug, APIC version is 0 for CPU#%d! "
+ "fixing up to 0x10. (tell your hw vendor)\n",
version);
version = 0x10;
}
apic_version[apicid] = version;
- if (num_processors >= NR_CPUS) {
- printk(KERN_WARNING "WARNING: NR_CPUS limit of %i reached."
- " Processor ignored.\n", NR_CPUS);
+ if (num_processors >= nr_cpu_ids) {
+ int max = nr_cpu_ids;
+ int thiscpu = max + disabled_cpus;
+
+ pr_warning(
+ "ACPI: NR_CPUS/possible_cpus limit of %i reached."
+ " Processor %d/0x%x ignored.\n", max, thiscpu, apicid);
+
+ disabled_cpus++;
return;
}
num_processors++;
- cpus_complement(tmp_map, cpu_present_map);
- cpu = first_cpu(tmp_map);
+ cpu = cpumask_next_zero(-1, cpu_present_mask);
+
+++ if (version != apic_version[boot_cpu_physical_apicid])
+++ WARN_ONCE(1,
+++ "ACPI: apic version mismatch, bootcpu: %x cpu %d: %x\n",
+++ apic_version[boot_cpu_physical_apicid], cpu, version);
+ +
physid_set(apicid, phys_cpu_present_map);
if (apicid == boot_cpu_physical_apicid) {
/*
}
#endif
-------#if defined(CONFIG_X86_SMP) || defined(CONFIG_X86_64)
------- /* are we being called early in kernel startup? */
------- if (early_per_cpu_ptr(x86_cpu_to_apicid)) {
------- u16 *cpu_to_apicid = early_per_cpu_ptr(x86_cpu_to_apicid);
------- u16 *bios_cpu_apicid = early_per_cpu_ptr(x86_bios_cpu_apicid);
-------
------- cpu_to_apicid[cpu] = apicid;
------- bios_cpu_apicid[cpu] = apicid;
------- } else {
------- per_cpu(x86_cpu_to_apicid, cpu) = apicid;
------- per_cpu(x86_bios_cpu_apicid, cpu) = apicid;
------- }
+++++++#if defined(CONFIG_SMP) || defined(CONFIG_X86_64)
+++++++ early_per_cpu(x86_cpu_to_apicid, cpu) = apicid;
+++++++ early_per_cpu(x86_bios_cpu_apicid, cpu) = apicid;
#endif
- cpu_set(cpu, cpu_possible_map);
- cpu_set(cpu, cpu_present_map);
+ set_cpu_possible(cpu, true);
+ set_cpu_present(cpu, true);
}
-------#ifdef CONFIG_X86_64
int hard_smp_processor_id(void)
{
return read_apic_id();
}
+++++++
+++++++void default_init_apic_ldr(void)
+++++++{
+++++++ unsigned long val;
+++++++
+++++++ apic_write(APIC_DFR, APIC_DFR_VALUE);
+++++++ val = apic_read(APIC_LDR) & ~APIC_LDR_MASK;
+++++++ val |= SET_APIC_LOGICAL_ID(1UL << smp_processor_id());
+++++++ apic_write(APIC_LDR, val);
+++++++}
+++++++
+++++++#ifdef CONFIG_X86_32
+++++++int default_apicid_to_node(int logical_apicid)
+++++++{
+++++++#ifdef CONFIG_SMP
+++++++ return apicid_2_node[hard_smp_processor_id()];
+++++++#else
+++++++ return 0;
+++++++#endif
+++++++}
#endif
/*
bios_cpu_apicid = early_per_cpu_ptr(x86_bios_cpu_apicid);
bitmap_zero(clustermap, NUM_APIC_CLUSTERS);
- for (i = 0; i < NR_CPUS; i++) {
+ for (i = 0; i < nr_cpu_ids; i++) {
/* are we being called early in kernel startup? */
if (bios_cpu_apicid) {
id = bios_cpu_apicid[i];
- }
- else if (i < nr_cpu_ids) {
+ } else if (i < nr_cpu_ids) {
if (cpu_present(i))
id = per_cpu(x86_bios_cpu_apicid, i);
else
continue;
- }
- else
+ } else
break;
if (id != BAD_APICID)
else if (strcmp("verbose", arg) == 0)
apic_verbosity = APIC_VERBOSE;
else {
- printk(KERN_WARNING "APIC Verbosity level %s not recognised"
+ pr_warning("APIC Verbosity level %s not recognised"
" use apic=verbose or apic=debug\n", arg);
return -EINVAL;
}
#include <asm/io.h>
#include <asm/nmi.h>
#include <asm/smp.h>
+ #include <asm/atomic.h>
#include <asm/apicdef.h>
-------#include <mach_mpparse.h>
+ #include <asm/genapic.h>
+ #include <asm/setup.h>
/*
* ES7000 chipsets
return gsi;
}
-- ----static void noop_wait_for_deassert(atomic_t *deassert_not_used)
-- ----{
-- ----}
-- ----
+ static int wakeup_secondary_cpu_via_mip(int cpu, unsigned long eip)
+ {
+ unsigned long vect = 0, psaival = 0;
+
+ if (psai == NULL)
+ return -1;
+
+ vect = ((unsigned long)__pa(eip)/0x1000) << 16;
+ psaival = (0x1000000 | vect | cpu);
+
+ while (*psai & 0x1000000)
+ ;
+
+ *psai = psaival;
+
+ return 0;
+ }
+
-- ---- genapic->wakeup_cpu = wakeup_secondary_cpu_via_mip;
+ static int __init es7000_update_genapic(void)
+ {
-- ---- genapic->wait_for_init_deassert = noop_wait_for_deassert;
-- ---- genapic->wakeup_cpu = wakeup_secondary_cpu_via_mip;
+++++++ apic->wakeup_cpu = wakeup_secondary_cpu_via_mip;
+
+ /* MPENTIUMIII */
+ if (boot_cpu_data.x86 == 6 &&
+ (boot_cpu_data.x86_model >= 7 || boot_cpu_data.x86_model <= 11)) {
+ es7000_update_genapic_to_cluster();
+++++++ apic->wait_for_init_deassert = NULL;
+++++++ apic->wakeup_cpu = wakeup_secondary_cpu_via_mip;
+ }
+
+ return 0;
+ }
+
void __init
setup_unisys(void)
{
else
es7000_plat = ES7000_CLASSIC;
ioapic_renumber_irq = es7000_rename_gsi;
+
+ x86_quirks->update_genapic = es7000_update_genapic;
}
/*
{
struct acpi_table_header *header = NULL;
int i = 0;
+ + ++++ acpi_size tbl_size;
- - ---- while (ACPI_SUCCESS(acpi_get_table("OEM1", i++, &header))) {
+ + ++++ while (ACPI_SUCCESS(acpi_get_table_with_size("OEM1", i++, &header, &tbl_size))) {
if (!memcmp((char *) &header->oem_id, "UNISYS", 6)) {
struct oem_table *t = (struct oem_table *)header;
oem_addrX = t->OEMTableAddr;
oem_size = t->OEMTableSize;
+ + ++++ early_acpi_os_unmap_memory(header, tbl_size);
*oem_addr = (unsigned long)__acpi_map_table(oem_addrX,
oem_size);
return 0;
}
+ + ++++ early_acpi_os_unmap_memory(header, tbl_size);
}
return -1;
}
void __init unmap_unisys_acpi_oem_table(unsigned long oem_addr)
{
+ + ++++ if (!oem_addr)
+ + ++++ return;
+ + ++++
+ + ++++ __acpi_unmap_table((char *)oem_addr, oem_size);
}
#endif
return status;
}
-- ----void __init
-- ----es7000_sw_apic(void)
-- ----{
-- ---- if (es7000_plat) {
-- ---- int mip_status;
-- ---- struct mip_reg es7000_mip_reg;
-- ----
-- ---- printk("ES7000: Enabling APIC mode.\n");
-- ---- memset(&es7000_mip_reg, 0, sizeof(struct mip_reg));
-- ---- es7000_mip_reg.off_0 = MIP_SW_APIC;
-- ---- es7000_mip_reg.off_38 = (MIP_VALID);
-- ---- while ((mip_status = es7000_mip_write(&es7000_mip_reg)) != 0)
-- ---- printk("es7000_sw_apic: command failed, status = %x\n",
-- ---- mip_status);
- int
- es7000_start_cpu(int cpu, unsigned long eip)
+++++++void __init es7000_enable_apic_mode(void)
++ ++++{
- unsigned long vect = 0, psaival = 0;
+++++++ struct mip_reg es7000_mip_reg;
+++++++ int mip_status;
++ ++++
- if (psai == NULL)
- return -1;
+++++++ if (!es7000_plat)
+ return;
++ ++++
- vect = ((unsigned long)__pa(eip)/0x1000) << 16;
- psaival = (0x1000000 | vect | cpu);
+++++++ printk("ES7000: Enabling APIC mode.\n");
+++++++ memset(&es7000_mip_reg, 0, sizeof(struct mip_reg));
+++++++ es7000_mip_reg.off_0 = MIP_SW_APIC;
+++++++ es7000_mip_reg.off_38 = MIP_VALID;
++ ++++
- while (*psai & 0x1000000)
- ;
+++++++ while ((mip_status = es7000_mip_write(&es7000_mip_reg)) != 0) {
+++++++ printk("es7000_enable_apic_mode: command failed, status = %x\n",
+++++++ mip_status);
+++++++ }
+++++++}
+++++++
+++++++/*
+++++++ * APIC driver for the Unisys ES7000 chipset.
+++++++ */
+++++++#define APIC_DEFINITION 1
+++++++#include <linux/threads.h>
+++++++#include <linux/cpumask.h>
+++++++#include <asm/mpspec.h>
+++++++#include <asm/genapic.h>
+++++++#include <asm/fixmap.h>
+++++++#include <asm/apicdef.h>
+++++++#include <linux/kernel.h>
+++++++#include <linux/string.h>
+++++++#include <linux/init.h>
+++++++#include <linux/acpi.h>
+++++++#include <linux/smp.h>
+++++++#include <asm/ipi.h>
+++++++
+++++++#define APIC_DFR_VALUE_CLUSTER (APIC_DFR_CLUSTER)
+++++++#define INT_DELIVERY_MODE_CLUSTER (dest_LowestPrio)
+++++++#define INT_DEST_MODE_CLUSTER (1) /* logical delivery broadcast to all procs */
+++++++
+++++++#define APIC_DFR_VALUE (APIC_DFR_FLAT)
+++++++
+++++++extern void es7000_enable_apic_mode(void);
+++++++extern int apic_version [MAX_APICS];
+++++++extern u8 cpu_2_logical_apicid[];
+++++++extern unsigned int boot_cpu_physical_apicid;
+++++++
+++++++extern int parse_unisys_oem (char *oemptr);
+++++++extern int find_unisys_acpi_oem_table(unsigned long *oem_addr);
+++++++extern void unmap_unisys_acpi_oem_table(unsigned long oem_addr);
+++++++extern void setup_unisys(void);
+++++++
+++++++#define apicid_cluster(apicid) (apicid & 0xF0)
+++++++#define xapic_phys_to_log_apicid(cpu) per_cpu(x86_bios_cpu_apicid, cpu)
+++++++
+++++++static void es7000_vector_allocation_domain(int cpu, cpumask_t *retmask)
+++++++{
+++++++ /* Careful. Some cpus do not strictly honor the set of cpus
+++++++ * specified in the interrupt destination when using lowest
+++++++ * priority interrupt delivery mode.
+++++++ *
+++++++ * In particular there was a hyperthreading cpu observed to
+++++++ * deliver interrupts to the wrong hyperthread when only one
+++++++ * hyperthread was specified in the interrupt desitination.
+++++++ */
+++++++ *retmask = (cpumask_t){ { [0] = APIC_ALL_CPUS, } };
+++++++}
++ ++++
- *psai = psaival;
++ ++++
+++++++static void es7000_wait_for_init_deassert(atomic_t *deassert)
+++++++{
+++++++#ifndef CONFIG_ES7000_CLUSTERED_APIC
+++++++ while (!atomic_read(deassert))
+++++++ cpu_relax();
+++++++#endif
+++++++ return;
+++++++}
+++++++
+++++++static unsigned int es7000_get_apic_id(unsigned long x)
+++++++{
+++++++ return (x >> 24) & 0xFF;
+++++++}
+++++++
+++++++#ifdef CONFIG_ACPI
+++++++static int es7000_check_dsdt(void)
+++++++{
+++++++ struct acpi_table_header header;
+++++++
+++++++ if (ACPI_SUCCESS(acpi_get_table_header(ACPI_SIG_DSDT, 0, &header)) &&
+++++++ !strncmp(header.oem_id, "UNISYS", 6))
+++++++ return 1;
++ ++++ return 0;
+++++++}
+++++++#endif
++ ++++
+++++++static void es7000_send_IPI_mask(const struct cpumask *mask, int vector)
+++++++{
+++++++ default_send_IPI_mask_sequence_phys(mask, vector);
++ ++++}
++ ++++
- void __init
- es7000_sw_apic(void)
- {
- if (es7000_plat) {
- int mip_status;
- struct mip_reg es7000_mip_reg;
-
- printk("ES7000: Enabling APIC mode.\n");
- memset(&es7000_mip_reg, 0, sizeof(struct mip_reg));
- es7000_mip_reg.off_0 = MIP_SW_APIC;
- es7000_mip_reg.off_38 = (MIP_VALID);
- while ((mip_status = es7000_mip_write(&es7000_mip_reg)) != 0)
- printk("es7000_sw_apic: command failed, status = %x\n",
- mip_status);
- return;
+++++++static void es7000_send_IPI_allbutself(int vector)
+++++++{
+++++++ default_send_IPI_mask_allbutself_phys(cpu_online_mask, vector);
+++++++}
+++++++
+++++++static void es7000_send_IPI_all(int vector)
+++++++{
+++++++ es7000_send_IPI_mask(cpu_online_mask, vector);
+++++++}
+++++++
+++++++static int es7000_apic_id_registered(void)
+++++++{
+++++++ return 1;
+++++++}
+++++++
+++++++static const cpumask_t *target_cpus_cluster(void)
+++++++{
+++++++ return &CPU_MASK_ALL;
+++++++}
+++++++
+++++++static const cpumask_t *es7000_target_cpus(void)
+++++++{
+++++++ return &cpumask_of_cpu(smp_processor_id());
+++++++}
+++++++
+++++++static unsigned long
+++++++es7000_check_apicid_used(physid_mask_t bitmap, int apicid)
+++++++{
+++++++ return 0;
+++++++}
+++++++static unsigned long es7000_check_apicid_present(int bit)
+++++++{
+++++++ return physid_isset(bit, phys_cpu_present_map);
+++++++}
+++++++
+++++++static unsigned long calculate_ldr(int cpu)
+++++++{
+++++++ unsigned long id = xapic_phys_to_log_apicid(cpu);
+++++++
+++++++ return (SET_APIC_LOGICAL_ID(id));
+++++++}
+++++++
+++++++/*
+++++++ * Set up the logical destination ID.
+++++++ *
+++++++ * Intel recommends to set DFR, LdR and TPR before enabling
+++++++ * an APIC. See e.g. "AP-388 82489DX User's Manual" (Intel
+++++++ * document number 292116). So here it goes...
+++++++ */
+++++++static void es7000_init_apic_ldr_cluster(void)
+++++++{
+++++++ unsigned long val;
+++++++ int cpu = smp_processor_id();
+++++++
+++++++ apic_write(APIC_DFR, APIC_DFR_VALUE_CLUSTER);
+++++++ val = calculate_ldr(cpu);
+++++++ apic_write(APIC_LDR, val);
+++++++}
+++++++
+++++++static void es7000_init_apic_ldr(void)
+++++++{
+++++++ unsigned long val;
+++++++ int cpu = smp_processor_id();
+++++++
+++++++ apic_write(APIC_DFR, APIC_DFR_VALUE);
+++++++ val = calculate_ldr(cpu);
+++++++ apic_write(APIC_LDR, val);
+++++++}
+++++++
+++++++static void es7000_setup_apic_routing(void)
+++++++{
+++++++ int apic = per_cpu(x86_bios_cpu_apicid, smp_processor_id());
+++++++ printk("Enabling APIC mode: %s. Using %d I/O APICs, target cpus %lx\n",
+++++++ (apic_version[apic] == 0x14) ?
+++++++ "Physical Cluster" : "Logical Cluster",
+++++++ nr_ioapics, cpus_addr(*es7000_target_cpus())[0]);
+++++++}
+++++++
+++++++static int es7000_apicid_to_node(int logical_apicid)
+++++++{
+++++++ return 0;
+++++++}
+++++++
+++++++
+++++++static int es7000_cpu_present_to_apicid(int mps_cpu)
+++++++{
+++++++ if (!mps_cpu)
+++++++ return boot_cpu_physical_apicid;
+++++++ else if (mps_cpu < nr_cpu_ids)
+++++++ return (int) per_cpu(x86_bios_cpu_apicid, mps_cpu);
+++++++ else
+++++++ return BAD_APICID;
+++++++}
+++++++
+++++++static physid_mask_t es7000_apicid_to_cpu_present(int phys_apicid)
+++++++{
+++++++ static int id = 0;
+++++++ physid_mask_t mask;
+++++++
+++++++ mask = physid_mask_of_physid(id);
+++++++ ++id;
+++++++
+++++++ return mask;
+++++++}
+++++++
+++++++/* Mapping from cpu number to logical apicid */
+++++++static int es7000_cpu_to_logical_apicid(int cpu)
+++++++{
+++++++#ifdef CONFIG_SMP
+++++++ if (cpu >= nr_cpu_ids)
+++++++ return BAD_APICID;
+++++++ return (int)cpu_2_logical_apicid[cpu];
+++++++#else
+++++++ return logical_smp_processor_id();
+++++++#endif
+++++++}
+++++++
+++++++static physid_mask_t es7000_ioapic_phys_id_map(physid_mask_t phys_map)
+++++++{
+++++++ /* For clustered we don't have a good way to do this yet - hack */
+++++++ return physids_promote(0xff);
+++++++}
+++++++
+++++++static int es7000_check_phys_apicid_present(int cpu_physical_apicid)
+++++++{
+++++++ boot_cpu_physical_apicid = read_apic_id();
+++++++ return (1);
+++++++}
+++++++
+++++++static unsigned int
+++++++es7000_cpu_mask_to_apicid_cluster(const struct cpumask *cpumask)
+++++++{
+++++++ int cpus_found = 0;
+++++++ int num_bits_set;
+++++++ int apicid;
+++++++ int cpu;
+++++++
+++++++ num_bits_set = cpumask_weight(cpumask);
+++++++ /* Return id to all */
+++++++ if (num_bits_set == nr_cpu_ids)
+++++++ return 0xFF;
+++++++ /*
+++++++ * The cpus in the mask must all be on the apic cluster. If are not
+++++++ * on the same apicid cluster return default value of target_cpus():
+++++++ */
+++++++ cpu = cpumask_first(cpumask);
+++++++ apicid = es7000_cpu_to_logical_apicid(cpu);
+++++++
+++++++ while (cpus_found < num_bits_set) {
+++++++ if (cpumask_test_cpu(cpu, cpumask)) {
+++++++ int new_apicid = es7000_cpu_to_logical_apicid(cpu);
+++++++
+++++++ if (apicid_cluster(apicid) !=
+++++++ apicid_cluster(new_apicid)) {
+++++++ printk ("%s: Not a valid mask!\n", __func__);
+++++++
+++++++ return 0xFF;
+++++++ }
+++++++ apicid = new_apicid;
+++++++ cpus_found++;
+++++++ }
+++++++ cpu++;
++++++ }
+++++++ return apicid;
++++++}
+++++++
+++++++static unsigned int es7000_cpu_mask_to_apicid(const cpumask_t *cpumask)
+++++++{
+++++++ int cpus_found = 0;
+++++++ int num_bits_set;
+++++++ int apicid;
+++++++ int cpu;
+++++++
+++++++ num_bits_set = cpus_weight(*cpumask);
+++++++ /* Return id to all */
+++++++ if (num_bits_set == nr_cpu_ids)
+++++++ return es7000_cpu_to_logical_apicid(0);
+++++++ /*
+++++++ * The cpus in the mask must all be on the apic cluster. If are not
+++++++ * on the same apicid cluster return default value of target_cpus():
+++++++ */
+++++++ cpu = first_cpu(*cpumask);
+++++++ apicid = es7000_cpu_to_logical_apicid(cpu);
+++++++ while (cpus_found < num_bits_set) {
+++++++ if (cpu_isset(cpu, *cpumask)) {
+++++++ int new_apicid = es7000_cpu_to_logical_apicid(cpu);
+++++++
+++++++ if (apicid_cluster(apicid) !=
+++++++ apicid_cluster(new_apicid)) {
+++++++ printk ("%s: Not a valid mask!\n", __func__);
+++++++
+++++++ return es7000_cpu_to_logical_apicid(0);
+++++++ }
+++++++ apicid = new_apicid;
+++++++ cpus_found++;
+++++++ }
+++++++ cpu++;
++ ++++ }
+++++++ return apicid;
++ ++++}
+++++++
+++++++static unsigned int
+++++++es7000_cpu_mask_to_apicid_and(const struct cpumask *inmask,
+++++++ const struct cpumask *andmask)
+++++++{
+++++++ int apicid = es7000_cpu_to_logical_apicid(0);
+++++++ cpumask_var_t cpumask;
+++++++
+++++++ if (!alloc_cpumask_var(&cpumask, GFP_ATOMIC))
+++++++ return apicid;
+++++++
+++++++ cpumask_and(cpumask, inmask, andmask);
+++++++ cpumask_and(cpumask, cpumask, cpu_online_mask);
+++++++ apicid = es7000_cpu_mask_to_apicid(cpumask);
+++++++
+++++++ free_cpumask_var(cpumask);
+++++++
+++++++ return apicid;
+++++++}
+++++++
+++++++static int es7000_phys_pkg_id(int cpuid_apic, int index_msb)
+++++++{
+++++++ return cpuid_apic >> index_msb;
+++++++}
+++++++
+++++++void __init es7000_update_genapic_to_cluster(void)
+++++++{
+++++++ apic->target_cpus = target_cpus_cluster;
+++++++ apic->irq_delivery_mode = INT_DELIVERY_MODE_CLUSTER;
+++++++ apic->irq_dest_mode = INT_DEST_MODE_CLUSTER;
+++++++
+++++++ apic->init_apic_ldr = es7000_init_apic_ldr_cluster;
+++++++
+++++++ apic->cpu_mask_to_apicid = es7000_cpu_mask_to_apicid_cluster;
+++++++}
+++++++
+++++++static int probe_es7000(void)
+++++++{
+++++++ /* probed later in mptable/ACPI hooks */
+++++++ return 0;
+++++++}
+++++++
+++++++static __init int
+++++++es7000_mps_oem_check(struct mpc_table *mpc, char *oem, char *productid)
+++++++{
+++++++ if (mpc->oemptr) {
+++++++ struct mpc_oemtable *oem_table =
+++++++ (struct mpc_oemtable *)mpc->oemptr;
+++++++
+++++++ if (!strncmp(oem, "UNISYS", 6))
+++++++ return parse_unisys_oem((char *)oem_table);
+++++++ }
+++++++ return 0;
+++++++}
+++++++
+++++++#ifdef CONFIG_ACPI
+++++++/* Hook from generic ACPI tables.c */
+++++++static int __init es7000_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+++++++{
+++++++ unsigned long oem_addr = 0;
+++++++ int check_dsdt;
+++++++ int ret = 0;
+++++++
+++++++ /* check dsdt at first to avoid clear fix_map for oem_addr */
+++++++ check_dsdt = es7000_check_dsdt();
+++++++
+++++++ if (!find_unisys_acpi_oem_table(&oem_addr)) {
+++++++ if (check_dsdt)
+++++++ ret = parse_unisys_oem((char *)oem_addr);
+++++++ else {
+++++++ setup_unisys();
+++++++ ret = 1;
+++++++ }
+++++++ /*
+++++++ * we need to unmap it
+++++++ */
+++++++ unmap_unisys_acpi_oem_table(oem_addr);
+ + }
+++++++ return ret;
+++++++}
+++++++#else
+++++++static int __init es7000_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+++++++{
+++++++ return 0;
+ + }
+++++++#endif
+++++++
+++++++
+++++++struct genapic apic_es7000 = {
+++++++
+++++++ .name = "es7000",
+++++++ .probe = probe_es7000,
+++++++ .acpi_madt_oem_check = es7000_acpi_madt_oem_check,
+++++++ .apic_id_registered = es7000_apic_id_registered,
+++++++
+++++++ .irq_delivery_mode = dest_Fixed,
+++++++ /* phys delivery to target CPUs: */
+++++++ .irq_dest_mode = 0,
+++++++
+++++++ .target_cpus = es7000_target_cpus,
+++++++ .disable_esr = 1,
+++++++ .dest_logical = 0,
+++++++ .check_apicid_used = es7000_check_apicid_used,
+++++++ .check_apicid_present = es7000_check_apicid_present,
+++++++
+++++++ .vector_allocation_domain = es7000_vector_allocation_domain,
+++++++ .init_apic_ldr = es7000_init_apic_ldr,
+++++++
+++++++ .ioapic_phys_id_map = es7000_ioapic_phys_id_map,
+++++++ .setup_apic_routing = es7000_setup_apic_routing,
+++++++ .multi_timer_check = NULL,
+++++++ .apicid_to_node = es7000_apicid_to_node,
+++++++ .cpu_to_logical_apicid = es7000_cpu_to_logical_apicid,
+++++++ .cpu_present_to_apicid = es7000_cpu_present_to_apicid,
+++++++ .apicid_to_cpu_present = es7000_apicid_to_cpu_present,
+++++++ .setup_portio_remap = NULL,
+++++++ .check_phys_apicid_present = es7000_check_phys_apicid_present,
+++++++ .enable_apic_mode = es7000_enable_apic_mode,
+++++++ .phys_pkg_id = es7000_phys_pkg_id,
+++++++ .mps_oem_check = es7000_mps_oem_check,
+++++++
+++++++ .get_apic_id = es7000_get_apic_id,
+++++++ .set_apic_id = NULL,
+++++++ .apic_id_mask = 0xFF << 24,
+++++++
+++++++ .cpu_mask_to_apicid = es7000_cpu_mask_to_apicid,
+++++++ .cpu_mask_to_apicid_and = es7000_cpu_mask_to_apicid_and,
+++++++
+++++++ .send_IPI_mask = es7000_send_IPI_mask,
+++++++ .send_IPI_mask_allbutself = NULL,
+++++++ .send_IPI_allbutself = es7000_send_IPI_allbutself,
+++++++ .send_IPI_all = es7000_send_IPI_all,
+++++++ .send_IPI_self = default_send_IPI_self,
+++++++
+++++++ .wakeup_cpu = NULL,
+++++++
+++++++ .trampoline_phys_low = 0x467,
+++++++ .trampoline_phys_high = 0x469,
+++++++
+++++++ .wait_for_init_deassert = es7000_wait_for_init_deassert,
+++++++
+++++++ /* Nothing to do for most platforms, since cleared by the INIT cycle: */
+++++++ .smp_callin_clear_local_apic = NULL,
+++++++ .store_NMI_vector = NULL,
+++++++ .inquire_remote_apic = default_inquire_remote_apic,
+++++++};
#include <linux/init.h>
#include <linux/highmem.h>
#include <linux/pagemap.h>
+ #include <linux/pci.h>
#include <linux/pfn.h>
#include <linux/poison.h>
#include <linux/bootmem.h>
#include <asm/paravirt.h>
#include <asm/setup.h>
#include <asm/cacheflush.h>
-------#include <asm/smp.h>
unsigned int __VMALLOC_RESERVE = 128 << 20;
static int __initdata after_init_bootmem;
- static __init void *alloc_low_page(unsigned long *phys)
+ static __init void *alloc_low_page(void)
{
unsigned long pfn = table_end++;
void *adr;
adr = __va(pfn * PAGE_SIZE);
memset(adr, 0, PAGE_SIZE);
- *phys = pfn * PAGE_SIZE;
return adr;
}
pmd_t *pmd_table;
#ifdef CONFIG_X86_PAE
- unsigned long phys;
if (!(pgd_val(*pgd) & _PAGE_PRESENT)) {
if (after_init_bootmem)
pmd_table = (pmd_t *)alloc_bootmem_low_pages(PAGE_SIZE);
else
- pmd_table = (pmd_t *)alloc_low_page(&phys);
+ pmd_table = (pmd_t *)alloc_low_page();
paravirt_alloc_pmd(&init_mm, __pa(pmd_table) >> PAGE_SHIFT);
set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT));
pud = pud_offset(pgd, 0);
BUG_ON(pmd_table != pmd_offset(pud, 0));
+
+ return pmd_table;
}
#endif
pud = pud_offset(pgd, 0);
if (!page_table)
page_table =
(pte_t *)alloc_bootmem_low_pages(PAGE_SIZE);
- } else {
- unsigned long phys;
- page_table = (pte_t *)alloc_low_page(&phys);
- }
+ } else
+ page_table = (pte_t *)alloc_low_page();
paravirt_alloc_pte(&init_mm, __pa(page_table) >> PAGE_SHIFT);
set_pmd(pmd, __pmd(__pa(page_table) | _PAGE_TABLE));
return pte_offset_kernel(pmd, 0);
}
+++ static pte_t *__init page_table_kmap_check(pte_t *pte, pmd_t *pmd,
+++ unsigned long vaddr, pte_t *lastpte)
+++ {
+++ #ifdef CONFIG_HIGHMEM
+++ /*
+++ * Something (early fixmap) may already have put a pte
+++ * page here, which causes the page table allocation
+++ * to become nonlinear. Attempt to fix it, and if it
+++ * is still nonlinear then we have to bug.
+++ */
+++ int pmd_idx_kmap_begin = fix_to_virt(FIX_KMAP_END) >> PMD_SHIFT;
+++ int pmd_idx_kmap_end = fix_to_virt(FIX_KMAP_BEGIN) >> PMD_SHIFT;
+++
+++ if (pmd_idx_kmap_begin != pmd_idx_kmap_end
+++ && (vaddr >> PMD_SHIFT) >= pmd_idx_kmap_begin
+++ && (vaddr >> PMD_SHIFT) <= pmd_idx_kmap_end
+++ && ((__pa(pte) >> PAGE_SHIFT) < table_start
+++ || (__pa(pte) >> PAGE_SHIFT) >= table_end)) {
+++ pte_t *newpte;
+++ int i;
+++
+++ BUG_ON(after_init_bootmem);
+++ newpte = alloc_low_page();
+++ for (i = 0; i < PTRS_PER_PTE; i++)
+++ set_pte(newpte + i, pte[i]);
+++
+++ paravirt_alloc_pte(&init_mm, __pa(newpte) >> PAGE_SHIFT);
+++ set_pmd(pmd, __pmd(__pa(newpte)|_PAGE_TABLE));
+++ BUG_ON(newpte != pte_offset_kernel(pmd, 0));
+++ __flush_tlb_all();
+++
+++ paravirt_release_pte(__pa(pte) >> PAGE_SHIFT);
+++ pte = newpte;
+++ }
+++ BUG_ON(vaddr < fix_to_virt(FIX_KMAP_BEGIN - 1)
+++ && vaddr > fix_to_virt(FIX_KMAP_END)
+++ && lastpte && lastpte + PTRS_PER_PTE != pte);
+++ #endif
+++ return pte;
+++ }
+++
/*
* This function initializes a certain range of kernel virtual memory
* with new bootmem page tables, everywhere page tables are missing in
unsigned long vaddr;
pgd_t *pgd;
pmd_t *pmd;
+++ pte_t *pte = NULL;
vaddr = start;
pgd_idx = pgd_index(vaddr);
pmd = pmd + pmd_index(vaddr);
for (; (pmd_idx < PTRS_PER_PMD) && (vaddr != end);
pmd++, pmd_idx++) {
--- one_page_table_init(pmd);
+++ pte = page_table_kmap_check(one_page_table_init(pmd),
+++ pmd, vaddr, pte);
vaddr += PMD_SIZE;
}
{
if (pagenr <= 256)
return 1;
+ if (iomem_is_exclusive(pagenr << PAGE_SHIFT))
+ return 0;
if (!page_is_ram(pagenr))
return 1;
return 0;
#endif /* !CONFIG_NUMA */
#else
- # define permanent_kmaps_init(pgd_base) do { } while (0)
- # define set_highmem_pages_init() do { } while (0)
+ static inline void permanent_kmaps_init(pgd_t *pgd_base)
+ {
+ }
+ static inline void set_highmem_pages_init(void)
+ {
+ }
#endif /* CONFIG_HIGHMEM */
void __init native_pagetable_setup_start(pgd_t *base)
* Fixed mappings, only the page table structure has to be
* created - mappings will be set by set_fixmap():
*/
--- early_ioremap_clear();
vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
end = (FIXADDR_TOP + PMD_SIZE - 1) & PMD_MASK;
page_table_range_init(vaddr, end, pgd_base);
}
early_param("highmem", parse_highmem);
++++++ +#define MSG_HIGHMEM_TOO_BIG \
++++++ + "highmem size (%luMB) is bigger than pages available (%luMB)!\n"
++++++ +
++++++ +#define MSG_LOWMEM_TOO_SMALL \
++++++ + "highmem size (%luMB) results in <64MB lowmem, ignoring it!\n"
/*
------ - * Determine low and high memory ranges:
++++++ + * All of RAM fits into lowmem - but if user wants highmem
++++++ + * artificially via the highmem=x boot parameter then create
++++++ + * it:
*/
------ -void __init find_low_pfn_range(void)
++++++ +void __init lowmem_pfn_init(void)
{
------ - /* it could update max_pfn */
------ -
/* max_low_pfn is 0, we already have early_res support */
------ -
max_low_pfn = max_pfn;
------ - if (max_low_pfn > MAXMEM_PFN) {
------ - if (highmem_pages == -1)
------ - highmem_pages = max_pfn - MAXMEM_PFN;
------ - if (highmem_pages + MAXMEM_PFN < max_pfn)
------ - max_pfn = MAXMEM_PFN + highmem_pages;
------ - if (highmem_pages + MAXMEM_PFN > max_pfn) {
------ - printk(KERN_WARNING "only %luMB highmem pages "
------ - "available, ignoring highmem size of %uMB.\n",
------ - pages_to_mb(max_pfn - MAXMEM_PFN),
++++++ +
++++++ + if (highmem_pages == -1)
++++++ + highmem_pages = 0;
++++++ +#ifdef CONFIG_HIGHMEM
++++++ + if (highmem_pages >= max_pfn) {
++++++ + printk(KERN_ERR MSG_HIGHMEM_TOO_BIG,
++++++ + pages_to_mb(highmem_pages), pages_to_mb(max_pfn));
++++++ + highmem_pages = 0;
++++++ + }
++++++ + if (highmem_pages) {
++++++ + if (max_low_pfn - highmem_pages < 64*1024*1024/PAGE_SIZE) {
++++++ + printk(KERN_ERR MSG_LOWMEM_TOO_SMALL,
pages_to_mb(highmem_pages));
highmem_pages = 0;
}
------ - max_low_pfn = MAXMEM_PFN;
++++++ + max_low_pfn -= highmem_pages;
++++++ + }
++++++ +#else
++++++ + if (highmem_pages)
++++++ + printk(KERN_ERR "ignoring highmem size on non-highmem kernel!\n");
++++++ +#endif
++++++ +}
++++++ +
++++++ +#define MSG_HIGHMEM_TOO_SMALL \
++++++ + "only %luMB highmem pages available, ignoring highmem size of %luMB!\n"
++++++ +
++++++ +#define MSG_HIGHMEM_TRIMMED \
++++++ + "Warning: only 4GB will be used. Use a HIGHMEM64G enabled kernel!\n"
++++++ +/*
++++++ + * We have more RAM than fits into lowmem - we try to put it into
++++++ + * highmem, also taking the highmem=x boot parameter into account:
++++++ + */
++++++ +void __init highmem_pfn_init(void)
++++++ +{
++++++ + max_low_pfn = MAXMEM_PFN;
++++++ +
++++++ + if (highmem_pages == -1)
++++++ + highmem_pages = max_pfn - MAXMEM_PFN;
++++++ +
++++++ + if (highmem_pages + MAXMEM_PFN < max_pfn)
++++++ + max_pfn = MAXMEM_PFN + highmem_pages;
++++++ +
++++++ + if (highmem_pages + MAXMEM_PFN > max_pfn) {
++++++ + printk(KERN_WARNING MSG_HIGHMEM_TOO_SMALL,
++++++ + pages_to_mb(max_pfn - MAXMEM_PFN),
++++++ + pages_to_mb(highmem_pages));
++++++ + highmem_pages = 0;
++++++ + }
#ifndef CONFIG_HIGHMEM
------ - /* Maximum memory usable is what is directly addressable */
------ - printk(KERN_WARNING "Warning only %ldMB will be used.\n",
------ - MAXMEM>>20);
------ - if (max_pfn > MAX_NONPAE_PFN)
------ - printk(KERN_WARNING
------ - "Use a HIGHMEM64G enabled kernel.\n");
------ - else
------ - printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
------ - max_pfn = MAXMEM_PFN;
++++++ + /* Maximum memory usable is what is directly addressable */
++++++ + printk(KERN_WARNING "Warning only %ldMB will be used.\n", MAXMEM>>20);
++++++ + if (max_pfn > MAX_NONPAE_PFN)
++++++ + printk(KERN_WARNING "Use a HIGHMEM64G enabled kernel.\n");
++++++ + else
++++++ + printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
++++++ + max_pfn = MAXMEM_PFN;
#else /* !CONFIG_HIGHMEM */
#ifndef CONFIG_HIGHMEM64G
------ - if (max_pfn > MAX_NONPAE_PFN) {
------ - max_pfn = MAX_NONPAE_PFN;
------ - printk(KERN_WARNING "Warning only 4GB will be used."
------ - "Use a HIGHMEM64G enabled kernel.\n");
------ - }
++++++ + if (max_pfn > MAX_NONPAE_PFN) {
++++++ + max_pfn = MAX_NONPAE_PFN;
++++++ + printk(KERN_WARNING MSG_HIGHMEM_TRIMMED);
++++++ + }
#endif /* !CONFIG_HIGHMEM64G */
#endif /* !CONFIG_HIGHMEM */
------ - } else {
------ - if (highmem_pages == -1)
------ - highmem_pages = 0;
------ -#ifdef CONFIG_HIGHMEM
------ - if (highmem_pages >= max_pfn) {
------ - printk(KERN_ERR "highmem size specified (%uMB) is "
------ - "bigger than pages available (%luMB)!.\n",
------ - pages_to_mb(highmem_pages),
------ - pages_to_mb(max_pfn));
------ - highmem_pages = 0;
------ - }
------ - if (highmem_pages) {
------ - if (max_low_pfn - highmem_pages <
------ - 64*1024*1024/PAGE_SIZE){
------ - printk(KERN_ERR "highmem size %uMB results in "
------ - "smaller than 64MB lowmem, ignoring it.\n"
------ - , pages_to_mb(highmem_pages));
------ - highmem_pages = 0;
------ - }
------ - max_low_pfn -= highmem_pages;
------ - }
------ -#else
------ - if (highmem_pages)
------ - printk(KERN_ERR "ignoring highmem size on non-highmem"
------ - " kernel!\n");
------ -#endif
------ - }
++++++ +}
++++++ +
++++++ +/*
++++++ + * Determine low and high memory ranges:
++++++ + */
++++++ +void __init find_low_pfn_range(void)
++++++ +{
++++++ + /* it could update max_pfn */
++++++ +
++++++ + if (max_pfn <= MAXMEM_PFN)
++++++ + lowmem_pfn_init();
++++++ + else
++++++ + highmem_pfn_init();
}
#ifndef CONFIG_NEED_MULTIPLE_NODES
tables += PAGE_ALIGN(ptes * sizeof(pte_t));
/* for fixmap */
--- tables += PAGE_SIZE * 2;
+++ tables += PAGE_ALIGN(__end_of_fixed_addresses * sizeof(pte_t));
/*
* RED-PEN putting page tables only on node 0 could
int codesize, reservedpages, datasize, initsize;
int tmp;
- start_periodic_check_for_corruption();
+ pci_iommu_alloc();
#ifdef CONFIG_FLATMEM
BUG_ON(!mem_map);
(unsigned long)&_text, (unsigned long)&_etext,
((unsigned long)&_etext - (unsigned long)&_text) >> 10);
+ /*
+ * Check boundaries twice: Some fundamental inconsistencies can
+ * be detected at build time already.
+ */
+ #define __FIXADDR_TOP (-PAGE_SIZE)
+ #ifdef CONFIG_HIGHMEM
+ BUILD_BUG_ON(PKMAP_BASE + LAST_PKMAP*PAGE_SIZE > FIXADDR_START);
+ BUILD_BUG_ON(VMALLOC_END > PKMAP_BASE);
+ #endif
+ #define high_memory (-128UL << 20)
+ BUILD_BUG_ON(VMALLOC_START >= VMALLOC_END);
+ #undef high_memory
+ #undef __FIXADDR_TOP
+
#ifdef CONFIG_HIGHMEM
BUG_ON(PKMAP_BASE + LAST_PKMAP*PAGE_SIZE > FIXADDR_START);
BUG_ON(VMALLOC_END > PKMAP_BASE);
#endif
- BUG_ON(VMALLOC_START > VMALLOC_END);
+ BUG_ON(VMALLOC_START >= VMALLOC_END);
BUG_ON((unsigned long)high_memory > VMALLOC_START);
if (boot_cpu_data.wp_works_ok < 0)
unsigned long start_pfn = start >> PAGE_SHIFT;
unsigned long nr_pages = size >> PAGE_SHIFT;
- return __add_pages(zone, start_pfn, nr_pages);
+ return __add_pages(nid, zone, start_pfn, nr_pages);
}
#endif