mirror of
				https://github.com/Wind4/vlmcsd.git
				synced 2025-11-04 23:09:28 +08:00 
			
		
		
		
	vlmcsd-svn1065-2016-10-12-Hotbird64
This commit is contained in:
		
							
								
								
									
										625
									
								
								GNUmakefile
									
									
									
									
									
								
							
							
						
						
									
										625
									
								
								GNUmakefile
									
									
									
									
									
								
							@@ -1,32 +1,19 @@
 | 
			
		||||
################################################################################
 | 
			
		||||
.NOTPARALLEL:
 | 
			
		||||
 | 
			
		||||
.PHONY: clean
 | 
			
		||||
MAX_THREADS ?= 16
 | 
			
		||||
 | 
			
		||||
PROGRAM_NAME ?= vlmcsd
 | 
			
		||||
CLIENT_NAME ?= vlmcs
 | 
			
		||||
MULTI_NAME ?= vlmcsdmulti
 | 
			
		||||
OBJ_NAME ?= libkms-static.o
 | 
			
		||||
A_NAME ?= libkms.a
 | 
			
		||||
CONFIG ?= config.h
 | 
			
		||||
COMPILER_LANGUAGE ?= c
 | 
			
		||||
PROGRAM_NAME ?= bin/vlmcsd
 | 
			
		||||
CLIENT_NAME ?= bin/vlmcs
 | 
			
		||||
MULTI_NAME ?= bin/vlmcsdmulti
 | 
			
		||||
OBJ_NAME ?= build/libkms-static.o
 | 
			
		||||
A_NAME ?= lib/libkms.a
 | 
			
		||||
 | 
			
		||||
# crypto library to use for standard algos, could save ~1-2kb ;)
 | 
			
		||||
# can be either 'openssl', 'polarssl' or anything other for internal impl
 | 
			
		||||
CRYPTO ?= internal
 | 
			
		||||
BASE_PROGRAM_NAME=$(notdir $(PROGRAM_NAME))
 | 
			
		||||
BASE_CLIENT_NAME=$(notdir $(CLIENT_NAME))
 | 
			
		||||
BASE_MULTI_NAME=$(notdir $(MULTI_NAME))
 | 
			
		||||
BASE_DLL_NAME=$(notdir $(DLL_NAME))
 | 
			
		||||
BASE_A_NAME=$(notdir $(A_NAME))
 | 
			
		||||
 | 
			
		||||
# use DNS_PARSER=internal if your OS doesn't supply the DNS parser routines
 | 
			
		||||
DNS_PARSER ?= OS
 | 
			
		||||
 | 
			
		||||
# You should supply your own version string here
 | 
			
		||||
 | 
			
		||||
VLMCSD_VERSION ?= $(shell test -d .svn && echo svn`svnversion`)
 | 
			
		||||
 | 
			
		||||
FEATURES ?= full
 | 
			
		||||
VERBOSE ?= NO
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
 | 
			
		||||
CC ?= gcc
 | 
			
		||||
TARGETPLATFORM := $(shell LANG=en_US.UTF-8 $(CC) -v 2>&1 | grep '^Target: ' | cut -f 2 -d ' ')
 | 
			
		||||
 | 
			
		||||
ifneq (,$(findstring darwin,$(TARGETPLATFORM)))
 | 
			
		||||
@@ -106,509 +93,62 @@ endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CYGWIN),1)
 | 
			
		||||
  DLL_NAME ?= cygkms.dll
 | 
			
		||||
  DLL_NAME ?= lib/cygkms.dll
 | 
			
		||||
else ifeq ($(WIN),1)
 | 
			
		||||
  DLL_NAME ?= libkms.dll
 | 
			
		||||
  DLL_NAME ?= lib/libkms.dll
 | 
			
		||||
else ifeq ($(DARWIN),1)
 | 
			
		||||
  DLL_NAME ?= libkms.dylib
 | 
			
		||||
  DLL_NAME ?= lib/libkms.dylib
 | 
			
		||||
else
 | 
			
		||||
  DLL_NAME ?= libkms.so
 | 
			
		||||
  DLL_NAME ?= lib/libkms.so
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
BASECFLAGS = -DVLMCSD_COMPILER=\"$(notdir $(CC))\" -DVLMCSD_PLATFORM=\"$(TARGETPLATFORM)\" -DCONFIG=\"$(CONFIG)\" -DBUILD_TIME=$(shell date '+%s') -g -Os -fno-strict-aliasing -fomit-frame-pointer -ffunction-sections -fdata-sections
 | 
			
		||||
BASELDFLAGS = 
 | 
			
		||||
STRIPFLAGS =
 | 
			
		||||
CLIENTLDFLAGS =
 | 
			
		||||
SERVERLDFLAGS =
 | 
			
		||||
.DEFAULT:
 | 
			
		||||
	+@(test -d bin || mkdir bin) & (test -d lib || mkdir lib) & (test -d build || mkdir build)
 | 
			
		||||
	+@$(MAKE) -j$(MAX_THREADS) -C src $@ FROM_PARENT=1 PROGRAM_NAME=$(PROGRAM_NAME) CLIENT_NAME=$(CLIENT_NAME) MULTI_NAME=$(MULTI_NAME) DLL_NAME=$(DLL_NAME) A_NAME=$(A_NAME)
 | 
			
		||||
 | 
			
		||||
ifndef SAFE_MODE
 | 
			
		||||
  BASECFLAGS += -fvisibility=hidden -pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants
 | 
			
		||||
  
 | 
			
		||||
  ifeq ($(ELF),1)
 | 
			
		||||
    BASELDFLAGS += -Wl,-z,norelro
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  ifneq (,$(findstring gcc,$(notdir $(CC))))
 | 
			
		||||
    BASECFLAGS += -flto
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(NOLIBS),1)
 | 
			
		||||
  NOLRESOLV=1
 | 
			
		||||
  NOLPTHREAD=1
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(NOLIBS),1)
 | 
			
		||||
  ifeq ($(MINGW),1)
 | 
			
		||||
    BASELDFLAGS += -lws2_32 -liphlpapi
 | 
			
		||||
  endif
 | 
			
		||||
endif 
 | 
			
		||||
 | 
			
		||||
ifneq ($(NO_DNS),1)
 | 
			
		||||
  ifneq ($(ANDROID),1)
 | 
			
		||||
  ifneq ($(NOLRESOLV),1)
 | 
			
		||||
 | 
			
		||||
    ifeq ($(MINGW),1)
 | 
			
		||||
      CLIENTLDFLAGS += -ldnsapi
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    ifeq ($(LINUX),1)
 | 
			
		||||
      CLIENTLDFLAGS += -lresolv
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    ifeq ($(HURD),1)
 | 
			
		||||
      CLIENTLDFLAGS += -lresolv
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    ifeq ($(DARWIN),1)
 | 
			
		||||
      CLIENTLDFLAGS += -lresolv
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    ifeq ($(CYGWIN),1)
 | 
			
		||||
      DNS_PARSER := internal
 | 
			
		||||
      CLIENTLDFLAGS += -lresolv
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    ifeq ($(OPENBSD),1)
 | 
			
		||||
      DNS_PARSER := internal
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    ifeq ($(SOLARIS),1)
 | 
			
		||||
      CLIENTLDFLAGS += -lresolv
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
  endif
 | 
			
		||||
  endif
 | 
			
		||||
else
 | 
			
		||||
  BASECFLAGS += -DNO_DNS
 | 
			
		||||
endif 
 | 
			
		||||
 | 
			
		||||
ifneq ($(CAT),2)
 | 
			
		||||
  BASECFLAGS += "-Wall"
 | 
			
		||||
endif  
 | 
			
		||||
 | 
			
		||||
ifeq ($(DARWIN), 1)
 | 
			
		||||
  STRIPFLAGS += -Wl,-S -Wl,-x
 | 
			
		||||
  BASECFLAGS += -Wno-deprecated-declarations
 | 
			
		||||
else ifeq ($(shell uname), SunOS)
 | 
			
		||||
  STRIPFLAGS += -s
 | 
			
		||||
  ifeq ($(notdir $(LD_ALTEXEC)),gld)
 | 
			
		||||
    BASELDFLAGS += -Wl,--gc-sections
 | 
			
		||||
  endif
 | 
			
		||||
  BASELDFLAGS += -lsocket
 | 
			
		||||
else
 | 
			
		||||
  ifneq ($(CC),tcc)
 | 
			
		||||
  	BASELDFLAGS += -Wl,--gc-sections
 | 
			
		||||
  endif
 | 
			
		||||
  STRIPFLAGS += -s
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
LIBRARY_CFLAGS = -DSIMPLE_SOCKETS -DNO_TIMEOUT -DNO_SIGHUP -DNO_CL_PIDS -DNO_EXTENDED_PRODUCT_LIST -DNO_BASIC_PRODUCT_LIST -DNO_LOG -DNO_RANDOM_EPID -DNO_INI_FILE -DNO_HELP -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_USER_SWITCH -DNO_VERBOSE_LOG -DNO_LIMIT -DNO_VERSION_INFORMATION -DNO_PRIVATE_IP_DETECT
 | 
			
		||||
 | 
			
		||||
ifeq ($(FEATURES), embedded)
 | 
			
		||||
  BASECFLAGS += -DNO_HELP -DNO_USER_SWITCH -DNO_BASIC_PRODUCT_LIST -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_VERBOSE_LOG -DNO_VERSION_INFORMATION
 | 
			
		||||
else ifeq ($(FEATURES), autostart)
 | 
			
		||||
  BASECFLAGS += -DNO_HELP -DNO_VERSION_INFORMATION
 | 
			
		||||
else ifeq ($(FEATURES), minimum)
 | 
			
		||||
  BASECFLAGS += -DSIMPLE_SOCKETS -DNO_TIMEOUT -DNO_SIGHUP -DNO_CL_PIDS -DNO_EXTENDED_PRODUCT_LIST -DNO_BASIC_PRODUCT_LIST -DNO_LOG -DNO_RANDOM_EPID -DNO_INI_FILE -DNO_HELP -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_USER_SWITCH -DNO_VERBOSE_LOG -DNO_LIMIT -DNO_VERSION_INFORMATION -DNO_PRIVATE_IP_DETECT -DSMALL_AES
 | 
			
		||||
else ifeq ($(FEATURES), most)
 | 
			
		||||
  BASECFLAGS += -DNO_SIGHUP -DNO_PID_FILE -DNO_LIMIT
 | 
			
		||||
else ifeq ($(FEATURES), inetd)
 | 
			
		||||
  BASECFLAGS += -DNO_SIGHUP -DNO_SOCKETS -DNO_PID_FILE -DNO_LIMIT -DNO_VERSION_INFORMATION
 | 
			
		||||
else ifeq ($(FEATURES), fixedepids)
 | 
			
		||||
  BASECFLAGS += -DNO_SIGHUP -DNO_CL_PIDS -DNO_RANDOM_EPID -DNO_INI_FILE
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef INI
 | 
			
		||||
  BASECFLAGS += -DINI_FILE=\"$(INI)\"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(NO_GETIFADDRS), 1)
 | 
			
		||||
  BASECFLAGS += -DNO_GETIFADDRS
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(THREADS), 1)
 | 
			
		||||
  BASECFLAGS += -DUSE_THREADS
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CHILD_HANDLER), 1)
 | 
			
		||||
  BASECFLAGS += -DCHILD_HANDLER
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(NO_TIMEOUT), 1)
 | 
			
		||||
  BASECFLAGS += -DNO_TIMEOUT
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef WINDOWS
 | 
			
		||||
  BASECFLAGS += -DEPID_WINDOWS=\"$(WINDOWS)\"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef OFFICE2010
 | 
			
		||||
  BASECFLAGS += -DEPID_OFFICE2010=\"$(OFFICE2010)\"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef OFFICE2013
 | 
			
		||||
  BASECFLAGS += -DEPID_OFFICE2013=\"$(OFFICE2013)\"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef OFFICE2016
 | 
			
		||||
  BASECFLAGS += -DEPID_OFFICE2016=\"$(OFFICE2016)\"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef HWID
 | 
			
		||||
  BASECFLAGS += -DHWID=$(HWID)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef TERMINAL_WIDTH
 | 
			
		||||
  BASECFLAGS += -DTERMINAL_FIXED_WIDTH=$(TERMINAL_WIDTH) -DDISPLAY_WIDTH=\"$(TERMINAL_WIDTH)\"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(NOPROCFS), 1)
 | 
			
		||||
  BASECFLAGS += -DNO_PROCFS
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(AUXV), 1)
 | 
			
		||||
  BASECFLAGS += -DUSE_AUXV
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(ANDROID), 1)
 | 
			
		||||
ifneq ($(MINIX), 1)
 | 
			
		||||
ifneq ($(NOLPTHREAD), 1)
 | 
			
		||||
 | 
			
		||||
  ifeq ($(THREADS), 1)
 | 
			
		||||
    SERVERLDFLAGS += -lpthread
 | 
			
		||||
  endif
 | 
			
		||||
  
 | 
			
		||||
  ifeq (,$(findstring NO_LIMIT,$(CFLAGS) $(BASECFLAGS)))  
 | 
			
		||||
    SERVERLDFLAGS += -lpthread
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
$(MULTI_NAME): BASECFLAGS += -DMULTI_CALL_BINARY=1
 | 
			
		||||
 | 
			
		||||
all: $(CLIENT_NAME) $(PROGRAM_NAME)
 | 
			
		||||
 | 
			
		||||
#ifdef CAT
 | 
			
		||||
  allmulti: $(CLIENT_NAME) $(PROGRAM_NAME) $(MULTI_NAME)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(strip $(VLMCSD_VERSION)),)
 | 
			
		||||
  BASECFLAGS += -DVERSION=\"$(VLMCSD_VERSION),\ built\ $(shell date -u '+%Y-%m-%d %H:%M:%S' | sed -e 's/ /\\ /g')\ UTC\" 
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef CAT
 | 
			
		||||
  BASECFLAGS += -DONE_FILE
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
SRCS = crypto.c kms.c endian.c output.c shared_globals.c helpers.c
 | 
			
		||||
HEADERS = $(CONFIG) types.h rpc.h vlmcsd.h endian.h crypto.h kms.h network.h output.h shared_globals.h vlmcs.h helpers.h
 | 
			
		||||
DEPS = $(MULTI_SRCS:.c=.d)
 | 
			
		||||
 | 
			
		||||
VLMCSD_SRCS = vlmcsd.c $(SRCS)
 | 
			
		||||
VLMCSD_OBJS = $(VLMCSD_SRCS:.c=.o)
 | 
			
		||||
 | 
			
		||||
VLMCS_SRCS = vlmcs.c $(SRCS)
 | 
			
		||||
VLMCS_OBJS = $(VLMCS_SRCS:.c=.o)
 | 
			
		||||
 | 
			
		||||
MULTI_SRCS = vlmcsd.c vlmcs.c vlmcsdmulti.c $(SRCS)
 | 
			
		||||
MULTI_OBJS = $(SRCS:.c=.o) vlmcsd-m.o vlmcs-m.o vlmcsdmulti-m.o
 | 
			
		||||
 | 
			
		||||
DLL_SRCS = libkms.c vlmcs.c $(SRCS)
 | 
			
		||||
DLL_OBJS = $(DLL_SRCS:.c=-l.o)
 | 
			
		||||
 | 
			
		||||
PDFDOCS = vlmcs.1.pdf vlmcsd.7.pdf vlmcsd.8.pdf vlmcsdmulti.1.pdf vlmcsd.ini.5.pdf vlmcsd-floppy.7.pdf
 | 
			
		||||
HTMLDOCS = $(PDFDOCS:.pdf=.html)
 | 
			
		||||
UNIXDOCS = $(PDFDOCS:.pdf=.unix.txt)
 | 
			
		||||
DOSDOCS = $(PDFDOCS:.pdf=.dos.txt)
 | 
			
		||||
 | 
			
		||||
ifneq ($(NO_DNS),1)
 | 
			
		||||
 | 
			
		||||
  VLMCS_SRCS += dns_srv.c
 | 
			
		||||
  MULTI_SRCS += dns_srv.c
 | 
			
		||||
  MULTI_OBJS += dns_srv.o
 | 
			
		||||
 | 
			
		||||
ifeq ($(DNS_PARSER),internal)
 | 
			
		||||
ifneq ($(MINGW),1)
 | 
			
		||||
  VLMCS_SRCS += ns_parse.c ns_name.c
 | 
			
		||||
  MULTI_SRCS += ns_parse.c ns_name.c
 | 
			
		||||
  MULTI_OBJS += ns_parse.o ns_name.o
 | 
			
		||||
  BASECFLAGS += "-DDNS_PARSER_INTERNAL"
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(MSRPC),1)
 | 
			
		||||
  VLMCSD_SRCS += msrpc-server.c
 | 
			
		||||
  VLMCS_SRCS += msrpc-client.c
 | 
			
		||||
  MULTI_SRCS += msrpc-server.c msrpc-client.c
 | 
			
		||||
  MULTI_OBJS += msrpc-server-m.o msrpc-client-m.o
 | 
			
		||||
  DLL_SRCS += msrpc-server.c
 | 
			
		||||
  BASECFLAGS += -DUSE_MSRPC -Wno-unknown-pragmas
 | 
			
		||||
  BASELDFLAGS += -lrpcrt4
 | 
			
		||||
else
 | 
			
		||||
  SRCS += network.c rpc.c  
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(GETIFADDRS),musl)
 | 
			
		||||
ifneq ($(NO_GETIFADDRS),1)
 | 
			
		||||
  BASECFLAGS += -DGETIFADDRS_MUSL
 | 
			
		||||
  VLMCSD_SRCS += getifaddrs-musl.c
 | 
			
		||||
  MULTI_SRCS += getifaddrs-musl.c
 | 
			
		||||
  VLMCS_SRCS += getifaddrs-musl.c
 | 
			
		||||
  DLL_SRCS += getifaddrs-musl.c
 | 
			
		||||
  MULTI_OBJS += getifaddrs-musl.o
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(ANDROID),1)
 | 
			
		||||
ifneq ($(NO_GETIFADDRS),1)
 | 
			
		||||
  VLMCSD_SRCS += ifaddrs-android.c
 | 
			
		||||
  MULTI_SRCS += ifaddrs-android.c
 | 
			
		||||
  DLL_SRCS += ifaddrs-android.c
 | 
			
		||||
  MULTI_OBJS += ifaddrs-android.o
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq "$(WIN)" "1"
 | 
			
		||||
	VLMCSD_SRCS += ntservice.c
 | 
			
		||||
	MULTI_SRCS += ntservice.c
 | 
			
		||||
	MULTI_OBJS += ntservice.o
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CRYPTO), openssl_with_aes)
 | 
			
		||||
	BASECFLAGS += -D_CRYPTO_OPENSSL -D_USE_AES_FROM_OPENSSL
 | 
			
		||||
	BASELDFLAGS += -lcrypto
 | 
			
		||||
	SRCS += crypto_openssl.c
 | 
			
		||||
else ifeq ($(CRYPTO), openssl_with_aes_soft)
 | 
			
		||||
	BASECFLAGS += -D_CRYPTO_OPENSSL -D_USE_AES_FROM_OPENSSL -D_OPENSSL_SOFTWARE
 | 
			
		||||
	BASELDFLAGS += -lcrypto
 | 
			
		||||
	SRCS += crypto_openssl.c
 | 
			
		||||
else ifeq ($(CRYPTO), openssl)
 | 
			
		||||
	BASECFLAGS += -D_CRYPTO_OPENSSL
 | 
			
		||||
	BASELDFLAGS += -lcrypto
 | 
			
		||||
	SRCS += crypto_openssl.c
 | 
			
		||||
else ifeq ($(CRYPTO), polarssl)
 | 
			
		||||
	BASECFLAGS += -D_CRYPTO_POLARSSL
 | 
			
		||||
	BASELDFLAGS += -lpolarssl
 | 
			
		||||
else ifeq ($(CRYPTO), windows)
 | 
			
		||||
	BASECFLAGS += -D_CRYPTO_WINDOWS
 | 
			
		||||
	SRCS += crypto_windows.c
 | 
			
		||||
else
 | 
			
		||||
	BASECFLAGS += -D_CRYPTO_INTERNAL
 | 
			
		||||
	SRCS += crypto_internal.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(STRIP),0)
 | 
			
		||||
	BASELDFLAGS += $(STRIPFLAGS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(OPENSSL_HMAC),0)
 | 
			
		||||
	BASECFLAGS += -D_OPENSSL_NO_HMAC
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(DEPENDENCIES),2)
 | 
			
		||||
    BASECFLAGS += -MMD
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(VERBOSE),3)
 | 
			
		||||
    COMPILER := $(shell printf "%-40s" $(notdir $(CC)))
 | 
			
		||||
    ARCHIVER := $(shell printf "%-40s" $(notdir $(AR)))
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ARCMD := AR
 | 
			
		||||
 | 
			
		||||
ifdef CAT
 | 
			
		||||
    LDCMD := CC/LD
 | 
			
		||||
else
 | 
			
		||||
    LDCMD := LD    
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
-include $(MULTI_SRCS:.c=.d)
 | 
			
		||||
 | 
			
		||||
%.o: %.c 
 | 
			
		||||
  ifeq ($(VERBOSE),1)
 | 
			
		||||
	$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -c $<
 | 
			
		||||
  ifeq ($(DEPENDENCIES),1)
 | 
			
		||||
	$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $<
 | 
			
		||||
  endif
 | 
			
		||||
  else
 | 
			
		||||
	@echo "$(COMPILER)	CC	$@ <- $<"
 | 
			
		||||
	@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -c $<
 | 
			
		||||
  ifeq ($(DEPENDENCIES),1)
 | 
			
		||||
	@echo "$(COMPILER)	DEP	$*.d <- $<"
 | 
			
		||||
	@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $<
 | 
			
		||||
  endif
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
%-m.o: %.c
 | 
			
		||||
  ifeq ($(VERBOSE),1)
 | 
			
		||||
	$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -o $@ -c $<
 | 
			
		||||
  ifeq ($(DEPENDENCIES),1)
 | 
			
		||||
	$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $<
 | 
			
		||||
  endif
 | 
			
		||||
  else
 | 
			
		||||
	@echo "$(COMPILER)	CC	$@ <- $<"
 | 
			
		||||
	@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -o $@ -c $<
 | 
			
		||||
  ifeq ($(DEPENDENCIES),1)
 | 
			
		||||
	@echo "$(COMPILER)	DEP	$*.d <- $<"
 | 
			
		||||
	@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $<
 | 
			
		||||
  endif
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
%-l.o: %.c
 | 
			
		||||
  ifeq ($(VERBOSE),1)
 | 
			
		||||
	$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -o $@ -c $<
 | 
			
		||||
  ifeq ($(DEPENDENCIES),1)
 | 
			
		||||
	$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -MM -MF $*.d $<
 | 
			
		||||
  endif
 | 
			
		||||
  else
 | 
			
		||||
	@echo "$(COMPILER)	CC	$@ <- $<"
 | 
			
		||||
	@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -o $@ -c $<
 | 
			
		||||
  ifeq ($(DEPENDENCIES),1)
 | 
			
		||||
	@echo "$(COMPILER)	DEP	$*.d <- $<"
 | 
			
		||||
	@$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -MM -MF $*.d $<
 | 
			
		||||
  endif
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ifdef CAT
 | 
			
		||||
  BUILDCOMMAND = cat $^ | $(CC) -x$(COMPILER_LANGUAGE) -o $@ -
 | 
			
		||||
  VLMCSD_PREREQUISITES = $(VLMCSD_SRCS)
 | 
			
		||||
  VLMCS_PREREQUISITES = $(VLMCS_SRCS)
 | 
			
		||||
  MULTI_PREREQUISITES = $(MULTI_SRCS)
 | 
			
		||||
  DLL_PREREQUISITES = $(DLL_SRCS)
 | 
			
		||||
  OBJ_PREREQUISITES = $(DLL_SRCS)
 | 
			
		||||
else
 | 
			
		||||
  BUILDCOMMAND = $(CC) -o $@ $^
 | 
			
		||||
  VLMCSD_PREREQUISITES = $(VLMCSD_OBJS)
 | 
			
		||||
  VLMCS_PREREQUISITES = $(VLMCS_OBJS)
 | 
			
		||||
  MULTI_PREREQUISITES = $(MULTI_OBJS)
 | 
			
		||||
  DLL_PREREQUISITES = $(DLL_OBJS)
 | 
			
		||||
  OBJ_PREREQUISITES = $(DLL_OBJS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(VERBOSE),1)
 | 
			
		||||
  BUILDCOMMANDPREFIX = +
 | 
			
		||||
else
 | 
			
		||||
  BUILDCOMMANDPREFIX = +@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
INFOCOMMAND = +@echo "$(COMPILER)	$(LDCMD)	$@ <- $^"
 | 
			
		||||
ARINFOCOMMAND = +@echo "$(ARCHIVER)	$(ARCMD)	$@ <. $^"
 | 
			
		||||
 | 
			
		||||
VLMCSD_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(SERVERLDFLAGS)
 | 
			
		||||
VLMCS_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(CLIENTLDFLAGS)
 | 
			
		||||
MULTI_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(CLIENTLDFLAGS) $(SERVERLDFLAGS)
 | 
			
		||||
DLL_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -shared -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC
 | 
			
		||||
OBJ_COMMAND = $(BUILDCOMMANDPREFIX)$(BUILDCOMMAND) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC
 | 
			
		||||
  
 | 
			
		||||
$(PROGRAM_NAME): $(VLMCSD_PREREQUISITES)
 | 
			
		||||
  ifneq ($(VERBOSE),1)
 | 
			
		||||
	$(INFOCOMMAND)
 | 
			
		||||
  endif
 | 
			
		||||
	$(VLMCSD_COMMAND)
 | 
			
		||||
 | 
			
		||||
$(CLIENT_NAME): $(VLMCS_PREREQUISITES)
 | 
			
		||||
  ifneq ($(VERBOSE),1)
 | 
			
		||||
	$(INFOCOMMAND)
 | 
			
		||||
  endif
 | 
			
		||||
	$(VLMCS_COMMAND)
 | 
			
		||||
 | 
			
		||||
$(MULTI_NAME): $(MULTI_PREREQUISITES)
 | 
			
		||||
  ifneq ($(VERBOSE),1)
 | 
			
		||||
	$(INFOCOMMAND)
 | 
			
		||||
  endif
 | 
			
		||||
	$(MULTI_COMMAND)
 | 
			
		||||
 | 
			
		||||
$(DLL_NAME): $(DLL_PREREQUISITES)
 | 
			
		||||
  ifneq ($(VERBOSE),1)
 | 
			
		||||
	$(INFOCOMMAND)
 | 
			
		||||
  endif
 | 
			
		||||
	$(DLL_COMMAND)
 | 
			
		||||
 | 
			
		||||
ifndef CAT
 | 
			
		||||
$(OBJ_NAME):
 | 
			
		||||
	+@echo Cannot make $@ without CAT defined. Please create $(A_NAME)
 | 
			
		||||
else
 | 
			
		||||
$(OBJ_NAME): $(OBJ_PREREQUISITES)
 | 
			
		||||
  ifneq ($(VERBOSE),1)
 | 
			
		||||
	$(INFOCOMMAND)
 | 
			
		||||
  endif
 | 
			
		||||
	$(OBJ_COMMAND)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef CAT
 | 
			
		||||
$(A_NAME): $(OBJ_NAME)
 | 
			
		||||
else
 | 
			
		||||
$(A_NAME): BASECFLAGS += -fvisibility=hidden -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC
 | 
			
		||||
$(A_NAME): $(DLL_OBJS)
 | 
			
		||||
endif
 | 
			
		||||
  ifneq ($(VERBOSE),1)
 | 
			
		||||
	$(ARINFOCOMMAND)
 | 
			
		||||
  endif
 | 
			
		||||
	+@rm -f $@
 | 
			
		||||
	$(BUILDCOMMANDPREFIX)$(AR) rcs $@ $^
 | 
			
		||||
 | 
			
		||||
%.pdf : %
 | 
			
		||||
  ifeq ($(shell uname), Darwin)
 | 
			
		||||
	groff -Tps -mandoc -c $< | pstopdf -i -o $@
 | 
			
		||||
  else
 | 
			
		||||
	groff -Tpdf -mandoc -c $< > $@
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
%.html : %
 | 
			
		||||
	groff -Thtml -mandoc -c $< > $@ 
 | 
			
		||||
 | 
			
		||||
%.unix.txt : %
 | 
			
		||||
	groff -P -c -Tutf8 -mandoc -c $< | col -bx > $@
 | 
			
		||||
 | 
			
		||||
%.dos.txt : %.unix.txt
 | 
			
		||||
#	unix2dos -n $< $@
 | 
			
		||||
#	sed -e 's/$$/\r/' $< > $@
 | 
			
		||||
	awk 'sub("$$", "\r")' $< > $@
 | 
			
		||||
 | 
			
		||||
pdfdocs : $(PDFDOCS)
 | 
			
		||||
 | 
			
		||||
dosdocs : $(DOSDOCS)
 | 
			
		||||
 | 
			
		||||
unixdocs : $(UNIXDOCS)
 | 
			
		||||
 | 
			
		||||
htmldocs : $(HTMLDOCS)
 | 
			
		||||
 | 
			
		||||
alldocs : $(UNIXDOCS) $(HTMLDOCS) $(PDFDOCS) $(DOSDOCS)
 | 
			
		||||
all:
 | 
			
		||||
	+@(test -d bin || mkdir bin) & (test -d lib || mkdir lib) & (test -d build || mkdir build)
 | 
			
		||||
	+@$(MAKE) -j$(MAX_THREADS) -C src $@ FROM_PARENT=1 PROGRAM_NAME=$(PROGRAM_NAME) CLIENT_NAME=$(CLIENT_NAME) MULTI_NAME=$(MULTI_NAME) DLL_NAME=$(DLL_NAME) A_NAME=$(A_NAME)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f *.o *.d *_all.c libkms_all_*.c $(PROGRAM_NAME) $(MULTI_NAME) $(DLL_NAME) $(CLIENT_NAME) $(PDFDOCS) $(DOSDOCS) $(UNIXDOCS) $(HTMLDOCS) $(OBJ_NAME) $(A_NAME) *.a
 | 
			
		||||
	+@$(MAKE) -j$(MAX_THREADS) -C src $@ FROM_PARENT=1 PROGRAM_NAME=$(PROGRAM_NAME) CLIENT_NAME=$(CLIENT_NAME) MULTI_NAME=$(MULTI_NAME) DLL_NAME=$(DLL_NAME) A_NAME=$(A_NAME)
 | 
			
		||||
	+@$(MAKE) -j$(MAX_THREADS) -C man $@
 | 
			
		||||
 | 
			
		||||
dnsclean:
 | 
			
		||||
	rm -f dns_srv.o
 | 
			
		||||
alldocs:
 | 
			
		||||
	+@$(MAKE) -j$(MAX_THREADS) -C man $@
 | 
			
		||||
 | 
			
		||||
dosdocs:
 | 
			
		||||
	+@$(MAKE) -j$(MAX_THREADS) -C man $@
 | 
			
		||||
 | 
			
		||||
unixdocs:
 | 
			
		||||
	+@$(MAKE) -j$(MAX_THREADS) -C man $@
 | 
			
		||||
 | 
			
		||||
htmldocs:
 | 
			
		||||
	+@$(MAKE) -j$(MAX_THREADS) -C man $@
 | 
			
		||||
 | 
			
		||||
pdfdocs:
 | 
			
		||||
	+@$(MAKE) -j$(MAX_THREADS) -C man $@
 | 
			
		||||
 | 
			
		||||
GNUmakefile:
 | 
			
		||||
 | 
			
		||||
help:
 | 
			
		||||
	@echo "Type"
 | 
			
		||||
	@echo "    ${MAKE}          - to build $(PROGRAM_NAME) and $(CLIENT_NAME)"
 | 
			
		||||
	@echo "    ${MAKE} clean    - to remove $(PROGRAM_NAME) and $(CLIENT_NAME)"
 | 
			
		||||
	@echo "    ${MAKE} help     - to see this help"
 | 
			
		||||
	@echo "    ${MAKE} pdfdocs  - Create PDF versions of the documentation (Requires groff with PDF support)."
 | 
			
		||||
	@echo "    ${MAKE} htmldocs - Create HTML versions of the documentation."
 | 
			
		||||
	@echo "    ${MAKE} unixdocs - Create Unix TXT versions of the documentation."
 | 
			
		||||
	@echo "    ${MAKE} dosdocs  - Create DOS/Windows TXT versions of the documentation."
 | 
			
		||||
	@echo "    ${MAKE} alldocs  - Create all versions of the documentation."
 | 
			
		||||
	@echo "    ${MAKE} -j <x>   - Use <x> parallel tasks (SMP support) when compiling $(PROGRAM_NAME) and $(CLIENT_NAME)"
 | 
			
		||||
	@echo ""
 | 
			
		||||
	@echo "    ${MAKE} $(PROGRAM_NAME) - to build the server only."
 | 
			
		||||
	@echo "    ${MAKE} $(CLIENT_NAME) - to build the client only."
 | 
			
		||||
	@echo "    ${MAKE} $(MULTI_NAME) - to build $(PROGRAM_NAME) and $(CLIENT_NAME) in a single multi-call binary"
 | 
			
		||||
	@echo "    ${MAKE} $(DLL_NAME) - to build the shared library $(DLL_NAME)"
 | 
			
		||||
	@echo "    ${MAKE} $(A_NAME) - to build the static library $(A_NAME)"
 | 
			
		||||
	@echo "    ${MAKE}               - to build $(BASE_PROGRAM_NAME) and $(BASE_CLIENT_NAME)"
 | 
			
		||||
	@echo "    ${MAKE} clean         - to remove all targets and temporary files"
 | 
			
		||||
	@echo "    ${MAKE} pdfdocs       - Create PDF versions of the documentation (Requires groff with PDF support)."
 | 
			
		||||
	@echo "    ${MAKE} htmldocs      - Create HTML versions of the documentation."
 | 
			
		||||
	@echo "    ${MAKE} unixdocs      - Create Unix TXT versions of the documentation."
 | 
			
		||||
	@echo "    ${MAKE} dosdocs       - Create DOS/Windows TXT versions of the documentation."
 | 
			
		||||
	@echo "    ${MAKE} alldocs       - Create all versions of the documentation."
 | 
			
		||||
	@echo "    ${MAKE} vlmcsd        - to build KMS server $(PROGRAM_NAME)"
 | 
			
		||||
	@echo "    ${MAKE} vlmcs         - to build KMS client $(CLIENT_NAME)"
 | 
			
		||||
	@echo "    ${MAKE} vlmcsdmulti   - to build $(BASE_PROGRAM_NAME) and $(BASE_CLIENT_NAME) in a single multi-call binary $(MULTI_NAME)"
 | 
			
		||||
	@echo "    ${MAKE} libkms        - to build the shared library $(DLL_NAME)"
 | 
			
		||||
	@echo "    ${MAKE} libkms-static - to build the static library $(A_NAME)"
 | 
			
		||||
	@echo ""
 | 
			
		||||
	@echo "Options"
 | 
			
		||||
	@echo "    CONFIG=<x>                   Compile <x> as instead of config.h."
 | 
			
		||||
	@echo "    INI=<x>                      Compile $(PROGRAM_NAME) with default ini file <x>"
 | 
			
		||||
	@echo "    INI=<x>                      Compile $(BASE_PROGRAM_NAME) with default ini file <x>"
 | 
			
		||||
	@echo "    PROGRAM_NAME=<x>             Use <x> as output file name for the KMS server. Defaults to vlmcsd."
 | 
			
		||||
	@echo "    CLIENT_NAME=<x>              Use <x> as output file name for the KMS client. Defaults to vlmcs."
 | 
			
		||||
	@echo "    MULTI_NAME=<x>               Use <x> as output file name for the multi-call binary. Defaults to vlmcsdmulti."
 | 
			
		||||
@@ -620,7 +160,7 @@ help:
 | 
			
		||||
	@echo "    CRYPTO=windows               Use Windows CryptoAPI instead of internal crypto code for SHA256/HMAC calculations."
 | 
			
		||||
	@echo "    MSRPC=1                      Use Microsoft RPC instead of vlmcsd's internal RPC. Only works with Windows and Cygwin targets."
 | 
			
		||||
	@echo "    CC=<x>                       Use compiler <x>. Supported compilers are gcc, icc, tcc and clang. Others may or may not work."
 | 
			
		||||
	@echo "    AR=<x>                       Use <x> instead of ar to build $(A_NAME). Set to gcc-ar if you want to use gcc's LTO feature."
 | 
			
		||||
	@echo "    AR=<x>                       Use <x> instead of ar to build $(BASE_A_NAME). Set to gcc-ar if you want to use gcc's LTO feature."
 | 
			
		||||
	@echo "    COMPILER_LANGUAGE=<x>        May be c or c++."
 | 
			
		||||
	@echo "    TERMINAL_WIDTH=<x>           Assume a fixed terminal width of <x> columns. Use in case of problems only."  
 | 
			
		||||
	@echo "    VLMCSD_VERSION=<x>           Sets <x> as your version identifier. Defaults to \"private build\"."
 | 
			
		||||
@@ -629,24 +169,24 @@ help:
 | 
			
		||||
	@echo "    PLATFORMFLAGS=<x>            Pass <x> as additional arguments to the compiler and the linker."
 | 
			
		||||
	@echo "    BASECFLAGS=<x>               Pass only <x> as arguments to the compiler (advanced users only)."
 | 
			
		||||
	@echo "    BASELDFLAGS=<x>              Pass only <x> as arguments to the linker (advanced users only)."
 | 
			
		||||
	@echo "    STRIP=0                      Don't strip debug information from $(PROGRAM_NAME) and $(CLIENT_NAME) (for developers)."
 | 
			
		||||
	@echo "    STRIP=0                      Don't strip debug information from $(BASE_PROGRAM_NAME) and $(BASE_CLIENT_NAME) (for developers)."
 | 
			
		||||
	@echo "    VERBOSE=1                    Be verbose when making targets."
 | 
			
		||||
	@echo "    VERBOSE=3                    Show name of compiler."
 | 
			
		||||
	@echo "    THREADS=1                    Use threads instead of fork(). Automatically set for native Windows. Recommended for Cygwin."
 | 
			
		||||
	@echo "    WINDOWS=<x>                  Use <x> as the default ePID for Windows (when using $(PROGRAM_NAME) with -r 0)."
 | 
			
		||||
	@echo "    OFFICE2010=<x>               Use <x> as the default ePID for Office2010 (when using $(PROGRAM_NAME) with -r 0)."
 | 
			
		||||
	@echo "    OFFICE2013=<x>               Use <x> as the default ePID for Office2013 (when using $(PROGRAM_NAME) with -r 0)."
 | 
			
		||||
	@echo "    OFFICE2016=<x>               Use <x> as the default ePID for Office2016 (when using $(PROGRAM_NAME) with -r 0)."
 | 
			
		||||
	@echo "    WINDOWS=<x>                  Use <x> as the default ePID for Windows (when using $(BASE_PROGRAM_NAME) with -r 0)."
 | 
			
		||||
	@echo "    OFFICE2010=<x>               Use <x> as the default ePID for Office2010 (when using $(BASE_PROGRAM_NAME) with -r 0)."
 | 
			
		||||
	@echo "    OFFICE2013=<x>               Use <x> as the default ePID for Office2013 (when using $(BASE_PROGRAM_NAME) with -r 0)."
 | 
			
		||||
	@echo "    OFFICE2016=<x>               Use <x> as the default ePID for Office2016 (when using $(BASE_PROGRAM_NAME) with -r 0)."
 | 
			
		||||
	@echo "    HWID=<x>                     Use <x> as the default HWID (when it can't be found in an ini file)."
 | 
			
		||||
	@echo "    FEATURES=full                Compile $(PROGRAM_NAME) with all features (default)."
 | 
			
		||||
	@echo "    FEATURES=most                Compile $(PROGRAM_NAME) without rarely used features."
 | 
			
		||||
	@echo "    FEATURES=embedded            Compile $(PROGRAM_NAME) with typical features for embedded systems."
 | 
			
		||||
	@echo "    FEATURES=autostart           Removes features typically not needed if you place $(PROGRAM_NAME) in an autostart script."
 | 
			
		||||
	@echo "    FEATURES=inetd               Compile $(PROGRAM_NAME) for running through an internet superserver only."
 | 
			
		||||
	@echo "    FEATURES=minimum             Compiles only basic features of $(PROGRAM_NAME)."
 | 
			
		||||
	@echo "    FEATURES=fixedepids          $(PROGRAM_NAME) only uses bultin internal ePIDs."
 | 
			
		||||
	@echo "    FEATURES=full                Compile $(BASE_PROGRAM_NAME) with all features (default)."
 | 
			
		||||
	@echo "    FEATURES=most                Compile $(BASE_PROGRAM_NAME) without rarely used features."
 | 
			
		||||
	@echo "    FEATURES=embedded            Compile $(BASE_PROGRAM_NAME) with typical features for embedded systems."
 | 
			
		||||
	@echo "    FEATURES=autostart           Removes features typically not needed if you place $(BASE_PROGRAM_NAME) in an autostart script."
 | 
			
		||||
	@echo "    FEATURES=inetd               Compile $(BASE_PROGRAM_NAME) for running through an internet superserver only."
 | 
			
		||||
	@echo "    FEATURES=minimum             Compiles only basic features of $(BASE_PROGRAM_NAME)."
 | 
			
		||||
	@echo "    FEATURES=fixedepids          $(BASE_PROGRAM_NAME) only uses bultin internal ePIDs."
 | 
			
		||||
	@echo ""
 | 
			
		||||
	@echo "Useful CFLAGS to save memory when running $(PROGRAM_NAME) on very small embedded devices (finer control than FEATURES=)"
 | 
			
		||||
	@echo "Useful CFLAGS to save memory when running $(BASE_PROGRAM_NAME) on very small embedded devices (finer control than FEATURES=)"
 | 
			
		||||
	@echo "    -DNO_EXTENDED_PRODUCT_LIST   Don't compile the detailed product list."
 | 
			
		||||
	@echo "    -DNO_BASIC_PRODUCT_LIST      Don't compile the basic product list."
 | 
			
		||||
	@echo "    -DNO_VERBOSE_LOG             Don't support verbose logging. Removes -v option."
 | 
			
		||||
@@ -658,13 +198,13 @@ help:
 | 
			
		||||
	@echo "    -DNO_HELP                    Don't support command line help."
 | 
			
		||||
	@echo "    -DNO_CUSTOM_INTERVALS        Don't support custom intervals for retry and refresh activation. Removes -A and -R options."
 | 
			
		||||
	@echo "    -DNO_FREEBIND                Don't support binding to foreign IP addresses. Removes -F0 and -F1 options. Only affects FreeBSD and Linux."
 | 
			
		||||
	@echo "    -DNO_SOCKETS                 Don't support standalone operation. Requires an internet superserver to start $(PROGRAM_NAME)."
 | 
			
		||||
	@echo "    -DNO_CL_PIDS                 Don't support specifying ePIDs and HwId from the command line in $(PROGRAM_NAME)."
 | 
			
		||||
	@echo "    -DNO_LIMIT                   Don't support limiting concurrent clients in $(PROGRAM_NAME)."
 | 
			
		||||
	@echo "    -DNO_SIGHUP                  Don't support SIGHUP handling in $(PROGRAM_NAME)."
 | 
			
		||||
	@echo "    -DNO_VERSION_INFORMATION     Don't support displaying version information in $(PROGRAM_NAME) and $(CLIENT_NAME). Removes -V option."
 | 
			
		||||
	@echo "    -DNO_PRIVATE_IP_DETECT       Don't support protection against clients with public IP addresses in $(PROGRAM_NAME)"	
 | 
			
		||||
	@echo "    -DSIMPLE_SOCKETS             Compile $(PROGRAM_NAME) with basic socket support only. Removes -L option."
 | 
			
		||||
	@echo "    -DNO_SOCKETS                 Don't support standalone operation. Requires an internet superserver to start $(BASE_PROGRAM_NAME)."
 | 
			
		||||
	@echo "    -DNO_CL_PIDS                 Don't support specifying ePIDs and HwId from the command line in $(BASE_PROGRAM_NAME)."
 | 
			
		||||
	@echo "    -DNO_LIMIT                   Don't support limiting concurrent clients in $(BASE_PROGRAM_NAME)."
 | 
			
		||||
	@echo "    -DNO_SIGHUP                  Don't support SIGHUP handling in $(BASE_PROGRAM_NAME)."
 | 
			
		||||
	@echo "    -DNO_VERSION_INFORMATION     Don't support displaying version information in $(BASE_PROGRAM_NAME) and $(BASE_CLIENT_NAME). Removes -V option."
 | 
			
		||||
	@echo "    -DNO_PRIVATE_IP_DETECT       Don't support protection against clients with public IP addresses in $(BASE_PROGRAM_NAME)"	
 | 
			
		||||
	@echo "    -DSIMPLE_SOCKETS             Compile $(BASE_PROGRAM_NAME) with basic socket support only. Removes -L option."
 | 
			
		||||
	@echo "    -DSMALL_AES                  Use a smaller (saves about 200 bytes) but slower implementation of AES."
 | 
			
		||||
	@echo ""
 | 
			
		||||
	@echo "Troubleshooting options"
 | 
			
		||||
@@ -677,17 +217,14 @@ help:
 | 
			
		||||
	@echo "    OPENSSL_HMAC=0               Compile for openssl versions that don't have HMAC support (required on some embedded devices)."
 | 
			
		||||
	@echo "    NO_TIMEOUT=1                 Do not set timeouts for sockets (for systems that don't support it)."
 | 
			
		||||
	@echo "    CHILD_HANDLER=1              Install a handler for SIGCHLD (for systems that don't support SA_NOCLDWAIT)."
 | 
			
		||||
	@echo "    NO_DNS=1                     Compile $(CLIENT_NAME) without support for detecting KMS servers via DNS."
 | 
			
		||||
	@echo "    NO_GETIFADDRS=1              Compile $(PROGRAM_NAME) without using getifaddrs()."
 | 
			
		||||
	@echo "    GETIFADDRS=musl              Compile $(PROGRAM_NAME) with its own implementation of getifaddrs() based on musl."
 | 
			
		||||
	@echo "    DNS_PARSER=internal          Use $(CLIENT_NAME) internal DNS parsing routines. No effect on MingW (native Windows)."
 | 
			
		||||
	@echo "    NO_DNS=1                     Compile $(BASE_CLIENT_NAME) without support for detecting KMS servers via DNS."
 | 
			
		||||
	@echo "    NO_GETIFADDRS=1              Compile $(BASE_PROGRAM_NAME) without using getifaddrs()."
 | 
			
		||||
	@echo "    GETIFADDRS=musl              Compile $(BASE_PROGRAM_NAME) with its own implementation of getifaddrs() based on musl."
 | 
			
		||||
	@echo "    DNS_PARSER=internal          Use $(BASE_CLIENT_NAME) internal DNS parsing routines. No effect on MingW (native Windows)."
 | 
			
		||||
	@echo ""
 | 
			
		||||
	@echo "Other useful CFLAGS"
 | 
			
		||||
	@echo "    -DSUPPORT_WINE               Add code that the Windows version of $(PROGRAM_NAME) runs on Wine if MSRPC=1"
 | 
			
		||||
	@echo "    -DSUPPORT_WINE               Add code that the Windows version of $(BASE_PROGRAM_NAME) runs on Wine if MSRPC=1"
 | 
			
		||||
	@echo "    -D_PEDANTIC                  Report rare error/warning conditions instead of silently ignoring them."
 | 
			
		||||
	@echo "    -DINCLUDE_BETAS              Include SKU / activation IDs for obsolete beta/preview products."
 | 
			
		||||
	@echo "    -DFD_SETSIZE=<x>             Allow <x> -L statements in $(PROGRAM_NAME) (default: 64 on Windows, 1024 on most Unixes)."
 | 
			
		||||
	@echo "    -flto                        Use link time optimization. Not supported by old compilers (gcc < 4.7). Use whenever supported."
 | 
			
		||||
	@echo "    -flto=jobserver              Utilize all CPUs during link time optimization. Requires ${MAKE} -j <cpus>"
 | 
			
		||||
	@echo "    -fno-stack-protector         No stack checking. Smaller binaries."
 | 
			
		||||
	@echo "    -pipe                        Use pipes instead of temporary files (faster compilation, extends the life of your SSD)." 
 | 
			
		||||
	@echo "    -DFD_SETSIZE=<x>             Allow <x> -L statements in $(BASE_PROGRAM_NAME) (default: 64 on Windows, 1024 on most Unixes)."
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								README
									
									
									
									
									
								
							@@ -1,13 +1,14 @@
 | 
			
		||||
To view the documentation cd to the directory containing the distribution
 | 
			
		||||
files and type
 | 
			
		||||
 | 
			
		||||
man ./vlmcsd.8
 | 
			
		||||
man man/vlmcsd.8
 | 
			
		||||
	to see documentation for vlmcsd
 | 
			
		||||
 | 
			
		||||
man ./vlmcs.1
 | 
			
		||||
man man/vlmcs.1
 | 
			
		||||
	to see documentation for vlmcs
 | 
			
		||||
 | 
			
		||||
man ./vlmcsd.7
 | 
			
		||||
man man/vlmcsd.7
 | 
			
		||||
	to see general documentation for kms
 | 
			
		||||
 | 
			
		||||
If you don't have man, you may also use the .txt, .html and .pdf files
 | 
			
		||||
in the man directory
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,58 @@
 | 
			
		||||
/* This file is needed by libio to define various configuration parameters.
 | 
			
		||||
   These are always the same in the GNU C library.  */
 | 
			
		||||
 | 
			
		||||
#ifndef _G_config_h
 | 
			
		||||
#define _G_config_h 1
 | 
			
		||||
 | 
			
		||||
/* Define types for libio in terms of the standard internal type names.  */
 | 
			
		||||
 | 
			
		||||
#include <bits/types.h>
 | 
			
		||||
#define __need_size_t
 | 
			
		||||
#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 | 
			
		||||
# define __need_wchar_t
 | 
			
		||||
#endif
 | 
			
		||||
#define __need_NULL
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
#define __need_mbstate_t
 | 
			
		||||
#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 | 
			
		||||
# define __need_wint_t
 | 
			
		||||
#endif
 | 
			
		||||
#include <wchar.h>
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __off_t __pos;
 | 
			
		||||
  __mbstate_t __state;
 | 
			
		||||
} _G_fpos_t;
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __off64_t __pos;
 | 
			
		||||
  __mbstate_t __state;
 | 
			
		||||
} _G_fpos64_t;
 | 
			
		||||
#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 | 
			
		||||
# include <gconv.h>
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct __gconv_info __cd;
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    struct __gconv_info __cd;
 | 
			
		||||
    struct __gconv_step_data __data;
 | 
			
		||||
  } __combined;
 | 
			
		||||
} _G_iconv_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* These library features are always available in the GNU C library.  */
 | 
			
		||||
#define _G_va_list __gnuc_va_list
 | 
			
		||||
 | 
			
		||||
#define _G_HAVE_MMAP 1
 | 
			
		||||
#define _G_HAVE_MREMAP 1
 | 
			
		||||
 | 
			
		||||
#define _G_IO_IO_FILE_VERSION 0x20001
 | 
			
		||||
 | 
			
		||||
/* This is defined by <bits/stat.h> if `st_blksize' exists.  */
 | 
			
		||||
#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
 | 
			
		||||
 | 
			
		||||
#define _G_BUFSIZ 8192
 | 
			
		||||
 | 
			
		||||
#endif	/* _G_config.h */
 | 
			
		||||
@@ -0,0 +1,246 @@
 | 
			
		||||
/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
 | 
			
		||||
   This file is part of the GNU C Library.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is free software; you can redistribute it and/or
 | 
			
		||||
   modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
   License as published by the Free Software Foundation; either
 | 
			
		||||
   version 2.1 of the License, or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is distributed in the hope that it will be useful,
 | 
			
		||||
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
   Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
   You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
   License along with the GNU C Library; if not, see
 | 
			
		||||
   <http://www.gnu.org/licenses/>.  */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ISO/IEC 9945-1:1996 6.7: Asynchronous Input and Output
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _AIO_H
 | 
			
		||||
#define _AIO_H	1
 | 
			
		||||
 | 
			
		||||
#include <features.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#define __need_sigevent_t
 | 
			
		||||
#include <bits/siginfo.h>
 | 
			
		||||
#define __need_timespec
 | 
			
		||||
#include <time.h>
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
/* Asynchronous I/O control block.  */
 | 
			
		||||
struct aiocb
 | 
			
		||||
{
 | 
			
		||||
  int aio_fildes;		/* File desriptor.  */
 | 
			
		||||
  int aio_lio_opcode;		/* Operation to be performed.  */
 | 
			
		||||
  int aio_reqprio;		/* Request priority offset.  */
 | 
			
		||||
  volatile void *aio_buf;	/* Location of buffer.  */
 | 
			
		||||
  size_t aio_nbytes;		/* Length of transfer.  */
 | 
			
		||||
  struct sigevent aio_sigevent;	/* Signal number and value.  */
 | 
			
		||||
 | 
			
		||||
  /* Internal members.  */
 | 
			
		||||
  struct aiocb *__next_prio;
 | 
			
		||||
  int __abs_prio;
 | 
			
		||||
  int __policy;
 | 
			
		||||
  int __error_code;
 | 
			
		||||
  __ssize_t __return_value;
 | 
			
		||||
 | 
			
		||||
#ifndef __USE_FILE_OFFSET64
 | 
			
		||||
  __off_t aio_offset;		/* File offset.  */
 | 
			
		||||
  char __pad[sizeof (__off64_t) - sizeof (__off_t)];
 | 
			
		||||
#else
 | 
			
		||||
  __off64_t aio_offset;		/* File offset.  */
 | 
			
		||||
#endif
 | 
			
		||||
  char __glibc_reserved[32];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* The same for the 64bit offsets.  Please note that the members aio_fildes
 | 
			
		||||
   to __return_value have to be the same in aiocb and aiocb64.  */
 | 
			
		||||
#ifdef __USE_LARGEFILE64
 | 
			
		||||
struct aiocb64
 | 
			
		||||
{
 | 
			
		||||
  int aio_fildes;		/* File desriptor.  */
 | 
			
		||||
  int aio_lio_opcode;		/* Operation to be performed.  */
 | 
			
		||||
  int aio_reqprio;		/* Request priority offset.  */
 | 
			
		||||
  volatile void *aio_buf;	/* Location of buffer.  */
 | 
			
		||||
  size_t aio_nbytes;		/* Length of transfer.  */
 | 
			
		||||
  struct sigevent aio_sigevent;	/* Signal number and value.  */
 | 
			
		||||
 | 
			
		||||
  /* Internal members.  */
 | 
			
		||||
  struct aiocb *__next_prio;
 | 
			
		||||
  int __abs_prio;
 | 
			
		||||
  int __policy;
 | 
			
		||||
  int __error_code;
 | 
			
		||||
  __ssize_t __return_value;
 | 
			
		||||
 | 
			
		||||
  __off64_t aio_offset;		/* File offset.  */
 | 
			
		||||
  char __glibc_reserved[32];
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __USE_GNU
 | 
			
		||||
/* To customize the implementation one can use the following struct.
 | 
			
		||||
   This implementation follows the one in Irix.  */
 | 
			
		||||
struct aioinit
 | 
			
		||||
  {
 | 
			
		||||
    int aio_threads;		/* Maximal number of threads.  */
 | 
			
		||||
    int aio_num;		/* Number of expected simultanious requests. */
 | 
			
		||||
    int aio_locks;		/* Not used.  */
 | 
			
		||||
    int aio_usedba;		/* Not used.  */
 | 
			
		||||
    int aio_debug;		/* Not used.  */
 | 
			
		||||
    int aio_numusers;		/* Not used.  */
 | 
			
		||||
    int aio_idle_time;		/* Number of seconds before idle thread
 | 
			
		||||
				   terminates.  */
 | 
			
		||||
    int aio_reserved;
 | 
			
		||||
  };
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Return values of cancelation function.  */
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
  AIO_CANCELED,
 | 
			
		||||
#define AIO_CANCELED AIO_CANCELED
 | 
			
		||||
  AIO_NOTCANCELED,
 | 
			
		||||
#define AIO_NOTCANCELED AIO_NOTCANCELED
 | 
			
		||||
  AIO_ALLDONE
 | 
			
		||||
#define AIO_ALLDONE AIO_ALLDONE
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Operation codes for `aio_lio_opcode'.  */
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
  LIO_READ,
 | 
			
		||||
#define LIO_READ LIO_READ
 | 
			
		||||
  LIO_WRITE,
 | 
			
		||||
#define LIO_WRITE LIO_WRITE
 | 
			
		||||
  LIO_NOP
 | 
			
		||||
#define LIO_NOP LIO_NOP
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Synchronization options for `lio_listio' function.  */
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
  LIO_WAIT,
 | 
			
		||||
#define LIO_WAIT LIO_WAIT
 | 
			
		||||
  LIO_NOWAIT
 | 
			
		||||
#define LIO_NOWAIT LIO_NOWAIT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Allow user to specify optimization.  */
 | 
			
		||||
#ifdef __USE_GNU
 | 
			
		||||
extern void aio_init (const struct aioinit *__init) __THROW __nonnull ((1));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __USE_FILE_OFFSET64
 | 
			
		||||
/* Enqueue read request for given number of bytes and the given priority.  */
 | 
			
		||||
extern int aio_read (struct aiocb *__aiocbp) __THROW __nonnull ((1));
 | 
			
		||||
/* Enqueue write request for given number of bytes and the given priority.  */
 | 
			
		||||
extern int aio_write (struct aiocb *__aiocbp) __THROW __nonnull ((1));
 | 
			
		||||
 | 
			
		||||
/* Initiate list of I/O requests.  */
 | 
			
		||||
extern int lio_listio (int __mode,
 | 
			
		||||
		       struct aiocb *const __list[__restrict_arr],
 | 
			
		||||
		       int __nent, struct sigevent *__restrict __sig)
 | 
			
		||||
  __THROW __nonnull ((2));
 | 
			
		||||
 | 
			
		||||
/* Retrieve error status associated with AIOCBP.  */
 | 
			
		||||
extern int aio_error (const struct aiocb *__aiocbp) __THROW __nonnull ((1));
 | 
			
		||||
/* Return status associated with AIOCBP.  */
 | 
			
		||||
extern __ssize_t aio_return (struct aiocb *__aiocbp) __THROW __nonnull ((1));
 | 
			
		||||
 | 
			
		||||
/* Try to cancel asynchronous I/O requests outstanding against file
 | 
			
		||||
   descriptor FILDES.  */
 | 
			
		||||
extern int aio_cancel (int __fildes, struct aiocb *__aiocbp) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Suspend calling thread until at least one of the asynchronous I/O
 | 
			
		||||
   operations referenced by LIST has completed.
 | 
			
		||||
 | 
			
		||||
   This function is a cancellation point and therefore not marked with
 | 
			
		||||
   __THROW.  */
 | 
			
		||||
extern int aio_suspend (const struct aiocb *const __list[], int __nent,
 | 
			
		||||
			const struct timespec *__restrict __timeout)
 | 
			
		||||
  __nonnull ((1));
 | 
			
		||||
 | 
			
		||||
/* Force all operations associated with file desriptor described by
 | 
			
		||||
   `aio_fildes' member of AIOCBP.  */
 | 
			
		||||
extern int aio_fsync (int __operation, struct aiocb *__aiocbp)
 | 
			
		||||
  __THROW __nonnull ((2));
 | 
			
		||||
#else
 | 
			
		||||
# ifdef __REDIRECT_NTH
 | 
			
		||||
extern int __REDIRECT_NTH (aio_read, (struct aiocb *__aiocbp), aio_read64)
 | 
			
		||||
  __nonnull ((1));
 | 
			
		||||
extern int __REDIRECT_NTH (aio_write, (struct aiocb *__aiocbp), aio_write64)
 | 
			
		||||
  __nonnull ((1));
 | 
			
		||||
 | 
			
		||||
extern int __REDIRECT_NTH (lio_listio,
 | 
			
		||||
			   (int __mode,
 | 
			
		||||
			    struct aiocb *const __list[__restrict_arr],
 | 
			
		||||
			    int __nent, struct sigevent *__restrict __sig),
 | 
			
		||||
			   lio_listio64) __nonnull ((2));
 | 
			
		||||
 | 
			
		||||
extern int __REDIRECT_NTH (aio_error, (const struct aiocb *__aiocbp),
 | 
			
		||||
			   aio_error64) __nonnull ((1));
 | 
			
		||||
extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp),
 | 
			
		||||
				 aio_return64) __nonnull ((1));
 | 
			
		||||
 | 
			
		||||
extern int __REDIRECT_NTH (aio_cancel,
 | 
			
		||||
			   (int __fildes, struct aiocb *__aiocbp),
 | 
			
		||||
			   aio_cancel64);
 | 
			
		||||
 | 
			
		||||
extern int __REDIRECT_NTH (aio_suspend,
 | 
			
		||||
			   (const struct aiocb *const __list[], int __nent,
 | 
			
		||||
			    const struct timespec *__restrict __timeout),
 | 
			
		||||
			   aio_suspend64) __nonnull ((1));
 | 
			
		||||
 | 
			
		||||
extern int __REDIRECT_NTH (aio_fsync,
 | 
			
		||||
			   (int __operation, struct aiocb *__aiocbp),
 | 
			
		||||
			   aio_fsync64) __nonnull ((2));
 | 
			
		||||
 | 
			
		||||
# else
 | 
			
		||||
#  define aio_read aio_read64
 | 
			
		||||
#  define aio_write aio_write64
 | 
			
		||||
#  define lio_listio lio_listio64
 | 
			
		||||
#  define aio_error aio_error64
 | 
			
		||||
#  define aio_return aio_return64
 | 
			
		||||
#  define aio_cancel aio_cancel64
 | 
			
		||||
#  define aio_suspend aio_suspend64
 | 
			
		||||
#  define aio_fsync aio_fsync64
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __USE_LARGEFILE64
 | 
			
		||||
extern int aio_read64 (struct aiocb64 *__aiocbp) __THROW __nonnull ((1));
 | 
			
		||||
extern int aio_write64 (struct aiocb64 *__aiocbp) __THROW __nonnull ((1));
 | 
			
		||||
 | 
			
		||||
extern int lio_listio64 (int __mode,
 | 
			
		||||
			 struct aiocb64 *const __list[__restrict_arr],
 | 
			
		||||
			 int __nent, struct sigevent *__restrict __sig)
 | 
			
		||||
  __THROW __nonnull ((2));
 | 
			
		||||
 | 
			
		||||
extern int aio_error64 (const struct aiocb64 *__aiocbp)
 | 
			
		||||
  __THROW __nonnull ((1));
 | 
			
		||||
extern __ssize_t aio_return64 (struct aiocb64 *__aiocbp)
 | 
			
		||||
  __THROW __nonnull ((1));
 | 
			
		||||
 | 
			
		||||
extern int aio_cancel64 (int __fildes, struct aiocb64 *__aiocbp) __THROW;
 | 
			
		||||
 | 
			
		||||
extern int aio_suspend64 (const struct aiocb64 *const __list[], int __nent,
 | 
			
		||||
			  const struct timespec *__restrict __timeout)
 | 
			
		||||
  __THROW __nonnull ((1));
 | 
			
		||||
 | 
			
		||||
extern int aio_fsync64 (int __operation, struct aiocb64 *__aiocbp)
 | 
			
		||||
  __THROW __nonnull ((2));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* aio.h */
 | 
			
		||||
@@ -0,0 +1,63 @@
 | 
			
		||||
/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
 | 
			
		||||
   This file is part of the GNU C Library.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is free software; you can redistribute it and/or
 | 
			
		||||
   modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
   License as published by the Free Software Foundation; either
 | 
			
		||||
   version 2.1 of the License, or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is distributed in the hope that it will be useful,
 | 
			
		||||
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
   Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
   You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
   License along with the GNU C Library; if not, see
 | 
			
		||||
   <http://www.gnu.org/licenses/>.  */
 | 
			
		||||
 | 
			
		||||
#ifndef _ALIASES_H
 | 
			
		||||
#define _ALIASES_H	1
 | 
			
		||||
 | 
			
		||||
#include <features.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
/* Structure to represent one entry of the alias data base.  */
 | 
			
		||||
struct aliasent
 | 
			
		||||
  {
 | 
			
		||||
    char *alias_name;
 | 
			
		||||
    size_t alias_members_len;
 | 
			
		||||
    char **alias_members;
 | 
			
		||||
    int alias_local;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Open alias data base files.  */
 | 
			
		||||
extern void setaliasent (void) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Close alias data base files.  */
 | 
			
		||||
extern void endaliasent (void) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Get the next entry from the alias data base.  */
 | 
			
		||||
extern struct aliasent *getaliasent (void) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Get the next entry from the alias data base and put it in RESULT_BUF.  */
 | 
			
		||||
extern int getaliasent_r (struct aliasent *__restrict __result_buf,
 | 
			
		||||
			  char *__restrict __buffer, size_t __buflen,
 | 
			
		||||
			  struct aliasent **__restrict __result) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Get alias entry corresponding to NAME.  */
 | 
			
		||||
extern struct aliasent *getaliasbyname (const char *__name) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Get alias entry corresponding to NAME and put it in RESULT_BUF.  */
 | 
			
		||||
extern int getaliasbyname_r (const char *__restrict __name,
 | 
			
		||||
			     struct aliasent *__restrict __result_buf,
 | 
			
		||||
			     char *__restrict __buffer, size_t __buflen,
 | 
			
		||||
			     struct aliasent **__restrict __result) __THROW;
 | 
			
		||||
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* aliases.h */
 | 
			
		||||
@@ -0,0 +1,40 @@
 | 
			
		||||
/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
 | 
			
		||||
   This file is part of the GNU C Library.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is free software; you can redistribute it and/or
 | 
			
		||||
   modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
   License as published by the Free Software Foundation; either
 | 
			
		||||
   version 2.1 of the License, or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is distributed in the hope that it will be useful,
 | 
			
		||||
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
   Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
   You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
   License along with the GNU C Library; if not, see
 | 
			
		||||
   <http://www.gnu.org/licenses/>.  */
 | 
			
		||||
 | 
			
		||||
#ifndef	_ALLOCA_H
 | 
			
		||||
#define	_ALLOCA_H	1
 | 
			
		||||
 | 
			
		||||
#include <features.h>
 | 
			
		||||
 | 
			
		||||
#define	__need_size_t
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
/* Remove any previous definitions.  */
 | 
			
		||||
#undef	alloca
 | 
			
		||||
 | 
			
		||||
/* Allocate a block that will be freed when the calling function exits.  */
 | 
			
		||||
extern void *alloca (size_t __size) __THROW;
 | 
			
		||||
 | 
			
		||||
#ifdef	__GNUC__
 | 
			
		||||
# define alloca(size)	__builtin_alloca (size)
 | 
			
		||||
#endif /* GCC.  */
 | 
			
		||||
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* alloca.h */
 | 
			
		||||
@@ -0,0 +1,47 @@
 | 
			
		||||
/* Header describing `ar' archive file format.
 | 
			
		||||
   Copyright (C) 1996-2016 Free Software Foundation, Inc.
 | 
			
		||||
   This file is part of the GNU C Library.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is free software; you can redistribute it and/or
 | 
			
		||||
   modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
   License as published by the Free Software Foundation; either
 | 
			
		||||
   version 2.1 of the License, or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is distributed in the hope that it will be useful,
 | 
			
		||||
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
   Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
   You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
   License along with the GNU C Library; if not, see
 | 
			
		||||
   <http://www.gnu.org/licenses/>.  */
 | 
			
		||||
 | 
			
		||||
#ifndef _AR_H
 | 
			
		||||
#define _AR_H 1
 | 
			
		||||
 | 
			
		||||
#include <sys/cdefs.h>
 | 
			
		||||
 | 
			
		||||
/* Archive files start with the ARMAG identifying string.  Then follows a
 | 
			
		||||
   `struct ar_hdr', and as many bytes of member file data as its `ar_size'
 | 
			
		||||
   member indicates, for each member file.  */
 | 
			
		||||
 | 
			
		||||
#define ARMAG	"!<arch>\n"	/* String that begins an archive file.  */
 | 
			
		||||
#define SARMAG	8		/* Size of that string.  */
 | 
			
		||||
 | 
			
		||||
#define ARFMAG	"`\n"		/* String in ar_fmag at end of each header.  */
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
struct ar_hdr
 | 
			
		||||
  {
 | 
			
		||||
    char ar_name[16];		/* Member file name, sometimes / terminated. */
 | 
			
		||||
    char ar_date[12];		/* File date, decimal seconds since Epoch.  */
 | 
			
		||||
    char ar_uid[6], ar_gid[6];	/* User and group IDs, in ASCII decimal.  */
 | 
			
		||||
    char ar_mode[8];		/* File mode, in ASCII octal.  */
 | 
			
		||||
    char ar_size[10];		/* File size, in ASCII decimal.  */
 | 
			
		||||
    char ar_fmag[2];		/* Always contains ARFMAG.  */
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ar.h */
 | 
			
		||||
@@ -0,0 +1,594 @@
 | 
			
		||||
/* Hierarchial argument parsing, layered over getopt.
 | 
			
		||||
   Copyright (C) 1995-2016 Free Software Foundation, Inc.
 | 
			
		||||
   This file is part of the GNU C Library.
 | 
			
		||||
   Written by Miles Bader <miles@gnu.ai.mit.edu>.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is free software; you can redistribute it and/or
 | 
			
		||||
   modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
   License as published by the Free Software Foundation; either
 | 
			
		||||
   version 2.1 of the License, or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is distributed in the hope that it will be useful,
 | 
			
		||||
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
   Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
   You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
   License along with the GNU C Library; if not, see
 | 
			
		||||
   <http://www.gnu.org/licenses/>.  */
 | 
			
		||||
 | 
			
		||||
#ifndef _ARGP_H
 | 
			
		||||
#define _ARGP_H
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <getopt.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
 | 
			
		||||
#define __need_error_t
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#ifndef __THROW
 | 
			
		||||
# define __THROW
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef __NTH
 | 
			
		||||
# define __NTH(fct) fct __THROW
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* The __attribute__ feature is available in gcc versions 2.5 and later.
 | 
			
		||||
   The __-protected variants of the attributes 'format' and 'printf' are
 | 
			
		||||
   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
 | 
			
		||||
   We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
 | 
			
		||||
   gnulib and libintl do '#define printf __printf__' when they override
 | 
			
		||||
   the 'printf' function.  */
 | 
			
		||||
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
 | 
			
		||||
# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
 | 
			
		||||
#else
 | 
			
		||||
# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* GCC 2.95 and later have "__restrict"; C99 compilers have
 | 
			
		||||
   "restrict", and "configure" may have defined "restrict".  */
 | 
			
		||||
#ifndef __restrict
 | 
			
		||||
# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
 | 
			
		||||
#  if defined restrict || 199901L <= __STDC_VERSION__
 | 
			
		||||
#   define __restrict restrict
 | 
			
		||||
#  else
 | 
			
		||||
#   define __restrict
 | 
			
		||||
#  endif
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __error_t_defined
 | 
			
		||||
typedef int error_t;
 | 
			
		||||
# define __error_t_defined
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* A description of a particular option.  A pointer to an array of
 | 
			
		||||
   these is passed in the OPTIONS field of an argp structure.  Each option
 | 
			
		||||
   entry can correspond to one long option and/or one short option; more
 | 
			
		||||
   names for the same option can be added by following an entry in an option
 | 
			
		||||
   array with options having the OPTION_ALIAS flag set.  */
 | 
			
		||||
struct argp_option
 | 
			
		||||
{
 | 
			
		||||
  /* The long option name.  For more than one name for the same option, you
 | 
			
		||||
     can use following options with the OPTION_ALIAS flag set.  */
 | 
			
		||||
  const char *name;
 | 
			
		||||
 | 
			
		||||
  /* What key is returned for this option.  If > 0 and printable, then it's
 | 
			
		||||
     also accepted as a short option.  */
 | 
			
		||||
  int key;
 | 
			
		||||
 | 
			
		||||
  /* If non-NULL, this is the name of the argument associated with this
 | 
			
		||||
     option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */
 | 
			
		||||
  const char *arg;
 | 
			
		||||
 | 
			
		||||
  /* OPTION_ flags.  */
 | 
			
		||||
  int flags;
 | 
			
		||||
 | 
			
		||||
  /* The doc string for this option.  If both NAME and KEY are 0, This string
 | 
			
		||||
     will be printed outdented from the normal option column, making it
 | 
			
		||||
     useful as a group header (it will be the first thing printed in its
 | 
			
		||||
     group); in this usage, it's conventional to end the string with a `:'.  */
 | 
			
		||||
  const char *doc;
 | 
			
		||||
 | 
			
		||||
  /* The group this option is in.  In a long help message, options are sorted
 | 
			
		||||
     alphabetically within each group, and the groups presented in the order
 | 
			
		||||
     0, 1, 2, ..., n, -m, ..., -2, -1.  Every entry in an options array with
 | 
			
		||||
     if this field 0 will inherit the group number of the previous entry, or
 | 
			
		||||
     zero if it's the first one, unless its a group header (NAME and KEY both
 | 
			
		||||
     0), in which case, the previous entry + 1 is the default.  Automagic
 | 
			
		||||
     options such as --help are put into group -1.  */
 | 
			
		||||
  int group;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* The argument associated with this option is optional.  */
 | 
			
		||||
#define OPTION_ARG_OPTIONAL	0x1
 | 
			
		||||
 | 
			
		||||
/* This option isn't displayed in any help messages.  */
 | 
			
		||||
#define OPTION_HIDDEN	       	0x2
 | 
			
		||||
 | 
			
		||||
/* This option is an alias for the closest previous non-alias option.  This
 | 
			
		||||
   means that it will be displayed in the same help entry, and will inherit
 | 
			
		||||
   fields other than NAME and KEY from the aliased option.  */
 | 
			
		||||
#define OPTION_ALIAS		0x4
 | 
			
		||||
 | 
			
		||||
/* This option isn't actually an option (and so should be ignored by the
 | 
			
		||||
   actual option parser), but rather an arbitrary piece of documentation that
 | 
			
		||||
   should be displayed in much the same manner as the options.  If this flag
 | 
			
		||||
   is set, then the option NAME field is displayed unmodified (e.g., no `--'
 | 
			
		||||
   prefix is added) at the left-margin (where a *short* option would normally
 | 
			
		||||
   be displayed), and the documentation string in the normal place.  For
 | 
			
		||||
   purposes of sorting, any leading whitespace and punctuation is ignored,
 | 
			
		||||
   except that if the first non-whitespace character is not `-', this entry
 | 
			
		||||
   is displayed after all options (and OPTION_DOC entries with a leading `-')
 | 
			
		||||
   in the same group.  */
 | 
			
		||||
#define OPTION_DOC		0x8
 | 
			
		||||
 | 
			
		||||
/* This option shouldn't be included in `long' usage messages (but is still
 | 
			
		||||
   included in help messages).  This is mainly intended for options that are
 | 
			
		||||
   completely documented in an argp's ARGS_DOC field, in which case including
 | 
			
		||||
   the option in the generic usage list would be redundant.  For instance,
 | 
			
		||||
   if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to
 | 
			
		||||
   distinguish these two cases, -x should probably be marked
 | 
			
		||||
   OPTION_NO_USAGE.  */
 | 
			
		||||
#define OPTION_NO_USAGE		0x10
 | 
			
		||||
 | 
			
		||||
struct argp;			/* fwd declare this type */
 | 
			
		||||
struct argp_state;		/* " */
 | 
			
		||||
struct argp_child;		/* " */
 | 
			
		||||
 | 
			
		||||
/* The type of a pointer to an argp parsing function.  */
 | 
			
		||||
typedef error_t (*argp_parser_t) (int __key, char *__arg,
 | 
			
		||||
				  struct argp_state *__state);
 | 
			
		||||
 | 
			
		||||
/* What to return for unrecognized keys.  For special ARGP_KEY_ keys, such
 | 
			
		||||
   returns will simply be ignored.  For user keys, this error will be turned
 | 
			
		||||
   into EINVAL (if the call to argp_parse is such that errors are propagated
 | 
			
		||||
   back to the user instead of exiting); returning EINVAL itself would result
 | 
			
		||||
   in an immediate stop to parsing in *all* cases.  */
 | 
			
		||||
#define ARGP_ERR_UNKNOWN	E2BIG /* Hurd should never need E2BIG.  XXX */
 | 
			
		||||
 | 
			
		||||
/* Special values for the KEY argument to an argument parsing function.
 | 
			
		||||
   ARGP_ERR_UNKNOWN should be returned if they aren't understood.
 | 
			
		||||
 | 
			
		||||
   The sequence of keys to a parsing function is either (where each
 | 
			
		||||
   uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key):
 | 
			
		||||
 | 
			
		||||
       INIT opt... NO_ARGS END SUCCESS  -- No non-option arguments at all
 | 
			
		||||
   or  INIT (opt | ARG)... END SUCCESS  -- All non-option args parsed
 | 
			
		||||
   or  INIT (opt | ARG)... SUCCESS      -- Some non-option arg unrecognized
 | 
			
		||||
 | 
			
		||||
   The third case is where every parser returned ARGP_KEY_UNKNOWN for an
 | 
			
		||||
   argument, in which case parsing stops at that argument (returning the
 | 
			
		||||
   unparsed arguments to the caller of argp_parse if requested, or stopping
 | 
			
		||||
   with an error message if not).
 | 
			
		||||
 | 
			
		||||
   If an error occurs (either detected by argp, or because the parsing
 | 
			
		||||
   function returned an error value), then the parser is called with
 | 
			
		||||
   ARGP_KEY_ERROR, and no further calls are made.  */
 | 
			
		||||
 | 
			
		||||
/* This is not an option at all, but rather a command line argument.  If a
 | 
			
		||||
   parser receiving this key returns success, the fact is recorded, and the
 | 
			
		||||
   ARGP_KEY_NO_ARGS case won't be used.  HOWEVER, if while processing the
 | 
			
		||||
   argument, a parser function decrements the NEXT field of the state it's
 | 
			
		||||
   passed, the option won't be considered processed; this is to allow you to
 | 
			
		||||
   actually modify the argument (perhaps into an option), and have it
 | 
			
		||||
   processed again.  */
 | 
			
		||||
#define ARGP_KEY_ARG		0
 | 
			
		||||
/* There are remaining arguments not parsed by any parser, which may be found
 | 
			
		||||
   starting at (STATE->argv + STATE->next).  If success is returned, but
 | 
			
		||||
   STATE->next left untouched, it's assumed that all arguments were consume,
 | 
			
		||||
   otherwise, the parser should adjust STATE->next to reflect any arguments
 | 
			
		||||
   consumed.  */
 | 
			
		||||
#define ARGP_KEY_ARGS		0x1000006
 | 
			
		||||
/* There are no more command line arguments at all.  */
 | 
			
		||||
#define ARGP_KEY_END		0x1000001
 | 
			
		||||
/* Because it's common to want to do some special processing if there aren't
 | 
			
		||||
   any non-option args, user parsers are called with this key if they didn't
 | 
			
		||||
   successfully process any non-option arguments.  Called just before
 | 
			
		||||
   ARGP_KEY_END (where more general validity checks on previously parsed
 | 
			
		||||
   arguments can take place).  */
 | 
			
		||||
#define ARGP_KEY_NO_ARGS	0x1000002
 | 
			
		||||
/* Passed in before any parsing is done.  Afterwards, the values of each
 | 
			
		||||
   element of the CHILD_INPUT field, if any, in the state structure is
 | 
			
		||||
   copied to each child's state to be the initial value of the INPUT field.  */
 | 
			
		||||
#define ARGP_KEY_INIT		0x1000003
 | 
			
		||||
/* Use after all other keys, including SUCCESS & END.  */
 | 
			
		||||
#define ARGP_KEY_FINI		0x1000007
 | 
			
		||||
/* Passed in when parsing has successfully been completed (even if there are
 | 
			
		||||
   still arguments remaining).  */
 | 
			
		||||
#define ARGP_KEY_SUCCESS	0x1000004
 | 
			
		||||
/* Passed in if an error occurs.  */
 | 
			
		||||
#define ARGP_KEY_ERROR		0x1000005
 | 
			
		||||
 | 
			
		||||
/* An argp structure contains a set of options declarations, a function to
 | 
			
		||||
   deal with parsing one, documentation string, a possible vector of child
 | 
			
		||||
   argp's, and perhaps a function to filter help output.  When actually
 | 
			
		||||
   parsing options, getopt is called with the union of all the argp
 | 
			
		||||
   structures chained together through their CHILD pointers, with conflicts
 | 
			
		||||
   being resolved in favor of the first occurrence in the chain.  */
 | 
			
		||||
struct argp
 | 
			
		||||
{
 | 
			
		||||
  /* An array of argp_option structures, terminated by an entry with both
 | 
			
		||||
     NAME and KEY having a value of 0.  */
 | 
			
		||||
  const struct argp_option *options;
 | 
			
		||||
 | 
			
		||||
  /* What to do with an option from this structure.  KEY is the key
 | 
			
		||||
     associated with the option, and ARG is any associated argument (NULL if
 | 
			
		||||
     none was supplied).  If KEY isn't understood, ARGP_ERR_UNKNOWN should be
 | 
			
		||||
     returned.  If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then
 | 
			
		||||
     parsing is stopped immediately, and that value is returned from
 | 
			
		||||
     argp_parse().  For special (non-user-supplied) values of KEY, see the
 | 
			
		||||
     ARGP_KEY_ definitions below.  */
 | 
			
		||||
  argp_parser_t parser;
 | 
			
		||||
 | 
			
		||||
  /* A string describing what other arguments are wanted by this program.  It
 | 
			
		||||
     is only used by argp_usage to print the `Usage:' message.  If it
 | 
			
		||||
     contains newlines, the strings separated by them are considered
 | 
			
		||||
     alternative usage patterns, and printed on separate lines (lines after
 | 
			
		||||
     the first are prefix by `  or: ' instead of `Usage:').  */
 | 
			
		||||
  const char *args_doc;
 | 
			
		||||
 | 
			
		||||
  /* If non-NULL, a string containing extra text to be printed before and
 | 
			
		||||
     after the options in a long help message (separated by a vertical tab
 | 
			
		||||
     `\v' character).  */
 | 
			
		||||
  const char *doc;
 | 
			
		||||
 | 
			
		||||
  /* A vector of argp_children structures, terminated by a member with a 0
 | 
			
		||||
     argp field, pointing to child argps should be parsed with this one.  Any
 | 
			
		||||
     conflicts are resolved in favor of this argp, or early argps in the
 | 
			
		||||
     CHILDREN list.  This field is useful if you use libraries that supply
 | 
			
		||||
     their own argp structure, which you want to use in conjunction with your
 | 
			
		||||
     own.  */
 | 
			
		||||
  const struct argp_child *children;
 | 
			
		||||
 | 
			
		||||
  /* If non-zero, this should be a function to filter the output of help
 | 
			
		||||
     messages.  KEY is either a key from an option, in which case TEXT is
 | 
			
		||||
     that option's help text, or a special key from the ARGP_KEY_HELP_
 | 
			
		||||
     defines, below, describing which other help text TEXT is.  The function
 | 
			
		||||
     should return either TEXT, if it should be used as-is, a replacement
 | 
			
		||||
     string, which should be malloced, and will be freed by argp, or NULL,
 | 
			
		||||
     meaning `print nothing'.  The value for TEXT is *after* any translation
 | 
			
		||||
     has been done, so if any of the replacement text also needs translation,
 | 
			
		||||
     that should be done by the filter function.  INPUT is either the input
 | 
			
		||||
     supplied to argp_parse, or NULL, if argp_help was called directly.  */
 | 
			
		||||
  char *(*help_filter) (int __key, const char *__text, void *__input);
 | 
			
		||||
 | 
			
		||||
  /* If non-zero the strings used in the argp library are translated using
 | 
			
		||||
     the domain described by this string.  Otherwise the currently installed
 | 
			
		||||
     default domain is used.  */
 | 
			
		||||
  const char *argp_domain;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Possible KEY arguments to a help filter function.  */
 | 
			
		||||
#define ARGP_KEY_HELP_PRE_DOC	0x2000001 /* Help text preceeding options. */
 | 
			
		||||
#define ARGP_KEY_HELP_POST_DOC	0x2000002 /* Help text following options. */
 | 
			
		||||
#define ARGP_KEY_HELP_HEADER	0x2000003 /* Option header string. */
 | 
			
		||||
#define ARGP_KEY_HELP_EXTRA	0x2000004 /* After all other documentation;
 | 
			
		||||
					     TEXT is NULL for this key.  */
 | 
			
		||||
/* Explanatory note emitted when duplicate option arguments have been
 | 
			
		||||
   suppressed.  */
 | 
			
		||||
#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
 | 
			
		||||
#define ARGP_KEY_HELP_ARGS_DOC	0x2000006 /* Argument doc string.  */
 | 
			
		||||
 | 
			
		||||
/* When an argp has a non-zero CHILDREN field, it should point to a vector of
 | 
			
		||||
   argp_child structures, each of which describes a subsidiary argp.  */
 | 
			
		||||
struct argp_child
 | 
			
		||||
{
 | 
			
		||||
  /* The child parser.  */
 | 
			
		||||
  const struct argp *argp;
 | 
			
		||||
 | 
			
		||||
  /* Flags for this child.  */
 | 
			
		||||
  int flags;
 | 
			
		||||
 | 
			
		||||
  /* If non-zero, an optional header to be printed in help output before the
 | 
			
		||||
     child options.  As a side-effect, a non-zero value forces the child
 | 
			
		||||
     options to be grouped together; to achieve this effect without actually
 | 
			
		||||
     printing a header string, use a value of "".  */
 | 
			
		||||
  const char *header;
 | 
			
		||||
 | 
			
		||||
  /* Where to group the child options relative to the other (`consolidated')
 | 
			
		||||
     options in the parent argp; the values are the same as the GROUP field
 | 
			
		||||
     in argp_option structs, but all child-groupings follow parent options at
 | 
			
		||||
     a particular group level.  If both this field and HEADER are zero, then
 | 
			
		||||
     they aren't grouped at all, but rather merged with the parent options
 | 
			
		||||
     (merging the child's grouping levels with the parents).  */
 | 
			
		||||
  int group;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Parsing state.  This is provided to parsing functions called by argp,
 | 
			
		||||
   which may examine and, as noted, modify fields.  */
 | 
			
		||||
struct argp_state
 | 
			
		||||
{
 | 
			
		||||
  /* The top level ARGP being parsed.  */
 | 
			
		||||
  const struct argp *root_argp;
 | 
			
		||||
 | 
			
		||||
  /* The argument vector being parsed.  May be modified.  */
 | 
			
		||||
  int argc;
 | 
			
		||||
  char **argv;
 | 
			
		||||
 | 
			
		||||
  /* The index in ARGV of the next arg that to be parsed.  May be modified. */
 | 
			
		||||
  int next;
 | 
			
		||||
 | 
			
		||||
  /* The flags supplied to argp_parse.  May be modified.  */
 | 
			
		||||
  unsigned flags;
 | 
			
		||||
 | 
			
		||||
  /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the
 | 
			
		||||
     number of the current arg, starting at zero, and incremented after each
 | 
			
		||||
     such call returns.  At all other times, this is the number of such
 | 
			
		||||
     arguments that have been processed.  */
 | 
			
		||||
  unsigned arg_num;
 | 
			
		||||
 | 
			
		||||
  /* If non-zero, the index in ARGV of the first argument following a special
 | 
			
		||||
     `--' argument (which prevents anything following being interpreted as an
 | 
			
		||||
     option).  Only set once argument parsing has proceeded past this point. */
 | 
			
		||||
  int quoted;
 | 
			
		||||
 | 
			
		||||
  /* An arbitrary pointer passed in from the user.  */
 | 
			
		||||
  void *input;
 | 
			
		||||
  /* Values to pass to child parsers.  This vector will be the same length as
 | 
			
		||||
     the number of children for the current parser.  */
 | 
			
		||||
  void **child_inputs;
 | 
			
		||||
 | 
			
		||||
  /* For the parser's use.  Initialized to 0.  */
 | 
			
		||||
  void *hook;
 | 
			
		||||
 | 
			
		||||
  /* The name used when printing messages.  This is initialized to ARGV[0],
 | 
			
		||||
     or PROGRAM_INVOCATION_NAME if that is unavailable.  */
 | 
			
		||||
  char *name;
 | 
			
		||||
 | 
			
		||||
  /* Streams used when argp prints something.  */
 | 
			
		||||
  FILE *err_stream;		/* For errors; initialized to stderr. */
 | 
			
		||||
  FILE *out_stream;		/* For information; initialized to stdout. */
 | 
			
		||||
 | 
			
		||||
  void *pstate;			/* Private, for use by argp.  */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Flags for argp_parse (note that the defaults are those that are
 | 
			
		||||
   convenient for program command line parsing): */
 | 
			
		||||
 | 
			
		||||
/* Don't ignore the first element of ARGV.  Normally (and always unless
 | 
			
		||||
   ARGP_NO_ERRS is set) the first element of the argument vector is
 | 
			
		||||
   skipped for option parsing purposes, as it corresponds to the program name
 | 
			
		||||
   in a command line.  */
 | 
			
		||||
#define ARGP_PARSE_ARGV0  0x01
 | 
			
		||||
 | 
			
		||||
/* Don't print error messages for unknown options to stderr; unless this flag
 | 
			
		||||
   is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program
 | 
			
		||||
   name in the error messages.  This flag implies ARGP_NO_EXIT (on the
 | 
			
		||||
   assumption that silent exiting upon errors is bad behaviour).  */
 | 
			
		||||
#define ARGP_NO_ERRS	0x02
 | 
			
		||||
 | 
			
		||||
/* Don't parse any non-option args.  Normally non-option args are parsed by
 | 
			
		||||
   calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg
 | 
			
		||||
   as the value.  Since it's impossible to know which parse function wants to
 | 
			
		||||
   handle it, each one is called in turn, until one returns 0 or an error
 | 
			
		||||
   other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the
 | 
			
		||||
   argp_parse returns prematurely (but with a return value of 0).  If all
 | 
			
		||||
   args have been parsed without error, all parsing functions are called one
 | 
			
		||||
   last time with a key of ARGP_KEY_END.  This flag needn't normally be set,
 | 
			
		||||
   as the normal behavior is to stop parsing as soon as some argument can't
 | 
			
		||||
   be handled.  */
 | 
			
		||||
#define ARGP_NO_ARGS	0x04
 | 
			
		||||
 | 
			
		||||
/* Parse options and arguments in the same order they occur on the command
 | 
			
		||||
   line -- normally they're rearranged so that all options come first. */
 | 
			
		||||
#define ARGP_IN_ORDER	0x08
 | 
			
		||||
 | 
			
		||||
/* Don't provide the standard long option --help, which causes usage and
 | 
			
		||||
      option help information to be output to stdout, and exit (0) called. */
 | 
			
		||||
#define ARGP_NO_HELP	0x10
 | 
			
		||||
 | 
			
		||||
/* Don't exit on errors (they may still result in error messages).  */
 | 
			
		||||
#define ARGP_NO_EXIT	0x20
 | 
			
		||||
 | 
			
		||||
/* Use the gnu getopt `long-only' rules for parsing arguments.  */
 | 
			
		||||
#define ARGP_LONG_ONLY	0x40
 | 
			
		||||
 | 
			
		||||
/* Turns off any message-printing/exiting options.  */
 | 
			
		||||
#define ARGP_SILENT    (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP)
 | 
			
		||||
 | 
			
		||||
/* Parse the options strings in ARGC & ARGV according to the options in ARGP.
 | 
			
		||||
   FLAGS is one of the ARGP_ flags above.  If ARG_INDEX is non-NULL, the
 | 
			
		||||
   index in ARGV of the first unparsed option is returned in it.  If an
 | 
			
		||||
   unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser
 | 
			
		||||
   routine returned a non-zero value, it is returned; otherwise 0 is
 | 
			
		||||
   returned.  This function may also call exit unless the ARGP_NO_HELP flag
 | 
			
		||||
   is set.  INPUT is a pointer to a value to be passed in to the parser.  */
 | 
			
		||||
extern error_t argp_parse (const struct argp *__restrict __argp,
 | 
			
		||||
			   int __argc, char **__restrict __argv,
 | 
			
		||||
			   unsigned __flags, int *__restrict __arg_index,
 | 
			
		||||
			   void *__restrict __input);
 | 
			
		||||
extern error_t __argp_parse (const struct argp *__restrict __argp,
 | 
			
		||||
			     int __argc, char **__restrict __argv,
 | 
			
		||||
			     unsigned __flags, int *__restrict __arg_index,
 | 
			
		||||
			     void *__restrict __input);
 | 
			
		||||
 | 
			
		||||
/* Global variables.  */
 | 
			
		||||
 | 
			
		||||
/* If defined or set by the user program to a non-zero value, then a default
 | 
			
		||||
   option --version is added (unless the ARGP_NO_HELP flag is used), which
 | 
			
		||||
   will print this string followed by a newline and exit (unless the
 | 
			
		||||
   ARGP_NO_EXIT flag is used).  Overridden by ARGP_PROGRAM_VERSION_HOOK.  */
 | 
			
		||||
extern const char *argp_program_version;
 | 
			
		||||
 | 
			
		||||
/* If defined or set by the user program to a non-zero value, then a default
 | 
			
		||||
   option --version is added (unless the ARGP_NO_HELP flag is used), which
 | 
			
		||||
   calls this function with a stream to print the version to and a pointer to
 | 
			
		||||
   the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
 | 
			
		||||
   used).  This variable takes precedent over ARGP_PROGRAM_VERSION.  */
 | 
			
		||||
extern void (*argp_program_version_hook) (FILE *__restrict __stream,
 | 
			
		||||
					  struct argp_state *__restrict
 | 
			
		||||
					  __state);
 | 
			
		||||
 | 
			
		||||
/* If defined or set by the user program, it should point to string that is
 | 
			
		||||
   the bug-reporting address for the program.  It will be printed by
 | 
			
		||||
   argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various
 | 
			
		||||
   standard help messages), embedded in a sentence that says something like
 | 
			
		||||
   `Report bugs to ADDR.'.  */
 | 
			
		||||
extern const char *argp_program_bug_address;
 | 
			
		||||
 | 
			
		||||
/* The exit status that argp will use when exiting due to a parsing error.
 | 
			
		||||
   If not defined or set by the user program, this defaults to EX_USAGE from
 | 
			
		||||
   <sysexits.h>.  */
 | 
			
		||||
extern error_t argp_err_exit_status;
 | 
			
		||||
 | 
			
		||||
/* Flags for argp_help.  */
 | 
			
		||||
#define ARGP_HELP_USAGE		0x01 /* a Usage: message. */
 | 
			
		||||
#define ARGP_HELP_SHORT_USAGE	0x02 /*  " but don't actually print options. */
 | 
			
		||||
#define ARGP_HELP_SEE		0x04 /* a `Try ... for more help' message. */
 | 
			
		||||
#define ARGP_HELP_LONG		0x08 /* a long help message. */
 | 
			
		||||
#define ARGP_HELP_PRE_DOC	0x10 /* doc string preceding long help.  */
 | 
			
		||||
#define ARGP_HELP_POST_DOC	0x20 /* doc string following long help.  */
 | 
			
		||||
#define ARGP_HELP_DOC		(ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)
 | 
			
		||||
#define ARGP_HELP_BUG_ADDR	0x40 /* bug report address */
 | 
			
		||||
#define ARGP_HELP_LONG_ONLY	0x80 /* modify output appropriately to
 | 
			
		||||
					reflect ARGP_LONG_ONLY mode.  */
 | 
			
		||||
 | 
			
		||||
/* These ARGP_HELP flags are only understood by argp_state_help.  */
 | 
			
		||||
#define ARGP_HELP_EXIT_ERR	0x100 /* Call exit(1) instead of returning.  */
 | 
			
		||||
#define ARGP_HELP_EXIT_OK	0x200 /* Call exit(0) instead of returning.  */
 | 
			
		||||
 | 
			
		||||
/* The standard thing to do after a program command line parsing error, if an
 | 
			
		||||
   error message has already been printed.  */
 | 
			
		||||
#define ARGP_HELP_STD_ERR \
 | 
			
		||||
  (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
 | 
			
		||||
/* The standard thing to do after a program command line parsing error, if no
 | 
			
		||||
   more specific error message has been printed.  */
 | 
			
		||||
#define ARGP_HELP_STD_USAGE \
 | 
			
		||||
  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
 | 
			
		||||
/* The standard thing to do in response to a --help option.  */
 | 
			
		||||
#define ARGP_HELP_STD_HELP \
 | 
			
		||||
  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \
 | 
			
		||||
   | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR)
 | 
			
		||||
 | 
			
		||||
/* Output a usage message for ARGP to STREAM.  FLAGS are from the set
 | 
			
		||||
   ARGP_HELP_*.  */
 | 
			
		||||
extern void argp_help (const struct argp *__restrict __argp,
 | 
			
		||||
		       FILE *__restrict __stream,
 | 
			
		||||
		       unsigned __flags, char *__restrict __name);
 | 
			
		||||
extern void __argp_help (const struct argp *__restrict __argp,
 | 
			
		||||
			 FILE *__restrict __stream, unsigned __flags,
 | 
			
		||||
			 char *__name);
 | 
			
		||||
 | 
			
		||||
/* The following routines are intended to be called from within an argp
 | 
			
		||||
   parsing routine (thus taking an argp_state structure as the first
 | 
			
		||||
   argument).  They may or may not print an error message and exit, depending
 | 
			
		||||
   on the flags in STATE -- in any case, the caller should be prepared for
 | 
			
		||||
   them *not* to exit, and should return an appropiate error after calling
 | 
			
		||||
   them.  [argp_usage & argp_error should probably be called argp_state_...,
 | 
			
		||||
   but they're used often enough that they should be short]  */
 | 
			
		||||
 | 
			
		||||
/* Output, if appropriate, a usage message for STATE to STREAM.  FLAGS are
 | 
			
		||||
   from the set ARGP_HELP_*.  */
 | 
			
		||||
extern void argp_state_help (const struct argp_state *__restrict __state,
 | 
			
		||||
			     FILE *__restrict __stream,
 | 
			
		||||
			     unsigned int __flags);
 | 
			
		||||
extern void __argp_state_help (const struct argp_state *__restrict __state,
 | 
			
		||||
			       FILE *__restrict __stream,
 | 
			
		||||
			       unsigned int __flags);
 | 
			
		||||
 | 
			
		||||
/* Possibly output the standard usage message for ARGP to stderr and exit.  */
 | 
			
		||||
extern void argp_usage (const struct argp_state *__state);
 | 
			
		||||
extern void __argp_usage (const struct argp_state *__state);
 | 
			
		||||
 | 
			
		||||
/* If appropriate, print the printf string FMT and following args, preceded
 | 
			
		||||
   by the program name and `:', to stderr, and followed by a `Try ... --help'
 | 
			
		||||
   message, then exit (1).  */
 | 
			
		||||
extern void argp_error (const struct argp_state *__restrict __state,
 | 
			
		||||
			const char *__restrict __fmt, ...)
 | 
			
		||||
     _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3));
 | 
			
		||||
extern void __argp_error (const struct argp_state *__restrict __state,
 | 
			
		||||
			  const char *__restrict __fmt, ...)
 | 
			
		||||
    _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3));
 | 
			
		||||
 | 
			
		||||
/* Similar to the standard gnu error-reporting function error(), but will
 | 
			
		||||
   respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
 | 
			
		||||
   to STATE->err_stream.  This is useful for argument parsing code that is
 | 
			
		||||
   shared between program startup (when exiting is desired) and runtime
 | 
			
		||||
   option parsing (when typically an error code is returned instead).  The
 | 
			
		||||
   difference between this function and argp_error is that the latter is for
 | 
			
		||||
   *parsing errors*, and the former is for other problems that occur during
 | 
			
		||||
   parsing but don't reflect a (syntactic) problem with the input.  */
 | 
			
		||||
extern void argp_failure (const struct argp_state *__restrict __state,
 | 
			
		||||
			  int __status, int __errnum,
 | 
			
		||||
			  const char *__restrict __fmt, ...)
 | 
			
		||||
     _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5));
 | 
			
		||||
extern void __argp_failure (const struct argp_state *__restrict __state,
 | 
			
		||||
			    int __status, int __errnum,
 | 
			
		||||
			    const char *__restrict __fmt, ...)
 | 
			
		||||
     _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5));
 | 
			
		||||
 | 
			
		||||
/* Returns true if the option OPT is a valid short option.  */
 | 
			
		||||
extern int _option_is_short (const struct argp_option *__opt) __THROW;
 | 
			
		||||
extern int __option_is_short (const struct argp_option *__opt) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Returns true if the option OPT is in fact the last (unused) entry in an
 | 
			
		||||
   options array.  */
 | 
			
		||||
extern int _option_is_end (const struct argp_option *__opt) __THROW;
 | 
			
		||||
extern int __option_is_end (const struct argp_option *__opt) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Return the input field for ARGP in the parser corresponding to STATE; used
 | 
			
		||||
   by the help routines.  */
 | 
			
		||||
extern void *_argp_input (const struct argp *__restrict __argp,
 | 
			
		||||
			  const struct argp_state *__restrict __state)
 | 
			
		||||
     __THROW;
 | 
			
		||||
extern void *__argp_input (const struct argp *__restrict __argp,
 | 
			
		||||
			   const struct argp_state *__restrict __state)
 | 
			
		||||
     __THROW;
 | 
			
		||||
 | 
			
		||||
#ifdef __USE_EXTERN_INLINES
 | 
			
		||||
 | 
			
		||||
# if !_LIBC
 | 
			
		||||
#  define __argp_usage argp_usage
 | 
			
		||||
#  define __argp_state_help argp_state_help
 | 
			
		||||
#  define __option_is_short _option_is_short
 | 
			
		||||
#  define __option_is_end _option_is_end
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# ifndef ARGP_EI
 | 
			
		||||
#  define ARGP_EI __extern_inline
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
ARGP_EI void
 | 
			
		||||
__argp_usage (const struct argp_state *__state)
 | 
			
		||||
{
 | 
			
		||||
  __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ARGP_EI int
 | 
			
		||||
__NTH (__option_is_short (const struct argp_option *__opt))
 | 
			
		||||
{
 | 
			
		||||
  if (__opt->flags & OPTION_DOC)
 | 
			
		||||
    return 0;
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      int __key = __opt->key;
 | 
			
		||||
      return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ARGP_EI int
 | 
			
		||||
__NTH (__option_is_end (const struct argp_option *__opt))
 | 
			
		||||
{
 | 
			
		||||
  return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# if !_LIBC
 | 
			
		||||
#  undef __argp_usage
 | 
			
		||||
#  undef __argp_state_help
 | 
			
		||||
#  undef __option_is_short
 | 
			
		||||
#  undef __option_is_end
 | 
			
		||||
# endif
 | 
			
		||||
#endif /* Use extern inlines.  */
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* argp.h */
 | 
			
		||||
@@ -0,0 +1,182 @@
 | 
			
		||||
/* Routines for dealing with '\0' separated arg vectors.
 | 
			
		||||
   Copyright (C) 1995-2016 Free Software Foundation, Inc.
 | 
			
		||||
   This file is part of the GNU C Library.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is free software; you can redistribute it and/or
 | 
			
		||||
   modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
   License as published by the Free Software Foundation; either
 | 
			
		||||
   version 2.1 of the License, or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is distributed in the hope that it will be useful,
 | 
			
		||||
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
   Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
   You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
   License along with the GNU C Library; if not, see
 | 
			
		||||
   <http://www.gnu.org/licenses/>.  */
 | 
			
		||||
 | 
			
		||||
#ifndef _ARGZ_H
 | 
			
		||||
#define _ARGZ_H	1
 | 
			
		||||
 | 
			
		||||
#include <features.h>
 | 
			
		||||
 | 
			
		||||
#define __need_error_t
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <string.h>		/* Need size_t, and strchr is called below.  */
 | 
			
		||||
 | 
			
		||||
#ifndef __error_t_defined
 | 
			
		||||
typedef int error_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
/* Make a '\0' separated arg vector from a unix argv vector, returning it in
 | 
			
		||||
   ARGZ, and the total length in LEN.  If a memory allocation error occurs,
 | 
			
		||||
   ENOMEM is returned, otherwise 0.  The result can be destroyed using free. */
 | 
			
		||||
extern error_t __argz_create (char *const __argv[], char **__restrict __argz,
 | 
			
		||||
			      size_t *__restrict __len) __THROW;
 | 
			
		||||
extern error_t argz_create (char *const __argv[], char **__restrict __argz,
 | 
			
		||||
			    size_t *__restrict __len) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Make a '\0' separated arg vector from a SEP separated list in
 | 
			
		||||
   STRING, returning it in ARGZ, and the total length in LEN.  If a
 | 
			
		||||
   memory allocation error occurs, ENOMEM is returned, otherwise 0.
 | 
			
		||||
   The result can be destroyed using free.  */
 | 
			
		||||
extern error_t __argz_create_sep (const char *__restrict __string,
 | 
			
		||||
				  int __sep, char **__restrict __argz,
 | 
			
		||||
				  size_t *__restrict __len) __THROW;
 | 
			
		||||
extern error_t argz_create_sep (const char *__restrict __string,
 | 
			
		||||
				int __sep, char **__restrict __argz,
 | 
			
		||||
				size_t *__restrict __len) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Returns the number of strings in ARGZ.  */
 | 
			
		||||
extern size_t __argz_count (const char *__argz, size_t __len)
 | 
			
		||||
     __THROW __attribute_pure__;
 | 
			
		||||
extern size_t argz_count (const char *__argz, size_t __len)
 | 
			
		||||
     __THROW __attribute_pure__;
 | 
			
		||||
 | 
			
		||||
/* Puts pointers to each string in ARGZ into ARGV, which must be large enough
 | 
			
		||||
   to hold them all.  */
 | 
			
		||||
extern void __argz_extract (const char *__restrict __argz, size_t __len,
 | 
			
		||||
			    char **__restrict __argv) __THROW;
 | 
			
		||||
extern void argz_extract (const char *__restrict __argz, size_t __len,
 | 
			
		||||
			  char **__restrict __argv) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
 | 
			
		||||
   except the last into the character SEP.  */
 | 
			
		||||
extern void __argz_stringify (char *__argz, size_t __len, int __sep) __THROW;
 | 
			
		||||
extern void argz_stringify (char *__argz, size_t __len, int __sep) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Append BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN.  */
 | 
			
		||||
extern error_t __argz_append (char **__restrict __argz,
 | 
			
		||||
			      size_t *__restrict __argz_len,
 | 
			
		||||
			      const char *__restrict __buf, size_t __buf_len)
 | 
			
		||||
     __THROW;
 | 
			
		||||
extern error_t argz_append (char **__restrict __argz,
 | 
			
		||||
			    size_t *__restrict __argz_len,
 | 
			
		||||
			    const char *__restrict __buf, size_t __buf_len)
 | 
			
		||||
     __THROW;
 | 
			
		||||
 | 
			
		||||
/* Append STR to the argz vector in ARGZ & ARGZ_LEN.  */
 | 
			
		||||
extern error_t __argz_add (char **__restrict __argz,
 | 
			
		||||
			   size_t *__restrict __argz_len,
 | 
			
		||||
			   const char *__restrict __str) __THROW;
 | 
			
		||||
extern error_t argz_add (char **__restrict __argz,
 | 
			
		||||
			 size_t *__restrict __argz_len,
 | 
			
		||||
			 const char *__restrict __str) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Append SEP separated list in STRING to the argz vector in ARGZ &
 | 
			
		||||
   ARGZ_LEN.  */
 | 
			
		||||
extern error_t __argz_add_sep (char **__restrict __argz,
 | 
			
		||||
			       size_t *__restrict __argz_len,
 | 
			
		||||
			       const char *__restrict __string, int __delim)
 | 
			
		||||
     __THROW;
 | 
			
		||||
extern error_t argz_add_sep (char **__restrict __argz,
 | 
			
		||||
			     size_t *__restrict __argz_len,
 | 
			
		||||
			     const char *__restrict __string, int __delim)
 | 
			
		||||
     __THROW;
 | 
			
		||||
 | 
			
		||||
/* Delete ENTRY from ARGZ & ARGZ_LEN, if it appears there.  */
 | 
			
		||||
extern void __argz_delete (char **__restrict __argz,
 | 
			
		||||
			   size_t *__restrict __argz_len,
 | 
			
		||||
			   char *__restrict __entry) __THROW;
 | 
			
		||||
extern void argz_delete (char **__restrict __argz,
 | 
			
		||||
			 size_t *__restrict __argz_len,
 | 
			
		||||
			 char *__restrict __entry) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an
 | 
			
		||||
   existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end.
 | 
			
		||||
   Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN,
 | 
			
		||||
   ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ.  If BEFORE is not
 | 
			
		||||
   in ARGZ, EINVAL is returned, else if memory can't be allocated for the new
 | 
			
		||||
   ARGZ, ENOMEM is returned, else 0.  */
 | 
			
		||||
extern error_t __argz_insert (char **__restrict __argz,
 | 
			
		||||
			      size_t *__restrict __argz_len,
 | 
			
		||||
			      char *__restrict __before,
 | 
			
		||||
			      const char *__restrict __entry) __THROW;
 | 
			
		||||
extern error_t argz_insert (char **__restrict __argz,
 | 
			
		||||
			    size_t *__restrict __argz_len,
 | 
			
		||||
			    char *__restrict __before,
 | 
			
		||||
			    const char *__restrict __entry) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Replace any occurrences of the string STR in ARGZ with WITH, reallocating
 | 
			
		||||
   ARGZ as necessary.  If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be
 | 
			
		||||
   incremented by number of replacements performed.  */
 | 
			
		||||
extern error_t __argz_replace (char **__restrict __argz,
 | 
			
		||||
			       size_t *__restrict __argz_len,
 | 
			
		||||
			       const char *__restrict __str,
 | 
			
		||||
			       const char *__restrict __with,
 | 
			
		||||
			       unsigned int *__restrict __replace_count);
 | 
			
		||||
extern error_t argz_replace (char **__restrict __argz,
 | 
			
		||||
			     size_t *__restrict __argz_len,
 | 
			
		||||
			     const char *__restrict __str,
 | 
			
		||||
			     const char *__restrict __with,
 | 
			
		||||
			     unsigned int *__restrict __replace_count);
 | 
			
		||||
 | 
			
		||||
/* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there
 | 
			
		||||
   are no more.  If entry is NULL, then the first entry is returned.  This
 | 
			
		||||
   behavior allows two convenient iteration styles:
 | 
			
		||||
 | 
			
		||||
    char *entry = 0;
 | 
			
		||||
    while ((entry = argz_next (argz, argz_len, entry)))
 | 
			
		||||
      ...;
 | 
			
		||||
 | 
			
		||||
   or
 | 
			
		||||
 | 
			
		||||
    char *entry;
 | 
			
		||||
    for (entry = argz; entry; entry = argz_next (argz, argz_len, entry))
 | 
			
		||||
      ...;
 | 
			
		||||
*/
 | 
			
		||||
extern char *__argz_next (const char *__restrict __argz, size_t __argz_len,
 | 
			
		||||
			  const char *__restrict __entry) __THROW;
 | 
			
		||||
extern char *argz_next (const char *__restrict __argz, size_t __argz_len,
 | 
			
		||||
			const char *__restrict __entry) __THROW;
 | 
			
		||||
 | 
			
		||||
#ifdef __USE_EXTERN_INLINES
 | 
			
		||||
__extern_inline char *
 | 
			
		||||
__NTH (__argz_next (const char *__argz, size_t __argz_len,
 | 
			
		||||
		    const char *__entry))
 | 
			
		||||
{
 | 
			
		||||
  if (__entry)
 | 
			
		||||
    {
 | 
			
		||||
      if (__entry < __argz + __argz_len)
 | 
			
		||||
	__entry = strchr (__entry, '\0') + 1;
 | 
			
		||||
 | 
			
		||||
      return __entry >= __argz + __argz_len ? (char *) NULL : (char *) __entry;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    return __argz_len > 0 ? (char *) __argz : 0;
 | 
			
		||||
}
 | 
			
		||||
__extern_inline char *
 | 
			
		||||
__NTH (argz_next (const char *__argz, size_t __argz_len,
 | 
			
		||||
		  const char *__entry))
 | 
			
		||||
{
 | 
			
		||||
  return __argz_next (__argz, __argz_len, __entry);
 | 
			
		||||
}
 | 
			
		||||
#endif /* Use extern inlines.  */
 | 
			
		||||
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* argz.h */
 | 
			
		||||
@@ -0,0 +1,105 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 1983, 1989, 1993
 | 
			
		||||
 *	The Regents of the University of California.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 4. Neither the name of the University nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 *	@(#)ftp.h	8.1 (Berkeley) 6/2/93
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _ARPA_FTP_H
 | 
			
		||||
#define	_ARPA_FTP_H 1
 | 
			
		||||
 | 
			
		||||
/* Definitions for FTP; see RFC-765. */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Reply codes.
 | 
			
		||||
 */
 | 
			
		||||
#define PRELIM		1	/* positive preliminary */
 | 
			
		||||
#define COMPLETE	2	/* positive completion */
 | 
			
		||||
#define CONTINUE	3	/* positive intermediate */
 | 
			
		||||
#define TRANSIENT	4	/* transient negative completion */
 | 
			
		||||
#define ERROR		5	/* permanent negative completion */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Type codes
 | 
			
		||||
 */
 | 
			
		||||
#define	TYPE_A		1	/* ASCII */
 | 
			
		||||
#define	TYPE_E		2	/* EBCDIC */
 | 
			
		||||
#define	TYPE_I		3	/* image */
 | 
			
		||||
#define	TYPE_L		4	/* local byte size */
 | 
			
		||||
 | 
			
		||||
#ifdef FTP_NAMES
 | 
			
		||||
char *typenames[] =  {"0", "ASCII", "EBCDIC", "Image", "Local" };
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Form codes
 | 
			
		||||
 */
 | 
			
		||||
#define	FORM_N		1	/* non-print */
 | 
			
		||||
#define	FORM_T		2	/* telnet format effectors */
 | 
			
		||||
#define	FORM_C		3	/* carriage control (ASA) */
 | 
			
		||||
#ifdef FTP_NAMES
 | 
			
		||||
char *formnames[] =  {"0", "Nonprint", "Telnet", "Carriage-control" };
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Structure codes
 | 
			
		||||
 */
 | 
			
		||||
#define	STRU_F		1	/* file (no record structure) */
 | 
			
		||||
#define	STRU_R		2	/* record structure */
 | 
			
		||||
#define	STRU_P		3	/* page structure */
 | 
			
		||||
#ifdef FTP_NAMES
 | 
			
		||||
char *strunames[] =  {"0", "File", "Record", "Page" };
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mode types
 | 
			
		||||
 */
 | 
			
		||||
#define	MODE_S		1	/* stream */
 | 
			
		||||
#define	MODE_B		2	/* block */
 | 
			
		||||
#define	MODE_C		3	/* compressed */
 | 
			
		||||
#ifdef FTP_NAMES
 | 
			
		||||
char *modenames[] =  {"0", "Stream", "Block", "Compressed" };
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Record Tokens
 | 
			
		||||
 */
 | 
			
		||||
#define	REC_ESC		'\377'	/* Record-mode Escape */
 | 
			
		||||
#define	REC_EOR		'\001'	/* Record-mode End-of-Record */
 | 
			
		||||
#define REC_EOF		'\002'	/* Record-mode End-of-File */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Block Header
 | 
			
		||||
 */
 | 
			
		||||
#define	BLK_EOR		0x80	/* Block is End-of-Record */
 | 
			
		||||
#define	BLK_EOF		0x40	/* Block is End-of-File */
 | 
			
		||||
#define BLK_ERRORS	0x20	/* Block is suspected of containing errors */
 | 
			
		||||
#define	BLK_RESTART	0x10	/* Block is Restart Marker */
 | 
			
		||||
 | 
			
		||||
#define	BLK_BYTECOUNT	2	/* Bytes in this block */
 | 
			
		||||
 | 
			
		||||
#endif /* arpa/ftp.h */
 | 
			
		||||
@@ -0,0 +1,105 @@
 | 
			
		||||
/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
 | 
			
		||||
   This file is part of the GNU C Library.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is free software; you can redistribute it and/or
 | 
			
		||||
   modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
   License as published by the Free Software Foundation; either
 | 
			
		||||
   version 2.1 of the License, or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
   The GNU C Library is distributed in the hope that it will be useful,
 | 
			
		||||
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
   Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
   You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
   License along with the GNU C Library; if not, see
 | 
			
		||||
   <http://www.gnu.org/licenses/>.  */
 | 
			
		||||
 | 
			
		||||
#ifndef _ARPA_INET_H
 | 
			
		||||
#define	_ARPA_INET_H	1
 | 
			
		||||
 | 
			
		||||
#include <features.h>
 | 
			
		||||
#include <netinet/in.h>		/* To define `struct in_addr'.  */
 | 
			
		||||
 | 
			
		||||
/* Type for length arguments in socket calls.  */
 | 
			
		||||
#ifndef __socklen_t_defined
 | 
			
		||||
typedef __socklen_t socklen_t;
 | 
			
		||||
# define __socklen_t_defined
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
/* Convert Internet host address from numbers-and-dots notation in CP
 | 
			
		||||
   into binary data in network byte order.  */
 | 
			
		||||
extern in_addr_t inet_addr (const char *__cp) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Return the local host address part of the Internet address in IN.  */
 | 
			
		||||
extern in_addr_t inet_lnaof (struct in_addr __in) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Make Internet host address in network byte order by combining the
 | 
			
		||||
   network number NET with the local address HOST.  */
 | 
			
		||||
extern struct in_addr inet_makeaddr (in_addr_t __net, in_addr_t __host)
 | 
			
		||||
     __THROW;
 | 
			
		||||
 | 
			
		||||
/* Return network number part of the Internet address IN.  */
 | 
			
		||||
extern in_addr_t inet_netof (struct in_addr __in) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Extract the network number in network byte order from the address
 | 
			
		||||
   in numbers-and-dots natation starting at CP.  */
 | 
			
		||||
extern in_addr_t inet_network (const char *__cp) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Convert Internet number in IN to ASCII representation.  The return value
 | 
			
		||||
   is a pointer to an internal array containing the string.  */
 | 
			
		||||
extern char *inet_ntoa (struct in_addr __in) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Convert from presentation format of an Internet number in buffer
 | 
			
		||||
   starting at CP to the binary network format and store result for
 | 
			
		||||
   interface type AF in buffer starting at BUF.  */
 | 
			
		||||
extern int inet_pton (int __af, const char *__restrict __cp,
 | 
			
		||||
		      void *__restrict __buf) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Convert a Internet address in binary network format for interface
 | 
			
		||||
   type AF in buffer starting at CP to presentation form and place
 | 
			
		||||
   result in buffer of length LEN astarting at BUF.  */
 | 
			
		||||
extern const char *inet_ntop (int __af, const void *__restrict __cp,
 | 
			
		||||
			      char *__restrict __buf, socklen_t __len)
 | 
			
		||||
     __THROW;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* The following functions are not part of XNS 5.2.  */
 | 
			
		||||
#ifdef __USE_MISC
 | 
			
		||||
/* Convert Internet host address from numbers-and-dots notation in CP
 | 
			
		||||
   into binary data and store the result in the structure INP.  */
 | 
			
		||||
extern int inet_aton (const char *__cp, struct in_addr *__inp) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Format a network number NET into presentation format and place result
 | 
			
		||||
   in buffer starting at BUF with length of LEN bytes.  */
 | 
			
		||||
extern char *inet_neta (in_addr_t __net, char *__buf, size_t __len) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Convert network number for interface type AF in buffer starting at
 | 
			
		||||
   CP to presentation format.  The result will specifiy BITS bits of
 | 
			
		||||
   the number.  */
 | 
			
		||||
extern char *inet_net_ntop (int __af, const void *__cp, int __bits,
 | 
			
		||||
			    char *__buf, size_t __len) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Convert network number for interface type AF from presentation in
 | 
			
		||||
   buffer starting at CP to network format and store result int
 | 
			
		||||
   buffer starting at BUF of size LEN.  */
 | 
			
		||||
extern int inet_net_pton (int __af, const char *__cp,
 | 
			
		||||
			  void *__buf, size_t __len) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Convert ASCII representation in hexadecimal form of the Internet
 | 
			
		||||
   address to binary form and place result in buffer of length LEN
 | 
			
		||||
   starting at BUF.  */
 | 
			
		||||
extern unsigned int inet_nsap_addr (const char *__cp,
 | 
			
		||||
				    unsigned char *__buf, int __len) __THROW;
 | 
			
		||||
 | 
			
		||||
/* Convert internet address in binary form in LEN bytes starting at CP
 | 
			
		||||
   a presentation form and place result in BUF.  */
 | 
			
		||||
extern char *inet_nsap_ntoa (int __len, const unsigned char *__cp,
 | 
			
		||||
			     char *__buf) __THROW;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* arpa/inet.h */
 | 
			
		||||
@@ -0,0 +1,535 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 1983, 1989, 1993
 | 
			
		||||
 *    The Regents of the University of California.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 4. Neither the name of the University nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
 | 
			
		||||
 * Copyright (c) 1996-1999 by Internet Software Consortium.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this software for any
 | 
			
		||||
 * purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
 * copyright notice and this permission notice appear in all copies.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
 | 
			
		||||
 * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
 | 
			
		||||
 * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 | 
			
		||||
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
 | 
			
		||||
 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
 | 
			
		||||
 * SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	$BINDId: nameser.h,v 8.37 2000/03/30 21:16:49 vixie Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _ARPA_NAMESER_H_
 | 
			
		||||
#define _ARPA_NAMESER_H_
 | 
			
		||||
 | 
			
		||||
/*! \file */
 | 
			
		||||
 | 
			
		||||
#define BIND_4_COMPAT
 | 
			
		||||
 | 
			
		||||
#include <sys/param.h>
 | 
			
		||||
#if (!defined(BSD)) || (BSD < 199306)
 | 
			
		||||
# include <sys/bitypes.h>
 | 
			
		||||
#else
 | 
			
		||||
# include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <sys/cdefs.h>
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * Revision information.  This is the release date in YYYYMMDD format.
 | 
			
		||||
 * It can change every day so the right thing to do with it is use it
 | 
			
		||||
 * in preprocessor commands such as "#if (__NAMESER > 19931104)".  Do not
 | 
			
		||||
 * compare for equality; rather, use it to determine whether your libbind.a
 | 
			
		||||
 * contains a new enough lib/nameser/ to support the feature you need.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define __NAMESER	19991006	/*%< New interface version stamp. */
 | 
			
		||||
/*
 | 
			
		||||
 * Define constants based on RFC 883, RFC 1034, RFC 1035
 | 
			
		||||
 */
 | 
			
		||||
#define NS_PACKETSZ	512	/*%< default UDP packet size */
 | 
			
		||||
#define NS_MAXDNAME	1025	/*%< maximum domain name */
 | 
			
		||||
#define NS_MAXMSG	65535	/*%< maximum message size */
 | 
			
		||||
#define NS_MAXCDNAME	255	/*%< maximum compressed domain name */
 | 
			
		||||
#define NS_MAXLABEL	63	/*%< maximum length of domain label */
 | 
			
		||||
#define NS_HFIXEDSZ	12	/*%< #/bytes of fixed data in header */
 | 
			
		||||
#define NS_QFIXEDSZ	4	/*%< #/bytes of fixed data in query */
 | 
			
		||||
#define NS_RRFIXEDSZ	10	/*%< #/bytes of fixed data in r record */
 | 
			
		||||
#define NS_INT32SZ	4	/*%< #/bytes of data in a u_int32_t */
 | 
			
		||||
#define NS_INT16SZ	2	/*%< #/bytes of data in a u_int16_t */
 | 
			
		||||
#define NS_INT8SZ	1	/*%< #/bytes of data in a u_int8_t */
 | 
			
		||||
#define NS_INADDRSZ	4	/*%< IPv4 T_A */
 | 
			
		||||
#define NS_IN6ADDRSZ	16	/*%< IPv6 T_AAAA */
 | 
			
		||||
#define NS_CMPRSFLGS	0xc0	/*%< Flag bits indicating name compression. */
 | 
			
		||||
#define NS_DEFAULTPORT	53	/*%< For both TCP and UDP. */
 | 
			
		||||
/*
 | 
			
		||||
 * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord()
 | 
			
		||||
 * in synch with it.
 | 
			
		||||
 */
 | 
			
		||||
typedef enum __ns_sect {
 | 
			
		||||
	ns_s_qd = 0,		/*%< Query: Question. */
 | 
			
		||||
	ns_s_zn = 0,		/*%< Update: Zone. */
 | 
			
		||||
	ns_s_an = 1,		/*%< Query: Answer. */
 | 
			
		||||
	ns_s_pr = 1,		/*%< Update: Prerequisites. */
 | 
			
		||||
	ns_s_ns = 2,		/*%< Query: Name servers. */
 | 
			
		||||
	ns_s_ud = 2,		/*%< Update: Update. */
 | 
			
		||||
	ns_s_ar = 3,		/*%< Query|Update: Additional records. */
 | 
			
		||||
	ns_s_max = 4
 | 
			
		||||
} ns_sect;
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * This is a message handle.  It is caller allocated and has no dynamic data.
 | 
			
		||||
 * This structure is intended to be opaque to all but ns_parse.c, thus the
 | 
			
		||||
 * leading _'s on the member names.  Use the accessor functions, not the _'s.
 | 
			
		||||
 */
 | 
			
		||||
typedef struct __ns_msg {
 | 
			
		||||
	const u_char	*_msg, *_eom;
 | 
			
		||||
	u_int16_t	_id, _flags, _counts[ns_s_max];
 | 
			
		||||
	const u_char	*_sections[ns_s_max];
 | 
			
		||||
	ns_sect		_sect;
 | 
			
		||||
	int		_rrnum;
 | 
			
		||||
	const u_char	*_msg_ptr;
 | 
			
		||||
} ns_msg;
 | 
			
		||||
 | 
			
		||||
/* Private data structure - do not use from outside library. */
 | 
			
		||||
struct _ns_flagdata {  int mask, shift;  };
 | 
			
		||||
extern const struct _ns_flagdata _ns_flagdata[];
 | 
			
		||||
 | 
			
		||||
/* Accessor macros - this is part of the public interface. */
 | 
			
		||||
 | 
			
		||||
#define ns_msg_id(handle) ((handle)._id + 0)
 | 
			
		||||
#define ns_msg_base(handle) ((handle)._msg + 0)
 | 
			
		||||
#define ns_msg_end(handle) ((handle)._eom + 0)
 | 
			
		||||
#define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
 | 
			
		||||
#define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * This is a parsed record.  It is caller allocated and has no dynamic data.
 | 
			
		||||
 */
 | 
			
		||||
typedef	struct __ns_rr {
 | 
			
		||||
	char		name[NS_MAXDNAME];
 | 
			
		||||
	u_int16_t	type;
 | 
			
		||||
	u_int16_t	rr_class;
 | 
			
		||||
	u_int32_t	ttl;
 | 
			
		||||
	u_int16_t	rdlength;
 | 
			
		||||
	const u_char *	rdata;
 | 
			
		||||
} ns_rr;
 | 
			
		||||
 | 
			
		||||
/* Accessor macros - this is part of the public interface. */
 | 
			
		||||
#define ns_rr_name(rr)	(((rr).name[0] != '\0') ? (rr).name : ".")
 | 
			
		||||
#define ns_rr_type(rr)	((ns_type)((rr).type + 0))
 | 
			
		||||
#define ns_rr_class(rr)	((ns_class)((rr).rr_class + 0))
 | 
			
		||||
#define ns_rr_ttl(rr)	((rr).ttl + 0)
 | 
			
		||||
#define ns_rr_rdlen(rr)	((rr).rdlength + 0)
 | 
			
		||||
#define ns_rr_rdata(rr)	((rr).rdata + 0)
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * These don't have to be in the same order as in the packet flags word,
 | 
			
		||||
 * and they can even overlap in some cases, but they will need to be kept
 | 
			
		||||
 * in synch with ns_parse.c:ns_flagdata[].
 | 
			
		||||
 */
 | 
			
		||||
typedef enum __ns_flag {
 | 
			
		||||
	ns_f_qr,		/*%< Question/Response. */
 | 
			
		||||
	ns_f_opcode,		/*%< Operation code. */
 | 
			
		||||
	ns_f_aa,		/*%< Authoritative Answer. */
 | 
			
		||||
	ns_f_tc,		/*%< Truncation occurred. */
 | 
			
		||||
	ns_f_rd,		/*%< Recursion Desired. */
 | 
			
		||||
	ns_f_ra,		/*%< Recursion Available. */
 | 
			
		||||
	ns_f_z,			/*%< MBZ. */
 | 
			
		||||
	ns_f_ad,		/*%< Authentic Data (DNSSEC). */
 | 
			
		||||
	ns_f_cd,		/*%< Checking Disabled (DNSSEC). */
 | 
			
		||||
	ns_f_rcode,		/*%< Response code. */
 | 
			
		||||
	ns_f_max
 | 
			
		||||
} ns_flag;
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * Currently defined opcodes.
 | 
			
		||||
 */
 | 
			
		||||
typedef enum __ns_opcode {
 | 
			
		||||
	ns_o_query = 0,		/*%< Standard query. */
 | 
			
		||||
	ns_o_iquery = 1,	/*%< Inverse query (deprecated/unsupported). */
 | 
			
		||||
	ns_o_status = 2,	/*%< Name server status query (unsupported). */
 | 
			
		||||
				/* Opcode 3 is undefined/reserved. */
 | 
			
		||||
	ns_o_notify = 4,	/*%< Zone change notification. */
 | 
			
		||||
	ns_o_update = 5,	/*%< Zone update message. */
 | 
			
		||||
	ns_o_max = 6
 | 
			
		||||
} ns_opcode;
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * Currently defined response codes.
 | 
			
		||||
 */
 | 
			
		||||
typedef	enum __ns_rcode {
 | 
			
		||||
	ns_r_noerror = 0,	/*%< No error occurred. */
 | 
			
		||||
	ns_r_formerr = 1,	/*%< Format error. */
 | 
			
		||||
	ns_r_servfail = 2,	/*%< Server failure. */
 | 
			
		||||
	ns_r_nxdomain = 3,	/*%< Name error. */
 | 
			
		||||
	ns_r_notimpl = 4,	/*%< Unimplemented. */
 | 
			
		||||
	ns_r_refused = 5,	/*%< Operation refused. */
 | 
			
		||||
	/* these are for BIND_UPDATE */
 | 
			
		||||
	ns_r_yxdomain = 6,	/*%< Name exists */
 | 
			
		||||
	ns_r_yxrrset = 7,	/*%< RRset exists */
 | 
			
		||||
	ns_r_nxrrset = 8,	/*%< RRset does not exist */
 | 
			
		||||
	ns_r_notauth = 9,	/*%< Not authoritative for zone */
 | 
			
		||||
	ns_r_notzone = 10,	/*%< Zone of record different from zone section */
 | 
			
		||||
	ns_r_max = 11,
 | 
			
		||||
	/* The following are EDNS extended rcodes */
 | 
			
		||||
	ns_r_badvers = 16,
 | 
			
		||||
	/* The following are TSIG errors */
 | 
			
		||||
	ns_r_badsig = 16,
 | 
			
		||||
	ns_r_badkey = 17,
 | 
			
		||||
	ns_r_badtime = 18
 | 
			
		||||
} ns_rcode;
 | 
			
		||||
 | 
			
		||||
/* BIND_UPDATE */
 | 
			
		||||
typedef enum __ns_update_operation {
 | 
			
		||||
	ns_uop_delete = 0,
 | 
			
		||||
	ns_uop_add = 1,
 | 
			
		||||
	ns_uop_max = 2
 | 
			
		||||
} ns_update_operation;
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * This structure is used for TSIG authenticated messages
 | 
			
		||||
 */
 | 
			
		||||
struct ns_tsig_key {
 | 
			
		||||
        char name[NS_MAXDNAME], alg[NS_MAXDNAME];
 | 
			
		||||
        unsigned char *data;
 | 
			
		||||
        int len;
 | 
			
		||||
};
 | 
			
		||||
typedef struct ns_tsig_key ns_tsig_key;
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * This structure is used for TSIG authenticated TCP messages
 | 
			
		||||
 */
 | 
			
		||||
struct ns_tcp_tsig_state {
 | 
			
		||||
	int counter;
 | 
			
		||||
	struct dst_key *key;
 | 
			
		||||
	void *ctx;
 | 
			
		||||
	unsigned char sig[NS_PACKETSZ];
 | 
			
		||||
	int siglen;
 | 
			
		||||
};
 | 
			
		||||
typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
 | 
			
		||||
 | 
			
		||||
#define NS_TSIG_FUDGE 300
 | 
			
		||||
#define NS_TSIG_TCP_COUNT 100
 | 
			
		||||
#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
 | 
			
		||||
 | 
			
		||||
#define NS_TSIG_ERROR_NO_TSIG -10
 | 
			
		||||
#define NS_TSIG_ERROR_NO_SPACE -11
 | 
			
		||||
#define NS_TSIG_ERROR_FORMERR -12
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * Currently defined type values for resources and queries.
 | 
			
		||||
 */
 | 
			
		||||
typedef enum __ns_type {
 | 
			
		||||
	ns_t_invalid = 0,	/*%< Cookie. */
 | 
			
		||||
	ns_t_a = 1,		/*%< Host address. */
 | 
			
		||||
	ns_t_ns = 2,		/*%< Authoritative server. */
 | 
			
		||||
	ns_t_md = 3,		/*%< Mail destination. */
 | 
			
		||||
	ns_t_mf = 4,		/*%< Mail forwarder. */
 | 
			
		||||
	ns_t_cname = 5,		/*%< Canonical name. */
 | 
			
		||||
	ns_t_soa = 6,		/*%< Start of authority zone. */
 | 
			
		||||
	ns_t_mb = 7,		/*%< Mailbox domain name. */
 | 
			
		||||
	ns_t_mg = 8,		/*%< Mail group member. */
 | 
			
		||||
	ns_t_mr = 9,		/*%< Mail rename name. */
 | 
			
		||||
	ns_t_null = 10,		/*%< Null resource record. */
 | 
			
		||||
	ns_t_wks = 11,		/*%< Well known service. */
 | 
			
		||||
	ns_t_ptr = 12,		/*%< Domain name pointer. */
 | 
			
		||||
	ns_t_hinfo = 13,	/*%< Host information. */
 | 
			
		||||
	ns_t_minfo = 14,	/*%< Mailbox information. */
 | 
			
		||||
	ns_t_mx = 15,		/*%< Mail routing information. */
 | 
			
		||||
	ns_t_txt = 16,		/*%< Text strings. */
 | 
			
		||||
	ns_t_rp = 17,		/*%< Responsible person. */
 | 
			
		||||
	ns_t_afsdb = 18,	/*%< AFS cell database. */
 | 
			
		||||
	ns_t_x25 = 19,		/*%< X_25 calling address. */
 | 
			
		||||
	ns_t_isdn = 20,		/*%< ISDN calling address. */
 | 
			
		||||
	ns_t_rt = 21,		/*%< Router. */
 | 
			
		||||
	ns_t_nsap = 22,		/*%< NSAP address. */
 | 
			
		||||
	ns_t_nsap_ptr = 23,	/*%< Reverse NSAP lookup (deprecated). */
 | 
			
		||||
	ns_t_sig = 24,		/*%< Security signature. */
 | 
			
		||||
	ns_t_key = 25,		/*%< Security key. */
 | 
			
		||||
	ns_t_px = 26,		/*%< X.400 mail mapping. */
 | 
			
		||||
	ns_t_gpos = 27,		/*%< Geographical position (withdrawn). */
 | 
			
		||||
	ns_t_aaaa = 28,		/*%< Ip6 Address. */
 | 
			
		||||
	ns_t_loc = 29,		/*%< Location Information. */
 | 
			
		||||
	ns_t_nxt = 30,		/*%< Next domain (security). */
 | 
			
		||||
	ns_t_eid = 31,		/*%< Endpoint identifier. */
 | 
			
		||||
	ns_t_nimloc = 32,	/*%< Nimrod Locator. */
 | 
			
		||||
	ns_t_srv = 33,		/*%< Server Selection. */
 | 
			
		||||
	ns_t_atma = 34,		/*%< ATM Address */
 | 
			
		||||
	ns_t_naptr = 35,	/*%< Naming Authority PoinTeR */
 | 
			
		||||
	ns_t_kx = 36,		/*%< Key Exchange */
 | 
			
		||||
	ns_t_cert = 37,		/*%< Certification record */
 | 
			
		||||
	ns_t_a6 = 38,		/*%< IPv6 address (deprecated, use ns_t_aaaa) */
 | 
			
		||||
	ns_t_dname = 39,	/*%< Non-terminal DNAME (for IPv6) */
 | 
			
		||||
	ns_t_sink = 40,		/*%< Kitchen sink (experimentatl) */
 | 
			
		||||
	ns_t_opt = 41,		/*%< EDNS0 option (meta-RR) */
 | 
			
		||||
	ns_t_apl = 42,		/*%< Address prefix list (RFC3123) */
 | 
			
		||||
	ns_t_tkey = 249,	/*%< Transaction key */
 | 
			
		||||
	ns_t_tsig = 250,	/*%< Transaction signature. */
 | 
			
		||||
	ns_t_ixfr = 251,	/*%< Incremental zone transfer. */
 | 
			
		||||
	ns_t_axfr = 252,	/*%< Transfer zone of authority. */
 | 
			
		||||
	ns_t_mailb = 253,	/*%< Transfer mailbox records. */
 | 
			
		||||
	ns_t_maila = 254,	/*%< Transfer mail agent records. */
 | 
			
		||||
	ns_t_any = 255,		/*%< Wildcard match. */
 | 
			
		||||
	ns_t_zxfr = 256,	/*%< BIND-specific, nonstandard. */
 | 
			
		||||
	ns_t_max = 65536
 | 
			
		||||
} ns_type;
 | 
			
		||||
 | 
			
		||||
/* Exclusively a QTYPE? (not also an RTYPE) */
 | 
			
		||||
#define	ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
 | 
			
		||||
		      (t) == ns_t_mailb || (t) == ns_t_maila)
 | 
			
		||||
/* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */
 | 
			
		||||
#define	ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
 | 
			
		||||
/* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */
 | 
			
		||||
#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
 | 
			
		||||
#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
 | 
			
		||||
#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
 | 
			
		||||
		       (t) == ns_t_zxfr)
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * Values for class field
 | 
			
		||||
 */
 | 
			
		||||
typedef enum __ns_class {
 | 
			
		||||
	ns_c_invalid = 0,	/*%< Cookie. */
 | 
			
		||||
	ns_c_in = 1,		/*%< Internet. */
 | 
			
		||||
	ns_c_2 = 2,		/*%< unallocated/unsupported. */
 | 
			
		||||
	ns_c_chaos = 3,		/*%< MIT Chaos-net. */
 | 
			
		||||
	ns_c_hs = 4,		/*%< MIT Hesiod. */
 | 
			
		||||
	/* Query class values which do not appear in resource records */
 | 
			
		||||
	ns_c_none = 254,	/*%< for prereq. sections in update requests */
 | 
			
		||||
	ns_c_any = 255,		/*%< Wildcard match. */
 | 
			
		||||
	ns_c_max = 65536
 | 
			
		||||
} ns_class;
 | 
			
		||||
 | 
			
		||||
/* DNSSEC constants. */
 | 
			
		||||
 | 
			
		||||
typedef enum __ns_key_types {
 | 
			
		||||
	ns_kt_rsa = 1,		/*%< key type RSA/MD5 */
 | 
			
		||||
	ns_kt_dh  = 2,		/*%< Diffie Hellman */
 | 
			
		||||
	ns_kt_dsa = 3,		/*%< Digital Signature Standard (MANDATORY) */
 | 
			
		||||
	ns_kt_private = 254	/*%< Private key type starts with OID */
 | 
			
		||||
} ns_key_types;
 | 
			
		||||
 | 
			
		||||
typedef enum __ns_cert_types {
 | 
			
		||||
	cert_t_pkix = 1,	/*%< PKIX (X.509v3) */
 | 
			
		||||
	cert_t_spki = 2,	/*%< SPKI */
 | 
			
		||||
	cert_t_pgp  = 3,	/*%< PGP */
 | 
			
		||||
	cert_t_url  = 253,	/*%< URL private type */
 | 
			
		||||
	cert_t_oid  = 254	/*%< OID private type */
 | 
			
		||||
} ns_cert_types;
 | 
			
		||||
 | 
			
		||||
/* Flags field of the KEY RR rdata. */
 | 
			
		||||
#define	NS_KEY_TYPEMASK		0xC000	/*%< Mask for "type" bits */
 | 
			
		||||
#define	NS_KEY_TYPE_AUTH_CONF	0x0000	/*%< Key usable for both */
 | 
			
		||||
#define	NS_KEY_TYPE_CONF_ONLY	0x8000	/*%< Key usable for confidentiality */
 | 
			
		||||
#define	NS_KEY_TYPE_AUTH_ONLY	0x4000	/*%< Key usable for authentication */
 | 
			
		||||
#define	NS_KEY_TYPE_NO_KEY	0xC000	/*%< No key usable for either; no key */
 | 
			
		||||
/* The type bits can also be interpreted independently, as single bits: */
 | 
			
		||||
#define	NS_KEY_NO_AUTH		0x8000	/*%< Key unusable for authentication */
 | 
			
		||||
#define	NS_KEY_NO_CONF		0x4000	/*%< Key unusable for confidentiality */
 | 
			
		||||
#define	NS_KEY_RESERVED2	0x2000	/* Security is *mandatory* if bit=0 */
 | 
			
		||||
#define	NS_KEY_EXTENDED_FLAGS	0x1000	/*%< reserved - must be zero */
 | 
			
		||||
#define	NS_KEY_RESERVED4	0x0800  /*%< reserved - must be zero */
 | 
			
		||||
#define	NS_KEY_RESERVED5	0x0400  /*%< reserved - must be zero */
 | 
			
		||||
#define	NS_KEY_NAME_TYPE	0x0300	/*%< these bits determine the type */
 | 
			
		||||
#define	NS_KEY_NAME_USER	0x0000	/*%< key is assoc. with user */
 | 
			
		||||
#define	NS_KEY_NAME_ENTITY	0x0200	/*%< key is assoc. with entity eg host */
 | 
			
		||||
#define	NS_KEY_NAME_ZONE	0x0100	/*%< key is zone key */
 | 
			
		||||
#define	NS_KEY_NAME_RESERVED	0x0300	/*%< reserved meaning */
 | 
			
		||||
#define	NS_KEY_RESERVED8	0x0080  /*%< reserved - must be zero */
 | 
			
		||||
#define	NS_KEY_RESERVED9	0x0040  /*%< reserved - must be zero */
 | 
			
		||||
#define	NS_KEY_RESERVED10	0x0020  /*%< reserved - must be zero */
 | 
			
		||||
#define	NS_KEY_RESERVED11	0x0010  /*%< reserved - must be zero */
 | 
			
		||||
#define	NS_KEY_SIGNATORYMASK	0x000F	/*%< key can sign RR's of same name */
 | 
			
		||||
#define	NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
 | 
			
		||||
				  NS_KEY_RESERVED4 | \
 | 
			
		||||
				  NS_KEY_RESERVED5 | \
 | 
			
		||||
				  NS_KEY_RESERVED8 | \
 | 
			
		||||
				  NS_KEY_RESERVED9 | \
 | 
			
		||||
				  NS_KEY_RESERVED10 | \
 | 
			
		||||
				  NS_KEY_RESERVED11 )
 | 
			
		||||
#define NS_KEY_RESERVED_BITMASK2 0xFFFF /*%< no bits defined here */
 | 
			
		||||
/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */
 | 
			
		||||
#define	NS_ALG_MD5RSA		1	/*%< MD5 with RSA */
 | 
			
		||||
#define	NS_ALG_DH               2	/*%< Diffie Hellman KEY */
 | 
			
		||||
#define	NS_ALG_DSA              3	/*%< DSA KEY */
 | 
			
		||||
#define	NS_ALG_DSS              NS_ALG_DSA
 | 
			
		||||
#define	NS_ALG_EXPIRE_ONLY	253	/*%< No alg, no security */
 | 
			
		||||
#define	NS_ALG_PRIVATE_OID	254	/*%< Key begins with OID giving alg */
 | 
			
		||||
/* Protocol values  */
 | 
			
		||||
/* value 0 is reserved */
 | 
			
		||||
#define NS_KEY_PROT_TLS         1
 | 
			
		||||
#define NS_KEY_PROT_EMAIL       2
 | 
			
		||||
#define NS_KEY_PROT_DNSSEC      3
 | 
			
		||||
#define NS_KEY_PROT_IPSEC       4
 | 
			
		||||
#define NS_KEY_PROT_ANY		255
 | 
			
		||||
 | 
			
		||||
/* Signatures */
 | 
			
		||||
#define	NS_MD5RSA_MIN_BITS	 512	/*%< Size of a mod or exp in bits */
 | 
			
		||||
#define	NS_MD5RSA_MAX_BITS	4096
 | 
			
		||||
	/* Total of binary mod and exp */
 | 
			
		||||
#define	NS_MD5RSA_MAX_BYTES	((NS_MD5RSA_MAX_BITS+7/8)*2+3)
 | 
			
		||||
	/* Max length of text sig block */
 | 
			
		||||
#define	NS_MD5RSA_MAX_BASE64	(((NS_MD5RSA_MAX_BYTES+2)/3)*4)
 | 
			
		||||
#define NS_MD5RSA_MIN_SIZE	((NS_MD5RSA_MIN_BITS+7)/8)
 | 
			
		||||
#define NS_MD5RSA_MAX_SIZE	((NS_MD5RSA_MAX_BITS+7)/8)
 | 
			
		||||
 | 
			
		||||
#define NS_DSA_SIG_SIZE         41
 | 
			
		||||
#define NS_DSA_MIN_SIZE         213
 | 
			
		||||
#define NS_DSA_MAX_BYTES        405
 | 
			
		||||
 | 
			
		||||
/* Offsets into SIG record rdata to find various values */
 | 
			
		||||
#define	NS_SIG_TYPE	0	/*%< Type flags */
 | 
			
		||||
#define	NS_SIG_ALG	2	/*%< Algorithm */
 | 
			
		||||
#define	NS_SIG_LABELS	3	/*%< How many labels in name */
 | 
			
		||||
#define	NS_SIG_OTTL	4	/*%< Original TTL */
 | 
			
		||||
#define	NS_SIG_EXPIR	8	/*%< Expiration time */
 | 
			
		||||
#define	NS_SIG_SIGNED	12	/*%< Signature time */
 | 
			
		||||
#define	NS_SIG_FOOT	16	/*%< Key footprint */
 | 
			
		||||
#define	NS_SIG_SIGNER	18	/*%< Domain name of who signed it */
 | 
			
		||||
/* How RR types are represented as bit-flags in NXT records */
 | 
			
		||||
#define	NS_NXT_BITS 8
 | 
			
		||||
#define	NS_NXT_BIT_SET(  n,p) (p[(n)/NS_NXT_BITS] |=  (0x80>>((n)%NS_NXT_BITS)))
 | 
			
		||||
#define	NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
 | 
			
		||||
#define	NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] &   (0x80>>((n)%NS_NXT_BITS)))
 | 
			
		||||
#define NS_NXT_MAX 127
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * EDNS0 extended flags and option codes, host order.
 | 
			
		||||
 */
 | 
			
		||||
#define NS_OPT_DNSSEC_OK        0x8000U
 | 
			
		||||
#define NS_OPT_NSID		3
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * Inline versions of get/put short/long.  Pointer is advanced.
 | 
			
		||||
 */
 | 
			
		||||
#define NS_GET16(s, cp) do { \
 | 
			
		||||
	const u_char *t_cp = (const u_char *)(cp); \
 | 
			
		||||
	(s) = ((u_int16_t)t_cp[0] << 8) \
 | 
			
		||||
	    | ((u_int16_t)t_cp[1]) \
 | 
			
		||||
	    ; \
 | 
			
		||||
	(cp) += NS_INT16SZ; \
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
#define NS_GET32(l, cp) do { \
 | 
			
		||||
	const u_char *t_cp = (const u_char *)(cp); \
 | 
			
		||||
	(l) = ((u_int32_t)t_cp[0] << 24) \
 | 
			
		||||
	    | ((u_int32_t)t_cp[1] << 16) \
 | 
			
		||||
	    | ((u_int32_t)t_cp[2] << 8) \
 | 
			
		||||
	    | ((u_int32_t)t_cp[3]) \
 | 
			
		||||
	    ; \
 | 
			
		||||
	(cp) += NS_INT32SZ; \
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
#define NS_PUT16(s, cp) do { \
 | 
			
		||||
	u_int16_t t_s = (u_int16_t)(s); \
 | 
			
		||||
	u_char *t_cp = (u_char *)(cp); \
 | 
			
		||||
	*t_cp++ = t_s >> 8; \
 | 
			
		||||
	*t_cp   = t_s; \
 | 
			
		||||
	(cp) += NS_INT16SZ; \
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
#define NS_PUT32(l, cp) do { \
 | 
			
		||||
	u_int32_t t_l = (u_int32_t)(l); \
 | 
			
		||||
	u_char *t_cp = (u_char *)(cp); \
 | 
			
		||||
	*t_cp++ = t_l >> 24; \
 | 
			
		||||
	*t_cp++ = t_l >> 16; \
 | 
			
		||||
	*t_cp++ = t_l >> 8; \
 | 
			
		||||
	*t_cp   = t_l; \
 | 
			
		||||
	(cp) += NS_INT32SZ; \
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
int		ns_msg_getflag (ns_msg, int) __THROW;
 | 
			
		||||
u_int		ns_get16 (const u_char *) __THROW;
 | 
			
		||||
u_long		ns_get32 (const u_char *) __THROW;
 | 
			
		||||
void		ns_put16 (u_int, u_char *) __THROW;
 | 
			
		||||
void		ns_put32 (u_long, u_char *) __THROW;
 | 
			
		||||
int		ns_initparse (const u_char *, int, ns_msg *) __THROW;
 | 
			
		||||
int		ns_skiprr (const u_char *, const u_char *, ns_sect, int)
 | 
			
		||||
     __THROW;
 | 
			
		||||
int		ns_parserr (ns_msg *, ns_sect, int, ns_rr *) __THROW;
 | 
			
		||||
int		ns_sprintrr (const ns_msg *, const ns_rr *,
 | 
			
		||||
			     const char *, const char *, char *, size_t)
 | 
			
		||||
     __THROW;
 | 
			
		||||
int		ns_sprintrrf (const u_char *, size_t, const char *,
 | 
			
		||||
			      ns_class, ns_type, u_long, const u_char *,
 | 
			
		||||
			      size_t, const char *, const char *,
 | 
			
		||||
			      char *, size_t) __THROW;
 | 
			
		||||
int		ns_format_ttl (u_long, char *, size_t) __THROW;
 | 
			
		||||
int		ns_parse_ttl (const char *, u_long *) __THROW;
 | 
			
		||||
u_int32_t	ns_datetosecs (const char *, int *) __THROW;
 | 
			
		||||
int		ns_name_ntol (const u_char *, u_char *, size_t) __THROW;
 | 
			
		||||
int		ns_name_ntop (const u_char *, char *, size_t) __THROW;
 | 
			
		||||
int		ns_name_pton (const char *, u_char *, size_t) __THROW;
 | 
			
		||||
int		ns_name_unpack (const u_char *, const u_char *,
 | 
			
		||||
				const u_char *, u_char *, size_t) __THROW;
 | 
			
		||||
int		ns_name_pack (const u_char *, u_char *, int,
 | 
			
		||||
			      const u_char **, const u_char **) __THROW;
 | 
			
		||||
int		ns_name_uncompress (const u_char *, const u_char *,
 | 
			
		||||
				    const u_char *, char *, size_t) __THROW;
 | 
			
		||||
int		ns_name_compress (const char *, u_char *, size_t,
 | 
			
		||||
				  const u_char **, const u_char **) __THROW;
 | 
			
		||||
int		ns_name_skip (const u_char **, const u_char *) __THROW;
 | 
			
		||||
void		ns_name_rollback (const u_char *, const u_char **,
 | 
			
		||||
				  const u_char **) __THROW;
 | 
			
		||||
int		ns_sign (u_char *, int *, int, int, void *,
 | 
			
		||||
			 const u_char *, int, u_char *, int *, time_t) __THROW;
 | 
			
		||||
int		ns_sign2 (u_char *, int *, int, int, void *,
 | 
			
		||||
			  const u_char *, int, u_char *, int *, time_t,
 | 
			
		||||
			  u_char **, u_char **) __THROW;
 | 
			
		||||
int		ns_sign_tcp (u_char *, int *, int, int,
 | 
			
		||||
			     ns_tcp_tsig_state *, int) __THROW;
 | 
			
		||||
int		ns_sign_tcp2 (u_char *, int *, int, int,
 | 
			
		||||
			      ns_tcp_tsig_state *, int,
 | 
			
		||||
			      u_char **, u_char **) __THROW;
 | 
			
		||||
int		ns_sign_tcp_init (void *, const u_char *, int,
 | 
			
		||||
				  ns_tcp_tsig_state *) __THROW;
 | 
			
		||||
u_char		*ns_find_tsig (u_char *, u_char *) __THROW;
 | 
			
		||||
int		ns_verify (u_char *, int *, void *, const u_char *, int,
 | 
			
		||||
			   u_char *, int *, time_t *, int) __THROW;
 | 
			
		||||
int		ns_verify_tcp (u_char *, int *, ns_tcp_tsig_state *, int)
 | 
			
		||||
     __THROW;
 | 
			
		||||
int		ns_verify_tcp_init (void *, const u_char *, int,
 | 
			
		||||
				    ns_tcp_tsig_state *) __THROW;
 | 
			
		||||
int		ns_samedomain (const char *, const char *) __THROW;
 | 
			
		||||
int		ns_subdomain (const char *, const char *) __THROW;
 | 
			
		||||
int		ns_makecanon (const char *, char *, size_t) __THROW;
 | 
			
		||||
int		ns_samename (const char *, const char *) __THROW;
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
#ifdef BIND_4_COMPAT
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* !_ARPA_NAMESER_H_ */
 | 
			
		||||
/*! \file */
 | 
			
		||||
@@ -0,0 +1,187 @@
 | 
			
		||||
/* Copyright (c) 1983, 1989
 | 
			
		||||
 *    The Regents of the University of California.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 4. Neither the name of the University nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 *      from nameser.h	8.1 (Berkeley) 6/2/93
 | 
			
		||||
 *	$BINDId: nameser_compat.h,v 8.11 1999/01/02 08:00:58 vixie Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _ARPA_NAMESER_COMPAT_
 | 
			
		||||
#define	_ARPA_NAMESER_COMPAT_
 | 
			
		||||
 | 
			
		||||
#define	__BIND		19950621	/*%< (DEAD) interface version stamp. */
 | 
			
		||||
 | 
			
		||||
#include <endian.h>
 | 
			
		||||
 | 
			
		||||
/*%
 | 
			
		||||
 * Structure for query header.  The order of the fields is machine- and
 | 
			
		||||
 * compiler-dependent, depending on the byte/bit order and the layout
 | 
			
		||||
 * of bit fields.  We use bit fields only in int variables, as this
 | 
			
		||||
 * is all ANSI requires.  This requires a somewhat confusing rearrangement.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	unsigned	id :16;		/*%< query identification number */
 | 
			
		||||
#if BYTE_ORDER == BIG_ENDIAN
 | 
			
		||||
			/* fields in third byte */
 | 
			
		||||
	unsigned	qr: 1;		/*%< response flag */
 | 
			
		||||
	unsigned	opcode: 4;	/*%< purpose of message */
 | 
			
		||||
	unsigned	aa: 1;		/*%< authoritive answer */
 | 
			
		||||
	unsigned	tc: 1;		/*%< truncated message */
 | 
			
		||||
	unsigned	rd: 1;		/*%< recursion desired */
 | 
			
		||||
			/* fields in fourth byte */
 | 
			
		||||
	unsigned	ra: 1;		/*%< recursion available */
 | 
			
		||||
	unsigned	unused :1;	/*%< unused bits (MBZ as of 4.9.3a3) */
 | 
			
		||||
	unsigned	ad: 1;		/*%< authentic data from named */
 | 
			
		||||
	unsigned	cd: 1;		/*%< checking disabled by resolver */
 | 
			
		||||
	unsigned	rcode :4;	/*%< response code */
 | 
			
		||||
#endif
 | 
			
		||||
#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
 | 
			
		||||
			/* fields in third byte */
 | 
			
		||||
	unsigned	rd :1;		/*%< recursion desired */
 | 
			
		||||
	unsigned	tc :1;		/*%< truncated message */
 | 
			
		||||
	unsigned	aa :1;		/*%< authoritive answer */
 | 
			
		||||
	unsigned	opcode :4;	/*%< purpose of message */
 | 
			
		||||
	unsigned	qr :1;		/*%< response flag */
 | 
			
		||||
			/* fields in fourth byte */
 | 
			
		||||
	unsigned	rcode :4;	/*%< response code */
 | 
			
		||||
	unsigned	cd: 1;		/*%< checking disabled by resolver */
 | 
			
		||||
	unsigned	ad: 1;		/*%< authentic data from named */
 | 
			
		||||
	unsigned	unused :1;	/*%< unused bits (MBZ as of 4.9.3a3) */
 | 
			
		||||
	unsigned	ra :1;		/*%< recursion available */
 | 
			
		||||
#endif
 | 
			
		||||
			/* remaining bytes */
 | 
			
		||||
	unsigned	qdcount :16;	/*%< number of question entries */
 | 
			
		||||
	unsigned	ancount :16;	/*%< number of answer entries */
 | 
			
		||||
	unsigned	nscount :16;	/*%< number of authority entries */
 | 
			
		||||
	unsigned	arcount :16;	/*%< number of resource entries */
 | 
			
		||||
} HEADER;
 | 
			
		||||
 | 
			
		||||
#define PACKETSZ	NS_PACKETSZ
 | 
			
		||||
#define MAXDNAME	NS_MAXDNAME
 | 
			
		||||
#define MAXCDNAME	NS_MAXCDNAME
 | 
			
		||||
#define MAXLABEL	NS_MAXLABEL
 | 
			
		||||
#define	HFIXEDSZ	NS_HFIXEDSZ
 | 
			
		||||
#define QFIXEDSZ	NS_QFIXEDSZ
 | 
			
		||||
#define RRFIXEDSZ	NS_RRFIXEDSZ
 | 
			
		||||
#define	INT32SZ		NS_INT32SZ
 | 
			
		||||
#define	INT16SZ		NS_INT16SZ
 | 
			
		||||
#define INT8SZ		NS_INT8SZ
 | 
			
		||||
#define	INADDRSZ	NS_INADDRSZ
 | 
			
		||||
#define	IN6ADDRSZ	NS_IN6ADDRSZ
 | 
			
		||||
#define	INDIR_MASK	NS_CMPRSFLGS
 | 
			
		||||
#define NAMESERVER_PORT	NS_DEFAULTPORT
 | 
			
		||||
 | 
			
		||||
#define S_ZONE		ns_s_zn
 | 
			
		||||
#define S_PREREQ	ns_s_pr
 | 
			
		||||
#define S_UPDATE	ns_s_ud
 | 
			
		||||
#define S_ADDT		ns_s_ar
 | 
			
		||||
 | 
			
		||||
#define QUERY		ns_o_query
 | 
			
		||||
#define IQUERY		ns_o_iquery
 | 
			
		||||
#define STATUS		ns_o_status
 | 
			
		||||
#define	NS_NOTIFY_OP	ns_o_notify
 | 
			
		||||
#define	NS_UPDATE_OP	ns_o_update
 | 
			
		||||
 | 
			
		||||
#define NOERROR		ns_r_noerror
 | 
			
		||||
#define FORMERR		ns_r_formerr
 | 
			
		||||
#define SERVFAIL	ns_r_servfail
 | 
			
		||||
#define NXDOMAIN	ns_r_nxdomain
 | 
			
		||||
#define NOTIMP		ns_r_notimpl
 | 
			
		||||
#define REFUSED		ns_r_refused
 | 
			
		||||
#define YXDOMAIN	ns_r_yxdomain
 | 
			
		||||
#define YXRRSET		ns_r_yxrrset
 | 
			
		||||
#define NXRRSET		ns_r_nxrrset
 | 
			
		||||
#define NOTAUTH		ns_r_notauth
 | 
			
		||||
#define NOTZONE		ns_r_notzone
 | 
			
		||||
/*#define BADSIG		ns_r_badsig*/
 | 
			
		||||
/*#define BADKEY		ns_r_badkey*/
 | 
			
		||||
/*#define BADTIME		ns_r_badtime*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define DELETE		ns_uop_delete
 | 
			
		||||
#define ADD		ns_uop_add
 | 
			
		||||
 | 
			
		||||
#define T_A		ns_t_a
 | 
			
		||||
#define T_NS		ns_t_ns
 | 
			
		||||
#define T_MD		ns_t_md
 | 
			
		||||
#define T_MF		ns_t_mf
 | 
			
		||||
#define T_CNAME		ns_t_cname
 | 
			
		||||
#define T_SOA		ns_t_soa
 | 
			
		||||
#define T_MB		ns_t_mb
 | 
			
		||||
#define T_MG		ns_t_mg
 | 
			
		||||
#define T_MR		ns_t_mr
 | 
			
		||||
#define T_NULL		ns_t_null
 | 
			
		||||
#define T_WKS		ns_t_wks
 | 
			
		||||
#define T_PTR		ns_t_ptr
 | 
			
		||||
#define T_HINFO		ns_t_hinfo
 | 
			
		||||
#define T_MINFO		ns_t_minfo
 | 
			
		||||
#define T_MX		ns_t_mx
 | 
			
		||||
#define T_TXT		ns_t_txt
 | 
			
		||||
#define	T_RP		ns_t_rp
 | 
			
		||||
#define T_AFSDB		ns_t_afsdb
 | 
			
		||||
#define T_X25		ns_t_x25
 | 
			
		||||
#define T_ISDN		ns_t_isdn
 | 
			
		||||
#define T_RT		ns_t_rt
 | 
			
		||||
#define T_NSAP		ns_t_nsap
 | 
			
		||||
#define T_NSAP_PTR	ns_t_nsap_ptr
 | 
			
		||||
#define	T_SIG		ns_t_sig
 | 
			
		||||
#define	T_KEY		ns_t_key
 | 
			
		||||
#define	T_PX		ns_t_px
 | 
			
		||||
#define	T_GPOS		ns_t_gpos
 | 
			
		||||
#define	T_AAAA		ns_t_aaaa
 | 
			
		||||
#define	T_LOC		ns_t_loc
 | 
			
		||||
#define	T_NXT		ns_t_nxt
 | 
			
		||||
#define	T_EID		ns_t_eid
 | 
			
		||||
#define	T_NIMLOC	ns_t_nimloc
 | 
			
		||||
#define	T_SRV		ns_t_srv
 | 
			
		||||
#define T_ATMA		ns_t_atma
 | 
			
		||||
#define T_NAPTR		ns_t_naptr
 | 
			
		||||
#define T_A6		ns_t_a6
 | 
			
		||||
#define T_DNAME		ns_t_dname
 | 
			
		||||
#define	T_TSIG		ns_t_tsig
 | 
			
		||||
#define	T_IXFR		ns_t_ixfr
 | 
			
		||||
#define T_AXFR		ns_t_axfr
 | 
			
		||||
#define T_MAILB		ns_t_mailb
 | 
			
		||||
#define T_MAILA		ns_t_maila
 | 
			
		||||
#define T_ANY		ns_t_any
 | 
			
		||||
 | 
			
		||||
#define C_IN		ns_c_in
 | 
			
		||||
#define C_CHAOS		ns_c_chaos
 | 
			
		||||
#define C_HS		ns_c_hs
 | 
			
		||||
/* BIND_UPDATE */
 | 
			
		||||
#define C_NONE		ns_c_none
 | 
			
		||||
#define C_ANY		ns_c_any
 | 
			
		||||
 | 
			
		||||
#define	GETSHORT		NS_GET16
 | 
			
		||||
#define	GETLONG			NS_GET32
 | 
			
		||||
#define	PUTSHORT		NS_PUT16
 | 
			
		||||
#define	PUTLONG			NS_PUT32
 | 
			
		||||
 | 
			
		||||
#endif /* _ARPA_NAMESER_COMPAT_ */
 | 
			
		||||
/*! \file */
 | 
			
		||||
@@ -0,0 +1,316 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 1983, 1993
 | 
			
		||||
 *	The Regents of the University of California.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 4. Neither the name of the University nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 *	@(#)telnet.h	8.2 (Berkeley) 12/15/93
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _ARPA_TELNET_H
 | 
			
		||||
#define	_ARPA_TELNET_H 1
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Definitions for the TELNET protocol.
 | 
			
		||||
 */
 | 
			
		||||
#define	IAC	255		/* interpret as command: */
 | 
			
		||||
#define	DONT	254		/* you are not to use option */
 | 
			
		||||
#define	DO	253		/* please, you use option */
 | 
			
		||||
#define	WONT	252		/* I won't use option */
 | 
			
		||||
#define	WILL	251		/* I will use option */
 | 
			
		||||
#define	SB	250		/* interpret as subnegotiation */
 | 
			
		||||
#define	GA	249		/* you may reverse the line */
 | 
			
		||||
#define	EL	248		/* erase the current line */
 | 
			
		||||
#define	EC	247		/* erase the current character */
 | 
			
		||||
#define	AYT	246		/* are you there */
 | 
			
		||||
#define	AO	245		/* abort output--but let prog finish */
 | 
			
		||||
#define	IP	244		/* interrupt process--permanently */
 | 
			
		||||
#define	BREAK	243		/* break */
 | 
			
		||||
#define	DM	242		/* data mark--for connect. cleaning */
 | 
			
		||||
#define	NOP	241		/* nop */
 | 
			
		||||
#define	SE	240		/* end sub negotiation */
 | 
			
		||||
#define EOR     239             /* end of record (transparent mode) */
 | 
			
		||||
#define	ABORT	238		/* Abort process */
 | 
			
		||||
#define	SUSP	237		/* Suspend process */
 | 
			
		||||
#define	xEOF	236		/* End of file: EOF is already used... */
 | 
			
		||||
 | 
			
		||||
#define SYNCH	242		/* for telfunc calls */
 | 
			
		||||
 | 
			
		||||
#ifdef TELCMDS
 | 
			
		||||
char *telcmds[] = {
 | 
			
		||||
	"EOF", "SUSP", "ABORT", "EOR",
 | 
			
		||||
	"SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
 | 
			
		||||
	"EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0,
 | 
			
		||||
};
 | 
			
		||||
#else
 | 
			
		||||
extern char *telcmds[];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define	TELCMD_FIRST	xEOF
 | 
			
		||||
#define	TELCMD_LAST	IAC
 | 
			
		||||
#define	TELCMD_OK(x)	((unsigned int)(x) <= TELCMD_LAST && \
 | 
			
		||||
			 (unsigned int)(x) >= TELCMD_FIRST)
 | 
			
		||||
#define	TELCMD(x)	telcmds[(x)-TELCMD_FIRST]
 | 
			
		||||
 | 
			
		||||
/* telnet options */
 | 
			
		||||
#define TELOPT_BINARY	0	/* 8-bit data path */
 | 
			
		||||
#define TELOPT_ECHO	1	/* echo */
 | 
			
		||||
#define	TELOPT_RCP	2	/* prepare to reconnect */
 | 
			
		||||
#define	TELOPT_SGA	3	/* suppress go ahead */
 | 
			
		||||
#define	TELOPT_NAMS	4	/* approximate message size */
 | 
			
		||||
#define	TELOPT_STATUS	5	/* give status */
 | 
			
		||||
#define	TELOPT_TM	6	/* timing mark */
 | 
			
		||||
#define	TELOPT_RCTE	7	/* remote controlled transmission and echo */
 | 
			
		||||
#define TELOPT_NAOL 	8	/* negotiate about output line width */
 | 
			
		||||
#define TELOPT_NAOP 	9	/* negotiate about output page size */
 | 
			
		||||
#define TELOPT_NAOCRD	10	/* negotiate about CR disposition */
 | 
			
		||||
#define TELOPT_NAOHTS	11	/* negotiate about horizontal tabstops */
 | 
			
		||||
#define TELOPT_NAOHTD	12	/* negotiate about horizontal tab disposition */
 | 
			
		||||
#define TELOPT_NAOFFD	13	/* negotiate about formfeed disposition */
 | 
			
		||||
#define TELOPT_NAOVTS	14	/* negotiate about vertical tab stops */
 | 
			
		||||
#define TELOPT_NAOVTD	15	/* negotiate about vertical tab disposition */
 | 
			
		||||
#define TELOPT_NAOLFD	16	/* negotiate about output LF disposition */
 | 
			
		||||
#define TELOPT_XASCII	17	/* extended ascii character set */
 | 
			
		||||
#define	TELOPT_LOGOUT	18	/* force logout */
 | 
			
		||||
#define	TELOPT_BM	19	/* byte macro */
 | 
			
		||||
#define	TELOPT_DET	20	/* data entry terminal */
 | 
			
		||||
#define	TELOPT_SUPDUP	21	/* supdup protocol */
 | 
			
		||||
#define	TELOPT_SUPDUPOUTPUT 22	/* supdup output */
 | 
			
		||||
#define	TELOPT_SNDLOC	23	/* send location */
 | 
			
		||||
#define	TELOPT_TTYPE	24	/* terminal type */
 | 
			
		||||
#define	TELOPT_EOR	25	/* end or record */
 | 
			
		||||
#define	TELOPT_TUID	26	/* TACACS user identification */
 | 
			
		||||
#define	TELOPT_OUTMRK	27	/* output marking */
 | 
			
		||||
#define	TELOPT_TTYLOC	28	/* terminal location number */
 | 
			
		||||
#define	TELOPT_3270REGIME 29	/* 3270 regime */
 | 
			
		||||
#define	TELOPT_X3PAD	30	/* X.3 PAD */
 | 
			
		||||
#define	TELOPT_NAWS	31	/* window size */
 | 
			
		||||
#define	TELOPT_TSPEED	32	/* terminal speed */
 | 
			
		||||
#define	TELOPT_LFLOW	33	/* remote flow control */
 | 
			
		||||
#define TELOPT_LINEMODE	34	/* Linemode option */
 | 
			
		||||
#define TELOPT_XDISPLOC	35	/* X Display Location */
 | 
			
		||||
#define TELOPT_OLD_ENVIRON 36	/* Old - Environment variables */
 | 
			
		||||
#define	TELOPT_AUTHENTICATION 37/* Authenticate */
 | 
			
		||||
#define	TELOPT_ENCRYPT	38	/* Encryption option */
 | 
			
		||||
#define TELOPT_NEW_ENVIRON 39	/* New - Environment variables */
 | 
			
		||||
#define	TELOPT_EXOPL	255	/* extended-options-list */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define	NTELOPTS	(1+TELOPT_NEW_ENVIRON)
 | 
			
		||||
#ifdef TELOPTS
 | 
			
		||||
char *telopts[NTELOPTS+1] = {
 | 
			
		||||
	"BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
 | 
			
		||||
	"STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
 | 
			
		||||
	"NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
 | 
			
		||||
	"NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
 | 
			
		||||
	"DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
 | 
			
		||||
	"SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
 | 
			
		||||
	"TACACS UID", "OUTPUT MARKING", "TTYLOC",
 | 
			
		||||
	"3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
 | 
			
		||||
	"LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
 | 
			
		||||
	"ENCRYPT", "NEW-ENVIRON",
 | 
			
		||||
	0,
 | 
			
		||||
};
 | 
			
		||||
#define	TELOPT_FIRST	TELOPT_BINARY
 | 
			
		||||
#define	TELOPT_LAST	TELOPT_NEW_ENVIRON
 | 
			
		||||
#define	TELOPT_OK(x)	((unsigned int)(x) <= TELOPT_LAST)
 | 
			
		||||
#define	TELOPT(x)	telopts[(x)-TELOPT_FIRST]
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* sub-option qualifiers */
 | 
			
		||||
#define	TELQUAL_IS	0	/* option is... */
 | 
			
		||||
#define	TELQUAL_SEND	1	/* send option */
 | 
			
		||||
#define	TELQUAL_INFO	2	/* ENVIRON: informational version of IS */
 | 
			
		||||
#define	TELQUAL_REPLY	2	/* AUTHENTICATION: client version of IS */
 | 
			
		||||
#define	TELQUAL_NAME	3	/* AUTHENTICATION: client version of IS */
 | 
			
		||||
 | 
			
		||||
#define	LFLOW_OFF		0	/* Disable remote flow control */
 | 
			
		||||
#define	LFLOW_ON		1	/* Enable remote flow control */
 | 
			
		||||
#define	LFLOW_RESTART_ANY	2	/* Restart output on any char */
 | 
			
		||||
#define	LFLOW_RESTART_XON	3	/* Restart output only on XON */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * LINEMODE suboptions
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define	LM_MODE		1
 | 
			
		||||
#define	LM_FORWARDMASK	2
 | 
			
		||||
#define	LM_SLC		3
 | 
			
		||||
 | 
			
		||||
#define	MODE_EDIT	0x01
 | 
			
		||||
#define	MODE_TRAPSIG	0x02
 | 
			
		||||
#define	MODE_ACK	0x04
 | 
			
		||||
#define MODE_SOFT_TAB	0x08
 | 
			
		||||
#define MODE_LIT_ECHO	0x10
 | 
			
		||||
 | 
			
		||||
#define	MODE_MASK	0x1f
 | 
			
		||||
 | 
			
		||||
/* Not part of protocol, but needed to simplify things... */
 | 
			
		||||
#define MODE_FLOW		0x0100
 | 
			
		||||
#define MODE_ECHO		0x0200
 | 
			
		||||
#define MODE_INBIN		0x0400
 | 
			
		||||
#define MODE_OUTBIN		0x0800
 | 
			
		||||
#define MODE_FORCE		0x1000
 | 
			
		||||
 | 
			
		||||
#define	SLC_SYNCH	1
 | 
			
		||||
#define	SLC_BRK		2
 | 
			
		||||
#define	SLC_IP		3
 | 
			
		||||
#define	SLC_AO		4
 | 
			
		||||
#define	SLC_AYT		5
 | 
			
		||||
#define	SLC_EOR		6
 | 
			
		||||
#define	SLC_ABORT	7
 | 
			
		||||
#define	SLC_EOF		8
 | 
			
		||||
#define	SLC_SUSP	9
 | 
			
		||||
#define	SLC_EC		10
 | 
			
		||||
#define	SLC_EL		11
 | 
			
		||||
#define	SLC_EW		12
 | 
			
		||||
#define	SLC_RP		13
 | 
			
		||||
#define	SLC_LNEXT	14
 | 
			
		||||
#define	SLC_XON		15
 | 
			
		||||
#define	SLC_XOFF	16
 | 
			
		||||
#define	SLC_FORW1	17
 | 
			
		||||
#define	SLC_FORW2	18
 | 
			
		||||
 | 
			
		||||
#define	NSLC		18
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * For backwards compatibility, we define SLC_NAMES to be the
 | 
			
		||||
 * list of names if SLC_NAMES is not defined.
 | 
			
		||||
 */
 | 
			
		||||
#define	SLC_NAMELIST	"0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
 | 
			
		||||
			"ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
 | 
			
		||||
			"LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0,
 | 
			
		||||
#ifdef	SLC_NAMES
 | 
			
		||||
char *slc_names[] = {
 | 
			
		||||
	SLC_NAMELIST
 | 
			
		||||
};
 | 
			
		||||
#else
 | 
			
		||||
extern char *slc_names[];
 | 
			
		||||
#define	SLC_NAMES SLC_NAMELIST
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define	SLC_NAME_OK(x)	((unsigned int)(x) <= NSLC)
 | 
			
		||||
#define SLC_NAME(x)	slc_names[x]
 | 
			
		||||
 | 
			
		||||
#define	SLC_NOSUPPORT	0
 | 
			
		||||
#define	SLC_CANTCHANGE	1
 | 
			
		||||
#define	SLC_VARIABLE	2
 | 
			
		||||
#define	SLC_DEFAULT	3
 | 
			
		||||
#define	SLC_LEVELBITS	0x03
 | 
			
		||||
 | 
			
		||||
#define	SLC_FUNC	0
 | 
			
		||||
#define	SLC_FLAGS	1
 | 
			
		||||
#define	SLC_VALUE	2
 | 
			
		||||
 | 
			
		||||
#define	SLC_ACK		0x80
 | 
			
		||||
#define	SLC_FLUSHIN	0x40
 | 
			
		||||
#define	SLC_FLUSHOUT	0x20
 | 
			
		||||
 | 
			
		||||
#define	OLD_ENV_VAR	1
 | 
			
		||||
#define	OLD_ENV_VALUE	0
 | 
			
		||||
#define	NEW_ENV_VAR	0
 | 
			
		||||
#define	NEW_ENV_VALUE	1
 | 
			
		||||
#define	ENV_ESC		2
 | 
			
		||||
#define ENV_USERVAR	3
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * AUTHENTICATION suboptions
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Who is authenticating who ...
 | 
			
		||||
 */
 | 
			
		||||
#define	AUTH_WHO_CLIENT		0	/* Client authenticating server */
 | 
			
		||||
#define	AUTH_WHO_SERVER		1	/* Server authenticating client */
 | 
			
		||||
#define	AUTH_WHO_MASK		1
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * amount of authentication done
 | 
			
		||||
 */
 | 
			
		||||
#define	AUTH_HOW_ONE_WAY	0
 | 
			
		||||
#define	AUTH_HOW_MUTUAL		2
 | 
			
		||||
#define	AUTH_HOW_MASK		2
 | 
			
		||||
 | 
			
		||||
#define	AUTHTYPE_NULL		0
 | 
			
		||||
#define	AUTHTYPE_KERBEROS_V4	1
 | 
			
		||||
#define	AUTHTYPE_KERBEROS_V5	2
 | 
			
		||||
#define	AUTHTYPE_SPX		3
 | 
			
		||||
#define	AUTHTYPE_MINK		4
 | 
			
		||||
#define	AUTHTYPE_CNT		5
 | 
			
		||||
 | 
			
		||||
#define	AUTHTYPE_TEST		99
 | 
			
		||||
 | 
			
		||||
#ifdef	AUTH_NAMES
 | 
			
		||||
char *authtype_names[] = {
 | 
			
		||||
	"NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0,
 | 
			
		||||
};
 | 
			
		||||
#else
 | 
			
		||||
extern char *authtype_names[];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define	AUTHTYPE_NAME_OK(x)	((unsigned int)(x) < AUTHTYPE_CNT)
 | 
			
		||||
#define	AUTHTYPE_NAME(x)	authtype_names[x]
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ENCRYPTion suboptions
 | 
			
		||||
 */
 | 
			
		||||
#define	ENCRYPT_IS		0	/* I pick encryption type ... */
 | 
			
		||||
#define	ENCRYPT_SUPPORT		1	/* I support encryption types ... */
 | 
			
		||||
#define	ENCRYPT_REPLY		2	/* Initial setup response */
 | 
			
		||||
#define	ENCRYPT_START		3	/* Am starting to send encrypted */
 | 
			
		||||
#define	ENCRYPT_END		4	/* Am ending encrypted */
 | 
			
		||||
#define	ENCRYPT_REQSTART	5	/* Request you start encrypting */
 | 
			
		||||
#define	ENCRYPT_REQEND		6	/* Request you send encrypting */
 | 
			
		||||
#define	ENCRYPT_ENC_KEYID	7
 | 
			
		||||
#define	ENCRYPT_DEC_KEYID	8
 | 
			
		||||
#define	ENCRYPT_CNT		9
 | 
			
		||||
 | 
			
		||||
#define	ENCTYPE_ANY		0
 | 
			
		||||
#define	ENCTYPE_DES_CFB64	1
 | 
			
		||||
#define	ENCTYPE_DES_OFB64	2
 | 
			
		||||
#define	ENCTYPE_CNT		3
 | 
			
		||||
 | 
			
		||||
#ifdef	ENCRYPT_NAMES
 | 
			
		||||
char *encrypt_names[] = {
 | 
			
		||||
	"IS", "SUPPORT", "REPLY", "START", "END",
 | 
			
		||||
	"REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
 | 
			
		||||
	0,
 | 
			
		||||
};
 | 
			
		||||
char *enctype_names[] = {
 | 
			
		||||
	"ANY", "DES_CFB64",  "DES_OFB64",  0,
 | 
			
		||||
};
 | 
			
		||||
#else
 | 
			
		||||
extern char *encrypt_names[];
 | 
			
		||||
extern char *enctype_names[];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define	ENCRYPT_NAME_OK(x)	((unsigned int)(x) < ENCRYPT_CNT)
 | 
			
		||||
#define	ENCRYPT_NAME(x)		encrypt_names[x]
 | 
			
		||||
 | 
			
		||||
#define	ENCTYPE_NAME_OK(x)	((unsigned int)(x) < ENCTYPE_CNT)
 | 
			
		||||
#define	ENCTYPE_NAME(x)		enctype_names[x]
 | 
			
		||||
 | 
			
		||||
#endif /* arpa/telnet.h */
 | 
			
		||||
@@ -0,0 +1,82 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 1983, 1993
 | 
			
		||||
 *	The Regents of the University of California.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 4. Neither the name of the University nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 *	@(#)tftp.h	8.1 (Berkeley) 6/2/93
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _ARPA_TFTP_H
 | 
			
		||||
#define	_ARPA_TFTP_H 1
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Trivial File Transfer Protocol (IEN-133)
 | 
			
		||||
 */
 | 
			
		||||
#define	SEGSIZE		512		/* data segment size */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Packet types.
 | 
			
		||||
 */
 | 
			
		||||
#define	RRQ	01				/* read request */
 | 
			
		||||
#define	WRQ	02				/* write request */
 | 
			
		||||
#define	DATA	03				/* data packet */
 | 
			
		||||
#define	ACK	04				/* acknowledgement */
 | 
			
		||||
#define	ERROR	05				/* error code */
 | 
			
		||||
 | 
			
		||||
struct	tftphdr {
 | 
			
		||||
	short	th_opcode;			/* packet type */
 | 
			
		||||
	union {
 | 
			
		||||
		char	tu_padding[3];		/* sizeof() compat */
 | 
			
		||||
		struct {
 | 
			
		||||
			union {
 | 
			
		||||
				unsigned short	tu_block;	/* block # */
 | 
			
		||||
				short	tu_code;		/* error code */
 | 
			
		||||
			} __attribute__ ((__packed__)) th_u3;
 | 
			
		||||
			char tu_data[0];	/* data or error string */
 | 
			
		||||
		} __attribute__ ((__packed__)) th_u2;
 | 
			
		||||
		char	tu_stuff[0];		/* request packet stuff */
 | 
			
		||||
	} __attribute__ ((__packed__)) th_u1;
 | 
			
		||||
} __attribute__ ((__packed__));
 | 
			
		||||
 | 
			
		||||
#define	th_block	th_u1.th_u2.th_u3.tu_block
 | 
			
		||||
#define	th_code		th_u1.th_u2.th_u3.tu_code
 | 
			
		||||
#define	th_stuff	th_u1.tu_stuff
 | 
			
		||||
#define	th_data		th_u1.th_u2.tu_data
 | 
			
		||||
#define	th_msg		th_u1.th_u2.tu_data
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Error codes.
 | 
			
		||||
 */
 | 
			
		||||
#define	EUNDEF		0		/* not defined */
 | 
			
		||||
#define	ENOTFOUND	1		/* file not found */
 | 
			
		||||
#define	EACCESS		2		/* access violation */
 | 
			
		||||
#define	ENOSPACE	3		/* disk full or allocation exceeded */
 | 
			
		||||
#define	EBADOP		4		/* illegal TFTP operation */
 | 
			
		||||
#define	EBADID		5		/* unknown transfer ID */
 | 
			
		||||
#define	EEXISTS		6		/* file already exists */
 | 
			
		||||
#define	ENOUSER		7		/* no such user */
 | 
			
		||||
 | 
			
		||||
#endif /* arpa/tftp.h */
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_AUXVEC_H
 | 
			
		||||
#define __ASM_GENERIC_AUXVEC_H
 | 
			
		||||
/*
 | 
			
		||||
 * Not all architectures need their own auxvec.h, the most
 | 
			
		||||
 * common definitions are already in linux/auxvec.h.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_AUXVEC_H */
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_BITS_PER_LONG
 | 
			
		||||
#define __ASM_GENERIC_BITS_PER_LONG
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * There seems to be no way of detecting this automatically from user
 | 
			
		||||
 * space, so 64 bit architectures should override this in their
 | 
			
		||||
 * bitsperlong.h. In particular, an architecture that supports
 | 
			
		||||
 * both 32 and 64 bit user space must not rely on CONFIG_64BIT
 | 
			
		||||
 * to decide it, but rather check a compiler provided macro.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __BITS_PER_LONG
 | 
			
		||||
#define __BITS_PER_LONG 32
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_BITS_PER_LONG */
 | 
			
		||||
@@ -0,0 +1,39 @@
 | 
			
		||||
#ifndef _ASM_GENERIC_ERRNO_BASE_H
 | 
			
		||||
#define _ASM_GENERIC_ERRNO_BASE_H
 | 
			
		||||
 | 
			
		||||
#define	EPERM		 1	/* Operation not permitted */
 | 
			
		||||
#define	ENOENT		 2	/* No such file or directory */
 | 
			
		||||
#define	ESRCH		 3	/* No such process */
 | 
			
		||||
#define	EINTR		 4	/* Interrupted system call */
 | 
			
		||||
#define	EIO		 5	/* I/O error */
 | 
			
		||||
#define	ENXIO		 6	/* No such device or address */
 | 
			
		||||
#define	E2BIG		 7	/* Argument list too long */
 | 
			
		||||
#define	ENOEXEC		 8	/* Exec format error */
 | 
			
		||||
#define	EBADF		 9	/* Bad file number */
 | 
			
		||||
#define	ECHILD		10	/* No child processes */
 | 
			
		||||
#define	EAGAIN		11	/* Try again */
 | 
			
		||||
#define	ENOMEM		12	/* Out of memory */
 | 
			
		||||
#define	EACCES		13	/* Permission denied */
 | 
			
		||||
#define	EFAULT		14	/* Bad address */
 | 
			
		||||
#define	ENOTBLK		15	/* Block device required */
 | 
			
		||||
#define	EBUSY		16	/* Device or resource busy */
 | 
			
		||||
#define	EEXIST		17	/* File exists */
 | 
			
		||||
#define	EXDEV		18	/* Cross-device link */
 | 
			
		||||
#define	ENODEV		19	/* No such device */
 | 
			
		||||
#define	ENOTDIR		20	/* Not a directory */
 | 
			
		||||
#define	EISDIR		21	/* Is a directory */
 | 
			
		||||
#define	EINVAL		22	/* Invalid argument */
 | 
			
		||||
#define	ENFILE		23	/* File table overflow */
 | 
			
		||||
#define	EMFILE		24	/* Too many open files */
 | 
			
		||||
#define	ENOTTY		25	/* Not a typewriter */
 | 
			
		||||
#define	ETXTBSY		26	/* Text file busy */
 | 
			
		||||
#define	EFBIG		27	/* File too large */
 | 
			
		||||
#define	ENOSPC		28	/* No space left on device */
 | 
			
		||||
#define	ESPIPE		29	/* Illegal seek */
 | 
			
		||||
#define	EROFS		30	/* Read-only file system */
 | 
			
		||||
#define	EMLINK		31	/* Too many links */
 | 
			
		||||
#define	EPIPE		32	/* Broken pipe */
 | 
			
		||||
#define	EDOM		33	/* Math argument out of domain of func */
 | 
			
		||||
#define	ERANGE		34	/* Math result not representable */
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -0,0 +1,122 @@
 | 
			
		||||
#ifndef _ASM_GENERIC_ERRNO_H
 | 
			
		||||
#define _ASM_GENERIC_ERRNO_H
 | 
			
		||||
 | 
			
		||||
#include <asm-generic/errno-base.h>
 | 
			
		||||
 | 
			
		||||
#define	EDEADLK		35	/* Resource deadlock would occur */
 | 
			
		||||
#define	ENAMETOOLONG	36	/* File name too long */
 | 
			
		||||
#define	ENOLCK		37	/* No record locks available */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This error code is special: arch syscall entry code will return
 | 
			
		||||
 * -ENOSYS if users try to call a syscall that doesn't exist.  To keep
 | 
			
		||||
 * failures of syscalls that really do exist distinguishable from
 | 
			
		||||
 * failures due to attempts to use a nonexistent syscall, syscall
 | 
			
		||||
 * implementations should refrain from returning -ENOSYS.
 | 
			
		||||
 */
 | 
			
		||||
#define	ENOSYS		38	/* Invalid system call number */
 | 
			
		||||
 | 
			
		||||
#define	ENOTEMPTY	39	/* Directory not empty */
 | 
			
		||||
#define	ELOOP		40	/* Too many symbolic links encountered */
 | 
			
		||||
#define	EWOULDBLOCK	EAGAIN	/* Operation would block */
 | 
			
		||||
#define	ENOMSG		42	/* No message of desired type */
 | 
			
		||||
#define	EIDRM		43	/* Identifier removed */
 | 
			
		||||
#define	ECHRNG		44	/* Channel number out of range */
 | 
			
		||||
#define	EL2NSYNC	45	/* Level 2 not synchronized */
 | 
			
		||||
#define	EL3HLT		46	/* Level 3 halted */
 | 
			
		||||
#define	EL3RST		47	/* Level 3 reset */
 | 
			
		||||
#define	ELNRNG		48	/* Link number out of range */
 | 
			
		||||
#define	EUNATCH		49	/* Protocol driver not attached */
 | 
			
		||||
#define	ENOCSI		50	/* No CSI structure available */
 | 
			
		||||
#define	EL2HLT		51	/* Level 2 halted */
 | 
			
		||||
#define	EBADE		52	/* Invalid exchange */
 | 
			
		||||
#define	EBADR		53	/* Invalid request descriptor */
 | 
			
		||||
#define	EXFULL		54	/* Exchange full */
 | 
			
		||||
#define	ENOANO		55	/* No anode */
 | 
			
		||||
#define	EBADRQC		56	/* Invalid request code */
 | 
			
		||||
#define	EBADSLT		57	/* Invalid slot */
 | 
			
		||||
 | 
			
		||||
#define	EDEADLOCK	EDEADLK
 | 
			
		||||
 | 
			
		||||
#define	EBFONT		59	/* Bad font file format */
 | 
			
		||||
#define	ENOSTR		60	/* Device not a stream */
 | 
			
		||||
#define	ENODATA		61	/* No data available */
 | 
			
		||||
#define	ETIME		62	/* Timer expired */
 | 
			
		||||
#define	ENOSR		63	/* Out of streams resources */
 | 
			
		||||
#define	ENONET		64	/* Machine is not on the network */
 | 
			
		||||
#define	ENOPKG		65	/* Package not installed */
 | 
			
		||||
#define	EREMOTE		66	/* Object is remote */
 | 
			
		||||
#define	ENOLINK		67	/* Link has been severed */
 | 
			
		||||
#define	EADV		68	/* Advertise error */
 | 
			
		||||
#define	ESRMNT		69	/* Srmount error */
 | 
			
		||||
#define	ECOMM		70	/* Communication error on send */
 | 
			
		||||
#define	EPROTO		71	/* Protocol error */
 | 
			
		||||
#define	EMULTIHOP	72	/* Multihop attempted */
 | 
			
		||||
#define	EDOTDOT		73	/* RFS specific error */
 | 
			
		||||
#define	EBADMSG		74	/* Not a data message */
 | 
			
		||||
#define	EOVERFLOW	75	/* Value too large for defined data type */
 | 
			
		||||
#define	ENOTUNIQ	76	/* Name not unique on network */
 | 
			
		||||
#define	EBADFD		77	/* File descriptor in bad state */
 | 
			
		||||
#define	EREMCHG		78	/* Remote address changed */
 | 
			
		||||
#define	ELIBACC		79	/* Can not access a needed shared library */
 | 
			
		||||
#define	ELIBBAD		80	/* Accessing a corrupted shared library */
 | 
			
		||||
#define	ELIBSCN		81	/* .lib section in a.out corrupted */
 | 
			
		||||
#define	ELIBMAX		82	/* Attempting to link in too many shared libraries */
 | 
			
		||||
#define	ELIBEXEC	83	/* Cannot exec a shared library directly */
 | 
			
		||||
#define	EILSEQ		84	/* Illegal byte sequence */
 | 
			
		||||
#define	ERESTART	85	/* Interrupted system call should be restarted */
 | 
			
		||||
#define	ESTRPIPE	86	/* Streams pipe error */
 | 
			
		||||
#define	EUSERS		87	/* Too many users */
 | 
			
		||||
#define	ENOTSOCK	88	/* Socket operation on non-socket */
 | 
			
		||||
#define	EDESTADDRREQ	89	/* Destination address required */
 | 
			
		||||
#define	EMSGSIZE	90	/* Message too long */
 | 
			
		||||
#define	EPROTOTYPE	91	/* Protocol wrong type for socket */
 | 
			
		||||
#define	ENOPROTOOPT	92	/* Protocol not available */
 | 
			
		||||
#define	EPROTONOSUPPORT	93	/* Protocol not supported */
 | 
			
		||||
#define	ESOCKTNOSUPPORT	94	/* Socket type not supported */
 | 
			
		||||
#define	EOPNOTSUPP	95	/* Operation not supported on transport endpoint */
 | 
			
		||||
#define	EPFNOSUPPORT	96	/* Protocol family not supported */
 | 
			
		||||
#define	EAFNOSUPPORT	97	/* Address family not supported by protocol */
 | 
			
		||||
#define	EADDRINUSE	98	/* Address already in use */
 | 
			
		||||
#define	EADDRNOTAVAIL	99	/* Cannot assign requested address */
 | 
			
		||||
#define	ENETDOWN	100	/* Network is down */
 | 
			
		||||
#define	ENETUNREACH	101	/* Network is unreachable */
 | 
			
		||||
#define	ENETRESET	102	/* Network dropped connection because of reset */
 | 
			
		||||
#define	ECONNABORTED	103	/* Software caused connection abort */
 | 
			
		||||
#define	ECONNRESET	104	/* Connection reset by peer */
 | 
			
		||||
#define	ENOBUFS		105	/* No buffer space available */
 | 
			
		||||
#define	EISCONN		106	/* Transport endpoint is already connected */
 | 
			
		||||
#define	ENOTCONN	107	/* Transport endpoint is not connected */
 | 
			
		||||
#define	ESHUTDOWN	108	/* Cannot send after transport endpoint shutdown */
 | 
			
		||||
#define	ETOOMANYREFS	109	/* Too many references: cannot splice */
 | 
			
		||||
#define	ETIMEDOUT	110	/* Connection timed out */
 | 
			
		||||
#define	ECONNREFUSED	111	/* Connection refused */
 | 
			
		||||
#define	EHOSTDOWN	112	/* Host is down */
 | 
			
		||||
#define	EHOSTUNREACH	113	/* No route to host */
 | 
			
		||||
#define	EALREADY	114	/* Operation already in progress */
 | 
			
		||||
#define	EINPROGRESS	115	/* Operation now in progress */
 | 
			
		||||
#define	ESTALE		116	/* Stale file handle */
 | 
			
		||||
#define	EUCLEAN		117	/* Structure needs cleaning */
 | 
			
		||||
#define	ENOTNAM		118	/* Not a XENIX named type file */
 | 
			
		||||
#define	ENAVAIL		119	/* No XENIX semaphores available */
 | 
			
		||||
#define	EISNAM		120	/* Is a named type file */
 | 
			
		||||
#define	EREMOTEIO	121	/* Remote I/O error */
 | 
			
		||||
#define	EDQUOT		122	/* Quota exceeded */
 | 
			
		||||
 | 
			
		||||
#define	ENOMEDIUM	123	/* No medium found */
 | 
			
		||||
#define	EMEDIUMTYPE	124	/* Wrong medium type */
 | 
			
		||||
#define	ECANCELED	125	/* Operation Canceled */
 | 
			
		||||
#define	ENOKEY		126	/* Required key not available */
 | 
			
		||||
#define	EKEYEXPIRED	127	/* Key has expired */
 | 
			
		||||
#define	EKEYREVOKED	128	/* Key has been revoked */
 | 
			
		||||
#define	EKEYREJECTED	129	/* Key was rejected by service */
 | 
			
		||||
 | 
			
		||||
/* for robust mutexes */
 | 
			
		||||
#define	EOWNERDEAD	130	/* Owner died */
 | 
			
		||||
#define	ENOTRECOVERABLE	131	/* State not recoverable */
 | 
			
		||||
 | 
			
		||||
#define ERFKILL		132	/* Operation not possible due to RF-kill */
 | 
			
		||||
 | 
			
		||||
#define EHWPOISON	133	/* Memory page has hardware error */
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -0,0 +1,220 @@
 | 
			
		||||
#ifndef _ASM_GENERIC_FCNTL_H
 | 
			
		||||
#define _ASM_GENERIC_FCNTL_H
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * FMODE_EXEC is 0x20
 | 
			
		||||
 * FMODE_NONOTIFY is 0x4000000
 | 
			
		||||
 * These cannot be used by userspace O_* until internal and external open
 | 
			
		||||
 * flags are split.
 | 
			
		||||
 * -Eric Paris
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * When introducing new O_* bits, please check its uniqueness in fcntl_init().
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define O_ACCMODE	00000003
 | 
			
		||||
#define O_RDONLY	00000000
 | 
			
		||||
#define O_WRONLY	00000001
 | 
			
		||||
#define O_RDWR		00000002
 | 
			
		||||
#ifndef O_CREAT
 | 
			
		||||
#define O_CREAT		00000100	/* not fcntl */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_EXCL
 | 
			
		||||
#define O_EXCL		00000200	/* not fcntl */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_NOCTTY
 | 
			
		||||
#define O_NOCTTY	00000400	/* not fcntl */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_TRUNC
 | 
			
		||||
#define O_TRUNC		00001000	/* not fcntl */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_APPEND
 | 
			
		||||
#define O_APPEND	00002000
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_NONBLOCK
 | 
			
		||||
#define O_NONBLOCK	00004000
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_DSYNC
 | 
			
		||||
#define O_DSYNC		00010000	/* used to be O_SYNC, see below */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef FASYNC
 | 
			
		||||
#define FASYNC		00020000	/* fcntl, for BSD compatibility */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_DIRECT
 | 
			
		||||
#define O_DIRECT	00040000	/* direct disk access hint */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_LARGEFILE
 | 
			
		||||
#define O_LARGEFILE	00100000
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_DIRECTORY
 | 
			
		||||
#define O_DIRECTORY	00200000	/* must be a directory */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_NOFOLLOW
 | 
			
		||||
#define O_NOFOLLOW	00400000	/* don't follow links */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_NOATIME
 | 
			
		||||
#define O_NOATIME	01000000
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef O_CLOEXEC
 | 
			
		||||
#define O_CLOEXEC	02000000	/* set close_on_exec */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Before Linux 2.6.33 only O_DSYNC semantics were implemented, but using
 | 
			
		||||
 * the O_SYNC flag.  We continue to use the existing numerical value
 | 
			
		||||
 * for O_DSYNC semantics now, but using the correct symbolic name for it.
 | 
			
		||||
 * This new value is used to request true Posix O_SYNC semantics.  It is
 | 
			
		||||
 * defined in this strange way to make sure applications compiled against
 | 
			
		||||
 * new headers get at least O_DSYNC semantics on older kernels.
 | 
			
		||||
 *
 | 
			
		||||
 * This has the nice side-effect that we can simply test for O_DSYNC
 | 
			
		||||
 * wherever we do not care if O_DSYNC or O_SYNC is used.
 | 
			
		||||
 *
 | 
			
		||||
 * Note: __O_SYNC must never be used directly.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef O_SYNC
 | 
			
		||||
#define __O_SYNC	04000000
 | 
			
		||||
#define O_SYNC		(__O_SYNC|O_DSYNC)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef O_PATH
 | 
			
		||||
#define O_PATH		010000000
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __O_TMPFILE
 | 
			
		||||
#define __O_TMPFILE	020000000
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* a horrid kludge trying to make sure that this will fail on old kernels */
 | 
			
		||||
#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
 | 
			
		||||
#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT)      
 | 
			
		||||
 | 
			
		||||
#ifndef O_NDELAY
 | 
			
		||||
#define O_NDELAY	O_NONBLOCK
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define F_DUPFD		0	/* dup */
 | 
			
		||||
#define F_GETFD		1	/* get close_on_exec */
 | 
			
		||||
#define F_SETFD		2	/* set/clear close_on_exec */
 | 
			
		||||
#define F_GETFL		3	/* get file->f_flags */
 | 
			
		||||
#define F_SETFL		4	/* set file->f_flags */
 | 
			
		||||
#ifndef F_GETLK
 | 
			
		||||
#define F_GETLK		5
 | 
			
		||||
#define F_SETLK		6
 | 
			
		||||
#define F_SETLKW	7
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef F_SETOWN
 | 
			
		||||
#define F_SETOWN	8	/* for sockets. */
 | 
			
		||||
#define F_GETOWN	9	/* for sockets. */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef F_SETSIG
 | 
			
		||||
#define F_SETSIG	10	/* for sockets. */
 | 
			
		||||
#define F_GETSIG	11	/* for sockets. */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_64BIT
 | 
			
		||||
#ifndef F_GETLK64
 | 
			
		||||
#define F_GETLK64	12	/*  using 'struct flock64' */
 | 
			
		||||
#define F_SETLK64	13
 | 
			
		||||
#define F_SETLKW64	14
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef F_SETOWN_EX
 | 
			
		||||
#define F_SETOWN_EX	15
 | 
			
		||||
#define F_GETOWN_EX	16
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef F_GETOWNER_UIDS
 | 
			
		||||
#define F_GETOWNER_UIDS	17
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Open File Description Locks
 | 
			
		||||
 *
 | 
			
		||||
 * Usually record locks held by a process are released on *any* close and are
 | 
			
		||||
 * not inherited across a fork().
 | 
			
		||||
 *
 | 
			
		||||
 * These cmd values will set locks that conflict with process-associated
 | 
			
		||||
 * record  locks, but are "owned" by the open file description, not the
 | 
			
		||||
 * process. This means that they are inherited across fork() like BSD (flock)
 | 
			
		||||
 * locks, and they are only released automatically when the last reference to
 | 
			
		||||
 * the the open file against which they were acquired is put.
 | 
			
		||||
 */
 | 
			
		||||
#define F_OFD_GETLK	36
 | 
			
		||||
#define F_OFD_SETLK	37
 | 
			
		||||
#define F_OFD_SETLKW	38
 | 
			
		||||
 | 
			
		||||
#define F_OWNER_TID	0
 | 
			
		||||
#define F_OWNER_PID	1
 | 
			
		||||
#define F_OWNER_PGRP	2
 | 
			
		||||
 | 
			
		||||
struct f_owner_ex {
 | 
			
		||||
	int	type;
 | 
			
		||||
	__kernel_pid_t	pid;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for F_[GET|SET]FL */
 | 
			
		||||
#define FD_CLOEXEC	1	/* actually anything with low bit set goes */
 | 
			
		||||
 | 
			
		||||
/* for posix fcntl() and lockf() */
 | 
			
		||||
#ifndef F_RDLCK
 | 
			
		||||
#define F_RDLCK		0
 | 
			
		||||
#define F_WRLCK		1
 | 
			
		||||
#define F_UNLCK		2
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* for old implementation of bsd flock () */
 | 
			
		||||
#ifndef F_EXLCK
 | 
			
		||||
#define F_EXLCK		4	/* or 3 */
 | 
			
		||||
#define F_SHLCK		8	/* or 4 */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* operations for bsd flock(), also used by the kernel implementation */
 | 
			
		||||
#define LOCK_SH		1	/* shared lock */
 | 
			
		||||
#define LOCK_EX		2	/* exclusive lock */
 | 
			
		||||
#define LOCK_NB		4	/* or'd with one of the above to prevent
 | 
			
		||||
				   blocking */
 | 
			
		||||
#define LOCK_UN		8	/* remove lock */
 | 
			
		||||
 | 
			
		||||
#define LOCK_MAND	32	/* This is a mandatory flock ... */
 | 
			
		||||
#define LOCK_READ	64	/* which allows concurrent read operations */
 | 
			
		||||
#define LOCK_WRITE	128	/* which allows concurrent write operations */
 | 
			
		||||
#define LOCK_RW		192	/* which allows concurrent read & write ops */
 | 
			
		||||
 | 
			
		||||
#define F_LINUX_SPECIFIC_BASE	1024
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_ARCH_STRUCT_FLOCK
 | 
			
		||||
#ifndef __ARCH_FLOCK_PAD
 | 
			
		||||
#define __ARCH_FLOCK_PAD
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct flock {
 | 
			
		||||
	short	l_type;
 | 
			
		||||
	short	l_whence;
 | 
			
		||||
	__kernel_off_t	l_start;
 | 
			
		||||
	__kernel_off_t	l_len;
 | 
			
		||||
	__kernel_pid_t	l_pid;
 | 
			
		||||
	__ARCH_FLOCK_PAD
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_ARCH_STRUCT_FLOCK64
 | 
			
		||||
#ifndef __ARCH_FLOCK64_PAD
 | 
			
		||||
#define __ARCH_FLOCK64_PAD
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct flock64 {
 | 
			
		||||
	short  l_type;
 | 
			
		||||
	short  l_whence;
 | 
			
		||||
	__kernel_loff_t l_start;
 | 
			
		||||
	__kernel_loff_t l_len;
 | 
			
		||||
	__kernel_pid_t  l_pid;
 | 
			
		||||
	__ARCH_FLOCK64_PAD
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_GENERIC_FCNTL_H */
 | 
			
		||||
@@ -0,0 +1,34 @@
 | 
			
		||||
/*
 | 
			
		||||
 * asm-generic/int-l64.h
 | 
			
		||||
 *
 | 
			
		||||
 * Integer declarations for architectures which use "long"
 | 
			
		||||
 * for 64-bit types.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _ASM_GENERIC_INT_L64_H
 | 
			
		||||
#define _ASM_GENERIC_INT_L64_H
 | 
			
		||||
 | 
			
		||||
#include <asm/bitsperlong.h>
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
/*
 | 
			
		||||
 * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
 | 
			
		||||
 * header files exported to user space
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
typedef __signed__ char __s8;
 | 
			
		||||
typedef unsigned char __u8;
 | 
			
		||||
 | 
			
		||||
typedef __signed__ short __s16;
 | 
			
		||||
typedef unsigned short __u16;
 | 
			
		||||
 | 
			
		||||
typedef __signed__ int __s32;
 | 
			
		||||
typedef unsigned int __u32;
 | 
			
		||||
 | 
			
		||||
typedef __signed__ long __s64;
 | 
			
		||||
typedef unsigned long __u64;
 | 
			
		||||
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_GENERIC_INT_L64_H */
 | 
			
		||||
@@ -0,0 +1,39 @@
 | 
			
		||||
/*
 | 
			
		||||
 * asm-generic/int-ll64.h
 | 
			
		||||
 *
 | 
			
		||||
 * Integer declarations for architectures which use "long long"
 | 
			
		||||
 * for 64-bit types.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _ASM_GENERIC_INT_LL64_H
 | 
			
		||||
#define _ASM_GENERIC_INT_LL64_H
 | 
			
		||||
 | 
			
		||||
#include <asm/bitsperlong.h>
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
/*
 | 
			
		||||
 * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
 | 
			
		||||
 * header files exported to user space
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
typedef __signed__ char __s8;
 | 
			
		||||
typedef unsigned char __u8;
 | 
			
		||||
 | 
			
		||||
typedef __signed__ short __s16;
 | 
			
		||||
typedef unsigned short __u16;
 | 
			
		||||
 | 
			
		||||
typedef __signed__ int __s32;
 | 
			
		||||
typedef unsigned int __u32;
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUC__
 | 
			
		||||
__extension__ typedef __signed__ long long __s64;
 | 
			
		||||
__extension__ typedef unsigned long long __u64;
 | 
			
		||||
#else
 | 
			
		||||
typedef __signed__ long long __s64;
 | 
			
		||||
typedef unsigned long long __u64;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_GENERIC_INT_LL64_H */
 | 
			
		||||
@@ -0,0 +1,96 @@
 | 
			
		||||
#ifndef _ASM_GENERIC_IOCTL_H
 | 
			
		||||
#define _ASM_GENERIC_IOCTL_H
 | 
			
		||||
 | 
			
		||||
/* ioctl command encoding: 32 bits total, command in lower 16 bits,
 | 
			
		||||
 * size of the parameter structure in the lower 14 bits of the
 | 
			
		||||
 * upper 16 bits.
 | 
			
		||||
 * Encoding the size of the parameter structure in the ioctl request
 | 
			
		||||
 * is useful for catching programs compiled with old versions
 | 
			
		||||
 * and to avoid overwriting user space outside the user buffer area.
 | 
			
		||||
 * The highest 2 bits are reserved for indicating the ``access mode''.
 | 
			
		||||
 * NOTE: This limits the max parameter size to 16kB -1 !
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The following is for compatibility across the various Linux
 | 
			
		||||
 * platforms.  The generic ioctl numbering scheme doesn't really enforce
 | 
			
		||||
 * a type field.  De facto, however, the top 8 bits of the lower 16
 | 
			
		||||
 * bits are indeed used as a type field, so we might just as well make
 | 
			
		||||
 * this explicit here.  Please be sure to use the decoding macros
 | 
			
		||||
 * below from now on.
 | 
			
		||||
 */
 | 
			
		||||
#define _IOC_NRBITS	8
 | 
			
		||||
#define _IOC_TYPEBITS	8
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Let any architecture override either of the following before
 | 
			
		||||
 * including this file.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _IOC_SIZEBITS
 | 
			
		||||
# define _IOC_SIZEBITS	14
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef _IOC_DIRBITS
 | 
			
		||||
# define _IOC_DIRBITS	2
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define _IOC_NRMASK	((1 << _IOC_NRBITS)-1)
 | 
			
		||||
#define _IOC_TYPEMASK	((1 << _IOC_TYPEBITS)-1)
 | 
			
		||||
#define _IOC_SIZEMASK	((1 << _IOC_SIZEBITS)-1)
 | 
			
		||||
#define _IOC_DIRMASK	((1 << _IOC_DIRBITS)-1)
 | 
			
		||||
 | 
			
		||||
#define _IOC_NRSHIFT	0
 | 
			
		||||
#define _IOC_TYPESHIFT	(_IOC_NRSHIFT+_IOC_NRBITS)
 | 
			
		||||
#define _IOC_SIZESHIFT	(_IOC_TYPESHIFT+_IOC_TYPEBITS)
 | 
			
		||||
#define _IOC_DIRSHIFT	(_IOC_SIZESHIFT+_IOC_SIZEBITS)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Direction bits, which any architecture can choose to override
 | 
			
		||||
 * before including this file.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _IOC_NONE
 | 
			
		||||
# define _IOC_NONE	0U
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef _IOC_WRITE
 | 
			
		||||
# define _IOC_WRITE	1U
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef _IOC_READ
 | 
			
		||||
# define _IOC_READ	2U
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define _IOC(dir,type,nr,size) \
 | 
			
		||||
	(((dir)  << _IOC_DIRSHIFT) | \
 | 
			
		||||
	 ((type) << _IOC_TYPESHIFT) | \
 | 
			
		||||
	 ((nr)   << _IOC_NRSHIFT) | \
 | 
			
		||||
	 ((size) << _IOC_SIZESHIFT))
 | 
			
		||||
 | 
			
		||||
#define _IOC_TYPECHECK(t) (sizeof(t))
 | 
			
		||||
 | 
			
		||||
/* used to create numbers */
 | 
			
		||||
#define _IO(type,nr)		_IOC(_IOC_NONE,(type),(nr),0)
 | 
			
		||||
#define _IOR(type,nr,size)	_IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
 | 
			
		||||
#define _IOW(type,nr,size)	_IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
 | 
			
		||||
#define _IOWR(type,nr,size)	_IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
 | 
			
		||||
#define _IOR_BAD(type,nr,size)	_IOC(_IOC_READ,(type),(nr),sizeof(size))
 | 
			
		||||
#define _IOW_BAD(type,nr,size)	_IOC(_IOC_WRITE,(type),(nr),sizeof(size))
 | 
			
		||||
#define _IOWR_BAD(type,nr,size)	_IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
 | 
			
		||||
 | 
			
		||||
/* used to decode ioctl numbers.. */
 | 
			
		||||
#define _IOC_DIR(nr)		(((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
 | 
			
		||||
#define _IOC_TYPE(nr)		(((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
 | 
			
		||||
#define _IOC_NR(nr)		(((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
 | 
			
		||||
#define _IOC_SIZE(nr)		(((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
 | 
			
		||||
 | 
			
		||||
/* ...and for the drivers/sound files... */
 | 
			
		||||
 | 
			
		||||
#define IOC_IN		(_IOC_WRITE << _IOC_DIRSHIFT)
 | 
			
		||||
#define IOC_OUT		(_IOC_READ << _IOC_DIRSHIFT)
 | 
			
		||||
#define IOC_INOUT	((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
 | 
			
		||||
#define IOCSIZE_MASK	(_IOC_SIZEMASK << _IOC_SIZESHIFT)
 | 
			
		||||
#define IOCSIZE_SHIFT	(_IOC_SIZESHIFT)
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_GENERIC_IOCTL_H */
 | 
			
		||||
@@ -0,0 +1,117 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_IOCTLS_H
 | 
			
		||||
#define __ASM_GENERIC_IOCTLS_H
 | 
			
		||||
 | 
			
		||||
#include <linux/ioctl.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * These are the most common definitions for tty ioctl numbers.
 | 
			
		||||
 * Most of them do not use the recommended _IOC(), but there is
 | 
			
		||||
 * probably some source code out there hardcoding the number,
 | 
			
		||||
 * so we might as well use them for all new platforms.
 | 
			
		||||
 *
 | 
			
		||||
 * The architectures that use different values here typically
 | 
			
		||||
 * try to be compatible with some Unix variants for the same
 | 
			
		||||
 * architecture.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* 0x54 is just a magic number to make these relatively unique ('T') */
 | 
			
		||||
 | 
			
		||||
#define TCGETS		0x5401
 | 
			
		||||
#define TCSETS		0x5402
 | 
			
		||||
#define TCSETSW		0x5403
 | 
			
		||||
#define TCSETSF		0x5404
 | 
			
		||||
#define TCGETA		0x5405
 | 
			
		||||
#define TCSETA		0x5406
 | 
			
		||||
#define TCSETAW		0x5407
 | 
			
		||||
#define TCSETAF		0x5408
 | 
			
		||||
#define TCSBRK		0x5409
 | 
			
		||||
#define TCXONC		0x540A
 | 
			
		||||
#define TCFLSH		0x540B
 | 
			
		||||
#define TIOCEXCL	0x540C
 | 
			
		||||
#define TIOCNXCL	0x540D
 | 
			
		||||
#define TIOCSCTTY	0x540E
 | 
			
		||||
#define TIOCGPGRP	0x540F
 | 
			
		||||
#define TIOCSPGRP	0x5410
 | 
			
		||||
#define TIOCOUTQ	0x5411
 | 
			
		||||
#define TIOCSTI		0x5412
 | 
			
		||||
#define TIOCGWINSZ	0x5413
 | 
			
		||||
#define TIOCSWINSZ	0x5414
 | 
			
		||||
#define TIOCMGET	0x5415
 | 
			
		||||
#define TIOCMBIS	0x5416
 | 
			
		||||
#define TIOCMBIC	0x5417
 | 
			
		||||
#define TIOCMSET	0x5418
 | 
			
		||||
#define TIOCGSOFTCAR	0x5419
 | 
			
		||||
#define TIOCSSOFTCAR	0x541A
 | 
			
		||||
#define FIONREAD	0x541B
 | 
			
		||||
#define TIOCINQ		FIONREAD
 | 
			
		||||
#define TIOCLINUX	0x541C
 | 
			
		||||
#define TIOCCONS	0x541D
 | 
			
		||||
#define TIOCGSERIAL	0x541E
 | 
			
		||||
#define TIOCSSERIAL	0x541F
 | 
			
		||||
#define TIOCPKT		0x5420
 | 
			
		||||
#define FIONBIO		0x5421
 | 
			
		||||
#define TIOCNOTTY	0x5422
 | 
			
		||||
#define TIOCSETD	0x5423
 | 
			
		||||
#define TIOCGETD	0x5424
 | 
			
		||||
#define TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
 | 
			
		||||
#define TIOCSBRK	0x5427  /* BSD compatibility */
 | 
			
		||||
#define TIOCCBRK	0x5428  /* BSD compatibility */
 | 
			
		||||
#define TIOCGSID	0x5429  /* Return the session ID of FD */
 | 
			
		||||
#define TCGETS2		_IOR('T', 0x2A, struct termios2)
 | 
			
		||||
#define TCSETS2		_IOW('T', 0x2B, struct termios2)
 | 
			
		||||
#define TCSETSW2	_IOW('T', 0x2C, struct termios2)
 | 
			
		||||
#define TCSETSF2	_IOW('T', 0x2D, struct termios2)
 | 
			
		||||
#define TIOCGRS485	0x542E
 | 
			
		||||
#ifndef TIOCSRS485
 | 
			
		||||
#define TIOCSRS485	0x542F
 | 
			
		||||
#endif
 | 
			
		||||
#define TIOCGPTN	_IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
 | 
			
		||||
#define TIOCSPTLCK	_IOW('T', 0x31, int)  /* Lock/unlock Pty */
 | 
			
		||||
#define TIOCGDEV	_IOR('T', 0x32, unsigned int) /* Get primary device node of /dev/console */
 | 
			
		||||
#define TCGETX		0x5432 /* SYS5 TCGETX compatibility */
 | 
			
		||||
#define TCSETX		0x5433
 | 
			
		||||
#define TCSETXF		0x5434
 | 
			
		||||
#define TCSETXW		0x5435
 | 
			
		||||
#define TIOCSIG		_IOW('T', 0x36, int)  /* pty: generate signal */
 | 
			
		||||
#define TIOCVHANGUP	0x5437
 | 
			
		||||
#define TIOCGPKT	_IOR('T', 0x38, int) /* Get packet mode state */
 | 
			
		||||
#define TIOCGPTLCK	_IOR('T', 0x39, int) /* Get Pty lock state */
 | 
			
		||||
#define TIOCGEXCL	_IOR('T', 0x40, int) /* Get exclusive mode state */
 | 
			
		||||
 | 
			
		||||
#define FIONCLEX	0x5450
 | 
			
		||||
#define FIOCLEX		0x5451
 | 
			
		||||
#define FIOASYNC	0x5452
 | 
			
		||||
#define TIOCSERCONFIG	0x5453
 | 
			
		||||
#define TIOCSERGWILD	0x5454
 | 
			
		||||
#define TIOCSERSWILD	0x5455
 | 
			
		||||
#define TIOCGLCKTRMIOS	0x5456
 | 
			
		||||
#define TIOCSLCKTRMIOS	0x5457
 | 
			
		||||
#define TIOCSERGSTRUCT	0x5458 /* For debugging only */
 | 
			
		||||
#define TIOCSERGETLSR   0x5459 /* Get line status register */
 | 
			
		||||
#define TIOCSERGETMULTI 0x545A /* Get multiport config  */
 | 
			
		||||
#define TIOCSERSETMULTI 0x545B /* Set multiport config */
 | 
			
		||||
 | 
			
		||||
#define TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
 | 
			
		||||
#define TIOCGICOUNT	0x545D	/* read serial port __inline__ interrupt counts */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Some arches already define FIOQSIZE due to a historical
 | 
			
		||||
 * conflict with a Hayes modem-specific ioctl value.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef FIOQSIZE
 | 
			
		||||
# define FIOQSIZE	0x5460
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Used for packet mode */
 | 
			
		||||
#define TIOCPKT_DATA		 0
 | 
			
		||||
#define TIOCPKT_FLUSHREAD	 1
 | 
			
		||||
#define TIOCPKT_FLUSHWRITE	 2
 | 
			
		||||
#define TIOCPKT_STOP		 4
 | 
			
		||||
#define TIOCPKT_START		 8
 | 
			
		||||
#define TIOCPKT_NOSTOP		16
 | 
			
		||||
#define TIOCPKT_DOSTOP		32
 | 
			
		||||
#define TIOCPKT_IOCTL		64
 | 
			
		||||
 | 
			
		||||
#define TIOCSER_TEMT	0x01	/* Transmitter physically empty */
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_IOCTLS_H */
 | 
			
		||||
@@ -0,0 +1,34 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_IPCBUF_H
 | 
			
		||||
#define __ASM_GENERIC_IPCBUF_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The generic ipc64_perm structure:
 | 
			
		||||
 * Note extra padding because this structure is passed back and forth
 | 
			
		||||
 * between kernel and user space.
 | 
			
		||||
 *
 | 
			
		||||
 * ipc64_perm was originally meant to be architecture specific, but
 | 
			
		||||
 * everyone just ended up making identical copies without specific
 | 
			
		||||
 * optimizations, so we may just as well all use the same one.
 | 
			
		||||
 *
 | 
			
		||||
 * Pad space is left for:
 | 
			
		||||
 * - 32-bit mode_t on architectures that only had 16 bit
 | 
			
		||||
 * - 32-bit seq
 | 
			
		||||
 * - 2 miscellaneous 32-bit values
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
struct ipc64_perm {
 | 
			
		||||
	__kernel_key_t		key;
 | 
			
		||||
	__kernel_uid32_t	uid;
 | 
			
		||||
	__kernel_gid32_t	gid;
 | 
			
		||||
	__kernel_uid32_t	cuid;
 | 
			
		||||
	__kernel_gid32_t	cgid;
 | 
			
		||||
	__kernel_mode_t		mode;
 | 
			
		||||
				/* pad if mode_t is u16: */
 | 
			
		||||
	unsigned char		__pad1[4 - sizeof(__kernel_mode_t)];
 | 
			
		||||
	unsigned short		seq;
 | 
			
		||||
	unsigned short		__pad2;
 | 
			
		||||
	__kernel_ulong_t	__unused1;
 | 
			
		||||
	__kernel_ulong_t	__unused2;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_IPCBUF_H */
 | 
			
		||||
@@ -0,0 +1,4 @@
 | 
			
		||||
/*
 | 
			
		||||
 * There isn't anything here, but the file must not be empty or patch
 | 
			
		||||
 * will delete it.
 | 
			
		||||
 */
 | 
			
		||||
@@ -0,0 +1,74 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_MMAN_COMMON_H
 | 
			
		||||
#define __ASM_GENERIC_MMAN_COMMON_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 Author: Michael S. Tsirkin <mst@mellanox.co.il>, Mellanox Technologies Ltd.
 | 
			
		||||
 Based on: asm-xxx/mman.h
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define PROT_READ	0x1		/* page can be read */
 | 
			
		||||
#define PROT_WRITE	0x2		/* page can be written */
 | 
			
		||||
#define PROT_EXEC	0x4		/* page can be executed */
 | 
			
		||||
#define PROT_SEM	0x8		/* page may be used for atomic ops */
 | 
			
		||||
#define PROT_NONE	0x0		/* page can not be accessed */
 | 
			
		||||
#define PROT_GROWSDOWN	0x01000000	/* mprotect flag: extend change to start of growsdown vma */
 | 
			
		||||
#define PROT_GROWSUP	0x02000000	/* mprotect flag: extend change to end of growsup vma */
 | 
			
		||||
 | 
			
		||||
#define MAP_SHARED	0x01		/* Share changes */
 | 
			
		||||
#define MAP_PRIVATE	0x02		/* Changes are private */
 | 
			
		||||
#define MAP_TYPE	0x0f		/* Mask for type of mapping */
 | 
			
		||||
#define MAP_FIXED	0x10		/* Interpret addr exactly */
 | 
			
		||||
#define MAP_ANONYMOUS	0x20		/* don't use a file */
 | 
			
		||||
#ifdef CONFIG_MMAP_ALLOW_UNINITIALIZED
 | 
			
		||||
# define MAP_UNINITIALIZED 0x4000000	/* For anonymous mmap, memory could be uninitialized */
 | 
			
		||||
#else
 | 
			
		||||
# define MAP_UNINITIALIZED 0x0		/* Don't support this flag */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Flags for mlock
 | 
			
		||||
 */
 | 
			
		||||
#define MLOCK_ONFAULT	0x01		/* Lock pages in range after they are faulted in, do not prefault */
 | 
			
		||||
 | 
			
		||||
#define MS_ASYNC	1		/* sync memory asynchronously */
 | 
			
		||||
#define MS_INVALIDATE	2		/* invalidate the caches */
 | 
			
		||||
#define MS_SYNC		4		/* synchronous memory sync */
 | 
			
		||||
 | 
			
		||||
#define MADV_NORMAL	0		/* no further special treatment */
 | 
			
		||||
#define MADV_RANDOM	1		/* expect random page references */
 | 
			
		||||
#define MADV_SEQUENTIAL	2		/* expect sequential page references */
 | 
			
		||||
#define MADV_WILLNEED	3		/* will need these pages */
 | 
			
		||||
#define MADV_DONTNEED	4		/* don't need these pages */
 | 
			
		||||
 | 
			
		||||
/* common parameters: try to keep these consistent across architectures */
 | 
			
		||||
#define MADV_REMOVE	9		/* remove these pages & resources */
 | 
			
		||||
#define MADV_DONTFORK	10		/* don't inherit across fork */
 | 
			
		||||
#define MADV_DOFORK	11		/* do inherit across fork */
 | 
			
		||||
#define MADV_HWPOISON	100		/* poison a page for testing */
 | 
			
		||||
#define MADV_SOFT_OFFLINE 101		/* soft offline page for testing */
 | 
			
		||||
 | 
			
		||||
#define MADV_MERGEABLE   12		/* KSM may merge identical pages */
 | 
			
		||||
#define MADV_UNMERGEABLE 13		/* KSM may not merge identical pages */
 | 
			
		||||
 | 
			
		||||
#define MADV_HUGEPAGE	14		/* Worth backing with hugepages */
 | 
			
		||||
#define MADV_NOHUGEPAGE	15		/* Not worth backing with hugepages */
 | 
			
		||||
 | 
			
		||||
#define MADV_DONTDUMP   16		/* Explicity exclude from the core dump,
 | 
			
		||||
					   overrides the coredump filter bits */
 | 
			
		||||
#define MADV_DODUMP	17		/* Clear the MADV_DONTDUMP flag */
 | 
			
		||||
 | 
			
		||||
/* compatibility flags */
 | 
			
		||||
#define MAP_FILE	0
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.
 | 
			
		||||
 * This gives us 6 bits, which is enough until someone invents 128 bit address
 | 
			
		||||
 * spaces.
 | 
			
		||||
 *
 | 
			
		||||
 * Assume these are all power of twos.
 | 
			
		||||
 * When 0 use the default page size.
 | 
			
		||||
 */
 | 
			
		||||
#define MAP_HUGE_SHIFT	26
 | 
			
		||||
#define MAP_HUGE_MASK	0x3f
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_MMAN_COMMON_H */
 | 
			
		||||
@@ -0,0 +1,22 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_MMAN_H
 | 
			
		||||
#define __ASM_GENERIC_MMAN_H
 | 
			
		||||
 | 
			
		||||
#include <asm-generic/mman-common.h>
 | 
			
		||||
 | 
			
		||||
#define MAP_GROWSDOWN	0x0100		/* stack-like segment */
 | 
			
		||||
#define MAP_DENYWRITE	0x0800		/* ETXTBSY */
 | 
			
		||||
#define MAP_EXECUTABLE	0x1000		/* mark it as an executable */
 | 
			
		||||
#define MAP_LOCKED	0x2000		/* pages are locked */
 | 
			
		||||
#define MAP_NORESERVE	0x4000		/* don't check for reservations */
 | 
			
		||||
#define MAP_POPULATE	0x8000		/* populate (prefault) pagetables */
 | 
			
		||||
#define MAP_NONBLOCK	0x10000		/* do not block on IO */
 | 
			
		||||
#define MAP_STACK	0x20000		/* give out an address that is best suited for process/thread stacks */
 | 
			
		||||
#define MAP_HUGETLB	0x40000		/* create a huge page mapping */
 | 
			
		||||
 | 
			
		||||
/* Bits [26:31] are reserved, see mman-common.h for MAP_HUGETLB usage */
 | 
			
		||||
 | 
			
		||||
#define MCL_CURRENT	1		/* lock all current mappings */
 | 
			
		||||
#define MCL_FUTURE	2		/* lock all future mappings */
 | 
			
		||||
#define MCL_ONFAULT	4		/* lock all pages that are faulted in */
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_MMAN_H */
 | 
			
		||||
@@ -0,0 +1,47 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_MSGBUF_H
 | 
			
		||||
#define __ASM_GENERIC_MSGBUF_H
 | 
			
		||||
 | 
			
		||||
#include <asm/bitsperlong.h>
 | 
			
		||||
/*
 | 
			
		||||
 * generic msqid64_ds structure.
 | 
			
		||||
 *
 | 
			
		||||
 * Note extra padding because this structure is passed back and forth
 | 
			
		||||
 * between kernel and user space.
 | 
			
		||||
 *
 | 
			
		||||
 * msqid64_ds was originally meant to be architecture specific, but
 | 
			
		||||
 * everyone just ended up making identical copies without specific
 | 
			
		||||
 * optimizations, so we may just as well all use the same one.
 | 
			
		||||
 *
 | 
			
		||||
 * 64 bit architectures typically define a 64 bit __kernel_time_t,
 | 
			
		||||
 * so they do not need the first three padding words.
 | 
			
		||||
 * On big-endian systems, the padding is in the wrong place.
 | 
			
		||||
 *
 | 
			
		||||
 * Pad space is left for:
 | 
			
		||||
 * - 64-bit time_t to solve y2038 problem
 | 
			
		||||
 * - 2 miscellaneous 32-bit values
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
struct msqid64_ds {
 | 
			
		||||
	struct ipc64_perm msg_perm;
 | 
			
		||||
	__kernel_time_t msg_stime;	/* last msgsnd time */
 | 
			
		||||
#if __BITS_PER_LONG != 64
 | 
			
		||||
	unsigned long	__unused1;
 | 
			
		||||
#endif
 | 
			
		||||
	__kernel_time_t msg_rtime;	/* last msgrcv time */
 | 
			
		||||
#if __BITS_PER_LONG != 64
 | 
			
		||||
	unsigned long	__unused2;
 | 
			
		||||
#endif
 | 
			
		||||
	__kernel_time_t msg_ctime;	/* last change time */
 | 
			
		||||
#if __BITS_PER_LONG != 64
 | 
			
		||||
	unsigned long	__unused3;
 | 
			
		||||
#endif
 | 
			
		||||
	__kernel_ulong_t msg_cbytes;	/* current number of bytes on queue */
 | 
			
		||||
	__kernel_ulong_t msg_qnum;	/* number of messages in queue */
 | 
			
		||||
	__kernel_ulong_t msg_qbytes;	/* max number of bytes on queue */
 | 
			
		||||
	__kernel_pid_t msg_lspid;	/* pid of last msgsnd */
 | 
			
		||||
	__kernel_pid_t msg_lrpid;	/* last receive pid */
 | 
			
		||||
	__kernel_ulong_t __unused4;
 | 
			
		||||
	__kernel_ulong_t __unused5;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_MSGBUF_H */
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_PARAM_H
 | 
			
		||||
#define __ASM_GENERIC_PARAM_H
 | 
			
		||||
 | 
			
		||||
#ifndef HZ
 | 
			
		||||
#define HZ 100
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef EXEC_PAGESIZE
 | 
			
		||||
#define EXEC_PAGESIZE	4096
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef NOGROUP
 | 
			
		||||
#define NOGROUP		(-1)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define MAXHOSTNAMELEN	64	/* max length of hostname */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_PARAM_H */
 | 
			
		||||
@@ -0,0 +1,41 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_POLL_H
 | 
			
		||||
#define __ASM_GENERIC_POLL_H
 | 
			
		||||
 | 
			
		||||
/* These are specified by iBCS2 */
 | 
			
		||||
#define POLLIN		0x0001
 | 
			
		||||
#define POLLPRI		0x0002
 | 
			
		||||
#define POLLOUT		0x0004
 | 
			
		||||
#define POLLERR		0x0008
 | 
			
		||||
#define POLLHUP		0x0010
 | 
			
		||||
#define POLLNVAL	0x0020
 | 
			
		||||
 | 
			
		||||
/* The rest seem to be more-or-less nonstandard. Check them! */
 | 
			
		||||
#define POLLRDNORM	0x0040
 | 
			
		||||
#define POLLRDBAND	0x0080
 | 
			
		||||
#ifndef POLLWRNORM
 | 
			
		||||
#define POLLWRNORM	0x0100
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef POLLWRBAND
 | 
			
		||||
#define POLLWRBAND	0x0200
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef POLLMSG
 | 
			
		||||
#define POLLMSG		0x0400
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef POLLREMOVE
 | 
			
		||||
#define POLLREMOVE	0x1000
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef POLLRDHUP
 | 
			
		||||
#define POLLRDHUP       0x2000
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define POLLFREE	0x4000	/* currently only for epoll */
 | 
			
		||||
 | 
			
		||||
#define POLL_BUSY_LOOP	0x8000
 | 
			
		||||
 | 
			
		||||
struct pollfd {
 | 
			
		||||
	int fd;
 | 
			
		||||
	short events;
 | 
			
		||||
	short revents;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif	/* __ASM_GENERIC_POLL_H */
 | 
			
		||||
@@ -0,0 +1,96 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_POSIX_TYPES_H
 | 
			
		||||
#define __ASM_GENERIC_POSIX_TYPES_H
 | 
			
		||||
 | 
			
		||||
#include <asm/bitsperlong.h>
 | 
			
		||||
/*
 | 
			
		||||
 * This file is generally used by user-level software, so you need to
 | 
			
		||||
 * be a little careful about namespace pollution etc.
 | 
			
		||||
 *
 | 
			
		||||
 * First the types that are often defined in different ways across
 | 
			
		||||
 * architectures, so that you can override them.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_long_t
 | 
			
		||||
typedef long		__kernel_long_t;
 | 
			
		||||
typedef unsigned long	__kernel_ulong_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_ino_t
 | 
			
		||||
typedef __kernel_ulong_t __kernel_ino_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_mode_t
 | 
			
		||||
typedef unsigned int	__kernel_mode_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_pid_t
 | 
			
		||||
typedef int		__kernel_pid_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_ipc_pid_t
 | 
			
		||||
typedef int		__kernel_ipc_pid_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_uid_t
 | 
			
		||||
typedef unsigned int	__kernel_uid_t;
 | 
			
		||||
typedef unsigned int	__kernel_gid_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_suseconds_t
 | 
			
		||||
typedef __kernel_long_t		__kernel_suseconds_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_daddr_t
 | 
			
		||||
typedef int		__kernel_daddr_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_uid32_t
 | 
			
		||||
typedef unsigned int	__kernel_uid32_t;
 | 
			
		||||
typedef unsigned int	__kernel_gid32_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_old_uid_t
 | 
			
		||||
typedef __kernel_uid_t	__kernel_old_uid_t;
 | 
			
		||||
typedef __kernel_gid_t	__kernel_old_gid_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_old_dev_t
 | 
			
		||||
typedef unsigned int	__kernel_old_dev_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Most 32 bit architectures use "unsigned int" size_t,
 | 
			
		||||
 * and all 64 bit architectures use "unsigned long" size_t.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __kernel_size_t
 | 
			
		||||
#if __BITS_PER_LONG != 64
 | 
			
		||||
typedef unsigned int	__kernel_size_t;
 | 
			
		||||
typedef int		__kernel_ssize_t;
 | 
			
		||||
typedef int		__kernel_ptrdiff_t;
 | 
			
		||||
#else
 | 
			
		||||
typedef __kernel_ulong_t __kernel_size_t;
 | 
			
		||||
typedef __kernel_long_t	__kernel_ssize_t;
 | 
			
		||||
typedef __kernel_long_t	__kernel_ptrdiff_t;
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __kernel_fsid_t
 | 
			
		||||
typedef struct {
 | 
			
		||||
	int	val[2];
 | 
			
		||||
} __kernel_fsid_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * anything below here should be completely generic
 | 
			
		||||
 */
 | 
			
		||||
typedef __kernel_long_t	__kernel_off_t;
 | 
			
		||||
typedef long long	__kernel_loff_t;
 | 
			
		||||
typedef __kernel_long_t	__kernel_time_t;
 | 
			
		||||
typedef __kernel_long_t	__kernel_clock_t;
 | 
			
		||||
typedef int		__kernel_timer_t;
 | 
			
		||||
typedef int		__kernel_clockid_t;
 | 
			
		||||
typedef char *		__kernel_caddr_t;
 | 
			
		||||
typedef unsigned short	__kernel_uid16_t;
 | 
			
		||||
typedef unsigned short	__kernel_gid16_t;
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_POSIX_TYPES_H */
 | 
			
		||||
@@ -0,0 +1,61 @@
 | 
			
		||||
#ifndef _ASM_GENERIC_RESOURCE_H
 | 
			
		||||
#define _ASM_GENERIC_RESOURCE_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Resource limit IDs
 | 
			
		||||
 *
 | 
			
		||||
 * ( Compatibility detail: there are architectures that have
 | 
			
		||||
 *   a different rlimit ID order in the 5-9 range and want
 | 
			
		||||
 *   to keep that order for binary compatibility. The reasons
 | 
			
		||||
 *   are historic and all new rlimits are identical across all
 | 
			
		||||
 *   arches. If an arch has such special order for some rlimits
 | 
			
		||||
 *   then it defines them prior including asm-generic/resource.h. )
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define RLIMIT_CPU		0	/* CPU time in sec */
 | 
			
		||||
#define RLIMIT_FSIZE		1	/* Maximum filesize */
 | 
			
		||||
#define RLIMIT_DATA		2	/* max data size */
 | 
			
		||||
#define RLIMIT_STACK		3	/* max stack size */
 | 
			
		||||
#define RLIMIT_CORE		4	/* max core file size */
 | 
			
		||||
 | 
			
		||||
#ifndef RLIMIT_RSS
 | 
			
		||||
# define RLIMIT_RSS		5	/* max resident set size */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef RLIMIT_NPROC
 | 
			
		||||
# define RLIMIT_NPROC		6	/* max number of processes */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef RLIMIT_NOFILE
 | 
			
		||||
# define RLIMIT_NOFILE		7	/* max number of open files */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef RLIMIT_MEMLOCK
 | 
			
		||||
# define RLIMIT_MEMLOCK		8	/* max locked-in-memory address space */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef RLIMIT_AS
 | 
			
		||||
# define RLIMIT_AS		9	/* address space limit */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define RLIMIT_LOCKS		10	/* maximum file locks held */
 | 
			
		||||
#define RLIMIT_SIGPENDING	11	/* max number of pending signals */
 | 
			
		||||
#define RLIMIT_MSGQUEUE		12	/* maximum bytes in POSIX mqueues */
 | 
			
		||||
#define RLIMIT_NICE		13	/* max nice prio allowed to raise to
 | 
			
		||||
					   0-39 for nice level 19 .. -20 */
 | 
			
		||||
#define RLIMIT_RTPRIO		14	/* maximum realtime priority */
 | 
			
		||||
#define RLIMIT_RTTIME		15	/* timeout for RT tasks in us */
 | 
			
		||||
#define RLIM_NLIMITS		16
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SuS says limits have to be unsigned.
 | 
			
		||||
 * Which makes a ton more sense anyway.
 | 
			
		||||
 *
 | 
			
		||||
 * Some architectures override this (for compatibility reasons):
 | 
			
		||||
 */
 | 
			
		||||
#ifndef RLIM_INFINITY
 | 
			
		||||
# define RLIM_INFINITY		(~0UL)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_GENERIC_RESOURCE_H */
 | 
			
		||||
@@ -0,0 +1,38 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_SEMBUF_H
 | 
			
		||||
#define __ASM_GENERIC_SEMBUF_H
 | 
			
		||||
 | 
			
		||||
#include <asm/bitsperlong.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The semid64_ds structure for x86 architecture.
 | 
			
		||||
 * Note extra padding because this structure is passed back and forth
 | 
			
		||||
 * between kernel and user space.
 | 
			
		||||
 *
 | 
			
		||||
 * semid64_ds was originally meant to be architecture specific, but
 | 
			
		||||
 * everyone just ended up making identical copies without specific
 | 
			
		||||
 * optimizations, so we may just as well all use the same one.
 | 
			
		||||
 *
 | 
			
		||||
 * 64 bit architectures typically define a 64 bit __kernel_time_t,
 | 
			
		||||
 * so they do not need the first two padding words.
 | 
			
		||||
 * On big-endian systems, the padding is in the wrong place.
 | 
			
		||||
 *
 | 
			
		||||
 * Pad space is left for:
 | 
			
		||||
 * - 64-bit time_t to solve y2038 problem
 | 
			
		||||
 * - 2 miscellaneous 32-bit values
 | 
			
		||||
 */
 | 
			
		||||
struct semid64_ds {
 | 
			
		||||
	struct ipc64_perm sem_perm;	/* permissions .. see ipc.h */
 | 
			
		||||
	__kernel_time_t	sem_otime;	/* last semop time */
 | 
			
		||||
#if __BITS_PER_LONG != 64
 | 
			
		||||
	unsigned long	__unused1;
 | 
			
		||||
#endif
 | 
			
		||||
	__kernel_time_t	sem_ctime;	/* last change time */
 | 
			
		||||
#if __BITS_PER_LONG != 64
 | 
			
		||||
	unsigned long	__unused2;
 | 
			
		||||
#endif
 | 
			
		||||
	unsigned long	sem_nsems;	/* no. of semaphores in array */
 | 
			
		||||
	unsigned long	__unused3;
 | 
			
		||||
	unsigned long	__unused4;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_SEMBUF_H */
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_SETUP_H
 | 
			
		||||
#define __ASM_GENERIC_SETUP_H
 | 
			
		||||
 | 
			
		||||
#define COMMAND_LINE_SIZE	512
 | 
			
		||||
 | 
			
		||||
#endif	/* __ASM_GENERIC_SETUP_H */
 | 
			
		||||
@@ -0,0 +1,59 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_SHMBUF_H
 | 
			
		||||
#define __ASM_GENERIC_SHMBUF_H
 | 
			
		||||
 | 
			
		||||
#include <asm/bitsperlong.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The shmid64_ds structure for x86 architecture.
 | 
			
		||||
 * Note extra padding because this structure is passed back and forth
 | 
			
		||||
 * between kernel and user space.
 | 
			
		||||
 *
 | 
			
		||||
 * shmid64_ds was originally meant to be architecture specific, but
 | 
			
		||||
 * everyone just ended up making identical copies without specific
 | 
			
		||||
 * optimizations, so we may just as well all use the same one.
 | 
			
		||||
 *
 | 
			
		||||
 * 64 bit architectures typically define a 64 bit __kernel_time_t,
 | 
			
		||||
 * so they do not need the first two padding words.
 | 
			
		||||
 * On big-endian systems, the padding is in the wrong place.
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 * Pad space is left for:
 | 
			
		||||
 * - 64-bit time_t to solve y2038 problem
 | 
			
		||||
 * - 2 miscellaneous 32-bit values
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
struct shmid64_ds {
 | 
			
		||||
	struct ipc64_perm	shm_perm;	/* operation perms */
 | 
			
		||||
	size_t			shm_segsz;	/* size of segment (bytes) */
 | 
			
		||||
	__kernel_time_t		shm_atime;	/* last attach time */
 | 
			
		||||
#if __BITS_PER_LONG != 64
 | 
			
		||||
	unsigned long		__unused1;
 | 
			
		||||
#endif
 | 
			
		||||
	__kernel_time_t		shm_dtime;	/* last detach time */
 | 
			
		||||
#if __BITS_PER_LONG != 64
 | 
			
		||||
	unsigned long		__unused2;
 | 
			
		||||
#endif
 | 
			
		||||
	__kernel_time_t		shm_ctime;	/* last change time */
 | 
			
		||||
#if __BITS_PER_LONG != 64
 | 
			
		||||
	unsigned long		__unused3;
 | 
			
		||||
#endif
 | 
			
		||||
	__kernel_pid_t		shm_cpid;	/* pid of creator */
 | 
			
		||||
	__kernel_pid_t		shm_lpid;	/* pid of last operator */
 | 
			
		||||
	__kernel_ulong_t	shm_nattch;	/* no. of current attaches */
 | 
			
		||||
	__kernel_ulong_t	__unused4;
 | 
			
		||||
	__kernel_ulong_t	__unused5;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct shminfo64 {
 | 
			
		||||
	__kernel_ulong_t	shmmax;
 | 
			
		||||
	__kernel_ulong_t	shmmin;
 | 
			
		||||
	__kernel_ulong_t	shmmni;
 | 
			
		||||
	__kernel_ulong_t	shmseg;
 | 
			
		||||
	__kernel_ulong_t	shmall;
 | 
			
		||||
	__kernel_ulong_t	__unused1;
 | 
			
		||||
	__kernel_ulong_t	__unused2;
 | 
			
		||||
	__kernel_ulong_t	__unused3;
 | 
			
		||||
	__kernel_ulong_t	__unused4;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_SHMBUF_H */
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_SHMPARAM_H
 | 
			
		||||
#define __ASM_GENERIC_SHMPARAM_H
 | 
			
		||||
 | 
			
		||||
#define SHMLBA PAGE_SIZE	 /* attach addr a multiple of this */
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_GENERIC_SHMPARAM_H */
 | 
			
		||||
@@ -0,0 +1,303 @@
 | 
			
		||||
#ifndef _ASM_GENERIC_SIGINFO_H
 | 
			
		||||
#define _ASM_GENERIC_SIGINFO_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
 | 
			
		||||
typedef union sigval {
 | 
			
		||||
	int sival_int;
 | 
			
		||||
	void *sival_ptr;
 | 
			
		||||
} sigval_t;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is the size (including padding) of the part of the
 | 
			
		||||
 * struct siginfo that is before the union.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __ARCH_SI_PREAMBLE_SIZE
 | 
			
		||||
#define __ARCH_SI_PREAMBLE_SIZE	(3 * sizeof(int))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define SI_MAX_SIZE	128
 | 
			
		||||
#ifndef SI_PAD_SIZE
 | 
			
		||||
#define SI_PAD_SIZE	((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __ARCH_SI_UID_T
 | 
			
		||||
#define __ARCH_SI_UID_T	__kernel_uid32_t
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The default "si_band" type is "long", as specified by POSIX.
 | 
			
		||||
 * However, some architectures want to override this to "int"
 | 
			
		||||
 * for historical compatibility reasons, so we allow that.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __ARCH_SI_BAND_T
 | 
			
		||||
#define __ARCH_SI_BAND_T long
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __ARCH_SI_CLOCK_T
 | 
			
		||||
#define __ARCH_SI_CLOCK_T __kernel_clock_t
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __ARCH_SI_ATTRIBUTES
 | 
			
		||||
#define __ARCH_SI_ATTRIBUTES
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_ARCH_SIGINFO_T
 | 
			
		||||
 | 
			
		||||
typedef struct siginfo {
 | 
			
		||||
	int si_signo;
 | 
			
		||||
	int si_errno;
 | 
			
		||||
	int si_code;
 | 
			
		||||
 | 
			
		||||
	union {
 | 
			
		||||
		int _pad[SI_PAD_SIZE];
 | 
			
		||||
 | 
			
		||||
		/* kill() */
 | 
			
		||||
		struct {
 | 
			
		||||
			__kernel_pid_t _pid;	/* sender's pid */
 | 
			
		||||
			__ARCH_SI_UID_T _uid;	/* sender's uid */
 | 
			
		||||
		} _kill;
 | 
			
		||||
 | 
			
		||||
		/* POSIX.1b timers */
 | 
			
		||||
		struct {
 | 
			
		||||
			__kernel_timer_t _tid;	/* timer id */
 | 
			
		||||
			int _overrun;		/* overrun count */
 | 
			
		||||
			char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
 | 
			
		||||
			sigval_t _sigval;	/* same as below */
 | 
			
		||||
			int _sys_private;       /* not to be passed to user */
 | 
			
		||||
		} _timer;
 | 
			
		||||
 | 
			
		||||
		/* POSIX.1b signals */
 | 
			
		||||
		struct {
 | 
			
		||||
			__kernel_pid_t _pid;	/* sender's pid */
 | 
			
		||||
			__ARCH_SI_UID_T _uid;	/* sender's uid */
 | 
			
		||||
			sigval_t _sigval;
 | 
			
		||||
		} _rt;
 | 
			
		||||
 | 
			
		||||
		/* SIGCHLD */
 | 
			
		||||
		struct {
 | 
			
		||||
			__kernel_pid_t _pid;	/* which child */
 | 
			
		||||
			__ARCH_SI_UID_T _uid;	/* sender's uid */
 | 
			
		||||
			int _status;		/* exit code */
 | 
			
		||||
			__ARCH_SI_CLOCK_T _utime;
 | 
			
		||||
			__ARCH_SI_CLOCK_T _stime;
 | 
			
		||||
		} _sigchld;
 | 
			
		||||
 | 
			
		||||
		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
 | 
			
		||||
		struct {
 | 
			
		||||
			void *_addr; /* faulting insn/memory ref. */
 | 
			
		||||
#ifdef __ARCH_SI_TRAPNO
 | 
			
		||||
			int _trapno;	/* TRAP # which caused the signal */
 | 
			
		||||
#endif
 | 
			
		||||
			short _addr_lsb; /* LSB of the reported address */
 | 
			
		||||
			struct {
 | 
			
		||||
				void *_lower;
 | 
			
		||||
				void *_upper;
 | 
			
		||||
			} _addr_bnd;
 | 
			
		||||
		} _sigfault;
 | 
			
		||||
 | 
			
		||||
		/* SIGPOLL */
 | 
			
		||||
		struct {
 | 
			
		||||
			__ARCH_SI_BAND_T _band;	/* POLL_IN, POLL_OUT, POLL_MSG */
 | 
			
		||||
			int _fd;
 | 
			
		||||
		} _sigpoll;
 | 
			
		||||
 | 
			
		||||
		/* SIGSYS */
 | 
			
		||||
		struct {
 | 
			
		||||
			void *_call_addr; /* calling user insn */
 | 
			
		||||
			int _syscall;	/* triggering system call number */
 | 
			
		||||
			unsigned int _arch;	/* AUDIT_ARCH_* of syscall */
 | 
			
		||||
		} _sigsys;
 | 
			
		||||
	} _sifields;
 | 
			
		||||
} __ARCH_SI_ATTRIBUTES siginfo_t;
 | 
			
		||||
 | 
			
		||||
/* If the arch shares siginfo, then it has SIGSYS. */
 | 
			
		||||
#define __ARCH_SIGSYS
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * How these fields are to be accessed.
 | 
			
		||||
 */
 | 
			
		||||
#define si_pid		_sifields._kill._pid
 | 
			
		||||
#define si_uid		_sifields._kill._uid
 | 
			
		||||
#define si_tid		_sifields._timer._tid
 | 
			
		||||
#define si_overrun	_sifields._timer._overrun
 | 
			
		||||
#define si_sys_private  _sifields._timer._sys_private
 | 
			
		||||
#define si_status	_sifields._sigchld._status
 | 
			
		||||
#define si_utime	_sifields._sigchld._utime
 | 
			
		||||
#define si_stime	_sifields._sigchld._stime
 | 
			
		||||
#define si_value	_sifields._rt._sigval
 | 
			
		||||
#define si_int		_sifields._rt._sigval.sival_int
 | 
			
		||||
#define si_ptr		_sifields._rt._sigval.sival_ptr
 | 
			
		||||
#define si_addr		_sifields._sigfault._addr
 | 
			
		||||
#ifdef __ARCH_SI_TRAPNO
 | 
			
		||||
#define si_trapno	_sifields._sigfault._trapno
 | 
			
		||||
#endif
 | 
			
		||||
#define si_addr_lsb	_sifields._sigfault._addr_lsb
 | 
			
		||||
#define si_lower	_sifields._sigfault._addr_bnd._lower
 | 
			
		||||
#define si_upper	_sifields._sigfault._addr_bnd._upper
 | 
			
		||||
#define si_band		_sifields._sigpoll._band
 | 
			
		||||
#define si_fd		_sifields._sigpoll._fd
 | 
			
		||||
#ifdef __ARCH_SIGSYS
 | 
			
		||||
#define si_call_addr	_sifields._sigsys._call_addr
 | 
			
		||||
#define si_syscall	_sifields._sigsys._syscall
 | 
			
		||||
#define si_arch		_sifields._sigsys._arch
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define __SI_KILL	0
 | 
			
		||||
#define __SI_TIMER	0
 | 
			
		||||
#define __SI_POLL	0
 | 
			
		||||
#define __SI_FAULT	0
 | 
			
		||||
#define __SI_CHLD	0
 | 
			
		||||
#define __SI_RT		0
 | 
			
		||||
#define __SI_MESGQ	0
 | 
			
		||||
#define __SI_SYS	0
 | 
			
		||||
#define __SI_CODE(T,N)	(N)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * si_code values
 | 
			
		||||
 * Digital reserves positive values for kernel-generated signals.
 | 
			
		||||
 */
 | 
			
		||||
#define SI_USER		0		/* sent by kill, sigsend, raise */
 | 
			
		||||
#define SI_KERNEL	0x80		/* sent by the kernel from somewhere */
 | 
			
		||||
#define SI_QUEUE	-1		/* sent by sigqueue */
 | 
			
		||||
#define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */
 | 
			
		||||
#define SI_MESGQ __SI_CODE(__SI_MESGQ,-3) /* sent by real time mesq state change */
 | 
			
		||||
#define SI_ASYNCIO	-4		/* sent by AIO completion */
 | 
			
		||||
#define SI_SIGIO	-5		/* sent by queued SIGIO */
 | 
			
		||||
#define SI_TKILL	-6		/* sent by tkill system call */
 | 
			
		||||
#define SI_DETHREAD	-7		/* sent by execve() killing subsidiary threads */
 | 
			
		||||
 | 
			
		||||
#define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 | 
			
		||||
#define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SIGILL si_codes
 | 
			
		||||
 */
 | 
			
		||||
#define ILL_ILLOPC	(__SI_FAULT|1)	/* illegal opcode */
 | 
			
		||||
#define ILL_ILLOPN	(__SI_FAULT|2)	/* illegal operand */
 | 
			
		||||
#define ILL_ILLADR	(__SI_FAULT|3)	/* illegal addressing mode */
 | 
			
		||||
#define ILL_ILLTRP	(__SI_FAULT|4)	/* illegal trap */
 | 
			
		||||
#define ILL_PRVOPC	(__SI_FAULT|5)	/* privileged opcode */
 | 
			
		||||
#define ILL_PRVREG	(__SI_FAULT|6)	/* privileged register */
 | 
			
		||||
#define ILL_COPROC	(__SI_FAULT|7)	/* coprocessor error */
 | 
			
		||||
#define ILL_BADSTK	(__SI_FAULT|8)	/* internal stack error */
 | 
			
		||||
#define NSIGILL		8
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SIGFPE si_codes
 | 
			
		||||
 */
 | 
			
		||||
#define FPE_INTDIV	(__SI_FAULT|1)	/* integer divide by zero */
 | 
			
		||||
#define FPE_INTOVF	(__SI_FAULT|2)	/* integer overflow */
 | 
			
		||||
#define FPE_FLTDIV	(__SI_FAULT|3)	/* floating point divide by zero */
 | 
			
		||||
#define FPE_FLTOVF	(__SI_FAULT|4)	/* floating point overflow */
 | 
			
		||||
#define FPE_FLTUND	(__SI_FAULT|5)	/* floating point underflow */
 | 
			
		||||
#define FPE_FLTRES	(__SI_FAULT|6)	/* floating point inexact result */
 | 
			
		||||
#define FPE_FLTINV	(__SI_FAULT|7)	/* floating point invalid operation */
 | 
			
		||||
#define FPE_FLTSUB	(__SI_FAULT|8)	/* subscript out of range */
 | 
			
		||||
#define NSIGFPE		8
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SIGSEGV si_codes
 | 
			
		||||
 */
 | 
			
		||||
#define SEGV_MAPERR	(__SI_FAULT|1)	/* address not mapped to object */
 | 
			
		||||
#define SEGV_ACCERR	(__SI_FAULT|2)	/* invalid permissions for mapped object */
 | 
			
		||||
#define SEGV_BNDERR	(__SI_FAULT|3)  /* failed address bound checks */
 | 
			
		||||
#define NSIGSEGV	3
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SIGBUS si_codes
 | 
			
		||||
 */
 | 
			
		||||
#define BUS_ADRALN	(__SI_FAULT|1)	/* invalid address alignment */
 | 
			
		||||
#define BUS_ADRERR	(__SI_FAULT|2)	/* non-existent physical address */
 | 
			
		||||
#define BUS_OBJERR	(__SI_FAULT|3)	/* object specific hardware error */
 | 
			
		||||
/* hardware memory error consumed on a machine check: action required */
 | 
			
		||||
#define BUS_MCEERR_AR	(__SI_FAULT|4)
 | 
			
		||||
/* hardware memory error detected in process but not consumed: action optional*/
 | 
			
		||||
#define BUS_MCEERR_AO	(__SI_FAULT|5)
 | 
			
		||||
#define NSIGBUS		5
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SIGTRAP si_codes
 | 
			
		||||
 */
 | 
			
		||||
#define TRAP_BRKPT	(__SI_FAULT|1)	/* process breakpoint */
 | 
			
		||||
#define TRAP_TRACE	(__SI_FAULT|2)	/* process trace trap */
 | 
			
		||||
#define TRAP_BRANCH     (__SI_FAULT|3)  /* process taken branch trap */
 | 
			
		||||
#define TRAP_HWBKPT     (__SI_FAULT|4)  /* hardware breakpoint/watchpoint */
 | 
			
		||||
#define NSIGTRAP	4
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SIGCHLD si_codes
 | 
			
		||||
 */
 | 
			
		||||
#define CLD_EXITED	(__SI_CHLD|1)	/* child has exited */
 | 
			
		||||
#define CLD_KILLED	(__SI_CHLD|2)	/* child was killed */
 | 
			
		||||
#define CLD_DUMPED	(__SI_CHLD|3)	/* child terminated abnormally */
 | 
			
		||||
#define CLD_TRAPPED	(__SI_CHLD|4)	/* traced child has trapped */
 | 
			
		||||
#define CLD_STOPPED	(__SI_CHLD|5)	/* child has stopped */
 | 
			
		||||
#define CLD_CONTINUED	(__SI_CHLD|6)	/* stopped child has continued */
 | 
			
		||||
#define NSIGCHLD	6
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SIGPOLL si_codes
 | 
			
		||||
 */
 | 
			
		||||
#define POLL_IN		(__SI_POLL|1)	/* data input available */
 | 
			
		||||
#define POLL_OUT	(__SI_POLL|2)	/* output buffers available */
 | 
			
		||||
#define POLL_MSG	(__SI_POLL|3)	/* input message available */
 | 
			
		||||
#define POLL_ERR	(__SI_POLL|4)	/* i/o error */
 | 
			
		||||
#define POLL_PRI	(__SI_POLL|5)	/* high priority input available */
 | 
			
		||||
#define POLL_HUP	(__SI_POLL|6)	/* device disconnected */
 | 
			
		||||
#define NSIGPOLL	6
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SIGSYS si_codes
 | 
			
		||||
 */
 | 
			
		||||
#define SYS_SECCOMP		(__SI_SYS|1)	/* seccomp triggered */
 | 
			
		||||
#define NSIGSYS	1
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * sigevent definitions
 | 
			
		||||
 * 
 | 
			
		||||
 * It seems likely that SIGEV_THREAD will have to be handled from 
 | 
			
		||||
 * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
 | 
			
		||||
 * thread manager then catches and does the appropriate nonsense.
 | 
			
		||||
 * However, everything is written out here so as to not get lost.
 | 
			
		||||
 */
 | 
			
		||||
#define SIGEV_SIGNAL	0	/* notify via signal */
 | 
			
		||||
#define SIGEV_NONE	1	/* other notification: meaningless */
 | 
			
		||||
#define SIGEV_THREAD	2	/* deliver via thread creation */
 | 
			
		||||
#define SIGEV_THREAD_ID 4	/* deliver to thread */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This works because the alignment is ok on all current architectures
 | 
			
		||||
 * but we leave open this being overridden in the future
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __ARCH_SIGEV_PREAMBLE_SIZE
 | 
			
		||||
#define __ARCH_SIGEV_PREAMBLE_SIZE	(sizeof(int) * 2 + sizeof(sigval_t))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define SIGEV_MAX_SIZE	64
 | 
			
		||||
#define SIGEV_PAD_SIZE	((SIGEV_MAX_SIZE - __ARCH_SIGEV_PREAMBLE_SIZE) \
 | 
			
		||||
		/ sizeof(int))
 | 
			
		||||
 | 
			
		||||
typedef struct sigevent {
 | 
			
		||||
	sigval_t sigev_value;
 | 
			
		||||
	int sigev_signo;
 | 
			
		||||
	int sigev_notify;
 | 
			
		||||
	union {
 | 
			
		||||
		int _pad[SIGEV_PAD_SIZE];
 | 
			
		||||
		 int _tid;
 | 
			
		||||
 | 
			
		||||
		struct {
 | 
			
		||||
			void (*_function)(sigval_t);
 | 
			
		||||
			void *_attribute;	/* really pthread_attr_t */
 | 
			
		||||
		} _sigev_thread;
 | 
			
		||||
	} _sigev_un;
 | 
			
		||||
} sigevent_t;
 | 
			
		||||
 | 
			
		||||
#define sigev_notify_function	_sigev_un._sigev_thread._function
 | 
			
		||||
#define sigev_notify_attributes	_sigev_un._sigev_thread._attribute
 | 
			
		||||
#define sigev_notify_thread_id	 _sigev_un._tid
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_GENERIC_SIGINFO_H */
 | 
			
		||||
@@ -0,0 +1,28 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_SIGNAL_DEFS_H
 | 
			
		||||
#define __ASM_GENERIC_SIGNAL_DEFS_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef SIG_BLOCK
 | 
			
		||||
#define SIG_BLOCK          0	/* for blocking signals */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef SIG_UNBLOCK
 | 
			
		||||
#define SIG_UNBLOCK        1	/* for unblocking signals */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef SIG_SETMASK
 | 
			
		||||
#define SIG_SETMASK        2	/* for setting the signal mask */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
typedef void __signalfn_t(int);
 | 
			
		||||
typedef __signalfn_t *__sighandler_t;
 | 
			
		||||
 | 
			
		||||
typedef void __restorefn_t(void);
 | 
			
		||||
typedef __restorefn_t *__sigrestore_t;
 | 
			
		||||
 | 
			
		||||
#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
 | 
			
		||||
#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
 | 
			
		||||
#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_SIGNAL_DEFS_H */
 | 
			
		||||
@@ -0,0 +1,119 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_SIGNAL_H
 | 
			
		||||
#define __ASM_GENERIC_SIGNAL_H
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
 | 
			
		||||
#define _NSIG		64
 | 
			
		||||
#define _NSIG_BPW	__BITS_PER_LONG
 | 
			
		||||
#define _NSIG_WORDS	(_NSIG / _NSIG_BPW)
 | 
			
		||||
 | 
			
		||||
#define SIGHUP		 1
 | 
			
		||||
#define SIGINT		 2
 | 
			
		||||
#define SIGQUIT		 3
 | 
			
		||||
#define SIGILL		 4
 | 
			
		||||
#define SIGTRAP		 5
 | 
			
		||||
#define SIGABRT		 6
 | 
			
		||||
#define SIGIOT		 6
 | 
			
		||||
#define SIGBUS		 7
 | 
			
		||||
#define SIGFPE		 8
 | 
			
		||||
#define SIGKILL		 9
 | 
			
		||||
#define SIGUSR1		10
 | 
			
		||||
#define SIGSEGV		11
 | 
			
		||||
#define SIGUSR2		12
 | 
			
		||||
#define SIGPIPE		13
 | 
			
		||||
#define SIGALRM		14
 | 
			
		||||
#define SIGTERM		15
 | 
			
		||||
#define SIGSTKFLT	16
 | 
			
		||||
#define SIGCHLD		17
 | 
			
		||||
#define SIGCONT		18
 | 
			
		||||
#define SIGSTOP		19
 | 
			
		||||
#define SIGTSTP		20
 | 
			
		||||
#define SIGTTIN		21
 | 
			
		||||
#define SIGTTOU		22
 | 
			
		||||
#define SIGURG		23
 | 
			
		||||
#define SIGXCPU		24
 | 
			
		||||
#define SIGXFSZ		25
 | 
			
		||||
#define SIGVTALRM	26
 | 
			
		||||
#define SIGPROF		27
 | 
			
		||||
#define SIGWINCH	28
 | 
			
		||||
#define SIGIO		29
 | 
			
		||||
#define SIGPOLL		SIGIO
 | 
			
		||||
/*
 | 
			
		||||
#define SIGLOST		29
 | 
			
		||||
*/
 | 
			
		||||
#define SIGPWR		30
 | 
			
		||||
#define SIGSYS		31
 | 
			
		||||
#define	SIGUNUSED	31
 | 
			
		||||
 | 
			
		||||
/* These should not be considered constants from userland.  */
 | 
			
		||||
#define SIGRTMIN	32
 | 
			
		||||
#ifndef SIGRTMAX
 | 
			
		||||
#define SIGRTMAX	_NSIG
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SA_FLAGS values:
 | 
			
		||||
 *
 | 
			
		||||
 * SA_ONSTACK indicates that a registered stack_t will be used.
 | 
			
		||||
 * SA_RESTART flag to get restarting signals (which were the default long ago)
 | 
			
		||||
 * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
 | 
			
		||||
 * SA_RESETHAND clears the handler when the signal is delivered.
 | 
			
		||||
 * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
 | 
			
		||||
 * SA_NODEFER prevents the current signal from being masked in the handler.
 | 
			
		||||
 *
 | 
			
		||||
 * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
 | 
			
		||||
 * Unix names RESETHAND and NODEFER respectively.
 | 
			
		||||
 */
 | 
			
		||||
#define SA_NOCLDSTOP	0x00000001
 | 
			
		||||
#define SA_NOCLDWAIT	0x00000002
 | 
			
		||||
#define SA_SIGINFO	0x00000004
 | 
			
		||||
#define SA_ONSTACK	0x08000000
 | 
			
		||||
#define SA_RESTART	0x10000000
 | 
			
		||||
#define SA_NODEFER	0x40000000
 | 
			
		||||
#define SA_RESETHAND	0x80000000
 | 
			
		||||
 | 
			
		||||
#define SA_NOMASK	SA_NODEFER
 | 
			
		||||
#define SA_ONESHOT	SA_RESETHAND
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * New architectures should not define the obsolete
 | 
			
		||||
 *	SA_RESTORER	0x04000000
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if !defined MINSIGSTKSZ || !defined SIGSTKSZ
 | 
			
		||||
#define MINSIGSTKSZ	2048
 | 
			
		||||
#define SIGSTKSZ	8192
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
typedef struct {
 | 
			
		||||
	unsigned long sig[_NSIG_WORDS];
 | 
			
		||||
} sigset_t;
 | 
			
		||||
 | 
			
		||||
/* not actually used, but required for linux/syscalls.h */
 | 
			
		||||
typedef unsigned long old_sigset_t;
 | 
			
		||||
 | 
			
		||||
#include <asm-generic/signal-defs.h>
 | 
			
		||||
 | 
			
		||||
#ifdef SA_RESTORER
 | 
			
		||||
#define __ARCH_HAS_SA_RESTORER
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct sigaction {
 | 
			
		||||
	__sighandler_t sa_handler;
 | 
			
		||||
	unsigned long sa_flags;
 | 
			
		||||
#ifdef SA_RESTORER
 | 
			
		||||
	__sigrestore_t sa_restorer;
 | 
			
		||||
#endif
 | 
			
		||||
	sigset_t sa_mask;		/* mask last for extensibility */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct sigaltstack {
 | 
			
		||||
	void *ss_sp;
 | 
			
		||||
	int ss_flags;
 | 
			
		||||
	size_t ss_size;
 | 
			
		||||
} stack_t;
 | 
			
		||||
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_SIGNAL_H */
 | 
			
		||||
@@ -0,0 +1,90 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_SOCKET_H
 | 
			
		||||
#define __ASM_GENERIC_SOCKET_H
 | 
			
		||||
 | 
			
		||||
#include <asm/sockios.h>
 | 
			
		||||
 | 
			
		||||
/* For setsockopt(2) */
 | 
			
		||||
#define SOL_SOCKET	1
 | 
			
		||||
 | 
			
		||||
#define SO_DEBUG	1
 | 
			
		||||
#define SO_REUSEADDR	2
 | 
			
		||||
#define SO_TYPE		3
 | 
			
		||||
#define SO_ERROR	4
 | 
			
		||||
#define SO_DONTROUTE	5
 | 
			
		||||
#define SO_BROADCAST	6
 | 
			
		||||
#define SO_SNDBUF	7
 | 
			
		||||
#define SO_RCVBUF	8
 | 
			
		||||
#define SO_SNDBUFFORCE	32
 | 
			
		||||
#define SO_RCVBUFFORCE	33
 | 
			
		||||
#define SO_KEEPALIVE	9
 | 
			
		||||
#define SO_OOBINLINE	10
 | 
			
		||||
#define SO_NO_CHECK	11
 | 
			
		||||
#define SO_PRIORITY	12
 | 
			
		||||
#define SO_LINGER	13
 | 
			
		||||
#define SO_BSDCOMPAT	14
 | 
			
		||||
#define SO_REUSEPORT	15
 | 
			
		||||
#ifndef SO_PASSCRED /* powerpc only differs in these */
 | 
			
		||||
#define SO_PASSCRED	16
 | 
			
		||||
#define SO_PEERCRED	17
 | 
			
		||||
#define SO_RCVLOWAT	18
 | 
			
		||||
#define SO_SNDLOWAT	19
 | 
			
		||||
#define SO_RCVTIMEO	20
 | 
			
		||||
#define SO_SNDTIMEO	21
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Security levels - as per NRL IPv6 - don't actually do anything */
 | 
			
		||||
#define SO_SECURITY_AUTHENTICATION		22
 | 
			
		||||
#define SO_SECURITY_ENCRYPTION_TRANSPORT	23
 | 
			
		||||
#define SO_SECURITY_ENCRYPTION_NETWORK		24
 | 
			
		||||
 | 
			
		||||
#define SO_BINDTODEVICE	25
 | 
			
		||||
 | 
			
		||||
/* Socket filtering */
 | 
			
		||||
#define SO_ATTACH_FILTER	26
 | 
			
		||||
#define SO_DETACH_FILTER	27
 | 
			
		||||
#define SO_GET_FILTER		SO_ATTACH_FILTER
 | 
			
		||||
 | 
			
		||||
#define SO_PEERNAME		28
 | 
			
		||||
#define SO_TIMESTAMP		29
 | 
			
		||||
#define SCM_TIMESTAMP		SO_TIMESTAMP
 | 
			
		||||
 | 
			
		||||
#define SO_ACCEPTCONN		30
 | 
			
		||||
 | 
			
		||||
#define SO_PEERSEC		31
 | 
			
		||||
#define SO_PASSSEC		34
 | 
			
		||||
#define SO_TIMESTAMPNS		35
 | 
			
		||||
#define SCM_TIMESTAMPNS		SO_TIMESTAMPNS
 | 
			
		||||
 | 
			
		||||
#define SO_MARK			36
 | 
			
		||||
 | 
			
		||||
#define SO_TIMESTAMPING		37
 | 
			
		||||
#define SCM_TIMESTAMPING	SO_TIMESTAMPING
 | 
			
		||||
 | 
			
		||||
#define SO_PROTOCOL		38
 | 
			
		||||
#define SO_DOMAIN		39
 | 
			
		||||
 | 
			
		||||
#define SO_RXQ_OVFL             40
 | 
			
		||||
 | 
			
		||||
#define SO_WIFI_STATUS		41
 | 
			
		||||
#define SCM_WIFI_STATUS	SO_WIFI_STATUS
 | 
			
		||||
#define SO_PEEK_OFF		42
 | 
			
		||||
 | 
			
		||||
/* Instruct lower device to use last 4-bytes of skb data as FCS */
 | 
			
		||||
#define SO_NOFCS		43
 | 
			
		||||
 | 
			
		||||
#define SO_LOCK_FILTER		44
 | 
			
		||||
 | 
			
		||||
#define SO_SELECT_ERR_QUEUE	45
 | 
			
		||||
 | 
			
		||||
#define SO_BUSY_POLL		46
 | 
			
		||||
 | 
			
		||||
#define SO_MAX_PACING_RATE	47
 | 
			
		||||
 | 
			
		||||
#define SO_BPF_EXTENSIONS	48
 | 
			
		||||
 | 
			
		||||
#define SO_INCOMING_CPU		49
 | 
			
		||||
 | 
			
		||||
#define SO_ATTACH_BPF		50
 | 
			
		||||
#define SO_DETACH_BPF		SO_DETACH_FILTER
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_SOCKET_H */
 | 
			
		||||
@@ -0,0 +1,13 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_SOCKIOS_H
 | 
			
		||||
#define __ASM_GENERIC_SOCKIOS_H
 | 
			
		||||
 | 
			
		||||
/* Socket-level I/O control calls. */
 | 
			
		||||
#define FIOSETOWN	0x8901
 | 
			
		||||
#define SIOCSPGRP	0x8902
 | 
			
		||||
#define FIOGETOWN	0x8903
 | 
			
		||||
#define SIOCGPGRP	0x8904
 | 
			
		||||
#define SIOCATMARK	0x8905
 | 
			
		||||
#define SIOCGSTAMP	0x8906		/* Get stamp (timeval) */
 | 
			
		||||
#define SIOCGSTAMPNS	0x8907		/* Get stamp (timespec) */
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_SOCKIOS_H */
 | 
			
		||||
@@ -0,0 +1,72 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_STAT_H
 | 
			
		||||
#define __ASM_GENERIC_STAT_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Everybody gets this wrong and has to stick with it for all
 | 
			
		||||
 * eternity. Hopefully, this version gets used by new architectures
 | 
			
		||||
 * so they don't fall into the same traps.
 | 
			
		||||
 *
 | 
			
		||||
 * stat64 is copied from powerpc64, with explicit padding added.
 | 
			
		||||
 * stat is the same structure layout on 64-bit, without the 'long long'
 | 
			
		||||
 * types.
 | 
			
		||||
 *
 | 
			
		||||
 * By convention, 64 bit architectures use the stat interface, while
 | 
			
		||||
 * 32 bit architectures use the stat64 interface. Note that we don't
 | 
			
		||||
 * provide an __old_kernel_stat here, which new architecture should
 | 
			
		||||
 * not have to start with.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <asm/bitsperlong.h>
 | 
			
		||||
 | 
			
		||||
#define STAT_HAVE_NSEC 1
 | 
			
		||||
 | 
			
		||||
struct stat {
 | 
			
		||||
	unsigned long	st_dev;		/* Device.  */
 | 
			
		||||
	unsigned long	st_ino;		/* File serial number.  */
 | 
			
		||||
	unsigned int	st_mode;	/* File mode.  */
 | 
			
		||||
	unsigned int	st_nlink;	/* Link count.  */
 | 
			
		||||
	unsigned int	st_uid;		/* User ID of the file's owner.  */
 | 
			
		||||
	unsigned int	st_gid;		/* Group ID of the file's group. */
 | 
			
		||||
	unsigned long	st_rdev;	/* Device number, if device.  */
 | 
			
		||||
	unsigned long	__pad1;
 | 
			
		||||
	long		st_size;	/* Size of file, in bytes.  */
 | 
			
		||||
	int		st_blksize;	/* Optimal block size for I/O.  */
 | 
			
		||||
	int		__pad2;
 | 
			
		||||
	long		st_blocks;	/* Number 512-byte blocks allocated. */
 | 
			
		||||
	long		st_atime;	/* Time of last access.  */
 | 
			
		||||
	unsigned long	st_atime_nsec;
 | 
			
		||||
	long		st_mtime;	/* Time of last modification.  */
 | 
			
		||||
	unsigned long	st_mtime_nsec;
 | 
			
		||||
	long		st_ctime;	/* Time of last status change.  */
 | 
			
		||||
	unsigned long	st_ctime_nsec;
 | 
			
		||||
	unsigned int	__unused4;
 | 
			
		||||
	unsigned int	__unused5;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* This matches struct stat64 in glibc2.1. Only used for 32 bit. */
 | 
			
		||||
#if __BITS_PER_LONG != 64 || defined(__ARCH_WANT_STAT64)
 | 
			
		||||
struct stat64 {
 | 
			
		||||
	unsigned long long st_dev;	/* Device.  */
 | 
			
		||||
	unsigned long long st_ino;	/* File serial number.  */
 | 
			
		||||
	unsigned int	st_mode;	/* File mode.  */
 | 
			
		||||
	unsigned int	st_nlink;	/* Link count.  */
 | 
			
		||||
	unsigned int	st_uid;		/* User ID of the file's owner.  */
 | 
			
		||||
	unsigned int	st_gid;		/* Group ID of the file's group. */
 | 
			
		||||
	unsigned long long st_rdev;	/* Device number, if device.  */
 | 
			
		||||
	unsigned long long __pad1;
 | 
			
		||||
	long long	st_size;	/* Size of file, in bytes.  */
 | 
			
		||||
	int		st_blksize;	/* Optimal block size for I/O.  */
 | 
			
		||||
	int		__pad2;
 | 
			
		||||
	long long	st_blocks;	/* Number 512-byte blocks allocated. */
 | 
			
		||||
	int		st_atime;	/* Time of last access.  */
 | 
			
		||||
	unsigned int	st_atime_nsec;
 | 
			
		||||
	int		st_mtime;	/* Time of last modification.  */
 | 
			
		||||
	unsigned int	st_mtime_nsec;
 | 
			
		||||
	int		st_ctime;	/* Time of last status change.  */
 | 
			
		||||
	unsigned int	st_ctime_nsec;
 | 
			
		||||
	unsigned int	__unused4;
 | 
			
		||||
	unsigned int	__unused5;
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_STAT_H */
 | 
			
		||||
@@ -0,0 +1,83 @@
 | 
			
		||||
#ifndef _GENERIC_STATFS_H
 | 
			
		||||
#define _GENERIC_STATFS_H
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Most 64-bit platforms use 'long', while most 32-bit platforms use '__u32'.
 | 
			
		||||
 * Yes, they differ in signedness as well as size.
 | 
			
		||||
 * Special cases can override it for themselves -- except for S390x, which
 | 
			
		||||
 * is just a little too special for us. And MIPS, which I'm not touching
 | 
			
		||||
 * with a 10' pole.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __statfs_word
 | 
			
		||||
#if __BITS_PER_LONG == 64
 | 
			
		||||
#define __statfs_word __kernel_long_t
 | 
			
		||||
#else
 | 
			
		||||
#define __statfs_word __u32
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct statfs {
 | 
			
		||||
	__statfs_word f_type;
 | 
			
		||||
	__statfs_word f_bsize;
 | 
			
		||||
	__statfs_word f_blocks;
 | 
			
		||||
	__statfs_word f_bfree;
 | 
			
		||||
	__statfs_word f_bavail;
 | 
			
		||||
	__statfs_word f_files;
 | 
			
		||||
	__statfs_word f_ffree;
 | 
			
		||||
	__kernel_fsid_t f_fsid;
 | 
			
		||||
	__statfs_word f_namelen;
 | 
			
		||||
	__statfs_word f_frsize;
 | 
			
		||||
	__statfs_word f_flags;
 | 
			
		||||
	__statfs_word f_spare[4];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ARM needs to avoid the 32-bit padding at the end, for consistency
 | 
			
		||||
 * between EABI and OABI 
 | 
			
		||||
 */
 | 
			
		||||
#ifndef ARCH_PACK_STATFS64
 | 
			
		||||
#define ARCH_PACK_STATFS64
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct statfs64 {
 | 
			
		||||
	__statfs_word f_type;
 | 
			
		||||
	__statfs_word f_bsize;
 | 
			
		||||
	__u64 f_blocks;
 | 
			
		||||
	__u64 f_bfree;
 | 
			
		||||
	__u64 f_bavail;
 | 
			
		||||
	__u64 f_files;
 | 
			
		||||
	__u64 f_ffree;
 | 
			
		||||
	__kernel_fsid_t f_fsid;
 | 
			
		||||
	__statfs_word f_namelen;
 | 
			
		||||
	__statfs_word f_frsize;
 | 
			
		||||
	__statfs_word f_flags;
 | 
			
		||||
	__statfs_word f_spare[4];
 | 
			
		||||
} ARCH_PACK_STATFS64;
 | 
			
		||||
 | 
			
		||||
/* 
 | 
			
		||||
 * IA64 and x86_64 need to avoid the 32-bit padding at the end,
 | 
			
		||||
 * to be compatible with the i386 ABI
 | 
			
		||||
 */
 | 
			
		||||
#ifndef ARCH_PACK_COMPAT_STATFS64
 | 
			
		||||
#define ARCH_PACK_COMPAT_STATFS64
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct compat_statfs64 {
 | 
			
		||||
	__u32 f_type;
 | 
			
		||||
	__u32 f_bsize;
 | 
			
		||||
	__u64 f_blocks;
 | 
			
		||||
	__u64 f_bfree;
 | 
			
		||||
	__u64 f_bavail;
 | 
			
		||||
	__u64 f_files;
 | 
			
		||||
	__u64 f_ffree;
 | 
			
		||||
	__kernel_fsid_t f_fsid;
 | 
			
		||||
	__u32 f_namelen;
 | 
			
		||||
	__u32 f_frsize;
 | 
			
		||||
	__u32 f_flags;
 | 
			
		||||
	__u32 f_spare[4];
 | 
			
		||||
} ARCH_PACK_COMPAT_STATFS64;
 | 
			
		||||
 | 
			
		||||
#endif /* _GENERIC_STATFS_H */
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
#ifndef _ASM_GENERIC_SWAB_H
 | 
			
		||||
#define _ASM_GENERIC_SWAB_H
 | 
			
		||||
 | 
			
		||||
#include <asm/bitsperlong.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 32 bit architectures typically (but not always) want to
 | 
			
		||||
 * set __SWAB_64_THRU_32__. In user space, this is only
 | 
			
		||||
 * valid if the compiler supports 64 bit data types.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if __BITS_PER_LONG == 32
 | 
			
		||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
 | 
			
		||||
#define __SWAB_64_THRU_32__
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_GENERIC_SWAB_H */
 | 
			
		||||
@@ -0,0 +1,199 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_TERMBITS_H
 | 
			
		||||
#define __ASM_GENERIC_TERMBITS_H
 | 
			
		||||
 | 
			
		||||
#include <linux/posix_types.h>
 | 
			
		||||
 | 
			
		||||
typedef unsigned char	cc_t;
 | 
			
		||||
typedef unsigned int	speed_t;
 | 
			
		||||
typedef unsigned int	tcflag_t;
 | 
			
		||||
 | 
			
		||||
#define NCCS 19
 | 
			
		||||
struct termios {
 | 
			
		||||
	tcflag_t c_iflag;		/* input mode flags */
 | 
			
		||||
	tcflag_t c_oflag;		/* output mode flags */
 | 
			
		||||
	tcflag_t c_cflag;		/* control mode flags */
 | 
			
		||||
	tcflag_t c_lflag;		/* local mode flags */
 | 
			
		||||
	cc_t c_line;			/* line discipline */
 | 
			
		||||
	cc_t c_cc[NCCS];		/* control characters */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct termios2 {
 | 
			
		||||
	tcflag_t c_iflag;		/* input mode flags */
 | 
			
		||||
	tcflag_t c_oflag;		/* output mode flags */
 | 
			
		||||
	tcflag_t c_cflag;		/* control mode flags */
 | 
			
		||||
	tcflag_t c_lflag;		/* local mode flags */
 | 
			
		||||
	cc_t c_line;			/* line discipline */
 | 
			
		||||
	cc_t c_cc[NCCS];		/* control characters */
 | 
			
		||||
	speed_t c_ispeed;		/* input speed */
 | 
			
		||||
	speed_t c_ospeed;		/* output speed */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct ktermios {
 | 
			
		||||
	tcflag_t c_iflag;		/* input mode flags */
 | 
			
		||||
	tcflag_t c_oflag;		/* output mode flags */
 | 
			
		||||
	tcflag_t c_cflag;		/* control mode flags */
 | 
			
		||||
	tcflag_t c_lflag;		/* local mode flags */
 | 
			
		||||
	cc_t c_line;			/* line discipline */
 | 
			
		||||
	cc_t c_cc[NCCS];		/* control characters */
 | 
			
		||||
	speed_t c_ispeed;		/* input speed */
 | 
			
		||||
	speed_t c_ospeed;		/* output speed */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* c_cc characters */
 | 
			
		||||
#define VINTR 0
 | 
			
		||||
#define VQUIT 1
 | 
			
		||||
#define VERASE 2
 | 
			
		||||
#define VKILL 3
 | 
			
		||||
#define VEOF 4
 | 
			
		||||
#define VTIME 5
 | 
			
		||||
#define VMIN 6
 | 
			
		||||
#define VSWTC 7
 | 
			
		||||
#define VSTART 8
 | 
			
		||||
#define VSTOP 9
 | 
			
		||||
#define VSUSP 10
 | 
			
		||||
#define VEOL 11
 | 
			
		||||
#define VREPRINT 12
 | 
			
		||||
#define VDISCARD 13
 | 
			
		||||
#define VWERASE 14
 | 
			
		||||
#define VLNEXT 15
 | 
			
		||||
#define VEOL2 16
 | 
			
		||||
 | 
			
		||||
/* c_iflag bits */
 | 
			
		||||
#define IGNBRK	0000001
 | 
			
		||||
#define BRKINT	0000002
 | 
			
		||||
#define IGNPAR	0000004
 | 
			
		||||
#define PARMRK	0000010
 | 
			
		||||
#define INPCK	0000020
 | 
			
		||||
#define ISTRIP	0000040
 | 
			
		||||
#define INLCR	0000100
 | 
			
		||||
#define IGNCR	0000200
 | 
			
		||||
#define ICRNL	0000400
 | 
			
		||||
#define IUCLC	0001000
 | 
			
		||||
#define IXON	0002000
 | 
			
		||||
#define IXANY	0004000
 | 
			
		||||
#define IXOFF	0010000
 | 
			
		||||
#define IMAXBEL	0020000
 | 
			
		||||
#define IUTF8	0040000
 | 
			
		||||
 | 
			
		||||
/* c_oflag bits */
 | 
			
		||||
#define OPOST	0000001
 | 
			
		||||
#define OLCUC	0000002
 | 
			
		||||
#define ONLCR	0000004
 | 
			
		||||
#define OCRNL	0000010
 | 
			
		||||
#define ONOCR	0000020
 | 
			
		||||
#define ONLRET	0000040
 | 
			
		||||
#define OFILL	0000100
 | 
			
		||||
#define OFDEL	0000200
 | 
			
		||||
#define NLDLY	0000400
 | 
			
		||||
#define   NL0	0000000
 | 
			
		||||
#define   NL1	0000400
 | 
			
		||||
#define CRDLY	0003000
 | 
			
		||||
#define   CR0	0000000
 | 
			
		||||
#define   CR1	0001000
 | 
			
		||||
#define   CR2	0002000
 | 
			
		||||
#define   CR3	0003000
 | 
			
		||||
#define TABDLY	0014000
 | 
			
		||||
#define   TAB0	0000000
 | 
			
		||||
#define   TAB1	0004000
 | 
			
		||||
#define   TAB2	0010000
 | 
			
		||||
#define   TAB3	0014000
 | 
			
		||||
#define   XTABS	0014000
 | 
			
		||||
#define BSDLY	0020000
 | 
			
		||||
#define   BS0	0000000
 | 
			
		||||
#define   BS1	0020000
 | 
			
		||||
#define VTDLY	0040000
 | 
			
		||||
#define   VT0	0000000
 | 
			
		||||
#define   VT1	0040000
 | 
			
		||||
#define FFDLY	0100000
 | 
			
		||||
#define   FF0	0000000
 | 
			
		||||
#define   FF1	0100000
 | 
			
		||||
 | 
			
		||||
/* c_cflag bit meaning */
 | 
			
		||||
#define CBAUD	0010017
 | 
			
		||||
#define  B0	0000000		/* hang up */
 | 
			
		||||
#define  B50	0000001
 | 
			
		||||
#define  B75	0000002
 | 
			
		||||
#define  B110	0000003
 | 
			
		||||
#define  B134	0000004
 | 
			
		||||
#define  B150	0000005
 | 
			
		||||
#define  B200	0000006
 | 
			
		||||
#define  B300	0000007
 | 
			
		||||
#define  B600	0000010
 | 
			
		||||
#define  B1200	0000011
 | 
			
		||||
#define  B1800	0000012
 | 
			
		||||
#define  B2400	0000013
 | 
			
		||||
#define  B4800	0000014
 | 
			
		||||
#define  B9600	0000015
 | 
			
		||||
#define  B19200	0000016
 | 
			
		||||
#define  B38400	0000017
 | 
			
		||||
#define EXTA B19200
 | 
			
		||||
#define EXTB B38400
 | 
			
		||||
#define CSIZE	0000060
 | 
			
		||||
#define   CS5	0000000
 | 
			
		||||
#define   CS6	0000020
 | 
			
		||||
#define   CS7	0000040
 | 
			
		||||
#define   CS8	0000060
 | 
			
		||||
#define CSTOPB	0000100
 | 
			
		||||
#define CREAD	0000200
 | 
			
		||||
#define PARENB	0000400
 | 
			
		||||
#define PARODD	0001000
 | 
			
		||||
#define HUPCL	0002000
 | 
			
		||||
#define CLOCAL	0004000
 | 
			
		||||
#define CBAUDEX 0010000
 | 
			
		||||
#define    BOTHER 0010000
 | 
			
		||||
#define    B57600 0010001
 | 
			
		||||
#define   B115200 0010002
 | 
			
		||||
#define   B230400 0010003
 | 
			
		||||
#define   B460800 0010004
 | 
			
		||||
#define   B500000 0010005
 | 
			
		||||
#define   B576000 0010006
 | 
			
		||||
#define   B921600 0010007
 | 
			
		||||
#define  B1000000 0010010
 | 
			
		||||
#define  B1152000 0010011
 | 
			
		||||
#define  B1500000 0010012
 | 
			
		||||
#define  B2000000 0010013
 | 
			
		||||
#define  B2500000 0010014
 | 
			
		||||
#define  B3000000 0010015
 | 
			
		||||
#define  B3500000 0010016
 | 
			
		||||
#define  B4000000 0010017
 | 
			
		||||
#define CIBAUD	  002003600000	/* input baud rate */
 | 
			
		||||
#define CMSPAR	  010000000000	/* mark or space (stick) parity */
 | 
			
		||||
#define CRTSCTS	  020000000000	/* flow control */
 | 
			
		||||
 | 
			
		||||
#define IBSHIFT	  16		/* Shift from CBAUD to CIBAUD */
 | 
			
		||||
 | 
			
		||||
/* c_lflag bits */
 | 
			
		||||
#define ISIG	0000001
 | 
			
		||||
#define ICANON	0000002
 | 
			
		||||
#define XCASE	0000004
 | 
			
		||||
#define ECHO	0000010
 | 
			
		||||
#define ECHOE	0000020
 | 
			
		||||
#define ECHOK	0000040
 | 
			
		||||
#define ECHONL	0000100
 | 
			
		||||
#define NOFLSH	0000200
 | 
			
		||||
#define TOSTOP	0000400
 | 
			
		||||
#define ECHOCTL	0001000
 | 
			
		||||
#define ECHOPRT	0002000
 | 
			
		||||
#define ECHOKE	0004000
 | 
			
		||||
#define FLUSHO	0010000
 | 
			
		||||
#define PENDIN	0040000
 | 
			
		||||
#define IEXTEN	0100000
 | 
			
		||||
#define EXTPROC	0200000
 | 
			
		||||
 | 
			
		||||
/* tcflow() and TCXONC use these */
 | 
			
		||||
#define	TCOOFF		0
 | 
			
		||||
#define	TCOON		1
 | 
			
		||||
#define	TCIOFF		2
 | 
			
		||||
#define	TCION		3
 | 
			
		||||
 | 
			
		||||
/* tcflush() and TCFLSH use these */
 | 
			
		||||
#define	TCIFLUSH	0
 | 
			
		||||
#define	TCOFLUSH	1
 | 
			
		||||
#define	TCIOFLUSH	2
 | 
			
		||||
 | 
			
		||||
/* tcsetattr uses these */
 | 
			
		||||
#define	TCSANOW		0
 | 
			
		||||
#define	TCSADRAIN	1
 | 
			
		||||
#define	TCSAFLUSH	2
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_TERMBITS_H */
 | 
			
		||||
@@ -0,0 +1,50 @@
 | 
			
		||||
#ifndef _ASM_GENERIC_TERMIOS_H
 | 
			
		||||
#define _ASM_GENERIC_TERMIOS_H
 | 
			
		||||
/*
 | 
			
		||||
 * Most architectures have straight copies of the x86 code, with
 | 
			
		||||
 * varying levels of bug fixes on top. Usually it's a good idea
 | 
			
		||||
 * to use this generic version instead, but be careful to avoid
 | 
			
		||||
 * ABI changes.
 | 
			
		||||
 * New architectures should not provide their own version.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <asm/termbits.h>
 | 
			
		||||
#include <asm/ioctls.h>
 | 
			
		||||
 | 
			
		||||
struct winsize {
 | 
			
		||||
	unsigned short ws_row;
 | 
			
		||||
	unsigned short ws_col;
 | 
			
		||||
	unsigned short ws_xpixel;
 | 
			
		||||
	unsigned short ws_ypixel;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define NCC 8
 | 
			
		||||
struct termio {
 | 
			
		||||
	unsigned short c_iflag;		/* input mode flags */
 | 
			
		||||
	unsigned short c_oflag;		/* output mode flags */
 | 
			
		||||
	unsigned short c_cflag;		/* control mode flags */
 | 
			
		||||
	unsigned short c_lflag;		/* local mode flags */
 | 
			
		||||
	unsigned char c_line;		/* line discipline */
 | 
			
		||||
	unsigned char c_cc[NCC];	/* control characters */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* modem lines */
 | 
			
		||||
#define TIOCM_LE	0x001
 | 
			
		||||
#define TIOCM_DTR	0x002
 | 
			
		||||
#define TIOCM_RTS	0x004
 | 
			
		||||
#define TIOCM_ST	0x008
 | 
			
		||||
#define TIOCM_SR	0x010
 | 
			
		||||
#define TIOCM_CTS	0x020
 | 
			
		||||
#define TIOCM_CAR	0x040
 | 
			
		||||
#define TIOCM_RNG	0x080
 | 
			
		||||
#define TIOCM_DSR	0x100
 | 
			
		||||
#define TIOCM_CD	TIOCM_CAR
 | 
			
		||||
#define TIOCM_RI	TIOCM_RNG
 | 
			
		||||
#define TIOCM_OUT1	0x2000
 | 
			
		||||
#define TIOCM_OUT2	0x4000
 | 
			
		||||
#define TIOCM_LOOP	0x8000
 | 
			
		||||
 | 
			
		||||
/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_GENERIC_TERMIOS_H */
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
#ifndef _ASM_GENERIC_TYPES_H
 | 
			
		||||
#define _ASM_GENERIC_TYPES_H
 | 
			
		||||
/*
 | 
			
		||||
 * int-ll64 is used everywhere now.
 | 
			
		||||
 */
 | 
			
		||||
#include <asm-generic/int-ll64.h>
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_GENERIC_TYPES_H */
 | 
			
		||||
@@ -0,0 +1,12 @@
 | 
			
		||||
#ifndef __ASM_GENERIC_UCONTEXT_H
 | 
			
		||||
#define __ASM_GENERIC_UCONTEXT_H
 | 
			
		||||
 | 
			
		||||
struct ucontext {
 | 
			
		||||
	unsigned long	  uc_flags;
 | 
			
		||||
	struct ucontext  *uc_link;
 | 
			
		||||
	stack_t		  uc_stack;
 | 
			
		||||
	struct sigcontext uc_mcontext;
 | 
			
		||||
	sigset_t	  uc_sigmask;	/* mask last for extensibility */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_GENERIC_UCONTEXT_H */
 | 
			
		||||
@@ -0,0 +1,927 @@
 | 
			
		||||
#include <asm/bitsperlong.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file contains the system call numbers, based on the
 | 
			
		||||
 * layout of the x86-64 architecture, which embeds the
 | 
			
		||||
 * pointer to the syscall in the table.
 | 
			
		||||
 *
 | 
			
		||||
 * As a basic principle, no duplication of functionality
 | 
			
		||||
 * should be added, e.g. we don't use lseek when llseek
 | 
			
		||||
 * is present. New architectures should use this file
 | 
			
		||||
 * and implement the less feature-full calls in user space.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __SYSCALL
 | 
			
		||||
#define __SYSCALL(x, y)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if __BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT)
 | 
			
		||||
#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _32)
 | 
			
		||||
#else
 | 
			
		||||
#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _64)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __SYSCALL_COMPAT
 | 
			
		||||
#define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _comp)
 | 
			
		||||
#define __SC_COMP_3264(_nr, _32, _64, _comp) __SYSCALL(_nr, _comp)
 | 
			
		||||
#else
 | 
			
		||||
#define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _sys)
 | 
			
		||||
#define __SC_COMP_3264(_nr, _32, _64, _comp) __SC_3264(_nr, _32, _64)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define __NR_io_setup 0
 | 
			
		||||
__SC_COMP(__NR_io_setup, sys_io_setup, compat_sys_io_setup)
 | 
			
		||||
#define __NR_io_destroy 1
 | 
			
		||||
__SYSCALL(__NR_io_destroy, sys_io_destroy)
 | 
			
		||||
#define __NR_io_submit 2
 | 
			
		||||
__SC_COMP(__NR_io_submit, sys_io_submit, compat_sys_io_submit)
 | 
			
		||||
#define __NR_io_cancel 3
 | 
			
		||||
__SYSCALL(__NR_io_cancel, sys_io_cancel)
 | 
			
		||||
#define __NR_io_getevents 4
 | 
			
		||||
__SC_COMP(__NR_io_getevents, sys_io_getevents, compat_sys_io_getevents)
 | 
			
		||||
 | 
			
		||||
/* fs/xattr.c */
 | 
			
		||||
#define __NR_setxattr 5
 | 
			
		||||
__SYSCALL(__NR_setxattr, sys_setxattr)
 | 
			
		||||
#define __NR_lsetxattr 6
 | 
			
		||||
__SYSCALL(__NR_lsetxattr, sys_lsetxattr)
 | 
			
		||||
#define __NR_fsetxattr 7
 | 
			
		||||
__SYSCALL(__NR_fsetxattr, sys_fsetxattr)
 | 
			
		||||
#define __NR_getxattr 8
 | 
			
		||||
__SYSCALL(__NR_getxattr, sys_getxattr)
 | 
			
		||||
#define __NR_lgetxattr 9
 | 
			
		||||
__SYSCALL(__NR_lgetxattr, sys_lgetxattr)
 | 
			
		||||
#define __NR_fgetxattr 10
 | 
			
		||||
__SYSCALL(__NR_fgetxattr, sys_fgetxattr)
 | 
			
		||||
#define __NR_listxattr 11
 | 
			
		||||
__SYSCALL(__NR_listxattr, sys_listxattr)
 | 
			
		||||
#define __NR_llistxattr 12
 | 
			
		||||
__SYSCALL(__NR_llistxattr, sys_llistxattr)
 | 
			
		||||
#define __NR_flistxattr 13
 | 
			
		||||
__SYSCALL(__NR_flistxattr, sys_flistxattr)
 | 
			
		||||
#define __NR_removexattr 14
 | 
			
		||||
__SYSCALL(__NR_removexattr, sys_removexattr)
 | 
			
		||||
#define __NR_lremovexattr 15
 | 
			
		||||
__SYSCALL(__NR_lremovexattr, sys_lremovexattr)
 | 
			
		||||
#define __NR_fremovexattr 16
 | 
			
		||||
__SYSCALL(__NR_fremovexattr, sys_fremovexattr)
 | 
			
		||||
 | 
			
		||||
/* fs/dcache.c */
 | 
			
		||||
#define __NR_getcwd 17
 | 
			
		||||
__SYSCALL(__NR_getcwd, sys_getcwd)
 | 
			
		||||
 | 
			
		||||
/* fs/cookies.c */
 | 
			
		||||
#define __NR_lookup_dcookie 18
 | 
			
		||||
__SC_COMP(__NR_lookup_dcookie, sys_lookup_dcookie, compat_sys_lookup_dcookie)
 | 
			
		||||
 | 
			
		||||
/* fs/eventfd.c */
 | 
			
		||||
#define __NR_eventfd2 19
 | 
			
		||||
__SYSCALL(__NR_eventfd2, sys_eventfd2)
 | 
			
		||||
 | 
			
		||||
/* fs/eventpoll.c */
 | 
			
		||||
#define __NR_epoll_create1 20
 | 
			
		||||
__SYSCALL(__NR_epoll_create1, sys_epoll_create1)
 | 
			
		||||
#define __NR_epoll_ctl 21
 | 
			
		||||
__SYSCALL(__NR_epoll_ctl, sys_epoll_ctl)
 | 
			
		||||
#define __NR_epoll_pwait 22
 | 
			
		||||
__SC_COMP(__NR_epoll_pwait, sys_epoll_pwait, compat_sys_epoll_pwait)
 | 
			
		||||
 | 
			
		||||
/* fs/fcntl.c */
 | 
			
		||||
#define __NR_dup 23
 | 
			
		||||
__SYSCALL(__NR_dup, sys_dup)
 | 
			
		||||
#define __NR_dup3 24
 | 
			
		||||
__SYSCALL(__NR_dup3, sys_dup3)
 | 
			
		||||
#define __NR3264_fcntl 25
 | 
			
		||||
__SC_COMP_3264(__NR3264_fcntl, sys_fcntl64, sys_fcntl, compat_sys_fcntl64)
 | 
			
		||||
 | 
			
		||||
/* fs/inotify_user.c */
 | 
			
		||||
#define __NR_inotify_init1 26
 | 
			
		||||
__SYSCALL(__NR_inotify_init1, sys_inotify_init1)
 | 
			
		||||
#define __NR_inotify_add_watch 27
 | 
			
		||||
__SYSCALL(__NR_inotify_add_watch, sys_inotify_add_watch)
 | 
			
		||||
#define __NR_inotify_rm_watch 28
 | 
			
		||||
__SYSCALL(__NR_inotify_rm_watch, sys_inotify_rm_watch)
 | 
			
		||||
 | 
			
		||||
/* fs/ioctl.c */
 | 
			
		||||
#define __NR_ioctl 29
 | 
			
		||||
__SC_COMP(__NR_ioctl, sys_ioctl, compat_sys_ioctl)
 | 
			
		||||
 | 
			
		||||
/* fs/ioprio.c */
 | 
			
		||||
#define __NR_ioprio_set 30
 | 
			
		||||
__SYSCALL(__NR_ioprio_set, sys_ioprio_set)
 | 
			
		||||
#define __NR_ioprio_get 31
 | 
			
		||||
__SYSCALL(__NR_ioprio_get, sys_ioprio_get)
 | 
			
		||||
 | 
			
		||||
/* fs/locks.c */
 | 
			
		||||
#define __NR_flock 32
 | 
			
		||||
__SYSCALL(__NR_flock, sys_flock)
 | 
			
		||||
 | 
			
		||||
/* fs/namei.c */
 | 
			
		||||
#define __NR_mknodat 33
 | 
			
		||||
__SYSCALL(__NR_mknodat, sys_mknodat)
 | 
			
		||||
#define __NR_mkdirat 34
 | 
			
		||||
__SYSCALL(__NR_mkdirat, sys_mkdirat)
 | 
			
		||||
#define __NR_unlinkat 35
 | 
			
		||||
__SYSCALL(__NR_unlinkat, sys_unlinkat)
 | 
			
		||||
#define __NR_symlinkat 36
 | 
			
		||||
__SYSCALL(__NR_symlinkat, sys_symlinkat)
 | 
			
		||||
#define __NR_linkat 37
 | 
			
		||||
__SYSCALL(__NR_linkat, sys_linkat)
 | 
			
		||||
#define __NR_renameat 38
 | 
			
		||||
__SYSCALL(__NR_renameat, sys_renameat)
 | 
			
		||||
 | 
			
		||||
/* fs/namespace.c */
 | 
			
		||||
#define __NR_umount2 39
 | 
			
		||||
__SYSCALL(__NR_umount2, sys_umount)
 | 
			
		||||
#define __NR_mount 40
 | 
			
		||||
__SC_COMP(__NR_mount, sys_mount, compat_sys_mount)
 | 
			
		||||
#define __NR_pivot_root 41
 | 
			
		||||
__SYSCALL(__NR_pivot_root, sys_pivot_root)
 | 
			
		||||
 | 
			
		||||
/* fs/nfsctl.c */
 | 
			
		||||
#define __NR_nfsservctl 42
 | 
			
		||||
__SYSCALL(__NR_nfsservctl, sys_ni_syscall)
 | 
			
		||||
 | 
			
		||||
/* fs/open.c */
 | 
			
		||||
#define __NR3264_statfs 43
 | 
			
		||||
__SC_COMP_3264(__NR3264_statfs, sys_statfs64, sys_statfs, \
 | 
			
		||||
	       compat_sys_statfs64)
 | 
			
		||||
#define __NR3264_fstatfs 44
 | 
			
		||||
__SC_COMP_3264(__NR3264_fstatfs, sys_fstatfs64, sys_fstatfs, \
 | 
			
		||||
	       compat_sys_fstatfs64)
 | 
			
		||||
#define __NR3264_truncate 45
 | 
			
		||||
__SC_COMP_3264(__NR3264_truncate, sys_truncate64, sys_truncate, \
 | 
			
		||||
	       compat_sys_truncate64)
 | 
			
		||||
#define __NR3264_ftruncate 46
 | 
			
		||||
__SC_COMP_3264(__NR3264_ftruncate, sys_ftruncate64, sys_ftruncate, \
 | 
			
		||||
	       compat_sys_ftruncate64)
 | 
			
		||||
 | 
			
		||||
#define __NR_fallocate 47
 | 
			
		||||
__SC_COMP(__NR_fallocate, sys_fallocate, compat_sys_fallocate)
 | 
			
		||||
#define __NR_faccessat 48
 | 
			
		||||
__SYSCALL(__NR_faccessat, sys_faccessat)
 | 
			
		||||
#define __NR_chdir 49
 | 
			
		||||
__SYSCALL(__NR_chdir, sys_chdir)
 | 
			
		||||
#define __NR_fchdir 50
 | 
			
		||||
__SYSCALL(__NR_fchdir, sys_fchdir)
 | 
			
		||||
#define __NR_chroot 51
 | 
			
		||||
__SYSCALL(__NR_chroot, sys_chroot)
 | 
			
		||||
#define __NR_fchmod 52
 | 
			
		||||
__SYSCALL(__NR_fchmod, sys_fchmod)
 | 
			
		||||
#define __NR_fchmodat 53
 | 
			
		||||
__SYSCALL(__NR_fchmodat, sys_fchmodat)
 | 
			
		||||
#define __NR_fchownat 54
 | 
			
		||||
__SYSCALL(__NR_fchownat, sys_fchownat)
 | 
			
		||||
#define __NR_fchown 55
 | 
			
		||||
__SYSCALL(__NR_fchown, sys_fchown)
 | 
			
		||||
#define __NR_openat 56
 | 
			
		||||
__SC_COMP(__NR_openat, sys_openat, compat_sys_openat)
 | 
			
		||||
#define __NR_close 57
 | 
			
		||||
__SYSCALL(__NR_close, sys_close)
 | 
			
		||||
#define __NR_vhangup 58
 | 
			
		||||
__SYSCALL(__NR_vhangup, sys_vhangup)
 | 
			
		||||
 | 
			
		||||
/* fs/pipe.c */
 | 
			
		||||
#define __NR_pipe2 59
 | 
			
		||||
__SYSCALL(__NR_pipe2, sys_pipe2)
 | 
			
		||||
 | 
			
		||||
/* fs/quota.c */
 | 
			
		||||
#define __NR_quotactl 60
 | 
			
		||||
__SYSCALL(__NR_quotactl, sys_quotactl)
 | 
			
		||||
 | 
			
		||||
/* fs/readdir.c */
 | 
			
		||||
#define __NR_getdents64 61
 | 
			
		||||
#define __ARCH_WANT_COMPAT_SYS_GETDENTS64
 | 
			
		||||
__SC_COMP(__NR_getdents64, sys_getdents64, compat_sys_getdents64)
 | 
			
		||||
 | 
			
		||||
/* fs/read_write.c */
 | 
			
		||||
#define __NR3264_lseek 62
 | 
			
		||||
__SC_3264(__NR3264_lseek, sys_llseek, sys_lseek)
 | 
			
		||||
#define __NR_read 63
 | 
			
		||||
__SYSCALL(__NR_read, sys_read)
 | 
			
		||||
#define __NR_write 64
 | 
			
		||||
__SYSCALL(__NR_write, sys_write)
 | 
			
		||||
#define __NR_readv 65
 | 
			
		||||
__SC_COMP(__NR_readv, sys_readv, compat_sys_readv)
 | 
			
		||||
#define __NR_writev 66
 | 
			
		||||
__SC_COMP(__NR_writev, sys_writev, compat_sys_writev)
 | 
			
		||||
#define __NR_pread64 67
 | 
			
		||||
__SC_COMP(__NR_pread64, sys_pread64, compat_sys_pread64)
 | 
			
		||||
#define __NR_pwrite64 68
 | 
			
		||||
__SC_COMP(__NR_pwrite64, sys_pwrite64, compat_sys_pwrite64)
 | 
			
		||||
#define __NR_preadv 69
 | 
			
		||||
__SC_COMP(__NR_preadv, sys_preadv, compat_sys_preadv)
 | 
			
		||||
#define __NR_pwritev 70
 | 
			
		||||
__SC_COMP(__NR_pwritev, sys_pwritev, compat_sys_pwritev)
 | 
			
		||||
 | 
			
		||||
/* fs/sendfile.c */
 | 
			
		||||
#define __NR3264_sendfile 71
 | 
			
		||||
__SYSCALL(__NR3264_sendfile, sys_sendfile64)
 | 
			
		||||
 | 
			
		||||
/* fs/select.c */
 | 
			
		||||
#define __NR_pselect6 72
 | 
			
		||||
__SC_COMP(__NR_pselect6, sys_pselect6, compat_sys_pselect6)
 | 
			
		||||
#define __NR_ppoll 73
 | 
			
		||||
__SC_COMP(__NR_ppoll, sys_ppoll, compat_sys_ppoll)
 | 
			
		||||
 | 
			
		||||
/* fs/signalfd.c */
 | 
			
		||||
#define __NR_signalfd4 74
 | 
			
		||||
__SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4)
 | 
			
		||||
 | 
			
		||||
/* fs/splice.c */
 | 
			
		||||
#define __NR_vmsplice 75
 | 
			
		||||
__SC_COMP(__NR_vmsplice, sys_vmsplice, compat_sys_vmsplice)
 | 
			
		||||
#define __NR_splice 76
 | 
			
		||||
__SYSCALL(__NR_splice, sys_splice)
 | 
			
		||||
#define __NR_tee 77
 | 
			
		||||
__SYSCALL(__NR_tee, sys_tee)
 | 
			
		||||
 | 
			
		||||
/* fs/stat.c */
 | 
			
		||||
#define __NR_readlinkat 78
 | 
			
		||||
__SYSCALL(__NR_readlinkat, sys_readlinkat)
 | 
			
		||||
#define __NR3264_fstatat 79
 | 
			
		||||
__SC_3264(__NR3264_fstatat, sys_fstatat64, sys_newfstatat)
 | 
			
		||||
#define __NR3264_fstat 80
 | 
			
		||||
__SC_3264(__NR3264_fstat, sys_fstat64, sys_newfstat)
 | 
			
		||||
 | 
			
		||||
/* fs/sync.c */
 | 
			
		||||
#define __NR_sync 81
 | 
			
		||||
__SYSCALL(__NR_sync, sys_sync)
 | 
			
		||||
#define __NR_fsync 82
 | 
			
		||||
__SYSCALL(__NR_fsync, sys_fsync)
 | 
			
		||||
#define __NR_fdatasync 83
 | 
			
		||||
__SYSCALL(__NR_fdatasync, sys_fdatasync)
 | 
			
		||||
#ifdef __ARCH_WANT_SYNC_FILE_RANGE2
 | 
			
		||||
#define __NR_sync_file_range2 84
 | 
			
		||||
__SC_COMP(__NR_sync_file_range2, sys_sync_file_range2, \
 | 
			
		||||
	  compat_sys_sync_file_range2)
 | 
			
		||||
#else
 | 
			
		||||
#define __NR_sync_file_range 84
 | 
			
		||||
__SC_COMP(__NR_sync_file_range, sys_sync_file_range, \
 | 
			
		||||
	  compat_sys_sync_file_range)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* fs/timerfd.c */
 | 
			
		||||
#define __NR_timerfd_create 85
 | 
			
		||||
__SYSCALL(__NR_timerfd_create, sys_timerfd_create)
 | 
			
		||||
#define __NR_timerfd_settime 86
 | 
			
		||||
__SC_COMP(__NR_timerfd_settime, sys_timerfd_settime, \
 | 
			
		||||
	  compat_sys_timerfd_settime)
 | 
			
		||||
#define __NR_timerfd_gettime 87
 | 
			
		||||
__SC_COMP(__NR_timerfd_gettime, sys_timerfd_gettime, \
 | 
			
		||||
	  compat_sys_timerfd_gettime)
 | 
			
		||||
 | 
			
		||||
/* fs/utimes.c */
 | 
			
		||||
#define __NR_utimensat 88
 | 
			
		||||
__SC_COMP(__NR_utimensat, sys_utimensat, compat_sys_utimensat)
 | 
			
		||||
 | 
			
		||||
/* kernel/acct.c */
 | 
			
		||||
#define __NR_acct 89
 | 
			
		||||
__SYSCALL(__NR_acct, sys_acct)
 | 
			
		||||
 | 
			
		||||
/* kernel/capability.c */
 | 
			
		||||
#define __NR_capget 90
 | 
			
		||||
__SYSCALL(__NR_capget, sys_capget)
 | 
			
		||||
#define __NR_capset 91
 | 
			
		||||
__SYSCALL(__NR_capset, sys_capset)
 | 
			
		||||
 | 
			
		||||
/* kernel/exec_domain.c */
 | 
			
		||||
#define __NR_personality 92
 | 
			
		||||
__SYSCALL(__NR_personality, sys_personality)
 | 
			
		||||
 | 
			
		||||
/* kernel/exit.c */
 | 
			
		||||
#define __NR_exit 93
 | 
			
		||||
__SYSCALL(__NR_exit, sys_exit)
 | 
			
		||||
#define __NR_exit_group 94
 | 
			
		||||
__SYSCALL(__NR_exit_group, sys_exit_group)
 | 
			
		||||
#define __NR_waitid 95
 | 
			
		||||
__SC_COMP(__NR_waitid, sys_waitid, compat_sys_waitid)
 | 
			
		||||
 | 
			
		||||
/* kernel/fork.c */
 | 
			
		||||
#define __NR_set_tid_address 96
 | 
			
		||||
__SYSCALL(__NR_set_tid_address, sys_set_tid_address)
 | 
			
		||||
#define __NR_unshare 97
 | 
			
		||||
__SYSCALL(__NR_unshare, sys_unshare)
 | 
			
		||||
 | 
			
		||||
/* kernel/futex.c */
 | 
			
		||||
#define __NR_futex 98
 | 
			
		||||
__SC_COMP(__NR_futex, sys_futex, compat_sys_futex)
 | 
			
		||||
#define __NR_set_robust_list 99
 | 
			
		||||
__SC_COMP(__NR_set_robust_list, sys_set_robust_list, \
 | 
			
		||||
	  compat_sys_set_robust_list)
 | 
			
		||||
#define __NR_get_robust_list 100
 | 
			
		||||
__SC_COMP(__NR_get_robust_list, sys_get_robust_list, \
 | 
			
		||||
	  compat_sys_get_robust_list)
 | 
			
		||||
 | 
			
		||||
/* kernel/hrtimer.c */
 | 
			
		||||
#define __NR_nanosleep 101
 | 
			
		||||
__SC_COMP(__NR_nanosleep, sys_nanosleep, compat_sys_nanosleep)
 | 
			
		||||
 | 
			
		||||
/* kernel/itimer.c */
 | 
			
		||||
#define __NR_getitimer 102
 | 
			
		||||
__SC_COMP(__NR_getitimer, sys_getitimer, compat_sys_getitimer)
 | 
			
		||||
#define __NR_setitimer 103
 | 
			
		||||
__SC_COMP(__NR_setitimer, sys_setitimer, compat_sys_setitimer)
 | 
			
		||||
 | 
			
		||||
/* kernel/kexec.c */
 | 
			
		||||
#define __NR_kexec_load 104
 | 
			
		||||
__SC_COMP(__NR_kexec_load, sys_kexec_load, compat_sys_kexec_load)
 | 
			
		||||
 | 
			
		||||
/* kernel/module.c */
 | 
			
		||||
#define __NR_init_module 105
 | 
			
		||||
__SYSCALL(__NR_init_module, sys_init_module)
 | 
			
		||||
#define __NR_delete_module 106
 | 
			
		||||
__SYSCALL(__NR_delete_module, sys_delete_module)
 | 
			
		||||
 | 
			
		||||
/* kernel/posix-timers.c */
 | 
			
		||||
#define __NR_timer_create 107
 | 
			
		||||
__SC_COMP(__NR_timer_create, sys_timer_create, compat_sys_timer_create)
 | 
			
		||||
#define __NR_timer_gettime 108
 | 
			
		||||
__SC_COMP(__NR_timer_gettime, sys_timer_gettime, compat_sys_timer_gettime)
 | 
			
		||||
#define __NR_timer_getoverrun 109
 | 
			
		||||
__SYSCALL(__NR_timer_getoverrun, sys_timer_getoverrun)
 | 
			
		||||
#define __NR_timer_settime 110
 | 
			
		||||
__SC_COMP(__NR_timer_settime, sys_timer_settime, compat_sys_timer_settime)
 | 
			
		||||
#define __NR_timer_delete 111
 | 
			
		||||
__SYSCALL(__NR_timer_delete, sys_timer_delete)
 | 
			
		||||
#define __NR_clock_settime 112
 | 
			
		||||
__SC_COMP(__NR_clock_settime, sys_clock_settime, compat_sys_clock_settime)
 | 
			
		||||
#define __NR_clock_gettime 113
 | 
			
		||||
__SC_COMP(__NR_clock_gettime, sys_clock_gettime, compat_sys_clock_gettime)
 | 
			
		||||
#define __NR_clock_getres 114
 | 
			
		||||
__SC_COMP(__NR_clock_getres, sys_clock_getres, compat_sys_clock_getres)
 | 
			
		||||
#define __NR_clock_nanosleep 115
 | 
			
		||||
__SC_COMP(__NR_clock_nanosleep, sys_clock_nanosleep, \
 | 
			
		||||
	  compat_sys_clock_nanosleep)
 | 
			
		||||
 | 
			
		||||
/* kernel/printk.c */
 | 
			
		||||
#define __NR_syslog 116
 | 
			
		||||
__SYSCALL(__NR_syslog, sys_syslog)
 | 
			
		||||
 | 
			
		||||
/* kernel/ptrace.c */
 | 
			
		||||
#define __NR_ptrace 117
 | 
			
		||||
__SYSCALL(__NR_ptrace, sys_ptrace)
 | 
			
		||||
 | 
			
		||||
/* kernel/sched/core.c */
 | 
			
		||||
#define __NR_sched_setparam 118
 | 
			
		||||
__SYSCALL(__NR_sched_setparam, sys_sched_setparam)
 | 
			
		||||
#define __NR_sched_setscheduler 119
 | 
			
		||||
__SYSCALL(__NR_sched_setscheduler, sys_sched_setscheduler)
 | 
			
		||||
#define __NR_sched_getscheduler 120
 | 
			
		||||
__SYSCALL(__NR_sched_getscheduler, sys_sched_getscheduler)
 | 
			
		||||
#define __NR_sched_getparam 121
 | 
			
		||||
__SYSCALL(__NR_sched_getparam, sys_sched_getparam)
 | 
			
		||||
#define __NR_sched_setaffinity 122
 | 
			
		||||
__SC_COMP(__NR_sched_setaffinity, sys_sched_setaffinity, \
 | 
			
		||||
	  compat_sys_sched_setaffinity)
 | 
			
		||||
#define __NR_sched_getaffinity 123
 | 
			
		||||
__SC_COMP(__NR_sched_getaffinity, sys_sched_getaffinity, \
 | 
			
		||||
	  compat_sys_sched_getaffinity)
 | 
			
		||||
#define __NR_sched_yield 124
 | 
			
		||||
__SYSCALL(__NR_sched_yield, sys_sched_yield)
 | 
			
		||||
#define __NR_sched_get_priority_max 125
 | 
			
		||||
__SYSCALL(__NR_sched_get_priority_max, sys_sched_get_priority_max)
 | 
			
		||||
#define __NR_sched_get_priority_min 126
 | 
			
		||||
__SYSCALL(__NR_sched_get_priority_min, sys_sched_get_priority_min)
 | 
			
		||||
#define __NR_sched_rr_get_interval 127
 | 
			
		||||
__SC_COMP(__NR_sched_rr_get_interval, sys_sched_rr_get_interval, \
 | 
			
		||||
	  compat_sys_sched_rr_get_interval)
 | 
			
		||||
 | 
			
		||||
/* kernel/signal.c */
 | 
			
		||||
#define __NR_restart_syscall 128
 | 
			
		||||
__SYSCALL(__NR_restart_syscall, sys_restart_syscall)
 | 
			
		||||
#define __NR_kill 129
 | 
			
		||||
__SYSCALL(__NR_kill, sys_kill)
 | 
			
		||||
#define __NR_tkill 130
 | 
			
		||||
__SYSCALL(__NR_tkill, sys_tkill)
 | 
			
		||||
#define __NR_tgkill 131
 | 
			
		||||
__SYSCALL(__NR_tgkill, sys_tgkill)
 | 
			
		||||
#define __NR_sigaltstack 132
 | 
			
		||||
__SC_COMP(__NR_sigaltstack, sys_sigaltstack, compat_sys_sigaltstack)
 | 
			
		||||
#define __NR_rt_sigsuspend 133
 | 
			
		||||
__SC_COMP(__NR_rt_sigsuspend, sys_rt_sigsuspend, compat_sys_rt_sigsuspend)
 | 
			
		||||
#define __NR_rt_sigaction 134
 | 
			
		||||
__SC_COMP(__NR_rt_sigaction, sys_rt_sigaction, compat_sys_rt_sigaction)
 | 
			
		||||
#define __NR_rt_sigprocmask 135
 | 
			
		||||
__SC_COMP(__NR_rt_sigprocmask, sys_rt_sigprocmask, compat_sys_rt_sigprocmask)
 | 
			
		||||
#define __NR_rt_sigpending 136
 | 
			
		||||
__SC_COMP(__NR_rt_sigpending, sys_rt_sigpending, compat_sys_rt_sigpending)
 | 
			
		||||
#define __NR_rt_sigtimedwait 137
 | 
			
		||||
__SC_COMP(__NR_rt_sigtimedwait, sys_rt_sigtimedwait, \
 | 
			
		||||
	  compat_sys_rt_sigtimedwait)
 | 
			
		||||
#define __NR_rt_sigqueueinfo 138
 | 
			
		||||
__SC_COMP(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo, \
 | 
			
		||||
	  compat_sys_rt_sigqueueinfo)
 | 
			
		||||
#define __NR_rt_sigreturn 139
 | 
			
		||||
__SC_COMP(__NR_rt_sigreturn, sys_rt_sigreturn, compat_sys_rt_sigreturn)
 | 
			
		||||
 | 
			
		||||
/* kernel/sys.c */
 | 
			
		||||
#define __NR_setpriority 140
 | 
			
		||||
__SYSCALL(__NR_setpriority, sys_setpriority)
 | 
			
		||||
#define __NR_getpriority 141
 | 
			
		||||
__SYSCALL(__NR_getpriority, sys_getpriority)
 | 
			
		||||
#define __NR_reboot 142
 | 
			
		||||
__SYSCALL(__NR_reboot, sys_reboot)
 | 
			
		||||
#define __NR_setregid 143
 | 
			
		||||
__SYSCALL(__NR_setregid, sys_setregid)
 | 
			
		||||
#define __NR_setgid 144
 | 
			
		||||
__SYSCALL(__NR_setgid, sys_setgid)
 | 
			
		||||
#define __NR_setreuid 145
 | 
			
		||||
__SYSCALL(__NR_setreuid, sys_setreuid)
 | 
			
		||||
#define __NR_setuid 146
 | 
			
		||||
__SYSCALL(__NR_setuid, sys_setuid)
 | 
			
		||||
#define __NR_setresuid 147
 | 
			
		||||
__SYSCALL(__NR_setresuid, sys_setresuid)
 | 
			
		||||
#define __NR_getresuid 148
 | 
			
		||||
__SYSCALL(__NR_getresuid, sys_getresuid)
 | 
			
		||||
#define __NR_setresgid 149
 | 
			
		||||
__SYSCALL(__NR_setresgid, sys_setresgid)
 | 
			
		||||
#define __NR_getresgid 150
 | 
			
		||||
__SYSCALL(__NR_getresgid, sys_getresgid)
 | 
			
		||||
#define __NR_setfsuid 151
 | 
			
		||||
__SYSCALL(__NR_setfsuid, sys_setfsuid)
 | 
			
		||||
#define __NR_setfsgid 152
 | 
			
		||||
__SYSCALL(__NR_setfsgid, sys_setfsgid)
 | 
			
		||||
#define __NR_times 153
 | 
			
		||||
__SC_COMP(__NR_times, sys_times, compat_sys_times)
 | 
			
		||||
#define __NR_setpgid 154
 | 
			
		||||
__SYSCALL(__NR_setpgid, sys_setpgid)
 | 
			
		||||
#define __NR_getpgid 155
 | 
			
		||||
__SYSCALL(__NR_getpgid, sys_getpgid)
 | 
			
		||||
#define __NR_getsid 156
 | 
			
		||||
__SYSCALL(__NR_getsid, sys_getsid)
 | 
			
		||||
#define __NR_setsid 157
 | 
			
		||||
__SYSCALL(__NR_setsid, sys_setsid)
 | 
			
		||||
#define __NR_getgroups 158
 | 
			
		||||
__SYSCALL(__NR_getgroups, sys_getgroups)
 | 
			
		||||
#define __NR_setgroups 159
 | 
			
		||||
__SYSCALL(__NR_setgroups, sys_setgroups)
 | 
			
		||||
#define __NR_uname 160
 | 
			
		||||
__SYSCALL(__NR_uname, sys_newuname)
 | 
			
		||||
#define __NR_sethostname 161
 | 
			
		||||
__SYSCALL(__NR_sethostname, sys_sethostname)
 | 
			
		||||
#define __NR_setdomainname 162
 | 
			
		||||
__SYSCALL(__NR_setdomainname, sys_setdomainname)
 | 
			
		||||
#define __NR_getrlimit 163
 | 
			
		||||
__SC_COMP(__NR_getrlimit, sys_getrlimit, compat_sys_getrlimit)
 | 
			
		||||
#define __NR_setrlimit 164
 | 
			
		||||
__SC_COMP(__NR_setrlimit, sys_setrlimit, compat_sys_setrlimit)
 | 
			
		||||
#define __NR_getrusage 165
 | 
			
		||||
__SC_COMP(__NR_getrusage, sys_getrusage, compat_sys_getrusage)
 | 
			
		||||
#define __NR_umask 166
 | 
			
		||||
__SYSCALL(__NR_umask, sys_umask)
 | 
			
		||||
#define __NR_prctl 167
 | 
			
		||||
__SYSCALL(__NR_prctl, sys_prctl)
 | 
			
		||||
#define __NR_getcpu 168
 | 
			
		||||
__SYSCALL(__NR_getcpu, sys_getcpu)
 | 
			
		||||
 | 
			
		||||
/* kernel/time.c */
 | 
			
		||||
#define __NR_gettimeofday 169
 | 
			
		||||
__SC_COMP(__NR_gettimeofday, sys_gettimeofday, compat_sys_gettimeofday)
 | 
			
		||||
#define __NR_settimeofday 170
 | 
			
		||||
__SC_COMP(__NR_settimeofday, sys_settimeofday, compat_sys_settimeofday)
 | 
			
		||||
#define __NR_adjtimex 171
 | 
			
		||||
__SC_COMP(__NR_adjtimex, sys_adjtimex, compat_sys_adjtimex)
 | 
			
		||||
 | 
			
		||||
/* kernel/timer.c */
 | 
			
		||||
#define __NR_getpid 172
 | 
			
		||||
__SYSCALL(__NR_getpid, sys_getpid)
 | 
			
		||||
#define __NR_getppid 173
 | 
			
		||||
__SYSCALL(__NR_getppid, sys_getppid)
 | 
			
		||||
#define __NR_getuid 174
 | 
			
		||||
__SYSCALL(__NR_getuid, sys_getuid)
 | 
			
		||||
#define __NR_geteuid 175
 | 
			
		||||
__SYSCALL(__NR_geteuid, sys_geteuid)
 | 
			
		||||
#define __NR_getgid 176
 | 
			
		||||
__SYSCALL(__NR_getgid, sys_getgid)
 | 
			
		||||
#define __NR_getegid 177
 | 
			
		||||
__SYSCALL(__NR_getegid, sys_getegid)
 | 
			
		||||
#define __NR_gettid 178
 | 
			
		||||
__SYSCALL(__NR_gettid, sys_gettid)
 | 
			
		||||
#define __NR_sysinfo 179
 | 
			
		||||
__SC_COMP(__NR_sysinfo, sys_sysinfo, compat_sys_sysinfo)
 | 
			
		||||
 | 
			
		||||
/* ipc/mqueue.c */
 | 
			
		||||
#define __NR_mq_open 180
 | 
			
		||||
__SC_COMP(__NR_mq_open, sys_mq_open, compat_sys_mq_open)
 | 
			
		||||
#define __NR_mq_unlink 181
 | 
			
		||||
__SYSCALL(__NR_mq_unlink, sys_mq_unlink)
 | 
			
		||||
#define __NR_mq_timedsend 182
 | 
			
		||||
__SC_COMP(__NR_mq_timedsend, sys_mq_timedsend, compat_sys_mq_timedsend)
 | 
			
		||||
#define __NR_mq_timedreceive 183
 | 
			
		||||
__SC_COMP(__NR_mq_timedreceive, sys_mq_timedreceive, \
 | 
			
		||||
	  compat_sys_mq_timedreceive)
 | 
			
		||||
#define __NR_mq_notify 184
 | 
			
		||||
__SC_COMP(__NR_mq_notify, sys_mq_notify, compat_sys_mq_notify)
 | 
			
		||||
#define __NR_mq_getsetattr 185
 | 
			
		||||
__SC_COMP(__NR_mq_getsetattr, sys_mq_getsetattr, compat_sys_mq_getsetattr)
 | 
			
		||||
 | 
			
		||||
/* ipc/msg.c */
 | 
			
		||||
#define __NR_msgget 186
 | 
			
		||||
__SYSCALL(__NR_msgget, sys_msgget)
 | 
			
		||||
#define __NR_msgctl 187
 | 
			
		||||
__SC_COMP(__NR_msgctl, sys_msgctl, compat_sys_msgctl)
 | 
			
		||||
#define __NR_msgrcv 188
 | 
			
		||||
__SC_COMP(__NR_msgrcv, sys_msgrcv, compat_sys_msgrcv)
 | 
			
		||||
#define __NR_msgsnd 189
 | 
			
		||||
__SC_COMP(__NR_msgsnd, sys_msgsnd, compat_sys_msgsnd)
 | 
			
		||||
 | 
			
		||||
/* ipc/sem.c */
 | 
			
		||||
#define __NR_semget 190
 | 
			
		||||
__SYSCALL(__NR_semget, sys_semget)
 | 
			
		||||
#define __NR_semctl 191
 | 
			
		||||
__SC_COMP(__NR_semctl, sys_semctl, compat_sys_semctl)
 | 
			
		||||
#define __NR_semtimedop 192
 | 
			
		||||
__SC_COMP(__NR_semtimedop, sys_semtimedop, compat_sys_semtimedop)
 | 
			
		||||
#define __NR_semop 193
 | 
			
		||||
__SYSCALL(__NR_semop, sys_semop)
 | 
			
		||||
 | 
			
		||||
/* ipc/shm.c */
 | 
			
		||||
#define __NR_shmget 194
 | 
			
		||||
__SYSCALL(__NR_shmget, sys_shmget)
 | 
			
		||||
#define __NR_shmctl 195
 | 
			
		||||
__SC_COMP(__NR_shmctl, sys_shmctl, compat_sys_shmctl)
 | 
			
		||||
#define __NR_shmat 196
 | 
			
		||||
__SC_COMP(__NR_shmat, sys_shmat, compat_sys_shmat)
 | 
			
		||||
#define __NR_shmdt 197
 | 
			
		||||
__SYSCALL(__NR_shmdt, sys_shmdt)
 | 
			
		||||
 | 
			
		||||
/* net/socket.c */
 | 
			
		||||
#define __NR_socket 198
 | 
			
		||||
__SYSCALL(__NR_socket, sys_socket)
 | 
			
		||||
#define __NR_socketpair 199
 | 
			
		||||
__SYSCALL(__NR_socketpair, sys_socketpair)
 | 
			
		||||
#define __NR_bind 200
 | 
			
		||||
__SYSCALL(__NR_bind, sys_bind)
 | 
			
		||||
#define __NR_listen 201
 | 
			
		||||
__SYSCALL(__NR_listen, sys_listen)
 | 
			
		||||
#define __NR_accept 202
 | 
			
		||||
__SYSCALL(__NR_accept, sys_accept)
 | 
			
		||||
#define __NR_connect 203
 | 
			
		||||
__SYSCALL(__NR_connect, sys_connect)
 | 
			
		||||
#define __NR_getsockname 204
 | 
			
		||||
__SYSCALL(__NR_getsockname, sys_getsockname)
 | 
			
		||||
#define __NR_getpeername 205
 | 
			
		||||
__SYSCALL(__NR_getpeername, sys_getpeername)
 | 
			
		||||
#define __NR_sendto 206
 | 
			
		||||
__SYSCALL(__NR_sendto, sys_sendto)
 | 
			
		||||
#define __NR_recvfrom 207
 | 
			
		||||
__SC_COMP(__NR_recvfrom, sys_recvfrom, compat_sys_recvfrom)
 | 
			
		||||
#define __NR_setsockopt 208
 | 
			
		||||
__SC_COMP(__NR_setsockopt, sys_setsockopt, compat_sys_setsockopt)
 | 
			
		||||
#define __NR_getsockopt 209
 | 
			
		||||
__SC_COMP(__NR_getsockopt, sys_getsockopt, compat_sys_getsockopt)
 | 
			
		||||
#define __NR_shutdown 210
 | 
			
		||||
__SYSCALL(__NR_shutdown, sys_shutdown)
 | 
			
		||||
#define __NR_sendmsg 211
 | 
			
		||||
__SC_COMP(__NR_sendmsg, sys_sendmsg, compat_sys_sendmsg)
 | 
			
		||||
#define __NR_recvmsg 212
 | 
			
		||||
__SC_COMP(__NR_recvmsg, sys_recvmsg, compat_sys_recvmsg)
 | 
			
		||||
 | 
			
		||||
/* mm/filemap.c */
 | 
			
		||||
#define __NR_readahead 213
 | 
			
		||||
__SC_COMP(__NR_readahead, sys_readahead, compat_sys_readahead)
 | 
			
		||||
 | 
			
		||||
/* mm/nommu.c, also with MMU */
 | 
			
		||||
#define __NR_brk 214
 | 
			
		||||
__SYSCALL(__NR_brk, sys_brk)
 | 
			
		||||
#define __NR_munmap 215
 | 
			
		||||
__SYSCALL(__NR_munmap, sys_munmap)
 | 
			
		||||
#define __NR_mremap 216
 | 
			
		||||
__SYSCALL(__NR_mremap, sys_mremap)
 | 
			
		||||
 | 
			
		||||
/* security/keys/keyctl.c */
 | 
			
		||||
#define __NR_add_key 217
 | 
			
		||||
__SYSCALL(__NR_add_key, sys_add_key)
 | 
			
		||||
#define __NR_request_key 218
 | 
			
		||||
__SYSCALL(__NR_request_key, sys_request_key)
 | 
			
		||||
#define __NR_keyctl 219
 | 
			
		||||
__SC_COMP(__NR_keyctl, sys_keyctl, compat_sys_keyctl)
 | 
			
		||||
 | 
			
		||||
/* arch/example/kernel/sys_example.c */
 | 
			
		||||
#define __NR_clone 220
 | 
			
		||||
__SYSCALL(__NR_clone, sys_clone)
 | 
			
		||||
#define __NR_execve 221
 | 
			
		||||
__SC_COMP(__NR_execve, sys_execve, compat_sys_execve)
 | 
			
		||||
 | 
			
		||||
#define __NR3264_mmap 222
 | 
			
		||||
__SC_3264(__NR3264_mmap, sys_mmap2, sys_mmap)
 | 
			
		||||
/* mm/fadvise.c */
 | 
			
		||||
#define __NR3264_fadvise64 223
 | 
			
		||||
__SC_COMP(__NR3264_fadvise64, sys_fadvise64_64, compat_sys_fadvise64_64)
 | 
			
		||||
 | 
			
		||||
/* mm/, CONFIG_MMU only */
 | 
			
		||||
#ifndef __ARCH_NOMMU
 | 
			
		||||
#define __NR_swapon 224
 | 
			
		||||
__SYSCALL(__NR_swapon, sys_swapon)
 | 
			
		||||
#define __NR_swapoff 225
 | 
			
		||||
__SYSCALL(__NR_swapoff, sys_swapoff)
 | 
			
		||||
#define __NR_mprotect 226
 | 
			
		||||
__SYSCALL(__NR_mprotect, sys_mprotect)
 | 
			
		||||
#define __NR_msync 227
 | 
			
		||||
__SYSCALL(__NR_msync, sys_msync)
 | 
			
		||||
#define __NR_mlock 228
 | 
			
		||||
__SYSCALL(__NR_mlock, sys_mlock)
 | 
			
		||||
#define __NR_munlock 229
 | 
			
		||||
__SYSCALL(__NR_munlock, sys_munlock)
 | 
			
		||||
#define __NR_mlockall 230
 | 
			
		||||
__SYSCALL(__NR_mlockall, sys_mlockall)
 | 
			
		||||
#define __NR_munlockall 231
 | 
			
		||||
__SYSCALL(__NR_munlockall, sys_munlockall)
 | 
			
		||||
#define __NR_mincore 232
 | 
			
		||||
__SYSCALL(__NR_mincore, sys_mincore)
 | 
			
		||||
#define __NR_madvise 233
 | 
			
		||||
__SYSCALL(__NR_madvise, sys_madvise)
 | 
			
		||||
#define __NR_remap_file_pages 234
 | 
			
		||||
__SYSCALL(__NR_remap_file_pages, sys_remap_file_pages)
 | 
			
		||||
#define __NR_mbind 235
 | 
			
		||||
__SC_COMP(__NR_mbind, sys_mbind, compat_sys_mbind)
 | 
			
		||||
#define __NR_get_mempolicy 236
 | 
			
		||||
__SC_COMP(__NR_get_mempolicy, sys_get_mempolicy, compat_sys_get_mempolicy)
 | 
			
		||||
#define __NR_set_mempolicy 237
 | 
			
		||||
__SC_COMP(__NR_set_mempolicy, sys_set_mempolicy, compat_sys_set_mempolicy)
 | 
			
		||||
#define __NR_migrate_pages 238
 | 
			
		||||
__SC_COMP(__NR_migrate_pages, sys_migrate_pages, compat_sys_migrate_pages)
 | 
			
		||||
#define __NR_move_pages 239
 | 
			
		||||
__SC_COMP(__NR_move_pages, sys_move_pages, compat_sys_move_pages)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define __NR_rt_tgsigqueueinfo 240
 | 
			
		||||
__SC_COMP(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo, \
 | 
			
		||||
	  compat_sys_rt_tgsigqueueinfo)
 | 
			
		||||
#define __NR_perf_event_open 241
 | 
			
		||||
__SYSCALL(__NR_perf_event_open, sys_perf_event_open)
 | 
			
		||||
#define __NR_accept4 242
 | 
			
		||||
__SYSCALL(__NR_accept4, sys_accept4)
 | 
			
		||||
#define __NR_recvmmsg 243
 | 
			
		||||
__SC_COMP(__NR_recvmmsg, sys_recvmmsg, compat_sys_recvmmsg)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Architectures may provide up to 16 syscalls of their own
 | 
			
		||||
 * starting with this value.
 | 
			
		||||
 */
 | 
			
		||||
#define __NR_arch_specific_syscall 244
 | 
			
		||||
 | 
			
		||||
#define __NR_wait4 260
 | 
			
		||||
__SC_COMP(__NR_wait4, sys_wait4, compat_sys_wait4)
 | 
			
		||||
#define __NR_prlimit64 261
 | 
			
		||||
__SYSCALL(__NR_prlimit64, sys_prlimit64)
 | 
			
		||||
#define __NR_fanotify_init 262
 | 
			
		||||
__SYSCALL(__NR_fanotify_init, sys_fanotify_init)
 | 
			
		||||
#define __NR_fanotify_mark 263
 | 
			
		||||
__SYSCALL(__NR_fanotify_mark, sys_fanotify_mark)
 | 
			
		||||
#define __NR_name_to_handle_at         264
 | 
			
		||||
__SYSCALL(__NR_name_to_handle_at, sys_name_to_handle_at)
 | 
			
		||||
#define __NR_open_by_handle_at         265
 | 
			
		||||
__SC_COMP(__NR_open_by_handle_at, sys_open_by_handle_at, \
 | 
			
		||||
	  compat_sys_open_by_handle_at)
 | 
			
		||||
#define __NR_clock_adjtime 266
 | 
			
		||||
__SC_COMP(__NR_clock_adjtime, sys_clock_adjtime, compat_sys_clock_adjtime)
 | 
			
		||||
#define __NR_syncfs 267
 | 
			
		||||
__SYSCALL(__NR_syncfs, sys_syncfs)
 | 
			
		||||
#define __NR_setns 268
 | 
			
		||||
__SYSCALL(__NR_setns, sys_setns)
 | 
			
		||||
#define __NR_sendmmsg 269
 | 
			
		||||
__SC_COMP(__NR_sendmmsg, sys_sendmmsg, compat_sys_sendmmsg)
 | 
			
		||||
#define __NR_process_vm_readv 270
 | 
			
		||||
__SC_COMP(__NR_process_vm_readv, sys_process_vm_readv, \
 | 
			
		||||
          compat_sys_process_vm_readv)
 | 
			
		||||
#define __NR_process_vm_writev 271
 | 
			
		||||
__SC_COMP(__NR_process_vm_writev, sys_process_vm_writev, \
 | 
			
		||||
          compat_sys_process_vm_writev)
 | 
			
		||||
#define __NR_kcmp 272
 | 
			
		||||
__SYSCALL(__NR_kcmp, sys_kcmp)
 | 
			
		||||
#define __NR_finit_module 273
 | 
			
		||||
__SYSCALL(__NR_finit_module, sys_finit_module)
 | 
			
		||||
#define __NR_sched_setattr 274
 | 
			
		||||
__SYSCALL(__NR_sched_setattr, sys_sched_setattr)
 | 
			
		||||
#define __NR_sched_getattr 275
 | 
			
		||||
__SYSCALL(__NR_sched_getattr, sys_sched_getattr)
 | 
			
		||||
#define __NR_renameat2 276
 | 
			
		||||
__SYSCALL(__NR_renameat2, sys_renameat2)
 | 
			
		||||
#define __NR_seccomp 277
 | 
			
		||||
__SYSCALL(__NR_seccomp, sys_seccomp)
 | 
			
		||||
#define __NR_getrandom 278
 | 
			
		||||
__SYSCALL(__NR_getrandom, sys_getrandom)
 | 
			
		||||
#define __NR_memfd_create 279
 | 
			
		||||
__SYSCALL(__NR_memfd_create, sys_memfd_create)
 | 
			
		||||
#define __NR_bpf 280
 | 
			
		||||
__SYSCALL(__NR_bpf, sys_bpf)
 | 
			
		||||
#define __NR_execveat 281
 | 
			
		||||
__SC_COMP(__NR_execveat, sys_execveat, compat_sys_execveat)
 | 
			
		||||
#define __NR_userfaultfd 282
 | 
			
		||||
__SYSCALL(__NR_userfaultfd, sys_userfaultfd)
 | 
			
		||||
#define __NR_membarrier 283
 | 
			
		||||
__SYSCALL(__NR_membarrier, sys_membarrier)
 | 
			
		||||
#define __NR_mlock2 284
 | 
			
		||||
__SYSCALL(__NR_mlock2, sys_mlock2)
 | 
			
		||||
 | 
			
		||||
#undef __NR_syscalls
 | 
			
		||||
#define __NR_syscalls 285
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * All syscalls below here should go away really,
 | 
			
		||||
 * these are provided for both review and as a porting
 | 
			
		||||
 * help for the C library version.
 | 
			
		||||
 *
 | 
			
		||||
 * Last chance: are any of these important enough to
 | 
			
		||||
 * enable by default?
 | 
			
		||||
 */
 | 
			
		||||
#ifdef __ARCH_WANT_SYSCALL_NO_AT
 | 
			
		||||
#define __NR_open 1024
 | 
			
		||||
__SYSCALL(__NR_open, sys_open)
 | 
			
		||||
#define __NR_link 1025
 | 
			
		||||
__SYSCALL(__NR_link, sys_link)
 | 
			
		||||
#define __NR_unlink 1026
 | 
			
		||||
__SYSCALL(__NR_unlink, sys_unlink)
 | 
			
		||||
#define __NR_mknod 1027
 | 
			
		||||
__SYSCALL(__NR_mknod, sys_mknod)
 | 
			
		||||
#define __NR_chmod 1028
 | 
			
		||||
__SYSCALL(__NR_chmod, sys_chmod)
 | 
			
		||||
#define __NR_chown 1029
 | 
			
		||||
__SYSCALL(__NR_chown, sys_chown)
 | 
			
		||||
#define __NR_mkdir 1030
 | 
			
		||||
__SYSCALL(__NR_mkdir, sys_mkdir)
 | 
			
		||||
#define __NR_rmdir 1031
 | 
			
		||||
__SYSCALL(__NR_rmdir, sys_rmdir)
 | 
			
		||||
#define __NR_lchown 1032
 | 
			
		||||
__SYSCALL(__NR_lchown, sys_lchown)
 | 
			
		||||
#define __NR_access 1033
 | 
			
		||||
__SYSCALL(__NR_access, sys_access)
 | 
			
		||||
#define __NR_rename 1034
 | 
			
		||||
__SYSCALL(__NR_rename, sys_rename)
 | 
			
		||||
#define __NR_readlink 1035
 | 
			
		||||
__SYSCALL(__NR_readlink, sys_readlink)
 | 
			
		||||
#define __NR_symlink 1036
 | 
			
		||||
__SYSCALL(__NR_symlink, sys_symlink)
 | 
			
		||||
#define __NR_utimes 1037
 | 
			
		||||
__SYSCALL(__NR_utimes, sys_utimes)
 | 
			
		||||
#define __NR3264_stat 1038
 | 
			
		||||
__SC_3264(__NR3264_stat, sys_stat64, sys_newstat)
 | 
			
		||||
#define __NR3264_lstat 1039
 | 
			
		||||
__SC_3264(__NR3264_lstat, sys_lstat64, sys_newlstat)
 | 
			
		||||
 | 
			
		||||
#undef __NR_syscalls
 | 
			
		||||
#define __NR_syscalls (__NR3264_lstat+1)
 | 
			
		||||
#endif /* __ARCH_WANT_SYSCALL_NO_AT */
 | 
			
		||||
 | 
			
		||||
#ifdef __ARCH_WANT_SYSCALL_NO_FLAGS
 | 
			
		||||
#define __NR_pipe 1040
 | 
			
		||||
__SYSCALL(__NR_pipe, sys_pipe)
 | 
			
		||||
#define __NR_dup2 1041
 | 
			
		||||
__SYSCALL(__NR_dup2, sys_dup2)
 | 
			
		||||
#define __NR_epoll_create 1042
 | 
			
		||||
__SYSCALL(__NR_epoll_create, sys_epoll_create)
 | 
			
		||||
#define __NR_inotify_init 1043
 | 
			
		||||
__SYSCALL(__NR_inotify_init, sys_inotify_init)
 | 
			
		||||
#define __NR_eventfd 1044
 | 
			
		||||
__SYSCALL(__NR_eventfd, sys_eventfd)
 | 
			
		||||
#define __NR_signalfd 1045
 | 
			
		||||
__SYSCALL(__NR_signalfd, sys_signalfd)
 | 
			
		||||
 | 
			
		||||
#undef __NR_syscalls
 | 
			
		||||
#define __NR_syscalls (__NR_signalfd+1)
 | 
			
		||||
#endif /* __ARCH_WANT_SYSCALL_NO_FLAGS */
 | 
			
		||||
 | 
			
		||||
#if (__BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT)) && \
 | 
			
		||||
     defined(__ARCH_WANT_SYSCALL_OFF_T)
 | 
			
		||||
#define __NR_sendfile 1046
 | 
			
		||||
__SYSCALL(__NR_sendfile, sys_sendfile)
 | 
			
		||||
#define __NR_ftruncate 1047
 | 
			
		||||
__SYSCALL(__NR_ftruncate, sys_ftruncate)
 | 
			
		||||
#define __NR_truncate 1048
 | 
			
		||||
__SYSCALL(__NR_truncate, sys_truncate)
 | 
			
		||||
#define __NR_stat 1049
 | 
			
		||||
__SYSCALL(__NR_stat, sys_newstat)
 | 
			
		||||
#define __NR_lstat 1050
 | 
			
		||||
__SYSCALL(__NR_lstat, sys_newlstat)
 | 
			
		||||
#define __NR_fstat 1051
 | 
			
		||||
__SYSCALL(__NR_fstat, sys_newfstat)
 | 
			
		||||
#define __NR_fcntl 1052
 | 
			
		||||
__SYSCALL(__NR_fcntl, sys_fcntl)
 | 
			
		||||
#define __NR_fadvise64 1053
 | 
			
		||||
#define __ARCH_WANT_SYS_FADVISE64
 | 
			
		||||
__SYSCALL(__NR_fadvise64, sys_fadvise64)
 | 
			
		||||
#define __NR_newfstatat 1054
 | 
			
		||||
#define __ARCH_WANT_SYS_NEWFSTATAT
 | 
			
		||||
__SYSCALL(__NR_newfstatat, sys_newfstatat)
 | 
			
		||||
#define __NR_fstatfs 1055
 | 
			
		||||
__SYSCALL(__NR_fstatfs, sys_fstatfs)
 | 
			
		||||
#define __NR_statfs 1056
 | 
			
		||||
__SYSCALL(__NR_statfs, sys_statfs)
 | 
			
		||||
#define __NR_lseek 1057
 | 
			
		||||
__SYSCALL(__NR_lseek, sys_lseek)
 | 
			
		||||
#define __NR_mmap 1058
 | 
			
		||||
__SYSCALL(__NR_mmap, sys_mmap)
 | 
			
		||||
 | 
			
		||||
#undef __NR_syscalls
 | 
			
		||||
#define __NR_syscalls (__NR_mmap+1)
 | 
			
		||||
#endif /* 32 bit off_t syscalls */
 | 
			
		||||
 | 
			
		||||
#ifdef __ARCH_WANT_SYSCALL_DEPRECATED
 | 
			
		||||
#define __NR_alarm 1059
 | 
			
		||||
#define __ARCH_WANT_SYS_ALARM
 | 
			
		||||
__SYSCALL(__NR_alarm, sys_alarm)
 | 
			
		||||
#define __NR_getpgrp 1060
 | 
			
		||||
#define __ARCH_WANT_SYS_GETPGRP
 | 
			
		||||
__SYSCALL(__NR_getpgrp, sys_getpgrp)
 | 
			
		||||
#define __NR_pause 1061
 | 
			
		||||
#define __ARCH_WANT_SYS_PAUSE
 | 
			
		||||
__SYSCALL(__NR_pause, sys_pause)
 | 
			
		||||
#define __NR_time 1062
 | 
			
		||||
#define __ARCH_WANT_SYS_TIME
 | 
			
		||||
#define __ARCH_WANT_COMPAT_SYS_TIME
 | 
			
		||||
__SYSCALL(__NR_time, sys_time)
 | 
			
		||||
#define __NR_utime 1063
 | 
			
		||||
#define __ARCH_WANT_SYS_UTIME
 | 
			
		||||
__SYSCALL(__NR_utime, sys_utime)
 | 
			
		||||
 | 
			
		||||
#define __NR_creat 1064
 | 
			
		||||
__SYSCALL(__NR_creat, sys_creat)
 | 
			
		||||
#define __NR_getdents 1065
 | 
			
		||||
#define __ARCH_WANT_SYS_GETDENTS
 | 
			
		||||
__SYSCALL(__NR_getdents, sys_getdents)
 | 
			
		||||
#define __NR_futimesat 1066
 | 
			
		||||
__SYSCALL(__NR_futimesat, sys_futimesat)
 | 
			
		||||
#define __NR_select 1067
 | 
			
		||||
#define __ARCH_WANT_SYS_SELECT
 | 
			
		||||
__SYSCALL(__NR_select, sys_select)
 | 
			
		||||
#define __NR_poll 1068
 | 
			
		||||
__SYSCALL(__NR_poll, sys_poll)
 | 
			
		||||
#define __NR_epoll_wait 1069
 | 
			
		||||
__SYSCALL(__NR_epoll_wait, sys_epoll_wait)
 | 
			
		||||
#define __NR_ustat 1070
 | 
			
		||||
__SYSCALL(__NR_ustat, sys_ustat)
 | 
			
		||||
#define __NR_vfork 1071
 | 
			
		||||
__SYSCALL(__NR_vfork, sys_vfork)
 | 
			
		||||
#define __NR_oldwait4 1072
 | 
			
		||||
__SYSCALL(__NR_oldwait4, sys_wait4)
 | 
			
		||||
#define __NR_recv 1073
 | 
			
		||||
__SYSCALL(__NR_recv, sys_recv)
 | 
			
		||||
#define __NR_send 1074
 | 
			
		||||
__SYSCALL(__NR_send, sys_send)
 | 
			
		||||
#define __NR_bdflush 1075
 | 
			
		||||
__SYSCALL(__NR_bdflush, sys_bdflush)
 | 
			
		||||
#define __NR_umount 1076
 | 
			
		||||
__SYSCALL(__NR_umount, sys_oldumount)
 | 
			
		||||
#define __ARCH_WANT_SYS_OLDUMOUNT
 | 
			
		||||
#define __NR_uselib 1077
 | 
			
		||||
__SYSCALL(__NR_uselib, sys_uselib)
 | 
			
		||||
#define __NR__sysctl 1078
 | 
			
		||||
__SYSCALL(__NR__sysctl, sys_sysctl)
 | 
			
		||||
 | 
			
		||||
#define __NR_fork 1079
 | 
			
		||||
#ifdef CONFIG_MMU
 | 
			
		||||
__SYSCALL(__NR_fork, sys_fork)
 | 
			
		||||
#else
 | 
			
		||||
__SYSCALL(__NR_fork, sys_ni_syscall)
 | 
			
		||||
#endif /* CONFIG_MMU */
 | 
			
		||||
 | 
			
		||||
#undef __NR_syscalls
 | 
			
		||||
#define __NR_syscalls (__NR_fork+1)
 | 
			
		||||
 | 
			
		||||
#endif /* __ARCH_WANT_SYSCALL_DEPRECATED */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 32 bit systems traditionally used different
 | 
			
		||||
 * syscalls for off_t and loff_t arguments, while
 | 
			
		||||
 * 64 bit systems only need the off_t version.
 | 
			
		||||
 * For new 32 bit platforms, there is no need to
 | 
			
		||||
 * implement the old 32 bit off_t syscalls, so
 | 
			
		||||
 * they take different names.
 | 
			
		||||
 * Here we map the numbers so that both versions
 | 
			
		||||
 * use the same syscall table layout.
 | 
			
		||||
 */
 | 
			
		||||
#if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT)
 | 
			
		||||
#define __NR_fcntl __NR3264_fcntl
 | 
			
		||||
#define __NR_statfs __NR3264_statfs
 | 
			
		||||
#define __NR_fstatfs __NR3264_fstatfs
 | 
			
		||||
#define __NR_truncate __NR3264_truncate
 | 
			
		||||
#define __NR_ftruncate __NR3264_ftruncate
 | 
			
		||||
#define __NR_lseek __NR3264_lseek
 | 
			
		||||
#define __NR_sendfile __NR3264_sendfile
 | 
			
		||||
#define __NR_newfstatat __NR3264_fstatat
 | 
			
		||||
#define __NR_fstat __NR3264_fstat
 | 
			
		||||
#define __NR_mmap __NR3264_mmap
 | 
			
		||||
#define __NR_fadvise64 __NR3264_fadvise64
 | 
			
		||||
#ifdef __NR3264_stat
 | 
			
		||||
#define __NR_stat __NR3264_stat
 | 
			
		||||
#define __NR_lstat __NR3264_lstat
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
#define __NR_fcntl64 __NR3264_fcntl
 | 
			
		||||
#define __NR_statfs64 __NR3264_statfs
 | 
			
		||||
#define __NR_fstatfs64 __NR3264_fstatfs
 | 
			
		||||
#define __NR_truncate64 __NR3264_truncate
 | 
			
		||||
#define __NR_ftruncate64 __NR3264_ftruncate
 | 
			
		||||
#define __NR_llseek __NR3264_lseek
 | 
			
		||||
#define __NR_sendfile64 __NR3264_sendfile
 | 
			
		||||
#define __NR_fstatat64 __NR3264_fstatat
 | 
			
		||||
#define __NR_fstat64 __NR3264_fstat
 | 
			
		||||
#define __NR_mmap2 __NR3264_mmap
 | 
			
		||||
#define __NR_fadvise64_64 __NR3264_fadvise64
 | 
			
		||||
#ifdef __NR3264_stat
 | 
			
		||||
#define __NR_stat64 __NR3264_stat
 | 
			
		||||
#define __NR_lstat64 __NR3264_lstat
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
@@ -0,0 +1,20 @@
 | 
			
		||||
#ifndef _ASM_X86_A_OUT_H
 | 
			
		||||
#define _ASM_X86_A_OUT_H
 | 
			
		||||
 | 
			
		||||
struct exec
 | 
			
		||||
{
 | 
			
		||||
	unsigned int a_info;	/* Use macros N_MAGIC, etc for access */
 | 
			
		||||
	unsigned a_text;	/* length of text, in bytes */
 | 
			
		||||
	unsigned a_data;	/* length of data, in bytes */
 | 
			
		||||
	unsigned a_bss;		/* length of uninitialized data area for file, in bytes */
 | 
			
		||||
	unsigned a_syms;	/* length of symbol table data in file, in bytes */
 | 
			
		||||
	unsigned a_entry;	/* start address */
 | 
			
		||||
	unsigned a_trsize;	/* length of relocation info for text, in bytes */
 | 
			
		||||
	unsigned a_drsize;	/* length of relocation info for data, in bytes */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define N_TRSIZE(a)	((a).a_trsize)
 | 
			
		||||
#define N_DRSIZE(a)	((a).a_drsize)
 | 
			
		||||
#define N_SYMSIZE(a)	((a).a_syms)
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_A_OUT_H */
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
#ifndef _ASM_X86_AUXVEC_H
 | 
			
		||||
#define _ASM_X86_AUXVEC_H
 | 
			
		||||
/*
 | 
			
		||||
 * Architecture-neutral AT_ values in 0-17, leave some room
 | 
			
		||||
 * for more of them, start the x86-specific ones at 32.
 | 
			
		||||
 */
 | 
			
		||||
#ifdef __i386__
 | 
			
		||||
#define AT_SYSINFO		32
 | 
			
		||||
#endif
 | 
			
		||||
#define AT_SYSINFO_EHDR		33
 | 
			
		||||
 | 
			
		||||
/* entries in ARCH_DLINFO: */
 | 
			
		||||
#if defined(CONFIG_IA32_EMULATION) || !defined(CONFIG_X86_64)
 | 
			
		||||
# define AT_VECTOR_SIZE_ARCH 2
 | 
			
		||||
#else /* else it's non-compat x86-64 */
 | 
			
		||||
# define AT_VECTOR_SIZE_ARCH 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_AUXVEC_H */
 | 
			
		||||
@@ -0,0 +1,13 @@
 | 
			
		||||
#ifndef __ASM_X86_BITSPERLONG_H
 | 
			
		||||
#define __ASM_X86_BITSPERLONG_H
 | 
			
		||||
 | 
			
		||||
#if defined(__x86_64__) && !defined(__ILP32__)
 | 
			
		||||
# define __BITS_PER_LONG 64
 | 
			
		||||
#else
 | 
			
		||||
# define __BITS_PER_LONG 32
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <asm-generic/bitsperlong.h>
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_X86_BITSPERLONG_H */
 | 
			
		||||
 | 
			
		||||
@@ -0,0 +1,10 @@
 | 
			
		||||
#ifndef _ASM_X86_BOOT_H
 | 
			
		||||
#define _ASM_X86_BOOT_H
 | 
			
		||||
 | 
			
		||||
/* Internal svga startup constants */
 | 
			
		||||
#define NORMAL_VGA	0xffff		/* 80x25 mode */
 | 
			
		||||
#define EXTENDED_VGA	0xfffe		/* 80x50 mode */
 | 
			
		||||
#define ASK_VGA		0xfffd		/* ask for it at bootup */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_BOOT_H */
 | 
			
		||||
@@ -0,0 +1,172 @@
 | 
			
		||||
#ifndef _ASM_X86_BOOTPARAM_H
 | 
			
		||||
#define _ASM_X86_BOOTPARAM_H
 | 
			
		||||
 | 
			
		||||
/* setup_data types */
 | 
			
		||||
#define SETUP_NONE			0
 | 
			
		||||
#define SETUP_E820_EXT			1
 | 
			
		||||
#define SETUP_DTB			2
 | 
			
		||||
#define SETUP_PCI			3
 | 
			
		||||
#define SETUP_EFI			4
 | 
			
		||||
 | 
			
		||||
/* ram_size flags */
 | 
			
		||||
#define RAMDISK_IMAGE_START_MASK	0x07FF
 | 
			
		||||
#define RAMDISK_PROMPT_FLAG		0x8000
 | 
			
		||||
#define RAMDISK_LOAD_FLAG		0x4000
 | 
			
		||||
 | 
			
		||||
/* loadflags */
 | 
			
		||||
#define LOADED_HIGH	(1<<0)
 | 
			
		||||
#define KASLR_FLAG	(1<<1)
 | 
			
		||||
#define QUIET_FLAG	(1<<5)
 | 
			
		||||
#define KEEP_SEGMENTS	(1<<6)
 | 
			
		||||
#define CAN_USE_HEAP	(1<<7)
 | 
			
		||||
 | 
			
		||||
/* xloadflags */
 | 
			
		||||
#define XLF_KERNEL_64			(1<<0)
 | 
			
		||||
#define XLF_CAN_BE_LOADED_ABOVE_4G	(1<<1)
 | 
			
		||||
#define XLF_EFI_HANDOVER_32		(1<<2)
 | 
			
		||||
#define XLF_EFI_HANDOVER_64		(1<<3)
 | 
			
		||||
#define XLF_EFI_KEXEC			(1<<4)
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/screen_info.h>
 | 
			
		||||
#include <linux/apm_bios.h>
 | 
			
		||||
#include <linux/edd.h>
 | 
			
		||||
#include <asm/e820.h>
 | 
			
		||||
#include <asm/ist.h>
 | 
			
		||||
#include <video/edid.h>
 | 
			
		||||
 | 
			
		||||
/* extensible setup data list node */
 | 
			
		||||
struct setup_data {
 | 
			
		||||
	__u64 next;
 | 
			
		||||
	__u32 type;
 | 
			
		||||
	__u32 len;
 | 
			
		||||
	__u8 data[0];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct setup_header {
 | 
			
		||||
	__u8	setup_sects;
 | 
			
		||||
	__u16	root_flags;
 | 
			
		||||
	__u32	syssize;
 | 
			
		||||
	__u16	ram_size;
 | 
			
		||||
	__u16	vid_mode;
 | 
			
		||||
	__u16	root_dev;
 | 
			
		||||
	__u16	boot_flag;
 | 
			
		||||
	__u16	jump;
 | 
			
		||||
	__u32	header;
 | 
			
		||||
	__u16	version;
 | 
			
		||||
	__u32	realmode_swtch;
 | 
			
		||||
	__u16	start_sys;
 | 
			
		||||
	__u16	kernel_version;
 | 
			
		||||
	__u8	type_of_loader;
 | 
			
		||||
	__u8	loadflags;
 | 
			
		||||
	__u16	setup_move_size;
 | 
			
		||||
	__u32	code32_start;
 | 
			
		||||
	__u32	ramdisk_image;
 | 
			
		||||
	__u32	ramdisk_size;
 | 
			
		||||
	__u32	bootsect_kludge;
 | 
			
		||||
	__u16	heap_end_ptr;
 | 
			
		||||
	__u8	ext_loader_ver;
 | 
			
		||||
	__u8	ext_loader_type;
 | 
			
		||||
	__u32	cmd_line_ptr;
 | 
			
		||||
	__u32	initrd_addr_max;
 | 
			
		||||
	__u32	kernel_alignment;
 | 
			
		||||
	__u8	relocatable_kernel;
 | 
			
		||||
	__u8	min_alignment;
 | 
			
		||||
	__u16	xloadflags;
 | 
			
		||||
	__u32	cmdline_size;
 | 
			
		||||
	__u32	hardware_subarch;
 | 
			
		||||
	__u64	hardware_subarch_data;
 | 
			
		||||
	__u32	payload_offset;
 | 
			
		||||
	__u32	payload_length;
 | 
			
		||||
	__u64	setup_data;
 | 
			
		||||
	__u64	pref_address;
 | 
			
		||||
	__u32	init_size;
 | 
			
		||||
	__u32	handover_offset;
 | 
			
		||||
} __attribute__((packed));
 | 
			
		||||
 | 
			
		||||
struct sys_desc_table {
 | 
			
		||||
	__u16 length;
 | 
			
		||||
	__u8  table[14];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Gleaned from OFW's set-parameters in cpu/x86/pc/linux.fth */
 | 
			
		||||
struct olpc_ofw_header {
 | 
			
		||||
	__u32 ofw_magic;	/* OFW signature */
 | 
			
		||||
	__u32 ofw_version;
 | 
			
		||||
	__u32 cif_handler;	/* callback into OFW */
 | 
			
		||||
	__u32 irq_desc_table;
 | 
			
		||||
} __attribute__((packed));
 | 
			
		||||
 | 
			
		||||
struct efi_info {
 | 
			
		||||
	__u32 efi_loader_signature;
 | 
			
		||||
	__u32 efi_systab;
 | 
			
		||||
	__u32 efi_memdesc_size;
 | 
			
		||||
	__u32 efi_memdesc_version;
 | 
			
		||||
	__u32 efi_memmap;
 | 
			
		||||
	__u32 efi_memmap_size;
 | 
			
		||||
	__u32 efi_systab_hi;
 | 
			
		||||
	__u32 efi_memmap_hi;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* The so-called "zeropage" */
 | 
			
		||||
struct boot_params {
 | 
			
		||||
	struct screen_info screen_info;			/* 0x000 */
 | 
			
		||||
	struct apm_bios_info apm_bios_info;		/* 0x040 */
 | 
			
		||||
	__u8  _pad2[4];					/* 0x054 */
 | 
			
		||||
	__u64  tboot_addr;				/* 0x058 */
 | 
			
		||||
	struct ist_info ist_info;			/* 0x060 */
 | 
			
		||||
	__u8  _pad3[16];				/* 0x070 */
 | 
			
		||||
	__u8  hd0_info[16];	/* obsolete! */		/* 0x080 */
 | 
			
		||||
	__u8  hd1_info[16];	/* obsolete! */		/* 0x090 */
 | 
			
		||||
	struct sys_desc_table sys_desc_table; /* obsolete! */	/* 0x0a0 */
 | 
			
		||||
	struct olpc_ofw_header olpc_ofw_header;		/* 0x0b0 */
 | 
			
		||||
	__u32 ext_ramdisk_image;			/* 0x0c0 */
 | 
			
		||||
	__u32 ext_ramdisk_size;				/* 0x0c4 */
 | 
			
		||||
	__u32 ext_cmd_line_ptr;				/* 0x0c8 */
 | 
			
		||||
	__u8  _pad4[116];				/* 0x0cc */
 | 
			
		||||
	struct edid_info edid_info;			/* 0x140 */
 | 
			
		||||
	struct efi_info efi_info;			/* 0x1c0 */
 | 
			
		||||
	__u32 alt_mem_k;				/* 0x1e0 */
 | 
			
		||||
	__u32 scratch;		/* Scratch field! */	/* 0x1e4 */
 | 
			
		||||
	__u8  e820_entries;				/* 0x1e8 */
 | 
			
		||||
	__u8  eddbuf_entries;				/* 0x1e9 */
 | 
			
		||||
	__u8  edd_mbr_sig_buf_entries;			/* 0x1ea */
 | 
			
		||||
	__u8  kbd_status;				/* 0x1eb */
 | 
			
		||||
	__u8  secure_boot;				/* 0x1ec */
 | 
			
		||||
	__u8  _pad5[2];					/* 0x1ed */
 | 
			
		||||
	/*
 | 
			
		||||
	 * The sentinel is set to a nonzero value (0xff) in header.S.
 | 
			
		||||
	 *
 | 
			
		||||
	 * A bootloader is supposed to only take setup_header and put
 | 
			
		||||
	 * it into a clean boot_params buffer. If it turns out that
 | 
			
		||||
	 * it is clumsy or too generous with the buffer, it most
 | 
			
		||||
	 * probably will pick up the sentinel variable too. The fact
 | 
			
		||||
	 * that this variable then is still 0xff will let kernel
 | 
			
		||||
	 * know that some variables in boot_params are invalid and
 | 
			
		||||
	 * kernel should zero out certain portions of boot_params.
 | 
			
		||||
	 */
 | 
			
		||||
	__u8  sentinel;					/* 0x1ef */
 | 
			
		||||
	__u8  _pad6[1];					/* 0x1f0 */
 | 
			
		||||
	struct setup_header hdr;    /* setup header */	/* 0x1f1 */
 | 
			
		||||
	__u8  _pad7[0x290-0x1f1-sizeof(struct setup_header)];
 | 
			
		||||
	__u32 edd_mbr_sig_buffer[EDD_MBR_SIG_MAX];	/* 0x290 */
 | 
			
		||||
	struct e820entry e820_map[E820MAX];		/* 0x2d0 */
 | 
			
		||||
	__u8  _pad8[48];				/* 0xcd0 */
 | 
			
		||||
	struct edd_info eddbuf[EDDMAXNR];		/* 0xd00 */
 | 
			
		||||
	__u8  _pad9[276];				/* 0xeec */
 | 
			
		||||
} __attribute__((packed));
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	X86_SUBARCH_PC = 0,
 | 
			
		||||
	X86_SUBARCH_LGUEST,
 | 
			
		||||
	X86_SUBARCH_XEN,
 | 
			
		||||
	X86_SUBARCH_INTEL_MID,
 | 
			
		||||
	X86_SUBARCH_CE4100,
 | 
			
		||||
	X86_NR_SUBARCHS,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_BOOTPARAM_H */
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
#ifndef _ASM_X86_BYTEORDER_H
 | 
			
		||||
#define _ASM_X86_BYTEORDER_H
 | 
			
		||||
 | 
			
		||||
#include <linux/byteorder/little_endian.h>
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_BYTEORDER_H */
 | 
			
		||||
@@ -0,0 +1,80 @@
 | 
			
		||||
#ifndef _ASM_X86_DEBUGREG_H
 | 
			
		||||
#define _ASM_X86_DEBUGREG_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Indicate the register numbers for a number of the specific
 | 
			
		||||
   debug registers.  Registers 0-3 contain the addresses we wish to trap on */
 | 
			
		||||
#define DR_FIRSTADDR 0        /* u_debugreg[DR_FIRSTADDR] */
 | 
			
		||||
#define DR_LASTADDR 3         /* u_debugreg[DR_LASTADDR]  */
 | 
			
		||||
 | 
			
		||||
#define DR_STATUS 6           /* u_debugreg[DR_STATUS]     */
 | 
			
		||||
#define DR_CONTROL 7          /* u_debugreg[DR_CONTROL] */
 | 
			
		||||
 | 
			
		||||
/* Define a few things for the status register.  We can use this to determine
 | 
			
		||||
   which debugging register was responsible for the trap.  The other bits
 | 
			
		||||
   are either reserved or not of interest to us. */
 | 
			
		||||
 | 
			
		||||
/* Define reserved bits in DR6 which are always set to 1 */
 | 
			
		||||
#define DR6_RESERVED	(0xFFFF0FF0)
 | 
			
		||||
 | 
			
		||||
#define DR_TRAP0	(0x1)		/* db0 */
 | 
			
		||||
#define DR_TRAP1	(0x2)		/* db1 */
 | 
			
		||||
#define DR_TRAP2	(0x4)		/* db2 */
 | 
			
		||||
#define DR_TRAP3	(0x8)		/* db3 */
 | 
			
		||||
#define DR_TRAP_BITS	(DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)
 | 
			
		||||
 | 
			
		||||
#define DR_STEP		(0x4000)	/* single-step */
 | 
			
		||||
#define DR_SWITCH	(0x8000)	/* task switch */
 | 
			
		||||
 | 
			
		||||
/* Now define a bunch of things for manipulating the control register.
 | 
			
		||||
   The top two bytes of the control register consist of 4 fields of 4
 | 
			
		||||
   bits - each field corresponds to one of the four debug registers,
 | 
			
		||||
   and indicates what types of access we trap on, and how large the data
 | 
			
		||||
   field is that we are looking at */
 | 
			
		||||
 | 
			
		||||
#define DR_CONTROL_SHIFT 16 /* Skip this many bits in ctl register */
 | 
			
		||||
#define DR_CONTROL_SIZE 4   /* 4 control bits per register */
 | 
			
		||||
 | 
			
		||||
#define DR_RW_EXECUTE (0x0)   /* Settings for the access types to trap on */
 | 
			
		||||
#define DR_RW_WRITE (0x1)
 | 
			
		||||
#define DR_RW_READ (0x3)
 | 
			
		||||
 | 
			
		||||
#define DR_LEN_1 (0x0) /* Settings for data length to trap on */
 | 
			
		||||
#define DR_LEN_2 (0x4)
 | 
			
		||||
#define DR_LEN_4 (0xC)
 | 
			
		||||
#define DR_LEN_8 (0x8)
 | 
			
		||||
 | 
			
		||||
/* The low byte to the control register determine which registers are
 | 
			
		||||
   enabled.  There are 4 fields of two bits.  One bit is "local", meaning
 | 
			
		||||
   that the processor will reset the bit after a task switch and the other
 | 
			
		||||
   is global meaning that we have to explicitly reset the bit.  With linux,
 | 
			
		||||
   you can use either one, since we explicitly zero the register when we enter
 | 
			
		||||
   kernel mode. */
 | 
			
		||||
 | 
			
		||||
#define DR_LOCAL_ENABLE_SHIFT 0    /* Extra shift to the local enable bit */
 | 
			
		||||
#define DR_GLOBAL_ENABLE_SHIFT 1   /* Extra shift to the global enable bit */
 | 
			
		||||
#define DR_LOCAL_ENABLE (0x1)      /* Local enable for reg 0 */
 | 
			
		||||
#define DR_GLOBAL_ENABLE (0x2)     /* Global enable for reg 0 */
 | 
			
		||||
#define DR_ENABLE_SIZE 2           /* 2 enable bits per register */
 | 
			
		||||
 | 
			
		||||
#define DR_LOCAL_ENABLE_MASK (0x55)  /* Set  local bits for all 4 regs */
 | 
			
		||||
#define DR_GLOBAL_ENABLE_MASK (0xAA) /* Set global bits for all 4 regs */
 | 
			
		||||
 | 
			
		||||
/* The second byte to the control register has a few special things.
 | 
			
		||||
   We can slow the instruction pipeline for instructions coming via the
 | 
			
		||||
   gdt or the ldt if we want to.  I am not sure why this is an advantage */
 | 
			
		||||
 | 
			
		||||
#ifdef __i386__
 | 
			
		||||
#define DR_CONTROL_RESERVED (0xFC00) /* Reserved by Intel */
 | 
			
		||||
#else
 | 
			
		||||
#define DR_CONTROL_RESERVED (0xFFFFFFFF0000FC00UL) /* Reserved */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define DR_LOCAL_SLOWDOWN (0x100)   /* Local slow the pipeline */
 | 
			
		||||
#define DR_GLOBAL_SLOWDOWN (0x200)  /* Global slow the pipeline */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * HW breakpoint additions
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_DEBUGREG_H */
 | 
			
		||||
@@ -0,0 +1,79 @@
 | 
			
		||||
#ifndef _ASM_X86_E820_H
 | 
			
		||||
#define _ASM_X86_E820_H
 | 
			
		||||
#define E820MAP	0x2d0		/* our map */
 | 
			
		||||
#define E820MAX	128		/* number of entries in E820MAP */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Legacy E820 BIOS limits us to 128 (E820MAX) nodes due to the
 | 
			
		||||
 * constrained space in the zeropage.  If we have more nodes than
 | 
			
		||||
 * that, and if we've booted off EFI firmware, then the EFI tables
 | 
			
		||||
 * passed us from the EFI firmware can list more nodes.  Size our
 | 
			
		||||
 * internal memory map tables to have room for these additional
 | 
			
		||||
 * nodes, based on up to three entries per node for which the
 | 
			
		||||
 * kernel was built: MAX_NUMNODES == (1 << CONFIG_NODES_SHIFT),
 | 
			
		||||
 * plus E820MAX, allowing space for the possible duplicate E820
 | 
			
		||||
 * entries that might need room in the same arrays, prior to the
 | 
			
		||||
 * call to sanitize_e820_map() to remove duplicates.  The allowance
 | 
			
		||||
 * of three memory map entries per node is "enough" entries for
 | 
			
		||||
 * the initial hardware platform motivating this mechanism to make
 | 
			
		||||
 * use of additional EFI map entries.  Future platforms may want
 | 
			
		||||
 * to allow more than three entries per node or otherwise refine
 | 
			
		||||
 * this size.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define E820_X_MAX E820MAX
 | 
			
		||||
 | 
			
		||||
#define E820NR	0x1e8		/* # entries in E820MAP */
 | 
			
		||||
 | 
			
		||||
#define E820_RAM	1
 | 
			
		||||
#define E820_RESERVED	2
 | 
			
		||||
#define E820_ACPI	3
 | 
			
		||||
#define E820_NVS	4
 | 
			
		||||
#define E820_UNUSABLE	5
 | 
			
		||||
#define E820_PMEM	7
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is a non-standardized way to represent ADR or NVDIMM regions that
 | 
			
		||||
 * persist over a reboot.  The kernel will ignore their special capabilities
 | 
			
		||||
 * unless the CONFIG_X86_PMEM_LEGACY option is set.
 | 
			
		||||
 *
 | 
			
		||||
 * ( Note that older platforms also used 6 for the same type of memory,
 | 
			
		||||
 *   but newer versions switched to 12 as 6 was assigned differently.  Some
 | 
			
		||||
 *   time they will learn... )
 | 
			
		||||
 */
 | 
			
		||||
#define E820_PRAM	12
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * reserved RAM used by kernel itself
 | 
			
		||||
 * if CONFIG_INTEL_TXT is enabled, memory of this type will be
 | 
			
		||||
 * included in the S3 integrity calculation and so should not include
 | 
			
		||||
 * any memory that BIOS might alter over the S3 transition
 | 
			
		||||
 */
 | 
			
		||||
#define E820_RESERVED_KERN        128
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
struct e820entry {
 | 
			
		||||
	__u64 addr;	/* start of memory segment */
 | 
			
		||||
	__u64 size;	/* size of memory segment */
 | 
			
		||||
	__u32 type;	/* type of memory segment */
 | 
			
		||||
} __attribute__((packed));
 | 
			
		||||
 | 
			
		||||
struct e820map {
 | 
			
		||||
	__u32 nr_map;
 | 
			
		||||
	struct e820entry map[E820_X_MAX];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define ISA_START_ADDRESS	0xa0000
 | 
			
		||||
#define ISA_END_ADDRESS		0x100000
 | 
			
		||||
 | 
			
		||||
#define BIOS_BEGIN		0x000a0000
 | 
			
		||||
#define BIOS_END		0x00100000
 | 
			
		||||
 | 
			
		||||
#define BIOS_ROM_BASE		0xffe00000
 | 
			
		||||
#define BIOS_ROM_END		0xffffffff
 | 
			
		||||
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_E820_H */
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/errno.h>
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/fcntl.h>
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
/* */
 | 
			
		||||
@@ -0,0 +1,366 @@
 | 
			
		||||
#ifndef _ASM_X86_HYPERV_H
 | 
			
		||||
#define _ASM_X86_HYPERV_H
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The below CPUID leaves are present if VersionAndFeatures.HypervisorPresent
 | 
			
		||||
 * is set by CPUID(HvCpuIdFunctionVersionAndFeatures).
 | 
			
		||||
 */
 | 
			
		||||
#define HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS	0x40000000
 | 
			
		||||
#define HYPERV_CPUID_INTERFACE			0x40000001
 | 
			
		||||
#define HYPERV_CPUID_VERSION			0x40000002
 | 
			
		||||
#define HYPERV_CPUID_FEATURES			0x40000003
 | 
			
		||||
#define HYPERV_CPUID_ENLIGHTMENT_INFO		0x40000004
 | 
			
		||||
#define HYPERV_CPUID_IMPLEMENT_LIMITS		0x40000005
 | 
			
		||||
 | 
			
		||||
#define HYPERV_HYPERVISOR_PRESENT_BIT		0x80000000
 | 
			
		||||
#define HYPERV_CPUID_MIN			0x40000005
 | 
			
		||||
#define HYPERV_CPUID_MAX			0x4000ffff
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Feature identification. EAX indicates which features are available
 | 
			
		||||
 * to the partition based upon the current partition privileges.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* VP Runtime (HV_X64_MSR_VP_RUNTIME) available */
 | 
			
		||||
#define HV_X64_MSR_VP_RUNTIME_AVAILABLE		(1 << 0)
 | 
			
		||||
/* Partition Reference Counter (HV_X64_MSR_TIME_REF_COUNT) available*/
 | 
			
		||||
#define HV_X64_MSR_TIME_REF_COUNT_AVAILABLE	(1 << 1)
 | 
			
		||||
/* Partition reference TSC MSR is available */
 | 
			
		||||
#define HV_X64_MSR_REFERENCE_TSC_AVAILABLE              (1 << 9)
 | 
			
		||||
 | 
			
		||||
/* A partition's reference time stamp counter (TSC) page */
 | 
			
		||||
#define HV_X64_MSR_REFERENCE_TSC		0x40000021
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * There is a single feature flag that signifies the presence of the MSR
 | 
			
		||||
 * that can be used to retrieve both the local APIC Timer frequency as
 | 
			
		||||
 * well as the TSC frequency.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Local APIC timer frequency MSR (HV_X64_MSR_APIC_FREQUENCY) is available */
 | 
			
		||||
#define HV_X64_MSR_APIC_FREQUENCY_AVAILABLE (1 << 11)
 | 
			
		||||
 | 
			
		||||
/* TSC frequency MSR (HV_X64_MSR_TSC_FREQUENCY) is available */
 | 
			
		||||
#define HV_X64_MSR_TSC_FREQUENCY_AVAILABLE (1 << 11)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Basic SynIC MSRs (HV_X64_MSR_SCONTROL through HV_X64_MSR_EOM
 | 
			
		||||
 * and HV_X64_MSR_SINT0 through HV_X64_MSR_SINT15) available
 | 
			
		||||
 */
 | 
			
		||||
#define HV_X64_MSR_SYNIC_AVAILABLE		(1 << 2)
 | 
			
		||||
/*
 | 
			
		||||
 * Synthetic Timer MSRs (HV_X64_MSR_STIMER0_CONFIG through
 | 
			
		||||
 * HV_X64_MSR_STIMER3_COUNT) available
 | 
			
		||||
 */
 | 
			
		||||
#define HV_X64_MSR_SYNTIMER_AVAILABLE		(1 << 3)
 | 
			
		||||
/*
 | 
			
		||||
 * APIC access MSRs (HV_X64_MSR_EOI, HV_X64_MSR_ICR and HV_X64_MSR_TPR)
 | 
			
		||||
 * are available
 | 
			
		||||
 */
 | 
			
		||||
#define HV_X64_MSR_APIC_ACCESS_AVAILABLE	(1 << 4)
 | 
			
		||||
/* Hypercall MSRs (HV_X64_MSR_GUEST_OS_ID and HV_X64_MSR_HYPERCALL) available*/
 | 
			
		||||
#define HV_X64_MSR_HYPERCALL_AVAILABLE		(1 << 5)
 | 
			
		||||
/* Access virtual processor index MSR (HV_X64_MSR_VP_INDEX) available*/
 | 
			
		||||
#define HV_X64_MSR_VP_INDEX_AVAILABLE		(1 << 6)
 | 
			
		||||
/* Virtual system reset MSR (HV_X64_MSR_RESET) is available*/
 | 
			
		||||
#define HV_X64_MSR_RESET_AVAILABLE		(1 << 7)
 | 
			
		||||
 /*
 | 
			
		||||
  * Access statistics pages MSRs (HV_X64_MSR_STATS_PARTITION_RETAIL_PAGE,
 | 
			
		||||
  * HV_X64_MSR_STATS_PARTITION_INTERNAL_PAGE, HV_X64_MSR_STATS_VP_RETAIL_PAGE,
 | 
			
		||||
  * HV_X64_MSR_STATS_VP_INTERNAL_PAGE) available
 | 
			
		||||
  */
 | 
			
		||||
#define HV_X64_MSR_STAT_PAGES_AVAILABLE		(1 << 8)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Feature identification: EBX indicates which flags were specified at
 | 
			
		||||
 * partition creation. The format is the same as the partition creation
 | 
			
		||||
 * flag structure defined in section Partition Creation Flags.
 | 
			
		||||
 */
 | 
			
		||||
#define HV_X64_CREATE_PARTITIONS		(1 << 0)
 | 
			
		||||
#define HV_X64_ACCESS_PARTITION_ID		(1 << 1)
 | 
			
		||||
#define HV_X64_ACCESS_MEMORY_POOL		(1 << 2)
 | 
			
		||||
#define HV_X64_ADJUST_MESSAGE_BUFFERS		(1 << 3)
 | 
			
		||||
#define HV_X64_POST_MESSAGES			(1 << 4)
 | 
			
		||||
#define HV_X64_SIGNAL_EVENTS			(1 << 5)
 | 
			
		||||
#define HV_X64_CREATE_PORT			(1 << 6)
 | 
			
		||||
#define HV_X64_CONNECT_PORT			(1 << 7)
 | 
			
		||||
#define HV_X64_ACCESS_STATS			(1 << 8)
 | 
			
		||||
#define HV_X64_DEBUGGING			(1 << 11)
 | 
			
		||||
#define HV_X64_CPU_POWER_MANAGEMENT		(1 << 12)
 | 
			
		||||
#define HV_X64_CONFIGURE_PROFILER		(1 << 13)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Feature identification. EDX indicates which miscellaneous features
 | 
			
		||||
 * are available to the partition.
 | 
			
		||||
 */
 | 
			
		||||
/* The MWAIT instruction is available (per section MONITOR / MWAIT) */
 | 
			
		||||
#define HV_X64_MWAIT_AVAILABLE				(1 << 0)
 | 
			
		||||
/* Guest debugging support is available */
 | 
			
		||||
#define HV_X64_GUEST_DEBUGGING_AVAILABLE		(1 << 1)
 | 
			
		||||
/* Performance Monitor support is available*/
 | 
			
		||||
#define HV_X64_PERF_MONITOR_AVAILABLE			(1 << 2)
 | 
			
		||||
/* Support for physical CPU dynamic partitioning events is available*/
 | 
			
		||||
#define HV_X64_CPU_DYNAMIC_PARTITIONING_AVAILABLE	(1 << 3)
 | 
			
		||||
/*
 | 
			
		||||
 * Support for passing hypercall input parameter block via XMM
 | 
			
		||||
 * registers is available
 | 
			
		||||
 */
 | 
			
		||||
#define HV_X64_HYPERCALL_PARAMS_XMM_AVAILABLE		(1 << 4)
 | 
			
		||||
/* Support for a virtual guest idle state is available */
 | 
			
		||||
#define HV_X64_GUEST_IDLE_STATE_AVAILABLE		(1 << 5)
 | 
			
		||||
/* Guest crash data handler available */
 | 
			
		||||
#define HV_X64_GUEST_CRASH_MSR_AVAILABLE		(1 << 10)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Implementation recommendations. Indicates which behaviors the hypervisor
 | 
			
		||||
 * recommends the OS implement for optimal performance.
 | 
			
		||||
 */
 | 
			
		||||
 /*
 | 
			
		||||
  * Recommend using hypercall for address space switches rather
 | 
			
		||||
  * than MOV to CR3 instruction
 | 
			
		||||
  */
 | 
			
		||||
#define HV_X64_MWAIT_RECOMMENDED		(1 << 0)
 | 
			
		||||
/* Recommend using hypercall for local TLB flushes rather
 | 
			
		||||
 * than INVLPG or MOV to CR3 instructions */
 | 
			
		||||
#define HV_X64_LOCAL_TLB_FLUSH_RECOMMENDED	(1 << 1)
 | 
			
		||||
/*
 | 
			
		||||
 * Recommend using hypercall for remote TLB flushes rather
 | 
			
		||||
 * than inter-processor interrupts
 | 
			
		||||
 */
 | 
			
		||||
#define HV_X64_REMOTE_TLB_FLUSH_RECOMMENDED	(1 << 2)
 | 
			
		||||
/*
 | 
			
		||||
 * Recommend using MSRs for accessing APIC registers
 | 
			
		||||
 * EOI, ICR and TPR rather than their memory-mapped counterparts
 | 
			
		||||
 */
 | 
			
		||||
#define HV_X64_APIC_ACCESS_RECOMMENDED		(1 << 3)
 | 
			
		||||
/* Recommend using the hypervisor-provided MSR to initiate a system RESET */
 | 
			
		||||
#define HV_X64_SYSTEM_RESET_RECOMMENDED		(1 << 4)
 | 
			
		||||
/*
 | 
			
		||||
 * Recommend using relaxed timing for this partition. If used,
 | 
			
		||||
 * the VM should disable any watchdog timeouts that rely on the
 | 
			
		||||
 * timely delivery of external interrupts
 | 
			
		||||
 */
 | 
			
		||||
#define HV_X64_RELAXED_TIMING_RECOMMENDED	(1 << 5)
 | 
			
		||||
 | 
			
		||||
/* MSR used to identify the guest OS. */
 | 
			
		||||
#define HV_X64_MSR_GUEST_OS_ID			0x40000000
 | 
			
		||||
 | 
			
		||||
/* MSR used to setup pages used to communicate with the hypervisor. */
 | 
			
		||||
#define HV_X64_MSR_HYPERCALL			0x40000001
 | 
			
		||||
 | 
			
		||||
/* MSR used to provide vcpu index */
 | 
			
		||||
#define HV_X64_MSR_VP_INDEX			0x40000002
 | 
			
		||||
 | 
			
		||||
/* MSR used to reset the guest OS. */
 | 
			
		||||
#define HV_X64_MSR_RESET			0x40000003
 | 
			
		||||
 | 
			
		||||
/* MSR used to provide vcpu runtime in 100ns units */
 | 
			
		||||
#define HV_X64_MSR_VP_RUNTIME			0x40000010
 | 
			
		||||
 | 
			
		||||
/* MSR used to read the per-partition time reference counter */
 | 
			
		||||
#define HV_X64_MSR_TIME_REF_COUNT		0x40000020
 | 
			
		||||
 | 
			
		||||
/* MSR used to retrieve the TSC frequency */
 | 
			
		||||
#define HV_X64_MSR_TSC_FREQUENCY		0x40000022
 | 
			
		||||
 | 
			
		||||
/* MSR used to retrieve the local APIC timer frequency */
 | 
			
		||||
#define HV_X64_MSR_APIC_FREQUENCY		0x40000023
 | 
			
		||||
 | 
			
		||||
/* Define the virtual APIC registers */
 | 
			
		||||
#define HV_X64_MSR_EOI				0x40000070
 | 
			
		||||
#define HV_X64_MSR_ICR				0x40000071
 | 
			
		||||
#define HV_X64_MSR_TPR				0x40000072
 | 
			
		||||
#define HV_X64_MSR_APIC_ASSIST_PAGE		0x40000073
 | 
			
		||||
 | 
			
		||||
/* Define synthetic interrupt controller model specific registers. */
 | 
			
		||||
#define HV_X64_MSR_SCONTROL			0x40000080
 | 
			
		||||
#define HV_X64_MSR_SVERSION			0x40000081
 | 
			
		||||
#define HV_X64_MSR_SIEFP			0x40000082
 | 
			
		||||
#define HV_X64_MSR_SIMP				0x40000083
 | 
			
		||||
#define HV_X64_MSR_EOM				0x40000084
 | 
			
		||||
#define HV_X64_MSR_SINT0			0x40000090
 | 
			
		||||
#define HV_X64_MSR_SINT1			0x40000091
 | 
			
		||||
#define HV_X64_MSR_SINT2			0x40000092
 | 
			
		||||
#define HV_X64_MSR_SINT3			0x40000093
 | 
			
		||||
#define HV_X64_MSR_SINT4			0x40000094
 | 
			
		||||
#define HV_X64_MSR_SINT5			0x40000095
 | 
			
		||||
#define HV_X64_MSR_SINT6			0x40000096
 | 
			
		||||
#define HV_X64_MSR_SINT7			0x40000097
 | 
			
		||||
#define HV_X64_MSR_SINT8			0x40000098
 | 
			
		||||
#define HV_X64_MSR_SINT9			0x40000099
 | 
			
		||||
#define HV_X64_MSR_SINT10			0x4000009A
 | 
			
		||||
#define HV_X64_MSR_SINT11			0x4000009B
 | 
			
		||||
#define HV_X64_MSR_SINT12			0x4000009C
 | 
			
		||||
#define HV_X64_MSR_SINT13			0x4000009D
 | 
			
		||||
#define HV_X64_MSR_SINT14			0x4000009E
 | 
			
		||||
#define HV_X64_MSR_SINT15			0x4000009F
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Synthetic Timer MSRs. Four timers per vcpu.
 | 
			
		||||
 */
 | 
			
		||||
#define HV_X64_MSR_STIMER0_CONFIG		0x400000B0
 | 
			
		||||
#define HV_X64_MSR_STIMER0_COUNT		0x400000B1
 | 
			
		||||
#define HV_X64_MSR_STIMER1_CONFIG		0x400000B2
 | 
			
		||||
#define HV_X64_MSR_STIMER1_COUNT		0x400000B3
 | 
			
		||||
#define HV_X64_MSR_STIMER2_CONFIG		0x400000B4
 | 
			
		||||
#define HV_X64_MSR_STIMER2_COUNT		0x400000B5
 | 
			
		||||
#define HV_X64_MSR_STIMER3_CONFIG		0x400000B6
 | 
			
		||||
#define HV_X64_MSR_STIMER3_COUNT		0x400000B7
 | 
			
		||||
 | 
			
		||||
/* Hyper-V guest crash notification MSR's */
 | 
			
		||||
#define HV_X64_MSR_CRASH_P0			0x40000100
 | 
			
		||||
#define HV_X64_MSR_CRASH_P1			0x40000101
 | 
			
		||||
#define HV_X64_MSR_CRASH_P2			0x40000102
 | 
			
		||||
#define HV_X64_MSR_CRASH_P3			0x40000103
 | 
			
		||||
#define HV_X64_MSR_CRASH_P4			0x40000104
 | 
			
		||||
#define HV_X64_MSR_CRASH_CTL			0x40000105
 | 
			
		||||
#define HV_X64_MSR_CRASH_CTL_NOTIFY		(1ULL << 63)
 | 
			
		||||
#define HV_X64_MSR_CRASH_PARAMS		\
 | 
			
		||||
		(1 + (HV_X64_MSR_CRASH_P4 - HV_X64_MSR_CRASH_P0))
 | 
			
		||||
 | 
			
		||||
#define HV_X64_MSR_HYPERCALL_ENABLE		0x00000001
 | 
			
		||||
#define HV_X64_MSR_HYPERCALL_PAGE_ADDRESS_SHIFT	12
 | 
			
		||||
#define HV_X64_MSR_HYPERCALL_PAGE_ADDRESS_MASK	\
 | 
			
		||||
		(~((1ull << HV_X64_MSR_HYPERCALL_PAGE_ADDRESS_SHIFT) - 1))
 | 
			
		||||
 | 
			
		||||
/* Declare the various hypercall operations. */
 | 
			
		||||
#define HVCALL_NOTIFY_LONG_SPIN_WAIT		0x0008
 | 
			
		||||
#define HVCALL_POST_MESSAGE			0x005c
 | 
			
		||||
#define HVCALL_SIGNAL_EVENT			0x005d
 | 
			
		||||
 | 
			
		||||
#define HV_X64_MSR_APIC_ASSIST_PAGE_ENABLE		0x00000001
 | 
			
		||||
#define HV_X64_MSR_APIC_ASSIST_PAGE_ADDRESS_SHIFT	12
 | 
			
		||||
#define HV_X64_MSR_APIC_ASSIST_PAGE_ADDRESS_MASK	\
 | 
			
		||||
		(~((1ull << HV_X64_MSR_APIC_ASSIST_PAGE_ADDRESS_SHIFT) - 1))
 | 
			
		||||
 | 
			
		||||
#define HV_X64_MSR_TSC_REFERENCE_ENABLE		0x00000001
 | 
			
		||||
#define HV_X64_MSR_TSC_REFERENCE_ADDRESS_SHIFT	12
 | 
			
		||||
 | 
			
		||||
#define HV_PROCESSOR_POWER_STATE_C0		0
 | 
			
		||||
#define HV_PROCESSOR_POWER_STATE_C1		1
 | 
			
		||||
#define HV_PROCESSOR_POWER_STATE_C2		2
 | 
			
		||||
#define HV_PROCESSOR_POWER_STATE_C3		3
 | 
			
		||||
 | 
			
		||||
/* hypercall status code */
 | 
			
		||||
#define HV_STATUS_SUCCESS			0
 | 
			
		||||
#define HV_STATUS_INVALID_HYPERCALL_CODE	2
 | 
			
		||||
#define HV_STATUS_INVALID_HYPERCALL_INPUT	3
 | 
			
		||||
#define HV_STATUS_INVALID_ALIGNMENT		4
 | 
			
		||||
#define HV_STATUS_INSUFFICIENT_MEMORY		11
 | 
			
		||||
#define HV_STATUS_INVALID_CONNECTION_ID		18
 | 
			
		||||
#define HV_STATUS_INSUFFICIENT_BUFFERS		19
 | 
			
		||||
 | 
			
		||||
typedef struct _HV_REFERENCE_TSC_PAGE {
 | 
			
		||||
	__u32 tsc_sequence;
 | 
			
		||||
	__u32 res1;
 | 
			
		||||
	__u64 tsc_scale;
 | 
			
		||||
	__s64 tsc_offset;
 | 
			
		||||
} HV_REFERENCE_TSC_PAGE, *PHV_REFERENCE_TSC_PAGE;
 | 
			
		||||
 | 
			
		||||
/* Define the number of synthetic interrupt sources. */
 | 
			
		||||
#define HV_SYNIC_SINT_COUNT		(16)
 | 
			
		||||
/* Define the expected SynIC version. */
 | 
			
		||||
#define HV_SYNIC_VERSION_1		(0x1)
 | 
			
		||||
 | 
			
		||||
#define HV_SYNIC_CONTROL_ENABLE		(1ULL << 0)
 | 
			
		||||
#define HV_SYNIC_SIMP_ENABLE		(1ULL << 0)
 | 
			
		||||
#define HV_SYNIC_SIEFP_ENABLE		(1ULL << 0)
 | 
			
		||||
#define HV_SYNIC_SINT_MASKED		(1ULL << 16)
 | 
			
		||||
#define HV_SYNIC_SINT_AUTO_EOI		(1ULL << 17)
 | 
			
		||||
#define HV_SYNIC_SINT_VECTOR_MASK	(0xFF)
 | 
			
		||||
 | 
			
		||||
#define HV_SYNIC_STIMER_COUNT		(4)
 | 
			
		||||
 | 
			
		||||
/* Define synthetic interrupt controller message constants. */
 | 
			
		||||
#define HV_MESSAGE_SIZE			(256)
 | 
			
		||||
#define HV_MESSAGE_PAYLOAD_BYTE_COUNT	(240)
 | 
			
		||||
#define HV_MESSAGE_PAYLOAD_QWORD_COUNT	(30)
 | 
			
		||||
 | 
			
		||||
/* Define hypervisor message types. */
 | 
			
		||||
enum hv_message_type {
 | 
			
		||||
	HVMSG_NONE			= 0x00000000,
 | 
			
		||||
 | 
			
		||||
	/* Memory access messages. */
 | 
			
		||||
	HVMSG_UNMAPPED_GPA		= 0x80000000,
 | 
			
		||||
	HVMSG_GPA_INTERCEPT		= 0x80000001,
 | 
			
		||||
 | 
			
		||||
	/* Timer notification messages. */
 | 
			
		||||
	HVMSG_TIMER_EXPIRED			= 0x80000010,
 | 
			
		||||
 | 
			
		||||
	/* Error messages. */
 | 
			
		||||
	HVMSG_INVALID_VP_REGISTER_VALUE	= 0x80000020,
 | 
			
		||||
	HVMSG_UNRECOVERABLE_EXCEPTION	= 0x80000021,
 | 
			
		||||
	HVMSG_UNSUPPORTED_FEATURE		= 0x80000022,
 | 
			
		||||
 | 
			
		||||
	/* Trace buffer complete messages. */
 | 
			
		||||
	HVMSG_EVENTLOG_BUFFERCOMPLETE	= 0x80000040,
 | 
			
		||||
 | 
			
		||||
	/* Platform-specific processor intercept messages. */
 | 
			
		||||
	HVMSG_X64_IOPORT_INTERCEPT		= 0x80010000,
 | 
			
		||||
	HVMSG_X64_MSR_INTERCEPT		= 0x80010001,
 | 
			
		||||
	HVMSG_X64_CPUID_INTERCEPT		= 0x80010002,
 | 
			
		||||
	HVMSG_X64_EXCEPTION_INTERCEPT	= 0x80010003,
 | 
			
		||||
	HVMSG_X64_APIC_EOI			= 0x80010004,
 | 
			
		||||
	HVMSG_X64_LEGACY_FP_ERROR		= 0x80010005
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Define synthetic interrupt controller message flags. */
 | 
			
		||||
union hv_message_flags {
 | 
			
		||||
	__u8 asu8;
 | 
			
		||||
	struct {
 | 
			
		||||
		__u8 msg_pending:1;
 | 
			
		||||
		__u8 reserved:7;
 | 
			
		||||
	};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Define port identifier type. */
 | 
			
		||||
union hv_port_id {
 | 
			
		||||
	__u32 asu32;
 | 
			
		||||
	struct {
 | 
			
		||||
		__u32 id:24;
 | 
			
		||||
		__u32 reserved:8;
 | 
			
		||||
	} u;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Define synthetic interrupt controller message header. */
 | 
			
		||||
struct hv_message_header {
 | 
			
		||||
	__u32 message_type;
 | 
			
		||||
	__u8 payload_size;
 | 
			
		||||
	union hv_message_flags message_flags;
 | 
			
		||||
	__u8 reserved[2];
 | 
			
		||||
	union {
 | 
			
		||||
		__u64 sender;
 | 
			
		||||
		union hv_port_id port;
 | 
			
		||||
	};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Define synthetic interrupt controller message format. */
 | 
			
		||||
struct hv_message {
 | 
			
		||||
	struct hv_message_header header;
 | 
			
		||||
	union {
 | 
			
		||||
		__u64 payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT];
 | 
			
		||||
	} u;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Define the synthetic interrupt message page layout. */
 | 
			
		||||
struct hv_message_page {
 | 
			
		||||
	struct hv_message sint_message[HV_SYNIC_SINT_COUNT];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Define timer message payload structure. */
 | 
			
		||||
struct hv_timer_message_payload {
 | 
			
		||||
	__u32 timer_index;
 | 
			
		||||
	__u32 reserved;
 | 
			
		||||
	__u64 expiration_time;	/* When the timer expired */
 | 
			
		||||
	__u64 delivery_time;	/* When the message was delivered */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define HV_STIMER_ENABLE		(1ULL << 0)
 | 
			
		||||
#define HV_STIMER_PERIODIC		(1ULL << 1)
 | 
			
		||||
#define HV_STIMER_LAZY			(1ULL << 2)
 | 
			
		||||
#define HV_STIMER_AUTOENABLE		(1ULL << 3)
 | 
			
		||||
#define HV_STIMER_SINT(config)		(__u8)(((config) >> 16) & 0x0F)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/ioctl.h>
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/ioctls.h>
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/ipcbuf.h>
 | 
			
		||||
@@ -0,0 +1,29 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Include file for the interface to IST BIOS
 | 
			
		||||
 * Copyright 2002 Andy Grover <andrew.grover@intel.com>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify it
 | 
			
		||||
 * under the terms of the GNU General Public License as published by the
 | 
			
		||||
 * Free Software Foundation; either version 2, or (at your option) any
 | 
			
		||||
 * later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful, but
 | 
			
		||||
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * General Public License for more details.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef _ASM_X86_IST_H
 | 
			
		||||
#define _ASM_X86_IST_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
 | 
			
		||||
struct ist_info {
 | 
			
		||||
	__u32 signature;
 | 
			
		||||
	__u32 command;
 | 
			
		||||
	__u32 event;
 | 
			
		||||
	__u32 perf_level;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_IST_H */
 | 
			
		||||
@@ -0,0 +1,360 @@
 | 
			
		||||
#ifndef _ASM_X86_KVM_H
 | 
			
		||||
#define _ASM_X86_KVM_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * KVM x86 specific structures and definitions
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/ioctl.h>
 | 
			
		||||
 | 
			
		||||
#define DE_VECTOR 0
 | 
			
		||||
#define DB_VECTOR 1
 | 
			
		||||
#define BP_VECTOR 3
 | 
			
		||||
#define OF_VECTOR 4
 | 
			
		||||
#define BR_VECTOR 5
 | 
			
		||||
#define UD_VECTOR 6
 | 
			
		||||
#define NM_VECTOR 7
 | 
			
		||||
#define DF_VECTOR 8
 | 
			
		||||
#define TS_VECTOR 10
 | 
			
		||||
#define NP_VECTOR 11
 | 
			
		||||
#define SS_VECTOR 12
 | 
			
		||||
#define GP_VECTOR 13
 | 
			
		||||
#define PF_VECTOR 14
 | 
			
		||||
#define MF_VECTOR 16
 | 
			
		||||
#define AC_VECTOR 17
 | 
			
		||||
#define MC_VECTOR 18
 | 
			
		||||
#define XM_VECTOR 19
 | 
			
		||||
#define VE_VECTOR 20
 | 
			
		||||
 | 
			
		||||
/* Select x86 specific features in <linux/kvm.h> */
 | 
			
		||||
#define __KVM_HAVE_PIT
 | 
			
		||||
#define __KVM_HAVE_IOAPIC
 | 
			
		||||
#define __KVM_HAVE_IRQ_LINE
 | 
			
		||||
#define __KVM_HAVE_MSI
 | 
			
		||||
#define __KVM_HAVE_USER_NMI
 | 
			
		||||
#define __KVM_HAVE_GUEST_DEBUG
 | 
			
		||||
#define __KVM_HAVE_MSIX
 | 
			
		||||
#define __KVM_HAVE_MCE
 | 
			
		||||
#define __KVM_HAVE_PIT_STATE2
 | 
			
		||||
#define __KVM_HAVE_XEN_HVM
 | 
			
		||||
#define __KVM_HAVE_VCPU_EVENTS
 | 
			
		||||
#define __KVM_HAVE_DEBUGREGS
 | 
			
		||||
#define __KVM_HAVE_XSAVE
 | 
			
		||||
#define __KVM_HAVE_XCRS
 | 
			
		||||
#define __KVM_HAVE_READONLY_MEM
 | 
			
		||||
 | 
			
		||||
/* Architectural interrupt line count. */
 | 
			
		||||
#define KVM_NR_INTERRUPTS 256
 | 
			
		||||
 | 
			
		||||
struct kvm_memory_alias {
 | 
			
		||||
	__u32 slot;  /* this has a different namespace than memory slots */
 | 
			
		||||
	__u32 flags;
 | 
			
		||||
	__u64 guest_phys_addr;
 | 
			
		||||
	__u64 memory_size;
 | 
			
		||||
	__u64 target_phys_addr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET_IRQCHIP and KVM_SET_IRQCHIP */
 | 
			
		||||
struct kvm_pic_state {
 | 
			
		||||
	__u8 last_irr;	/* edge detection */
 | 
			
		||||
	__u8 irr;		/* interrupt request register */
 | 
			
		||||
	__u8 imr;		/* interrupt mask register */
 | 
			
		||||
	__u8 isr;		/* interrupt service register */
 | 
			
		||||
	__u8 priority_add;	/* highest irq priority */
 | 
			
		||||
	__u8 irq_base;
 | 
			
		||||
	__u8 read_reg_select;
 | 
			
		||||
	__u8 poll;
 | 
			
		||||
	__u8 special_mask;
 | 
			
		||||
	__u8 init_state;
 | 
			
		||||
	__u8 auto_eoi;
 | 
			
		||||
	__u8 rotate_on_auto_eoi;
 | 
			
		||||
	__u8 special_fully_nested_mode;
 | 
			
		||||
	__u8 init4;		/* true if 4 byte init */
 | 
			
		||||
	__u8 elcr;		/* PIIX edge/trigger selection */
 | 
			
		||||
	__u8 elcr_mask;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define KVM_IOAPIC_NUM_PINS  24
 | 
			
		||||
struct kvm_ioapic_state {
 | 
			
		||||
	__u64 base_address;
 | 
			
		||||
	__u32 ioregsel;
 | 
			
		||||
	__u32 id;
 | 
			
		||||
	__u32 irr;
 | 
			
		||||
	__u32 pad;
 | 
			
		||||
	union {
 | 
			
		||||
		__u64 bits;
 | 
			
		||||
		struct {
 | 
			
		||||
			__u8 vector;
 | 
			
		||||
			__u8 delivery_mode:3;
 | 
			
		||||
			__u8 dest_mode:1;
 | 
			
		||||
			__u8 delivery_status:1;
 | 
			
		||||
			__u8 polarity:1;
 | 
			
		||||
			__u8 remote_irr:1;
 | 
			
		||||
			__u8 trig_mode:1;
 | 
			
		||||
			__u8 mask:1;
 | 
			
		||||
			__u8 reserve:7;
 | 
			
		||||
			__u8 reserved[4];
 | 
			
		||||
			__u8 dest_id;
 | 
			
		||||
		} fields;
 | 
			
		||||
	} redirtbl[KVM_IOAPIC_NUM_PINS];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define KVM_IRQCHIP_PIC_MASTER   0
 | 
			
		||||
#define KVM_IRQCHIP_PIC_SLAVE    1
 | 
			
		||||
#define KVM_IRQCHIP_IOAPIC       2
 | 
			
		||||
#define KVM_NR_IRQCHIPS          3
 | 
			
		||||
 | 
			
		||||
#define KVM_RUN_X86_SMM		 (1 << 0)
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET_REGS and KVM_SET_REGS */
 | 
			
		||||
struct kvm_regs {
 | 
			
		||||
	/* out (KVM_GET_REGS) / in (KVM_SET_REGS) */
 | 
			
		||||
	__u64 rax, rbx, rcx, rdx;
 | 
			
		||||
	__u64 rsi, rdi, rsp, rbp;
 | 
			
		||||
	__u64 r8,  r9,  r10, r11;
 | 
			
		||||
	__u64 r12, r13, r14, r15;
 | 
			
		||||
	__u64 rip, rflags;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET_LAPIC and KVM_SET_LAPIC */
 | 
			
		||||
#define KVM_APIC_REG_SIZE 0x400
 | 
			
		||||
struct kvm_lapic_state {
 | 
			
		||||
	char regs[KVM_APIC_REG_SIZE];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_segment {
 | 
			
		||||
	__u64 base;
 | 
			
		||||
	__u32 limit;
 | 
			
		||||
	__u16 selector;
 | 
			
		||||
	__u8  type;
 | 
			
		||||
	__u8  present, dpl, db, s, l, g, avl;
 | 
			
		||||
	__u8  unusable;
 | 
			
		||||
	__u8  padding;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_dtable {
 | 
			
		||||
	__u64 base;
 | 
			
		||||
	__u16 limit;
 | 
			
		||||
	__u16 padding[3];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET_SREGS and KVM_SET_SREGS */
 | 
			
		||||
struct kvm_sregs {
 | 
			
		||||
	/* out (KVM_GET_SREGS) / in (KVM_SET_SREGS) */
 | 
			
		||||
	struct kvm_segment cs, ds, es, fs, gs, ss;
 | 
			
		||||
	struct kvm_segment tr, ldt;
 | 
			
		||||
	struct kvm_dtable gdt, idt;
 | 
			
		||||
	__u64 cr0, cr2, cr3, cr4, cr8;
 | 
			
		||||
	__u64 efer;
 | 
			
		||||
	__u64 apic_base;
 | 
			
		||||
	__u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET_FPU and KVM_SET_FPU */
 | 
			
		||||
struct kvm_fpu {
 | 
			
		||||
	__u8  fpr[8][16];
 | 
			
		||||
	__u16 fcw;
 | 
			
		||||
	__u16 fsw;
 | 
			
		||||
	__u8  ftwx;  /* in fxsave format */
 | 
			
		||||
	__u8  pad1;
 | 
			
		||||
	__u16 last_opcode;
 | 
			
		||||
	__u64 last_ip;
 | 
			
		||||
	__u64 last_dp;
 | 
			
		||||
	__u8  xmm[16][16];
 | 
			
		||||
	__u32 mxcsr;
 | 
			
		||||
	__u32 pad2;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_msr_entry {
 | 
			
		||||
	__u32 index;
 | 
			
		||||
	__u32 reserved;
 | 
			
		||||
	__u64 data;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET_MSRS and KVM_SET_MSRS */
 | 
			
		||||
struct kvm_msrs {
 | 
			
		||||
	__u32 nmsrs; /* number of msrs in entries */
 | 
			
		||||
	__u32 pad;
 | 
			
		||||
 | 
			
		||||
	struct kvm_msr_entry entries[0];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET_MSR_INDEX_LIST */
 | 
			
		||||
struct kvm_msr_list {
 | 
			
		||||
	__u32 nmsrs; /* number of msrs in entries */
 | 
			
		||||
	__u32 indices[0];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct kvm_cpuid_entry {
 | 
			
		||||
	__u32 function;
 | 
			
		||||
	__u32 eax;
 | 
			
		||||
	__u32 ebx;
 | 
			
		||||
	__u32 ecx;
 | 
			
		||||
	__u32 edx;
 | 
			
		||||
	__u32 padding;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for KVM_SET_CPUID */
 | 
			
		||||
struct kvm_cpuid {
 | 
			
		||||
	__u32 nent;
 | 
			
		||||
	__u32 padding;
 | 
			
		||||
	struct kvm_cpuid_entry entries[0];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_cpuid_entry2 {
 | 
			
		||||
	__u32 function;
 | 
			
		||||
	__u32 index;
 | 
			
		||||
	__u32 flags;
 | 
			
		||||
	__u32 eax;
 | 
			
		||||
	__u32 ebx;
 | 
			
		||||
	__u32 ecx;
 | 
			
		||||
	__u32 edx;
 | 
			
		||||
	__u32 padding[3];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define KVM_CPUID_FLAG_SIGNIFCANT_INDEX		BIT(0)
 | 
			
		||||
#define KVM_CPUID_FLAG_STATEFUL_FUNC		BIT(1)
 | 
			
		||||
#define KVM_CPUID_FLAG_STATE_READ_NEXT		BIT(2)
 | 
			
		||||
 | 
			
		||||
/* for KVM_SET_CPUID2 */
 | 
			
		||||
struct kvm_cpuid2 {
 | 
			
		||||
	__u32 nent;
 | 
			
		||||
	__u32 padding;
 | 
			
		||||
	struct kvm_cpuid_entry2 entries[0];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET_PIT and KVM_SET_PIT */
 | 
			
		||||
struct kvm_pit_channel_state {
 | 
			
		||||
	__u32 count; /* can be 65536 */
 | 
			
		||||
	__u16 latched_count;
 | 
			
		||||
	__u8 count_latched;
 | 
			
		||||
	__u8 status_latched;
 | 
			
		||||
	__u8 status;
 | 
			
		||||
	__u8 read_state;
 | 
			
		||||
	__u8 write_state;
 | 
			
		||||
	__u8 write_latch;
 | 
			
		||||
	__u8 rw_mode;
 | 
			
		||||
	__u8 mode;
 | 
			
		||||
	__u8 bcd;
 | 
			
		||||
	__u8 gate;
 | 
			
		||||
	__s64 count_load_time;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_debug_exit_arch {
 | 
			
		||||
	__u32 exception;
 | 
			
		||||
	__u32 pad;
 | 
			
		||||
	__u64 pc;
 | 
			
		||||
	__u64 dr6;
 | 
			
		||||
	__u64 dr7;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define KVM_GUESTDBG_USE_SW_BP		0x00010000
 | 
			
		||||
#define KVM_GUESTDBG_USE_HW_BP		0x00020000
 | 
			
		||||
#define KVM_GUESTDBG_INJECT_DB		0x00040000
 | 
			
		||||
#define KVM_GUESTDBG_INJECT_BP		0x00080000
 | 
			
		||||
 | 
			
		||||
/* for KVM_SET_GUEST_DEBUG */
 | 
			
		||||
struct kvm_guest_debug_arch {
 | 
			
		||||
	__u64 debugreg[8];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_pit_state {
 | 
			
		||||
	struct kvm_pit_channel_state channels[3];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define KVM_PIT_FLAGS_HPET_LEGACY  0x00000001
 | 
			
		||||
 | 
			
		||||
struct kvm_pit_state2 {
 | 
			
		||||
	struct kvm_pit_channel_state channels[3];
 | 
			
		||||
	__u32 flags;
 | 
			
		||||
	__u32 reserved[9];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_reinject_control {
 | 
			
		||||
	__u8 pit_reinject;
 | 
			
		||||
	__u8 reserved[31];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* When set in flags, include corresponding fields on KVM_SET_VCPU_EVENTS */
 | 
			
		||||
#define KVM_VCPUEVENT_VALID_NMI_PENDING	0x00000001
 | 
			
		||||
#define KVM_VCPUEVENT_VALID_SIPI_VECTOR	0x00000002
 | 
			
		||||
#define KVM_VCPUEVENT_VALID_SHADOW	0x00000004
 | 
			
		||||
#define KVM_VCPUEVENT_VALID_SMM		0x00000008
 | 
			
		||||
 | 
			
		||||
/* Interrupt shadow states */
 | 
			
		||||
#define KVM_X86_SHADOW_INT_MOV_SS	0x01
 | 
			
		||||
#define KVM_X86_SHADOW_INT_STI		0x02
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET/SET_VCPU_EVENTS */
 | 
			
		||||
struct kvm_vcpu_events {
 | 
			
		||||
	struct {
 | 
			
		||||
		__u8 injected;
 | 
			
		||||
		__u8 nr;
 | 
			
		||||
		__u8 has_error_code;
 | 
			
		||||
		__u8 pad;
 | 
			
		||||
		__u32 error_code;
 | 
			
		||||
	} exception;
 | 
			
		||||
	struct {
 | 
			
		||||
		__u8 injected;
 | 
			
		||||
		__u8 nr;
 | 
			
		||||
		__u8 soft;
 | 
			
		||||
		__u8 shadow;
 | 
			
		||||
	} interrupt;
 | 
			
		||||
	struct {
 | 
			
		||||
		__u8 injected;
 | 
			
		||||
		__u8 pending;
 | 
			
		||||
		__u8 masked;
 | 
			
		||||
		__u8 pad;
 | 
			
		||||
	} nmi;
 | 
			
		||||
	__u32 sipi_vector;
 | 
			
		||||
	__u32 flags;
 | 
			
		||||
	struct {
 | 
			
		||||
		__u8 smm;
 | 
			
		||||
		__u8 pending;
 | 
			
		||||
		__u8 smm_inside_nmi;
 | 
			
		||||
		__u8 latched_init;
 | 
			
		||||
	} smi;
 | 
			
		||||
	__u32 reserved[9];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET/SET_DEBUGREGS */
 | 
			
		||||
struct kvm_debugregs {
 | 
			
		||||
	__u64 db[4];
 | 
			
		||||
	__u64 dr6;
 | 
			
		||||
	__u64 dr7;
 | 
			
		||||
	__u64 flags;
 | 
			
		||||
	__u64 reserved[9];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for KVM_CAP_XSAVE */
 | 
			
		||||
struct kvm_xsave {
 | 
			
		||||
	__u32 region[1024];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define KVM_MAX_XCRS	16
 | 
			
		||||
 | 
			
		||||
struct kvm_xcr {
 | 
			
		||||
	__u32 xcr;
 | 
			
		||||
	__u32 reserved;
 | 
			
		||||
	__u64 value;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_xcrs {
 | 
			
		||||
	__u32 nr_xcrs;
 | 
			
		||||
	__u32 flags;
 | 
			
		||||
	struct kvm_xcr xcrs[KVM_MAX_XCRS];
 | 
			
		||||
	__u64 padding[16];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* definition of registers in kvm_run */
 | 
			
		||||
struct kvm_sync_regs {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define KVM_X86_QUIRK_LINT0_REENABLED	(1 << 0)
 | 
			
		||||
#define KVM_X86_QUIRK_CD_NW_CLEARED	(1 << 1)
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_KVM_H */
 | 
			
		||||
@@ -0,0 +1,101 @@
 | 
			
		||||
#ifndef _ASM_X86_KVM_PARA_H
 | 
			
		||||
#define _ASM_X86_KVM_PARA_H
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <asm/hyperv.h>
 | 
			
		||||
 | 
			
		||||
/* This CPUID returns the signature 'KVMKVMKVM' in ebx, ecx, and edx.  It
 | 
			
		||||
 * should be used to determine that a VM is running under KVM.
 | 
			
		||||
 */
 | 
			
		||||
#define KVM_CPUID_SIGNATURE	0x40000000
 | 
			
		||||
 | 
			
		||||
/* This CPUID returns a feature bitmap in eax.  Before enabling a particular
 | 
			
		||||
 * paravirtualization, the appropriate feature bit should be checked.
 | 
			
		||||
 */
 | 
			
		||||
#define KVM_CPUID_FEATURES	0x40000001
 | 
			
		||||
#define KVM_FEATURE_CLOCKSOURCE		0
 | 
			
		||||
#define KVM_FEATURE_NOP_IO_DELAY	1
 | 
			
		||||
#define KVM_FEATURE_MMU_OP		2
 | 
			
		||||
/* This indicates that the new set of kvmclock msrs
 | 
			
		||||
 * are available. The use of 0x11 and 0x12 is deprecated
 | 
			
		||||
 */
 | 
			
		||||
#define KVM_FEATURE_CLOCKSOURCE2        3
 | 
			
		||||
#define KVM_FEATURE_ASYNC_PF		4
 | 
			
		||||
#define KVM_FEATURE_STEAL_TIME		5
 | 
			
		||||
#define KVM_FEATURE_PV_EOI		6
 | 
			
		||||
#define KVM_FEATURE_PV_UNHALT		7
 | 
			
		||||
 | 
			
		||||
/* The last 8 bits are used to indicate how to interpret the flags field
 | 
			
		||||
 * in pvclock structure. If no bits are set, all flags are ignored.
 | 
			
		||||
 */
 | 
			
		||||
#define KVM_FEATURE_CLOCKSOURCE_STABLE_BIT	24
 | 
			
		||||
 | 
			
		||||
#define MSR_KVM_WALL_CLOCK  0x11
 | 
			
		||||
#define MSR_KVM_SYSTEM_TIME 0x12
 | 
			
		||||
 | 
			
		||||
#define KVM_MSR_ENABLED 1
 | 
			
		||||
/* Custom MSRs falls in the range 0x4b564d00-0x4b564dff */
 | 
			
		||||
#define MSR_KVM_WALL_CLOCK_NEW  0x4b564d00
 | 
			
		||||
#define MSR_KVM_SYSTEM_TIME_NEW 0x4b564d01
 | 
			
		||||
#define MSR_KVM_ASYNC_PF_EN 0x4b564d02
 | 
			
		||||
#define MSR_KVM_STEAL_TIME  0x4b564d03
 | 
			
		||||
#define MSR_KVM_PV_EOI_EN      0x4b564d04
 | 
			
		||||
 | 
			
		||||
struct kvm_steal_time {
 | 
			
		||||
	__u64 steal;
 | 
			
		||||
	__u32 version;
 | 
			
		||||
	__u32 flags;
 | 
			
		||||
	__u32 pad[12];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define KVM_STEAL_ALIGNMENT_BITS 5
 | 
			
		||||
#define KVM_STEAL_VALID_BITS ((-1ULL << (KVM_STEAL_ALIGNMENT_BITS + 1)))
 | 
			
		||||
#define KVM_STEAL_RESERVED_MASK (((1 << KVM_STEAL_ALIGNMENT_BITS) - 1 ) << 1)
 | 
			
		||||
 | 
			
		||||
#define KVM_MAX_MMU_OP_BATCH           32
 | 
			
		||||
 | 
			
		||||
#define KVM_ASYNC_PF_ENABLED			(1 << 0)
 | 
			
		||||
#define KVM_ASYNC_PF_SEND_ALWAYS		(1 << 1)
 | 
			
		||||
 | 
			
		||||
/* Operations for KVM_HC_MMU_OP */
 | 
			
		||||
#define KVM_MMU_OP_WRITE_PTE            1
 | 
			
		||||
#define KVM_MMU_OP_FLUSH_TLB	        2
 | 
			
		||||
#define KVM_MMU_OP_RELEASE_PT	        3
 | 
			
		||||
 | 
			
		||||
/* Payload for KVM_HC_MMU_OP */
 | 
			
		||||
struct kvm_mmu_op_header {
 | 
			
		||||
	__u32 op;
 | 
			
		||||
	__u32 pad;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_mmu_op_write_pte {
 | 
			
		||||
	struct kvm_mmu_op_header header;
 | 
			
		||||
	__u64 pte_phys;
 | 
			
		||||
	__u64 pte_val;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_mmu_op_flush_tlb {
 | 
			
		||||
	struct kvm_mmu_op_header header;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_mmu_op_release_pt {
 | 
			
		||||
	struct kvm_mmu_op_header header;
 | 
			
		||||
	__u64 pt_phys;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define KVM_PV_REASON_PAGE_NOT_PRESENT 1
 | 
			
		||||
#define KVM_PV_REASON_PAGE_READY 2
 | 
			
		||||
 | 
			
		||||
struct kvm_vcpu_pv_apf_data {
 | 
			
		||||
	__u32 reason;
 | 
			
		||||
	__u8 pad[60];
 | 
			
		||||
	__u32 enabled;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define KVM_PV_EOI_BIT 0
 | 
			
		||||
#define KVM_PV_EOI_MASK (0x1 << KVM_PV_EOI_BIT)
 | 
			
		||||
#define KVM_PV_EOI_ENABLED KVM_PV_EOI_MASK
 | 
			
		||||
#define KVM_PV_EOI_DISABLED 0x0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_KVM_PARA_H */
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
#ifndef _ASM_X86_KVM_PERF_H
 | 
			
		||||
#define _ASM_X86_KVM_PERF_H
 | 
			
		||||
 | 
			
		||||
#include <asm/svm.h>
 | 
			
		||||
#include <asm/vmx.h>
 | 
			
		||||
#include <asm/kvm.h>
 | 
			
		||||
 | 
			
		||||
#define DECODE_STR_LEN 20
 | 
			
		||||
 | 
			
		||||
#define VCPU_ID "vcpu_id"
 | 
			
		||||
 | 
			
		||||
#define KVM_ENTRY_TRACE "kvm:kvm_entry"
 | 
			
		||||
#define KVM_EXIT_TRACE "kvm:kvm_exit"
 | 
			
		||||
#define KVM_EXIT_REASON "exit_reason"
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_KVM_PERF_H */
 | 
			
		||||
@@ -0,0 +1,47 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ldt.h
 | 
			
		||||
 *
 | 
			
		||||
 * Definitions of structures used with the modify_ldt system call.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef _ASM_X86_LDT_H
 | 
			
		||||
#define _ASM_X86_LDT_H
 | 
			
		||||
 | 
			
		||||
/* Maximum number of LDT entries supported. */
 | 
			
		||||
#define LDT_ENTRIES	8192
 | 
			
		||||
/* The size of each LDT entry. */
 | 
			
		||||
#define LDT_ENTRY_SIZE	8
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
/*
 | 
			
		||||
 * Note on 64bit base and limit is ignored and you cannot set DS/ES/CS
 | 
			
		||||
 * not to the default values if you still want to do syscalls. This
 | 
			
		||||
 * call is more for 32bit mode therefore.
 | 
			
		||||
 */
 | 
			
		||||
struct user_desc {
 | 
			
		||||
	unsigned int  entry_number;
 | 
			
		||||
	unsigned int  base_addr;
 | 
			
		||||
	unsigned int  limit;
 | 
			
		||||
	unsigned int  seg_32bit:1;
 | 
			
		||||
	unsigned int  contents:2;
 | 
			
		||||
	unsigned int  read_exec_only:1;
 | 
			
		||||
	unsigned int  limit_in_pages:1;
 | 
			
		||||
	unsigned int  seg_not_present:1;
 | 
			
		||||
	unsigned int  useable:1;
 | 
			
		||||
#ifdef __x86_64__
 | 
			
		||||
	/*
 | 
			
		||||
	 * Because this bit is not present in 32-bit user code, user
 | 
			
		||||
	 * programs can pass uninitialized values here.  Therefore, in
 | 
			
		||||
	 * any context in which a user_desc comes from a 32-bit program,
 | 
			
		||||
	 * the kernel must act as though lm == 0, regardless of the
 | 
			
		||||
	 * actual value.
 | 
			
		||||
	 */
 | 
			
		||||
	unsigned int  lm:1;
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define MODIFY_LDT_CONTENTS_DATA	0
 | 
			
		||||
#define MODIFY_LDT_CONTENTS_STACK	1
 | 
			
		||||
#define MODIFY_LDT_CONTENTS_CODE	2
 | 
			
		||||
 | 
			
		||||
#endif /* !__ASSEMBLY__ */
 | 
			
		||||
#endif /* _ASM_X86_LDT_H */
 | 
			
		||||
@@ -0,0 +1,35 @@
 | 
			
		||||
#ifndef _ASM_X86_MCE_H
 | 
			
		||||
#define _ASM_X86_MCE_H
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/ioctl.h>
 | 
			
		||||
 | 
			
		||||
/* Fields are zero when not available */
 | 
			
		||||
struct mce {
 | 
			
		||||
	__u64 status;
 | 
			
		||||
	__u64 misc;
 | 
			
		||||
	__u64 addr;
 | 
			
		||||
	__u64 mcgstatus;
 | 
			
		||||
	__u64 ip;
 | 
			
		||||
	__u64 tsc;	/* cpu time stamp counter */
 | 
			
		||||
	__u64 time;	/* wall time_t when error was detected */
 | 
			
		||||
	__u8  cpuvendor;	/* cpu vendor as encoded in system.h */
 | 
			
		||||
	__u8  inject_flags;	/* software inject flags */
 | 
			
		||||
	__u8  severity;
 | 
			
		||||
	__u8  usable_addr;
 | 
			
		||||
	__u32 cpuid;	/* CPUID 1 EAX */
 | 
			
		||||
	__u8  cs;		/* code segment */
 | 
			
		||||
	__u8  bank;	/* machine check bank */
 | 
			
		||||
	__u8  cpu;	/* cpu number; obsolete; use extcpu now */
 | 
			
		||||
	__u8  finished;   /* entry is valid */
 | 
			
		||||
	__u32 extcpu;	/* linux cpu number that detected the error */
 | 
			
		||||
	__u32 socketid;	/* CPU socket ID */
 | 
			
		||||
	__u32 apicid;	/* CPU initial apic ID */
 | 
			
		||||
	__u64 mcgcap;	/* MCGCAP MSR: machine check capabilities of CPU */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define MCE_GET_RECORD_LEN   _IOR('M', 1, int)
 | 
			
		||||
#define MCE_GET_LOG_LEN      _IOR('M', 2, int)
 | 
			
		||||
#define MCE_GETCLEAR_FLAGS   _IOR('M', 3, int)
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_MCE_H */
 | 
			
		||||
@@ -0,0 +1,11 @@
 | 
			
		||||
#ifndef _ASM_X86_MMAN_H
 | 
			
		||||
#define _ASM_X86_MMAN_H
 | 
			
		||||
 | 
			
		||||
#define MAP_32BIT	0x40		/* only give out 32bit addresses */
 | 
			
		||||
 | 
			
		||||
#define MAP_HUGE_2MB    (21 << MAP_HUGE_SHIFT)
 | 
			
		||||
#define MAP_HUGE_1GB    (30 << MAP_HUGE_SHIFT)
 | 
			
		||||
 | 
			
		||||
#include <asm-generic/mman.h>
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_MMAN_H */
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/msgbuf.h>
 | 
			
		||||
@@ -0,0 +1,702 @@
 | 
			
		||||
#ifndef _ASM_X86_MSR_INDEX_H
 | 
			
		||||
#define _ASM_X86_MSR_INDEX_H
 | 
			
		||||
 | 
			
		||||
/* CPU model specific register (MSR) numbers */
 | 
			
		||||
 | 
			
		||||
/* x86-64 specific MSRs */
 | 
			
		||||
#define MSR_EFER		0xc0000080 /* extended feature register */
 | 
			
		||||
#define MSR_STAR		0xc0000081 /* legacy mode SYSCALL target */
 | 
			
		||||
#define MSR_LSTAR		0xc0000082 /* long mode SYSCALL target */
 | 
			
		||||
#define MSR_CSTAR		0xc0000083 /* compat mode SYSCALL target */
 | 
			
		||||
#define MSR_SYSCALL_MASK	0xc0000084 /* EFLAGS mask for syscall */
 | 
			
		||||
#define MSR_FS_BASE		0xc0000100 /* 64bit FS base */
 | 
			
		||||
#define MSR_GS_BASE		0xc0000101 /* 64bit GS base */
 | 
			
		||||
#define MSR_KERNEL_GS_BASE	0xc0000102 /* SwapGS GS shadow */
 | 
			
		||||
#define MSR_TSC_AUX		0xc0000103 /* Auxiliary TSC */
 | 
			
		||||
 | 
			
		||||
/* EFER bits: */
 | 
			
		||||
#define _EFER_SCE		0  /* SYSCALL/SYSRET */
 | 
			
		||||
#define _EFER_LME		8  /* Long mode enable */
 | 
			
		||||
#define _EFER_LMA		10 /* Long mode active (read-only) */
 | 
			
		||||
#define _EFER_NX		11 /* No execute enable */
 | 
			
		||||
#define _EFER_SVME		12 /* Enable virtualization */
 | 
			
		||||
#define _EFER_LMSLE		13 /* Long Mode Segment Limit Enable */
 | 
			
		||||
#define _EFER_FFXSR		14 /* Enable Fast FXSAVE/FXRSTOR */
 | 
			
		||||
 | 
			
		||||
#define EFER_SCE		(1<<_EFER_SCE)
 | 
			
		||||
#define EFER_LME		(1<<_EFER_LME)
 | 
			
		||||
#define EFER_LMA		(1<<_EFER_LMA)
 | 
			
		||||
#define EFER_NX			(1<<_EFER_NX)
 | 
			
		||||
#define EFER_SVME		(1<<_EFER_SVME)
 | 
			
		||||
#define EFER_LMSLE		(1<<_EFER_LMSLE)
 | 
			
		||||
#define EFER_FFXSR		(1<<_EFER_FFXSR)
 | 
			
		||||
 | 
			
		||||
/* Intel MSRs. Some also available on other CPUs */
 | 
			
		||||
#define MSR_IA32_PERFCTR0		0x000000c1
 | 
			
		||||
#define MSR_IA32_PERFCTR1		0x000000c2
 | 
			
		||||
#define MSR_FSB_FREQ			0x000000cd
 | 
			
		||||
#define MSR_PLATFORM_INFO		0x000000ce
 | 
			
		||||
 | 
			
		||||
#define MSR_NHM_SNB_PKG_CST_CFG_CTL	0x000000e2
 | 
			
		||||
#define NHM_C3_AUTO_DEMOTE		(1UL << 25)
 | 
			
		||||
#define NHM_C1_AUTO_DEMOTE		(1UL << 26)
 | 
			
		||||
#define ATM_LNC_C6_AUTO_DEMOTE		(1UL << 25)
 | 
			
		||||
#define SNB_C1_AUTO_UNDEMOTE		(1UL << 27)
 | 
			
		||||
#define SNB_C3_AUTO_UNDEMOTE		(1UL << 28)
 | 
			
		||||
 | 
			
		||||
#define MSR_MTRRcap			0x000000fe
 | 
			
		||||
#define MSR_IA32_BBL_CR_CTL		0x00000119
 | 
			
		||||
#define MSR_IA32_BBL_CR_CTL3		0x0000011e
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_SYSENTER_CS		0x00000174
 | 
			
		||||
#define MSR_IA32_SYSENTER_ESP		0x00000175
 | 
			
		||||
#define MSR_IA32_SYSENTER_EIP		0x00000176
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_MCG_CAP		0x00000179
 | 
			
		||||
#define MSR_IA32_MCG_STATUS		0x0000017a
 | 
			
		||||
#define MSR_IA32_MCG_CTL		0x0000017b
 | 
			
		||||
#define MSR_IA32_MCG_EXT_CTL		0x000004d0
 | 
			
		||||
 | 
			
		||||
#define MSR_OFFCORE_RSP_0		0x000001a6
 | 
			
		||||
#define MSR_OFFCORE_RSP_1		0x000001a7
 | 
			
		||||
#define MSR_NHM_TURBO_RATIO_LIMIT	0x000001ad
 | 
			
		||||
#define MSR_IVT_TURBO_RATIO_LIMIT	0x000001ae
 | 
			
		||||
#define MSR_TURBO_RATIO_LIMIT		0x000001ad
 | 
			
		||||
#define MSR_TURBO_RATIO_LIMIT1		0x000001ae
 | 
			
		||||
#define MSR_TURBO_RATIO_LIMIT2		0x000001af
 | 
			
		||||
 | 
			
		||||
#define MSR_LBR_SELECT			0x000001c8
 | 
			
		||||
#define MSR_LBR_TOS			0x000001c9
 | 
			
		||||
#define MSR_LBR_NHM_FROM		0x00000680
 | 
			
		||||
#define MSR_LBR_NHM_TO			0x000006c0
 | 
			
		||||
#define MSR_LBR_CORE_FROM		0x00000040
 | 
			
		||||
#define MSR_LBR_CORE_TO			0x00000060
 | 
			
		||||
 | 
			
		||||
#define MSR_LBR_INFO_0			0x00000dc0 /* ... 0xddf for _31 */
 | 
			
		||||
#define LBR_INFO_MISPRED		BIT_ULL(63)
 | 
			
		||||
#define LBR_INFO_IN_TX			BIT_ULL(62)
 | 
			
		||||
#define LBR_INFO_ABORT			BIT_ULL(61)
 | 
			
		||||
#define LBR_INFO_CYCLES			0xffff
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_PEBS_ENABLE		0x000003f1
 | 
			
		||||
#define MSR_IA32_DS_AREA		0x00000600
 | 
			
		||||
#define MSR_IA32_PERF_CAPABILITIES	0x00000345
 | 
			
		||||
#define MSR_PEBS_LD_LAT_THRESHOLD	0x000003f6
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_RTIT_CTL		0x00000570
 | 
			
		||||
#define RTIT_CTL_TRACEEN		BIT(0)
 | 
			
		||||
#define RTIT_CTL_CYCLEACC		BIT(1)
 | 
			
		||||
#define RTIT_CTL_OS			BIT(2)
 | 
			
		||||
#define RTIT_CTL_USR			BIT(3)
 | 
			
		||||
#define RTIT_CTL_CR3EN			BIT(7)
 | 
			
		||||
#define RTIT_CTL_TOPA			BIT(8)
 | 
			
		||||
#define RTIT_CTL_MTC_EN			BIT(9)
 | 
			
		||||
#define RTIT_CTL_TSC_EN			BIT(10)
 | 
			
		||||
#define RTIT_CTL_DISRETC		BIT(11)
 | 
			
		||||
#define RTIT_CTL_BRANCH_EN		BIT(13)
 | 
			
		||||
#define RTIT_CTL_MTC_RANGE_OFFSET	14
 | 
			
		||||
#define RTIT_CTL_MTC_RANGE		(0x0full << RTIT_CTL_MTC_RANGE_OFFSET)
 | 
			
		||||
#define RTIT_CTL_CYC_THRESH_OFFSET	19
 | 
			
		||||
#define RTIT_CTL_CYC_THRESH		(0x0full << RTIT_CTL_CYC_THRESH_OFFSET)
 | 
			
		||||
#define RTIT_CTL_PSB_FREQ_OFFSET	24
 | 
			
		||||
#define RTIT_CTL_PSB_FREQ      		(0x0full << RTIT_CTL_PSB_FREQ_OFFSET)
 | 
			
		||||
#define MSR_IA32_RTIT_STATUS		0x00000571
 | 
			
		||||
#define RTIT_STATUS_CONTEXTEN		BIT(1)
 | 
			
		||||
#define RTIT_STATUS_TRIGGEREN		BIT(2)
 | 
			
		||||
#define RTIT_STATUS_ERROR		BIT(4)
 | 
			
		||||
#define RTIT_STATUS_STOPPED		BIT(5)
 | 
			
		||||
#define MSR_IA32_RTIT_CR3_MATCH		0x00000572
 | 
			
		||||
#define MSR_IA32_RTIT_OUTPUT_BASE	0x00000560
 | 
			
		||||
#define MSR_IA32_RTIT_OUTPUT_MASK	0x00000561
 | 
			
		||||
 | 
			
		||||
#define MSR_MTRRfix64K_00000		0x00000250
 | 
			
		||||
#define MSR_MTRRfix16K_80000		0x00000258
 | 
			
		||||
#define MSR_MTRRfix16K_A0000		0x00000259
 | 
			
		||||
#define MSR_MTRRfix4K_C0000		0x00000268
 | 
			
		||||
#define MSR_MTRRfix4K_C8000		0x00000269
 | 
			
		||||
#define MSR_MTRRfix4K_D0000		0x0000026a
 | 
			
		||||
#define MSR_MTRRfix4K_D8000		0x0000026b
 | 
			
		||||
#define MSR_MTRRfix4K_E0000		0x0000026c
 | 
			
		||||
#define MSR_MTRRfix4K_E8000		0x0000026d
 | 
			
		||||
#define MSR_MTRRfix4K_F0000		0x0000026e
 | 
			
		||||
#define MSR_MTRRfix4K_F8000		0x0000026f
 | 
			
		||||
#define MSR_MTRRdefType			0x000002ff
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_CR_PAT			0x00000277
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_DEBUGCTLMSR		0x000001d9
 | 
			
		||||
#define MSR_IA32_LASTBRANCHFROMIP	0x000001db
 | 
			
		||||
#define MSR_IA32_LASTBRANCHTOIP		0x000001dc
 | 
			
		||||
#define MSR_IA32_LASTINTFROMIP		0x000001dd
 | 
			
		||||
#define MSR_IA32_LASTINTTOIP		0x000001de
 | 
			
		||||
 | 
			
		||||
/* DEBUGCTLMSR bits (others vary by model): */
 | 
			
		||||
#define DEBUGCTLMSR_LBR			(1UL <<  0) /* last branch recording */
 | 
			
		||||
#define DEBUGCTLMSR_BTF			(1UL <<  1) /* single-step on branches */
 | 
			
		||||
#define DEBUGCTLMSR_TR			(1UL <<  6)
 | 
			
		||||
#define DEBUGCTLMSR_BTS			(1UL <<  7)
 | 
			
		||||
#define DEBUGCTLMSR_BTINT		(1UL <<  8)
 | 
			
		||||
#define DEBUGCTLMSR_BTS_OFF_OS		(1UL <<  9)
 | 
			
		||||
#define DEBUGCTLMSR_BTS_OFF_USR		(1UL << 10)
 | 
			
		||||
#define DEBUGCTLMSR_FREEZE_LBRS_ON_PMI	(1UL << 11)
 | 
			
		||||
 | 
			
		||||
#define MSR_PEBS_FRONTEND		0x000003f7
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_POWER_CTL		0x000001fc
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_MC0_CTL		0x00000400
 | 
			
		||||
#define MSR_IA32_MC0_STATUS		0x00000401
 | 
			
		||||
#define MSR_IA32_MC0_ADDR		0x00000402
 | 
			
		||||
#define MSR_IA32_MC0_MISC		0x00000403
 | 
			
		||||
 | 
			
		||||
/* C-state Residency Counters */
 | 
			
		||||
#define MSR_PKG_C3_RESIDENCY		0x000003f8
 | 
			
		||||
#define MSR_PKG_C6_RESIDENCY		0x000003f9
 | 
			
		||||
#define MSR_PKG_C7_RESIDENCY		0x000003fa
 | 
			
		||||
#define MSR_CORE_C3_RESIDENCY		0x000003fc
 | 
			
		||||
#define MSR_CORE_C6_RESIDENCY		0x000003fd
 | 
			
		||||
#define MSR_CORE_C7_RESIDENCY		0x000003fe
 | 
			
		||||
#define MSR_KNL_CORE_C6_RESIDENCY	0x000003ff
 | 
			
		||||
#define MSR_PKG_C2_RESIDENCY		0x0000060d
 | 
			
		||||
#define MSR_PKG_C8_RESIDENCY		0x00000630
 | 
			
		||||
#define MSR_PKG_C9_RESIDENCY		0x00000631
 | 
			
		||||
#define MSR_PKG_C10_RESIDENCY		0x00000632
 | 
			
		||||
 | 
			
		||||
/* Interrupt Response Limit */
 | 
			
		||||
#define MSR_PKGC3_IRTL			0x0000060a
 | 
			
		||||
#define MSR_PKGC6_IRTL			0x0000060b
 | 
			
		||||
#define MSR_PKGC7_IRTL			0x0000060c
 | 
			
		||||
#define MSR_PKGC8_IRTL			0x00000633
 | 
			
		||||
#define MSR_PKGC9_IRTL			0x00000634
 | 
			
		||||
#define MSR_PKGC10_IRTL			0x00000635
 | 
			
		||||
 | 
			
		||||
/* Run Time Average Power Limiting (RAPL) Interface */
 | 
			
		||||
 | 
			
		||||
#define MSR_RAPL_POWER_UNIT		0x00000606
 | 
			
		||||
 | 
			
		||||
#define MSR_PKG_POWER_LIMIT		0x00000610
 | 
			
		||||
#define MSR_PKG_ENERGY_STATUS		0x00000611
 | 
			
		||||
#define MSR_PKG_PERF_STATUS		0x00000613
 | 
			
		||||
#define MSR_PKG_POWER_INFO		0x00000614
 | 
			
		||||
 | 
			
		||||
#define MSR_DRAM_POWER_LIMIT		0x00000618
 | 
			
		||||
#define MSR_DRAM_ENERGY_STATUS		0x00000619
 | 
			
		||||
#define MSR_DRAM_PERF_STATUS		0x0000061b
 | 
			
		||||
#define MSR_DRAM_POWER_INFO		0x0000061c
 | 
			
		||||
 | 
			
		||||
#define MSR_PP0_POWER_LIMIT		0x00000638
 | 
			
		||||
#define MSR_PP0_ENERGY_STATUS		0x00000639
 | 
			
		||||
#define MSR_PP0_POLICY			0x0000063a
 | 
			
		||||
#define MSR_PP0_PERF_STATUS		0x0000063b
 | 
			
		||||
 | 
			
		||||
#define MSR_PP1_POWER_LIMIT		0x00000640
 | 
			
		||||
#define MSR_PP1_ENERGY_STATUS		0x00000641
 | 
			
		||||
#define MSR_PP1_POLICY			0x00000642
 | 
			
		||||
 | 
			
		||||
#define MSR_CONFIG_TDP_NOMINAL		0x00000648
 | 
			
		||||
#define MSR_CONFIG_TDP_LEVEL_1		0x00000649
 | 
			
		||||
#define MSR_CONFIG_TDP_LEVEL_2		0x0000064A
 | 
			
		||||
#define MSR_CONFIG_TDP_CONTROL		0x0000064B
 | 
			
		||||
#define MSR_TURBO_ACTIVATION_RATIO	0x0000064C
 | 
			
		||||
 | 
			
		||||
#define MSR_PKG_WEIGHTED_CORE_C0_RES	0x00000658
 | 
			
		||||
#define MSR_PKG_ANY_CORE_C0_RES		0x00000659
 | 
			
		||||
#define MSR_PKG_ANY_GFXE_C0_RES		0x0000065A
 | 
			
		||||
#define MSR_PKG_BOTH_CORE_GFXE_C0_RES	0x0000065B
 | 
			
		||||
 | 
			
		||||
#define MSR_CORE_C1_RES			0x00000660
 | 
			
		||||
 | 
			
		||||
#define MSR_CC6_DEMOTION_POLICY_CONFIG	0x00000668
 | 
			
		||||
#define MSR_MC6_DEMOTION_POLICY_CONFIG	0x00000669
 | 
			
		||||
 | 
			
		||||
#define MSR_CORE_PERF_LIMIT_REASONS	0x00000690
 | 
			
		||||
#define MSR_GFX_PERF_LIMIT_REASONS	0x000006B0
 | 
			
		||||
#define MSR_RING_PERF_LIMIT_REASONS	0x000006B1
 | 
			
		||||
 | 
			
		||||
/* Config TDP MSRs */
 | 
			
		||||
#define MSR_CONFIG_TDP_NOMINAL		0x00000648
 | 
			
		||||
#define MSR_CONFIG_TDP_LEVEL1		0x00000649
 | 
			
		||||
#define MSR_CONFIG_TDP_LEVEL2		0x0000064A
 | 
			
		||||
#define MSR_CONFIG_TDP_CONTROL		0x0000064B
 | 
			
		||||
#define MSR_TURBO_ACTIVATION_RATIO	0x0000064C
 | 
			
		||||
 | 
			
		||||
/* Hardware P state interface */
 | 
			
		||||
#define MSR_PPERF			0x0000064e
 | 
			
		||||
#define MSR_PERF_LIMIT_REASONS		0x0000064f
 | 
			
		||||
#define MSR_PM_ENABLE			0x00000770
 | 
			
		||||
#define MSR_HWP_CAPABILITIES		0x00000771
 | 
			
		||||
#define MSR_HWP_REQUEST_PKG		0x00000772
 | 
			
		||||
#define MSR_HWP_INTERRUPT		0x00000773
 | 
			
		||||
#define MSR_HWP_REQUEST 		0x00000774
 | 
			
		||||
#define MSR_HWP_STATUS			0x00000777
 | 
			
		||||
 | 
			
		||||
/* CPUID.6.EAX */
 | 
			
		||||
#define HWP_BASE_BIT			(1<<7)
 | 
			
		||||
#define HWP_NOTIFICATIONS_BIT		(1<<8)
 | 
			
		||||
#define HWP_ACTIVITY_WINDOW_BIT		(1<<9)
 | 
			
		||||
#define HWP_ENERGY_PERF_PREFERENCE_BIT	(1<<10)
 | 
			
		||||
#define HWP_PACKAGE_LEVEL_REQUEST_BIT	(1<<11)
 | 
			
		||||
 | 
			
		||||
/* IA32_HWP_CAPABILITIES */
 | 
			
		||||
#define HWP_HIGHEST_PERF(x)		(x & 0xff)
 | 
			
		||||
#define HWP_GUARANTEED_PERF(x)		((x & (0xff << 8)) >>8)
 | 
			
		||||
#define HWP_MOSTEFFICIENT_PERF(x)	((x & (0xff << 16)) >>16)
 | 
			
		||||
#define HWP_LOWEST_PERF(x)		((x & (0xff << 24)) >>24)
 | 
			
		||||
 | 
			
		||||
/* IA32_HWP_REQUEST */
 | 
			
		||||
#define HWP_MIN_PERF(x) 		(x & 0xff)
 | 
			
		||||
#define HWP_MAX_PERF(x) 		((x & 0xff) << 8)
 | 
			
		||||
#define HWP_DESIRED_PERF(x)		((x & 0xff) << 16)
 | 
			
		||||
#define HWP_ENERGY_PERF_PREFERENCE(x)	((x & 0xff) << 24)
 | 
			
		||||
#define HWP_ACTIVITY_WINDOW(x)		((x & 0xff3) << 32)
 | 
			
		||||
#define HWP_PACKAGE_CONTROL(x)		((x & 0x1) << 42)
 | 
			
		||||
 | 
			
		||||
/* IA32_HWP_STATUS */
 | 
			
		||||
#define HWP_GUARANTEED_CHANGE(x)	(x & 0x1)
 | 
			
		||||
#define HWP_EXCURSION_TO_MINIMUM(x)	(x & 0x4)
 | 
			
		||||
 | 
			
		||||
/* IA32_HWP_INTERRUPT */
 | 
			
		||||
#define HWP_CHANGE_TO_GUARANTEED_INT(x)	(x & 0x1)
 | 
			
		||||
#define HWP_EXCURSION_TO_MINIMUM_INT(x)	(x & 0x2)
 | 
			
		||||
 | 
			
		||||
#define MSR_AMD64_MC0_MASK		0xc0010044
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_MCx_CTL(x)		(MSR_IA32_MC0_CTL + 4*(x))
 | 
			
		||||
#define MSR_IA32_MCx_STATUS(x)		(MSR_IA32_MC0_STATUS + 4*(x))
 | 
			
		||||
#define MSR_IA32_MCx_ADDR(x)		(MSR_IA32_MC0_ADDR + 4*(x))
 | 
			
		||||
#define MSR_IA32_MCx_MISC(x)		(MSR_IA32_MC0_MISC + 4*(x))
 | 
			
		||||
 | 
			
		||||
#define MSR_AMD64_MCx_MASK(x)		(MSR_AMD64_MC0_MASK + (x))
 | 
			
		||||
 | 
			
		||||
/* These are consecutive and not in the normal 4er MCE bank block */
 | 
			
		||||
#define MSR_IA32_MC0_CTL2		0x00000280
 | 
			
		||||
#define MSR_IA32_MCx_CTL2(x)		(MSR_IA32_MC0_CTL2 + (x))
 | 
			
		||||
 | 
			
		||||
#define MSR_P6_PERFCTR0			0x000000c1
 | 
			
		||||
#define MSR_P6_PERFCTR1			0x000000c2
 | 
			
		||||
#define MSR_P6_EVNTSEL0			0x00000186
 | 
			
		||||
#define MSR_P6_EVNTSEL1			0x00000187
 | 
			
		||||
 | 
			
		||||
#define MSR_KNC_PERFCTR0               0x00000020
 | 
			
		||||
#define MSR_KNC_PERFCTR1               0x00000021
 | 
			
		||||
#define MSR_KNC_EVNTSEL0               0x00000028
 | 
			
		||||
#define MSR_KNC_EVNTSEL1               0x00000029
 | 
			
		||||
 | 
			
		||||
/* Alternative perfctr range with full access. */
 | 
			
		||||
#define MSR_IA32_PMC0			0x000004c1
 | 
			
		||||
 | 
			
		||||
/* AMD64 MSRs. Not complete. See the architecture manual for a more
 | 
			
		||||
   complete list. */
 | 
			
		||||
 | 
			
		||||
#define MSR_AMD64_PATCH_LEVEL		0x0000008b
 | 
			
		||||
#define MSR_AMD64_TSC_RATIO		0xc0000104
 | 
			
		||||
#define MSR_AMD64_NB_CFG		0xc001001f
 | 
			
		||||
#define MSR_AMD64_PATCH_LOADER		0xc0010020
 | 
			
		||||
#define MSR_AMD64_OSVW_ID_LENGTH	0xc0010140
 | 
			
		||||
#define MSR_AMD64_OSVW_STATUS		0xc0010141
 | 
			
		||||
#define MSR_AMD64_LS_CFG		0xc0011020
 | 
			
		||||
#define MSR_AMD64_DC_CFG		0xc0011022
 | 
			
		||||
#define MSR_AMD64_BU_CFG2		0xc001102a
 | 
			
		||||
#define MSR_AMD64_IBSFETCHCTL		0xc0011030
 | 
			
		||||
#define MSR_AMD64_IBSFETCHLINAD		0xc0011031
 | 
			
		||||
#define MSR_AMD64_IBSFETCHPHYSAD	0xc0011032
 | 
			
		||||
#define MSR_AMD64_IBSFETCH_REG_COUNT	3
 | 
			
		||||
#define MSR_AMD64_IBSFETCH_REG_MASK	((1UL<<MSR_AMD64_IBSFETCH_REG_COUNT)-1)
 | 
			
		||||
#define MSR_AMD64_IBSOPCTL		0xc0011033
 | 
			
		||||
#define MSR_AMD64_IBSOPRIP		0xc0011034
 | 
			
		||||
#define MSR_AMD64_IBSOPDATA		0xc0011035
 | 
			
		||||
#define MSR_AMD64_IBSOPDATA2		0xc0011036
 | 
			
		||||
#define MSR_AMD64_IBSOPDATA3		0xc0011037
 | 
			
		||||
#define MSR_AMD64_IBSDCLINAD		0xc0011038
 | 
			
		||||
#define MSR_AMD64_IBSDCPHYSAD		0xc0011039
 | 
			
		||||
#define MSR_AMD64_IBSOP_REG_COUNT	7
 | 
			
		||||
#define MSR_AMD64_IBSOP_REG_MASK	((1UL<<MSR_AMD64_IBSOP_REG_COUNT)-1)
 | 
			
		||||
#define MSR_AMD64_IBSCTL		0xc001103a
 | 
			
		||||
#define MSR_AMD64_IBSBRTARGET		0xc001103b
 | 
			
		||||
#define MSR_AMD64_IBSOPDATA4		0xc001103d
 | 
			
		||||
#define MSR_AMD64_IBS_REG_COUNT_MAX	8 /* includes MSR_AMD64_IBSBRTARGET */
 | 
			
		||||
 | 
			
		||||
/* Fam 16h MSRs */
 | 
			
		||||
#define MSR_F16H_L2I_PERF_CTL		0xc0010230
 | 
			
		||||
#define MSR_F16H_L2I_PERF_CTR		0xc0010231
 | 
			
		||||
#define MSR_F16H_DR1_ADDR_MASK		0xc0011019
 | 
			
		||||
#define MSR_F16H_DR2_ADDR_MASK		0xc001101a
 | 
			
		||||
#define MSR_F16H_DR3_ADDR_MASK		0xc001101b
 | 
			
		||||
#define MSR_F16H_DR0_ADDR_MASK		0xc0011027
 | 
			
		||||
 | 
			
		||||
/* Fam 15h MSRs */
 | 
			
		||||
#define MSR_F15H_PERF_CTL		0xc0010200
 | 
			
		||||
#define MSR_F15H_PERF_CTR		0xc0010201
 | 
			
		||||
#define MSR_F15H_NB_PERF_CTL		0xc0010240
 | 
			
		||||
#define MSR_F15H_NB_PERF_CTR		0xc0010241
 | 
			
		||||
 | 
			
		||||
/* Fam 10h MSRs */
 | 
			
		||||
#define MSR_FAM10H_MMIO_CONF_BASE	0xc0010058
 | 
			
		||||
#define FAM10H_MMIO_CONF_ENABLE		(1<<0)
 | 
			
		||||
#define FAM10H_MMIO_CONF_BUSRANGE_MASK	0xf
 | 
			
		||||
#define FAM10H_MMIO_CONF_BUSRANGE_SHIFT 2
 | 
			
		||||
#define FAM10H_MMIO_CONF_BASE_MASK	0xfffffffULL
 | 
			
		||||
#define FAM10H_MMIO_CONF_BASE_SHIFT	20
 | 
			
		||||
#define MSR_FAM10H_NODE_ID		0xc001100c
 | 
			
		||||
 | 
			
		||||
/* K8 MSRs */
 | 
			
		||||
#define MSR_K8_TOP_MEM1			0xc001001a
 | 
			
		||||
#define MSR_K8_TOP_MEM2			0xc001001d
 | 
			
		||||
#define MSR_K8_SYSCFG			0xc0010010
 | 
			
		||||
#define MSR_K8_INT_PENDING_MSG		0xc0010055
 | 
			
		||||
/* C1E active bits in int pending message */
 | 
			
		||||
#define K8_INTP_C1E_ACTIVE_MASK		0x18000000
 | 
			
		||||
#define MSR_K8_TSEG_ADDR		0xc0010112
 | 
			
		||||
#define MSR_K8_TSEG_MASK		0xc0010113
 | 
			
		||||
#define K8_MTRRFIXRANGE_DRAM_ENABLE	0x00040000 /* MtrrFixDramEn bit    */
 | 
			
		||||
#define K8_MTRRFIXRANGE_DRAM_MODIFY	0x00080000 /* MtrrFixDramModEn bit */
 | 
			
		||||
#define K8_MTRR_RDMEM_WRMEM_MASK	0x18181818 /* Mask: RdMem|WrMem    */
 | 
			
		||||
 | 
			
		||||
/* K7 MSRs */
 | 
			
		||||
#define MSR_K7_EVNTSEL0			0xc0010000
 | 
			
		||||
#define MSR_K7_PERFCTR0			0xc0010004
 | 
			
		||||
#define MSR_K7_EVNTSEL1			0xc0010001
 | 
			
		||||
#define MSR_K7_PERFCTR1			0xc0010005
 | 
			
		||||
#define MSR_K7_EVNTSEL2			0xc0010002
 | 
			
		||||
#define MSR_K7_PERFCTR2			0xc0010006
 | 
			
		||||
#define MSR_K7_EVNTSEL3			0xc0010003
 | 
			
		||||
#define MSR_K7_PERFCTR3			0xc0010007
 | 
			
		||||
#define MSR_K7_CLK_CTL			0xc001001b
 | 
			
		||||
#define MSR_K7_HWCR			0xc0010015
 | 
			
		||||
#define MSR_K7_FID_VID_CTL		0xc0010041
 | 
			
		||||
#define MSR_K7_FID_VID_STATUS		0xc0010042
 | 
			
		||||
 | 
			
		||||
/* K6 MSRs */
 | 
			
		||||
#define MSR_K6_WHCR			0xc0000082
 | 
			
		||||
#define MSR_K6_UWCCR			0xc0000085
 | 
			
		||||
#define MSR_K6_EPMR			0xc0000086
 | 
			
		||||
#define MSR_K6_PSOR			0xc0000087
 | 
			
		||||
#define MSR_K6_PFIR			0xc0000088
 | 
			
		||||
 | 
			
		||||
/* Centaur-Hauls/IDT defined MSRs. */
 | 
			
		||||
#define MSR_IDT_FCR1			0x00000107
 | 
			
		||||
#define MSR_IDT_FCR2			0x00000108
 | 
			
		||||
#define MSR_IDT_FCR3			0x00000109
 | 
			
		||||
#define MSR_IDT_FCR4			0x0000010a
 | 
			
		||||
 | 
			
		||||
#define MSR_IDT_MCR0			0x00000110
 | 
			
		||||
#define MSR_IDT_MCR1			0x00000111
 | 
			
		||||
#define MSR_IDT_MCR2			0x00000112
 | 
			
		||||
#define MSR_IDT_MCR3			0x00000113
 | 
			
		||||
#define MSR_IDT_MCR4			0x00000114
 | 
			
		||||
#define MSR_IDT_MCR5			0x00000115
 | 
			
		||||
#define MSR_IDT_MCR6			0x00000116
 | 
			
		||||
#define MSR_IDT_MCR7			0x00000117
 | 
			
		||||
#define MSR_IDT_MCR_CTRL		0x00000120
 | 
			
		||||
 | 
			
		||||
/* VIA Cyrix defined MSRs*/
 | 
			
		||||
#define MSR_VIA_FCR			0x00001107
 | 
			
		||||
#define MSR_VIA_LONGHAUL		0x0000110a
 | 
			
		||||
#define MSR_VIA_RNG			0x0000110b
 | 
			
		||||
#define MSR_VIA_BCR2			0x00001147
 | 
			
		||||
 | 
			
		||||
/* Transmeta defined MSRs */
 | 
			
		||||
#define MSR_TMTA_LONGRUN_CTRL		0x80868010
 | 
			
		||||
#define MSR_TMTA_LONGRUN_FLAGS		0x80868011
 | 
			
		||||
#define MSR_TMTA_LRTI_READOUT		0x80868018
 | 
			
		||||
#define MSR_TMTA_LRTI_VOLT_MHZ		0x8086801a
 | 
			
		||||
 | 
			
		||||
/* Intel defined MSRs. */
 | 
			
		||||
#define MSR_IA32_P5_MC_ADDR		0x00000000
 | 
			
		||||
#define MSR_IA32_P5_MC_TYPE		0x00000001
 | 
			
		||||
#define MSR_IA32_TSC			0x00000010
 | 
			
		||||
#define MSR_IA32_PLATFORM_ID		0x00000017
 | 
			
		||||
#define MSR_IA32_EBL_CR_POWERON		0x0000002a
 | 
			
		||||
#define MSR_EBC_FREQUENCY_ID		0x0000002c
 | 
			
		||||
#define MSR_SMI_COUNT			0x00000034
 | 
			
		||||
#define MSR_IA32_FEATURE_CONTROL        0x0000003a
 | 
			
		||||
#define MSR_IA32_TSC_ADJUST             0x0000003b
 | 
			
		||||
#define MSR_IA32_BNDCFGS		0x00000d90
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_XSS			0x00000da0
 | 
			
		||||
 | 
			
		||||
#define FEATURE_CONTROL_LOCKED				(1<<0)
 | 
			
		||||
#define FEATURE_CONTROL_VMXON_ENABLED_INSIDE_SMX	(1<<1)
 | 
			
		||||
#define FEATURE_CONTROL_VMXON_ENABLED_OUTSIDE_SMX	(1<<2)
 | 
			
		||||
#define FEATURE_CONTROL_LMCE				(1<<20)
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_APICBASE		0x0000001b
 | 
			
		||||
#define MSR_IA32_APICBASE_BSP		(1<<8)
 | 
			
		||||
#define MSR_IA32_APICBASE_ENABLE	(1<<11)
 | 
			
		||||
#define MSR_IA32_APICBASE_BASE		(0xfffff<<12)
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_TSCDEADLINE		0x000006e0
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_UCODE_WRITE		0x00000079
 | 
			
		||||
#define MSR_IA32_UCODE_REV		0x0000008b
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_SMM_MONITOR_CTL	0x0000009b
 | 
			
		||||
#define MSR_IA32_SMBASE			0x0000009e
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_PERF_STATUS		0x00000198
 | 
			
		||||
#define MSR_IA32_PERF_CTL		0x00000199
 | 
			
		||||
#define INTEL_PERF_CTL_MASK		0xffff
 | 
			
		||||
#define MSR_AMD_PSTATE_DEF_BASE		0xc0010064
 | 
			
		||||
#define MSR_AMD_PERF_STATUS		0xc0010063
 | 
			
		||||
#define MSR_AMD_PERF_CTL		0xc0010062
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_MPERF			0x000000e7
 | 
			
		||||
#define MSR_IA32_APERF			0x000000e8
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_THERM_CONTROL		0x0000019a
 | 
			
		||||
#define MSR_IA32_THERM_INTERRUPT	0x0000019b
 | 
			
		||||
 | 
			
		||||
#define THERM_INT_HIGH_ENABLE		(1 << 0)
 | 
			
		||||
#define THERM_INT_LOW_ENABLE		(1 << 1)
 | 
			
		||||
#define THERM_INT_PLN_ENABLE		(1 << 24)
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_THERM_STATUS		0x0000019c
 | 
			
		||||
 | 
			
		||||
#define THERM_STATUS_PROCHOT		(1 << 0)
 | 
			
		||||
#define THERM_STATUS_POWER_LIMIT	(1 << 10)
 | 
			
		||||
 | 
			
		||||
#define MSR_THERM2_CTL			0x0000019d
 | 
			
		||||
 | 
			
		||||
#define MSR_THERM2_CTL_TM_SELECT	(1ULL << 16)
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE		0x000001a0
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_TEMPERATURE_TARGET	0x000001a2
 | 
			
		||||
 | 
			
		||||
#define MSR_MISC_PWR_MGMT		0x000001aa
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_ENERGY_PERF_BIAS	0x000001b0
 | 
			
		||||
#define ENERGY_PERF_BIAS_PERFORMANCE	0
 | 
			
		||||
#define ENERGY_PERF_BIAS_NORMAL		6
 | 
			
		||||
#define ENERGY_PERF_BIAS_POWERSAVE	15
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_PACKAGE_THERM_STATUS		0x000001b1
 | 
			
		||||
 | 
			
		||||
#define PACKAGE_THERM_STATUS_PROCHOT		(1 << 0)
 | 
			
		||||
#define PACKAGE_THERM_STATUS_POWER_LIMIT	(1 << 10)
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_PACKAGE_THERM_INTERRUPT	0x000001b2
 | 
			
		||||
 | 
			
		||||
#define PACKAGE_THERM_INT_HIGH_ENABLE		(1 << 0)
 | 
			
		||||
#define PACKAGE_THERM_INT_LOW_ENABLE		(1 << 1)
 | 
			
		||||
#define PACKAGE_THERM_INT_PLN_ENABLE		(1 << 24)
 | 
			
		||||
 | 
			
		||||
/* Thermal Thresholds Support */
 | 
			
		||||
#define THERM_INT_THRESHOLD0_ENABLE    (1 << 15)
 | 
			
		||||
#define THERM_SHIFT_THRESHOLD0        8
 | 
			
		||||
#define THERM_MASK_THRESHOLD0          (0x7f << THERM_SHIFT_THRESHOLD0)
 | 
			
		||||
#define THERM_INT_THRESHOLD1_ENABLE    (1 << 23)
 | 
			
		||||
#define THERM_SHIFT_THRESHOLD1        16
 | 
			
		||||
#define THERM_MASK_THRESHOLD1          (0x7f << THERM_SHIFT_THRESHOLD1)
 | 
			
		||||
#define THERM_STATUS_THRESHOLD0        (1 << 6)
 | 
			
		||||
#define THERM_LOG_THRESHOLD0           (1 << 7)
 | 
			
		||||
#define THERM_STATUS_THRESHOLD1        (1 << 8)
 | 
			
		||||
#define THERM_LOG_THRESHOLD1           (1 << 9)
 | 
			
		||||
 | 
			
		||||
/* MISC_ENABLE bits: architectural */
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_FAST_STRING_BIT		0
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_FAST_STRING		(1ULL << MSR_IA32_MISC_ENABLE_FAST_STRING_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_TCC_BIT			1
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_TCC			(1ULL << MSR_IA32_MISC_ENABLE_TCC_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_EMON_BIT			7
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_EMON			(1ULL << MSR_IA32_MISC_ENABLE_EMON_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_BTS_UNAVAIL_BIT		11
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_BTS_UNAVAIL		(1ULL << MSR_IA32_MISC_ENABLE_BTS_UNAVAIL_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_PEBS_UNAVAIL_BIT		12
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_PEBS_UNAVAIL		(1ULL << MSR_IA32_MISC_ENABLE_PEBS_UNAVAIL_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_ENHANCED_SPEEDSTEP_BIT	16
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_ENHANCED_SPEEDSTEP		(1ULL << MSR_IA32_MISC_ENABLE_ENHANCED_SPEEDSTEP_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_MWAIT_BIT			18
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_MWAIT			(1ULL << MSR_IA32_MISC_ENABLE_MWAIT_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_LIMIT_CPUID_BIT		22
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_LIMIT_CPUID		(1ULL << MSR_IA32_MISC_ENABLE_LIMIT_CPUID_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_XTPR_DISABLE_BIT		23
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_XTPR_DISABLE		(1ULL << MSR_IA32_MISC_ENABLE_XTPR_DISABLE_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_XD_DISABLE_BIT		34
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_XD_DISABLE			(1ULL << MSR_IA32_MISC_ENABLE_XD_DISABLE_BIT)
 | 
			
		||||
 | 
			
		||||
/* MISC_ENABLE bits: model-specific, meaning may vary from core to core */
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_X87_COMPAT_BIT		2
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_X87_COMPAT			(1ULL << MSR_IA32_MISC_ENABLE_X87_COMPAT_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_TM1_BIT			3
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_TM1			(1ULL << MSR_IA32_MISC_ENABLE_TM1_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_SPLIT_LOCK_DISABLE_BIT	4
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_SPLIT_LOCK_DISABLE		(1ULL << MSR_IA32_MISC_ENABLE_SPLIT_LOCK_DISABLE_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_L3CACHE_DISABLE_BIT	6
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_L3CACHE_DISABLE		(1ULL << MSR_IA32_MISC_ENABLE_L3CACHE_DISABLE_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_SUPPRESS_LOCK_BIT		8
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_SUPPRESS_LOCK		(1ULL << MSR_IA32_MISC_ENABLE_SUPPRESS_LOCK_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_PREFETCH_DISABLE_BIT	9
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_PREFETCH_DISABLE		(1ULL << MSR_IA32_MISC_ENABLE_PREFETCH_DISABLE_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_FERR_BIT			10
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_FERR			(1ULL << MSR_IA32_MISC_ENABLE_FERR_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_FERR_MULTIPLEX_BIT		10
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_FERR_MULTIPLEX		(1ULL << MSR_IA32_MISC_ENABLE_FERR_MULTIPLEX_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_TM2_BIT			13
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_TM2			(1ULL << MSR_IA32_MISC_ENABLE_TM2_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_ADJ_PREF_DISABLE_BIT	19
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_ADJ_PREF_DISABLE		(1ULL << MSR_IA32_MISC_ENABLE_ADJ_PREF_DISABLE_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_SPEEDSTEP_LOCK_BIT		20
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_SPEEDSTEP_LOCK		(1ULL << MSR_IA32_MISC_ENABLE_SPEEDSTEP_LOCK_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_L1D_CONTEXT_BIT		24
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_L1D_CONTEXT		(1ULL << MSR_IA32_MISC_ENABLE_L1D_CONTEXT_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_DCU_PREF_DISABLE_BIT	37
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_DCU_PREF_DISABLE		(1ULL << MSR_IA32_MISC_ENABLE_DCU_PREF_DISABLE_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_TURBO_DISABLE_BIT		38
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_TURBO_DISABLE		(1ULL << MSR_IA32_MISC_ENABLE_TURBO_DISABLE_BIT)
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_IP_PREF_DISABLE_BIT	39
 | 
			
		||||
#define MSR_IA32_MISC_ENABLE_IP_PREF_DISABLE		(1ULL << MSR_IA32_MISC_ENABLE_IP_PREF_DISABLE_BIT)
 | 
			
		||||
 | 
			
		||||
#define MSR_IA32_TSC_DEADLINE		0x000006E0
 | 
			
		||||
 | 
			
		||||
/* P4/Xeon+ specific */
 | 
			
		||||
#define MSR_IA32_MCG_EAX		0x00000180
 | 
			
		||||
#define MSR_IA32_MCG_EBX		0x00000181
 | 
			
		||||
#define MSR_IA32_MCG_ECX		0x00000182
 | 
			
		||||
#define MSR_IA32_MCG_EDX		0x00000183
 | 
			
		||||
#define MSR_IA32_MCG_ESI		0x00000184
 | 
			
		||||
#define MSR_IA32_MCG_EDI		0x00000185
 | 
			
		||||
#define MSR_IA32_MCG_EBP		0x00000186
 | 
			
		||||
#define MSR_IA32_MCG_ESP		0x00000187
 | 
			
		||||
#define MSR_IA32_MCG_EFLAGS		0x00000188
 | 
			
		||||
#define MSR_IA32_MCG_EIP		0x00000189
 | 
			
		||||
#define MSR_IA32_MCG_RESERVED		0x0000018a
 | 
			
		||||
 | 
			
		||||
/* Pentium IV performance counter MSRs */
 | 
			
		||||
#define MSR_P4_BPU_PERFCTR0		0x00000300
 | 
			
		||||
#define MSR_P4_BPU_PERFCTR1		0x00000301
 | 
			
		||||
#define MSR_P4_BPU_PERFCTR2		0x00000302
 | 
			
		||||
#define MSR_P4_BPU_PERFCTR3		0x00000303
 | 
			
		||||
#define MSR_P4_MS_PERFCTR0		0x00000304
 | 
			
		||||
#define MSR_P4_MS_PERFCTR1		0x00000305
 | 
			
		||||
#define MSR_P4_MS_PERFCTR2		0x00000306
 | 
			
		||||
#define MSR_P4_MS_PERFCTR3		0x00000307
 | 
			
		||||
#define MSR_P4_FLAME_PERFCTR0		0x00000308
 | 
			
		||||
#define MSR_P4_FLAME_PERFCTR1		0x00000309
 | 
			
		||||
#define MSR_P4_FLAME_PERFCTR2		0x0000030a
 | 
			
		||||
#define MSR_P4_FLAME_PERFCTR3		0x0000030b
 | 
			
		||||
#define MSR_P4_IQ_PERFCTR0		0x0000030c
 | 
			
		||||
#define MSR_P4_IQ_PERFCTR1		0x0000030d
 | 
			
		||||
#define MSR_P4_IQ_PERFCTR2		0x0000030e
 | 
			
		||||
#define MSR_P4_IQ_PERFCTR3		0x0000030f
 | 
			
		||||
#define MSR_P4_IQ_PERFCTR4		0x00000310
 | 
			
		||||
#define MSR_P4_IQ_PERFCTR5		0x00000311
 | 
			
		||||
#define MSR_P4_BPU_CCCR0		0x00000360
 | 
			
		||||
#define MSR_P4_BPU_CCCR1		0x00000361
 | 
			
		||||
#define MSR_P4_BPU_CCCR2		0x00000362
 | 
			
		||||
#define MSR_P4_BPU_CCCR3		0x00000363
 | 
			
		||||
#define MSR_P4_MS_CCCR0			0x00000364
 | 
			
		||||
#define MSR_P4_MS_CCCR1			0x00000365
 | 
			
		||||
#define MSR_P4_MS_CCCR2			0x00000366
 | 
			
		||||
#define MSR_P4_MS_CCCR3			0x00000367
 | 
			
		||||
#define MSR_P4_FLAME_CCCR0		0x00000368
 | 
			
		||||
#define MSR_P4_FLAME_CCCR1		0x00000369
 | 
			
		||||
#define MSR_P4_FLAME_CCCR2		0x0000036a
 | 
			
		||||
#define MSR_P4_FLAME_CCCR3		0x0000036b
 | 
			
		||||
#define MSR_P4_IQ_CCCR0			0x0000036c
 | 
			
		||||
#define MSR_P4_IQ_CCCR1			0x0000036d
 | 
			
		||||
#define MSR_P4_IQ_CCCR2			0x0000036e
 | 
			
		||||
#define MSR_P4_IQ_CCCR3			0x0000036f
 | 
			
		||||
#define MSR_P4_IQ_CCCR4			0x00000370
 | 
			
		||||
#define MSR_P4_IQ_CCCR5			0x00000371
 | 
			
		||||
#define MSR_P4_ALF_ESCR0		0x000003ca
 | 
			
		||||
#define MSR_P4_ALF_ESCR1		0x000003cb
 | 
			
		||||
#define MSR_P4_BPU_ESCR0		0x000003b2
 | 
			
		||||
#define MSR_P4_BPU_ESCR1		0x000003b3
 | 
			
		||||
#define MSR_P4_BSU_ESCR0		0x000003a0
 | 
			
		||||
#define MSR_P4_BSU_ESCR1		0x000003a1
 | 
			
		||||
#define MSR_P4_CRU_ESCR0		0x000003b8
 | 
			
		||||
#define MSR_P4_CRU_ESCR1		0x000003b9
 | 
			
		||||
#define MSR_P4_CRU_ESCR2		0x000003cc
 | 
			
		||||
#define MSR_P4_CRU_ESCR3		0x000003cd
 | 
			
		||||
#define MSR_P4_CRU_ESCR4		0x000003e0
 | 
			
		||||
#define MSR_P4_CRU_ESCR5		0x000003e1
 | 
			
		||||
#define MSR_P4_DAC_ESCR0		0x000003a8
 | 
			
		||||
#define MSR_P4_DAC_ESCR1		0x000003a9
 | 
			
		||||
#define MSR_P4_FIRM_ESCR0		0x000003a4
 | 
			
		||||
#define MSR_P4_FIRM_ESCR1		0x000003a5
 | 
			
		||||
#define MSR_P4_FLAME_ESCR0		0x000003a6
 | 
			
		||||
#define MSR_P4_FLAME_ESCR1		0x000003a7
 | 
			
		||||
#define MSR_P4_FSB_ESCR0		0x000003a2
 | 
			
		||||
#define MSR_P4_FSB_ESCR1		0x000003a3
 | 
			
		||||
#define MSR_P4_IQ_ESCR0			0x000003ba
 | 
			
		||||
#define MSR_P4_IQ_ESCR1			0x000003bb
 | 
			
		||||
#define MSR_P4_IS_ESCR0			0x000003b4
 | 
			
		||||
#define MSR_P4_IS_ESCR1			0x000003b5
 | 
			
		||||
#define MSR_P4_ITLB_ESCR0		0x000003b6
 | 
			
		||||
#define MSR_P4_ITLB_ESCR1		0x000003b7
 | 
			
		||||
#define MSR_P4_IX_ESCR0			0x000003c8
 | 
			
		||||
#define MSR_P4_IX_ESCR1			0x000003c9
 | 
			
		||||
#define MSR_P4_MOB_ESCR0		0x000003aa
 | 
			
		||||
#define MSR_P4_MOB_ESCR1		0x000003ab
 | 
			
		||||
#define MSR_P4_MS_ESCR0			0x000003c0
 | 
			
		||||
#define MSR_P4_MS_ESCR1			0x000003c1
 | 
			
		||||
#define MSR_P4_PMH_ESCR0		0x000003ac
 | 
			
		||||
#define MSR_P4_PMH_ESCR1		0x000003ad
 | 
			
		||||
#define MSR_P4_RAT_ESCR0		0x000003bc
 | 
			
		||||
#define MSR_P4_RAT_ESCR1		0x000003bd
 | 
			
		||||
#define MSR_P4_SAAT_ESCR0		0x000003ae
 | 
			
		||||
#define MSR_P4_SAAT_ESCR1		0x000003af
 | 
			
		||||
#define MSR_P4_SSU_ESCR0		0x000003be
 | 
			
		||||
#define MSR_P4_SSU_ESCR1		0x000003bf /* guess: not in manual */
 | 
			
		||||
 | 
			
		||||
#define MSR_P4_TBPU_ESCR0		0x000003c2
 | 
			
		||||
#define MSR_P4_TBPU_ESCR1		0x000003c3
 | 
			
		||||
#define MSR_P4_TC_ESCR0			0x000003c4
 | 
			
		||||
#define MSR_P4_TC_ESCR1			0x000003c5
 | 
			
		||||
#define MSR_P4_U2L_ESCR0		0x000003b0
 | 
			
		||||
#define MSR_P4_U2L_ESCR1		0x000003b1
 | 
			
		||||
 | 
			
		||||
#define MSR_P4_PEBS_MATRIX_VERT		0x000003f2
 | 
			
		||||
 | 
			
		||||
/* Intel Core-based CPU performance counters */
 | 
			
		||||
#define MSR_CORE_PERF_FIXED_CTR0	0x00000309
 | 
			
		||||
#define MSR_CORE_PERF_FIXED_CTR1	0x0000030a
 | 
			
		||||
#define MSR_CORE_PERF_FIXED_CTR2	0x0000030b
 | 
			
		||||
#define MSR_CORE_PERF_FIXED_CTR_CTRL	0x0000038d
 | 
			
		||||
#define MSR_CORE_PERF_GLOBAL_STATUS	0x0000038e
 | 
			
		||||
#define MSR_CORE_PERF_GLOBAL_CTRL	0x0000038f
 | 
			
		||||
#define MSR_CORE_PERF_GLOBAL_OVF_CTRL	0x00000390
 | 
			
		||||
 | 
			
		||||
/* Geode defined MSRs */
 | 
			
		||||
#define MSR_GEODE_BUSCONT_CONF0		0x00001900
 | 
			
		||||
 | 
			
		||||
/* Intel VT MSRs */
 | 
			
		||||
#define MSR_IA32_VMX_BASIC              0x00000480
 | 
			
		||||
#define MSR_IA32_VMX_PINBASED_CTLS      0x00000481
 | 
			
		||||
#define MSR_IA32_VMX_PROCBASED_CTLS     0x00000482
 | 
			
		||||
#define MSR_IA32_VMX_EXIT_CTLS          0x00000483
 | 
			
		||||
#define MSR_IA32_VMX_ENTRY_CTLS         0x00000484
 | 
			
		||||
#define MSR_IA32_VMX_MISC               0x00000485
 | 
			
		||||
#define MSR_IA32_VMX_CR0_FIXED0         0x00000486
 | 
			
		||||
#define MSR_IA32_VMX_CR0_FIXED1         0x00000487
 | 
			
		||||
#define MSR_IA32_VMX_CR4_FIXED0         0x00000488
 | 
			
		||||
#define MSR_IA32_VMX_CR4_FIXED1         0x00000489
 | 
			
		||||
#define MSR_IA32_VMX_VMCS_ENUM          0x0000048a
 | 
			
		||||
#define MSR_IA32_VMX_PROCBASED_CTLS2    0x0000048b
 | 
			
		||||
#define MSR_IA32_VMX_EPT_VPID_CAP       0x0000048c
 | 
			
		||||
#define MSR_IA32_VMX_TRUE_PINBASED_CTLS  0x0000048d
 | 
			
		||||
#define MSR_IA32_VMX_TRUE_PROCBASED_CTLS 0x0000048e
 | 
			
		||||
#define MSR_IA32_VMX_TRUE_EXIT_CTLS      0x0000048f
 | 
			
		||||
#define MSR_IA32_VMX_TRUE_ENTRY_CTLS     0x00000490
 | 
			
		||||
#define MSR_IA32_VMX_VMFUNC             0x00000491
 | 
			
		||||
 | 
			
		||||
/* VMX_BASIC bits and bitmasks */
 | 
			
		||||
#define VMX_BASIC_VMCS_SIZE_SHIFT	32
 | 
			
		||||
#define VMX_BASIC_TRUE_CTLS		(1ULL << 55)
 | 
			
		||||
#define VMX_BASIC_64		0x0001000000000000LLU
 | 
			
		||||
#define VMX_BASIC_MEM_TYPE_SHIFT	50
 | 
			
		||||
#define VMX_BASIC_MEM_TYPE_MASK	0x003c000000000000LLU
 | 
			
		||||
#define VMX_BASIC_MEM_TYPE_WB	6LLU
 | 
			
		||||
#define VMX_BASIC_INOUT		0x0040000000000000LLU
 | 
			
		||||
 | 
			
		||||
/* MSR_IA32_VMX_MISC bits */
 | 
			
		||||
#define MSR_IA32_VMX_MISC_VMWRITE_SHADOW_RO_FIELDS (1ULL << 29)
 | 
			
		||||
#define MSR_IA32_VMX_MISC_PREEMPTION_TIMER_SCALE   0x1F
 | 
			
		||||
/* AMD-V MSRs */
 | 
			
		||||
 | 
			
		||||
#define MSR_VM_CR                       0xc0010114
 | 
			
		||||
#define MSR_VM_IGNNE                    0xc0010115
 | 
			
		||||
#define MSR_VM_HSAVE_PA                 0xc0010117
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_MSR_INDEX_H */
 | 
			
		||||
@@ -0,0 +1,13 @@
 | 
			
		||||
#ifndef _ASM_X86_MSR_H
 | 
			
		||||
#define _ASM_X86_MSR_H
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/ioctl.h>
 | 
			
		||||
 | 
			
		||||
#define X86_IOC_RDMSR_REGS	_IOWR('c', 0xA0, __u32[8])
 | 
			
		||||
#define X86_IOC_WRMSR_REGS	_IOWR('c', 0xA1, __u32[8])
 | 
			
		||||
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
#endif /* _ASM_X86_MSR_H */
 | 
			
		||||
@@ -0,0 +1,123 @@
 | 
			
		||||
/*  Generic MTRR (Memory Type Range Register) ioctls.
 | 
			
		||||
 | 
			
		||||
    Copyright (C) 1997-1999  Richard Gooch
 | 
			
		||||
 | 
			
		||||
    This library is free software; you can redistribute it and/or
 | 
			
		||||
    modify it under the terms of the GNU Library General Public
 | 
			
		||||
    License as published by the Free Software Foundation; either
 | 
			
		||||
    version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This library is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
    Library General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU Library General Public
 | 
			
		||||
    License along with this library; if not, write to the Free
 | 
			
		||||
    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 | 
			
		||||
    Richard Gooch may be reached by email at  rgooch@atnf.csiro.au
 | 
			
		||||
    The postal address is:
 | 
			
		||||
      Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia.
 | 
			
		||||
*/
 | 
			
		||||
#ifndef _ASM_X86_MTRR_H
 | 
			
		||||
#define _ASM_X86_MTRR_H
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/ioctl.h>
 | 
			
		||||
#include <linux/errno.h>
 | 
			
		||||
 | 
			
		||||
#define	MTRR_IOCTL_BASE	'M'
 | 
			
		||||
 | 
			
		||||
/* Warning: this structure has a different order from i386
 | 
			
		||||
   on x86-64. The 32bit emulation code takes care of that.
 | 
			
		||||
   But you need to use this for 64bit, otherwise your X server
 | 
			
		||||
   will break. */
 | 
			
		||||
 | 
			
		||||
#ifdef __i386__
 | 
			
		||||
struct mtrr_sentry {
 | 
			
		||||
    unsigned long base;    /*  Base address     */
 | 
			
		||||
    unsigned int size;    /*  Size of region   */
 | 
			
		||||
    unsigned int type;     /*  Type of region   */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct mtrr_gentry {
 | 
			
		||||
    unsigned int regnum;   /*  Register number  */
 | 
			
		||||
    unsigned long base;    /*  Base address     */
 | 
			
		||||
    unsigned int size;    /*  Size of region   */
 | 
			
		||||
    unsigned int type;     /*  Type of region   */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#else /* __i386__ */
 | 
			
		||||
 | 
			
		||||
struct mtrr_sentry {
 | 
			
		||||
	__u64 base;		/*  Base address     */
 | 
			
		||||
	__u32 size;		/*  Size of region   */
 | 
			
		||||
	__u32 type;		/*  Type of region   */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct mtrr_gentry {
 | 
			
		||||
	__u64 base;		/*  Base address     */
 | 
			
		||||
	__u32 size;		/*  Size of region   */
 | 
			
		||||
	__u32 regnum;		/*  Register number  */
 | 
			
		||||
	__u32 type;		/*  Type of region   */
 | 
			
		||||
	__u32 _pad;		/*  Unused	     */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* !__i386__ */
 | 
			
		||||
 | 
			
		||||
struct mtrr_var_range {
 | 
			
		||||
	__u32 base_lo;
 | 
			
		||||
	__u32 base_hi;
 | 
			
		||||
	__u32 mask_lo;
 | 
			
		||||
	__u32 mask_hi;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* In the Intel processor's MTRR interface, the MTRR type is always held in
 | 
			
		||||
   an 8 bit field: */
 | 
			
		||||
typedef __u8 mtrr_type;
 | 
			
		||||
 | 
			
		||||
#define MTRR_NUM_FIXED_RANGES 88
 | 
			
		||||
#define MTRR_MAX_VAR_RANGES 256
 | 
			
		||||
 | 
			
		||||
struct mtrr_state_type {
 | 
			
		||||
	struct mtrr_var_range var_ranges[MTRR_MAX_VAR_RANGES];
 | 
			
		||||
	mtrr_type fixed_ranges[MTRR_NUM_FIXED_RANGES];
 | 
			
		||||
	unsigned char enabled;
 | 
			
		||||
	unsigned char have_fixed;
 | 
			
		||||
	mtrr_type def_type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define MTRRphysBase_MSR(reg) (0x200 + 2 * (reg))
 | 
			
		||||
#define MTRRphysMask_MSR(reg) (0x200 + 2 * (reg) + 1)
 | 
			
		||||
 | 
			
		||||
/*  These are the various ioctls  */
 | 
			
		||||
#define MTRRIOC_ADD_ENTRY        _IOW(MTRR_IOCTL_BASE,  0, struct mtrr_sentry)
 | 
			
		||||
#define MTRRIOC_SET_ENTRY        _IOW(MTRR_IOCTL_BASE,  1, struct mtrr_sentry)
 | 
			
		||||
#define MTRRIOC_DEL_ENTRY        _IOW(MTRR_IOCTL_BASE,  2, struct mtrr_sentry)
 | 
			
		||||
#define MTRRIOC_GET_ENTRY        _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry)
 | 
			
		||||
#define MTRRIOC_KILL_ENTRY       _IOW(MTRR_IOCTL_BASE,  4, struct mtrr_sentry)
 | 
			
		||||
#define MTRRIOC_ADD_PAGE_ENTRY   _IOW(MTRR_IOCTL_BASE,  5, struct mtrr_sentry)
 | 
			
		||||
#define MTRRIOC_SET_PAGE_ENTRY   _IOW(MTRR_IOCTL_BASE,  6, struct mtrr_sentry)
 | 
			
		||||
#define MTRRIOC_DEL_PAGE_ENTRY   _IOW(MTRR_IOCTL_BASE,  7, struct mtrr_sentry)
 | 
			
		||||
#define MTRRIOC_GET_PAGE_ENTRY   _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry)
 | 
			
		||||
#define MTRRIOC_KILL_PAGE_ENTRY  _IOW(MTRR_IOCTL_BASE,  9, struct mtrr_sentry)
 | 
			
		||||
 | 
			
		||||
/* MTRR memory types, which are defined in SDM */
 | 
			
		||||
#define MTRR_TYPE_UNCACHABLE 0
 | 
			
		||||
#define MTRR_TYPE_WRCOMB     1
 | 
			
		||||
/*#define MTRR_TYPE_         2*/
 | 
			
		||||
/*#define MTRR_TYPE_         3*/
 | 
			
		||||
#define MTRR_TYPE_WRTHROUGH  4
 | 
			
		||||
#define MTRR_TYPE_WRPROT     5
 | 
			
		||||
#define MTRR_TYPE_WRBACK     6
 | 
			
		||||
#define MTRR_NUM_TYPES       7
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Invalid MTRR memory type.  mtrr_type_lookup() returns this value when
 | 
			
		||||
 * MTRRs are disabled.  Note, this value is allocated from the reserved
 | 
			
		||||
 * values (0x7-0xff) of the MTRR memory types.
 | 
			
		||||
 */
 | 
			
		||||
#define MTRR_TYPE_INVALID    0xff
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_MTRR_H */
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/param.h>
 | 
			
		||||
@@ -0,0 +1,33 @@
 | 
			
		||||
#ifndef _ASM_X86_PERF_REGS_H
 | 
			
		||||
#define _ASM_X86_PERF_REGS_H
 | 
			
		||||
 | 
			
		||||
enum perf_event_x86_regs {
 | 
			
		||||
	PERF_REG_X86_AX,
 | 
			
		||||
	PERF_REG_X86_BX,
 | 
			
		||||
	PERF_REG_X86_CX,
 | 
			
		||||
	PERF_REG_X86_DX,
 | 
			
		||||
	PERF_REG_X86_SI,
 | 
			
		||||
	PERF_REG_X86_DI,
 | 
			
		||||
	PERF_REG_X86_BP,
 | 
			
		||||
	PERF_REG_X86_SP,
 | 
			
		||||
	PERF_REG_X86_IP,
 | 
			
		||||
	PERF_REG_X86_FLAGS,
 | 
			
		||||
	PERF_REG_X86_CS,
 | 
			
		||||
	PERF_REG_X86_SS,
 | 
			
		||||
	PERF_REG_X86_DS,
 | 
			
		||||
	PERF_REG_X86_ES,
 | 
			
		||||
	PERF_REG_X86_FS,
 | 
			
		||||
	PERF_REG_X86_GS,
 | 
			
		||||
	PERF_REG_X86_R8,
 | 
			
		||||
	PERF_REG_X86_R9,
 | 
			
		||||
	PERF_REG_X86_R10,
 | 
			
		||||
	PERF_REG_X86_R11,
 | 
			
		||||
	PERF_REG_X86_R12,
 | 
			
		||||
	PERF_REG_X86_R13,
 | 
			
		||||
	PERF_REG_X86_R14,
 | 
			
		||||
	PERF_REG_X86_R15,
 | 
			
		||||
 | 
			
		||||
	PERF_REG_X86_32_MAX = PERF_REG_X86_GS + 1,
 | 
			
		||||
	PERF_REG_X86_64_MAX = PERF_REG_X86_R15 + 1,
 | 
			
		||||
};
 | 
			
		||||
#endif /* _ASM_X86_PERF_REGS_H */
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/poll.h>
 | 
			
		||||
@@ -0,0 +1,7 @@
 | 
			
		||||
# ifdef __i386__
 | 
			
		||||
#  include <asm/posix_types_32.h>
 | 
			
		||||
# elif defined(__ILP32__)
 | 
			
		||||
#  include <asm/posix_types_x32.h>
 | 
			
		||||
# else
 | 
			
		||||
#  include <asm/posix_types_64.h>
 | 
			
		||||
# endif
 | 
			
		||||
@@ -0,0 +1,25 @@
 | 
			
		||||
#ifndef _ASM_X86_POSIX_TYPES_32_H
 | 
			
		||||
#define _ASM_X86_POSIX_TYPES_32_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file is generally used by user-level software, so you need to
 | 
			
		||||
 * be a little careful about namespace pollution etc.  Also, we cannot
 | 
			
		||||
 * assume GCC is being used.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
typedef unsigned short	__kernel_mode_t;
 | 
			
		||||
#define __kernel_mode_t __kernel_mode_t
 | 
			
		||||
 | 
			
		||||
typedef unsigned short	__kernel_ipc_pid_t;
 | 
			
		||||
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
 | 
			
		||||
 | 
			
		||||
typedef unsigned short	__kernel_uid_t;
 | 
			
		||||
typedef unsigned short	__kernel_gid_t;
 | 
			
		||||
#define __kernel_uid_t __kernel_uid_t
 | 
			
		||||
 | 
			
		||||
typedef unsigned short	__kernel_old_dev_t;
 | 
			
		||||
#define __kernel_old_dev_t __kernel_old_dev_t
 | 
			
		||||
 | 
			
		||||
#include <asm-generic/posix_types.h>
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_POSIX_TYPES_32_H */
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
#ifndef _ASM_X86_POSIX_TYPES_64_H
 | 
			
		||||
#define _ASM_X86_POSIX_TYPES_64_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file is generally used by user-level software, so you need to
 | 
			
		||||
 * be a little careful about namespace pollution etc.  Also, we cannot
 | 
			
		||||
 * assume GCC is being used.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
typedef unsigned short __kernel_old_uid_t;
 | 
			
		||||
typedef unsigned short __kernel_old_gid_t;
 | 
			
		||||
#define __kernel_old_uid_t __kernel_old_uid_t
 | 
			
		||||
 | 
			
		||||
typedef unsigned long	__kernel_old_dev_t;
 | 
			
		||||
#define __kernel_old_dev_t __kernel_old_dev_t
 | 
			
		||||
 | 
			
		||||
#include <asm-generic/posix_types.h>
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_POSIX_TYPES_64_H */
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
#ifndef _ASM_X86_POSIX_TYPES_X32_H
 | 
			
		||||
#define _ASM_X86_POSIX_TYPES_X32_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file is only used by user-level software, so you need to
 | 
			
		||||
 * be a little careful about namespace pollution etc.  Also, we cannot
 | 
			
		||||
 * assume GCC is being used.
 | 
			
		||||
 *
 | 
			
		||||
 * These types should generally match the ones used by the 64-bit kernel,
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
typedef long long __kernel_long_t;
 | 
			
		||||
typedef unsigned long long __kernel_ulong_t;
 | 
			
		||||
#define __kernel_long_t __kernel_long_t
 | 
			
		||||
 | 
			
		||||
#include <asm/posix_types_64.h>
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_POSIX_TYPES_X32_H */
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
#ifndef _ASM_X86_PRCTL_H
 | 
			
		||||
#define _ASM_X86_PRCTL_H
 | 
			
		||||
 | 
			
		||||
#define ARCH_SET_GS 0x1001
 | 
			
		||||
#define ARCH_SET_FS 0x1002
 | 
			
		||||
#define ARCH_GET_FS 0x1003
 | 
			
		||||
#define ARCH_GET_GS 0x1004
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_PRCTL_H */
 | 
			
		||||
@@ -0,0 +1,151 @@
 | 
			
		||||
#ifndef _ASM_X86_PROCESSOR_FLAGS_H
 | 
			
		||||
#define _ASM_X86_PROCESSOR_FLAGS_H
 | 
			
		||||
/* Various flags defined: can be included from assembler. */
 | 
			
		||||
 | 
			
		||||
#include <linux/const.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * EFLAGS bits
 | 
			
		||||
 */
 | 
			
		||||
#define X86_EFLAGS_CF_BIT	0 /* Carry Flag */
 | 
			
		||||
#define X86_EFLAGS_CF		_BITUL(X86_EFLAGS_CF_BIT)
 | 
			
		||||
#define X86_EFLAGS_FIXED_BIT	1 /* Bit 1 - always on */
 | 
			
		||||
#define X86_EFLAGS_FIXED	_BITUL(X86_EFLAGS_FIXED_BIT)
 | 
			
		||||
#define X86_EFLAGS_PF_BIT	2 /* Parity Flag */
 | 
			
		||||
#define X86_EFLAGS_PF		_BITUL(X86_EFLAGS_PF_BIT)
 | 
			
		||||
#define X86_EFLAGS_AF_BIT	4 /* Auxiliary carry Flag */
 | 
			
		||||
#define X86_EFLAGS_AF		_BITUL(X86_EFLAGS_AF_BIT)
 | 
			
		||||
#define X86_EFLAGS_ZF_BIT	6 /* Zero Flag */
 | 
			
		||||
#define X86_EFLAGS_ZF		_BITUL(X86_EFLAGS_ZF_BIT)
 | 
			
		||||
#define X86_EFLAGS_SF_BIT	7 /* Sign Flag */
 | 
			
		||||
#define X86_EFLAGS_SF		_BITUL(X86_EFLAGS_SF_BIT)
 | 
			
		||||
#define X86_EFLAGS_TF_BIT	8 /* Trap Flag */
 | 
			
		||||
#define X86_EFLAGS_TF		_BITUL(X86_EFLAGS_TF_BIT)
 | 
			
		||||
#define X86_EFLAGS_IF_BIT	9 /* Interrupt Flag */
 | 
			
		||||
#define X86_EFLAGS_IF		_BITUL(X86_EFLAGS_IF_BIT)
 | 
			
		||||
#define X86_EFLAGS_DF_BIT	10 /* Direction Flag */
 | 
			
		||||
#define X86_EFLAGS_DF		_BITUL(X86_EFLAGS_DF_BIT)
 | 
			
		||||
#define X86_EFLAGS_OF_BIT	11 /* Overflow Flag */
 | 
			
		||||
#define X86_EFLAGS_OF		_BITUL(X86_EFLAGS_OF_BIT)
 | 
			
		||||
#define X86_EFLAGS_IOPL_BIT	12 /* I/O Privilege Level (2 bits) */
 | 
			
		||||
#define X86_EFLAGS_IOPL		(_AC(3,UL) << X86_EFLAGS_IOPL_BIT)
 | 
			
		||||
#define X86_EFLAGS_NT_BIT	14 /* Nested Task */
 | 
			
		||||
#define X86_EFLAGS_NT		_BITUL(X86_EFLAGS_NT_BIT)
 | 
			
		||||
#define X86_EFLAGS_RF_BIT	16 /* Resume Flag */
 | 
			
		||||
#define X86_EFLAGS_RF		_BITUL(X86_EFLAGS_RF_BIT)
 | 
			
		||||
#define X86_EFLAGS_VM_BIT	17 /* Virtual Mode */
 | 
			
		||||
#define X86_EFLAGS_VM		_BITUL(X86_EFLAGS_VM_BIT)
 | 
			
		||||
#define X86_EFLAGS_AC_BIT	18 /* Alignment Check/Access Control */
 | 
			
		||||
#define X86_EFLAGS_AC		_BITUL(X86_EFLAGS_AC_BIT)
 | 
			
		||||
#define X86_EFLAGS_VIF_BIT	19 /* Virtual Interrupt Flag */
 | 
			
		||||
#define X86_EFLAGS_VIF		_BITUL(X86_EFLAGS_VIF_BIT)
 | 
			
		||||
#define X86_EFLAGS_VIP_BIT	20 /* Virtual Interrupt Pending */
 | 
			
		||||
#define X86_EFLAGS_VIP		_BITUL(X86_EFLAGS_VIP_BIT)
 | 
			
		||||
#define X86_EFLAGS_ID_BIT	21 /* CPUID detection */
 | 
			
		||||
#define X86_EFLAGS_ID		_BITUL(X86_EFLAGS_ID_BIT)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Basic CPU control in CR0
 | 
			
		||||
 */
 | 
			
		||||
#define X86_CR0_PE_BIT		0 /* Protection Enable */
 | 
			
		||||
#define X86_CR0_PE		_BITUL(X86_CR0_PE_BIT)
 | 
			
		||||
#define X86_CR0_MP_BIT		1 /* Monitor Coprocessor */
 | 
			
		||||
#define X86_CR0_MP		_BITUL(X86_CR0_MP_BIT)
 | 
			
		||||
#define X86_CR0_EM_BIT		2 /* Emulation */
 | 
			
		||||
#define X86_CR0_EM		_BITUL(X86_CR0_EM_BIT)
 | 
			
		||||
#define X86_CR0_TS_BIT		3 /* Task Switched */
 | 
			
		||||
#define X86_CR0_TS		_BITUL(X86_CR0_TS_BIT)
 | 
			
		||||
#define X86_CR0_ET_BIT		4 /* Extension Type */
 | 
			
		||||
#define X86_CR0_ET		_BITUL(X86_CR0_ET_BIT)
 | 
			
		||||
#define X86_CR0_NE_BIT		5 /* Numeric Error */
 | 
			
		||||
#define X86_CR0_NE		_BITUL(X86_CR0_NE_BIT)
 | 
			
		||||
#define X86_CR0_WP_BIT		16 /* Write Protect */
 | 
			
		||||
#define X86_CR0_WP		_BITUL(X86_CR0_WP_BIT)
 | 
			
		||||
#define X86_CR0_AM_BIT		18 /* Alignment Mask */
 | 
			
		||||
#define X86_CR0_AM		_BITUL(X86_CR0_AM_BIT)
 | 
			
		||||
#define X86_CR0_NW_BIT		29 /* Not Write-through */
 | 
			
		||||
#define X86_CR0_NW		_BITUL(X86_CR0_NW_BIT)
 | 
			
		||||
#define X86_CR0_CD_BIT		30 /* Cache Disable */
 | 
			
		||||
#define X86_CR0_CD		_BITUL(X86_CR0_CD_BIT)
 | 
			
		||||
#define X86_CR0_PG_BIT		31 /* Paging */
 | 
			
		||||
#define X86_CR0_PG		_BITUL(X86_CR0_PG_BIT)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Paging options in CR3
 | 
			
		||||
 */
 | 
			
		||||
#define X86_CR3_PWT_BIT		3 /* Page Write Through */
 | 
			
		||||
#define X86_CR3_PWT		_BITUL(X86_CR3_PWT_BIT)
 | 
			
		||||
#define X86_CR3_PCD_BIT		4 /* Page Cache Disable */
 | 
			
		||||
#define X86_CR3_PCD		_BITUL(X86_CR3_PCD_BIT)
 | 
			
		||||
#define X86_CR3_PCID_MASK	_AC(0x00000fff,UL) /* PCID Mask */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Intel CPU features in CR4
 | 
			
		||||
 */
 | 
			
		||||
#define X86_CR4_VME_BIT		0 /* enable vm86 extensions */
 | 
			
		||||
#define X86_CR4_VME		_BITUL(X86_CR4_VME_BIT)
 | 
			
		||||
#define X86_CR4_PVI_BIT		1 /* virtual interrupts flag enable */
 | 
			
		||||
#define X86_CR4_PVI		_BITUL(X86_CR4_PVI_BIT)
 | 
			
		||||
#define X86_CR4_TSD_BIT		2 /* disable time stamp at ipl 3 */
 | 
			
		||||
#define X86_CR4_TSD		_BITUL(X86_CR4_TSD_BIT)
 | 
			
		||||
#define X86_CR4_DE_BIT		3 /* enable debugging extensions */
 | 
			
		||||
#define X86_CR4_DE		_BITUL(X86_CR4_DE_BIT)
 | 
			
		||||
#define X86_CR4_PSE_BIT		4 /* enable page size extensions */
 | 
			
		||||
#define X86_CR4_PSE		_BITUL(X86_CR4_PSE_BIT)
 | 
			
		||||
#define X86_CR4_PAE_BIT		5 /* enable physical address extensions */
 | 
			
		||||
#define X86_CR4_PAE		_BITUL(X86_CR4_PAE_BIT)
 | 
			
		||||
#define X86_CR4_MCE_BIT		6 /* Machine check enable */
 | 
			
		||||
#define X86_CR4_MCE		_BITUL(X86_CR4_MCE_BIT)
 | 
			
		||||
#define X86_CR4_PGE_BIT		7 /* enable global pages */
 | 
			
		||||
#define X86_CR4_PGE		_BITUL(X86_CR4_PGE_BIT)
 | 
			
		||||
#define X86_CR4_PCE_BIT		8 /* enable performance counters at ipl 3 */
 | 
			
		||||
#define X86_CR4_PCE		_BITUL(X86_CR4_PCE_BIT)
 | 
			
		||||
#define X86_CR4_OSFXSR_BIT	9 /* enable fast FPU save and restore */
 | 
			
		||||
#define X86_CR4_OSFXSR		_BITUL(X86_CR4_OSFXSR_BIT)
 | 
			
		||||
#define X86_CR4_OSXMMEXCPT_BIT	10 /* enable unmasked SSE exceptions */
 | 
			
		||||
#define X86_CR4_OSXMMEXCPT	_BITUL(X86_CR4_OSXMMEXCPT_BIT)
 | 
			
		||||
#define X86_CR4_VMXE_BIT	13 /* enable VMX virtualization */
 | 
			
		||||
#define X86_CR4_VMXE		_BITUL(X86_CR4_VMXE_BIT)
 | 
			
		||||
#define X86_CR4_SMXE_BIT	14 /* enable safer mode (TXT) */
 | 
			
		||||
#define X86_CR4_SMXE		_BITUL(X86_CR4_SMXE_BIT)
 | 
			
		||||
#define X86_CR4_FSGSBASE_BIT	16 /* enable RDWRFSGS support */
 | 
			
		||||
#define X86_CR4_FSGSBASE	_BITUL(X86_CR4_FSGSBASE_BIT)
 | 
			
		||||
#define X86_CR4_PCIDE_BIT	17 /* enable PCID support */
 | 
			
		||||
#define X86_CR4_PCIDE		_BITUL(X86_CR4_PCIDE_BIT)
 | 
			
		||||
#define X86_CR4_OSXSAVE_BIT	18 /* enable xsave and xrestore */
 | 
			
		||||
#define X86_CR4_OSXSAVE		_BITUL(X86_CR4_OSXSAVE_BIT)
 | 
			
		||||
#define X86_CR4_SMEP_BIT	20 /* enable SMEP support */
 | 
			
		||||
#define X86_CR4_SMEP		_BITUL(X86_CR4_SMEP_BIT)
 | 
			
		||||
#define X86_CR4_SMAP_BIT	21 /* enable SMAP support */
 | 
			
		||||
#define X86_CR4_SMAP		_BITUL(X86_CR4_SMAP_BIT)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * x86-64 Task Priority Register, CR8
 | 
			
		||||
 */
 | 
			
		||||
#define X86_CR8_TPR		_AC(0x0000000f,UL) /* task priority register */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * AMD and Transmeta use MSRs for configuration; see <asm/msr-index.h>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *      NSC/Cyrix CPU configuration register indexes
 | 
			
		||||
 */
 | 
			
		||||
#define CX86_PCR0	0x20
 | 
			
		||||
#define CX86_GCR	0xb8
 | 
			
		||||
#define CX86_CCR0	0xc0
 | 
			
		||||
#define CX86_CCR1	0xc1
 | 
			
		||||
#define CX86_CCR2	0xc2
 | 
			
		||||
#define CX86_CCR3	0xc3
 | 
			
		||||
#define CX86_CCR4	0xe8
 | 
			
		||||
#define CX86_CCR5	0xe9
 | 
			
		||||
#define CX86_CCR6	0xea
 | 
			
		||||
#define CX86_CCR7	0xeb
 | 
			
		||||
#define CX86_PCR1	0xf0
 | 
			
		||||
#define CX86_DIR0	0xfe
 | 
			
		||||
#define CX86_DIR1	0xff
 | 
			
		||||
#define CX86_ARR_BASE	0xc4
 | 
			
		||||
#define CX86_RCR_BASE	0xdc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_PROCESSOR_FLAGS_H */
 | 
			
		||||
@@ -0,0 +1,93 @@
 | 
			
		||||
#ifndef _ASM_X86_PTRACE_ABI_H
 | 
			
		||||
#define _ASM_X86_PTRACE_ABI_H
 | 
			
		||||
 | 
			
		||||
#ifdef __i386__
 | 
			
		||||
 | 
			
		||||
#define EBX 0
 | 
			
		||||
#define ECX 1
 | 
			
		||||
#define EDX 2
 | 
			
		||||
#define ESI 3
 | 
			
		||||
#define EDI 4
 | 
			
		||||
#define EBP 5
 | 
			
		||||
#define EAX 6
 | 
			
		||||
#define DS 7
 | 
			
		||||
#define ES 8
 | 
			
		||||
#define FS 9
 | 
			
		||||
#define GS 10
 | 
			
		||||
#define ORIG_EAX 11
 | 
			
		||||
#define EIP 12
 | 
			
		||||
#define CS  13
 | 
			
		||||
#define EFL 14
 | 
			
		||||
#define UESP 15
 | 
			
		||||
#define SS   16
 | 
			
		||||
#define FRAME_SIZE 17
 | 
			
		||||
 | 
			
		||||
#else /* __i386__ */
 | 
			
		||||
 | 
			
		||||
#if defined(__ASSEMBLY__) || defined(__FRAME_OFFSETS)
 | 
			
		||||
/*
 | 
			
		||||
 * C ABI says these regs are callee-preserved. They aren't saved on kernel entry
 | 
			
		||||
 * unless syscall needs a complete, fully filled "struct pt_regs".
 | 
			
		||||
 */
 | 
			
		||||
#define R15 0
 | 
			
		||||
#define R14 8
 | 
			
		||||
#define R13 16
 | 
			
		||||
#define R12 24
 | 
			
		||||
#define RBP 32
 | 
			
		||||
#define RBX 40
 | 
			
		||||
/* These regs are callee-clobbered. Always saved on kernel entry. */
 | 
			
		||||
#define R11 48
 | 
			
		||||
#define R10 56
 | 
			
		||||
#define R9 64
 | 
			
		||||
#define R8 72
 | 
			
		||||
#define RAX 80
 | 
			
		||||
#define RCX 88
 | 
			
		||||
#define RDX 96
 | 
			
		||||
#define RSI 104
 | 
			
		||||
#define RDI 112
 | 
			
		||||
/*
 | 
			
		||||
 * On syscall entry, this is syscall#. On CPU exception, this is error code.
 | 
			
		||||
 * On hw interrupt, it's IRQ number:
 | 
			
		||||
 */
 | 
			
		||||
#define ORIG_RAX 120
 | 
			
		||||
/* Return frame for iretq */
 | 
			
		||||
#define RIP 128
 | 
			
		||||
#define CS 136
 | 
			
		||||
#define EFLAGS 144
 | 
			
		||||
#define RSP 152
 | 
			
		||||
#define SS 160
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
/* top of stack page */
 | 
			
		||||
#define FRAME_SIZE 168
 | 
			
		||||
 | 
			
		||||
#endif /* !__i386__ */
 | 
			
		||||
 | 
			
		||||
/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
 | 
			
		||||
#define PTRACE_GETREGS            12
 | 
			
		||||
#define PTRACE_SETREGS            13
 | 
			
		||||
#define PTRACE_GETFPREGS          14
 | 
			
		||||
#define PTRACE_SETFPREGS          15
 | 
			
		||||
#define PTRACE_GETFPXREGS         18
 | 
			
		||||
#define PTRACE_SETFPXREGS         19
 | 
			
		||||
 | 
			
		||||
#define PTRACE_OLDSETOPTIONS      21
 | 
			
		||||
 | 
			
		||||
/* only useful for access 32bit programs / kernels */
 | 
			
		||||
#define PTRACE_GET_THREAD_AREA    25
 | 
			
		||||
#define PTRACE_SET_THREAD_AREA    26
 | 
			
		||||
 | 
			
		||||
#ifdef __x86_64__
 | 
			
		||||
# define PTRACE_ARCH_PRCTL	  30
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define PTRACE_SYSEMU		  31
 | 
			
		||||
#define PTRACE_SYSEMU_SINGLESTEP  32
 | 
			
		||||
 | 
			
		||||
#define PTRACE_SINGLEBLOCK	33	/* resume execution until next branch */
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_PTRACE_ABI_H */
 | 
			
		||||
@@ -0,0 +1,81 @@
 | 
			
		||||
#ifndef _ASM_X86_PTRACE_H
 | 
			
		||||
#define _ASM_X86_PTRACE_H
 | 
			
		||||
 | 
			
		||||
	/* For */
 | 
			
		||||
#include <asm/ptrace-abi.h>
 | 
			
		||||
#include <asm/processor-flags.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
#ifdef __i386__
 | 
			
		||||
/* this struct defines the way the registers are stored on the
 | 
			
		||||
   stack during a system call. */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct pt_regs {
 | 
			
		||||
	long ebx;
 | 
			
		||||
	long ecx;
 | 
			
		||||
	long edx;
 | 
			
		||||
	long esi;
 | 
			
		||||
	long edi;
 | 
			
		||||
	long ebp;
 | 
			
		||||
	long eax;
 | 
			
		||||
	int  xds;
 | 
			
		||||
	int  xes;
 | 
			
		||||
	int  xfs;
 | 
			
		||||
	int  xgs;
 | 
			
		||||
	long orig_eax;
 | 
			
		||||
	long eip;
 | 
			
		||||
	int  xcs;
 | 
			
		||||
	long eflags;
 | 
			
		||||
	long esp;
 | 
			
		||||
	int  xss;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#else /* __i386__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct pt_regs {
 | 
			
		||||
/*
 | 
			
		||||
 * C ABI says these regs are callee-preserved. They aren't saved on kernel entry
 | 
			
		||||
 * unless syscall needs a complete, fully filled "struct pt_regs".
 | 
			
		||||
 */
 | 
			
		||||
	unsigned long r15;
 | 
			
		||||
	unsigned long r14;
 | 
			
		||||
	unsigned long r13;
 | 
			
		||||
	unsigned long r12;
 | 
			
		||||
	unsigned long rbp;
 | 
			
		||||
	unsigned long rbx;
 | 
			
		||||
/* These regs are callee-clobbered. Always saved on kernel entry. */
 | 
			
		||||
	unsigned long r11;
 | 
			
		||||
	unsigned long r10;
 | 
			
		||||
	unsigned long r9;
 | 
			
		||||
	unsigned long r8;
 | 
			
		||||
	unsigned long rax;
 | 
			
		||||
	unsigned long rcx;
 | 
			
		||||
	unsigned long rdx;
 | 
			
		||||
	unsigned long rsi;
 | 
			
		||||
	unsigned long rdi;
 | 
			
		||||
/*
 | 
			
		||||
 * On syscall entry, this is syscall#. On CPU exception, this is error code.
 | 
			
		||||
 * On hw interrupt, it's IRQ number:
 | 
			
		||||
 */
 | 
			
		||||
	unsigned long orig_rax;
 | 
			
		||||
/* Return frame for iretq */
 | 
			
		||||
	unsigned long rip;
 | 
			
		||||
	unsigned long cs;
 | 
			
		||||
	unsigned long eflags;
 | 
			
		||||
	unsigned long rsp;
 | 
			
		||||
	unsigned long ss;
 | 
			
		||||
/* top of stack page */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* !__i386__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* !__ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_PTRACE_H */
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/resource.h>
 | 
			
		||||
@@ -0,0 +1,24 @@
 | 
			
		||||
#ifndef _ASM_X86_SEMBUF_H
 | 
			
		||||
#define _ASM_X86_SEMBUF_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The semid64_ds structure for x86 architecture.
 | 
			
		||||
 * Note extra padding because this structure is passed back and forth
 | 
			
		||||
 * between kernel and user space.
 | 
			
		||||
 *
 | 
			
		||||
 * Pad space is left for:
 | 
			
		||||
 * - 64-bit time_t to solve y2038 problem
 | 
			
		||||
 * - 2 miscellaneous 32-bit values
 | 
			
		||||
 */
 | 
			
		||||
struct semid64_ds {
 | 
			
		||||
	struct ipc64_perm sem_perm;	/* permissions .. see ipc.h */
 | 
			
		||||
	__kernel_time_t	sem_otime;	/* last semop time */
 | 
			
		||||
	__kernel_ulong_t __unused1;
 | 
			
		||||
	__kernel_time_t	sem_ctime;	/* last change time */
 | 
			
		||||
	__kernel_ulong_t __unused2;
 | 
			
		||||
	__kernel_ulong_t sem_nsems;	/* no. of semaphores in array */
 | 
			
		||||
	__kernel_ulong_t __unused3;
 | 
			
		||||
	__kernel_ulong_t __unused4;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_SEMBUF_H */
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
/* */
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/shmbuf.h>
 | 
			
		||||
@@ -0,0 +1,351 @@
 | 
			
		||||
#ifndef _ASM_X86_SIGCONTEXT_H
 | 
			
		||||
#define _ASM_X86_SIGCONTEXT_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Linux signal context definitions. The sigcontext includes a complex
 | 
			
		||||
 * hierarchy of CPU and FPU state, available to user-space (on the stack) when
 | 
			
		||||
 * a signal handler is executed.
 | 
			
		||||
 *
 | 
			
		||||
 * As over the years this ABI grew from its very simple roots towards
 | 
			
		||||
 * supporting more and more CPU state organically, some of the details (which
 | 
			
		||||
 * were rather clever hacks back in the days) became a bit quirky by today.
 | 
			
		||||
 *
 | 
			
		||||
 * The current ABI includes flexible provisions for future extensions, so we
 | 
			
		||||
 * won't have to grow new quirks for quite some time. Promise!
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
 | 
			
		||||
#define FP_XSTATE_MAGIC1		0x46505853U
 | 
			
		||||
#define FP_XSTATE_MAGIC2		0x46505845U
 | 
			
		||||
#define FP_XSTATE_MAGIC2_SIZE		sizeof(FP_XSTATE_MAGIC2)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Bytes 464..511 in the current 512-byte layout of the FXSAVE/FXRSTOR frame
 | 
			
		||||
 * are reserved for SW usage. On CPUs supporting XSAVE/XRSTOR, these bytes are
 | 
			
		||||
 * used to extend the fpstate pointer in the sigcontext, which now includes the
 | 
			
		||||
 * extended state information along with fpstate information.
 | 
			
		||||
 *
 | 
			
		||||
 * If sw_reserved.magic1 == FP_XSTATE_MAGIC1 then there's a
 | 
			
		||||
 * sw_reserved.extended_size bytes large extended context area present. (The
 | 
			
		||||
 * last 32-bit word of this extended area (at the
 | 
			
		||||
 * fpstate+extended_size-FP_XSTATE_MAGIC2_SIZE address) is set to
 | 
			
		||||
 * FP_XSTATE_MAGIC2 so that you can sanity check your size calculations.)
 | 
			
		||||
 *
 | 
			
		||||
 * This extended area typically grows with newer CPUs that have larger and
 | 
			
		||||
 * larger XSAVE areas.
 | 
			
		||||
 */
 | 
			
		||||
struct _fpx_sw_bytes {
 | 
			
		||||
	/*
 | 
			
		||||
	 * If set to FP_XSTATE_MAGIC1 then this is an xstate context.
 | 
			
		||||
	 * 0 if a legacy frame.
 | 
			
		||||
	 */
 | 
			
		||||
	__u32				magic1;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Total size of the fpstate area:
 | 
			
		||||
	 *
 | 
			
		||||
	 *  - if magic1 == 0 then it's sizeof(struct _fpstate)
 | 
			
		||||
	 *  - if magic1 == FP_XSTATE_MAGIC1 then it's sizeof(struct _xstate)
 | 
			
		||||
	 *    plus extensions (if any)
 | 
			
		||||
	 */
 | 
			
		||||
	__u32				extended_size;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Feature bit mask (including FP/SSE/extended state) that is present
 | 
			
		||||
	 * in the memory layout:
 | 
			
		||||
	 */
 | 
			
		||||
	__u64				xfeatures;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Actual XSAVE state size, based on the xfeatures saved in the layout.
 | 
			
		||||
	 * 'extended_size' is greater than 'xstate_size':
 | 
			
		||||
	 */
 | 
			
		||||
	__u32				xstate_size;
 | 
			
		||||
 | 
			
		||||
	/* For future use: */
 | 
			
		||||
	__u32				padding[7];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * As documented in the iBCS2 standard:
 | 
			
		||||
 *
 | 
			
		||||
 * The first part of "struct _fpstate" is just the normal i387 hardware setup,
 | 
			
		||||
 * the extra "status" word is used to save the coprocessor status word before
 | 
			
		||||
 * entering the handler.
 | 
			
		||||
 *
 | 
			
		||||
 * The FPU state data structure has had to grow to accommodate the extended FPU
 | 
			
		||||
 * state required by the Streaming SIMD Extensions.  There is no documented
 | 
			
		||||
 * standard to accomplish this at the moment.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* 10-byte legacy floating point register: */
 | 
			
		||||
struct _fpreg {
 | 
			
		||||
	__u16				significand[4];
 | 
			
		||||
	__u16				exponent;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* 16-byte floating point register: */
 | 
			
		||||
struct _fpxreg {
 | 
			
		||||
	__u16				significand[4];
 | 
			
		||||
	__u16				exponent;
 | 
			
		||||
	__u16				padding[3];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* 16-byte XMM register: */
 | 
			
		||||
struct _xmmreg {
 | 
			
		||||
	__u32				element[4];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define X86_FXSR_MAGIC			0x0000
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The 32-bit FPU frame:
 | 
			
		||||
 */
 | 
			
		||||
struct _fpstate_32 {
 | 
			
		||||
	/* Legacy FPU environment: */
 | 
			
		||||
	__u32				cw;
 | 
			
		||||
	__u32				sw;
 | 
			
		||||
	__u32				tag;
 | 
			
		||||
	__u32				ipoff;
 | 
			
		||||
	__u32				cssel;
 | 
			
		||||
	__u32				dataoff;
 | 
			
		||||
	__u32				datasel;
 | 
			
		||||
	struct _fpreg			_st[8];
 | 
			
		||||
	__u16				status;
 | 
			
		||||
	__u16				magic;		/* 0xffff: regular FPU data only */
 | 
			
		||||
							/* 0x0000: FXSR FPU data */
 | 
			
		||||
 | 
			
		||||
	/* FXSR FPU environment */
 | 
			
		||||
	__u32				_fxsr_env[6];	/* FXSR FPU env is ignored */
 | 
			
		||||
	__u32				mxcsr;
 | 
			
		||||
	__u32				reserved;
 | 
			
		||||
	struct _fpxreg			_fxsr_st[8];	/* FXSR FPU reg data is ignored */
 | 
			
		||||
	struct _xmmreg			_xmm[8];	/* First 8 XMM registers */
 | 
			
		||||
	union {
 | 
			
		||||
		__u32			padding1[44];	/* Second 8 XMM registers plus padding */
 | 
			
		||||
		__u32			padding[44];	/* Alias name for old user-space */
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	union {
 | 
			
		||||
		__u32			padding2[12];
 | 
			
		||||
		struct _fpx_sw_bytes	sw_reserved;	/* Potential extended state is encoded here */
 | 
			
		||||
	};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The 64-bit FPU frame. (FXSAVE format and later)
 | 
			
		||||
 *
 | 
			
		||||
 * Note1: If sw_reserved.magic1 == FP_XSTATE_MAGIC1 then the structure is
 | 
			
		||||
 *        larger: 'struct _xstate'. Note that 'struct _xstate' embedds
 | 
			
		||||
 *        'struct _fpstate' so that you can always assume the _fpstate portion
 | 
			
		||||
 *        exists so that you can check the magic value.
 | 
			
		||||
 *
 | 
			
		||||
 * Note2: Reserved fields may someday contain valuable data. Always
 | 
			
		||||
 *	  save/restore them when you change signal frames.
 | 
			
		||||
 */
 | 
			
		||||
struct _fpstate_64 {
 | 
			
		||||
	__u16				cwd;
 | 
			
		||||
	__u16				swd;
 | 
			
		||||
	/* Note this is not the same as the 32-bit/x87/FSAVE twd: */
 | 
			
		||||
	__u16				twd;
 | 
			
		||||
	__u16				fop;
 | 
			
		||||
	__u64				rip;
 | 
			
		||||
	__u64				rdp;
 | 
			
		||||
	__u32				mxcsr;
 | 
			
		||||
	__u32				mxcsr_mask;
 | 
			
		||||
	__u32				st_space[32];	/*  8x  FP registers, 16 bytes each */
 | 
			
		||||
	__u32				xmm_space[64];	/* 16x XMM registers, 16 bytes each */
 | 
			
		||||
	__u32				reserved2[12];
 | 
			
		||||
	union {
 | 
			
		||||
		__u32			reserved3[12];
 | 
			
		||||
		struct _fpx_sw_bytes	sw_reserved;	/* Potential extended state is encoded here */
 | 
			
		||||
	};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef __i386__
 | 
			
		||||
# define _fpstate _fpstate_32
 | 
			
		||||
#else
 | 
			
		||||
# define _fpstate _fpstate_64
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct _header {
 | 
			
		||||
	__u64				xfeatures;
 | 
			
		||||
	__u64				reserved1[2];
 | 
			
		||||
	__u64				reserved2[5];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ymmh_state {
 | 
			
		||||
	/* 16x YMM registers, 16 bytes each: */
 | 
			
		||||
	__u32				ymmh_space[64];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Extended state pointed to by sigcontext::fpstate.
 | 
			
		||||
 *
 | 
			
		||||
 * In addition to the fpstate, information encoded in _xstate::xstate_hdr
 | 
			
		||||
 * indicates the presence of other extended state information supported
 | 
			
		||||
 * by the CPU and kernel:
 | 
			
		||||
 */
 | 
			
		||||
struct _xstate {
 | 
			
		||||
	struct _fpstate			fpstate;
 | 
			
		||||
	struct _header			xstate_hdr;
 | 
			
		||||
	struct _ymmh_state		ymmh;
 | 
			
		||||
	/* New processor state extensions go here: */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The 32-bit signal frame:
 | 
			
		||||
 */
 | 
			
		||||
struct sigcontext_32 {
 | 
			
		||||
	__u16				gs, __gsh;
 | 
			
		||||
	__u16				fs, __fsh;
 | 
			
		||||
	__u16				es, __esh;
 | 
			
		||||
	__u16				ds, __dsh;
 | 
			
		||||
	__u32				di;
 | 
			
		||||
	__u32				si;
 | 
			
		||||
	__u32				bp;
 | 
			
		||||
	__u32				sp;
 | 
			
		||||
	__u32				bx;
 | 
			
		||||
	__u32				dx;
 | 
			
		||||
	__u32				cx;
 | 
			
		||||
	__u32				ax;
 | 
			
		||||
	__u32				trapno;
 | 
			
		||||
	__u32				err;
 | 
			
		||||
	__u32				ip;
 | 
			
		||||
	__u16				cs, __csh;
 | 
			
		||||
	__u32				flags;
 | 
			
		||||
	__u32				sp_at_signal;
 | 
			
		||||
	__u16				ss, __ssh;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * fpstate is really (struct _fpstate *) or (struct _xstate *)
 | 
			
		||||
	 * depending on the FP_XSTATE_MAGIC1 encoded in the SW reserved
 | 
			
		||||
	 * bytes of (struct _fpstate) and FP_XSTATE_MAGIC2 present at the end
 | 
			
		||||
	 * of extended memory layout. See comments at the definition of
 | 
			
		||||
	 * (struct _fpx_sw_bytes)
 | 
			
		||||
	 */
 | 
			
		||||
	__u32				fpstate; /* Zero when no FPU/extended context */
 | 
			
		||||
	__u32				oldmask;
 | 
			
		||||
	__u32				cr2;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The 64-bit signal frame:
 | 
			
		||||
 */
 | 
			
		||||
struct sigcontext_64 {
 | 
			
		||||
	__u64				r8;
 | 
			
		||||
	__u64				r9;
 | 
			
		||||
	__u64				r10;
 | 
			
		||||
	__u64				r11;
 | 
			
		||||
	__u64				r12;
 | 
			
		||||
	__u64				r13;
 | 
			
		||||
	__u64				r14;
 | 
			
		||||
	__u64				r15;
 | 
			
		||||
	__u64				di;
 | 
			
		||||
	__u64				si;
 | 
			
		||||
	__u64				bp;
 | 
			
		||||
	__u64				bx;
 | 
			
		||||
	__u64				dx;
 | 
			
		||||
	__u64				ax;
 | 
			
		||||
	__u64				cx;
 | 
			
		||||
	__u64				sp;
 | 
			
		||||
	__u64				ip;
 | 
			
		||||
	__u64				flags;
 | 
			
		||||
	__u16				cs;
 | 
			
		||||
	__u16				gs;
 | 
			
		||||
	__u16				fs;
 | 
			
		||||
	__u16				__pad0;
 | 
			
		||||
	__u64				err;
 | 
			
		||||
	__u64				trapno;
 | 
			
		||||
	__u64				oldmask;
 | 
			
		||||
	__u64				cr2;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * fpstate is really (struct _fpstate *) or (struct _xstate *)
 | 
			
		||||
	 * depending on the FP_XSTATE_MAGIC1 encoded in the SW reserved
 | 
			
		||||
	 * bytes of (struct _fpstate) and FP_XSTATE_MAGIC2 present at the end
 | 
			
		||||
	 * of extended memory layout. See comments at the definition of
 | 
			
		||||
	 * (struct _fpx_sw_bytes)
 | 
			
		||||
	 */
 | 
			
		||||
	__u64				fpstate; /* Zero when no FPU/extended context */
 | 
			
		||||
	__u64				reserved1[8];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Create the real 'struct sigcontext' type:
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The old user-space sigcontext definition, just in case user-space still
 | 
			
		||||
 * relies on it. The kernel definition (in asm/sigcontext.h) has unified
 | 
			
		||||
 * field names but otherwise the same layout.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define _fpstate_ia32			_fpstate_32
 | 
			
		||||
#define sigcontext_ia32			sigcontext_32
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# ifdef __i386__
 | 
			
		||||
struct sigcontext {
 | 
			
		||||
	__u16				gs, __gsh;
 | 
			
		||||
	__u16				fs, __fsh;
 | 
			
		||||
	__u16				es, __esh;
 | 
			
		||||
	__u16				ds, __dsh;
 | 
			
		||||
	__u32				edi;
 | 
			
		||||
	__u32				esi;
 | 
			
		||||
	__u32				ebp;
 | 
			
		||||
	__u32				esp;
 | 
			
		||||
	__u32				ebx;
 | 
			
		||||
	__u32				edx;
 | 
			
		||||
	__u32				ecx;
 | 
			
		||||
	__u32				eax;
 | 
			
		||||
	__u32				trapno;
 | 
			
		||||
	__u32				err;
 | 
			
		||||
	__u32				eip;
 | 
			
		||||
	__u16				cs, __csh;
 | 
			
		||||
	__u32				eflags;
 | 
			
		||||
	__u32				esp_at_signal;
 | 
			
		||||
	__u16				ss, __ssh;
 | 
			
		||||
	struct _fpstate 	*fpstate;
 | 
			
		||||
	__u32				oldmask;
 | 
			
		||||
	__u32				cr2;
 | 
			
		||||
};
 | 
			
		||||
# else /* __x86_64__: */
 | 
			
		||||
struct sigcontext {
 | 
			
		||||
	__u64				r8;
 | 
			
		||||
	__u64				r9;
 | 
			
		||||
	__u64				r10;
 | 
			
		||||
	__u64				r11;
 | 
			
		||||
	__u64				r12;
 | 
			
		||||
	__u64				r13;
 | 
			
		||||
	__u64				r14;
 | 
			
		||||
	__u64				r15;
 | 
			
		||||
	__u64				rdi;
 | 
			
		||||
	__u64				rsi;
 | 
			
		||||
	__u64				rbp;
 | 
			
		||||
	__u64				rbx;
 | 
			
		||||
	__u64				rdx;
 | 
			
		||||
	__u64				rax;
 | 
			
		||||
	__u64				rcx;
 | 
			
		||||
	__u64				rsp;
 | 
			
		||||
	__u64				rip;
 | 
			
		||||
	__u64				eflags;		/* RFLAGS */
 | 
			
		||||
	__u16				cs;
 | 
			
		||||
	__u16				gs;
 | 
			
		||||
	__u16				fs;
 | 
			
		||||
	__u16				__pad0;
 | 
			
		||||
	__u64				err;
 | 
			
		||||
	__u64				trapno;
 | 
			
		||||
	__u64				oldmask;
 | 
			
		||||
	__u64				cr2;
 | 
			
		||||
	struct _fpstate 	*fpstate;	/* Zero when no FPU context */
 | 
			
		||||
#  ifdef __ILP32__
 | 
			
		||||
	__u32				__fpstate_pad;
 | 
			
		||||
#  endif
 | 
			
		||||
	__u64				reserved1[8];
 | 
			
		||||
};
 | 
			
		||||
# endif /* __x86_64__ */
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_SIGCONTEXT_H */
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
#ifndef _ASM_X86_SIGCONTEXT32_H
 | 
			
		||||
#define _ASM_X86_SIGCONTEXT32_H
 | 
			
		||||
 | 
			
		||||
/* This is a legacy file - all the type definitions are in sigcontext.h: */
 | 
			
		||||
 | 
			
		||||
#include <asm/sigcontext.h>
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_SIGCONTEXT32_H */
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
#ifndef _ASM_X86_SIGINFO_H
 | 
			
		||||
#define _ASM_X86_SIGINFO_H
 | 
			
		||||
 | 
			
		||||
#ifdef __x86_64__
 | 
			
		||||
# ifdef __ILP32__ /* x32 */
 | 
			
		||||
typedef long long __kernel_si_clock_t __attribute__((aligned(4)));
 | 
			
		||||
#  define __ARCH_SI_CLOCK_T		__kernel_si_clock_t
 | 
			
		||||
#  define __ARCH_SI_ATTRIBUTES		__attribute__((aligned(8)))
 | 
			
		||||
# else /* x86-64 */
 | 
			
		||||
#  define __ARCH_SI_PREAMBLE_SIZE	(4 * sizeof(int))
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <asm-generic/siginfo.h>
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_SIGINFO_H */
 | 
			
		||||
@@ -0,0 +1,131 @@
 | 
			
		||||
#ifndef _ASM_X86_SIGNAL_H
 | 
			
		||||
#define _ASM_X86_SIGNAL_H
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/time.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Avoid too many header ordering problems.  */
 | 
			
		||||
struct siginfo;
 | 
			
		||||
 | 
			
		||||
/* Here we must cater to libcs that poke about in kernel headers.  */
 | 
			
		||||
 | 
			
		||||
#define NSIG		32
 | 
			
		||||
typedef unsigned long sigset_t;
 | 
			
		||||
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SIGHUP		 1
 | 
			
		||||
#define SIGINT		 2
 | 
			
		||||
#define SIGQUIT		 3
 | 
			
		||||
#define SIGILL		 4
 | 
			
		||||
#define SIGTRAP		 5
 | 
			
		||||
#define SIGABRT		 6
 | 
			
		||||
#define SIGIOT		 6
 | 
			
		||||
#define SIGBUS		 7
 | 
			
		||||
#define SIGFPE		 8
 | 
			
		||||
#define SIGKILL		 9
 | 
			
		||||
#define SIGUSR1		10
 | 
			
		||||
#define SIGSEGV		11
 | 
			
		||||
#define SIGUSR2		12
 | 
			
		||||
#define SIGPIPE		13
 | 
			
		||||
#define SIGALRM		14
 | 
			
		||||
#define SIGTERM		15
 | 
			
		||||
#define SIGSTKFLT	16
 | 
			
		||||
#define SIGCHLD		17
 | 
			
		||||
#define SIGCONT		18
 | 
			
		||||
#define SIGSTOP		19
 | 
			
		||||
#define SIGTSTP		20
 | 
			
		||||
#define SIGTTIN		21
 | 
			
		||||
#define SIGTTOU		22
 | 
			
		||||
#define SIGURG		23
 | 
			
		||||
#define SIGXCPU		24
 | 
			
		||||
#define SIGXFSZ		25
 | 
			
		||||
#define SIGVTALRM	26
 | 
			
		||||
#define SIGPROF		27
 | 
			
		||||
#define SIGWINCH	28
 | 
			
		||||
#define SIGIO		29
 | 
			
		||||
#define SIGPOLL		SIGIO
 | 
			
		||||
/*
 | 
			
		||||
#define SIGLOST		29
 | 
			
		||||
*/
 | 
			
		||||
#define SIGPWR		30
 | 
			
		||||
#define SIGSYS		31
 | 
			
		||||
#define	SIGUNUSED	31
 | 
			
		||||
 | 
			
		||||
/* These should not be considered constants from userland.  */
 | 
			
		||||
#define SIGRTMIN	32
 | 
			
		||||
#define SIGRTMAX	_NSIG
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SA_FLAGS values:
 | 
			
		||||
 *
 | 
			
		||||
 * SA_ONSTACK indicates that a registered stack_t will be used.
 | 
			
		||||
 * SA_RESTART flag to get restarting signals (which were the default long ago)
 | 
			
		||||
 * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
 | 
			
		||||
 * SA_RESETHAND clears the handler when the signal is delivered.
 | 
			
		||||
 * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
 | 
			
		||||
 * SA_NODEFER prevents the current signal from being masked in the handler.
 | 
			
		||||
 *
 | 
			
		||||
 * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
 | 
			
		||||
 * Unix names RESETHAND and NODEFER respectively.
 | 
			
		||||
 */
 | 
			
		||||
#define SA_NOCLDSTOP	0x00000001u
 | 
			
		||||
#define SA_NOCLDWAIT	0x00000002u
 | 
			
		||||
#define SA_SIGINFO	0x00000004u
 | 
			
		||||
#define SA_ONSTACK	0x08000000u
 | 
			
		||||
#define SA_RESTART	0x10000000u
 | 
			
		||||
#define SA_NODEFER	0x40000000u
 | 
			
		||||
#define SA_RESETHAND	0x80000000u
 | 
			
		||||
 | 
			
		||||
#define SA_NOMASK	SA_NODEFER
 | 
			
		||||
#define SA_ONESHOT	SA_RESETHAND
 | 
			
		||||
 | 
			
		||||
#define SA_RESTORER	0x04000000
 | 
			
		||||
 | 
			
		||||
#define MINSIGSTKSZ	2048
 | 
			
		||||
#define SIGSTKSZ	8192
 | 
			
		||||
 | 
			
		||||
#include <asm-generic/signal-defs.h>
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Here we must cater to libcs that poke about in kernel headers.  */
 | 
			
		||||
#ifdef __i386__
 | 
			
		||||
 | 
			
		||||
struct sigaction {
 | 
			
		||||
	union {
 | 
			
		||||
	  __sighandler_t _sa_handler;
 | 
			
		||||
	  void (*_sa_sigaction)(int, struct siginfo *, void *);
 | 
			
		||||
	} _u;
 | 
			
		||||
	sigset_t sa_mask;
 | 
			
		||||
	unsigned long sa_flags;
 | 
			
		||||
	void (*sa_restorer)(void);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define sa_handler	_u._sa_handler
 | 
			
		||||
#define sa_sigaction	_u._sa_sigaction
 | 
			
		||||
 | 
			
		||||
#else /* __i386__ */
 | 
			
		||||
 | 
			
		||||
struct sigaction {
 | 
			
		||||
	__sighandler_t sa_handler;
 | 
			
		||||
	unsigned long sa_flags;
 | 
			
		||||
	__sigrestore_t sa_restorer;
 | 
			
		||||
	sigset_t sa_mask;		/* mask last for extensibility */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* !__i386__ */
 | 
			
		||||
 | 
			
		||||
typedef struct sigaltstack {
 | 
			
		||||
	void *ss_sp;
 | 
			
		||||
	int ss_flags;
 | 
			
		||||
	size_t ss_size;
 | 
			
		||||
} stack_t;
 | 
			
		||||
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_SIGNAL_H */
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/socket.h>
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
#include <asm-generic/sockios.h>
 | 
			
		||||
@@ -0,0 +1,137 @@
 | 
			
		||||
#ifndef _ASM_X86_STAT_H
 | 
			
		||||
#define _ASM_X86_STAT_H
 | 
			
		||||
 | 
			
		||||
#include <asm/posix_types.h>
 | 
			
		||||
 | 
			
		||||
#define STAT_HAVE_NSEC 1
 | 
			
		||||
 | 
			
		||||
#ifdef __i386__
 | 
			
		||||
struct stat {
 | 
			
		||||
	unsigned long  st_dev;
 | 
			
		||||
	unsigned long  st_ino;
 | 
			
		||||
	unsigned short st_mode;
 | 
			
		||||
	unsigned short st_nlink;
 | 
			
		||||
	unsigned short st_uid;
 | 
			
		||||
	unsigned short st_gid;
 | 
			
		||||
	unsigned long  st_rdev;
 | 
			
		||||
	unsigned long  st_size;
 | 
			
		||||
	unsigned long  st_blksize;
 | 
			
		||||
	unsigned long  st_blocks;
 | 
			
		||||
	unsigned long  st_atime;
 | 
			
		||||
	unsigned long  st_atime_nsec;
 | 
			
		||||
	unsigned long  st_mtime;
 | 
			
		||||
	unsigned long  st_mtime_nsec;
 | 
			
		||||
	unsigned long  st_ctime;
 | 
			
		||||
	unsigned long  st_ctime_nsec;
 | 
			
		||||
	unsigned long  __unused4;
 | 
			
		||||
	unsigned long  __unused5;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* We don't need to memset the whole thing just to initialize the padding */
 | 
			
		||||
#define INIT_STRUCT_STAT_PADDING(st) do {	\
 | 
			
		||||
	st.__unused4 = 0;			\
 | 
			
		||||
	st.__unused5 = 0;			\
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
#define STAT64_HAS_BROKEN_ST_INO	1
 | 
			
		||||
 | 
			
		||||
/* This matches struct stat64 in glibc2.1, hence the absolutely
 | 
			
		||||
 * insane amounts of padding around dev_t's.
 | 
			
		||||
 */
 | 
			
		||||
struct stat64 {
 | 
			
		||||
	unsigned long long	st_dev;
 | 
			
		||||
	unsigned char	__pad0[4];
 | 
			
		||||
 | 
			
		||||
	unsigned long	__st_ino;
 | 
			
		||||
 | 
			
		||||
	unsigned int	st_mode;
 | 
			
		||||
	unsigned int	st_nlink;
 | 
			
		||||
 | 
			
		||||
	unsigned long	st_uid;
 | 
			
		||||
	unsigned long	st_gid;
 | 
			
		||||
 | 
			
		||||
	unsigned long long	st_rdev;
 | 
			
		||||
	unsigned char	__pad3[4];
 | 
			
		||||
 | 
			
		||||
	long long	st_size;
 | 
			
		||||
	unsigned long	st_blksize;
 | 
			
		||||
 | 
			
		||||
	/* Number 512-byte blocks allocated. */
 | 
			
		||||
	unsigned long long	st_blocks;
 | 
			
		||||
 | 
			
		||||
	unsigned long	st_atime;
 | 
			
		||||
	unsigned long	st_atime_nsec;
 | 
			
		||||
 | 
			
		||||
	unsigned long	st_mtime;
 | 
			
		||||
	unsigned int	st_mtime_nsec;
 | 
			
		||||
 | 
			
		||||
	unsigned long	st_ctime;
 | 
			
		||||
	unsigned long	st_ctime_nsec;
 | 
			
		||||
 | 
			
		||||
	unsigned long long	st_ino;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* We don't need to memset the whole thing just to initialize the padding */
 | 
			
		||||
#define INIT_STRUCT_STAT64_PADDING(st) do {		\
 | 
			
		||||
	memset(&st.__pad0, 0, sizeof(st.__pad0));	\
 | 
			
		||||
	memset(&st.__pad3, 0, sizeof(st.__pad3));	\
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
#else /* __i386__ */
 | 
			
		||||
 | 
			
		||||
struct stat {
 | 
			
		||||
	__kernel_ulong_t	st_dev;
 | 
			
		||||
	__kernel_ulong_t	st_ino;
 | 
			
		||||
	__kernel_ulong_t	st_nlink;
 | 
			
		||||
 | 
			
		||||
	unsigned int		st_mode;
 | 
			
		||||
	unsigned int		st_uid;
 | 
			
		||||
	unsigned int		st_gid;
 | 
			
		||||
	unsigned int		__pad0;
 | 
			
		||||
	__kernel_ulong_t	st_rdev;
 | 
			
		||||
	__kernel_long_t		st_size;
 | 
			
		||||
	__kernel_long_t		st_blksize;
 | 
			
		||||
	__kernel_long_t		st_blocks;	/* Number 512-byte blocks allocated. */
 | 
			
		||||
 | 
			
		||||
	__kernel_ulong_t	st_atime;
 | 
			
		||||
	__kernel_ulong_t	st_atime_nsec;
 | 
			
		||||
	__kernel_ulong_t	st_mtime;
 | 
			
		||||
	__kernel_ulong_t	st_mtime_nsec;
 | 
			
		||||
	__kernel_ulong_t	st_ctime;
 | 
			
		||||
	__kernel_ulong_t	st_ctime_nsec;
 | 
			
		||||
	__kernel_long_t		__unused[3];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* We don't need to memset the whole thing just to initialize the padding */
 | 
			
		||||
#define INIT_STRUCT_STAT_PADDING(st) do {	\
 | 
			
		||||
	st.__pad0 = 0;				\
 | 
			
		||||
	st.__unused[0] = 0;			\
 | 
			
		||||
	st.__unused[1] = 0;			\
 | 
			
		||||
	st.__unused[2] = 0;			\
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* for 32bit emulation and 32 bit kernels */
 | 
			
		||||
struct __old_kernel_stat {
 | 
			
		||||
	unsigned short st_dev;
 | 
			
		||||
	unsigned short st_ino;
 | 
			
		||||
	unsigned short st_mode;
 | 
			
		||||
	unsigned short st_nlink;
 | 
			
		||||
	unsigned short st_uid;
 | 
			
		||||
	unsigned short st_gid;
 | 
			
		||||
	unsigned short st_rdev;
 | 
			
		||||
#ifdef __i386__
 | 
			
		||||
	unsigned long  st_size;
 | 
			
		||||
	unsigned long  st_atime;
 | 
			
		||||
	unsigned long  st_mtime;
 | 
			
		||||
	unsigned long  st_ctime;
 | 
			
		||||
#else
 | 
			
		||||
	unsigned int  st_size;
 | 
			
		||||
	unsigned int  st_atime;
 | 
			
		||||
	unsigned int  st_mtime;
 | 
			
		||||
	unsigned int  st_ctime;
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_STAT_H */
 | 
			
		||||
@@ -0,0 +1,12 @@
 | 
			
		||||
#ifndef _ASM_X86_STATFS_H
 | 
			
		||||
#define _ASM_X86_STATFS_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * We need compat_statfs64 to be packed, because the i386 ABI won't
 | 
			
		||||
 * add padding at the end to bring it to a multiple of 8 bytes, but
 | 
			
		||||
 * the x86_64 ABI will.
 | 
			
		||||
 */
 | 
			
		||||
#define ARCH_PACK_COMPAT_STATFS64 __attribute__((packed,aligned(4)))
 | 
			
		||||
 | 
			
		||||
#include <asm-generic/statfs.h>
 | 
			
		||||
#endif /* _ASM_X86_STATFS_H */
 | 
			
		||||
@@ -0,0 +1,133 @@
 | 
			
		||||
#ifndef __SVM_H
 | 
			
		||||
#define __SVM_H
 | 
			
		||||
 | 
			
		||||
#define SVM_EXIT_READ_CR0      0x000
 | 
			
		||||
#define SVM_EXIT_READ_CR3      0x003
 | 
			
		||||
#define SVM_EXIT_READ_CR4      0x004
 | 
			
		||||
#define SVM_EXIT_READ_CR8      0x008
 | 
			
		||||
#define SVM_EXIT_WRITE_CR0     0x010
 | 
			
		||||
#define SVM_EXIT_WRITE_CR3     0x013
 | 
			
		||||
#define SVM_EXIT_WRITE_CR4     0x014
 | 
			
		||||
#define SVM_EXIT_WRITE_CR8     0x018
 | 
			
		||||
#define SVM_EXIT_READ_DR0      0x020
 | 
			
		||||
#define SVM_EXIT_READ_DR1      0x021
 | 
			
		||||
#define SVM_EXIT_READ_DR2      0x022
 | 
			
		||||
#define SVM_EXIT_READ_DR3      0x023
 | 
			
		||||
#define SVM_EXIT_READ_DR4      0x024
 | 
			
		||||
#define SVM_EXIT_READ_DR5      0x025
 | 
			
		||||
#define SVM_EXIT_READ_DR6      0x026
 | 
			
		||||
#define SVM_EXIT_READ_DR7      0x027
 | 
			
		||||
#define SVM_EXIT_WRITE_DR0     0x030
 | 
			
		||||
#define SVM_EXIT_WRITE_DR1     0x031
 | 
			
		||||
#define SVM_EXIT_WRITE_DR2     0x032
 | 
			
		||||
#define SVM_EXIT_WRITE_DR3     0x033
 | 
			
		||||
#define SVM_EXIT_WRITE_DR4     0x034
 | 
			
		||||
#define SVM_EXIT_WRITE_DR5     0x035
 | 
			
		||||
#define SVM_EXIT_WRITE_DR6     0x036
 | 
			
		||||
#define SVM_EXIT_WRITE_DR7     0x037
 | 
			
		||||
#define SVM_EXIT_EXCP_BASE     0x040
 | 
			
		||||
#define SVM_EXIT_INTR          0x060
 | 
			
		||||
#define SVM_EXIT_NMI           0x061
 | 
			
		||||
#define SVM_EXIT_SMI           0x062
 | 
			
		||||
#define SVM_EXIT_INIT          0x063
 | 
			
		||||
#define SVM_EXIT_VINTR         0x064
 | 
			
		||||
#define SVM_EXIT_CR0_SEL_WRITE 0x065
 | 
			
		||||
#define SVM_EXIT_IDTR_READ     0x066
 | 
			
		||||
#define SVM_EXIT_GDTR_READ     0x067
 | 
			
		||||
#define SVM_EXIT_LDTR_READ     0x068
 | 
			
		||||
#define SVM_EXIT_TR_READ       0x069
 | 
			
		||||
#define SVM_EXIT_IDTR_WRITE    0x06a
 | 
			
		||||
#define SVM_EXIT_GDTR_WRITE    0x06b
 | 
			
		||||
#define SVM_EXIT_LDTR_WRITE    0x06c
 | 
			
		||||
#define SVM_EXIT_TR_WRITE      0x06d
 | 
			
		||||
#define SVM_EXIT_RDTSC         0x06e
 | 
			
		||||
#define SVM_EXIT_RDPMC         0x06f
 | 
			
		||||
#define SVM_EXIT_PUSHF         0x070
 | 
			
		||||
#define SVM_EXIT_POPF          0x071
 | 
			
		||||
#define SVM_EXIT_CPUID         0x072
 | 
			
		||||
#define SVM_EXIT_RSM           0x073
 | 
			
		||||
#define SVM_EXIT_IRET          0x074
 | 
			
		||||
#define SVM_EXIT_SWINT         0x075
 | 
			
		||||
#define SVM_EXIT_INVD          0x076
 | 
			
		||||
#define SVM_EXIT_PAUSE         0x077
 | 
			
		||||
#define SVM_EXIT_HLT           0x078
 | 
			
		||||
#define SVM_EXIT_INVLPG        0x079
 | 
			
		||||
#define SVM_EXIT_INVLPGA       0x07a
 | 
			
		||||
#define SVM_EXIT_IOIO          0x07b
 | 
			
		||||
#define SVM_EXIT_MSR           0x07c
 | 
			
		||||
#define SVM_EXIT_TASK_SWITCH   0x07d
 | 
			
		||||
#define SVM_EXIT_FERR_FREEZE   0x07e
 | 
			
		||||
#define SVM_EXIT_SHUTDOWN      0x07f
 | 
			
		||||
#define SVM_EXIT_VMRUN         0x080
 | 
			
		||||
#define SVM_EXIT_VMMCALL       0x081
 | 
			
		||||
#define SVM_EXIT_VMLOAD        0x082
 | 
			
		||||
#define SVM_EXIT_VMSAVE        0x083
 | 
			
		||||
#define SVM_EXIT_STGI          0x084
 | 
			
		||||
#define SVM_EXIT_CLGI          0x085
 | 
			
		||||
#define SVM_EXIT_SKINIT        0x086
 | 
			
		||||
#define SVM_EXIT_RDTSCP        0x087
 | 
			
		||||
#define SVM_EXIT_ICEBP         0x088
 | 
			
		||||
#define SVM_EXIT_WBINVD        0x089
 | 
			
		||||
#define SVM_EXIT_MONITOR       0x08a
 | 
			
		||||
#define SVM_EXIT_MWAIT         0x08b
 | 
			
		||||
#define SVM_EXIT_MWAIT_COND    0x08c
 | 
			
		||||
#define SVM_EXIT_XSETBV        0x08d
 | 
			
		||||
#define SVM_EXIT_NPF           0x400
 | 
			
		||||
 | 
			
		||||
#define SVM_EXIT_ERR           -1
 | 
			
		||||
 | 
			
		||||
#define SVM_EXIT_REASONS \
 | 
			
		||||
	{ SVM_EXIT_READ_CR0,    "read_cr0" }, \
 | 
			
		||||
	{ SVM_EXIT_READ_CR3,    "read_cr3" }, \
 | 
			
		||||
	{ SVM_EXIT_READ_CR4,    "read_cr4" }, \
 | 
			
		||||
	{ SVM_EXIT_READ_CR8,    "read_cr8" }, \
 | 
			
		||||
	{ SVM_EXIT_WRITE_CR0,   "write_cr0" }, \
 | 
			
		||||
	{ SVM_EXIT_WRITE_CR3,   "write_cr3" }, \
 | 
			
		||||
	{ SVM_EXIT_WRITE_CR4,   "write_cr4" }, \
 | 
			
		||||
	{ SVM_EXIT_WRITE_CR8,   "write_cr8" }, \
 | 
			
		||||
	{ SVM_EXIT_READ_DR0,    "read_dr0" }, \
 | 
			
		||||
	{ SVM_EXIT_READ_DR1,    "read_dr1" }, \
 | 
			
		||||
	{ SVM_EXIT_READ_DR2,    "read_dr2" }, \
 | 
			
		||||
	{ SVM_EXIT_READ_DR3,    "read_dr3" }, \
 | 
			
		||||
	{ SVM_EXIT_WRITE_DR0,   "write_dr0" }, \
 | 
			
		||||
	{ SVM_EXIT_WRITE_DR1,   "write_dr1" }, \
 | 
			
		||||
	{ SVM_EXIT_WRITE_DR2,   "write_dr2" }, \
 | 
			
		||||
	{ SVM_EXIT_WRITE_DR3,   "write_dr3" }, \
 | 
			
		||||
	{ SVM_EXIT_WRITE_DR5,   "write_dr5" }, \
 | 
			
		||||
	{ SVM_EXIT_WRITE_DR7,   "write_dr7" }, \
 | 
			
		||||
	{ SVM_EXIT_EXCP_BASE + DB_VECTOR,       "DB excp" }, \
 | 
			
		||||
	{ SVM_EXIT_EXCP_BASE + BP_VECTOR,       "BP excp" }, \
 | 
			
		||||
	{ SVM_EXIT_EXCP_BASE + UD_VECTOR,       "UD excp" }, \
 | 
			
		||||
	{ SVM_EXIT_EXCP_BASE + PF_VECTOR,       "PF excp" }, \
 | 
			
		||||
	{ SVM_EXIT_EXCP_BASE + NM_VECTOR,       "NM excp" }, \
 | 
			
		||||
	{ SVM_EXIT_EXCP_BASE + AC_VECTOR,       "AC excp" }, \
 | 
			
		||||
	{ SVM_EXIT_EXCP_BASE + MC_VECTOR,       "MC excp" }, \
 | 
			
		||||
	{ SVM_EXIT_INTR,        "interrupt" }, \
 | 
			
		||||
	{ SVM_EXIT_NMI,         "nmi" }, \
 | 
			
		||||
	{ SVM_EXIT_SMI,         "smi" }, \
 | 
			
		||||
	{ SVM_EXIT_INIT,        "init" }, \
 | 
			
		||||
	{ SVM_EXIT_VINTR,       "vintr" }, \
 | 
			
		||||
	{ SVM_EXIT_CPUID,       "cpuid" }, \
 | 
			
		||||
	{ SVM_EXIT_INVD,        "invd" }, \
 | 
			
		||||
	{ SVM_EXIT_HLT,         "hlt" }, \
 | 
			
		||||
	{ SVM_EXIT_INVLPG,      "invlpg" }, \
 | 
			
		||||
	{ SVM_EXIT_INVLPGA,     "invlpga" }, \
 | 
			
		||||
	{ SVM_EXIT_IOIO,        "io" }, \
 | 
			
		||||
	{ SVM_EXIT_MSR,         "msr" }, \
 | 
			
		||||
	{ SVM_EXIT_TASK_SWITCH, "task_switch" }, \
 | 
			
		||||
	{ SVM_EXIT_SHUTDOWN,    "shutdown" }, \
 | 
			
		||||
	{ SVM_EXIT_VMRUN,       "vmrun" }, \
 | 
			
		||||
	{ SVM_EXIT_VMMCALL,     "hypercall" }, \
 | 
			
		||||
	{ SVM_EXIT_VMLOAD,      "vmload" }, \
 | 
			
		||||
	{ SVM_EXIT_VMSAVE,      "vmsave" }, \
 | 
			
		||||
	{ SVM_EXIT_STGI,        "stgi" }, \
 | 
			
		||||
	{ SVM_EXIT_CLGI,        "clgi" }, \
 | 
			
		||||
	{ SVM_EXIT_SKINIT,      "skinit" }, \
 | 
			
		||||
	{ SVM_EXIT_WBINVD,      "wbinvd" }, \
 | 
			
		||||
	{ SVM_EXIT_MONITOR,     "monitor" }, \
 | 
			
		||||
	{ SVM_EXIT_MWAIT,       "mwait" }, \
 | 
			
		||||
	{ SVM_EXIT_XSETBV,      "xsetbv" }, \
 | 
			
		||||
	{ SVM_EXIT_NPF,         "npf" }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* __SVM_H */
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user