mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 08:14:15 +08:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6: (98 commits) sparc: move select of ARCH_SUPPORTS_MSI sparc: drop SUN_IO sparc: unify sections.h sparc: use .data.init_task section for init_thread_union sparc: fix array overrun check in of_device_64.c sparc: unify module.c sparc64: prepare module_64.c for unification sparc64: use bit neutral Elf symbols sparc: unify module.h sparc: introduce CONFIG_BITS sparc: fix hardirq.h removal fallout sparc64: do not export pus_fs_struct sparc: use sparc64 version of scatterlist.h sparc: Commonize memcmp assembler. sparc: Unify strlen assembler. sparc: Add asm/asm.h sparc: Kill memcmp_32.S code which has been ifdef'd out for centuries. sparc: replace for_each_cpu_mask_nr with for_each_cpu sparc: fix sparse warnings in irq_32.c sparc: add include guards to kernel.h ...
This commit is contained in:
commit
6de71484cf
9
Makefile
9
Makefile
@ -205,13 +205,14 @@ ifeq ($(ARCH),x86_64)
|
||||
SRCARCH := x86
|
||||
endif
|
||||
|
||||
# Where to locate arch specific headers
|
||||
# Additional ARCH settings for sparc
|
||||
ifeq ($(ARCH),sparc64)
|
||||
hdr-arch := sparc
|
||||
else
|
||||
hdr-arch := $(SRCARCH)
|
||||
SRCARCH := sparc
|
||||
endif
|
||||
|
||||
# Where to locate arch specific headers
|
||||
hdr-arch := $(SRCARCH)
|
||||
|
||||
KCONFIG_CONFIG ?= .config
|
||||
|
||||
# SHELL used by kbuild
|
||||
|
@ -4,21 +4,116 @@
|
||||
|
||||
mainmenu "Linux/SPARC Kernel Configuration"
|
||||
|
||||
config SPARC
|
||||
bool
|
||||
default y
|
||||
select HAVE_IDE
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_ARCH_KGDB if !SMP || SPARC64
|
||||
select HAVE_ARCH_TRACEHOOK
|
||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||
select RTC_CLASS
|
||||
select RTC_DRV_M48T59
|
||||
|
||||
# Identify this as a Sparc32 build
|
||||
config SPARC32
|
||||
bool
|
||||
default y if ARCH = "sparc"
|
||||
help
|
||||
SPARC is a family of RISC microprocessors designed and marketed by
|
||||
Sun Microsystems, incorporated. They are very widely found in Sun
|
||||
workstations and clones. This port covers the original 32-bit SPARC;
|
||||
it is old and stable and usually considered one of the "big three"
|
||||
along with the Intel and Alpha ports. The UltraLinux project
|
||||
maintains both the SPARC32 and SPARC64 ports; its web page is
|
||||
available at <http://www.ultralinux.org/>.
|
||||
|
||||
config SPARC64
|
||||
bool
|
||||
default y if ARCH = "sparc64"
|
||||
select ARCH_SUPPORTS_MSI
|
||||
select HAVE_FUNCTION_TRACER
|
||||
select HAVE_KRETPROBES
|
||||
select HAVE_KPROBES
|
||||
select HAVE_LMB
|
||||
select USE_GENERIC_SMP_HELPERS if SMP
|
||||
select RTC_DRV_CMOS
|
||||
select RTC_DRV_BQ4802
|
||||
select RTC_DRV_SUN4V
|
||||
select RTC_DRV_STARFIRE
|
||||
|
||||
config ARCH_DEFCONFIG
|
||||
string
|
||||
default "arch/sparc/configs/sparc32_defconfig" if SPARC32
|
||||
default "arch/sparc/configs/sparc64_defconfig" if SPARC64
|
||||
|
||||
# CONFIG_BITS can be used at source level to get 32/64 bits
|
||||
config BITS
|
||||
int
|
||||
default 32 if SPARC32
|
||||
default 64 if SPARC64
|
||||
|
||||
config 64BIT
|
||||
def_bool y if SPARC64
|
||||
|
||||
config GENERIC_TIME
|
||||
bool
|
||||
default y if SPARC64
|
||||
|
||||
config GENERIC_CMOS_UPDATE
|
||||
bool
|
||||
default y if SPARC64
|
||||
|
||||
config GENERIC_CLOCKEVENTS
|
||||
bool
|
||||
default y if SPARC64
|
||||
|
||||
config IOMMU_HELPER
|
||||
bool
|
||||
default y if SPARC64
|
||||
|
||||
config QUICKLIST
|
||||
bool
|
||||
default y if SPARC64
|
||||
|
||||
config STACKTRACE_SUPPORT
|
||||
bool
|
||||
default y if SPARC64
|
||||
|
||||
config LOCKDEP_SUPPORT
|
||||
bool
|
||||
default y if SPARC64
|
||||
|
||||
config HAVE_LATENCYTOP_SUPPORT
|
||||
bool
|
||||
default y if SPARC64
|
||||
|
||||
config AUDIT_ARCH
|
||||
bool
|
||||
default y
|
||||
|
||||
config HAVE_SETUP_PER_CPU_AREA
|
||||
def_bool y if SPARC64
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
bool
|
||||
def_bool y if SPARC64
|
||||
|
||||
config MMU
|
||||
bool
|
||||
default y
|
||||
|
||||
config HIGHMEM
|
||||
bool
|
||||
default y
|
||||
default y if SPARC32
|
||||
|
||||
config ZONE_DMA
|
||||
bool
|
||||
default y
|
||||
default y if SPARC32
|
||||
|
||||
config GENERIC_ISA_DMA
|
||||
bool
|
||||
default y
|
||||
default y if SPARC32
|
||||
|
||||
config GENERIC_GPIO
|
||||
bool
|
||||
@ -31,15 +126,11 @@ config ARCH_NO_VIRT_TO_BUS
|
||||
config OF
|
||||
def_bool y
|
||||
|
||||
config HZ
|
||||
int
|
||||
default 100
|
||||
|
||||
source "init/Kconfig"
|
||||
|
||||
source "kernel/Kconfig.freezer"
|
||||
|
||||
menu "General machine setup"
|
||||
menu "Processor type and features"
|
||||
|
||||
config SMP
|
||||
bool "Symmetric multi-processing support (does not work on sun4/sun4c)"
|
||||
@ -64,82 +155,269 @@ config SMP
|
||||
If you don't know what to do here, say N.
|
||||
|
||||
config NR_CPUS
|
||||
int "Maximum number of CPUs (2-32)"
|
||||
range 2 32
|
||||
int "Maximum number of CPUs"
|
||||
depends on SMP
|
||||
default "32"
|
||||
range 2 32 if SPARC32
|
||||
range 2 1024 if SPARC64
|
||||
default 32 if SPARC32
|
||||
default 64 if SPARC64
|
||||
|
||||
config SPARC
|
||||
source kernel/Kconfig.hz
|
||||
|
||||
config RWSEM_GENERIC_SPINLOCK
|
||||
bool
|
||||
default y if SPARC32
|
||||
|
||||
config RWSEM_XCHGADD_ALGORITHM
|
||||
bool
|
||||
default y if SPARC64
|
||||
|
||||
config GENERIC_FIND_NEXT_BIT
|
||||
bool
|
||||
default y
|
||||
select HAVE_IDE
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_ARCH_KGDB if !SMP
|
||||
select HAVE_ARCH_TRACEHOOK
|
||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||
select RTC_CLASS
|
||||
select RTC_DRV_M48T59
|
||||
|
||||
# Identify this as a Sparc32 build
|
||||
config SPARC32
|
||||
config GENERIC_HWEIGHT
|
||||
bool
|
||||
default y if !ULTRA_HAS_POPULATION_COUNT
|
||||
|
||||
config GENERIC_CALIBRATE_DELAY
|
||||
bool
|
||||
default y
|
||||
|
||||
config ARCH_MAY_HAVE_PC_FDC
|
||||
bool
|
||||
default y
|
||||
|
||||
config ARCH_HAS_ILOG2_U32
|
||||
bool
|
||||
default n
|
||||
|
||||
config ARCH_HAS_ILOG2_U64
|
||||
bool
|
||||
default n
|
||||
|
||||
config EMULATED_CMPXCHG
|
||||
bool
|
||||
default y if SPARC32
|
||||
help
|
||||
Sparc32 does not have a CAS instruction like sparc64. cmpxchg()
|
||||
is emulated, and therefore it is not completely atomic.
|
||||
|
||||
# Makefile helpers
|
||||
config SPARC32_SMP
|
||||
bool
|
||||
default y
|
||||
depends on SPARC32 && SMP
|
||||
|
||||
config SPARC64_SMP
|
||||
bool
|
||||
default y
|
||||
depends on SPARC64 && SMP
|
||||
|
||||
choice
|
||||
prompt "Kernel page size" if SPARC64
|
||||
default SPARC64_PAGE_SIZE_8KB
|
||||
|
||||
config SPARC64_PAGE_SIZE_8KB
|
||||
bool "8KB"
|
||||
help
|
||||
This lets you select the page size of the kernel.
|
||||
|
||||
8KB and 64KB work quite well, since SPARC ELF sections
|
||||
provide for up to 64KB alignment.
|
||||
|
||||
If you don't know what to do, choose 8KB.
|
||||
|
||||
config SPARC64_PAGE_SIZE_64KB
|
||||
bool "64KB"
|
||||
|
||||
endchoice
|
||||
|
||||
config SECCOMP
|
||||
bool "Enable seccomp to safely compute untrusted bytecode"
|
||||
depends on SPARC64 && PROC_FS
|
||||
default y
|
||||
help
|
||||
SPARC is a family of RISC microprocessors designed and marketed by
|
||||
Sun Microsystems, incorporated. They are very widely found in Sun
|
||||
workstations and clones. This port covers the original 32-bit SPARC;
|
||||
it is old and stable and usually considered one of the "big three"
|
||||
along with the Intel and Alpha ports. The UltraLinux project
|
||||
maintains both the SPARC32 and SPARC64 ports; its web page is
|
||||
available at <http://www.ultralinux.org/>.
|
||||
This kernel feature is useful for number crunching applications
|
||||
that may need to compute untrusted bytecode during their
|
||||
execution. By using pipes or other transports made available to
|
||||
the process as file descriptors supporting the read/write
|
||||
syscalls, it's possible to isolate those applications in
|
||||
their own address space using seccomp. Once seccomp is
|
||||
enabled via /proc/<pid>/seccomp, it cannot be disabled
|
||||
and the task is only allowed to execute a few safe syscalls
|
||||
defined by each seccomp mode.
|
||||
|
||||
If unsure, say Y. Only embedded should say N here.
|
||||
|
||||
config HOTPLUG_CPU
|
||||
bool "Support for hot-pluggable CPUs"
|
||||
depends on SPARC64 && SMP
|
||||
select HOTPLUG
|
||||
help
|
||||
Say Y here to experiment with turning CPUs off and on. CPUs
|
||||
can be controlled through /sys/devices/system/cpu/cpu#.
|
||||
Say N if you want to disable CPU hotplug.
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
bool
|
||||
default y if SPARC64
|
||||
|
||||
source "kernel/time/Kconfig"
|
||||
|
||||
if SPARC64
|
||||
source "drivers/cpufreq/Kconfig"
|
||||
|
||||
config US3_FREQ
|
||||
tristate "UltraSPARC-III CPU Frequency driver"
|
||||
depends on CPU_FREQ
|
||||
select CPU_FREQ_TABLE
|
||||
help
|
||||
This adds the CPUFreq driver for UltraSPARC-III processors.
|
||||
|
||||
For details, take a look at <file:Documentation/cpu-freq>.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config US2E_FREQ
|
||||
tristate "UltraSPARC-IIe CPU Frequency driver"
|
||||
depends on CPU_FREQ
|
||||
select CPU_FREQ_TABLE
|
||||
help
|
||||
This adds the CPUFreq driver for UltraSPARC-IIe processors.
|
||||
|
||||
For details, take a look at <file:Documentation/cpu-freq>.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
endif
|
||||
|
||||
config US3_MC
|
||||
tristate "UltraSPARC-III Memory Controller driver"
|
||||
depends on SPARC64
|
||||
default y
|
||||
help
|
||||
This adds a driver for the UltraSPARC-III memory controller.
|
||||
Loading this driver allows exact mnemonic strings to be
|
||||
printed in the event of a memory error, so that the faulty DIMM
|
||||
on the motherboard can be matched to the error.
|
||||
|
||||
If in doubt, say Y, as this information can be very useful.
|
||||
|
||||
# Global things across all Sun machines.
|
||||
config ISA
|
||||
bool
|
||||
help
|
||||
ISA is found on Espresso only and is not supported currently.
|
||||
Say N
|
||||
|
||||
config EISA
|
||||
bool
|
||||
help
|
||||
EISA is not supported.
|
||||
Say N
|
||||
|
||||
config MCA
|
||||
bool
|
||||
help
|
||||
MCA is not supported.
|
||||
Say N
|
||||
|
||||
config PCMCIA
|
||||
tristate
|
||||
---help---
|
||||
Say Y here if you want to attach PCMCIA- or PC-cards to your Linux
|
||||
computer. These are credit-card size devices such as network cards,
|
||||
modems or hard drives often used with laptops computers. There are
|
||||
actually two varieties of these cards: the older 16 bit PCMCIA cards
|
||||
and the newer 32 bit CardBus cards. If you want to use CardBus
|
||||
cards, you need to say Y here and also to "CardBus support" below.
|
||||
|
||||
To use your PC-cards, you will need supporting software from David
|
||||
Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
|
||||
for location). Please also read the PCMCIA-HOWTO, available from
|
||||
<http://www.tldp.org/docs.html#howto>.
|
||||
|
||||
To compile this driver as modules, choose M here: the
|
||||
modules will be called pcmcia_core and ds.
|
||||
|
||||
config SBUS
|
||||
config GENERIC_LOCKBREAK
|
||||
bool
|
||||
default y
|
||||
depends on SPARC64 && SMP && PREEMPT
|
||||
|
||||
config SBUSCHAR
|
||||
bool
|
||||
choice
|
||||
prompt "SPARC64 Huge TLB Page Size"
|
||||
depends on SPARC64 && HUGETLB_PAGE
|
||||
default HUGETLB_PAGE_SIZE_4MB
|
||||
|
||||
config HUGETLB_PAGE_SIZE_4MB
|
||||
bool "4MB"
|
||||
|
||||
config HUGETLB_PAGE_SIZE_512K
|
||||
bool "512K"
|
||||
|
||||
config HUGETLB_PAGE_SIZE_64K
|
||||
depends on !SPARC64_PAGE_SIZE_64KB
|
||||
bool "64K"
|
||||
|
||||
endchoice
|
||||
|
||||
config NUMA
|
||||
bool "NUMA support"
|
||||
depends on SPARC64 && SMP
|
||||
|
||||
config NODES_SHIFT
|
||||
int
|
||||
default "4"
|
||||
depends on NEED_MULTIPLE_NODES
|
||||
|
||||
# Some NUMA nodes have memory ranges that span
|
||||
# other nodes. Even though a pfn is valid and
|
||||
# between a node's start and end pfns, it may not
|
||||
# reside on that node. See memmap_init_zone()
|
||||
# for details.
|
||||
config NODES_SPAN_OTHER_NODES
|
||||
def_bool y
|
||||
depends on NEED_MULTIPLE_NODES
|
||||
|
||||
config ARCH_POPULATES_NODE_MAP
|
||||
def_bool y if SPARC64
|
||||
|
||||
config ARCH_SELECT_MEMORY_MODEL
|
||||
def_bool y if SPARC64
|
||||
|
||||
config ARCH_SPARSEMEM_ENABLE
|
||||
def_bool y if SPARC64
|
||||
select SPARSEMEM_VMEMMAP_ENABLE
|
||||
|
||||
config ARCH_SPARSEMEM_DEFAULT
|
||||
def_bool y if SPARC64
|
||||
|
||||
source "mm/Kconfig"
|
||||
|
||||
config SCHED_SMT
|
||||
bool "SMT (Hyperthreading) scheduler support"
|
||||
depends on SPARC64 && SMP
|
||||
default y
|
||||
help
|
||||
SMT scheduler support improves the CPU scheduler's decision making
|
||||
when dealing with SPARC cpus at a cost of slightly increased overhead
|
||||
in some places. If unsure say N here.
|
||||
|
||||
config SCHED_MC
|
||||
bool "Multi-core scheduler support"
|
||||
depends on SPARC64 && SMP
|
||||
default y
|
||||
help
|
||||
Multi-core scheduler support improves the CPU scheduler's decision
|
||||
making when dealing with multi-core CPU chips at a cost of slightly
|
||||
increased overhead in some places. If unsure say N here.
|
||||
|
||||
if SPARC64
|
||||
source "kernel/Kconfig.preempt"
|
||||
endif
|
||||
|
||||
config CMDLINE_BOOL
|
||||
bool "Default bootloader kernel arguments"
|
||||
depends on SPARC64
|
||||
|
||||
config CMDLINE
|
||||
string "Initial kernel command string"
|
||||
depends on CMDLINE_BOOL
|
||||
default "console=ttyS0,9600 root=/dev/sda1"
|
||||
help
|
||||
Say Y here if you want to be able to pass default arguments to
|
||||
the kernel. This will be overridden by the bootloader, if you
|
||||
use one (such as SILO). This is most useful if you want to boot
|
||||
a kernel from TFTP, and want default options to be available
|
||||
with having them passed on the command line.
|
||||
|
||||
NOTE: This option WILL override the PROM bootargs setting!
|
||||
|
||||
config SUN_PM
|
||||
bool
|
||||
default y if SPARC32
|
||||
help
|
||||
Enable power management and CPU standby features on supported
|
||||
SPARC platforms.
|
||||
|
||||
config SPARC_LED
|
||||
tristate "Sun4m LED driver"
|
||||
depends on SPARC32
|
||||
help
|
||||
This driver toggles the front-panel LED on sun4m systems
|
||||
in a user-specifiable manner. Its state can be probed
|
||||
by reading /proc/led and its blinking mode can be changed
|
||||
via writes to /proc/led
|
||||
|
||||
config SERIAL_CONSOLE
|
||||
bool
|
||||
depends on SPARC32
|
||||
default y
|
||||
---help---
|
||||
If you say Y here, it will be possible to use a serial port as the
|
||||
@ -161,71 +439,66 @@ config SERIAL_CONSOLE
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config SUN_AUXIO
|
||||
bool
|
||||
default y
|
||||
endmenu
|
||||
|
||||
config SUN_IO
|
||||
menu "Bus options (PCI etc.)"
|
||||
config ISA
|
||||
bool
|
||||
default y
|
||||
|
||||
config RWSEM_GENERIC_SPINLOCK
|
||||
bool
|
||||
default y
|
||||
|
||||
config RWSEM_XCHGADD_ALGORITHM
|
||||
bool
|
||||
|
||||
config GENERIC_FIND_NEXT_BIT
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_HWEIGHT
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_CALIBRATE_DELAY
|
||||
bool
|
||||
default y
|
||||
|
||||
config ARCH_MAY_HAVE_PC_FDC
|
||||
bool
|
||||
default y
|
||||
|
||||
config ARCH_HAS_ILOG2_U32
|
||||
bool
|
||||
default n
|
||||
|
||||
config ARCH_HAS_ILOG2_U64
|
||||
bool
|
||||
default n
|
||||
|
||||
config EMULATED_CMPXCHG
|
||||
bool
|
||||
default y
|
||||
help
|
||||
Sparc32 does not have a CAS instruction like sparc64. cmpxchg()
|
||||
is emulated, and therefore it is not completely atomic.
|
||||
ISA is found on Espresso only and is not supported currently.
|
||||
|
||||
config SUN_PM
|
||||
config ISAPNP
|
||||
bool
|
||||
help
|
||||
ISAPNP is not supported
|
||||
|
||||
config EISA
|
||||
bool
|
||||
help
|
||||
EISA is not supported.
|
||||
|
||||
config MCA
|
||||
bool
|
||||
help
|
||||
MCA is not supported.
|
||||
|
||||
config SBUS
|
||||
bool
|
||||
default y
|
||||
|
||||
config SBUSCHAR
|
||||
bool
|
||||
default y
|
||||
|
||||
config SUN_LDOMS
|
||||
bool "Sun Logical Domains support"
|
||||
depends on SPARC64
|
||||
help
|
||||
Enable power management and CPU standby features on supported
|
||||
SPARC platforms.
|
||||
Say Y here is you want to support virtual devices via
|
||||
Logical Domains.
|
||||
|
||||
config PCI
|
||||
bool "Support for PCI and PS/2 keyboard/mouse"
|
||||
help
|
||||
Find out whether your system includes a PCI bus. PCI is the name of
|
||||
a bus system, i.e. the way the CPU talks to the other stuff inside
|
||||
your box. If you say Y here, the kernel will include drivers and
|
||||
infrastructure code to support PCI bus devices.
|
||||
|
||||
CONFIG_PCI is needed for all JavaStation's (including MrCoffee),
|
||||
CP-1200, JavaEngine-1, Corona, Red October, and Serengeti SGSC.
|
||||
All of these platforms are extremely obscure, so say N if unsure.
|
||||
|
||||
config PCI_DOMAINS
|
||||
def_bool PCI if SPARC64
|
||||
|
||||
config PCI_SYSCALL
|
||||
def_bool PCI
|
||||
|
||||
source "drivers/pci/Kconfig"
|
||||
|
||||
source "drivers/pcmcia/Kconfig"
|
||||
|
||||
config SUN_OPENPROMFS
|
||||
tristate "Openprom tree appears in /proc/openprom"
|
||||
help
|
||||
@ -239,17 +512,33 @@ config SUN_OPENPROMFS
|
||||
Only choose N if you know in advance that you will not need to modify
|
||||
OpenPROM settings on the running system.
|
||||
|
||||
config SPARC_LED
|
||||
tristate "Sun4m LED driver"
|
||||
help
|
||||
This driver toggles the front-panel LED on sun4m systems
|
||||
in a user-specifiable manner. Its state can be probed
|
||||
by reading /proc/led and its blinking mode can be changed
|
||||
via writes to /proc/led
|
||||
# Makefile helpers
|
||||
config SPARC32_PCI
|
||||
bool
|
||||
default y
|
||||
depends on SPARC32 && PCI
|
||||
|
||||
config SPARC64_PCI
|
||||
bool
|
||||
default y
|
||||
depends on SPARC64 && PCI
|
||||
|
||||
endmenu
|
||||
|
||||
menu "Executable file formats"
|
||||
|
||||
source "fs/Kconfig.binfmt"
|
||||
|
||||
source "mm/Kconfig"
|
||||
config COMPAT
|
||||
bool
|
||||
depends on SPARC64
|
||||
default y
|
||||
select COMPAT_BINFMT_ELF
|
||||
|
||||
config SYSVIPC_COMPAT
|
||||
bool
|
||||
depends on COMPAT && SYSVIPC
|
||||
default y
|
||||
|
||||
endmenu
|
||||
|
||||
@ -259,40 +548,6 @@ source "drivers/Kconfig"
|
||||
|
||||
source "drivers/sbus/char/Kconfig"
|
||||
|
||||
# This one must be before the filesystem configs. -DaveM
|
||||
|
||||
menu "Unix98 PTY support"
|
||||
|
||||
config UNIX98_PTYS
|
||||
bool "Unix98 PTY support"
|
||||
---help---
|
||||
A pseudo terminal (PTY) is a software device consisting of two
|
||||
halves: a master and a slave. The slave device behaves identical to
|
||||
a physical terminal; the master device is used by a process to
|
||||
read data from and write data to the slave, thereby emulating a
|
||||
terminal. Typical programs for the master side are telnet servers
|
||||
and xterms.
|
||||
|
||||
Linux has traditionally used the BSD-like names /dev/ptyxx for
|
||||
masters and /dev/ttyxx for slaves of pseudo terminals. This scheme
|
||||
has a number of problems. The GNU C library glibc 2.1 and later,
|
||||
however, supports the Unix98 naming standard: in order to acquire a
|
||||
pseudo terminal, a process opens /dev/ptmx; the number of the pseudo
|
||||
terminal is then made available to the process and the pseudo
|
||||
terminal slave can be accessed as /dev/pts/<number>. What was
|
||||
traditionally /dev/ttyp2 will then be /dev/pts/2, for example.
|
||||
|
||||
The entries in /dev/pts/ are created on the fly by a virtual
|
||||
file system; therefore, if you say Y here you should say Y to
|
||||
"/dev/pts file system for Unix98 PTYs" as well.
|
||||
|
||||
If you want to say Y here, you need to have the C library glibc 2.1
|
||||
or later (equal to libc-6.1, check with "ls -l /lib/libc.so.*").
|
||||
Read the instructions in <file:Documentation/Changes> pertaining to
|
||||
pseudo terminals. It's safe to say N.
|
||||
|
||||
endmenu
|
||||
|
||||
source "fs/Kconfig"
|
||||
|
||||
source "arch/sparc/Kconfig.debug"
|
||||
|
@ -15,4 +15,30 @@ config DEBUG_STACK_USAGE
|
||||
|
||||
This option will slow down process creation somewhat.
|
||||
|
||||
config DEBUG_DCFLUSH
|
||||
bool "D-cache flush debugging"
|
||||
depends on SPARC64 && DEBUG_KERNEL
|
||||
|
||||
config STACK_DEBUG
|
||||
bool "Stack Overflow Detection Support"
|
||||
|
||||
config DEBUG_PAGEALLOC
|
||||
bool "Debug page memory allocations"
|
||||
depends on SPARC64 && DEBUG_KERNEL && !HIBERNATION
|
||||
help
|
||||
Unmap pages from the kernel linear mapping after free_pages().
|
||||
This results in a large slowdown, but helps to find certain types
|
||||
of memory corruptions.
|
||||
|
||||
config MCOUNT
|
||||
bool
|
||||
depends on SPARC64
|
||||
depends on STACK_DEBUG || FUNCTION_TRACER
|
||||
default y
|
||||
|
||||
config FRAME_POINTER
|
||||
bool
|
||||
depends on MCOUNT
|
||||
default y
|
||||
|
||||
endmenu
|
||||
|
@ -2,18 +2,31 @@
|
||||
# sparc/Makefile
|
||||
#
|
||||
# Makefile for the architecture dependent flags and dependencies on the
|
||||
# Sparc.
|
||||
# Sparc and sparc64.
|
||||
#
|
||||
# Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu)
|
||||
# Copyright (C) 1994,1996,1998 David S. Miller (davem@caip.rutgers.edu)
|
||||
# Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz)
|
||||
|
||||
# We are not yet configured - so test on arch
|
||||
ifeq ($(ARCH),sparc)
|
||||
KBUILD_DEFCONFIG := sparc32_defconfig
|
||||
else
|
||||
KBUILD_DEFCONFIG := sparc64_defconfig
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SPARC32),y)
|
||||
#####
|
||||
# sparc32
|
||||
#
|
||||
|
||||
#
|
||||
# Uncomment the first KBUILD_CFLAGS if you are doing kgdb source level
|
||||
# debugging of the kernel to get the proper debugging information.
|
||||
|
||||
AS := $(AS) -32
|
||||
LDFLAGS := -m elf32_sparc
|
||||
CHECKFLAGS += -D__sparc__
|
||||
AS := $(AS) -32
|
||||
LDFLAGS := -m elf32_sparc
|
||||
CHECKFLAGS += -D__sparc__
|
||||
export BITS := 32
|
||||
|
||||
#KBUILD_CFLAGS += -g -pipe -fcall-used-g5 -fcall-used-g7
|
||||
KBUILD_CFLAGS += -m32 -pipe -mno-fpu -fcall-used-g5 -fcall-used-g7
|
||||
@ -25,38 +38,60 @@ CPPFLAGS_vmlinux.lds += -m32
|
||||
# Actual linking is done with "make image".
|
||||
LDFLAGS_vmlinux = -r
|
||||
|
||||
head-y := arch/sparc/kernel/head.o arch/sparc/kernel/init_task.o
|
||||
HEAD_Y := $(head-y)
|
||||
# Default target
|
||||
all: zImage
|
||||
|
||||
core-y += arch/sparc/kernel/ arch/sparc/mm/ arch/sparc/math-emu/
|
||||
libs-y += arch/sparc/prom/ arch/sparc/lib/
|
||||
|
||||
else
|
||||
#####
|
||||
# sparc64
|
||||
#
|
||||
|
||||
CHECKFLAGS += -D__sparc__ -D__sparc_v9__ -D__arch64__ -m64
|
||||
|
||||
# Undefine sparc when processing vmlinux.lds - it is used
|
||||
# And teach CPP we are doing 64 bit builds (for this case)
|
||||
CPPFLAGS_vmlinux.lds += -m64 -Usparc
|
||||
LDFLAGS := -m elf64_sparc
|
||||
export BITS := 64
|
||||
|
||||
KBUILD_CFLAGS += -m64 -pipe -mno-fpu -mcpu=ultrasparc -mcmodel=medlow \
|
||||
-ffixed-g4 -ffixed-g5 -fcall-used-g7 -Wno-sign-compare \
|
||||
-Wa,--undeclared-regs
|
||||
KBUILD_CFLAGS += $(call cc-option,-mtune=ultrasparc3)
|
||||
KBUILD_AFLAGS += -m64 -mcpu=ultrasparc -Wa,--undeclared-regs
|
||||
|
||||
ifeq ($(CONFIG_MCOUNT),y)
|
||||
KBUILD_CFLAGS += -pg
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
head-y := arch/sparc/kernel/head_$(BITS).o
|
||||
head-y += arch/sparc/kernel/init_task.o
|
||||
|
||||
core-y += arch/sparc/kernel/
|
||||
core-y += arch/sparc/mm/ arch/sparc/math-emu/
|
||||
|
||||
libs-y += arch/sparc/prom/
|
||||
libs-y += arch/sparc/lib/
|
||||
|
||||
drivers-$(CONFIG_OPROFILE) += arch/sparc/oprofile/
|
||||
|
||||
# Export what is needed by arch/sparc/boot/Makefile
|
||||
# Renaming is done to avoid confusing pattern matching rules in 2.5.45 (multy-)
|
||||
INIT_Y := $(patsubst %/, %/built-in.o, $(init-y))
|
||||
CORE_Y := $(core-y)
|
||||
CORE_Y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
|
||||
CORE_Y := $(patsubst %/, %/built-in.o, $(CORE_Y))
|
||||
DRIVERS_Y := $(patsubst %/, %/built-in.o, $(drivers-y))
|
||||
NET_Y := $(patsubst %/, %/built-in.o, $(net-y))
|
||||
LIBS_Y1 := $(patsubst %/, %/lib.a, $(libs-y))
|
||||
LIBS_Y2 := $(patsubst %/, %/built-in.o, $(libs-y))
|
||||
LIBS_Y := $(LIBS_Y1) $(LIBS_Y2)
|
||||
export VMLINUX_INIT VMLINUX_MAIN
|
||||
VMLINUX_INIT := $(head-y) $(init-y)
|
||||
VMLINUX_MAIN := $(core-y) kernel/ mm/ fs/ ipc/ security/ crypto/ block/
|
||||
VMLINUX_MAIN += $(patsubst %/, %/lib.a, $(libs-y)) $(libs-y)
|
||||
VMLINUX_MAIN += $(drivers-y) $(net-y)
|
||||
|
||||
ifdef CONFIG_KALLSYMS
|
||||
kallsyms.o := .tmp_kallsyms2.o
|
||||
export kallsyms.o := .tmp_kallsyms2.o
|
||||
endif
|
||||
|
||||
export INIT_Y CORE_Y DRIVERS_Y NET_Y LIBS_Y HEAD_Y kallsyms.o
|
||||
|
||||
# Default target
|
||||
all: zImage
|
||||
|
||||
boot := arch/sparc/boot
|
||||
|
||||
image zImage tftpboot.img: vmlinux
|
||||
image zImage tftpboot.img vmlinux.aout: vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||
|
||||
archclean:
|
||||
@ -65,11 +100,17 @@ archclean:
|
||||
# This is the image used for packaging
|
||||
KBUILD_IMAGE := $(boot)/zImage
|
||||
|
||||
CLEAN_FILES += arch/$(ARCH)/boot/System.map
|
||||
|
||||
# Don't use tabs in echo arguments.
|
||||
ifeq ($(ARCH),sparc)
|
||||
define archhelp
|
||||
echo '* image - kernel image ($(boot)/image)'
|
||||
echo '* zImage - stripped kernel image ($(boot)/zImage)'
|
||||
echo ' tftpboot.img - image prepared for tftp'
|
||||
endef
|
||||
else
|
||||
define archhelp
|
||||
echo '* vmlinux - Standard sparc64 kernel'
|
||||
echo ' vmlinux.aout - a.out kernel for sparc64'
|
||||
echo ' tftpboot.img - image prepared for tftp'
|
||||
endef
|
||||
endif
|
||||
|
@ -1,4 +1,8 @@
|
||||
btfix.S
|
||||
btfixupprep
|
||||
image
|
||||
zImage
|
||||
tftpboot.img
|
||||
vmlinux.aout
|
||||
piggyback
|
||||
|
@ -6,13 +6,16 @@
|
||||
ROOT_IMG := /usr/src/root.img
|
||||
ELFTOAOUT := elftoaout
|
||||
|
||||
hostprogs-y := piggyback btfixupprep
|
||||
targets := tftpboot.img btfix.o btfix.S image
|
||||
hostprogs-y := piggyback_32 piggyback_64 btfixupprep
|
||||
targets := tftpboot.img btfix.o btfix.S image zImage vmlinux.aout
|
||||
clean-files := System.map
|
||||
|
||||
quiet_cmd_elftoaout = ELFTOAOUT $@
|
||||
cmd_elftoaout = $(ELFTOAOUT) $(obj)/image -o $@
|
||||
|
||||
ifeq ($(CONFIG_SPARC32),y)
|
||||
quiet_cmd_piggy = PIGGY $@
|
||||
cmd_piggy = $(obj)/piggyback $@ $(obj)/System.map $(ROOT_IMG)
|
||||
cmd_piggy = $(obj)/piggyback_32 $@ $(obj)/System.map $(ROOT_IMG)
|
||||
quiet_cmd_btfix = BTFIX $@
|
||||
cmd_btfix = $(OBJDUMP) -x vmlinux | $(obj)/btfixupprep > $@
|
||||
quiet_cmd_sysmap = SYSMAP $(obj)/System.map
|
||||
@ -37,8 +40,8 @@ define rule_image
|
||||
echo 'cmd_$@ := $(cmd_image)' > $(@D)/.$(@F).cmd
|
||||
endef
|
||||
|
||||
BTOBJS := $(HEAD_Y) $(INIT_Y)
|
||||
BTLIBS := $(CORE_Y) $(LIBS_Y) $(DRIVERS_Y) $(NET_Y)
|
||||
BTOBJS := $(patsubst %/, %/built-in.o, $(VMLINUX_INIT))
|
||||
BTLIBS := $(patsubst %/, %/built-in.o, $(VMLINUX_MAIN))
|
||||
LDFLAGS_image := -T arch/sparc/kernel/vmlinux.lds $(BTOBJS) \
|
||||
--start-group $(BTLIBS) --end-group \
|
||||
$(kallsyms.o) $(obj)/btfix.o
|
||||
@ -61,3 +64,28 @@ $(obj)/tftpboot.img: $(obj)/piggyback $(obj)/System.map $(obj)/image FORCE
|
||||
|
||||
$(obj)/btfix.S: $(obj)/btfixupprep vmlinux FORCE
|
||||
$(call if_changed,btfix)
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SPARC64),y)
|
||||
quiet_cmd_piggy = PIGGY $@
|
||||
cmd_piggy = $(obj)/piggyback_64 $@ System.map $(ROOT_IMG)
|
||||
quiet_cmd_strip = STRIP $@
|
||||
cmd_strip = $(STRIP) -R .comment -R .note -K sun4u_init -K _end -K _start vmlinux -o $@
|
||||
|
||||
|
||||
# Actual linking
|
||||
$(obj)/image: vmlinux FORCE
|
||||
$(call if_changed,strip)
|
||||
@echo ' kernel: $@ is ready'
|
||||
|
||||
$(obj)/tftpboot.img: vmlinux $(obj)/piggyback_64 System.map $(ROOT_IMG) FORCE
|
||||
$(call if_changed,elftoaout)
|
||||
$(call if_changed,piggy)
|
||||
@echo ' kernel: $@ is ready'
|
||||
|
||||
$(obj)/vmlinux.aout: vmlinux FORCE
|
||||
$(call if_changed,elftoaout)
|
||||
@echo ' kernel: $@ is ready'
|
||||
endif
|
||||
|
||||
|
@ -15,8 +15,6 @@ header-y += signal_32.h
|
||||
header-y += signal_64.h
|
||||
header-y += stat_32.h
|
||||
header-y += stat_64.h
|
||||
header-y += unistd_32.h
|
||||
header-y += unistd_64.h
|
||||
|
||||
header-y += apc.h
|
||||
header-y += asi.h
|
||||
|
40
arch/sparc/include/asm/asm.h
Normal file
40
arch/sparc/include/asm/asm.h
Normal file
@ -0,0 +1,40 @@
|
||||
#ifndef _SPARC_ASM_H
|
||||
#define _SPARC_ASM_H
|
||||
|
||||
/* Macros to assist the sharing of assembler code between 32-bit and
|
||||
* 64-bit sparc.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SPARC64
|
||||
#define BRANCH32(TYPE, PREDICT, DEST) \
|
||||
TYPE,PREDICT %icc, DEST
|
||||
#define BRANCH32_ANNUL(TYPE, PREDICT, DEST) \
|
||||
TYPE,a,PREDICT %icc, DEST
|
||||
#define BRANCH_REG_ZERO(PREDICT, REG, DEST) \
|
||||
brz,PREDICT REG, DEST
|
||||
#define BRANCH_REG_ZERO_ANNUL(PREDICT, REG, DEST) \
|
||||
brz,a,PREDICT REG, DEST
|
||||
#define BRANCH_REG_NOT_ZERO(PREDICT, REG, DEST) \
|
||||
brnz,PREDICT REG, DEST
|
||||
#define BRANCH_REG_NOT_ZERO_ANNUL(PREDICT, REG, DEST) \
|
||||
brnz,a,PREDICT REG, DEST
|
||||
#else
|
||||
#define BRANCH32(TYPE, PREDICT, DEST) \
|
||||
TYPE DEST
|
||||
#define BRANCH32_ANNUL(TYPE, PREDICT, DEST) \
|
||||
TYPE,a DEST
|
||||
#define BRANCH_REG_ZERO(PREDICT, REG, DEST) \
|
||||
cmp REG, 0; \
|
||||
be DEST
|
||||
#define BRANCH_REG_ZERO_ANNUL(PREDICT, REG, DEST) \
|
||||
cmp REG, 0; \
|
||||
be,a DEST
|
||||
#define BRANCH_REG_NOT_ZERO(PREDICT, REG, DEST) \
|
||||
cmp REG, 0; \
|
||||
bne DEST
|
||||
#define BRANCH_REG_NOT_ZERO_ANNUL(PREDICT, REG, DEST) \
|
||||
cmp REG, 0; \
|
||||
bne,a DEST
|
||||
#endif
|
||||
|
||||
#endif /* _SPARC_ASM_H */
|
@ -112,17 +112,10 @@ static inline int atomic64_add_unless(atomic64_t *v, long a, long u)
|
||||
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
|
||||
|
||||
/* Atomic operations are already serializing */
|
||||
#ifdef CONFIG_SMP
|
||||
#define smp_mb__before_atomic_dec() membar_storeload_loadload();
|
||||
#define smp_mb__after_atomic_dec() membar_storeload_storestore();
|
||||
#define smp_mb__before_atomic_inc() membar_storeload_loadload();
|
||||
#define smp_mb__after_atomic_inc() membar_storeload_storestore();
|
||||
#else
|
||||
#define smp_mb__before_atomic_dec() barrier()
|
||||
#define smp_mb__after_atomic_dec() barrier()
|
||||
#define smp_mb__before_atomic_inc() barrier()
|
||||
#define smp_mb__after_atomic_inc() barrier()
|
||||
#endif
|
||||
|
||||
#include <asm-generic/atomic.h>
|
||||
#endif /* !(__ARCH_SPARC64_ATOMIC__) */
|
||||
|
@ -23,13 +23,8 @@ extern void change_bit(unsigned long nr, volatile unsigned long *addr);
|
||||
|
||||
#include <asm-generic/bitops/non-atomic.h>
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#define smp_mb__before_clear_bit() membar_storeload_loadload()
|
||||
#define smp_mb__after_clear_bit() membar_storeload_storestore()
|
||||
#else
|
||||
#define smp_mb__before_clear_bit() barrier()
|
||||
#define smp_mb__after_clear_bit() barrier()
|
||||
#endif
|
||||
|
||||
#include <asm-generic/bitops/ffz.h>
|
||||
#include <asm-generic/bitops/__ffs.h>
|
||||
|
@ -2713,6 +2713,30 @@ extern unsigned long sun4v_ldc_revoke(unsigned long channel,
|
||||
*/
|
||||
#define HV_FAST_SET_PERFREG 0x101
|
||||
|
||||
#define HV_N2_PERF_SPARC_CTL 0x0
|
||||
#define HV_N2_PERF_DRAM_CTL0 0x1
|
||||
#define HV_N2_PERF_DRAM_CNT0 0x2
|
||||
#define HV_N2_PERF_DRAM_CTL1 0x3
|
||||
#define HV_N2_PERF_DRAM_CNT1 0x4
|
||||
#define HV_N2_PERF_DRAM_CTL2 0x5
|
||||
#define HV_N2_PERF_DRAM_CNT2 0x6
|
||||
#define HV_N2_PERF_DRAM_CTL3 0x7
|
||||
#define HV_N2_PERF_DRAM_CNT3 0x8
|
||||
|
||||
#define HV_FAST_N2_GET_PERFREG 0x104
|
||||
#define HV_FAST_N2_SET_PERFREG 0x105
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
extern unsigned long sun4v_niagara_getperf(unsigned long reg,
|
||||
unsigned long *val);
|
||||
extern unsigned long sun4v_niagara_setperf(unsigned long reg,
|
||||
unsigned long val);
|
||||
extern unsigned long sun4v_niagara2_getperf(unsigned long reg,
|
||||
unsigned long *val);
|
||||
extern unsigned long sun4v_niagara2_setperf(unsigned long reg,
|
||||
unsigned long val);
|
||||
#endif
|
||||
|
||||
/* MMU statistics services.
|
||||
*
|
||||
* The hypervisor maintains MMU statistics and privileged code provides
|
||||
|
@ -12,4 +12,5 @@
|
||||
|
||||
#define irq_canonicalize(irq) (irq)
|
||||
|
||||
extern void __init init_IRQ(void);
|
||||
#endif
|
||||
|
@ -66,6 +66,9 @@ extern void virt_irq_free(unsigned int virt_irq);
|
||||
extern void __init init_IRQ(void);
|
||||
extern void fixup_irqs(void);
|
||||
|
||||
extern int register_perfctr_intr(void (*handler)(struct pt_regs *));
|
||||
extern void release_perfctr_intr(void (*handler)(struct pt_regs *));
|
||||
|
||||
static inline void set_softint(unsigned long bits)
|
||||
{
|
||||
__asm__ __volatile__("wr %0, 0x0, %%set_softint"
|
||||
|
@ -10,6 +10,8 @@
|
||||
#ifndef _ASM_IRQFLAGS_H
|
||||
#define _ASM_IRQFLAGS_H
|
||||
|
||||
#include <asm/pil.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
static inline unsigned long __raw_local_save_flags(void)
|
||||
@ -40,9 +42,9 @@ static inline void raw_local_irq_restore(unsigned long flags)
|
||||
static inline void raw_local_irq_disable(void)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
"wrpr 15, %%pil"
|
||||
"wrpr %0, %%pil"
|
||||
: /* no outputs */
|
||||
: /* no inputs */
|
||||
: "i" (PIL_NORMAL_MAX)
|
||||
: "memory"
|
||||
);
|
||||
}
|
||||
|
@ -1,8 +1,24 @@
|
||||
#ifndef ___ASM_SPARC_MODULE_H
|
||||
#define ___ASM_SPARC_MODULE_H
|
||||
#if defined(__sparc__) && defined(__arch64__)
|
||||
#include <asm/module_64.h>
|
||||
#else
|
||||
#include <asm/module_32.h>
|
||||
#endif
|
||||
#endif
|
||||
#ifndef __SPARC_MODULE_H
|
||||
#define __SPARC_MODULE_H
|
||||
struct mod_arch_specific { };
|
||||
|
||||
/*
|
||||
* Use some preprocessor magic to define the correct symbol
|
||||
* for sparc32 and sparc64.
|
||||
* Elf_Addr becomes Elf32_Addr for sparc32 and Elf64_Addr for sparc64
|
||||
*/
|
||||
#define ___ELF(a, b, c) a##b##c
|
||||
#define __ELF(a, b, c) ___ELF(a, b, c)
|
||||
#define _Elf(t) __ELF(Elf, CONFIG_BITS, t)
|
||||
#define _ELF(t) __ELF(ELF, CONFIG_BITS, t)
|
||||
|
||||
#define Elf_Shdr _Elf(_Shdr)
|
||||
#define Elf_Sym _Elf(_Sym)
|
||||
#define Elf_Ehdr _Elf(_Ehdr)
|
||||
#define Elf_Rela _Elf(_Rela)
|
||||
#define Elf_Addr _Elf(_Addr)
|
||||
|
||||
#define ELF_R_SYM _ELF(_R_SYM)
|
||||
#define ELF_R_TYPE _ELF(_R_TYPE)
|
||||
|
||||
#endif /* __SPARC_MODULE_H */
|
||||
|
@ -1,7 +0,0 @@
|
||||
#ifndef _ASM_SPARC_MODULE_H
|
||||
#define _ASM_SPARC_MODULE_H
|
||||
struct mod_arch_specific { };
|
||||
#define Elf_Shdr Elf32_Shdr
|
||||
#define Elf_Sym Elf32_Sym
|
||||
#define Elf_Ehdr Elf32_Ehdr
|
||||
#endif /* _ASM_SPARC_MODULE_H */
|
@ -1,7 +0,0 @@
|
||||
#ifndef _ASM_SPARC64_MODULE_H
|
||||
#define _ASM_SPARC64_MODULE_H
|
||||
struct mod_arch_specific { };
|
||||
#define Elf_Shdr Elf64_Shdr
|
||||
#define Elf_Sym Elf64_Sym
|
||||
#define Elf_Ehdr Elf64_Ehdr
|
||||
#endif /* _ASM_SPARC64_MODULE_H */
|
@ -170,9 +170,9 @@ struct linux_romvec {
|
||||
struct linux_nodeops {
|
||||
int (*no_nextnode)(int node);
|
||||
int (*no_child)(int node);
|
||||
int (*no_proplen)(int node, char *name);
|
||||
int (*no_getprop)(int node, char *name, char *val);
|
||||
int (*no_setprop)(int node, char *name, char *val, int len);
|
||||
int (*no_proplen)(int node, const char *name);
|
||||
int (*no_getprop)(int node, const char *name, char *val);
|
||||
int (*no_setprop)(int node, const char *name, char *val, int len);
|
||||
char * (*no_nextprop)(int node, char *name);
|
||||
};
|
||||
|
||||
|
@ -136,7 +136,7 @@ extern char prom_getchar(void);
|
||||
extern void prom_putchar(char character);
|
||||
|
||||
/* Prom's internal routines, don't use in kernel/boot code. */
|
||||
extern void prom_printf(char *fmt, ...);
|
||||
extern void prom_printf(const char *fmt, ...);
|
||||
extern void prom_write(const char *buf, unsigned int len);
|
||||
|
||||
/* Multiprocessor operations... */
|
||||
@ -199,12 +199,12 @@ extern int prom_getsibling(int node);
|
||||
/* Get the length, at the passed node, of the given property type.
|
||||
* Returns -1 on error (ie. no such property at this node).
|
||||
*/
|
||||
extern int prom_getproplen(int thisnode, char *property);
|
||||
extern int prom_getproplen(int thisnode, const char *property);
|
||||
|
||||
/* Fetch the requested property using the given buffer. Returns
|
||||
* the number of bytes the prom put into your buffer or -1 on error.
|
||||
*/
|
||||
extern int __must_check prom_getproperty(int thisnode, char *property,
|
||||
extern int __must_check prom_getproperty(int thisnode, const char *property,
|
||||
char *prop_buffer, int propbuf_size);
|
||||
|
||||
/* Acquire an integer property. */
|
||||
@ -246,7 +246,7 @@ extern int prom_node_has_property(int node, char *property);
|
||||
/* Set the indicated property at the given node with the passed value.
|
||||
* Returns the number of bytes of your value that the prom took.
|
||||
*/
|
||||
extern int prom_setprop(int node, char *prop_name, char *prop_value,
|
||||
extern int prom_setprop(int node, const char *prop_name, char *prop_value,
|
||||
int value_size);
|
||||
|
||||
extern int prom_pathtoinode(char *path);
|
||||
|
@ -10,7 +10,12 @@
|
||||
*
|
||||
* In fact any XCALL which has to etrap/rtrap has a problem because
|
||||
* it is difficult to prevent rtrap from running BH's, and that would
|
||||
* need to be done if the XCALL arrived while %pil==15.
|
||||
* need to be done if the XCALL arrived while %pil==PIL_NORMAL_MAX.
|
||||
*
|
||||
* Finally, in order to handle profiling events even when a
|
||||
* local_irq_disable() is in progress, we only disable up to level 14
|
||||
* interrupts. Profile counter overflow interrupts arrive at level
|
||||
* 15.
|
||||
*/
|
||||
#define PIL_SMP_CALL_FUNC 1
|
||||
#define PIL_SMP_RECEIVE_SIGNAL 2
|
||||
@ -18,5 +23,7 @@
|
||||
#define PIL_SMP_CTX_NEW_VERSION 4
|
||||
#define PIL_DEVICE_IRQ 5
|
||||
#define PIL_SMP_CALL_FUNC_SNGL 6
|
||||
#define PIL_NORMAL_MAX 14
|
||||
#define PIL_NMI 15
|
||||
|
||||
#endif /* !(_SPARC64_PIL_H) */
|
||||
|
@ -1,8 +1,27 @@
|
||||
#ifndef ___ASM_SPARC_SCATTERLIST_H
|
||||
#define ___ASM_SPARC_SCATTERLIST_H
|
||||
#if defined(__sparc__) && defined(__arch64__)
|
||||
#include <asm/scatterlist_64.h>
|
||||
#else
|
||||
#include <asm/scatterlist_32.h>
|
||||
#endif
|
||||
#ifndef _SPARC_SCATTERLIST_H
|
||||
#define _SPARC_SCATTERLIST_H
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/types.h>
|
||||
|
||||
struct scatterlist {
|
||||
#ifdef CONFIG_DEBUG_SG
|
||||
unsigned long sg_magic;
|
||||
#endif
|
||||
unsigned long page_link;
|
||||
unsigned int offset;
|
||||
|
||||
unsigned int length;
|
||||
|
||||
dma_addr_t dma_address;
|
||||
__u32 dma_length;
|
||||
};
|
||||
|
||||
#define sg_dma_address(sg) ((sg)->dma_address)
|
||||
#define sg_dma_len(sg) ((sg)->dma_length)
|
||||
|
||||
#define ISA_DMA_THRESHOLD (~0UL)
|
||||
|
||||
#define ARCH_HAS_SG_CHAIN
|
||||
|
||||
#endif /* !(_SPARC_SCATTERLIST_H) */
|
||||
|
@ -1,26 +0,0 @@
|
||||
#ifndef _SPARC_SCATTERLIST_H
|
||||
#define _SPARC_SCATTERLIST_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct scatterlist {
|
||||
#ifdef CONFIG_DEBUG_SG
|
||||
unsigned long sg_magic;
|
||||
#endif
|
||||
unsigned long page_link;
|
||||
unsigned int offset;
|
||||
|
||||
unsigned int length;
|
||||
|
||||
__u32 dvma_address; /* A place to hang host-specific addresses at. */
|
||||
__u32 dvma_length;
|
||||
};
|
||||
|
||||
#define sg_dma_address(sg) ((sg)->dvma_address)
|
||||
#define sg_dma_len(sg) ((sg)->dvma_length)
|
||||
|
||||
#define ISA_DMA_THRESHOLD (~0UL)
|
||||
|
||||
#define ARCH_HAS_SG_CHAIN
|
||||
|
||||
#endif /* !(_SPARC_SCATTERLIST_H) */
|
@ -1,27 +0,0 @@
|
||||
#ifndef _SPARC64_SCATTERLIST_H
|
||||
#define _SPARC64_SCATTERLIST_H
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/types.h>
|
||||
|
||||
struct scatterlist {
|
||||
#ifdef CONFIG_DEBUG_SG
|
||||
unsigned long sg_magic;
|
||||
#endif
|
||||
unsigned long page_link;
|
||||
unsigned int offset;
|
||||
|
||||
unsigned int length;
|
||||
|
||||
dma_addr_t dma_address;
|
||||
__u32 dma_length;
|
||||
};
|
||||
|
||||
#define sg_dma_address(sg) ((sg)->dma_address)
|
||||
#define sg_dma_len(sg) ((sg)->dma_length)
|
||||
|
||||
#define ISA_DMA_THRESHOLD (~0UL)
|
||||
|
||||
#define ARCH_HAS_SG_CHAIN
|
||||
|
||||
#endif /* !(_SPARC64_SCATTERLIST_H) */
|
@ -1,8 +1,10 @@
|
||||
#ifndef ___ASM_SPARC_SECTIONS_H
|
||||
#define ___ASM_SPARC_SECTIONS_H
|
||||
#if defined(__sparc__) && defined(__arch64__)
|
||||
#include <asm/sections_64.h>
|
||||
#else
|
||||
#include <asm/sections_32.h>
|
||||
#endif
|
||||
#ifndef __SPARC_SECTIONS_H
|
||||
#define __SPARC_SECTIONS_H
|
||||
|
||||
/* nothing to see, move along */
|
||||
#include <asm-generic/sections.h>
|
||||
|
||||
/* sparc entry point */
|
||||
extern char _start[];
|
||||
|
||||
#endif
|
||||
|
@ -1,6 +0,0 @@
|
||||
#ifndef _SPARC_SECTIONS_H
|
||||
#define _SPARC_SECTIONS_H
|
||||
|
||||
#include <asm-generic/sections.h>
|
||||
|
||||
#endif
|
@ -1,9 +0,0 @@
|
||||
#ifndef _SPARC64_SECTIONS_H
|
||||
#define _SPARC64_SECTIONS_H
|
||||
|
||||
/* nothing to see, move along */
|
||||
#include <asm-generic/sections.h>
|
||||
|
||||
extern char _start[];
|
||||
|
||||
#endif
|
@ -13,17 +13,12 @@
|
||||
* and rebuild your kernel.
|
||||
*/
|
||||
|
||||
/* All of these locking primitives are expected to work properly
|
||||
* even in an RMO memory model, which currently is what the kernel
|
||||
* runs in.
|
||||
*
|
||||
* There is another issue. Because we play games to save cycles
|
||||
* in the non-contention case, we need to be extra careful about
|
||||
* branch targets into the "spinning" code. They live in their
|
||||
* own section, but the newer V9 branches have a shorter range
|
||||
* than the traditional 32-bit sparc branch variants. The rule
|
||||
* is that the branches that go into and out of the spinner sections
|
||||
* must be pre-V9 branches.
|
||||
/* Because we play games to save cycles in the non-contention case, we
|
||||
* need to be extra careful about branch targets into the "spinning"
|
||||
* code. They live in their own section, but the newer V9 branches
|
||||
* have a shorter range than the traditional 32-bit sparc branch
|
||||
* variants. The rule is that the branches that go into and out of
|
||||
* the spinner sections must be pre-V9 branches.
|
||||
*/
|
||||
|
||||
#define __raw_spin_is_locked(lp) ((lp)->lock != 0)
|
||||
@ -38,12 +33,10 @@ static inline void __raw_spin_lock(raw_spinlock_t *lock)
|
||||
|
||||
__asm__ __volatile__(
|
||||
"1: ldstub [%1], %0\n"
|
||||
" membar #StoreLoad | #StoreStore\n"
|
||||
" brnz,pn %0, 2f\n"
|
||||
" nop\n"
|
||||
" .subsection 2\n"
|
||||
"2: ldub [%1], %0\n"
|
||||
" membar #LoadLoad\n"
|
||||
" brnz,pt %0, 2b\n"
|
||||
" nop\n"
|
||||
" ba,a,pt %%xcc, 1b\n"
|
||||
@ -59,7 +52,6 @@ static inline int __raw_spin_trylock(raw_spinlock_t *lock)
|
||||
|
||||
__asm__ __volatile__(
|
||||
" ldstub [%1], %0\n"
|
||||
" membar #StoreLoad | #StoreStore"
|
||||
: "=r" (result)
|
||||
: "r" (lock)
|
||||
: "memory");
|
||||
@ -70,7 +62,6 @@ static inline int __raw_spin_trylock(raw_spinlock_t *lock)
|
||||
static inline void __raw_spin_unlock(raw_spinlock_t *lock)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
" membar #StoreStore | #LoadStore\n"
|
||||
" stb %%g0, [%0]"
|
||||
: /* No outputs */
|
||||
: "r" (lock)
|
||||
@ -83,14 +74,12 @@ static inline void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long fla
|
||||
|
||||
__asm__ __volatile__(
|
||||
"1: ldstub [%2], %0\n"
|
||||
" membar #StoreLoad | #StoreStore\n"
|
||||
" brnz,pn %0, 2f\n"
|
||||
" nop\n"
|
||||
" .subsection 2\n"
|
||||
"2: rdpr %%pil, %1\n"
|
||||
" wrpr %3, %%pil\n"
|
||||
"3: ldub [%2], %0\n"
|
||||
" membar #LoadLoad\n"
|
||||
" brnz,pt %0, 3b\n"
|
||||
" nop\n"
|
||||
" ba,pt %%xcc, 1b\n"
|
||||
@ -113,12 +102,10 @@ static void inline __read_lock(raw_rwlock_t *lock)
|
||||
"4: add %0, 1, %1\n"
|
||||
" cas [%2], %0, %1\n"
|
||||
" cmp %0, %1\n"
|
||||
" membar #StoreLoad | #StoreStore\n"
|
||||
" bne,pn %%icc, 1b\n"
|
||||
" nop\n"
|
||||
" .subsection 2\n"
|
||||
"2: ldsw [%2], %0\n"
|
||||
" membar #LoadLoad\n"
|
||||
" brlz,pt %0, 2b\n"
|
||||
" nop\n"
|
||||
" ba,a,pt %%xcc, 4b\n"
|
||||
@ -139,7 +126,6 @@ static int inline __read_trylock(raw_rwlock_t *lock)
|
||||
" add %0, 1, %1\n"
|
||||
" cas [%2], %0, %1\n"
|
||||
" cmp %0, %1\n"
|
||||
" membar #StoreLoad | #StoreStore\n"
|
||||
" bne,pn %%icc, 1b\n"
|
||||
" mov 1, %0\n"
|
||||
"2:"
|
||||
@ -155,7 +141,6 @@ static void inline __read_unlock(raw_rwlock_t *lock)
|
||||
unsigned long tmp1, tmp2;
|
||||
|
||||
__asm__ __volatile__(
|
||||
" membar #StoreLoad | #LoadLoad\n"
|
||||
"1: lduw [%2], %0\n"
|
||||
" sub %0, 1, %1\n"
|
||||
" cas [%2], %0, %1\n"
|
||||
@ -179,12 +164,10 @@ static void inline __write_lock(raw_rwlock_t *lock)
|
||||
"4: or %0, %3, %1\n"
|
||||
" cas [%2], %0, %1\n"
|
||||
" cmp %0, %1\n"
|
||||
" membar #StoreLoad | #StoreStore\n"
|
||||
" bne,pn %%icc, 1b\n"
|
||||
" nop\n"
|
||||
" .subsection 2\n"
|
||||
"2: lduw [%2], %0\n"
|
||||
" membar #LoadLoad\n"
|
||||
" brnz,pt %0, 2b\n"
|
||||
" nop\n"
|
||||
" ba,a,pt %%xcc, 4b\n"
|
||||
@ -197,7 +180,6 @@ static void inline __write_lock(raw_rwlock_t *lock)
|
||||
static void inline __write_unlock(raw_rwlock_t *lock)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
" membar #LoadStore | #StoreStore\n"
|
||||
" stw %%g0, [%0]"
|
||||
: /* no outputs */
|
||||
: "r" (lock)
|
||||
@ -217,7 +199,6 @@ static int inline __write_trylock(raw_rwlock_t *lock)
|
||||
" or %0, %4, %1\n"
|
||||
" cas [%3], %0, %1\n"
|
||||
" cmp %0, %1\n"
|
||||
" membar #StoreLoad | #StoreStore\n"
|
||||
" bne,pn %%icc, 1b\n"
|
||||
" nop\n"
|
||||
" mov 1, %2\n"
|
||||
|
@ -6,6 +6,8 @@
|
||||
#ifndef _SPARC64_SPITFIRE_H
|
||||
#define _SPARC64_SPITFIRE_H
|
||||
|
||||
#ifdef CONFIG_SPARC64
|
||||
|
||||
#include <asm/asi.h>
|
||||
|
||||
/* The following register addresses are accessible via ASI_DMMU
|
||||
@ -338,5 +340,5 @@ static inline void cheetah_put_itlb_data(int entry, unsigned long data)
|
||||
}
|
||||
|
||||
#endif /* !(__ASSEMBLY__) */
|
||||
|
||||
#endif /* CONFIG_SPARC64 */
|
||||
#endif /* !(_SPARC64_SPITFIRE_H) */
|
||||
|
@ -15,6 +15,11 @@
|
||||
|
||||
#include <linux/irqflags.h>
|
||||
|
||||
static inline unsigned int probe_irq_mask(unsigned long val)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sparc (general) CPU types
|
||||
*/
|
||||
|
@ -59,20 +59,9 @@ do { __asm__ __volatile__("ba,pt %%xcc, 1f\n\t" \
|
||||
: : : "memory"); \
|
||||
} while (0)
|
||||
|
||||
#define mb() \
|
||||
membar_safe("#LoadLoad | #LoadStore | #StoreStore | #StoreLoad")
|
||||
#define rmb() \
|
||||
membar_safe("#LoadLoad")
|
||||
#define wmb() \
|
||||
membar_safe("#StoreStore")
|
||||
#define membar_storeload() \
|
||||
membar_safe("#StoreLoad")
|
||||
#define membar_storeload_storestore() \
|
||||
membar_safe("#StoreLoad | #StoreStore")
|
||||
#define membar_storeload_loadload() \
|
||||
membar_safe("#StoreLoad | #LoadLoad")
|
||||
#define membar_storestore_loadstore() \
|
||||
membar_safe("#StoreStore | #LoadStore")
|
||||
#define mb() membar_safe("#StoreLoad")
|
||||
#define rmb() __asm__ __volatile__("":::"memory")
|
||||
#define wmb() __asm__ __volatile__("":::"memory")
|
||||
|
||||
#endif
|
||||
|
||||
@ -80,20 +69,20 @@ do { __asm__ __volatile__("ba,pt %%xcc, 1f\n\t" \
|
||||
|
||||
#define read_barrier_depends() do { } while(0)
|
||||
#define set_mb(__var, __value) \
|
||||
do { __var = __value; membar_storeload_storestore(); } while(0)
|
||||
do { __var = __value; membar_safe("#StoreLoad"); } while(0)
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#define smp_mb() mb()
|
||||
#define smp_rmb() rmb()
|
||||
#define smp_wmb() wmb()
|
||||
#define smp_read_barrier_depends() read_barrier_depends()
|
||||
#else
|
||||
#define smp_mb() __asm__ __volatile__("":::"memory")
|
||||
#define smp_rmb() __asm__ __volatile__("":::"memory")
|
||||
#define smp_wmb() __asm__ __volatile__("":::"memory")
|
||||
#define smp_read_barrier_depends() do { } while(0)
|
||||
#endif
|
||||
|
||||
#define smp_read_barrier_depends() do { } while(0)
|
||||
|
||||
#define flushi(addr) __asm__ __volatile__ ("flush %0" : : "r" (addr) : "memory")
|
||||
|
||||
#define flushw_all() __asm__ __volatile__("flushw")
|
||||
@ -107,11 +96,12 @@ do { __asm__ __volatile__("ba,pt %%xcc, 1f\n\t" \
|
||||
* arch/sparc64/kernel/smp.c:smp_percpu_timer_interrupt()
|
||||
* for more information.
|
||||
*/
|
||||
#define reset_pic() \
|
||||
__asm__ __volatile__("ba,pt %xcc, 99f\n\t" \
|
||||
#define write_pic(__p) \
|
||||
__asm__ __volatile__("ba,pt %%xcc, 99f\n\t" \
|
||||
".align 64\n" \
|
||||
"99:wr %g0, 0x0, %pic\n\t" \
|
||||
"rd %pic, %g0")
|
||||
"99:wr %0, 0x0, %%pic\n\t" \
|
||||
"rd %%pic, %%g0" : : "r" (__p))
|
||||
#define reset_pic() write_pic(0)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
@ -170,6 +160,7 @@ do { if (test_thread_flag(TIF_PERFCTR)) { \
|
||||
"stb %%o5, [%%g6 + %5]\n\t" \
|
||||
"rdpr %%cwp, %%o5\n\t" \
|
||||
"stb %%o5, [%%g6 + %8]\n\t" \
|
||||
"wrpr %%g0, 15, %%pil\n\t" \
|
||||
"mov %4, %%g6\n\t" \
|
||||
"ldub [%4 + %8], %%g1\n\t" \
|
||||
"wrpr %%g1, %%cwp\n\t" \
|
||||
@ -180,6 +171,7 @@ do { if (test_thread_flag(TIF_PERFCTR)) { \
|
||||
"ldx [%%sp + 2047 + 0x70], %%i6\n\t" \
|
||||
"ldx [%%sp + 2047 + 0x78], %%i7\n\t" \
|
||||
"ldx [%%g6 + %9], %%g4\n\t" \
|
||||
"wrpr %%g0, 14, %%pil\n\t" \
|
||||
"brz,pt %%o7, switch_to_pc\n\t" \
|
||||
" mov %%g7, %0\n\t" \
|
||||
"sethi %%hi(ret_from_syscall), %%g1\n\t" \
|
||||
@ -209,14 +201,12 @@ static inline unsigned long xchg32(__volatile__ unsigned int *m, unsigned int va
|
||||
unsigned long tmp1, tmp2;
|
||||
|
||||
__asm__ __volatile__(
|
||||
" membar #StoreLoad | #LoadLoad\n"
|
||||
" mov %0, %1\n"
|
||||
"1: lduw [%4], %2\n"
|
||||
" cas [%4], %2, %0\n"
|
||||
" cmp %2, %0\n"
|
||||
" bne,a,pn %%icc, 1b\n"
|
||||
" mov %1, %0\n"
|
||||
" membar #StoreLoad | #StoreStore\n"
|
||||
: "=&r" (val), "=&r" (tmp1), "=&r" (tmp2)
|
||||
: "0" (val), "r" (m)
|
||||
: "cc", "memory");
|
||||
@ -228,14 +218,12 @@ static inline unsigned long xchg64(__volatile__ unsigned long *m, unsigned long
|
||||
unsigned long tmp1, tmp2;
|
||||
|
||||
__asm__ __volatile__(
|
||||
" membar #StoreLoad | #LoadLoad\n"
|
||||
" mov %0, %1\n"
|
||||
"1: ldx [%4], %2\n"
|
||||
" casx [%4], %2, %0\n"
|
||||
" cmp %2, %0\n"
|
||||
" bne,a,pn %%xcc, 1b\n"
|
||||
" mov %1, %0\n"
|
||||
" membar #StoreLoad | #StoreStore\n"
|
||||
: "=&r" (val), "=&r" (tmp1), "=&r" (tmp2)
|
||||
: "0" (val), "r" (m)
|
||||
: "cc", "memory");
|
||||
@ -272,9 +260,7 @@ extern void die_if_kernel(char *str, struct pt_regs *regs) __attribute__ ((noret
|
||||
static inline unsigned long
|
||||
__cmpxchg_u32(volatile int *m, int old, int new)
|
||||
{
|
||||
__asm__ __volatile__("membar #StoreLoad | #LoadLoad\n"
|
||||
"cas [%2], %3, %0\n\t"
|
||||
"membar #StoreLoad | #StoreStore"
|
||||
__asm__ __volatile__("cas [%2], %3, %0"
|
||||
: "=&r" (new)
|
||||
: "0" (new), "r" (m), "r" (old)
|
||||
: "memory");
|
||||
@ -285,9 +271,7 @@ __cmpxchg_u32(volatile int *m, int old, int new)
|
||||
static inline unsigned long
|
||||
__cmpxchg_u64(volatile long *m, unsigned long old, unsigned long new)
|
||||
{
|
||||
__asm__ __volatile__("membar #StoreLoad | #LoadLoad\n"
|
||||
"casx [%2], %3, %0\n\t"
|
||||
"membar #StoreLoad | #StoreStore"
|
||||
__asm__ __volatile__("casx [%2], %3, %0"
|
||||
: "=&r" (new)
|
||||
: "0" (new), "r" (m), "r" (old)
|
||||
: "memory");
|
||||
|
@ -50,8 +50,6 @@
|
||||
#define TSB_TAG_INVALID_BIT 46
|
||||
#define TSB_TAG_INVALID_HIGH (1 << (TSB_TAG_INVALID_BIT - 32))
|
||||
|
||||
#define TSB_MEMBAR membar #StoreStore
|
||||
|
||||
/* Some cpus support physical address quad loads. We want to use
|
||||
* those if possible so we don't need to hard-lock the TSB mapping
|
||||
* into the TLB. We encode some instruction patching in order to
|
||||
@ -128,13 +126,11 @@ extern struct tsb_phys_patch_entry __tsb_phys_patch, __tsb_phys_patch_end;
|
||||
cmp REG1, REG2; \
|
||||
bne,pn %icc, 99b; \
|
||||
nop; \
|
||||
TSB_MEMBAR
|
||||
|
||||
#define TSB_WRITE(TSB, TTE, TAG) \
|
||||
add TSB, 0x8, TSB; \
|
||||
TSB_STORE(TSB, TTE); \
|
||||
sub TSB, 0x8, TSB; \
|
||||
TSB_MEMBAR; \
|
||||
TSB_STORE(TSB, TAG);
|
||||
|
||||
#define KTSB_LOAD_QUAD(TSB, REG) \
|
||||
@ -153,13 +149,11 @@ extern struct tsb_phys_patch_entry __tsb_phys_patch, __tsb_phys_patch_end;
|
||||
cmp REG1, REG2; \
|
||||
bne,pn %icc, 99b; \
|
||||
nop; \
|
||||
TSB_MEMBAR
|
||||
|
||||
#define KTSB_WRITE(TSB, TTE, TAG) \
|
||||
add TSB, 0x8, TSB; \
|
||||
stxa TTE, [TSB] ASI_N; \
|
||||
sub TSB, 0x8, TSB; \
|
||||
TSB_MEMBAR; \
|
||||
stxa TAG, [TSB] ASI_N;
|
||||
|
||||
/* Do a kernel page table walk. Leaves physical PTE pointer in
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define _SPARC64_TTABLE_H
|
||||
|
||||
#include <asm/utrap.h>
|
||||
#include <asm/pil.h>
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#include <asm/thread_info.h>
|
||||
@ -123,7 +124,7 @@
|
||||
|
||||
#define TRAP_IRQ(routine, level) \
|
||||
rdpr %pil, %g2; \
|
||||
wrpr %g0, 15, %pil; \
|
||||
wrpr %g0, PIL_NORMAL_MAX, %pil; \
|
||||
sethi %hi(1f-4), %g7; \
|
||||
ba,pt %xcc, etrap_irq; \
|
||||
or %g7, %lo(1f-4), %g7; \
|
||||
@ -143,7 +144,7 @@
|
||||
|
||||
#define TRAP_IRQ(routine, level) \
|
||||
rdpr %pil, %g2; \
|
||||
wrpr %g0, 15, %pil; \
|
||||
wrpr %g0, PIL_NORMAL_MAX, %pil; \
|
||||
ba,pt %xcc, etrap_irq; \
|
||||
rd %pc, %g7; \
|
||||
mov level, %o0; \
|
||||
@ -153,6 +154,16 @@
|
||||
|
||||
#endif
|
||||
|
||||
#define TRAP_NMI_IRQ(routine, level) \
|
||||
rdpr %pil, %g2; \
|
||||
wrpr %g0, PIL_NMI, %pil; \
|
||||
ba,pt %xcc, etrap_irq; \
|
||||
rd %pc, %g7; \
|
||||
mov level, %o0; \
|
||||
call routine; \
|
||||
add %sp, PTREGS_OFF, %o1; \
|
||||
ba,a,pt %xcc, rtrap_nmi;
|
||||
|
||||
#define TRAP_IVEC TRAP_NOSAVE(do_ivec)
|
||||
|
||||
#define BTRAP(lvl) TRAP_ARG(bad_trap, lvl)
|
||||
|
@ -1,8 +1,444 @@
|
||||
#ifndef ___ASM_SPARC_UNISTD_H
|
||||
#define ___ASM_SPARC_UNISTD_H
|
||||
#if defined(__sparc__) && defined(__arch64__)
|
||||
#include <asm/unistd_64.h>
|
||||
#ifndef _SPARC_UNISTD_H
|
||||
#define _SPARC_UNISTD_H
|
||||
|
||||
/*
|
||||
* System calls under the Sparc.
|
||||
*
|
||||
* Don't be scared by the ugly clobbers, it is the only way I can
|
||||
* think of right now to force the arguments into fixed registers
|
||||
* before the trap into the system call with gcc 'asm' statements.
|
||||
*
|
||||
* Copyright (C) 1995, 2007 David S. Miller (davem@davemloft.net)
|
||||
*
|
||||
* SunOS compatibility based upon preliminary work which is:
|
||||
*
|
||||
* Copyright (C) 1995 Adrian M. Rodriguez (adrian@remus.rutgers.edu)
|
||||
*/
|
||||
#ifndef __32bit_syscall_numbers__
|
||||
#ifndef __arch64__
|
||||
#define __32bit_syscall_numbers__
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define __NR_restart_syscall 0 /* Linux Specific */
|
||||
#define __NR_exit 1 /* Common */
|
||||
#define __NR_fork 2 /* Common */
|
||||
#define __NR_read 3 /* Common */
|
||||
#define __NR_write 4 /* Common */
|
||||
#define __NR_open 5 /* Common */
|
||||
#define __NR_close 6 /* Common */
|
||||
#define __NR_wait4 7 /* Common */
|
||||
#define __NR_creat 8 /* Common */
|
||||
#define __NR_link 9 /* Common */
|
||||
#define __NR_unlink 10 /* Common */
|
||||
#define __NR_execv 11 /* SunOS Specific */
|
||||
#define __NR_chdir 12 /* Common */
|
||||
#define __NR_chown 13 /* Common */
|
||||
#define __NR_mknod 14 /* Common */
|
||||
#define __NR_chmod 15 /* Common */
|
||||
#define __NR_lchown 16 /* Common */
|
||||
#define __NR_brk 17 /* Common */
|
||||
#define __NR_perfctr 18 /* Performance counter operations */
|
||||
#define __NR_lseek 19 /* Common */
|
||||
#define __NR_getpid 20 /* Common */
|
||||
#define __NR_capget 21 /* Linux Specific */
|
||||
#define __NR_capset 22 /* Linux Specific */
|
||||
#define __NR_setuid 23 /* Implemented via setreuid in SunOS */
|
||||
#define __NR_getuid 24 /* Common */
|
||||
#define __NR_vmsplice 25 /* ENOSYS under SunOS */
|
||||
#define __NR_ptrace 26 /* Common */
|
||||
#define __NR_alarm 27 /* Implemented via setitimer in SunOS */
|
||||
#define __NR_sigaltstack 28 /* Common */
|
||||
#define __NR_pause 29 /* Is sigblock(0)->sigpause() in SunOS */
|
||||
#define __NR_utime 30 /* Implemented via utimes() under SunOS */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_lchown32 31 /* Linux sparc32 specific */
|
||||
#define __NR_fchown32 32 /* Linux sparc32 specific */
|
||||
#endif
|
||||
#define __NR_access 33 /* Common */
|
||||
#define __NR_nice 34 /* Implemented via get/setpriority() in SunOS */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_chown32 35 /* Linux sparc32 specific */
|
||||
#endif
|
||||
#define __NR_sync 36 /* Common */
|
||||
#define __NR_kill 37 /* Common */
|
||||
#define __NR_stat 38 /* Common */
|
||||
#define __NR_sendfile 39 /* Linux Specific */
|
||||
#define __NR_lstat 40 /* Common */
|
||||
#define __NR_dup 41 /* Common */
|
||||
#define __NR_pipe 42 /* Common */
|
||||
#define __NR_times 43 /* Implemented via getrusage() in SunOS */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_getuid32 44 /* Linux sparc32 specific */
|
||||
#endif
|
||||
#define __NR_umount2 45 /* Linux Specific */
|
||||
#define __NR_setgid 46 /* Implemented via setregid() in SunOS */
|
||||
#define __NR_getgid 47 /* Common */
|
||||
#define __NR_signal 48 /* Implemented via sigvec() in SunOS */
|
||||
#define __NR_geteuid 49 /* SunOS calls getuid() */
|
||||
#define __NR_getegid 50 /* SunOS calls getgid() */
|
||||
#define __NR_acct 51 /* Common */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_getgid32 53 /* Linux sparc32 specific */
|
||||
#else
|
||||
#include <asm/unistd_32.h>
|
||||
#define __NR_memory_ordering 52 /* Linux Specific */
|
||||
#endif
|
||||
#define __NR_ioctl 54 /* Common */
|
||||
#define __NR_reboot 55 /* Common */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_mmap2 56 /* Linux sparc32 Specific */
|
||||
#endif
|
||||
#define __NR_symlink 57 /* Common */
|
||||
#define __NR_readlink 58 /* Common */
|
||||
#define __NR_execve 59 /* Common */
|
||||
#define __NR_umask 60 /* Common */
|
||||
#define __NR_chroot 61 /* Common */
|
||||
#define __NR_fstat 62 /* Common */
|
||||
#define __NR_fstat64 63 /* Linux Specific */
|
||||
#define __NR_getpagesize 64 /* Common */
|
||||
#define __NR_msync 65 /* Common in newer 1.3.x revs... */
|
||||
#define __NR_vfork 66 /* Common */
|
||||
#define __NR_pread64 67 /* Linux Specific */
|
||||
#define __NR_pwrite64 68 /* Linux Specific */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_geteuid32 69 /* Linux sparc32, sbrk under SunOS */
|
||||
#define __NR_getegid32 70 /* Linux sparc32, sstk under SunOS */
|
||||
#endif
|
||||
#define __NR_mmap 71 /* Common */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_setreuid32 72 /* Linux sparc32, vadvise under SunOS */
|
||||
#endif
|
||||
#define __NR_munmap 73 /* Common */
|
||||
#define __NR_mprotect 74 /* Common */
|
||||
#define __NR_madvise 75 /* Common */
|
||||
#define __NR_vhangup 76 /* Common */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_truncate64 77 /* Linux sparc32 Specific */
|
||||
#endif
|
||||
#define __NR_mincore 78 /* Common */
|
||||
#define __NR_getgroups 79 /* Common */
|
||||
#define __NR_setgroups 80 /* Common */
|
||||
#define __NR_getpgrp 81 /* Common */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_setgroups32 82 /* Linux sparc32, setpgrp under SunOS */
|
||||
#endif
|
||||
#define __NR_setitimer 83 /* Common */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_ftruncate64 84 /* Linux sparc32 Specific */
|
||||
#endif
|
||||
#define __NR_swapon 85 /* Common */
|
||||
#define __NR_getitimer 86 /* Common */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_setuid32 87 /* Linux sparc32, gethostname under SunOS */
|
||||
#endif
|
||||
#define __NR_sethostname 88 /* Common */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_setgid32 89 /* Linux sparc32, getdtablesize under SunOS */
|
||||
#endif
|
||||
#define __NR_dup2 90 /* Common */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_setfsuid32 91 /* Linux sparc32, getdopt under SunOS */
|
||||
#endif
|
||||
#define __NR_fcntl 92 /* Common */
|
||||
#define __NR_select 93 /* Common */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_setfsgid32 94 /* Linux sparc32, setdopt under SunOS */
|
||||
#endif
|
||||
#define __NR_fsync 95 /* Common */
|
||||
#define __NR_setpriority 96 /* Common */
|
||||
#define __NR_socket 97 /* Common */
|
||||
#define __NR_connect 98 /* Common */
|
||||
#define __NR_accept 99 /* Common */
|
||||
#define __NR_getpriority 100 /* Common */
|
||||
#define __NR_rt_sigreturn 101 /* Linux Specific */
|
||||
#define __NR_rt_sigaction 102 /* Linux Specific */
|
||||
#define __NR_rt_sigprocmask 103 /* Linux Specific */
|
||||
#define __NR_rt_sigpending 104 /* Linux Specific */
|
||||
#define __NR_rt_sigtimedwait 105 /* Linux Specific */
|
||||
#define __NR_rt_sigqueueinfo 106 /* Linux Specific */
|
||||
#define __NR_rt_sigsuspend 107 /* Linux Specific */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_setresuid32 108 /* Linux Specific, sigvec under SunOS */
|
||||
#define __NR_getresuid32 109 /* Linux Specific, sigblock under SunOS */
|
||||
#define __NR_setresgid32 110 /* Linux Specific, sigsetmask under SunOS */
|
||||
#define __NR_getresgid32 111 /* Linux Specific, sigpause under SunOS */
|
||||
#define __NR_setregid32 112 /* Linux sparc32, sigstack under SunOS */
|
||||
#else
|
||||
#define __NR_setresuid 108 /* Linux Specific, sigvec under SunOS */
|
||||
#define __NR_getresuid 109 /* Linux Specific, sigblock under SunOS */
|
||||
#define __NR_setresgid 110 /* Linux Specific, sigsetmask under SunOS */
|
||||
#define __NR_getresgid 111 /* Linux Specific, sigpause under SunOS */
|
||||
#endif
|
||||
#define __NR_recvmsg 113 /* Common */
|
||||
#define __NR_sendmsg 114 /* Common */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_getgroups32 115 /* Linux sparc32, vtrace under SunOS */
|
||||
#endif
|
||||
#define __NR_gettimeofday 116 /* Common */
|
||||
#define __NR_getrusage 117 /* Common */
|
||||
#define __NR_getsockopt 118 /* Common */
|
||||
#define __NR_getcwd 119 /* Linux Specific */
|
||||
#define __NR_readv 120 /* Common */
|
||||
#define __NR_writev 121 /* Common */
|
||||
#define __NR_settimeofday 122 /* Common */
|
||||
#define __NR_fchown 123 /* Common */
|
||||
#define __NR_fchmod 124 /* Common */
|
||||
#define __NR_recvfrom 125 /* Common */
|
||||
#define __NR_setreuid 126 /* Common */
|
||||
#define __NR_setregid 127 /* Common */
|
||||
#define __NR_rename 128 /* Common */
|
||||
#define __NR_truncate 129 /* Common */
|
||||
#define __NR_ftruncate 130 /* Common */
|
||||
#define __NR_flock 131 /* Common */
|
||||
#define __NR_lstat64 132 /* Linux Specific */
|
||||
#define __NR_sendto 133 /* Common */
|
||||
#define __NR_shutdown 134 /* Common */
|
||||
#define __NR_socketpair 135 /* Common */
|
||||
#define __NR_mkdir 136 /* Common */
|
||||
#define __NR_rmdir 137 /* Common */
|
||||
#define __NR_utimes 138 /* SunOS Specific */
|
||||
#define __NR_stat64 139 /* Linux Specific */
|
||||
#define __NR_sendfile64 140 /* adjtime under SunOS */
|
||||
#define __NR_getpeername 141 /* Common */
|
||||
#define __NR_futex 142 /* gethostid under SunOS */
|
||||
#define __NR_gettid 143 /* ENOSYS under SunOS */
|
||||
#define __NR_getrlimit 144 /* Common */
|
||||
#define __NR_setrlimit 145 /* Common */
|
||||
#define __NR_pivot_root 146 /* Linux Specific, killpg under SunOS */
|
||||
#define __NR_prctl 147 /* ENOSYS under SunOS */
|
||||
#define __NR_pciconfig_read 148 /* ENOSYS under SunOS */
|
||||
#define __NR_pciconfig_write 149 /* ENOSYS under SunOS */
|
||||
#define __NR_getsockname 150 /* Common */
|
||||
#define __NR_inotify_init 151 /* Linux specific */
|
||||
#define __NR_inotify_add_watch 152 /* Linux specific */
|
||||
#define __NR_poll 153 /* Common */
|
||||
#define __NR_getdents64 154 /* Linux specific */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_fcntl64 155 /* Linux sparc32 Specific */
|
||||
#endif
|
||||
#define __NR_inotify_rm_watch 156 /* Linux specific */
|
||||
#define __NR_statfs 157 /* Common */
|
||||
#define __NR_fstatfs 158 /* Common */
|
||||
#define __NR_umount 159 /* Common */
|
||||
#define __NR_sched_set_affinity 160 /* Linux specific, async_daemon under SunOS */
|
||||
#define __NR_sched_get_affinity 161 /* Linux specific, getfh under SunOS */
|
||||
#define __NR_getdomainname 162 /* SunOS Specific */
|
||||
#define __NR_setdomainname 163 /* Common */
|
||||
#ifndef __32bit_syscall_numbers__
|
||||
#define __NR_utrap_install 164 /* SYSV ABI/v9 required */
|
||||
#endif
|
||||
#define __NR_quotactl 165 /* Common */
|
||||
#define __NR_set_tid_address 166 /* Linux specific, exportfs under SunOS */
|
||||
#define __NR_mount 167 /* Common */
|
||||
#define __NR_ustat 168 /* Common */
|
||||
#define __NR_setxattr 169 /* SunOS: semsys */
|
||||
#define __NR_lsetxattr 170 /* SunOS: msgsys */
|
||||
#define __NR_fsetxattr 171 /* SunOS: shmsys */
|
||||
#define __NR_getxattr 172 /* SunOS: auditsys */
|
||||
#define __NR_lgetxattr 173 /* SunOS: rfssys */
|
||||
#define __NR_getdents 174 /* Common */
|
||||
#define __NR_setsid 175 /* Common */
|
||||
#define __NR_fchdir 176 /* Common */
|
||||
#define __NR_fgetxattr 177 /* SunOS: fchroot */
|
||||
#define __NR_listxattr 178 /* SunOS: vpixsys */
|
||||
#define __NR_llistxattr 179 /* SunOS: aioread */
|
||||
#define __NR_flistxattr 180 /* SunOS: aiowrite */
|
||||
#define __NR_removexattr 181 /* SunOS: aiowait */
|
||||
#define __NR_lremovexattr 182 /* SunOS: aiocancel */
|
||||
#define __NR_sigpending 183 /* Common */
|
||||
#define __NR_query_module 184 /* Linux Specific */
|
||||
#define __NR_setpgid 185 /* Common */
|
||||
#define __NR_fremovexattr 186 /* SunOS: pathconf */
|
||||
#define __NR_tkill 187 /* SunOS: fpathconf */
|
||||
#define __NR_exit_group 188 /* Linux specific, sysconf undef SunOS */
|
||||
#define __NR_uname 189 /* Linux Specific */
|
||||
#define __NR_init_module 190 /* Linux Specific */
|
||||
#define __NR_personality 191 /* Linux Specific */
|
||||
#define __NR_remap_file_pages 192 /* Linux Specific */
|
||||
#define __NR_epoll_create 193 /* Linux Specific */
|
||||
#define __NR_epoll_ctl 194 /* Linux Specific */
|
||||
#define __NR_epoll_wait 195 /* Linux Specific */
|
||||
#define __NR_ioprio_set 196 /* Linux Specific */
|
||||
#define __NR_getppid 197 /* Linux Specific */
|
||||
#define __NR_sigaction 198 /* Linux Specific */
|
||||
#define __NR_sgetmask 199 /* Linux Specific */
|
||||
#define __NR_ssetmask 200 /* Linux Specific */
|
||||
#define __NR_sigsuspend 201 /* Linux Specific */
|
||||
#define __NR_oldlstat 202 /* Linux Specific */
|
||||
#define __NR_uselib 203 /* Linux Specific */
|
||||
#define __NR_readdir 204 /* Linux Specific */
|
||||
#define __NR_readahead 205 /* Linux Specific */
|
||||
#define __NR_socketcall 206 /* Linux Specific */
|
||||
#define __NR_syslog 207 /* Linux Specific */
|
||||
#define __NR_lookup_dcookie 208 /* Linux Specific */
|
||||
#define __NR_fadvise64 209 /* Linux Specific */
|
||||
#define __NR_fadvise64_64 210 /* Linux Specific */
|
||||
#define __NR_tgkill 211 /* Linux Specific */
|
||||
#define __NR_waitpid 212 /* Linux Specific */
|
||||
#define __NR_swapoff 213 /* Linux Specific */
|
||||
#define __NR_sysinfo 214 /* Linux Specific */
|
||||
#define __NR_ipc 215 /* Linux Specific */
|
||||
#define __NR_sigreturn 216 /* Linux Specific */
|
||||
#define __NR_clone 217 /* Linux Specific */
|
||||
#define __NR_ioprio_get 218 /* Linux Specific */
|
||||
#define __NR_adjtimex 219 /* Linux Specific */
|
||||
#define __NR_sigprocmask 220 /* Linux Specific */
|
||||
#define __NR_create_module 221 /* Linux Specific */
|
||||
#define __NR_delete_module 222 /* Linux Specific */
|
||||
#define __NR_get_kernel_syms 223 /* Linux Specific */
|
||||
#define __NR_getpgid 224 /* Linux Specific */
|
||||
#define __NR_bdflush 225 /* Linux Specific */
|
||||
#define __NR_sysfs 226 /* Linux Specific */
|
||||
#define __NR_afs_syscall 227 /* Linux Specific */
|
||||
#define __NR_setfsuid 228 /* Linux Specific */
|
||||
#define __NR_setfsgid 229 /* Linux Specific */
|
||||
#define __NR__newselect 230 /* Linux Specific */
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
#define __NR_time 231 /* Linux Specific */
|
||||
#else
|
||||
#ifdef __KERNEL__
|
||||
#define __NR_time 231 /* Linux sparc32 */
|
||||
#endif
|
||||
#endif
|
||||
#define __NR_splice 232 /* Linux Specific */
|
||||
#define __NR_stime 233 /* Linux Specific */
|
||||
#define __NR_statfs64 234 /* Linux Specific */
|
||||
#define __NR_fstatfs64 235 /* Linux Specific */
|
||||
#define __NR__llseek 236 /* Linux Specific */
|
||||
#define __NR_mlock 237
|
||||
#define __NR_munlock 238
|
||||
#define __NR_mlockall 239
|
||||
#define __NR_munlockall 240
|
||||
#define __NR_sched_setparam 241
|
||||
#define __NR_sched_getparam 242
|
||||
#define __NR_sched_setscheduler 243
|
||||
#define __NR_sched_getscheduler 244
|
||||
#define __NR_sched_yield 245
|
||||
#define __NR_sched_get_priority_max 246
|
||||
#define __NR_sched_get_priority_min 247
|
||||
#define __NR_sched_rr_get_interval 248
|
||||
#define __NR_nanosleep 249
|
||||
#define __NR_mremap 250
|
||||
#define __NR__sysctl 251
|
||||
#define __NR_getsid 252
|
||||
#define __NR_fdatasync 253
|
||||
#define __NR_nfsservctl 254
|
||||
#define __NR_sync_file_range 255
|
||||
#define __NR_clock_settime 256
|
||||
#define __NR_clock_gettime 257
|
||||
#define __NR_clock_getres 258
|
||||
#define __NR_clock_nanosleep 259
|
||||
#define __NR_sched_getaffinity 260
|
||||
#define __NR_sched_setaffinity 261
|
||||
#define __NR_timer_settime 262
|
||||
#define __NR_timer_gettime 263
|
||||
#define __NR_timer_getoverrun 264
|
||||
#define __NR_timer_delete 265
|
||||
#define __NR_timer_create 266
|
||||
/* #define __NR_vserver 267 Reserved for VSERVER */
|
||||
#define __NR_io_setup 268
|
||||
#define __NR_io_destroy 269
|
||||
#define __NR_io_submit 270
|
||||
#define __NR_io_cancel 271
|
||||
#define __NR_io_getevents 272
|
||||
#define __NR_mq_open 273
|
||||
#define __NR_mq_unlink 274
|
||||
#define __NR_mq_timedsend 275
|
||||
#define __NR_mq_timedreceive 276
|
||||
#define __NR_mq_notify 277
|
||||
#define __NR_mq_getsetattr 278
|
||||
#define __NR_waitid 279
|
||||
#define __NR_tee 280
|
||||
#define __NR_add_key 281
|
||||
#define __NR_request_key 282
|
||||
#define __NR_keyctl 283
|
||||
#define __NR_openat 284
|
||||
#define __NR_mkdirat 285
|
||||
#define __NR_mknodat 286
|
||||
#define __NR_fchownat 287
|
||||
#define __NR_futimesat 288
|
||||
#define __NR_fstatat64 289
|
||||
#define __NR_unlinkat 290
|
||||
#define __NR_renameat 291
|
||||
#define __NR_linkat 292
|
||||
#define __NR_symlinkat 293
|
||||
#define __NR_readlinkat 294
|
||||
#define __NR_fchmodat 295
|
||||
#define __NR_faccessat 296
|
||||
#define __NR_pselect6 297
|
||||
#define __NR_ppoll 298
|
||||
#define __NR_unshare 299
|
||||
#define __NR_set_robust_list 300
|
||||
#define __NR_get_robust_list 301
|
||||
#define __NR_migrate_pages 302
|
||||
#define __NR_mbind 303
|
||||
#define __NR_get_mempolicy 304
|
||||
#define __NR_set_mempolicy 305
|
||||
#define __NR_kexec_load 306
|
||||
#define __NR_move_pages 307
|
||||
#define __NR_getcpu 308
|
||||
#define __NR_epoll_pwait 309
|
||||
#define __NR_utimensat 310
|
||||
#define __NR_signalfd 311
|
||||
#define __NR_timerfd_create 312
|
||||
#define __NR_eventfd 313
|
||||
#define __NR_fallocate 314
|
||||
#define __NR_timerfd_settime 315
|
||||
#define __NR_timerfd_gettime 316
|
||||
#define __NR_signalfd4 317
|
||||
#define __NR_eventfd2 318
|
||||
#define __NR_epoll_create1 319
|
||||
#define __NR_dup3 320
|
||||
#define __NR_pipe2 321
|
||||
#define __NR_inotify_init1 322
|
||||
#define __NR_accept4 323
|
||||
|
||||
#define NR_SYSCALLS 324
|
||||
|
||||
#ifdef __32bit_syscall_numbers__
|
||||
/* Sparc 32-bit only has the "setresuid32", "getresuid32" variants,
|
||||
* it never had the plain ones and there is no value to adding those
|
||||
* old versions into the syscall table.
|
||||
*/
|
||||
#define __IGNORE_setresuid
|
||||
#define __IGNORE_getresuid
|
||||
#define __IGNORE_setresgid
|
||||
#define __IGNORE_getresgid
|
||||
#endif
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define __ARCH_WANT_IPC_PARSE_VERSION
|
||||
#define __ARCH_WANT_OLD_READDIR
|
||||
#define __ARCH_WANT_STAT64
|
||||
#define __ARCH_WANT_SYS_ALARM
|
||||
#define __ARCH_WANT_SYS_GETHOSTNAME
|
||||
#define __ARCH_WANT_SYS_PAUSE
|
||||
#define __ARCH_WANT_SYS_SGETMASK
|
||||
#define __ARCH_WANT_SYS_SIGNAL
|
||||
#define __ARCH_WANT_SYS_TIME
|
||||
#define __ARCH_WANT_SYS_UTIME
|
||||
#define __ARCH_WANT_SYS_WAITPID
|
||||
#define __ARCH_WANT_SYS_SOCKETCALL
|
||||
#define __ARCH_WANT_SYS_FADVISE64
|
||||
#define __ARCH_WANT_SYS_GETPGRP
|
||||
#define __ARCH_WANT_SYS_LLSEEK
|
||||
#define __ARCH_WANT_SYS_NICE
|
||||
#define __ARCH_WANT_SYS_OLDUMOUNT
|
||||
#define __ARCH_WANT_SYS_SIGPENDING
|
||||
#define __ARCH_WANT_SYS_SIGPROCMASK
|
||||
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
|
||||
#ifndef __32bit_syscall_numbers__
|
||||
#define __ARCH_WANT_COMPAT_SYS_TIME
|
||||
#define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
|
||||
#endif
|
||||
|
||||
/*
|
||||
* "Conditional" syscalls
|
||||
*
|
||||
* What we want is __attribute__((weak,alias("sys_ni_syscall"))),
|
||||
* but it doesn't work on all toolchains, so we just do it by hand
|
||||
*/
|
||||
#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _SPARC_UNISTD_H */
|
||||
|
@ -1,385 +0,0 @@
|
||||
#ifndef _SPARC_UNISTD_H
|
||||
#define _SPARC_UNISTD_H
|
||||
|
||||
/*
|
||||
* System calls under the Sparc.
|
||||
*
|
||||
* Don't be scared by the ugly clobbers, it is the only way I can
|
||||
* think of right now to force the arguments into fixed registers
|
||||
* before the trap into the system call with gcc 'asm' statements.
|
||||
*
|
||||
* Copyright (C) 1995, 2007 David S. Miller (davem@davemloft.net)
|
||||
*
|
||||
* SunOS compatibility based upon preliminary work which is:
|
||||
*
|
||||
* Copyright (C) 1995 Adrian M. Rodriguez (adrian@remus.rutgers.edu)
|
||||
*/
|
||||
|
||||
#define __NR_restart_syscall 0 /* Linux Specific */
|
||||
#define __NR_exit 1 /* Common */
|
||||
#define __NR_fork 2 /* Common */
|
||||
#define __NR_read 3 /* Common */
|
||||
#define __NR_write 4 /* Common */
|
||||
#define __NR_open 5 /* Common */
|
||||
#define __NR_close 6 /* Common */
|
||||
#define __NR_wait4 7 /* Common */
|
||||
#define __NR_creat 8 /* Common */
|
||||
#define __NR_link 9 /* Common */
|
||||
#define __NR_unlink 10 /* Common */
|
||||
#define __NR_execv 11 /* SunOS Specific */
|
||||
#define __NR_chdir 12 /* Common */
|
||||
#define __NR_chown 13 /* Common */
|
||||
#define __NR_mknod 14 /* Common */
|
||||
#define __NR_chmod 15 /* Common */
|
||||
#define __NR_lchown 16 /* Common */
|
||||
#define __NR_brk 17 /* Common */
|
||||
#define __NR_perfctr 18 /* Performance counter operations */
|
||||
#define __NR_lseek 19 /* Common */
|
||||
#define __NR_getpid 20 /* Common */
|
||||
#define __NR_capget 21 /* Linux Specific */
|
||||
#define __NR_capset 22 /* Linux Specific */
|
||||
#define __NR_setuid 23 /* Implemented via setreuid in SunOS */
|
||||
#define __NR_getuid 24 /* Common */
|
||||
#define __NR_vmsplice 25 /* ENOSYS under SunOS */
|
||||
#define __NR_ptrace 26 /* Common */
|
||||
#define __NR_alarm 27 /* Implemented via setitimer in SunOS */
|
||||
#define __NR_sigaltstack 28 /* Common */
|
||||
#define __NR_pause 29 /* Is sigblock(0)->sigpause() in SunOS */
|
||||
#define __NR_utime 30 /* Implemented via utimes() under SunOS */
|
||||
#define __NR_lchown32 31 /* Linux sparc32 specific */
|
||||
#define __NR_fchown32 32 /* Linux sparc32 specific */
|
||||
#define __NR_access 33 /* Common */
|
||||
#define __NR_nice 34 /* Implemented via get/setpriority() in SunOS */
|
||||
#define __NR_chown32 35 /* Linux sparc32 specific */
|
||||
#define __NR_sync 36 /* Common */
|
||||
#define __NR_kill 37 /* Common */
|
||||
#define __NR_stat 38 /* Common */
|
||||
#define __NR_sendfile 39 /* Linux Specific */
|
||||
#define __NR_lstat 40 /* Common */
|
||||
#define __NR_dup 41 /* Common */
|
||||
#define __NR_pipe 42 /* Common */
|
||||
#define __NR_times 43 /* Implemented via getrusage() in SunOS */
|
||||
#define __NR_getuid32 44 /* Linux sparc32 specific */
|
||||
#define __NR_umount2 45 /* Linux Specific */
|
||||
#define __NR_setgid 46 /* Implemented via setregid() in SunOS */
|
||||
#define __NR_getgid 47 /* Common */
|
||||
#define __NR_signal 48 /* Implemented via sigvec() in SunOS */
|
||||
#define __NR_geteuid 49 /* SunOS calls getuid() */
|
||||
#define __NR_getegid 50 /* SunOS calls getgid() */
|
||||
#define __NR_acct 51 /* Common */
|
||||
/* #define __NR_memory_ordering 52 Linux sparc64 specific */
|
||||
#define __NR_getgid32 53 /* Linux sparc32 specific */
|
||||
#define __NR_ioctl 54 /* Common */
|
||||
#define __NR_reboot 55 /* Common */
|
||||
#define __NR_mmap2 56 /* Linux sparc32 Specific */
|
||||
#define __NR_symlink 57 /* Common */
|
||||
#define __NR_readlink 58 /* Common */
|
||||
#define __NR_execve 59 /* Common */
|
||||
#define __NR_umask 60 /* Common */
|
||||
#define __NR_chroot 61 /* Common */
|
||||
#define __NR_fstat 62 /* Common */
|
||||
#define __NR_fstat64 63 /* Linux Specific */
|
||||
#define __NR_getpagesize 64 /* Common */
|
||||
#define __NR_msync 65 /* Common in newer 1.3.x revs... */
|
||||
#define __NR_vfork 66 /* Common */
|
||||
#define __NR_pread64 67 /* Linux Specific */
|
||||
#define __NR_pwrite64 68 /* Linux Specific */
|
||||
#define __NR_geteuid32 69 /* Linux sparc32, sbrk under SunOS */
|
||||
#define __NR_getegid32 70 /* Linux sparc32, sstk under SunOS */
|
||||
#define __NR_mmap 71 /* Common */
|
||||
#define __NR_setreuid32 72 /* Linux sparc32, vadvise under SunOS */
|
||||
#define __NR_munmap 73 /* Common */
|
||||
#define __NR_mprotect 74 /* Common */
|
||||
#define __NR_madvise 75 /* Common */
|
||||
#define __NR_vhangup 76 /* Common */
|
||||
#define __NR_truncate64 77 /* Linux sparc32 Specific */
|
||||
#define __NR_mincore 78 /* Common */
|
||||
#define __NR_getgroups 79 /* Common */
|
||||
#define __NR_setgroups 80 /* Common */
|
||||
#define __NR_getpgrp 81 /* Common */
|
||||
#define __NR_setgroups32 82 /* Linux sparc32, setpgrp under SunOS */
|
||||
#define __NR_setitimer 83 /* Common */
|
||||
#define __NR_ftruncate64 84 /* Linux sparc32 Specific */
|
||||
#define __NR_swapon 85 /* Common */
|
||||
#define __NR_getitimer 86 /* Common */
|
||||
#define __NR_setuid32 87 /* Linux sparc32, gethostname under SunOS */
|
||||
#define __NR_sethostname 88 /* Common */
|
||||
#define __NR_setgid32 89 /* Linux sparc32, getdtablesize under SunOS */
|
||||
#define __NR_dup2 90 /* Common */
|
||||
#define __NR_setfsuid32 91 /* Linux sparc32, getdopt under SunOS */
|
||||
#define __NR_fcntl 92 /* Common */
|
||||
#define __NR_select 93 /* Common */
|
||||
#define __NR_setfsgid32 94 /* Linux sparc32, setdopt under SunOS */
|
||||
#define __NR_fsync 95 /* Common */
|
||||
#define __NR_setpriority 96 /* Common */
|
||||
#define __NR_socket 97 /* Common */
|
||||
#define __NR_connect 98 /* Common */
|
||||
#define __NR_accept 99 /* Common */
|
||||
#define __NR_getpriority 100 /* Common */
|
||||
#define __NR_rt_sigreturn 101 /* Linux Specific */
|
||||
#define __NR_rt_sigaction 102 /* Linux Specific */
|
||||
#define __NR_rt_sigprocmask 103 /* Linux Specific */
|
||||
#define __NR_rt_sigpending 104 /* Linux Specific */
|
||||
#define __NR_rt_sigtimedwait 105 /* Linux Specific */
|
||||
#define __NR_rt_sigqueueinfo 106 /* Linux Specific */
|
||||
#define __NR_rt_sigsuspend 107 /* Linux Specific */
|
||||
#define __NR_setresuid32 108 /* Linux Specific, sigvec under SunOS */
|
||||
#define __NR_getresuid32 109 /* Linux Specific, sigblock under SunOS */
|
||||
#define __NR_setresgid32 110 /* Linux Specific, sigsetmask under SunOS */
|
||||
#define __NR_getresgid32 111 /* Linux Specific, sigpause under SunOS */
|
||||
#define __NR_setregid32 112 /* Linux sparc32, sigstack under SunOS */
|
||||
#define __NR_recvmsg 113 /* Common */
|
||||
#define __NR_sendmsg 114 /* Common */
|
||||
#define __NR_getgroups32 115 /* Linux sparc32, vtrace under SunOS */
|
||||
#define __NR_gettimeofday 116 /* Common */
|
||||
#define __NR_getrusage 117 /* Common */
|
||||
#define __NR_getsockopt 118 /* Common */
|
||||
#define __NR_getcwd 119 /* Linux Specific */
|
||||
#define __NR_readv 120 /* Common */
|
||||
#define __NR_writev 121 /* Common */
|
||||
#define __NR_settimeofday 122 /* Common */
|
||||
#define __NR_fchown 123 /* Common */
|
||||
#define __NR_fchmod 124 /* Common */
|
||||
#define __NR_recvfrom 125 /* Common */
|
||||
#define __NR_setreuid 126 /* Common */
|
||||
#define __NR_setregid 127 /* Common */
|
||||
#define __NR_rename 128 /* Common */
|
||||
#define __NR_truncate 129 /* Common */
|
||||
#define __NR_ftruncate 130 /* Common */
|
||||
#define __NR_flock 131 /* Common */
|
||||
#define __NR_lstat64 132 /* Linux Specific */
|
||||
#define __NR_sendto 133 /* Common */
|
||||
#define __NR_shutdown 134 /* Common */
|
||||
#define __NR_socketpair 135 /* Common */
|
||||
#define __NR_mkdir 136 /* Common */
|
||||
#define __NR_rmdir 137 /* Common */
|
||||
#define __NR_utimes 138 /* SunOS Specific */
|
||||
#define __NR_stat64 139 /* Linux Specific */
|
||||
#define __NR_sendfile64 140 /* adjtime under SunOS */
|
||||
#define __NR_getpeername 141 /* Common */
|
||||
#define __NR_futex 142 /* gethostid under SunOS */
|
||||
#define __NR_gettid 143 /* ENOSYS under SunOS */
|
||||
#define __NR_getrlimit 144 /* Common */
|
||||
#define __NR_setrlimit 145 /* Common */
|
||||
#define __NR_pivot_root 146 /* Linux Specific, killpg under SunOS */
|
||||
#define __NR_prctl 147 /* ENOSYS under SunOS */
|
||||
#define __NR_pciconfig_read 148 /* ENOSYS under SunOS */
|
||||
#define __NR_pciconfig_write 149 /* ENOSYS under SunOS */
|
||||
#define __NR_getsockname 150 /* Common */
|
||||
#define __NR_inotify_init 151 /* Linux specific */
|
||||
#define __NR_inotify_add_watch 152 /* Linux specific */
|
||||
#define __NR_poll 153 /* Common */
|
||||
#define __NR_getdents64 154 /* Linux specific */
|
||||
#define __NR_fcntl64 155 /* Linux sparc32 Specific */
|
||||
#define __NR_inotify_rm_watch 156 /* Linux specific */
|
||||
#define __NR_statfs 157 /* Common */
|
||||
#define __NR_fstatfs 158 /* Common */
|
||||
#define __NR_umount 159 /* Common */
|
||||
#define __NR_sched_set_affinity 160 /* Linux specific, async_daemon under SunOS */
|
||||
#define __NR_sched_get_affinity 161 /* Linux specific, getfh under SunOS */
|
||||
#define __NR_getdomainname 162 /* SunOS Specific */
|
||||
#define __NR_setdomainname 163 /* Common */
|
||||
/* #define __NR_utrap_install 164 Linux sparc64 specific */
|
||||
#define __NR_quotactl 165 /* Common */
|
||||
#define __NR_set_tid_address 166 /* Linux specific, exportfs under SunOS */
|
||||
#define __NR_mount 167 /* Common */
|
||||
#define __NR_ustat 168 /* Common */
|
||||
#define __NR_setxattr 169 /* SunOS: semsys */
|
||||
#define __NR_lsetxattr 170 /* SunOS: msgsys */
|
||||
#define __NR_fsetxattr 171 /* SunOS: shmsys */
|
||||
#define __NR_getxattr 172 /* SunOS: auditsys */
|
||||
#define __NR_lgetxattr 173 /* SunOS: rfssys */
|
||||
#define __NR_getdents 174 /* Common */
|
||||
#define __NR_setsid 175 /* Common */
|
||||
#define __NR_fchdir 176 /* Common */
|
||||
#define __NR_fgetxattr 177 /* SunOS: fchroot */
|
||||
#define __NR_listxattr 178 /* SunOS: vpixsys */
|
||||
#define __NR_llistxattr 179 /* SunOS: aioread */
|
||||
#define __NR_flistxattr 180 /* SunOS: aiowrite */
|
||||
#define __NR_removexattr 181 /* SunOS: aiowait */
|
||||
#define __NR_lremovexattr 182 /* SunOS: aiocancel */
|
||||
#define __NR_sigpending 183 /* Common */
|
||||
#define __NR_query_module 184 /* Linux Specific */
|
||||
#define __NR_setpgid 185 /* Common */
|
||||
#define __NR_fremovexattr 186 /* SunOS: pathconf */
|
||||
#define __NR_tkill 187 /* SunOS: fpathconf */
|
||||
#define __NR_exit_group 188 /* Linux specific, sysconf undef SunOS */
|
||||
#define __NR_uname 189 /* Linux Specific */
|
||||
#define __NR_init_module 190 /* Linux Specific */
|
||||
#define __NR_personality 191 /* Linux Specific */
|
||||
#define __NR_remap_file_pages 192 /* Linux Specific */
|
||||
#define __NR_epoll_create 193 /* Linux Specific */
|
||||
#define __NR_epoll_ctl 194 /* Linux Specific */
|
||||
#define __NR_epoll_wait 195 /* Linux Specific */
|
||||
#define __NR_ioprio_set 196 /* Linux Specific */
|
||||
#define __NR_getppid 197 /* Linux Specific */
|
||||
#define __NR_sigaction 198 /* Linux Specific */
|
||||
#define __NR_sgetmask 199 /* Linux Specific */
|
||||
#define __NR_ssetmask 200 /* Linux Specific */
|
||||
#define __NR_sigsuspend 201 /* Linux Specific */
|
||||
#define __NR_oldlstat 202 /* Linux Specific */
|
||||
#define __NR_uselib 203 /* Linux Specific */
|
||||
#define __NR_readdir 204 /* Linux Specific */
|
||||
#define __NR_readahead 205 /* Linux Specific */
|
||||
#define __NR_socketcall 206 /* Linux Specific */
|
||||
#define __NR_syslog 207 /* Linux Specific */
|
||||
#define __NR_lookup_dcookie 208 /* Linux Specific */
|
||||
#define __NR_fadvise64 209 /* Linux Specific */
|
||||
#define __NR_fadvise64_64 210 /* Linux Specific */
|
||||
#define __NR_tgkill 211 /* Linux Specific */
|
||||
#define __NR_waitpid 212 /* Linux Specific */
|
||||
#define __NR_swapoff 213 /* Linux Specific */
|
||||
#define __NR_sysinfo 214 /* Linux Specific */
|
||||
#define __NR_ipc 215 /* Linux Specific */
|
||||
#define __NR_sigreturn 216 /* Linux Specific */
|
||||
#define __NR_clone 217 /* Linux Specific */
|
||||
#define __NR_ioprio_get 218 /* Linux Specific */
|
||||
#define __NR_adjtimex 219 /* Linux Specific */
|
||||
#define __NR_sigprocmask 220 /* Linux Specific */
|
||||
#define __NR_create_module 221 /* Linux Specific */
|
||||
#define __NR_delete_module 222 /* Linux Specific */
|
||||
#define __NR_get_kernel_syms 223 /* Linux Specific */
|
||||
#define __NR_getpgid 224 /* Linux Specific */
|
||||
#define __NR_bdflush 225 /* Linux Specific */
|
||||
#define __NR_sysfs 226 /* Linux Specific */
|
||||
#define __NR_afs_syscall 227 /* Linux Specific */
|
||||
#define __NR_setfsuid 228 /* Linux Specific */
|
||||
#define __NR_setfsgid 229 /* Linux Specific */
|
||||
#define __NR__newselect 230 /* Linux Specific */
|
||||
#define __NR_time 231 /* Linux Specific */
|
||||
#define __NR_splice 232 /* Linux Specific */
|
||||
#define __NR_stime 233 /* Linux Specific */
|
||||
#define __NR_statfs64 234 /* Linux Specific */
|
||||
#define __NR_fstatfs64 235 /* Linux Specific */
|
||||
#define __NR__llseek 236 /* Linux Specific */
|
||||
#define __NR_mlock 237
|
||||
#define __NR_munlock 238
|
||||
#define __NR_mlockall 239
|
||||
#define __NR_munlockall 240
|
||||
#define __NR_sched_setparam 241
|
||||
#define __NR_sched_getparam 242
|
||||
#define __NR_sched_setscheduler 243
|
||||
#define __NR_sched_getscheduler 244
|
||||
#define __NR_sched_yield 245
|
||||
#define __NR_sched_get_priority_max 246
|
||||
#define __NR_sched_get_priority_min 247
|
||||
#define __NR_sched_rr_get_interval 248
|
||||
#define __NR_nanosleep 249
|
||||
#define __NR_mremap 250
|
||||
#define __NR__sysctl 251
|
||||
#define __NR_getsid 252
|
||||
#define __NR_fdatasync 253
|
||||
#define __NR_nfsservctl 254
|
||||
#define __NR_sync_file_range 255
|
||||
#define __NR_clock_settime 256
|
||||
#define __NR_clock_gettime 257
|
||||
#define __NR_clock_getres 258
|
||||
#define __NR_clock_nanosleep 259
|
||||
#define __NR_sched_getaffinity 260
|
||||
#define __NR_sched_setaffinity 261
|
||||
#define __NR_timer_settime 262
|
||||
#define __NR_timer_gettime 263
|
||||
#define __NR_timer_getoverrun 264
|
||||
#define __NR_timer_delete 265
|
||||
#define __NR_timer_create 266
|
||||
/* #define __NR_vserver 267 Reserved for VSERVER */
|
||||
#define __NR_io_setup 268
|
||||
#define __NR_io_destroy 269
|
||||
#define __NR_io_submit 270
|
||||
#define __NR_io_cancel 271
|
||||
#define __NR_io_getevents 272
|
||||
#define __NR_mq_open 273
|
||||
#define __NR_mq_unlink 274
|
||||
#define __NR_mq_timedsend 275
|
||||
#define __NR_mq_timedreceive 276
|
||||
#define __NR_mq_notify 277
|
||||
#define __NR_mq_getsetattr 278
|
||||
#define __NR_waitid 279
|
||||
#define __NR_tee 280
|
||||
#define __NR_add_key 281
|
||||
#define __NR_request_key 282
|
||||
#define __NR_keyctl 283
|
||||
#define __NR_openat 284
|
||||
#define __NR_mkdirat 285
|
||||
#define __NR_mknodat 286
|
||||
#define __NR_fchownat 287
|
||||
#define __NR_futimesat 288
|
||||
#define __NR_fstatat64 289
|
||||
#define __NR_unlinkat 290
|
||||
#define __NR_renameat 291
|
||||
#define __NR_linkat 292
|
||||
#define __NR_symlinkat 293
|
||||
#define __NR_readlinkat 294
|
||||
#define __NR_fchmodat 295
|
||||
#define __NR_faccessat 296
|
||||
#define __NR_pselect6 297
|
||||
#define __NR_ppoll 298
|
||||
#define __NR_unshare 299
|
||||
#define __NR_set_robust_list 300
|
||||
#define __NR_get_robust_list 301
|
||||
#define __NR_migrate_pages 302
|
||||
#define __NR_mbind 303
|
||||
#define __NR_get_mempolicy 304
|
||||
#define __NR_set_mempolicy 305
|
||||
#define __NR_kexec_load 306
|
||||
#define __NR_move_pages 307
|
||||
#define __NR_getcpu 308
|
||||
#define __NR_epoll_pwait 309
|
||||
#define __NR_utimensat 310
|
||||
#define __NR_signalfd 311
|
||||
#define __NR_timerfd_create 312
|
||||
#define __NR_eventfd 313
|
||||
#define __NR_fallocate 314
|
||||
#define __NR_timerfd_settime 315
|
||||
#define __NR_timerfd_gettime 316
|
||||
#define __NR_signalfd4 317
|
||||
#define __NR_eventfd2 318
|
||||
#define __NR_epoll_create1 319
|
||||
#define __NR_dup3 320
|
||||
#define __NR_pipe2 321
|
||||
#define __NR_inotify_init1 322
|
||||
#define __NR_accept4 323
|
||||
|
||||
#define NR_SYSCALLS 324
|
||||
|
||||
/* Sparc 32-bit only has the "setresuid32", "getresuid32" variants,
|
||||
* it never had the plain ones and there is no value to adding those
|
||||
* old versions into the syscall table.
|
||||
*/
|
||||
#define __IGNORE_setresuid
|
||||
#define __IGNORE_getresuid
|
||||
#define __IGNORE_setresgid
|
||||
#define __IGNORE_getresgid
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define __ARCH_WANT_IPC_PARSE_VERSION
|
||||
#define __ARCH_WANT_OLD_READDIR
|
||||
#define __ARCH_WANT_STAT64
|
||||
#define __ARCH_WANT_SYS_ALARM
|
||||
#define __ARCH_WANT_SYS_GETHOSTNAME
|
||||
#define __ARCH_WANT_SYS_PAUSE
|
||||
#define __ARCH_WANT_SYS_SGETMASK
|
||||
#define __ARCH_WANT_SYS_SIGNAL
|
||||
#define __ARCH_WANT_SYS_TIME
|
||||
#define __ARCH_WANT_SYS_UTIME
|
||||
#define __ARCH_WANT_SYS_WAITPID
|
||||
#define __ARCH_WANT_SYS_SOCKETCALL
|
||||
#define __ARCH_WANT_SYS_FADVISE64
|
||||
#define __ARCH_WANT_SYS_GETPGRP
|
||||
#define __ARCH_WANT_SYS_LLSEEK
|
||||
#define __ARCH_WANT_SYS_NICE
|
||||
#define __ARCH_WANT_SYS_OLDUMOUNT
|
||||
#define __ARCH_WANT_SYS_SIGPENDING
|
||||
#define __ARCH_WANT_SYS_SIGPROCMASK
|
||||
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
|
||||
|
||||
/*
|
||||
* "Conditional" syscalls
|
||||
*
|
||||
* What we want is __attribute__((weak,alias("sys_ni_syscall"))),
|
||||
* but it doesn't work on all toolchains, so we just do it by hand
|
||||
*/
|
||||
#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _SPARC_UNISTD_H */
|
@ -1,380 +0,0 @@
|
||||
#ifndef _SPARC64_UNISTD_H
|
||||
#define _SPARC64_UNISTD_H
|
||||
|
||||
/*
|
||||
* System calls under the Sparc.
|
||||
*
|
||||
* Don't be scared by the ugly clobbers, it is the only way I can
|
||||
* think of right now to force the arguments into fixed registers
|
||||
* before the trap into the system call with gcc 'asm' statements.
|
||||
*
|
||||
* Copyright (C) 1995, 2007 David S. Miller (davem@davemloft.net)
|
||||
*
|
||||
* SunOS compatibility based upon preliminary work which is:
|
||||
*
|
||||
* Copyright (C) 1995 Adrian M. Rodriguez (adrian@remus.rutgers.edu)
|
||||
*/
|
||||
|
||||
#define __NR_restart_syscall 0 /* Linux Specific */
|
||||
#define __NR_exit 1 /* Common */
|
||||
#define __NR_fork 2 /* Common */
|
||||
#define __NR_read 3 /* Common */
|
||||
#define __NR_write 4 /* Common */
|
||||
#define __NR_open 5 /* Common */
|
||||
#define __NR_close 6 /* Common */
|
||||
#define __NR_wait4 7 /* Common */
|
||||
#define __NR_creat 8 /* Common */
|
||||
#define __NR_link 9 /* Common */
|
||||
#define __NR_unlink 10 /* Common */
|
||||
#define __NR_execv 11 /* SunOS Specific */
|
||||
#define __NR_chdir 12 /* Common */
|
||||
#define __NR_chown 13 /* Common */
|
||||
#define __NR_mknod 14 /* Common */
|
||||
#define __NR_chmod 15 /* Common */
|
||||
#define __NR_lchown 16 /* Common */
|
||||
#define __NR_brk 17 /* Common */
|
||||
#define __NR_perfctr 18 /* Performance counter operations */
|
||||
#define __NR_lseek 19 /* Common */
|
||||
#define __NR_getpid 20 /* Common */
|
||||
#define __NR_capget 21 /* Linux Specific */
|
||||
#define __NR_capset 22 /* Linux Specific */
|
||||
#define __NR_setuid 23 /* Implemented via setreuid in SunOS */
|
||||
#define __NR_getuid 24 /* Common */
|
||||
#define __NR_vmsplice 25 /* ENOSYS under SunOS */
|
||||
#define __NR_ptrace 26 /* Common */
|
||||
#define __NR_alarm 27 /* Implemented via setitimer in SunOS */
|
||||
#define __NR_sigaltstack 28 /* Common */
|
||||
#define __NR_pause 29 /* Is sigblock(0)->sigpause() in SunOS */
|
||||
#define __NR_utime 30 /* Implemented via utimes() under SunOS */
|
||||
/* #define __NR_lchown32 31 Linux sparc32 specific */
|
||||
/* #define __NR_fchown32 32 Linux sparc32 specific */
|
||||
#define __NR_access 33 /* Common */
|
||||
#define __NR_nice 34 /* Implemented via get/setpriority() in SunOS */
|
||||
/* #define __NR_chown32 35 Linux sparc32 specific */
|
||||
#define __NR_sync 36 /* Common */
|
||||
#define __NR_kill 37 /* Common */
|
||||
#define __NR_stat 38 /* Common */
|
||||
#define __NR_sendfile 39 /* Linux Specific */
|
||||
#define __NR_lstat 40 /* Common */
|
||||
#define __NR_dup 41 /* Common */
|
||||
#define __NR_pipe 42 /* Common */
|
||||
#define __NR_times 43 /* Implemented via getrusage() in SunOS */
|
||||
/* #define __NR_getuid32 44 Linux sparc32 specific */
|
||||
#define __NR_umount2 45 /* Linux Specific */
|
||||
#define __NR_setgid 46 /* Implemented via setregid() in SunOS */
|
||||
#define __NR_getgid 47 /* Common */
|
||||
#define __NR_signal 48 /* Implemented via sigvec() in SunOS */
|
||||
#define __NR_geteuid 49 /* SunOS calls getuid() */
|
||||
#define __NR_getegid 50 /* SunOS calls getgid() */
|
||||
#define __NR_acct 51 /* Common */
|
||||
#define __NR_memory_ordering 52 /* Linux Specific */
|
||||
/* #define __NR_getgid32 53 Linux sparc32 specific */
|
||||
#define __NR_ioctl 54 /* Common */
|
||||
#define __NR_reboot 55 /* Common */
|
||||
/* #define __NR_mmap2 56 Linux sparc32 Specific */
|
||||
#define __NR_symlink 57 /* Common */
|
||||
#define __NR_readlink 58 /* Common */
|
||||
#define __NR_execve 59 /* Common */
|
||||
#define __NR_umask 60 /* Common */
|
||||
#define __NR_chroot 61 /* Common */
|
||||
#define __NR_fstat 62 /* Common */
|
||||
#define __NR_fstat64 63 /* Linux Specific */
|
||||
#define __NR_getpagesize 64 /* Common */
|
||||
#define __NR_msync 65 /* Common in newer 1.3.x revs... */
|
||||
#define __NR_vfork 66 /* Common */
|
||||
#define __NR_pread64 67 /* Linux Specific */
|
||||
#define __NR_pwrite64 68 /* Linux Specific */
|
||||
/* #define __NR_geteuid32 69 Linux sparc32, sbrk under SunOS */
|
||||
/* #define __NR_getegid32 70 Linux sparc32, sstk under SunOS */
|
||||
#define __NR_mmap 71 /* Common */
|
||||
/* #define __NR_setreuid32 72 Linux sparc32, vadvise under SunOS */
|
||||
#define __NR_munmap 73 /* Common */
|
||||
#define __NR_mprotect 74 /* Common */
|
||||
#define __NR_madvise 75 /* Common */
|
||||
#define __NR_vhangup 76 /* Common */
|
||||
/* #define __NR_truncate64 77 Linux sparc32 Specific */
|
||||
#define __NR_mincore 78 /* Common */
|
||||
#define __NR_getgroups 79 /* Common */
|
||||
#define __NR_setgroups 80 /* Common */
|
||||
#define __NR_getpgrp 81 /* Common */
|
||||
/* #define __NR_setgroups32 82 Linux sparc32, setpgrp under SunOS */
|
||||
#define __NR_setitimer 83 /* Common */
|
||||
/* #define __NR_ftruncate64 84 Linux sparc32 Specific */
|
||||
#define __NR_swapon 85 /* Common */
|
||||
#define __NR_getitimer 86 /* Common */
|
||||
/* #define __NR_setuid32 87 Linux sparc32, gethostname under SunOS */
|
||||
#define __NR_sethostname 88 /* Common */
|
||||
/* #define __NR_setgid32 89 Linux sparc32, getdtablesize under SunOS */
|
||||
#define __NR_dup2 90 /* Common */
|
||||
/* #define __NR_setfsuid32 91 Linux sparc32, getdopt under SunOS */
|
||||
#define __NR_fcntl 92 /* Common */
|
||||
#define __NR_select 93 /* Common */
|
||||
/* #define __NR_setfsgid32 94 Linux sparc32, setdopt under SunOS */
|
||||
#define __NR_fsync 95 /* Common */
|
||||
#define __NR_setpriority 96 /* Common */
|
||||
#define __NR_socket 97 /* Common */
|
||||
#define __NR_connect 98 /* Common */
|
||||
#define __NR_accept 99 /* Common */
|
||||
#define __NR_getpriority 100 /* Common */
|
||||
#define __NR_rt_sigreturn 101 /* Linux Specific */
|
||||
#define __NR_rt_sigaction 102 /* Linux Specific */
|
||||
#define __NR_rt_sigprocmask 103 /* Linux Specific */
|
||||
#define __NR_rt_sigpending 104 /* Linux Specific */
|
||||
#define __NR_rt_sigtimedwait 105 /* Linux Specific */
|
||||
#define __NR_rt_sigqueueinfo 106 /* Linux Specific */
|
||||
#define __NR_rt_sigsuspend 107 /* Linux Specific */
|
||||
#define __NR_setresuid 108 /* Linux Specific, sigvec under SunOS */
|
||||
#define __NR_getresuid 109 /* Linux Specific, sigblock under SunOS */
|
||||
#define __NR_setresgid 110 /* Linux Specific, sigsetmask under SunOS */
|
||||
#define __NR_getresgid 111 /* Linux Specific, sigpause under SunOS */
|
||||
/* #define __NR_setregid32 75 Linux sparc32, sigstack under SunOS */
|
||||
#define __NR_recvmsg 113 /* Common */
|
||||
#define __NR_sendmsg 114 /* Common */
|
||||
/* #define __NR_getgroups32 115 Linux sparc32, vtrace under SunOS */
|
||||
#define __NR_gettimeofday 116 /* Common */
|
||||
#define __NR_getrusage 117 /* Common */
|
||||
#define __NR_getsockopt 118 /* Common */
|
||||
#define __NR_getcwd 119 /* Linux Specific */
|
||||
#define __NR_readv 120 /* Common */
|
||||
#define __NR_writev 121 /* Common */
|
||||
#define __NR_settimeofday 122 /* Common */
|
||||
#define __NR_fchown 123 /* Common */
|
||||
#define __NR_fchmod 124 /* Common */
|
||||
#define __NR_recvfrom 125 /* Common */
|
||||
#define __NR_setreuid 126 /* Common */
|
||||
#define __NR_setregid 127 /* Common */
|
||||
#define __NR_rename 128 /* Common */
|
||||
#define __NR_truncate 129 /* Common */
|
||||
#define __NR_ftruncate 130 /* Common */
|
||||
#define __NR_flock 131 /* Common */
|
||||
#define __NR_lstat64 132 /* Linux Specific */
|
||||
#define __NR_sendto 133 /* Common */
|
||||
#define __NR_shutdown 134 /* Common */
|
||||
#define __NR_socketpair 135 /* Common */
|
||||
#define __NR_mkdir 136 /* Common */
|
||||
#define __NR_rmdir 137 /* Common */
|
||||
#define __NR_utimes 138 /* SunOS Specific */
|
||||
#define __NR_stat64 139 /* Linux Specific */
|
||||
#define __NR_sendfile64 140 /* adjtime under SunOS */
|
||||
#define __NR_getpeername 141 /* Common */
|
||||
#define __NR_futex 142 /* gethostid under SunOS */
|
||||
#define __NR_gettid 143 /* ENOSYS under SunOS */
|
||||
#define __NR_getrlimit 144 /* Common */
|
||||
#define __NR_setrlimit 145 /* Common */
|
||||
#define __NR_pivot_root 146 /* Linux Specific, killpg under SunOS */
|
||||
#define __NR_prctl 147 /* ENOSYS under SunOS */
|
||||
#define __NR_pciconfig_read 148 /* ENOSYS under SunOS */
|
||||
#define __NR_pciconfig_write 149 /* ENOSYS under SunOS */
|
||||
#define __NR_getsockname 150 /* Common */
|
||||
#define __NR_inotify_init 151 /* Linux specific */
|
||||
#define __NR_inotify_add_watch 152 /* Linux specific */
|
||||
#define __NR_poll 153 /* Common */
|
||||
#define __NR_getdents64 154 /* Linux specific */
|
||||
/* #define __NR_fcntl64 155 Linux sparc32 Specific */
|
||||
#define __NR_inotify_rm_watch 156 /* Linux specific */
|
||||
#define __NR_statfs 157 /* Common */
|
||||
#define __NR_fstatfs 158 /* Common */
|
||||
#define __NR_umount 159 /* Common */
|
||||
#define __NR_sched_set_affinity 160 /* Linux specific, async_daemon under SunOS */
|
||||
#define __NR_sched_get_affinity 161 /* Linux specific, getfh under SunOS */
|
||||
#define __NR_getdomainname 162 /* SunOS Specific */
|
||||
#define __NR_setdomainname 163 /* Common */
|
||||
#define __NR_utrap_install 164 /* SYSV ABI/v9 required */
|
||||
#define __NR_quotactl 165 /* Common */
|
||||
#define __NR_set_tid_address 166 /* Linux specific, exportfs under SunOS */
|
||||
#define __NR_mount 167 /* Common */
|
||||
#define __NR_ustat 168 /* Common */
|
||||
#define __NR_setxattr 169 /* SunOS: semsys */
|
||||
#define __NR_lsetxattr 170 /* SunOS: msgsys */
|
||||
#define __NR_fsetxattr 171 /* SunOS: shmsys */
|
||||
#define __NR_getxattr 172 /* SunOS: auditsys */
|
||||
#define __NR_lgetxattr 173 /* SunOS: rfssys */
|
||||
#define __NR_getdents 174 /* Common */
|
||||
#define __NR_setsid 175 /* Common */
|
||||
#define __NR_fchdir 176 /* Common */
|
||||
#define __NR_fgetxattr 177 /* SunOS: fchroot */
|
||||
#define __NR_listxattr 178 /* SunOS: vpixsys */
|
||||
#define __NR_llistxattr 179 /* SunOS: aioread */
|
||||
#define __NR_flistxattr 180 /* SunOS: aiowrite */
|
||||
#define __NR_removexattr 181 /* SunOS: aiowait */
|
||||
#define __NR_lremovexattr 182 /* SunOS: aiocancel */
|
||||
#define __NR_sigpending 183 /* Common */
|
||||
#define __NR_query_module 184 /* Linux Specific */
|
||||
#define __NR_setpgid 185 /* Common */
|
||||
#define __NR_fremovexattr 186 /* SunOS: pathconf */
|
||||
#define __NR_tkill 187 /* SunOS: fpathconf */
|
||||
#define __NR_exit_group 188 /* Linux specific, sysconf undef SunOS */
|
||||
#define __NR_uname 189 /* Linux Specific */
|
||||
#define __NR_init_module 190 /* Linux Specific */
|
||||
#define __NR_personality 191 /* Linux Specific */
|
||||
#define __NR_remap_file_pages 192 /* Linux Specific */
|
||||
#define __NR_epoll_create 193 /* Linux Specific */
|
||||
#define __NR_epoll_ctl 194 /* Linux Specific */
|
||||
#define __NR_epoll_wait 195 /* Linux Specific */
|
||||
#define __NR_ioprio_set 196 /* Linux Specific */
|
||||
#define __NR_getppid 197 /* Linux Specific */
|
||||
#define __NR_sigaction 198 /* Linux Specific */
|
||||
#define __NR_sgetmask 199 /* Linux Specific */
|
||||
#define __NR_ssetmask 200 /* Linux Specific */
|
||||
#define __NR_sigsuspend 201 /* Linux Specific */
|
||||
#define __NR_oldlstat 202 /* Linux Specific */
|
||||
#define __NR_uselib 203 /* Linux Specific */
|
||||
#define __NR_readdir 204 /* Linux Specific */
|
||||
#define __NR_readahead 205 /* Linux Specific */
|
||||
#define __NR_socketcall 206 /* Linux Specific */
|
||||
#define __NR_syslog 207 /* Linux Specific */
|
||||
#define __NR_lookup_dcookie 208 /* Linux Specific */
|
||||
#define __NR_fadvise64 209 /* Linux Specific */
|
||||
#define __NR_fadvise64_64 210 /* Linux Specific */
|
||||
#define __NR_tgkill 211 /* Linux Specific */
|
||||
#define __NR_waitpid 212 /* Linux Specific */
|
||||
#define __NR_swapoff 213 /* Linux Specific */
|
||||
#define __NR_sysinfo 214 /* Linux Specific */
|
||||
#define __NR_ipc 215 /* Linux Specific */
|
||||
#define __NR_sigreturn 216 /* Linux Specific */
|
||||
#define __NR_clone 217 /* Linux Specific */
|
||||
#define __NR_ioprio_get 218 /* Linux Specific */
|
||||
#define __NR_adjtimex 219 /* Linux Specific */
|
||||
#define __NR_sigprocmask 220 /* Linux Specific */
|
||||
#define __NR_create_module 221 /* Linux Specific */
|
||||
#define __NR_delete_module 222 /* Linux Specific */
|
||||
#define __NR_get_kernel_syms 223 /* Linux Specific */
|
||||
#define __NR_getpgid 224 /* Linux Specific */
|
||||
#define __NR_bdflush 225 /* Linux Specific */
|
||||
#define __NR_sysfs 226 /* Linux Specific */
|
||||
#define __NR_afs_syscall 227 /* Linux Specific */
|
||||
#define __NR_setfsuid 228 /* Linux Specific */
|
||||
#define __NR_setfsgid 229 /* Linux Specific */
|
||||
#define __NR__newselect 230 /* Linux Specific */
|
||||
#ifdef __KERNEL__
|
||||
#define __NR_time 231 /* Linux sparc32 */
|
||||
#endif
|
||||
#define __NR_splice 232 /* Linux Specific */
|
||||
#define __NR_stime 233 /* Linux Specific */
|
||||
#define __NR_statfs64 234 /* Linux Specific */
|
||||
#define __NR_fstatfs64 235 /* Linux Specific */
|
||||
#define __NR__llseek 236 /* Linux Specific */
|
||||
#define __NR_mlock 237
|
||||
#define __NR_munlock 238
|
||||
#define __NR_mlockall 239
|
||||
#define __NR_munlockall 240
|
||||
#define __NR_sched_setparam 241
|
||||
#define __NR_sched_getparam 242
|
||||
#define __NR_sched_setscheduler 243
|
||||
#define __NR_sched_getscheduler 244
|
||||
#define __NR_sched_yield 245
|
||||
#define __NR_sched_get_priority_max 246
|
||||
#define __NR_sched_get_priority_min 247
|
||||
#define __NR_sched_rr_get_interval 248
|
||||
#define __NR_nanosleep 249
|
||||
#define __NR_mremap 250
|
||||
#define __NR__sysctl 251
|
||||
#define __NR_getsid 252
|
||||
#define __NR_fdatasync 253
|
||||
#define __NR_nfsservctl 254
|
||||
#define __NR_sync_file_range 255
|
||||
#define __NR_clock_settime 256
|
||||
#define __NR_clock_gettime 257
|
||||
#define __NR_clock_getres 258
|
||||
#define __NR_clock_nanosleep 259
|
||||
#define __NR_sched_getaffinity 260
|
||||
#define __NR_sched_setaffinity 261
|
||||
#define __NR_timer_settime 262
|
||||
#define __NR_timer_gettime 263
|
||||
#define __NR_timer_getoverrun 264
|
||||
#define __NR_timer_delete 265
|
||||
#define __NR_timer_create 266
|
||||
/* #define __NR_vserver 267 Reserved for VSERVER */
|
||||
#define __NR_io_setup 268
|
||||
#define __NR_io_destroy 269
|
||||
#define __NR_io_submit 270
|
||||
#define __NR_io_cancel 271
|
||||
#define __NR_io_getevents 272
|
||||
#define __NR_mq_open 273
|
||||
#define __NR_mq_unlink 274
|
||||
#define __NR_mq_timedsend 275
|
||||
#define __NR_mq_timedreceive 276
|
||||
#define __NR_mq_notify 277
|
||||
#define __NR_mq_getsetattr 278
|
||||
#define __NR_waitid 279
|
||||
#define __NR_tee 280
|
||||
#define __NR_add_key 281
|
||||
#define __NR_request_key 282
|
||||
#define __NR_keyctl 283
|
||||
#define __NR_openat 284
|
||||
#define __NR_mkdirat 285
|
||||
#define __NR_mknodat 286
|
||||
#define __NR_fchownat 287
|
||||
#define __NR_futimesat 288
|
||||
#define __NR_fstatat64 289
|
||||
#define __NR_unlinkat 290
|
||||
#define __NR_renameat 291
|
||||
#define __NR_linkat 292
|
||||
#define __NR_symlinkat 293
|
||||
#define __NR_readlinkat 294
|
||||
#define __NR_fchmodat 295
|
||||
#define __NR_faccessat 296
|
||||
#define __NR_pselect6 297
|
||||
#define __NR_ppoll 298
|
||||
#define __NR_unshare 299
|
||||
#define __NR_set_robust_list 300
|
||||
#define __NR_get_robust_list 301
|
||||
#define __NR_migrate_pages 302
|
||||
#define __NR_mbind 303
|
||||
#define __NR_get_mempolicy 304
|
||||
#define __NR_set_mempolicy 305
|
||||
#define __NR_kexec_load 306
|
||||
#define __NR_move_pages 307
|
||||
#define __NR_getcpu 308
|
||||
#define __NR_epoll_pwait 309
|
||||
#define __NR_utimensat 310
|
||||
#define __NR_signalfd 311
|
||||
#define __NR_timerfd_create 312
|
||||
#define __NR_eventfd 313
|
||||
#define __NR_fallocate 314
|
||||
#define __NR_timerfd_settime 315
|
||||
#define __NR_timerfd_gettime 316
|
||||
#define __NR_signalfd4 317
|
||||
#define __NR_eventfd2 318
|
||||
#define __NR_epoll_create1 319
|
||||
#define __NR_dup3 320
|
||||
#define __NR_pipe2 321
|
||||
#define __NR_inotify_init1 322
|
||||
#define __NR_accept4 323
|
||||
|
||||
#define NR_SYSCALLS 324
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define __ARCH_WANT_IPC_PARSE_VERSION
|
||||
#define __ARCH_WANT_OLD_READDIR
|
||||
#define __ARCH_WANT_STAT64
|
||||
#define __ARCH_WANT_SYS_ALARM
|
||||
#define __ARCH_WANT_SYS_GETHOSTNAME
|
||||
#define __ARCH_WANT_SYS_PAUSE
|
||||
#define __ARCH_WANT_SYS_SGETMASK
|
||||
#define __ARCH_WANT_SYS_SIGNAL
|
||||
#define __ARCH_WANT_SYS_TIME
|
||||
#define __ARCH_WANT_COMPAT_SYS_TIME
|
||||
#define __ARCH_WANT_SYS_UTIME
|
||||
#define __ARCH_WANT_SYS_WAITPID
|
||||
#define __ARCH_WANT_SYS_SOCKETCALL
|
||||
#define __ARCH_WANT_SYS_FADVISE64
|
||||
#define __ARCH_WANT_SYS_GETPGRP
|
||||
#define __ARCH_WANT_SYS_LLSEEK
|
||||
#define __ARCH_WANT_SYS_NICE
|
||||
#define __ARCH_WANT_SYS_OLDUMOUNT
|
||||
#define __ARCH_WANT_SYS_SIGPENDING
|
||||
#define __ARCH_WANT_SYS_SIGPROCMASK
|
||||
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
|
||||
#define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
|
||||
|
||||
/*
|
||||
* "Conditional" syscalls
|
||||
*
|
||||
* What we want is __attribute__((weak,alias("sys_ni_syscall"))),
|
||||
* but it doesn't work on all toolchains, so we just do it by hand
|
||||
*/
|
||||
#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _SPARC64_UNISTD_H */
|
1
arch/sparc/kernel/.gitignore
vendored
Normal file
1
arch/sparc/kernel/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
vmlinux.lds
|
@ -2,25 +2,98 @@
|
||||
# Makefile for the linux kernel.
|
||||
#
|
||||
|
||||
extra-y := head.o init_task.o vmlinux.lds
|
||||
asflags-y := -ansi
|
||||
ccflags-y := -Werror
|
||||
|
||||
EXTRA_AFLAGS := -ansi
|
||||
extra-y := head_$(BITS).o
|
||||
extra-y += init_task.o
|
||||
extra-y += vmlinux.lds
|
||||
|
||||
IRQ_OBJS := irq.o sun4m_irq.o sun4c_irq.o sun4d_irq.o
|
||||
obj-y := entry.o wof.o wuf.o etrap.o rtrap.o traps.o $(IRQ_OBJS) \
|
||||
process.o signal.o ioport.o setup.o idprom.o \
|
||||
sys_sparc.o systbls.o \
|
||||
time.o windows.o cpu.o devices.o \
|
||||
tadpole.o tick14.o ptrace.o \
|
||||
unaligned.o una_asm.o muldiv.o \
|
||||
prom.o of_device.o devres.o dma.o
|
||||
obj-$(CONFIG_SPARC32) += entry.o wof.o wuf.o
|
||||
obj-$(CONFIG_SPARC32) += etrap_32.o
|
||||
obj-$(CONFIG_SPARC32) += rtrap_32.o
|
||||
obj-y += traps_$(BITS).o
|
||||
|
||||
devres-y = ../../../kernel/irq/devres.o
|
||||
# IRQ
|
||||
obj-y += irq_$(BITS).o
|
||||
obj-$(CONFIG_SPARC32) += sun4m_irq.o sun4c_irq.o sun4d_irq.o
|
||||
|
||||
obj-$(CONFIG_PCI) += pcic.o
|
||||
obj-$(CONFIG_SMP) += trampoline.o smp.o sun4m_smp.o sun4d_smp.o
|
||||
obj-$(CONFIG_SUN_AUXIO) += auxio.o
|
||||
obj-$(CONFIG_SUN_PM) += apc.o pmc.o
|
||||
obj-$(CONFIG_MODULES) += module.o sparc_ksyms.o
|
||||
obj-$(CONFIG_SPARC_LED) += led.o
|
||||
obj-$(CONFIG_KGDB) += kgdb.o
|
||||
obj-y += process_$(BITS).o
|
||||
obj-y += signal_$(BITS).o
|
||||
obj-$(CONFIG_SPARC32) += ioport.o
|
||||
obj-y += setup_$(BITS).o
|
||||
obj-y += idprom.o
|
||||
obj-y += sys_sparc_$(BITS).o
|
||||
obj-$(CONFIG_SPARC32) += systbls_32.o
|
||||
obj-y += time_$(BITS).o
|
||||
obj-$(CONFIG_SPARC32) += windows.o
|
||||
obj-y += cpu.o
|
||||
obj-$(CONFIG_SPARC32) += devices.o
|
||||
obj-$(CONFIG_SPARC32) += tadpole.o
|
||||
obj-$(CONFIG_SPARC32) += tick14.o
|
||||
obj-y += ptrace_$(BITS).o
|
||||
obj-y += unaligned_$(BITS).o
|
||||
obj-y += una_asm_$(BITS).o
|
||||
obj-$(CONFIG_SPARC32) += muldiv.o
|
||||
obj-y += prom_common.o
|
||||
obj-y += prom_$(BITS).o
|
||||
obj-y += of_device_$(BITS).o
|
||||
obj-$(CONFIG_SPARC64) += prom_irqtrans.o
|
||||
|
||||
obj-$(CONFIG_SPARC64) += reboot.o
|
||||
obj-$(CONFIG_SPARC64) += sysfs.o
|
||||
obj-$(CONFIG_SPARC64) += iommu.o
|
||||
obj-$(CONFIG_SPARC64) += central.o
|
||||
obj-$(CONFIG_SPARC64) += starfire.o
|
||||
obj-$(CONFIG_SPARC64) += power.o
|
||||
obj-$(CONFIG_SPARC64) += sbus.o
|
||||
obj-$(CONFIG_SPARC64) += ebus.o
|
||||
obj-$(CONFIG_SPARC64) += visemul.o
|
||||
obj-$(CONFIG_SPARC64) += hvapi.o
|
||||
obj-$(CONFIG_SPARC64) += sstate.o
|
||||
obj-$(CONFIG_SPARC64) += mdesc.o
|
||||
|
||||
# sparc32 do not use GENERIC_HARDIRQS but uses the generic devres implementation
|
||||
obj-$(CONFIG_SPARC32) += devres.o
|
||||
devres-y := ../../../kernel/irq/devres.o
|
||||
|
||||
obj-$(CONFIG_SPARC32) += dma.o
|
||||
|
||||
obj-$(CONFIG_SPARC32_PCI) += pcic.o
|
||||
|
||||
obj-$(CONFIG_SMP) += trampoline_$(BITS).o smp_$(BITS).o
|
||||
obj-$(CONFIG_SPARC32_SMP) += sun4m_smp.o sun4d_smp.o
|
||||
obj-$(CONFIG_SPARC64_SMP) += hvtramp.o
|
||||
|
||||
obj-y += auxio_$(BITS).o
|
||||
obj-$(CONFIG_SUN_PM) += apc.o pmc.o
|
||||
|
||||
obj-$(CONFIG_MODULES) += module.o
|
||||
obj-$(CONFIG_MODULES) += sparc_ksyms_$(BITS).o
|
||||
obj-$(CONFIG_SPARC_LED) += led.o
|
||||
obj-$(CONFIG_KGDB) += kgdb_$(BITS).o
|
||||
|
||||
|
||||
obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o
|
||||
CFLAGS_REMOVE_ftrace.o := -pg
|
||||
|
||||
obj-$(CONFIG_STACKTRACE) += stacktrace.o
|
||||
# sparc64 PCI
|
||||
obj-$(CONFIG_SPARC64_PCI) += pci.o pci_common.o psycho_common.o
|
||||
obj-$(CONFIG_SPARC64_PCI) += pci_psycho.o pci_sabre.o pci_schizo.o
|
||||
obj-$(CONFIG_SPARC64_PCI) += pci_sun4v.o pci_sun4v_asm.o pci_fire.o
|
||||
obj-$(CONFIG_PCI_MSI) += pci_msi.o
|
||||
|
||||
obj-$(CONFIG_COMPAT) += sys32.o sys_sparc32.o signal32.o
|
||||
|
||||
# sparc64 cpufreq
|
||||
obj-$(CONFIG_US3_FREQ) += us3_cpufreq.o
|
||||
obj-$(CONFIG_US2E_FREQ) += us2e_cpufreq.o
|
||||
obj-$(CONFIG_US3_MC) += chmc.o
|
||||
|
||||
obj-$(CONFIG_KPROBES) += kprobes.o
|
||||
obj-$(CONFIG_SUN_LDOMS) += ldc.o vio.o viohs.o ds.o
|
||||
|
||||
obj-$(CONFIG_AUDIT) += audit.o
|
||||
audit--$(CONFIG_AUDIT) := compat_audit.o
|
||||
obj-$(CONFIG_COMPAT) += $(audit--y)
|
||||
|
@ -14,15 +14,28 @@
|
||||
// #include <linux/mm.h>
|
||||
#include <linux/kbuild.h>
|
||||
|
||||
int foo(void)
|
||||
#ifdef CONFIG_SPARC32
|
||||
int sparc32_foo(void)
|
||||
{
|
||||
DEFINE(AOFF_task_thread, offsetof(struct task_struct, thread));
|
||||
BLANK();
|
||||
DEFINE(AOFF_thread_fork_kpsr,
|
||||
offsetof(struct thread_struct, fork_kpsr));
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int sparc64_foo(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int foo(void)
|
||||
{
|
||||
BLANK();
|
||||
DEFINE(AOFF_task_thread, offsetof(struct task_struct, thread));
|
||||
BLANK();
|
||||
DEFINE(AOFF_mm_context, offsetof(struct mm_struct, context));
|
||||
|
||||
/* DEFINE(NUM_USER_SEGMENTS, TASK_SIZE>>28); */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -27,73 +27,55 @@ enum auxio_type {
|
||||
static enum auxio_type auxio_devtype = AUXIO_TYPE_NODEV;
|
||||
static DEFINE_SPINLOCK(auxio_lock);
|
||||
|
||||
static void __auxio_sbus_set(u8 bits_on, u8 bits_off)
|
||||
static void __auxio_rmw(u8 bits_on, u8 bits_off, int ebus)
|
||||
{
|
||||
if (auxio_register) {
|
||||
unsigned char regval;
|
||||
unsigned long flags;
|
||||
unsigned char newval;
|
||||
u8 regval, newval;
|
||||
|
||||
spin_lock_irqsave(&auxio_lock, flags);
|
||||
|
||||
regval = sbus_readb(auxio_register);
|
||||
regval = (ebus ?
|
||||
(u8) readl(auxio_register) :
|
||||
sbus_readb(auxio_register));
|
||||
newval = regval | bits_on;
|
||||
newval &= ~bits_off;
|
||||
newval &= ~AUXIO_AUX1_MASK;
|
||||
sbus_writeb(newval, auxio_register);
|
||||
if (!ebus)
|
||||
newval &= ~AUXIO_AUX1_MASK;
|
||||
if (ebus)
|
||||
writel((u32) newval, auxio_register);
|
||||
else
|
||||
sbus_writeb(newval, auxio_register);
|
||||
|
||||
spin_unlock_irqrestore(&auxio_lock, flags);
|
||||
}
|
||||
}
|
||||
|
||||
static void __auxio_ebus_set(u8 bits_on, u8 bits_off)
|
||||
static void __auxio_set_bit(u8 bit, int on, int ebus)
|
||||
{
|
||||
if (auxio_register) {
|
||||
unsigned char regval;
|
||||
unsigned long flags;
|
||||
unsigned char newval;
|
||||
u8 bits_on = (ebus ? AUXIO_PCIO_LED : AUXIO_AUX1_LED);
|
||||
u8 bits_off = 0;
|
||||
|
||||
spin_lock_irqsave(&auxio_lock, flags);
|
||||
|
||||
regval = (u8)readl(auxio_register);
|
||||
newval = regval | bits_on;
|
||||
newval &= ~bits_off;
|
||||
writel((u32)newval, auxio_register);
|
||||
|
||||
spin_unlock_irqrestore(&auxio_lock, flags);
|
||||
if (!on) {
|
||||
u8 tmp = bits_off;
|
||||
bits_off = bits_on;
|
||||
bits_on = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void __auxio_ebus_set_led(int on)
|
||||
{
|
||||
(on) ? __auxio_ebus_set(AUXIO_PCIO_LED, 0) :
|
||||
__auxio_ebus_set(0, AUXIO_PCIO_LED) ;
|
||||
}
|
||||
|
||||
static inline void __auxio_sbus_set_led(int on)
|
||||
{
|
||||
(on) ? __auxio_sbus_set(AUXIO_AUX1_LED, 0) :
|
||||
__auxio_sbus_set(0, AUXIO_AUX1_LED) ;
|
||||
__auxio_rmw(bits_on, bits_off, ebus);
|
||||
}
|
||||
|
||||
void auxio_set_led(int on)
|
||||
{
|
||||
switch(auxio_devtype) {
|
||||
case AUXIO_TYPE_SBUS:
|
||||
__auxio_sbus_set_led(on);
|
||||
break;
|
||||
case AUXIO_TYPE_EBUS:
|
||||
__auxio_ebus_set_led(on);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
int ebus = auxio_devtype == AUXIO_TYPE_EBUS;
|
||||
u8 bit;
|
||||
|
||||
bit = (ebus ? AUXIO_PCIO_LED : AUXIO_AUX1_LED);
|
||||
__auxio_set_bit(bit, on, ebus);
|
||||
}
|
||||
|
||||
static inline void __auxio_sbus_set_lte(int on)
|
||||
static void __auxio_sbus_set_lte(int on)
|
||||
{
|
||||
(on) ? __auxio_sbus_set(AUXIO_AUX1_LTE, 0) :
|
||||
__auxio_sbus_set(0, AUXIO_AUX1_LTE) ;
|
||||
__auxio_set_bit(AUXIO_AUX1_LTE, on, 0);
|
||||
}
|
||||
|
||||
void auxio_set_lte(int on)
|
@ -102,7 +102,7 @@ cheetah_plus_dcpe_trap_vector:
|
||||
.type do_cheetah_plus_data_parity,#function
|
||||
do_cheetah_plus_data_parity:
|
||||
rdpr %pil, %g2
|
||||
wrpr %g0, 15, %pil
|
||||
wrpr %g0, PIL_NORMAL_MAX, %pil
|
||||
ba,pt %xcc, etrap_irq
|
||||
rd %pc, %g7
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
@ -144,7 +144,7 @@ cheetah_plus_icpe_trap_vector:
|
||||
.type do_cheetah_plus_insn_parity,#function
|
||||
do_cheetah_plus_insn_parity:
|
||||
rdpr %pil, %g2
|
||||
wrpr %g0, 15, %pil
|
||||
wrpr %g0, PIL_NORMAL_MAX, %pil
|
||||
ba,pt %xcc, etrap_irq
|
||||
rd %pc, %g7
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
@ -492,7 +492,7 @@ cheetah_fast_ecc:
|
||||
.type c_fast_ecc,#function
|
||||
c_fast_ecc:
|
||||
rdpr %pil, %g2
|
||||
wrpr %g0, 15, %pil
|
||||
wrpr %g0, PIL_NORMAL_MAX, %pil
|
||||
ba,pt %xcc, etrap_irq
|
||||
rd %pc, %g7
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
@ -528,7 +528,7 @@ cheetah_cee:
|
||||
.type c_cee,#function
|
||||
c_cee:
|
||||
rdpr %pil, %g2
|
||||
wrpr %g0, 15, %pil
|
||||
wrpr %g0, PIL_NORMAL_MAX, %pil
|
||||
ba,pt %xcc, etrap_irq
|
||||
rd %pc, %g7
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
@ -564,7 +564,7 @@ cheetah_deferred_trap:
|
||||
.type c_deferred,#function
|
||||
c_deferred:
|
||||
rdpr %pil, %g2
|
||||
wrpr %g0, 15, %pil
|
||||
wrpr %g0, PIL_NORMAL_MAX, %pil
|
||||
ba,pt %xcc, etrap_irq
|
||||
rd %pc, %g7
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
@ -1,4 +1,5 @@
|
||||
#include <asm/unistd_32.h>
|
||||
#define __32bit_syscall_numbers__
|
||||
#include <asm/unistd.h>
|
||||
|
||||
unsigned sparc32_dir_class[] = {
|
||||
#include <asm-generic/audit_dir_write.h>
|
@ -8,6 +8,8 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/threads.h>
|
||||
|
||||
#include <asm/spitfire.h>
|
||||
#include <asm/oplib.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/head.h>
|
||||
@ -15,153 +17,322 @@
|
||||
#include <asm/mbus.h>
|
||||
#include <asm/cpudata.h>
|
||||
|
||||
#include "kernel.h"
|
||||
|
||||
DEFINE_PER_CPU(cpuinfo_sparc, __cpu_data) = { 0 };
|
||||
|
||||
struct cpu_iu_info {
|
||||
int psr_impl;
|
||||
int psr_vers;
|
||||
char* cpu_name; /* should be enough I hope... */
|
||||
struct cpu_info {
|
||||
int psr_vers;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
struct cpu_fp_info {
|
||||
int psr_impl;
|
||||
int fp_vers;
|
||||
char* fp_name;
|
||||
struct fpu_info {
|
||||
int fp_vers;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
#define NOCPU 8
|
||||
#define NOFPU 8
|
||||
|
||||
struct manufacturer_info {
|
||||
int psr_impl;
|
||||
struct cpu_info cpu_info[NOCPU];
|
||||
struct fpu_info fpu_info[NOFPU];
|
||||
};
|
||||
|
||||
#define CPU(ver, _name) \
|
||||
{ .psr_vers = ver, .name = _name }
|
||||
|
||||
#define FPU(ver, _name) \
|
||||
{ .fp_vers = ver, .name = _name }
|
||||
|
||||
static const struct manufacturer_info __initconst manufacturer_info[] = {
|
||||
{
|
||||
0,
|
||||
/* Sun4/100, 4/200, SLC */
|
||||
.cpu_info = {
|
||||
CPU(0, "Fujitsu MB86900/1A or LSI L64831 SparcKIT-40"),
|
||||
/* borned STP1012PGA */
|
||||
CPU(4, "Fujitsu MB86904"),
|
||||
CPU(5, "Fujitsu TurboSparc MB86907"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(0, "Fujitsu MB86910 or Weitek WTL1164/5"),
|
||||
FPU(1, "Fujitsu MB86911 or Weitek WTL1164/5 or LSI L64831"),
|
||||
FPU(2, "LSI Logic L64802 or Texas Instruments ACT8847"),
|
||||
/* SparcStation SLC, SparcStation1 */
|
||||
FPU(3, "Weitek WTL3170/2"),
|
||||
/* SPARCstation-5 */
|
||||
FPU(4, "Lsi Logic/Meiko L64804 or compatible"),
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
1,
|
||||
.cpu_info = {
|
||||
/* SparcStation2, SparcServer 490 & 690 */
|
||||
CPU(0, "LSI Logic Corporation - L64811"),
|
||||
/* SparcStation2 */
|
||||
CPU(1, "Cypress/ROSS CY7C601"),
|
||||
/* Embedded controller */
|
||||
CPU(3, "Cypress/ROSS CY7C611"),
|
||||
/* Ross Technologies HyperSparc */
|
||||
CPU(0xf, "ROSS HyperSparc RT620"),
|
||||
CPU(0xe, "ROSS HyperSparc RT625 or RT626"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(0, "ROSS HyperSparc combined IU/FPU"),
|
||||
FPU(1, "Lsi Logic L64814"),
|
||||
FPU(2, "Texas Instruments TMS390-C602A"),
|
||||
FPU(3, "Cypress CY7C602 FPU"),
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
2,
|
||||
.cpu_info = {
|
||||
/* ECL Implementation, CRAY S-MP Supercomputer... AIEEE! */
|
||||
/* Someone please write the code to support this beast! ;) */
|
||||
CPU(0, "Bipolar Integrated Technology - B5010"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
3,
|
||||
.cpu_info = {
|
||||
CPU(0, "LSI Logic Corporation - unknown-type"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
4,
|
||||
.cpu_info = {
|
||||
CPU(0, "Texas Instruments, Inc. - SuperSparc-(II)"),
|
||||
/* SparcClassic -- borned STP1010TAB-50*/
|
||||
CPU(1, "Texas Instruments, Inc. - MicroSparc"),
|
||||
CPU(2, "Texas Instruments, Inc. - MicroSparc II"),
|
||||
CPU(3, "Texas Instruments, Inc. - SuperSparc 51"),
|
||||
CPU(4, "Texas Instruments, Inc. - SuperSparc 61"),
|
||||
CPU(5, "Texas Instruments, Inc. - unknown"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
/* SuperSparc 50 module */
|
||||
FPU(0, "SuperSparc on-chip FPU"),
|
||||
/* SparcClassic */
|
||||
FPU(4, "TI MicroSparc on chip FPU"),
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
5,
|
||||
.cpu_info = {
|
||||
CPU(0, "Matsushita - MN10501"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(0, "Matsushita MN10501"),
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
6,
|
||||
.cpu_info = {
|
||||
CPU(0, "Philips Corporation - unknown"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
7,
|
||||
.cpu_info = {
|
||||
CPU(0, "Harvest VLSI Design Center, Inc. - unknown"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
8,
|
||||
.cpu_info = {
|
||||
CPU(0, "Systems and Processes Engineering Corporation (SPEC)"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
9,
|
||||
.cpu_info = {
|
||||
/* Gallium arsenide 200MHz, BOOOOGOOOOMIPS!!! */
|
||||
CPU(0, "Fujitsu or Weitek Power-UP"),
|
||||
CPU(1, "Fujitsu or Weitek Power-UP"),
|
||||
CPU(2, "Fujitsu or Weitek Power-UP"),
|
||||
CPU(3, "Fujitsu or Weitek Power-UP"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(3, "Fujitsu or Weitek on-chip FPU"),
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
0x17,
|
||||
.cpu_info = {
|
||||
CPU(0x10, "TI UltraSparc I (SpitFire)"),
|
||||
CPU(0x11, "TI UltraSparc II (BlackBird)"),
|
||||
CPU(0x12, "TI UltraSparc IIi (Sabre)"),
|
||||
CPU(0x13, "TI UltraSparc IIe (Hummingbird)"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(0x10, "UltraSparc I integrated FPU"),
|
||||
FPU(0x11, "UltraSparc II integrated FPU"),
|
||||
FPU(0x12, "UltraSparc IIi integrated FPU"),
|
||||
FPU(0x13, "UltraSparc IIe integrated FPU"),
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
0x22,
|
||||
.cpu_info = {
|
||||
CPU(0x10, "TI UltraSparc I (SpitFire)"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(0x10, "UltraSparc I integrated FPU"),
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
},{
|
||||
0x3e,
|
||||
.cpu_info = {
|
||||
CPU(0x14, "TI UltraSparc III (Cheetah)"),
|
||||
CPU(0x15, "TI UltraSparc III+ (Cheetah+)"),
|
||||
CPU(0x16, "TI UltraSparc IIIi (Jalapeno)"),
|
||||
CPU(0x18, "TI UltraSparc IV (Jaguar)"),
|
||||
CPU(0x19, "TI UltraSparc IV+ (Panther)"),
|
||||
CPU(0x22, "TI UltraSparc IIIi+ (Serrano)"),
|
||||
CPU(-1, NULL)
|
||||
},
|
||||
.fpu_info = {
|
||||
FPU(0x14, "UltraSparc III integrated FPU"),
|
||||
FPU(0x15, "UltraSparc III+ integrated FPU"),
|
||||
FPU(0x16, "UltraSparc IIIi integrated FPU"),
|
||||
FPU(0x18, "UltraSparc IV integrated FPU"),
|
||||
FPU(0x19, "UltraSparc IV+ integrated FPU"),
|
||||
FPU(0x22, "UltraSparc IIIi+ integrated FPU"),
|
||||
FPU(-1, NULL)
|
||||
}
|
||||
}};
|
||||
|
||||
/* In order to get the fpu type correct, you need to take the IDPROM's
|
||||
* machine type value into consideration too. I will fix this.
|
||||
*/
|
||||
static struct cpu_fp_info linux_sparc_fpu[] = {
|
||||
{ 0, 0, "Fujitsu MB86910 or Weitek WTL1164/5"},
|
||||
{ 0, 1, "Fujitsu MB86911 or Weitek WTL1164/5 or LSI L64831"},
|
||||
{ 0, 2, "LSI Logic L64802 or Texas Instruments ACT8847"},
|
||||
/* SparcStation SLC, SparcStation1 */
|
||||
{ 0, 3, "Weitek WTL3170/2"},
|
||||
/* SPARCstation-5 */
|
||||
{ 0, 4, "Lsi Logic/Meiko L64804 or compatible"},
|
||||
{ 0, 5, "reserved"},
|
||||
{ 0, 6, "reserved"},
|
||||
{ 0, 7, "No FPU"},
|
||||
{ 1, 0, "ROSS HyperSparc combined IU/FPU"},
|
||||
{ 1, 1, "Lsi Logic L64814"},
|
||||
{ 1, 2, "Texas Instruments TMS390-C602A"},
|
||||
{ 1, 3, "Cypress CY7C602 FPU"},
|
||||
{ 1, 4, "reserved"},
|
||||
{ 1, 5, "reserved"},
|
||||
{ 1, 6, "reserved"},
|
||||
{ 1, 7, "No FPU"},
|
||||
{ 2, 0, "BIT B5010 or B5110/20 or B5210"},
|
||||
{ 2, 1, "reserved"},
|
||||
{ 2, 2, "reserved"},
|
||||
{ 2, 3, "reserved"},
|
||||
{ 2, 4, "reserved"},
|
||||
{ 2, 5, "reserved"},
|
||||
{ 2, 6, "reserved"},
|
||||
{ 2, 7, "No FPU"},
|
||||
/* SuperSparc 50 module */
|
||||
{ 4, 0, "SuperSparc on-chip FPU"},
|
||||
/* SparcClassic */
|
||||
{ 4, 4, "TI MicroSparc on chip FPU"},
|
||||
{ 5, 0, "Matsushita MN10501"},
|
||||
{ 5, 1, "reserved"},
|
||||
{ 5, 2, "reserved"},
|
||||
{ 5, 3, "reserved"},
|
||||
{ 5, 4, "reserved"},
|
||||
{ 5, 5, "reserved"},
|
||||
{ 5, 6, "reserved"},
|
||||
{ 5, 7, "No FPU"},
|
||||
{ 9, 3, "Fujitsu or Weitek on-chip FPU"},
|
||||
};
|
||||
|
||||
#define NSPARCFPU ARRAY_SIZE(linux_sparc_fpu)
|
||||
|
||||
static struct cpu_iu_info linux_sparc_chips[] = {
|
||||
/* Sun4/100, 4/200, SLC */
|
||||
{ 0, 0, "Fujitsu MB86900/1A or LSI L64831 SparcKIT-40"},
|
||||
/* borned STP1012PGA */
|
||||
{ 0, 4, "Fujitsu MB86904"},
|
||||
{ 0, 5, "Fujitsu TurboSparc MB86907"},
|
||||
/* SparcStation2, SparcServer 490 & 690 */
|
||||
{ 1, 0, "LSI Logic Corporation - L64811"},
|
||||
/* SparcStation2 */
|
||||
{ 1, 1, "Cypress/ROSS CY7C601"},
|
||||
/* Embedded controller */
|
||||
{ 1, 3, "Cypress/ROSS CY7C611"},
|
||||
/* Ross Technologies HyperSparc */
|
||||
{ 1, 0xf, "ROSS HyperSparc RT620"},
|
||||
{ 1, 0xe, "ROSS HyperSparc RT625 or RT626"},
|
||||
/* ECL Implementation, CRAY S-MP Supercomputer... AIEEE! */
|
||||
/* Someone please write the code to support this beast! ;) */
|
||||
{ 2, 0, "Bipolar Integrated Technology - B5010"},
|
||||
{ 3, 0, "LSI Logic Corporation - unknown-type"},
|
||||
{ 4, 0, "Texas Instruments, Inc. - SuperSparc-(II)"},
|
||||
/* SparcClassic -- borned STP1010TAB-50*/
|
||||
{ 4, 1, "Texas Instruments, Inc. - MicroSparc"},
|
||||
{ 4, 2, "Texas Instruments, Inc. - MicroSparc II"},
|
||||
{ 4, 3, "Texas Instruments, Inc. - SuperSparc 51"},
|
||||
{ 4, 4, "Texas Instruments, Inc. - SuperSparc 61"},
|
||||
{ 4, 5, "Texas Instruments, Inc. - unknown"},
|
||||
{ 5, 0, "Matsushita - MN10501"},
|
||||
{ 6, 0, "Philips Corporation - unknown"},
|
||||
{ 7, 0, "Harvest VLSI Design Center, Inc. - unknown"},
|
||||
/* Gallium arsenide 200MHz, BOOOOGOOOOMIPS!!! */
|
||||
{ 8, 0, "Systems and Processes Engineering Corporation (SPEC)"},
|
||||
{ 9, 0, "Fujitsu or Weitek Power-UP"},
|
||||
{ 9, 1, "Fujitsu or Weitek Power-UP"},
|
||||
{ 9, 2, "Fujitsu or Weitek Power-UP"},
|
||||
{ 9, 3, "Fujitsu or Weitek Power-UP"},
|
||||
{ 0xa, 0, "UNKNOWN CPU-VENDOR/TYPE"},
|
||||
{ 0xb, 0, "UNKNOWN CPU-VENDOR/TYPE"},
|
||||
{ 0xc, 0, "UNKNOWN CPU-VENDOR/TYPE"},
|
||||
{ 0xd, 0, "UNKNOWN CPU-VENDOR/TYPE"},
|
||||
{ 0xe, 0, "UNKNOWN CPU-VENDOR/TYPE"},
|
||||
{ 0xf, 0, "UNKNOWN CPU-VENDOR/TYPE"},
|
||||
};
|
||||
|
||||
#define NSPARCCHIPS ARRAY_SIZE(linux_sparc_chips)
|
||||
|
||||
char *sparc_cpu_type;
|
||||
char *sparc_fpu_type;
|
||||
const char *sparc_cpu_type;
|
||||
const char *sparc_fpu_type;
|
||||
|
||||
unsigned int fsr_storage;
|
||||
|
||||
static void set_cpu_and_fpu(int psr_impl, int psr_vers, int fpu_vers)
|
||||
{
|
||||
sparc_cpu_type = NULL;
|
||||
sparc_fpu_type = NULL;
|
||||
if (psr_impl < ARRAY_SIZE(manufacturer_info))
|
||||
{
|
||||
const struct cpu_info *cpu;
|
||||
const struct fpu_info *fpu;
|
||||
|
||||
cpu = &manufacturer_info[psr_impl].cpu_info[0];
|
||||
while (cpu->psr_vers != -1)
|
||||
{
|
||||
if (cpu->psr_vers == psr_vers) {
|
||||
sparc_cpu_type = cpu->name;
|
||||
sparc_fpu_type = "No FPU";
|
||||
break;
|
||||
}
|
||||
cpu++;
|
||||
}
|
||||
fpu = &manufacturer_info[psr_impl].fpu_info[0];
|
||||
while (fpu->fp_vers != -1)
|
||||
{
|
||||
if (fpu->fp_vers == fpu_vers) {
|
||||
sparc_fpu_type = fpu->name;
|
||||
break;
|
||||
}
|
||||
fpu++;
|
||||
}
|
||||
}
|
||||
if (sparc_cpu_type == NULL)
|
||||
{
|
||||
printk(KERN_ERR "CPU: Unknown chip, impl[0x%x] vers[0x%x]\n",
|
||||
psr_impl, psr_vers);
|
||||
sparc_cpu_type = "Unknown CPU";
|
||||
}
|
||||
if (sparc_fpu_type == NULL)
|
||||
{
|
||||
printk(KERN_ERR "FPU: Unknown chip, impl[0x%x] vers[0x%x]\n",
|
||||
psr_impl, fpu_vers);
|
||||
sparc_fpu_type = "Unknown FPU";
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPARC32
|
||||
void __cpuinit cpu_probe(void)
|
||||
{
|
||||
int psr_impl, psr_vers, fpu_vers;
|
||||
int i, psr;
|
||||
int psr;
|
||||
|
||||
psr_impl = ((get_psr()>>28)&0xf);
|
||||
psr_vers = ((get_psr()>>24)&0xf);
|
||||
psr_impl = ((get_psr() >> 28) & 0xf);
|
||||
psr_vers = ((get_psr() >> 24) & 0xf);
|
||||
|
||||
psr = get_psr();
|
||||
put_psr(psr | PSR_EF);
|
||||
fpu_vers = ((get_fsr()>>17)&0x7);
|
||||
fpu_vers = ((get_fsr() >> 17) & 0x7);
|
||||
put_psr(psr);
|
||||
|
||||
for(i = 0; i<NSPARCCHIPS; i++) {
|
||||
if(linux_sparc_chips[i].psr_impl == psr_impl)
|
||||
if(linux_sparc_chips[i].psr_vers == psr_vers) {
|
||||
sparc_cpu_type = linux_sparc_chips[i].cpu_name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
set_cpu_and_fpu(psr_impl, psr_vers, fpu_vers);
|
||||
}
|
||||
#else
|
||||
static void __init sun4v_cpu_probe(void)
|
||||
{
|
||||
switch (sun4v_chip_type) {
|
||||
case SUN4V_CHIP_NIAGARA1:
|
||||
sparc_cpu_type = "UltraSparc T1 (Niagara)";
|
||||
sparc_fpu_type = "UltraSparc T1 integrated FPU";
|
||||
break;
|
||||
|
||||
if(i==NSPARCCHIPS)
|
||||
printk("DEBUG: psr.impl = 0x%x psr.vers = 0x%x\n", psr_impl,
|
||||
psr_vers);
|
||||
case SUN4V_CHIP_NIAGARA2:
|
||||
sparc_cpu_type = "UltraSparc T2 (Niagara2)";
|
||||
sparc_fpu_type = "UltraSparc T2 integrated FPU";
|
||||
break;
|
||||
|
||||
for(i = 0; i<NSPARCFPU; i++) {
|
||||
if(linux_sparc_fpu[i].psr_impl == psr_impl)
|
||||
if(linux_sparc_fpu[i].fp_vers == fpu_vers) {
|
||||
sparc_fpu_type = linux_sparc_fpu[i].fp_name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(i == NSPARCFPU) {
|
||||
printk("DEBUG: psr.impl = 0x%x fsr.vers = 0x%x\n", psr_impl,
|
||||
fpu_vers);
|
||||
sparc_fpu_type = linux_sparc_fpu[31].fp_name;
|
||||
default:
|
||||
printk(KERN_WARNING "CPU: Unknown sun4v cpu type [%s]\n",
|
||||
prom_cpu_compatible);
|
||||
sparc_cpu_type = "Unknown SUN4V CPU";
|
||||
sparc_fpu_type = "Unknown SUN4V FPU";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static int __init cpu_type_probe(void)
|
||||
{
|
||||
if (tlb_type == hypervisor) {
|
||||
sun4v_cpu_probe();
|
||||
} else {
|
||||
unsigned long ver;
|
||||
int manuf, impl;
|
||||
|
||||
__asm__ __volatile__("rdpr %%ver, %0" : "=r" (ver));
|
||||
|
||||
manuf = ((ver >> 48) & 0xffff);
|
||||
impl = ((ver >> 32) & 0xffff);
|
||||
set_cpu_and_fpu(manuf, impl, impl);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(cpu_type_probe);
|
||||
#endif
|
||||
|
@ -133,14 +133,12 @@ void __init device_scan(void)
|
||||
#endif /* !CONFIG_SMP */
|
||||
|
||||
cpu_probe();
|
||||
#ifdef CONFIG_SUN_AUXIO
|
||||
{
|
||||
extern void auxio_probe(void);
|
||||
extern void auxio_power_probe(void);
|
||||
auxio_probe();
|
||||
auxio_power_probe();
|
||||
}
|
||||
#endif
|
||||
clock_stop_probe();
|
||||
|
||||
if (ARCH_SUN4C)
|
||||
|
@ -5,9 +5,43 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
extern const char *sparc_cpu_type;
|
||||
extern const char *sparc_fpu_type;
|
||||
/* irq */
|
||||
extern void handler_irq(int irq, struct pt_regs *regs);
|
||||
|
||||
#ifdef CONFIG_SPARC32
|
||||
/* traps */
|
||||
extern void do_hw_interrupt(struct pt_regs *regs, unsigned long type);
|
||||
extern void do_illegal_instruction(struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc, unsigned long psr);
|
||||
|
||||
extern void do_priv_instruction(struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc, unsigned long psr);
|
||||
extern void do_memaccess_unaligned(struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc,
|
||||
unsigned long psr);
|
||||
extern void do_fpd_trap(struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc, unsigned long psr);
|
||||
extern void do_fpe_trap(struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc, unsigned long psr);
|
||||
extern void handle_tag_overflow(struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc, unsigned long psr);
|
||||
extern void handle_watchpoint(struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc, unsigned long psr);
|
||||
extern void handle_reg_access(struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc, unsigned long psr);
|
||||
extern void handle_cp_disabled(struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc, unsigned long psr);
|
||||
extern void handle_cp_exception(struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc, unsigned long psr);
|
||||
|
||||
|
||||
|
||||
/* entry.S */
|
||||
extern void fpsave(unsigned long *fpregs, unsigned long *fsr,
|
||||
void *fpqueue, unsigned long *fpqdepth);
|
||||
extern void fpload(unsigned long *fpregs, unsigned long *fsr);
|
||||
|
||||
#else /* CONFIG_SPARC32 */
|
||||
extern void __init per_cpu_patch(void);
|
||||
extern void __init sun4v_patch(void);
|
||||
extern void __init boot_cpu_id_too_large(int cpu);
|
||||
@ -188,8 +222,8 @@ struct ino_bucket {
|
||||
extern struct ino_bucket *ivector_table;
|
||||
extern unsigned long ivector_table_pa;
|
||||
|
||||
extern void handler_irq(int irq, struct pt_regs *regs);
|
||||
extern void init_irqwork_curcpu(void);
|
||||
extern void __cpuinit sun4v_register_mondo_queues(int this_cpu);
|
||||
|
||||
#endif /* CONFIG_SPARC32 */
|
||||
#endif /* _ENTRY_H */
|
@ -16,9 +16,9 @@
|
||||
#include <asm/mmu.h>
|
||||
|
||||
#define TASK_REGOFF (THREAD_SIZE-TRACEREG_SZ-STACKFRAME_SZ)
|
||||
#define ETRAP_PSTATE1 (PSTATE_RMO | PSTATE_PRIV)
|
||||
#define ETRAP_PSTATE1 (PSTATE_TSO | PSTATE_PRIV)
|
||||
#define ETRAP_PSTATE2 \
|
||||
(PSTATE_RMO | PSTATE_PEF | PSTATE_PRIV | PSTATE_IE)
|
||||
(PSTATE_TSO | PSTATE_PEF | PSTATE_PRIV | PSTATE_IE)
|
||||
|
||||
/*
|
||||
* On entry, %g7 is return address - 0x4.
|
||||
@ -130,7 +130,7 @@ etrap_save: save %g2, -STACK_BIAS, %sp
|
||||
stx %g6, [%sp + PTREGS_OFF + PT_V9_G6]
|
||||
stx %g7, [%sp + PTREGS_OFF + PT_V9_G7]
|
||||
or %l7, %l0, %l7
|
||||
sethi %hi(TSTATE_RMO | TSTATE_PEF), %l0
|
||||
sethi %hi(TSTATE_TSO | TSTATE_PEF), %l0
|
||||
or %l7, %l0, %l7
|
||||
wrpr %l2, %tnpc
|
||||
wrpr %l7, (TSTATE_PRIV | TSTATE_IE), %tstate
|
@ -990,7 +990,7 @@ sun4c_continue_boot:
|
||||
|
||||
/* Zero out our BSS section. */
|
||||
set __bss_start , %o0 ! First address of BSS
|
||||
set end , %o1 ! Last address of BSS
|
||||
set _end , %o1 ! Last address of BSS
|
||||
add %o0, 0x1, %o0
|
||||
1:
|
||||
stb %g0, [%o0]
|
@ -706,7 +706,7 @@ setup_trap_table:
|
||||
andn %l0, PSTATE_IE, %o1
|
||||
wrpr %o1, 0x0, %pstate
|
||||
rdpr %pil, %l1
|
||||
wrpr %g0, 15, %pil
|
||||
wrpr %g0, PIL_NORMAL_MAX, %pil
|
||||
|
||||
/* Make the firmware call to jump over to the Linux trap table. */
|
||||
sethi %hi(is_sun4v), %o0
|
||||
@ -825,8 +825,8 @@ setup_tba:
|
||||
restore
|
||||
sparc64_boot_end:
|
||||
|
||||
#include "etrap.S"
|
||||
#include "rtrap.S"
|
||||
#include "etrap_64.S"
|
||||
#include "rtrap_64.S"
|
||||
#include "winfixup.S"
|
||||
#include "fpu_traps.S"
|
||||
#include "ivec.S"
|
||||
@ -882,7 +882,7 @@ swapper_4m_tsb:
|
||||
|
||||
! 0x0000000000428000
|
||||
|
||||
#include "systbls.S"
|
||||
#include "systbls_64.S"
|
||||
|
||||
.data
|
||||
.align 8
|
@ -766,3 +766,35 @@ ENTRY(sun4v_mmu_demap_all)
|
||||
retl
|
||||
nop
|
||||
ENDPROC(sun4v_mmu_demap_all)
|
||||
|
||||
ENTRY(sun4v_niagara_getperf)
|
||||
mov %o0, %o4
|
||||
mov HV_FAST_GET_PERFREG, %o5
|
||||
ta HV_FAST_TRAP
|
||||
stx %o1, [%o4]
|
||||
retl
|
||||
nop
|
||||
ENDPROC(sun4v_niagara_getperf)
|
||||
|
||||
ENTRY(sun4v_niagara_setperf)
|
||||
mov HV_FAST_SET_PERFREG, %o5
|
||||
ta HV_FAST_TRAP
|
||||
retl
|
||||
nop
|
||||
ENDPROC(sun4v_niagara_setperf)
|
||||
|
||||
ENTRY(sun4v_niagara2_getperf)
|
||||
mov %o0, %o4
|
||||
mov HV_FAST_N2_GET_PERFREG, %o5
|
||||
ta HV_FAST_TRAP
|
||||
stx %o1, [%o4]
|
||||
retl
|
||||
nop
|
||||
ENDPROC(sun4v_niagara2_getperf)
|
||||
|
||||
ENTRY(sun4v_niagara2_setperf)
|
||||
mov HV_FAST_N2_SET_PERFREG, %o5
|
||||
ta HV_FAST_TRAP
|
||||
retl
|
||||
nop
|
||||
ENDPROC(sun4v_niagara2_setperf)
|
@ -1,6 +1,6 @@
|
||||
/* hvtramp.S: Hypervisor start-cpu trampoline code.
|
||||
*
|
||||
* Copyright (C) 2007 David S. Miller <davem@davemloft.net>
|
||||
* Copyright (C) 2007, 2008 David S. Miller <davem@davemloft.net>
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
@ -14,6 +14,7 @@
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/head.h>
|
||||
#include <asm/asi.h>
|
||||
#include <asm/pil.h>
|
||||
|
||||
__CPUINIT
|
||||
.align 8
|
||||
@ -32,7 +33,7 @@
|
||||
*/
|
||||
hv_cpu_startup:
|
||||
SET_GL(0)
|
||||
wrpr %g0, 15, %pil
|
||||
wrpr %g0, PIL_NORMAL_MAX, %pil
|
||||
wrpr %g0, 0, %canrestore
|
||||
wrpr %g0, 0, %otherwin
|
||||
wrpr %g0, 6, %cansave
|
@ -11,35 +11,37 @@
|
||||
|
||||
#include <asm/oplib.h>
|
||||
#include <asm/idprom.h>
|
||||
#include <asm/machines.h> /* Fun with Sun released architectures. */
|
||||
|
||||
struct idprom *idprom;
|
||||
static struct idprom idprom_buffer;
|
||||
|
||||
#ifdef CONFIG_SPARC32
|
||||
#include <asm/machines.h> /* Fun with Sun released architectures. */
|
||||
|
||||
/* Here is the master table of Sun machines which use some implementation
|
||||
* of the Sparc CPU and have a meaningful IDPROM machtype value that we
|
||||
* know about. See asm-sparc/machines.h for empirical constants.
|
||||
*/
|
||||
static struct Sun_Machine_Models Sun_Machines[NUM_SUN_MACHINES] = {
|
||||
/* First, Sun4's */
|
||||
{ "Sun 4/100 Series", (SM_SUN4 | SM_4_110) },
|
||||
{ "Sun 4/200 Series", (SM_SUN4 | SM_4_260) },
|
||||
{ "Sun 4/300 Series", (SM_SUN4 | SM_4_330) },
|
||||
{ "Sun 4/400 Series", (SM_SUN4 | SM_4_470) },
|
||||
{ .name = "Sun 4/100 Series", .id_machtype = (SM_SUN4 | SM_4_110) },
|
||||
{ .name = "Sun 4/200 Series", .id_machtype = (SM_SUN4 | SM_4_260) },
|
||||
{ .name = "Sun 4/300 Series", .id_machtype = (SM_SUN4 | SM_4_330) },
|
||||
{ .name = "Sun 4/400 Series", .id_machtype = (SM_SUN4 | SM_4_470) },
|
||||
/* Now, Sun4c's */
|
||||
{ "Sun4c SparcStation 1", (SM_SUN4C | SM_4C_SS1) },
|
||||
{ "Sun4c SparcStation IPC", (SM_SUN4C | SM_4C_IPC) },
|
||||
{ "Sun4c SparcStation 1+", (SM_SUN4C | SM_4C_SS1PLUS) },
|
||||
{ "Sun4c SparcStation SLC", (SM_SUN4C | SM_4C_SLC) },
|
||||
{ "Sun4c SparcStation 2", (SM_SUN4C | SM_4C_SS2) },
|
||||
{ "Sun4c SparcStation ELC", (SM_SUN4C | SM_4C_ELC) },
|
||||
{ "Sun4c SparcStation IPX", (SM_SUN4C | SM_4C_IPX) },
|
||||
{ .name = "Sun4c SparcStation 1", .id_machtype = (SM_SUN4C | SM_4C_SS1) },
|
||||
{ .name = "Sun4c SparcStation IPC", .id_machtype = (SM_SUN4C | SM_4C_IPC) },
|
||||
{ .name = "Sun4c SparcStation 1+", .id_machtype = (SM_SUN4C | SM_4C_SS1PLUS) },
|
||||
{ .name = "Sun4c SparcStation SLC", .id_machtype = (SM_SUN4C | SM_4C_SLC) },
|
||||
{ .name = "Sun4c SparcStation 2", .id_machtype = (SM_SUN4C | SM_4C_SS2) },
|
||||
{ .name = "Sun4c SparcStation ELC", .id_machtype = (SM_SUN4C | SM_4C_ELC) },
|
||||
{ .name = "Sun4c SparcStation IPX", .id_machtype = (SM_SUN4C | SM_4C_IPX) },
|
||||
/* Finally, early Sun4m's */
|
||||
{ "Sun4m SparcSystem600", (SM_SUN4M | SM_4M_SS60) },
|
||||
{ "Sun4m SparcStation10/20", (SM_SUN4M | SM_4M_SS50) },
|
||||
{ "Sun4m SparcStation5", (SM_SUN4M | SM_4M_SS40) },
|
||||
{ .name = "Sun4m SparcSystem600", .id_machtype = (SM_SUN4M | SM_4M_SS60) },
|
||||
{ .name = "Sun4m SparcStation10/20", .id_machtype = (SM_SUN4M | SM_4M_SS50) },
|
||||
{ .name = "Sun4m SparcStation5", .id_machtype = (SM_SUN4M | SM_4M_SS40) },
|
||||
/* One entry for the OBP arch's which are sun4d, sun4e, and newer sun4m's */
|
||||
{ "Sun4M OBP based system", (SM_SUN4M_OBP | 0x0) } };
|
||||
{ .name = "Sun4M OBP based system", .id_machtype = (SM_SUN4M_OBP | 0x0) } };
|
||||
|
||||
static void __init display_system_type(unsigned char machtype)
|
||||
{
|
||||
@ -47,21 +49,25 @@ static void __init display_system_type(unsigned char machtype)
|
||||
register int i;
|
||||
|
||||
for (i = 0; i < NUM_SUN_MACHINES; i++) {
|
||||
if(Sun_Machines[i].id_machtype == machtype) {
|
||||
if (Sun_Machines[i].id_machtype == machtype) {
|
||||
if (machtype != (SM_SUN4M_OBP | 0x00) ||
|
||||
prom_getproperty(prom_root_node, "banner-name",
|
||||
sysname, sizeof(sysname)) <= 0)
|
||||
printk("TYPE: %s\n", Sun_Machines[i].name);
|
||||
printk(KERN_WARNING "TYPE: %s\n",
|
||||
Sun_Machines[i].name);
|
||||
else
|
||||
printk("TYPE: %s\n", sysname);
|
||||
printk(KERN_WARNING "TYPE: %s\n", sysname);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
prom_printf("IDPROM: Bogus id_machtype value, 0x%x\n", machtype);
|
||||
prom_halt();
|
||||
prom_printf("IDPROM: Warning, bogus id_machtype value, 0x%x\n", machtype);
|
||||
}
|
||||
|
||||
#else
|
||||
static void __init display_system_type(unsigned char machtype)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
/* Calculate the IDPROM checksum (xor of the data bytes). */
|
||||
static unsigned char __init calc_idprom_cksum(struct idprom *idprom)
|
||||
{
|
||||
@ -80,21 +86,14 @@ void __init idprom_init(void)
|
||||
|
||||
idprom = &idprom_buffer;
|
||||
|
||||
if (idprom->id_format != 0x01) {
|
||||
prom_printf("IDPROM: Unknown format type!\n");
|
||||
prom_halt();
|
||||
}
|
||||
if (idprom->id_format != 0x01)
|
||||
prom_printf("IDPROM: Warning, unknown format type!\n");
|
||||
|
||||
if (idprom->id_cksum != calc_idprom_cksum(idprom)) {
|
||||
prom_printf("IDPROM: Checksum failure (nvram=%x, calc=%x)!\n",
|
||||
if (idprom->id_cksum != calc_idprom_cksum(idprom))
|
||||
prom_printf("IDPROM: Warning, checksum failure (nvram=%x, calc=%x)!\n",
|
||||
idprom->id_cksum, calc_idprom_cksum(idprom));
|
||||
prom_halt();
|
||||
}
|
||||
|
||||
display_system_type(idprom->id_machtype);
|
||||
|
||||
printk("Ethernet address: %x:%x:%x:%x:%x:%x\n",
|
||||
idprom->id_ethaddr[0], idprom->id_ethaddr[1],
|
||||
idprom->id_ethaddr[2], idprom->id_ethaddr[3],
|
||||
idprom->id_ethaddr[4], idprom->id_ethaddr[5]);
|
||||
printk(KERN_WARNING "Ethernet address: %pM\n", idprom->id_ethaddr);
|
||||
}
|
||||
|
@ -23,6 +23,5 @@ EXPORT_SYMBOL(init_task);
|
||||
* in etrap.S which assumes it.
|
||||
*/
|
||||
union thread_union init_thread_union
|
||||
__attribute__((section (".text\"\n\t#")))
|
||||
__attribute__((aligned (THREAD_SIZE)))
|
||||
__attribute__((section (".data.init_task")))
|
||||
= { INIT_THREAD_INFO(init_task) };
|
||||
|
@ -552,8 +552,8 @@ int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sgl, int nents,
|
||||
/* IIep is write-through, not flushing. */
|
||||
for_each_sg(sgl, sg, nents, n) {
|
||||
BUG_ON(page_address(sg_page(sg)) == NULL);
|
||||
sg->dvma_address = virt_to_phys(sg_virt(sg));
|
||||
sg->dvma_length = sg->length;
|
||||
sg->dma_address = virt_to_phys(sg_virt(sg));
|
||||
sg->dma_length = sg->length;
|
||||
}
|
||||
return nents;
|
||||
}
|
||||
|
@ -46,6 +46,7 @@
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/irq_regs.h>
|
||||
|
||||
#include "kernel.h"
|
||||
#include "irq.h"
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
@ -592,19 +593,19 @@ EXPORT_SYMBOL(request_irq);
|
||||
|
||||
void disable_irq_nosync(unsigned int irq)
|
||||
{
|
||||
return __disable_irq(irq);
|
||||
__disable_irq(irq);
|
||||
}
|
||||
EXPORT_SYMBOL(disable_irq_nosync);
|
||||
|
||||
void disable_irq(unsigned int irq)
|
||||
{
|
||||
return __disable_irq(irq);
|
||||
__disable_irq(irq);
|
||||
}
|
||||
EXPORT_SYMBOL(disable_irq);
|
||||
|
||||
void enable_irq(unsigned int irq)
|
||||
{
|
||||
return __enable_irq(irq);
|
||||
__enable_irq(irq);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(enable_irq);
|
@ -775,6 +775,69 @@ void do_softirq(void)
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
static void unhandled_perf_irq(struct pt_regs *regs)
|
||||
{
|
||||
unsigned long pcr, pic;
|
||||
|
||||
read_pcr(pcr);
|
||||
read_pic(pic);
|
||||
|
||||
write_pcr(0);
|
||||
|
||||
printk(KERN_EMERG "CPU %d: Got unexpected perf counter IRQ.\n",
|
||||
smp_processor_id());
|
||||
printk(KERN_EMERG "CPU %d: PCR[%016lx] PIC[%016lx]\n",
|
||||
smp_processor_id(), pcr, pic);
|
||||
}
|
||||
|
||||
/* Almost a direct copy of the powerpc PMC code. */
|
||||
static DEFINE_SPINLOCK(perf_irq_lock);
|
||||
static void *perf_irq_owner_caller; /* mostly for debugging */
|
||||
static void (*perf_irq)(struct pt_regs *regs) = unhandled_perf_irq;
|
||||
|
||||
/* Invoked from level 15 PIL handler in trap table. */
|
||||
void perfctr_irq(int irq, struct pt_regs *regs)
|
||||
{
|
||||
clear_softint(1 << irq);
|
||||
perf_irq(regs);
|
||||
}
|
||||
|
||||
int register_perfctr_intr(void (*handler)(struct pt_regs *))
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!handler)
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock(&perf_irq_lock);
|
||||
if (perf_irq != unhandled_perf_irq) {
|
||||
printk(KERN_WARNING "register_perfctr_intr: "
|
||||
"perf IRQ busy (reserved by caller %p)\n",
|
||||
perf_irq_owner_caller);
|
||||
ret = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
perf_irq_owner_caller = __builtin_return_address(0);
|
||||
perf_irq = handler;
|
||||
|
||||
ret = 0;
|
||||
out:
|
||||
spin_unlock(&perf_irq_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(register_perfctr_intr);
|
||||
|
||||
void release_perfctr_intr(void (*handler)(struct pt_regs *))
|
||||
{
|
||||
spin_lock(&perf_irq_lock);
|
||||
perf_irq_owner_caller = NULL;
|
||||
perf_irq = unhandled_perf_irq;
|
||||
spin_unlock(&perf_irq_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(release_perfctr_intr);
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
void fixup_irqs(void)
|
||||
{
|
31
arch/sparc/kernel/kernel.h
Normal file
31
arch/sparc/kernel/kernel.h
Normal file
@ -0,0 +1,31 @@
|
||||
#ifndef __SPARC_KERNEL_H
|
||||
#define __SPARC_KERNEL_H
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
/* cpu.c */
|
||||
extern const char *sparc_cpu_type;
|
||||
extern const char *sparc_fpu_type;
|
||||
|
||||
extern unsigned int fsr_storage;
|
||||
|
||||
#ifdef CONFIG_SPARC32
|
||||
/* cpu.c */
|
||||
extern void cpu_probe(void);
|
||||
|
||||
/* traps_32.c */
|
||||
extern void handle_hw_divzero(struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc, unsigned long psr);
|
||||
/* muldiv.c */
|
||||
extern int do_user_muldiv (struct pt_regs *, unsigned long);
|
||||
|
||||
/* irq_32.c */
|
||||
extern struct irqaction static_irqaction[];
|
||||
extern int static_irq_count;
|
||||
extern spinlock_t irq_action_lock;
|
||||
|
||||
extern void unexpected_irq(int irq, void *dev_id, struct pt_regs * regs);
|
||||
|
||||
#else /* CONFIG_SPARC32 */
|
||||
#endif /* CONFIG_SPARC32 */
|
||||
#endif /* !(__SPARC_KERNEL_H) */
|
@ -11,6 +11,7 @@
|
||||
#include <linux/mm.h>
|
||||
#include <linux/miscdevice.h>
|
||||
|
||||
#include <asm/cpudata.h>
|
||||
#include <asm/hypervisor.h>
|
||||
#include <asm/mdesc.h>
|
||||
#include <asm/prom.h>
|
@ -1,4 +1,4 @@
|
||||
/* Kernel module help for sparc32.
|
||||
/* Kernel module help for sparc64.
|
||||
*
|
||||
* Copyright (C) 2001 Rusty Russell.
|
||||
* Copyright (C) 2002 David S. Miller.
|
||||
@ -11,6 +11,48 @@
|
||||
#include <linux/fs.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/spitfire.h>
|
||||
|
||||
#ifdef CONFIG_SPARC64
|
||||
static void *module_map(unsigned long size)
|
||||
{
|
||||
struct vm_struct *area;
|
||||
|
||||
size = PAGE_ALIGN(size);
|
||||
if (!size || size > MODULES_LEN)
|
||||
return NULL;
|
||||
|
||||
area = __get_vm_area(size, VM_ALLOC, MODULES_VADDR, MODULES_END);
|
||||
if (!area)
|
||||
return NULL;
|
||||
|
||||
return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL);
|
||||
}
|
||||
|
||||
static char *dot2underscore(char *name)
|
||||
{
|
||||
return name;
|
||||
}
|
||||
#else
|
||||
static void *module_map(unsigned long size)
|
||||
{
|
||||
return vmalloc(size);
|
||||
}
|
||||
|
||||
/* Replace references to .func with _Func */
|
||||
static char *dot2underscore(char *name)
|
||||
{
|
||||
if (name[0] == '.') {
|
||||
name[0] = '_';
|
||||
name[1] = toupper(name[1]);
|
||||
}
|
||||
return name;
|
||||
}
|
||||
#endif /* CONFIG_SPARC64 */
|
||||
|
||||
void *module_alloc(unsigned long size)
|
||||
{
|
||||
@ -20,7 +62,7 @@ void *module_alloc(unsigned long size)
|
||||
if (size == 0)
|
||||
return NULL;
|
||||
|
||||
ret = vmalloc(size);
|
||||
ret = module_map(size);
|
||||
if (!ret)
|
||||
ret = ERR_PTR(-ENOMEM);
|
||||
else
|
||||
@ -37,16 +79,14 @@ void module_free(struct module *mod, void *module_region)
|
||||
table entries. */
|
||||
}
|
||||
|
||||
/* Make generic code ignore STT_REGISTER dummy undefined symbols,
|
||||
* and replace references to .func with _Func
|
||||
*/
|
||||
/* Make generic code ignore STT_REGISTER dummy undefined symbols. */
|
||||
int module_frob_arch_sections(Elf_Ehdr *hdr,
|
||||
Elf_Shdr *sechdrs,
|
||||
char *secstrings,
|
||||
struct module *mod)
|
||||
{
|
||||
unsigned int symidx;
|
||||
Elf32_Sym *sym;
|
||||
Elf_Sym *sym;
|
||||
char *strtab;
|
||||
int i;
|
||||
|
||||
@ -56,26 +96,23 @@ int module_frob_arch_sections(Elf_Ehdr *hdr,
|
||||
return -ENOEXEC;
|
||||
}
|
||||
}
|
||||
sym = (Elf32_Sym *)sechdrs[symidx].sh_addr;
|
||||
sym = (Elf_Sym *)sechdrs[symidx].sh_addr;
|
||||
strtab = (char *)sechdrs[sechdrs[symidx].sh_link].sh_addr;
|
||||
|
||||
for (i = 1; i < sechdrs[symidx].sh_size / sizeof(Elf_Sym); i++) {
|
||||
if (sym[i].st_shndx == SHN_UNDEF) {
|
||||
if (ELF32_ST_TYPE(sym[i].st_info) == STT_REGISTER)
|
||||
if (ELF_ST_TYPE(sym[i].st_info) == STT_REGISTER) {
|
||||
sym[i].st_shndx = SHN_ABS;
|
||||
else {
|
||||
} else {
|
||||
char *name = strtab + sym[i].st_name;
|
||||
if (name[0] == '.') {
|
||||
name[0] = '_';
|
||||
name[1] = toupper(name[1]);
|
||||
}
|
||||
dot2underscore(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int apply_relocate(Elf32_Shdr *sechdrs,
|
||||
int apply_relocate(Elf_Shdr *sechdrs,
|
||||
const char *strtab,
|
||||
unsigned int symindex,
|
||||
unsigned int relsec,
|
||||
@ -86,32 +123,68 @@ int apply_relocate(Elf32_Shdr *sechdrs,
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
int apply_relocate_add(Elf32_Shdr *sechdrs,
|
||||
int apply_relocate_add(Elf_Shdr *sechdrs,
|
||||
const char *strtab,
|
||||
unsigned int symindex,
|
||||
unsigned int relsec,
|
||||
struct module *me)
|
||||
{
|
||||
unsigned int i;
|
||||
Elf32_Rela *rel = (void *)sechdrs[relsec].sh_addr;
|
||||
Elf32_Sym *sym;
|
||||
Elf_Rela *rel = (void *)sechdrs[relsec].sh_addr;
|
||||
Elf_Sym *sym;
|
||||
u8 *location;
|
||||
u32 *loc32;
|
||||
|
||||
for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rel); i++) {
|
||||
Elf32_Addr v;
|
||||
Elf_Addr v;
|
||||
|
||||
/* This is where to make the change */
|
||||
location = (u8 *)sechdrs[sechdrs[relsec].sh_info].sh_addr
|
||||
+ rel[i].r_offset;
|
||||
loc32 = (u32 *) location;
|
||||
|
||||
#ifdef CONFIG_SPARC64
|
||||
BUG_ON(((u64)location >> (u64)32) != (u64)0);
|
||||
#endif /* CONFIG_SPARC64 */
|
||||
|
||||
/* This is the symbol it is referring to. Note that all
|
||||
undefined symbols have been resolved. */
|
||||
sym = (Elf32_Sym *)sechdrs[symindex].sh_addr
|
||||
+ ELF32_R_SYM(rel[i].r_info);
|
||||
sym = (Elf_Sym *)sechdrs[symindex].sh_addr
|
||||
+ ELF_R_SYM(rel[i].r_info);
|
||||
v = sym->st_value + rel[i].r_addend;
|
||||
|
||||
switch (ELF32_R_TYPE(rel[i].r_info)) {
|
||||
switch (ELF_R_TYPE(rel[i].r_info) & 0xff) {
|
||||
#ifdef CONFIG_SPARC64
|
||||
case R_SPARC_64:
|
||||
location[0] = v >> 56;
|
||||
location[1] = v >> 48;
|
||||
location[2] = v >> 40;
|
||||
location[3] = v >> 32;
|
||||
location[4] = v >> 24;
|
||||
location[5] = v >> 16;
|
||||
location[6] = v >> 8;
|
||||
location[7] = v >> 0;
|
||||
break;
|
||||
|
||||
case R_SPARC_DISP32:
|
||||
v -= (Elf_Addr) location;
|
||||
*loc32 = v;
|
||||
break;
|
||||
|
||||
case R_SPARC_WDISP19:
|
||||
v -= (Elf_Addr) location;
|
||||
*loc32 = (*loc32 & ~0x7ffff) |
|
||||
((v >> 2) & 0x7ffff);
|
||||
break;
|
||||
|
||||
case R_SPARC_OLO10:
|
||||
*loc32 = (*loc32 & ~0x1fff) |
|
||||
(((v & 0x3ff) +
|
||||
(ELF_R_TYPE(rel[i].r_info) >> 8))
|
||||
& 0x1fff);
|
||||
break;
|
||||
#endif /* CONFIG_SPARC64 */
|
||||
|
||||
case R_SPARC_32:
|
||||
case R_SPARC_UA32:
|
||||
location[0] = v >> 24;
|
||||
@ -121,13 +194,13 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
|
||||
break;
|
||||
|
||||
case R_SPARC_WDISP30:
|
||||
v -= (Elf32_Addr) location;
|
||||
v -= (Elf_Addr) location;
|
||||
*loc32 = (*loc32 & ~0x3fffffff) |
|
||||
((v >> 2) & 0x3fffffff);
|
||||
break;
|
||||
|
||||
case R_SPARC_WDISP22:
|
||||
v -= (Elf32_Addr) location;
|
||||
v -= (Elf_Addr) location;
|
||||
*loc32 = (*loc32 & ~0x3fffff) |
|
||||
((v >> 2) & 0x3fffff);
|
||||
break;
|
||||
@ -144,19 +217,38 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
|
||||
default:
|
||||
printk(KERN_ERR "module %s: Unknown relocation: %x\n",
|
||||
me->name,
|
||||
(int) (ELF32_R_TYPE(rel[i].r_info) & 0xff));
|
||||
(int) (ELF_R_TYPE(rel[i].r_info) & 0xff));
|
||||
return -ENOEXEC;
|
||||
};
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPARC64
|
||||
int module_finalize(const Elf_Ehdr *hdr,
|
||||
const Elf_Shdr *sechdrs,
|
||||
struct module *me)
|
||||
{
|
||||
/* Cheetah's I-cache is fully coherent. */
|
||||
if (tlb_type == spitfire) {
|
||||
unsigned long va;
|
||||
|
||||
flushw_all();
|
||||
for (va = 0; va < (PAGE_SIZE << 1); va += 32)
|
||||
spitfire_put_icache_tag(va, 0x0);
|
||||
__asm__ __volatile__("flush %g6");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int module_finalize(const Elf_Ehdr *hdr,
|
||||
const Elf_Shdr *sechdrs,
|
||||
struct module *me)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_SPARC64 */
|
||||
|
||||
void module_arch_cleanup(struct module *mod)
|
||||
{
|
||||
|
@ -17,6 +17,8 @@
|
||||
#include <asm/system.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
#include "kernel.h"
|
||||
|
||||
/* #define DEBUG_MULDIV */
|
||||
|
||||
static inline int has_imm13(int insn)
|
||||
@ -88,9 +90,6 @@ store_reg(unsigned int result, unsigned int reg, struct pt_regs *regs)
|
||||
return (put_user(result, &win->locals[reg - 16]));
|
||||
}
|
||||
}
|
||||
|
||||
extern void handle_hw_divzero (struct pt_regs *regs, unsigned long pc,
|
||||
unsigned long npc, unsigned long psr);
|
||||
|
||||
/* Should return 0 if mul/div emulation succeeded and SIGILL should
|
||||
* not be issued.
|
||||
|
@ -811,20 +811,20 @@ static struct of_device * __init scan_one_device(struct device_node *dp,
|
||||
|
||||
irq = of_get_property(dp, "interrupts", &len);
|
||||
if (irq) {
|
||||
memcpy(op->irqs, irq, len);
|
||||
op->num_irqs = len / 4;
|
||||
|
||||
/* Prevent overrunning the op->irqs[] array. */
|
||||
if (op->num_irqs > PROMINTR_MAX) {
|
||||
printk(KERN_WARNING "%s: Too many irqs (%d), "
|
||||
"limiting to %d.\n",
|
||||
dp->full_name, op->num_irqs, PROMINTR_MAX);
|
||||
op->num_irqs = PROMINTR_MAX;
|
||||
}
|
||||
memcpy(op->irqs, irq, op->num_irqs * 4);
|
||||
} else {
|
||||
op->num_irqs = 0;
|
||||
}
|
||||
|
||||
/* Prevent overrunning the op->irqs[] array. */
|
||||
if (op->num_irqs > PROMINTR_MAX) {
|
||||
printk(KERN_WARNING "%s: Too many irqs (%d), "
|
||||
"limiting to %d.\n",
|
||||
dp->full_name, op->num_irqs, PROMINTR_MAX);
|
||||
op->num_irqs = PROMINTR_MAX;
|
||||
}
|
||||
|
||||
build_device_resources(op, parent);
|
||||
for (i = 0; i < op->num_irqs; i++)
|
||||
op->irqs[i] = build_one_device_irq(op, parent, op->irqs[i]);
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user