diff options
Diffstat (limited to 'include/uapi')
163 files changed, 6902 insertions, 737 deletions
diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h index a1331ce5044..1e1ea6e6e7a 100644 --- a/include/uapi/asm-generic/errno.h +++ b/include/uapi/asm-generic/errno.h @@ -86,7 +86,7 @@  #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 NFS file handle */ +#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 */ diff --git a/include/uapi/asm-generic/fcntl.h b/include/uapi/asm-generic/fcntl.h index 95e46c8e05f..7543b3e5133 100644 --- a/include/uapi/asm-generic/fcntl.h +++ b/include/uapi/asm-generic/fcntl.h @@ -132,6 +132,22 @@  #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 @@ -186,8 +202,6 @@ struct flock {  };  #endif -#ifndef CONFIG_64BIT -  #ifndef HAVE_ARCH_STRUCT_FLOCK64  #ifndef __ARCH_FLOCK64_PAD  #define __ARCH_FLOCK64_PAD @@ -202,6 +216,5 @@ struct flock64 {  	__ARCH_FLOCK64_PAD  };  #endif -#endif /* !CONFIG_64BIT */  #endif /* _ASM_GENERIC_FCNTL_H */ diff --git a/include/uapi/asm-generic/ipcbuf.h b/include/uapi/asm-generic/ipcbuf.h index 76982b2a1b5..3dbcc1e771c 100644 --- a/include/uapi/asm-generic/ipcbuf.h +++ b/include/uapi/asm-generic/ipcbuf.h @@ -27,8 +27,8 @@ struct ipc64_perm {  	unsigned char		__pad1[4 - sizeof(__kernel_mode_t)];  	unsigned short		seq;  	unsigned short		__pad2; -	unsigned long		__unused1; -	unsigned long		__unused2; +	__kernel_ulong_t	__unused1; +	__kernel_ulong_t	__unused2;  };  #endif /* __ASM_GENERIC_IPCBUF_H */ diff --git a/include/uapi/asm-generic/mman-common.h b/include/uapi/asm-generic/mman-common.h index 4164529a94f..ddc3b36f104 100644 --- a/include/uapi/asm-generic/mman-common.h +++ b/include/uapi/asm-generic/mman-common.h @@ -50,7 +50,7 @@  #define MADV_DONTDUMP   16		/* Explicity exclude from the core dump,  					   overrides the coredump filter bits */ -#define MADV_DODUMP	17		/* Clear the MADV_NODUMP flag */ +#define MADV_DODUMP	17		/* Clear the MADV_DONTDUMP flag */  /* compatibility flags */  #define MAP_FILE	0 diff --git a/include/uapi/asm-generic/msgbuf.h b/include/uapi/asm-generic/msgbuf.h index aec850d9159..f55ecc43c60 100644 --- a/include/uapi/asm-generic/msgbuf.h +++ b/include/uapi/asm-generic/msgbuf.h @@ -35,13 +35,13 @@ struct msqid64_ds {  #if __BITS_PER_LONG != 64  	unsigned long	__unused3;  #endif -	unsigned long  msg_cbytes;	/* current number of bytes on queue */ -	unsigned long  msg_qnum;	/* number of messages in queue */ -	unsigned long  msg_qbytes;	/* max number of bytes on queue */ +	__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 */ -	unsigned long  __unused4; -	unsigned long  __unused5; +	__kernel_ulong_t __unused4; +	__kernel_ulong_t __unused5;  };  #endif /* __ASM_GENERIC_MSGBUF_H */ diff --git a/include/uapi/asm-generic/resource.h b/include/uapi/asm-generic/resource.h index f863428796d..c6d10af5012 100644 --- a/include/uapi/asm-generic/resource.h +++ b/include/uapi/asm-generic/resource.h @@ -57,12 +57,5 @@  # define RLIM_INFINITY		(~0UL)  #endif -/* - * RLIMIT_STACK default maximum - some architectures override it: - */ -#ifndef _STK_LIM_MAX -# define _STK_LIM_MAX		RLIM_INFINITY -#endif -  #endif /* _UAPI_ASM_GENERIC_RESOURCE_H */ diff --git a/include/uapi/asm-generic/shmbuf.h b/include/uapi/asm-generic/shmbuf.h index 5768fa60ac8..7e9fb2f0853 100644 --- a/include/uapi/asm-generic/shmbuf.h +++ b/include/uapi/asm-generic/shmbuf.h @@ -39,21 +39,21 @@ struct shmid64_ds {  #endif  	__kernel_pid_t		shm_cpid;	/* pid of creator */  	__kernel_pid_t		shm_lpid;	/* pid of last operator */ -	unsigned long		shm_nattch;	/* no. of current attaches */ -	unsigned long		__unused4; -	unsigned long		__unused5; +	__kernel_ulong_t	shm_nattch;	/* no. of current attaches */ +	__kernel_ulong_t	__unused4; +	__kernel_ulong_t	__unused5;  };  struct shminfo64 { -	unsigned long	shmmax; -	unsigned long	shmmin; -	unsigned long	shmmni; -	unsigned long	shmseg; -	unsigned long	shmall; -	unsigned long	__unused1; -	unsigned long	__unused2; -	unsigned long	__unused3; -	unsigned long	__unused4; +	__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 */ diff --git a/include/uapi/asm-generic/socket.h b/include/uapi/asm-generic/socket.h index f04b69b6abf..ea0796bdcf8 100644 --- a/include/uapi/asm-generic/socket.h +++ b/include/uapi/asm-generic/socket.h @@ -78,4 +78,8 @@  #define SO_BUSY_POLL		46 +#define SO_MAX_PACING_RATE	47 + +#define SO_BPF_EXTENSIONS	48 +  #endif /* __ASM_GENERIC_SOCKET_H */ diff --git a/include/uapi/asm-generic/statfs.h b/include/uapi/asm-generic/statfs.h index 0999647fca1..cb89cc730f0 100644 --- a/include/uapi/asm-generic/statfs.h +++ b/include/uapi/asm-generic/statfs.h @@ -13,7 +13,7 @@   */  #ifndef __statfs_word  #if __BITS_PER_LONG == 64 -#define __statfs_word long +#define __statfs_word __kernel_long_t  #else  #define __statfs_word __u32  #endif diff --git a/include/uapi/asm-generic/types.h b/include/uapi/asm-generic/types.h index bd39806013b..a3877926b0d 100644 --- a/include/uapi/asm-generic/types.h +++ b/include/uapi/asm-generic/types.h @@ -1,8 +1,7 @@  #ifndef _ASM_GENERIC_TYPES_H  #define _ASM_GENERIC_TYPES_H  /* - * int-ll64 is used practically everywhere now, - * so use it as a reasonable default. + * int-ll64 is used everywhere now.   */  #include <asm-generic/int-ll64.h> diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h index a20a9b4d387..33364060808 100644 --- a/include/uapi/asm-generic/unistd.h +++ b/include/uapi/asm-generic/unistd.h @@ -191,6 +191,7 @@ __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 */ @@ -692,9 +693,15 @@ __SC_COMP(__NR_process_vm_writev, sys_process_vm_writev, \  __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)  #undef __NR_syscalls -#define __NR_syscalls 274 +#define __NR_syscalls 277  /*   * All syscalls below here should go away really, diff --git a/include/uapi/drm/armada_drm.h b/include/uapi/drm/armada_drm.h new file mode 100644 index 00000000000..8dec3fdc99c --- /dev/null +++ b/include/uapi/drm/armada_drm.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2012 Russell King + *  With inspiration from the i915 driver + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#ifndef DRM_ARMADA_IOCTL_H +#define DRM_ARMADA_IOCTL_H + +#define DRM_ARMADA_GEM_CREATE		0x00 +#define DRM_ARMADA_GEM_MMAP		0x02 +#define DRM_ARMADA_GEM_PWRITE		0x03 + +#define ARMADA_IOCTL(dir, name, str) \ +	DRM_##dir(DRM_COMMAND_BASE + DRM_ARMADA_##name, struct drm_armada_##str) + +struct drm_armada_gem_create { +	uint32_t handle; +	uint32_t size; +}; +#define DRM_IOCTL_ARMADA_GEM_CREATE \ +	ARMADA_IOCTL(IOWR, GEM_CREATE, gem_create) + +struct drm_armada_gem_mmap { +	uint32_t handle; +	uint32_t pad; +	uint64_t offset; +	uint64_t size; +	uint64_t addr; +}; +#define DRM_IOCTL_ARMADA_GEM_MMAP \ +	ARMADA_IOCTL(IOWR, GEM_MMAP, gem_mmap) + +struct drm_armada_gem_pwrite { +	uint64_t ptr; +	uint32_t handle; +	uint32_t offset; +	uint32_t size; +}; +#define DRM_IOCTL_ARMADA_GEM_PWRITE \ +	ARMADA_IOCTL(IOW, GEM_PWRITE, gem_pwrite) + +#endif diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index ece867889cc..9abbeb924cb 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -181,7 +181,6 @@ enum drm_map_type {  	_DRM_AGP = 3,		  /**< AGP/GART */  	_DRM_SCATTER_GATHER = 4,  /**< Scatter/gather memory for PCI DMA */  	_DRM_CONSISTENT = 5,	  /**< Consistent memory for PCI DMA */ -	_DRM_GEM = 6,		  /**< GEM object (obsolete) */  };  /** @@ -611,12 +610,56 @@ struct drm_gem_open {  	__u64 size;  }; +#define DRM_CAP_DUMB_BUFFER		0x1 +#define DRM_CAP_VBLANK_HIGH_CRTC	0x2 +#define DRM_CAP_DUMB_PREFERRED_DEPTH	0x3 +#define DRM_CAP_DUMB_PREFER_SHADOW	0x4 +#define DRM_CAP_PRIME			0x5 +#define  DRM_PRIME_CAP_IMPORT		0x1 +#define  DRM_PRIME_CAP_EXPORT		0x2 +#define DRM_CAP_TIMESTAMP_MONOTONIC	0x6 +#define DRM_CAP_ASYNC_PAGE_FLIP		0x7 +/* + * The CURSOR_WIDTH and CURSOR_HEIGHT capabilities return a valid widthxheight + * combination for the hardware cursor. The intention is that a hardware + * agnostic userspace can query a cursor plane size to use. + * + * Note that the cross-driver contract is to merely return a valid size; + * drivers are free to attach another meaning on top, eg. i915 returns the + * maximum plane size. + */ +#define DRM_CAP_CURSOR_WIDTH		0x8 +#define DRM_CAP_CURSOR_HEIGHT		0x9 +  /** DRM_IOCTL_GET_CAP ioctl argument type */  struct drm_get_cap {  	__u64 capability;  	__u64 value;  }; +/** + * DRM_CLIENT_CAP_STEREO_3D + * + * if set to 1, the DRM core will expose the stereo 3D capabilities of the + * monitor by advertising the supported 3D layouts in the flags of struct + * drm_mode_modeinfo. + */ +#define DRM_CLIENT_CAP_STEREO_3D	1 + +/** + * DRM_CLIENT_CAP_UNIVERSAL_PLANES + * + * If set to 1, the DRM core will expose all planes (overlay, primary, and + * cursor) to userspace. + */ +#define DRM_CLIENT_CAP_UNIVERSAL_PLANES  2 + +/** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */ +struct drm_set_client_cap { +	__u64 capability; +	__u64 value; +}; +  #define DRM_CLOEXEC O_CLOEXEC  struct drm_prime_handle {  	__u32 handle; @@ -649,6 +692,7 @@ struct drm_prime_handle {  #define DRM_IOCTL_GEM_FLINK		DRM_IOWR(0x0a, struct drm_gem_flink)  #define DRM_IOCTL_GEM_OPEN		DRM_IOWR(0x0b, struct drm_gem_open)  #define DRM_IOCTL_GET_CAP		DRM_IOWR(0x0c, struct drm_get_cap) +#define DRM_IOCTL_SET_CLIENT_CAP	DRM_IOW( 0x0d, struct drm_set_client_cap)  #define DRM_IOCTL_SET_UNIQUE		DRM_IOW( 0x10, struct drm_unique)  #define DRM_IOCTL_AUTH_MAGIC		DRM_IOW( 0x11, struct drm_auth) @@ -774,17 +818,6 @@ struct drm_event_vblank {  	__u32 reserved;  }; -#define DRM_CAP_DUMB_BUFFER 0x1 -#define DRM_CAP_VBLANK_HIGH_CRTC 0x2 -#define DRM_CAP_DUMB_PREFERRED_DEPTH 0x3 -#define DRM_CAP_DUMB_PREFER_SHADOW 0x4 -#define DRM_CAP_PRIME 0x5 -#define DRM_CAP_TIMESTAMP_MONOTONIC 0x6 -#define DRM_CAP_ASYNC_PAGE_FLIP 0x7 - -#define DRM_PRIME_CAP_IMPORT 0x1 -#define DRM_PRIME_CAP_EXPORT 0x2 -  /* typedef area */  #ifndef __KERNEL__  typedef struct drm_clip_rect drm_clip_rect_t; diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h index 550811712f7..def54f9e07c 100644 --- a/include/uapi/drm/drm_mode.h +++ b/include/uapi/drm/drm_mode.h @@ -44,20 +44,35 @@  /* Video mode flags */  /* bit compatible with the xorg definitions. */ -#define DRM_MODE_FLAG_PHSYNC	(1<<0) -#define DRM_MODE_FLAG_NHSYNC	(1<<1) -#define DRM_MODE_FLAG_PVSYNC	(1<<2) -#define DRM_MODE_FLAG_NVSYNC	(1<<3) -#define DRM_MODE_FLAG_INTERLACE	(1<<4) -#define DRM_MODE_FLAG_DBLSCAN	(1<<5) -#define DRM_MODE_FLAG_CSYNC	(1<<6) -#define DRM_MODE_FLAG_PCSYNC	(1<<7) -#define DRM_MODE_FLAG_NCSYNC	(1<<8) -#define DRM_MODE_FLAG_HSKEW	(1<<9) /* hskew provided */ -#define DRM_MODE_FLAG_BCAST	(1<<10) -#define DRM_MODE_FLAG_PIXMUX	(1<<11) -#define DRM_MODE_FLAG_DBLCLK	(1<<12) -#define DRM_MODE_FLAG_CLKDIV2	(1<<13) +#define DRM_MODE_FLAG_PHSYNC			(1<<0) +#define DRM_MODE_FLAG_NHSYNC			(1<<1) +#define DRM_MODE_FLAG_PVSYNC			(1<<2) +#define DRM_MODE_FLAG_NVSYNC			(1<<3) +#define DRM_MODE_FLAG_INTERLACE			(1<<4) +#define DRM_MODE_FLAG_DBLSCAN			(1<<5) +#define DRM_MODE_FLAG_CSYNC			(1<<6) +#define DRM_MODE_FLAG_PCSYNC			(1<<7) +#define DRM_MODE_FLAG_NCSYNC			(1<<8) +#define DRM_MODE_FLAG_HSKEW			(1<<9) /* hskew provided */ +#define DRM_MODE_FLAG_BCAST			(1<<10) +#define DRM_MODE_FLAG_PIXMUX			(1<<11) +#define DRM_MODE_FLAG_DBLCLK			(1<<12) +#define DRM_MODE_FLAG_CLKDIV2			(1<<13) + /* +  * When adding a new stereo mode don't forget to adjust DRM_MODE_FLAGS_3D_MAX +  * (define not exposed to user space). +  */ +#define DRM_MODE_FLAG_3D_MASK			(0x1f<<14) +#define  DRM_MODE_FLAG_3D_NONE			(0<<14) +#define  DRM_MODE_FLAG_3D_FRAME_PACKING		(1<<14) +#define  DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE	(2<<14) +#define  DRM_MODE_FLAG_3D_LINE_ALTERNATIVE	(3<<14) +#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL	(4<<14) +#define  DRM_MODE_FLAG_3D_L_DEPTH		(5<<14) +#define  DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH	(6<<14) +#define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM	(7<<14) +#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF	(8<<14) +  /* DPMS flags */  /* bit compatible with the xorg definitions. */ @@ -165,6 +180,8 @@ struct drm_mode_get_plane_res {  #define DRM_MODE_ENCODER_LVDS	3  #define DRM_MODE_ENCODER_TVDAC	4  #define DRM_MODE_ENCODER_VIRTUAL 5 +#define DRM_MODE_ENCODER_DSI	6 +#define DRM_MODE_ENCODER_DPMST	7  struct drm_mode_get_encoder {  	__u32 encoder_id; @@ -203,6 +220,7 @@ struct drm_mode_get_encoder {  #define DRM_MODE_CONNECTOR_TV		13  #define DRM_MODE_CONNECTOR_eDP		14  #define DRM_MODE_CONNECTOR_VIRTUAL      15 +#define DRM_MODE_CONNECTOR_DSI		16  struct drm_mode_get_connector { @@ -223,6 +241,8 @@ struct drm_mode_get_connector {  	__u32 connection;  	__u32 mm_width, mm_height; /**< HxW in millimeters */  	__u32 subpixel; + +	__u32 pad;  };  #define DRM_MODE_PROP_PENDING	(1<<0) @@ -232,6 +252,21 @@ struct drm_mode_get_connector {  #define DRM_MODE_PROP_BLOB	(1<<4)  #define DRM_MODE_PROP_BITMASK	(1<<5) /* bitmask of enumerated types */ +/* non-extended types: legacy bitmask, one bit per type: */ +#define DRM_MODE_PROP_LEGACY_TYPE  ( \ +		DRM_MODE_PROP_RANGE | \ +		DRM_MODE_PROP_ENUM | \ +		DRM_MODE_PROP_BLOB | \ +		DRM_MODE_PROP_BITMASK) + +/* extended-types: rather than continue to consume a bit per type, + * grab a chunk of the bits to use as integer type id. + */ +#define DRM_MODE_PROP_EXTENDED_TYPE	0x0000ffc0 +#define DRM_MODE_PROP_TYPE(n)		((n) << 6) +#define DRM_MODE_PROP_OBJECT		DRM_MODE_PROP_TYPE(1) +#define DRM_MODE_PROP_SIGNED_RANGE	DRM_MODE_PROP_TYPE(2) +  struct drm_mode_property_enum {  	__u64 value;  	char name[DRM_PROP_NAME_LEN]; diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h index 55bb5729bd7..ff57f07c324 100644 --- a/include/uapi/drm/i915_drm.h +++ b/include/uapi/drm/i915_drm.h @@ -38,10 +38,10 @@   *   * I915_L3_PARITY_UEVENT - Generated when the driver receives a parity mismatch   *	event from the gpu l3 cache. Additional information supplied is ROW, - *	BANK, SUBBANK of the affected cacheline. Userspace should keep track of - *	these events and if a specific cache-line seems to have a persistent - *	error remap it with the l3 remapping tool supplied in intel-gpu-tools. - *	The value supplied with the event is always 1. + *	BANK, SUBBANK, SLICE of the affected cacheline. Userspace should keep + *	track of these events and if a specific cache-line seems to have a + *	persistent error remap it with the l3 remapping tool supplied in + *	intel-gpu-tools.  The value supplied with the event is always 1.   *   * I915_ERROR_UEVENT - Generated upon error detection, currently only via   *	hangcheck. The error detection event is a good indicator of when things @@ -222,6 +222,8 @@ typedef struct _drm_i915_sarea {  #define DRM_I915_GEM_SET_CACHING	0x2f  #define DRM_I915_GEM_GET_CACHING	0x30  #define DRM_I915_REG_READ		0x31 +#define DRM_I915_GET_RESET_STATS	0x32 +#define DRM_I915_GEM_USERPTR		0x33  #define DRM_IOCTL_I915_INIT		DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)  #define DRM_IOCTL_I915_FLUSH		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) @@ -271,6 +273,8 @@ typedef struct _drm_i915_sarea {  #define DRM_IOCTL_I915_GEM_CONTEXT_CREATE	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create)  #define DRM_IOCTL_I915_GEM_CONTEXT_DESTROY	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_DESTROY, struct drm_i915_gem_context_destroy)  #define DRM_IOCTL_I915_REG_READ			DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_REG_READ, struct drm_i915_reg_read) +#define DRM_IOCTL_I915_GET_RESET_STATS		DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GET_RESET_STATS, struct drm_i915_reset_stats) +#define DRM_IOCTL_I915_GEM_USERPTR			DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_USERPTR, struct drm_i915_gem_userptr)  /* Allow drivers to submit batchbuffers directly to hardware, relying   * on the security mechanisms provided by hardware. @@ -335,6 +339,7 @@ typedef struct drm_i915_irq_wait {  #define I915_PARAM_HAS_EXEC_NO_RELOC	 25  #define I915_PARAM_HAS_EXEC_HANDLE_LUT   26  #define I915_PARAM_HAS_WT     	 	 27 +#define I915_PARAM_CMD_PARSER_VERSION	 28  typedef struct drm_i915_getparam {  	int param; @@ -719,7 +724,7 @@ struct drm_i915_gem_execbuffer2 {   */  #define I915_EXEC_IS_PINNED		(1<<10) -/** Provide a hint to the kernel that the command stream and auxilliary +/** Provide a hint to the kernel that the command stream and auxiliary   * state buffers already holds the correct presumed addresses and so the   * relocation process may be skipped if no buffers need to be moved in   * preparation for the execbuffer. @@ -1030,4 +1035,35 @@ struct drm_i915_reg_read {  	__u64 offset;  	__u64 val; /* Return value */  }; + +struct drm_i915_reset_stats { +	__u32 ctx_id; +	__u32 flags; + +	/* All resets since boot/module reload, for all contexts */ +	__u32 reset_count; + +	/* Number of batches lost when active in GPU, for this context */ +	__u32 batch_active; + +	/* Number of batches lost pending for execution, for this context */ +	__u32 batch_pending; + +	__u32 pad; +}; + +struct drm_i915_gem_userptr { +	__u64 user_ptr; +	__u64 user_size; +	__u32 flags; +#define I915_USERPTR_READ_ONLY 0x1 +#define I915_USERPTR_UNSYNCHRONIZED 0x80000000 +	/** +	 * Returned handle for the object. +	 * +	 * Object handles are nonzero. +	 */ +	__u32 handle; +}; +  #endif /* _UAPI_I915_DRM_H_ */ diff --git a/include/uapi/drm/msm_drm.h b/include/uapi/drm/msm_drm.h index d3c62074016..0664c31f010 100644 --- a/include/uapi/drm/msm_drm.h +++ b/include/uapi/drm/msm_drm.h @@ -50,6 +50,7 @@ struct drm_msm_timespec {  #define MSM_PARAM_GPU_ID     0x01  #define MSM_PARAM_GMEM_SIZE  0x02 +#define MSM_PARAM_CHIP_ID    0x03  struct drm_msm_param {  	uint32_t pipe;           /* in, MSM_PIPE_x */ @@ -69,6 +70,12 @@ struct drm_msm_param {  #define MSM_BO_WC            0x00020000  #define MSM_BO_UNCACHED      0x00040000 +#define MSM_BO_FLAGS         (MSM_BO_SCANOUT | \ +                              MSM_BO_GPU_READONLY | \ +                              MSM_BO_CACHED | \ +                              MSM_BO_WC | \ +                              MSM_BO_UNCACHED) +  struct drm_msm_gem_new {  	uint64_t size;           /* in */  	uint32_t flags;          /* in, mask of MSM_BO_x */ @@ -85,6 +92,8 @@ struct drm_msm_gem_info {  #define MSM_PREP_WRITE       0x02  #define MSM_PREP_NOSYNC      0x04 +#define MSM_PREP_FLAGS       (MSM_PREP_READ | MSM_PREP_WRITE | MSM_PREP_NOSYNC) +  struct drm_msm_gem_cpu_prep {  	uint32_t handle;         /* in */  	uint32_t op;             /* in, mask of MSM_PREP_x */ @@ -152,6 +161,9 @@ struct drm_msm_gem_submit_cmd {   */  #define MSM_SUBMIT_BO_READ             0x0001  #define MSM_SUBMIT_BO_WRITE            0x0002 + +#define MSM_SUBMIT_BO_FLAGS            (MSM_SUBMIT_BO_READ | MSM_SUBMIT_BO_WRITE) +  struct drm_msm_gem_submit_bo {  	uint32_t flags;          /* in, mask of MSM_SUBMIT_BO_x */  	uint32_t handle;         /* in, GEM handle */ diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h index 46d41e8b0dc..1cc0b610f16 100644 --- a/include/uapi/drm/radeon_drm.h +++ b/include/uapi/drm/radeon_drm.h @@ -510,6 +510,7 @@ typedef struct {  #define DRM_RADEON_GEM_GET_TILING	0x29  #define DRM_RADEON_GEM_BUSY		0x2a  #define DRM_RADEON_GEM_VA		0x2b +#define DRM_RADEON_GEM_OP		0x2c  #define DRM_IOCTL_RADEON_CP_INIT    DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t)  #define DRM_IOCTL_RADEON_CP_START   DRM_IO(  DRM_COMMAND_BASE + DRM_RADEON_CP_START) @@ -552,6 +553,7 @@ typedef struct {  #define DRM_IOCTL_RADEON_GEM_GET_TILING	DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_GET_TILING, struct drm_radeon_gem_get_tiling)  #define DRM_IOCTL_RADEON_GEM_BUSY	DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_BUSY, struct drm_radeon_gem_busy)  #define DRM_IOCTL_RADEON_GEM_VA		DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_VA, struct drm_radeon_gem_va) +#define DRM_IOCTL_RADEON_GEM_OP		DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_OP, struct drm_radeon_gem_op)  typedef struct drm_radeon_init {  	enum { @@ -884,6 +886,16 @@ struct drm_radeon_gem_pwrite {  	uint64_t data_ptr;  }; +/* Sets or returns a value associated with a buffer. */ +struct drm_radeon_gem_op { +	uint32_t	handle; /* buffer */ +	uint32_t	op;     /* RADEON_GEM_OP_* */ +	uint64_t	value;  /* input or return value */ +}; + +#define RADEON_GEM_OP_GET_INITIAL_DOMAIN	0 +#define RADEON_GEM_OP_SET_INITIAL_DOMAIN	1 +  #define RADEON_VA_MAP			1  #define RADEON_VA_UNMAP			2 @@ -919,6 +931,7 @@ struct drm_radeon_gem_va {  #define RADEON_CS_RING_COMPUTE      1  #define RADEON_CS_RING_DMA          2  #define RADEON_CS_RING_UVD          3 +#define RADEON_CS_RING_VCE          4  /* The third dword of RADEON_CHUNK_ID_FLAGS is a sint32 that sets the priority */  /* 0 = normal, + = higher priority, - = lower priority */ @@ -981,7 +994,20 @@ struct drm_radeon_cs {  #define RADEON_INFO_SI_TILE_MODE_ARRAY	0x16  /* query if CP DMA is supported on the compute ring */  #define RADEON_INFO_SI_CP_DMA_COMPUTE	0x17 - +/* CIK macrotile mode array */ +#define RADEON_INFO_CIK_MACROTILE_MODE_ARRAY	0x18 +/* query the number of render backends */ +#define RADEON_INFO_SI_BACKEND_ENABLED_MASK	0x19 +/* max engine clock - needed for OpenCL */ +#define RADEON_INFO_MAX_SCLK		0x1a +/* version of VCE firmware */ +#define RADEON_INFO_VCE_FW_VERSION	0x1b +/* version of VCE feedback */ +#define RADEON_INFO_VCE_FB_VERSION	0x1c +#define RADEON_INFO_NUM_BYTES_MOVED	0x1d +#define RADEON_INFO_VRAM_USAGE		0x1e +#define RADEON_INFO_GTT_USAGE		0x1f +#define RADEON_INFO_ACTIVE_CU_COUNT	0x20  struct drm_radeon_info {  	uint32_t		request; diff --git a/include/uapi/drm/tegra_drm.h b/include/uapi/drm/tegra_drm.h index 73bde4eaf16..b7548211242 100644 --- a/include/uapi/drm/tegra_drm.h +++ b/include/uapi/drm/tegra_drm.h @@ -1,17 +1,23 @@  /*   * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.   * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions:   * - * This program is distributed in the hope 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. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software.   * - * You should have received a copy of the GNU General Public License - * along with this program.  If not, see <http://www.gnu.org/licenses/>. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE.   */  #ifndef _UAPI_TEGRA_DRM_H_ @@ -19,6 +25,9 @@  #include <drm/drm.h> +#define DRM_TEGRA_GEM_CREATE_TILED     (1 << 0) +#define DRM_TEGRA_GEM_CREATE_BOTTOM_UP (1 << 1) +  struct drm_tegra_gem_create {  	__u64 size;  	__u32 flags; @@ -65,6 +74,12 @@ struct drm_tegra_get_syncpt {  	__u32 id;  }; +struct drm_tegra_get_syncpt_base { +	__u64 context; +	__u32 syncpt; +	__u32 id; +}; +  struct drm_tegra_syncpt {  	__u32 id;  	__u32 incrs; @@ -105,7 +120,6 @@ struct drm_tegra_submit {  	__u32 num_waitchks;  	__u32 waitchk_mask;  	__u32 timeout; -	__u32 pad;  	__u64 syncpts;  	__u64 cmdbufs;  	__u64 relocs; @@ -115,15 +129,16 @@ struct drm_tegra_submit {  	__u32 reserved[5];	/* future expansion */  }; -#define DRM_TEGRA_GEM_CREATE	0x00 -#define DRM_TEGRA_GEM_MMAP	0x01 -#define DRM_TEGRA_SYNCPT_READ	0x02 -#define DRM_TEGRA_SYNCPT_INCR	0x03 -#define DRM_TEGRA_SYNCPT_WAIT	0x04 -#define DRM_TEGRA_OPEN_CHANNEL	0x05 -#define DRM_TEGRA_CLOSE_CHANNEL	0x06 -#define DRM_TEGRA_GET_SYNCPT	0x07 -#define DRM_TEGRA_SUBMIT	0x08 +#define DRM_TEGRA_GEM_CREATE		0x00 +#define DRM_TEGRA_GEM_MMAP		0x01 +#define DRM_TEGRA_SYNCPT_READ		0x02 +#define DRM_TEGRA_SYNCPT_INCR		0x03 +#define DRM_TEGRA_SYNCPT_WAIT		0x04 +#define DRM_TEGRA_OPEN_CHANNEL		0x05 +#define DRM_TEGRA_CLOSE_CHANNEL		0x06 +#define DRM_TEGRA_GET_SYNCPT		0x07 +#define DRM_TEGRA_SUBMIT		0x08 +#define DRM_TEGRA_GET_SYNCPT_BASE	0x09  #define DRM_IOCTL_TEGRA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_CREATE, struct drm_tegra_gem_create)  #define DRM_IOCTL_TEGRA_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_MMAP, struct drm_tegra_gem_mmap) @@ -134,5 +149,6 @@ struct drm_tegra_submit {  #define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_open_channel)  #define DRM_IOCTL_TEGRA_GET_SYNCPT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT, struct drm_tegra_get_syncpt)  #define DRM_IOCTL_TEGRA_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SUBMIT, struct drm_tegra_submit) +#define DRM_IOCTL_TEGRA_GET_SYNCPT_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT_BASE, struct drm_tegra_get_syncpt_base)  #endif diff --git a/include/uapi/drm/vmwgfx_drm.h b/include/uapi/drm/vmwgfx_drm.h index bcb0912afe7..4fc66f6b12c 100644 --- a/include/uapi/drm/vmwgfx_drm.h +++ b/include/uapi/drm/vmwgfx_drm.h @@ -28,6 +28,10 @@  #ifndef __VMWGFX_DRM_H__  #define __VMWGFX_DRM_H__ +#ifndef __KERNEL__ +#include <drm.h> +#endif +  #define DRM_VMW_MAX_SURFACE_FACES 6  #define DRM_VMW_MAX_MIP_LEVELS 24 @@ -55,6 +59,11 @@  #define DRM_VMW_PRESENT              18  #define DRM_VMW_PRESENT_READBACK     19  #define DRM_VMW_UPDATE_LAYOUT        20 +#define DRM_VMW_CREATE_SHADER        21 +#define DRM_VMW_UNREF_SHADER         22 +#define DRM_VMW_GB_SURFACE_CREATE    23 +#define DRM_VMW_GB_SURFACE_REF       24 +#define DRM_VMW_SYNCCPU              25  /*************************************************************************/  /** @@ -75,6 +84,19 @@  #define DRM_VMW_PARAM_FIFO_CAPS        4  #define DRM_VMW_PARAM_MAX_FB_SIZE      5  #define DRM_VMW_PARAM_FIFO_HW_VERSION  6 +#define DRM_VMW_PARAM_MAX_SURF_MEMORY  7 +#define DRM_VMW_PARAM_3D_CAPS_SIZE     8 +#define DRM_VMW_PARAM_MAX_MOB_MEMORY   9 +#define DRM_VMW_PARAM_MAX_MOB_SIZE     10 + +/** + * enum drm_vmw_handle_type - handle type for ref ioctls + * + */ +enum drm_vmw_handle_type { +	DRM_VMW_HANDLE_LEGACY = 0, +	DRM_VMW_HANDLE_PRIME = 1 +};  /**   * struct drm_vmw_getparam_arg @@ -164,6 +186,7 @@ struct drm_vmw_surface_create_req {   * struct drm_wmv_surface_arg   *   * @sid: Surface id of created surface or surface to destroy or reference. + * @handle_type: Handle type for DRM_VMW_REF_SURFACE Ioctl.   *   * Output data from the DRM_VMW_CREATE_SURFACE Ioctl.   * Input argument to the DRM_VMW_UNREF_SURFACE Ioctl. @@ -172,7 +195,7 @@ struct drm_vmw_surface_create_req {  struct drm_vmw_surface_arg {  	int32_t sid; -	uint32_t pad64; +	enum drm_vmw_handle_type handle_type;  };  /** @@ -787,4 +810,253 @@ struct drm_vmw_update_layout_arg {  	uint64_t rects;  }; + +/*************************************************************************/ +/** + * DRM_VMW_CREATE_SHADER - Create shader + * + * Creates a shader and optionally binds it to a dma buffer containing + * the shader byte-code. + */ + +/** + * enum drm_vmw_shader_type - Shader types + */ +enum drm_vmw_shader_type { +	drm_vmw_shader_type_vs = 0, +	drm_vmw_shader_type_ps, +	drm_vmw_shader_type_gs +}; + + +/** + * struct drm_vmw_shader_create_arg + * + * @shader_type: Shader type of the shader to create. + * @size: Size of the byte-code in bytes. + * where the shader byte-code starts + * @buffer_handle: Buffer handle identifying the buffer containing the + * shader byte-code + * @shader_handle: On successful completion contains a handle that + * can be used to subsequently identify the shader. + * @offset: Offset in bytes into the buffer given by @buffer_handle, + * + * Input / Output argument to the DRM_VMW_CREATE_SHADER Ioctl. + */ +struct drm_vmw_shader_create_arg { +	enum drm_vmw_shader_type shader_type; +	uint32_t size; +	uint32_t buffer_handle; +	uint32_t shader_handle; +	uint64_t offset; +}; + +/*************************************************************************/ +/** + * DRM_VMW_UNREF_SHADER - Unreferences a shader + * + * Destroys a user-space reference to a shader, optionally destroying + * it. + */ + +/** + * struct drm_vmw_shader_arg + * + * @handle: Handle identifying the shader to destroy. + * + * Input argument to the DRM_VMW_UNREF_SHADER ioctl. + */ +struct drm_vmw_shader_arg { +	uint32_t handle; +	uint32_t pad64; +}; + +/*************************************************************************/ +/** + * DRM_VMW_GB_SURFACE_CREATE - Create a host guest-backed surface. + * + * Allocates a surface handle and queues a create surface command + * for the host on the first use of the surface. The surface ID can + * be used as the surface ID in commands referencing the surface. + */ + +/** + * enum drm_vmw_surface_flags + * + * @drm_vmw_surface_flag_shareable:     Whether the surface is shareable + * @drm_vmw_surface_flag_scanout:       Whether the surface is a scanout + *                                      surface. + * @drm_vmw_surface_flag_create_buffer: Create a backup buffer if none is + *                                      given. + */ +enum drm_vmw_surface_flags { +	drm_vmw_surface_flag_shareable = (1 << 0), +	drm_vmw_surface_flag_scanout = (1 << 1), +	drm_vmw_surface_flag_create_buffer = (1 << 2) +}; + +/** + * struct drm_vmw_gb_surface_create_req + * + * @svga3d_flags:     SVGA3d surface flags for the device. + * @format:           SVGA3d format. + * @mip_level:        Number of mip levels for all faces. + * @drm_surface_flags Flags as described above. + * @multisample_count Future use. Set to 0. + * @autogen_filter    Future use. Set to 0. + * @buffer_handle     Buffer handle of backup buffer. SVGA3D_INVALID_ID + *                    if none. + * @base_size         Size of the base mip level for all faces. + * + * Input argument to the  DRM_VMW_GB_SURFACE_CREATE Ioctl. + * Part of output argument for the DRM_VMW_GB_SURFACE_REF Ioctl. + */ +struct drm_vmw_gb_surface_create_req { +	uint32_t svga3d_flags; +	uint32_t format; +	uint32_t mip_levels; +	enum drm_vmw_surface_flags drm_surface_flags; +	uint32_t multisample_count; +	uint32_t autogen_filter; +	uint32_t buffer_handle; +	uint32_t pad64; +	struct drm_vmw_size base_size; +}; + +/** + * struct drm_vmw_gb_surface_create_rep + * + * @handle:            Surface handle. + * @backup_size:       Size of backup buffers for this surface. + * @buffer_handle:     Handle of backup buffer. SVGA3D_INVALID_ID if none. + * @buffer_size:       Actual size of the buffer identified by + *                     @buffer_handle + * @buffer_map_handle: Offset into device address space for the buffer + *                     identified by @buffer_handle. + * + * Part of output argument for the DRM_VMW_GB_SURFACE_REF ioctl. + * Output argument for the DRM_VMW_GB_SURFACE_CREATE ioctl. + */ +struct drm_vmw_gb_surface_create_rep { +	uint32_t handle; +	uint32_t backup_size; +	uint32_t buffer_handle; +	uint32_t buffer_size; +	uint64_t buffer_map_handle; +}; + +/** + * union drm_vmw_gb_surface_create_arg + * + * @req: Input argument as described above. + * @rep: Output argument as described above. + * + * Argument to the DRM_VMW_GB_SURFACE_CREATE ioctl. + */ +union drm_vmw_gb_surface_create_arg { +	struct drm_vmw_gb_surface_create_rep rep; +	struct drm_vmw_gb_surface_create_req req; +}; + +/*************************************************************************/ +/** + * DRM_VMW_GB_SURFACE_REF - Reference a host surface. + * + * Puts a reference on a host surface with a given handle, as previously + * returned by the DRM_VMW_GB_SURFACE_CREATE ioctl. + * A reference will make sure the surface isn't destroyed while we hold + * it and will allow the calling client to use the surface handle in + * the command stream. + * + * On successful return, the Ioctl returns the surface information given + * to and returned from the DRM_VMW_GB_SURFACE_CREATE ioctl. + */ + +/** + * struct drm_vmw_gb_surface_reference_arg + * + * @creq: The data used as input when the surface was created, as described + *        above at "struct drm_vmw_gb_surface_create_req" + * @crep: Additional data output when the surface was created, as described + *        above at "struct drm_vmw_gb_surface_create_rep" + * + * Output Argument to the DRM_VMW_GB_SURFACE_REF ioctl. + */ +struct drm_vmw_gb_surface_ref_rep { +	struct drm_vmw_gb_surface_create_req creq; +	struct drm_vmw_gb_surface_create_rep crep; +}; + +/** + * union drm_vmw_gb_surface_reference_arg + * + * @req: Input data as described above at "struct drm_vmw_surface_arg" + * @rep: Output data as described above at "struct drm_vmw_gb_surface_ref_rep" + * + * Argument to the DRM_VMW_GB_SURFACE_REF Ioctl. + */ +union drm_vmw_gb_surface_reference_arg { +	struct drm_vmw_gb_surface_ref_rep rep; +	struct drm_vmw_surface_arg req; +}; + + +/*************************************************************************/ +/** + * DRM_VMW_SYNCCPU - Sync a DMA buffer / MOB for CPU access. + * + * Idles any previously submitted GPU operations on the buffer and + * by default blocks command submissions that reference the buffer. + * If the file descriptor used to grab a blocking CPU sync is closed, the + * cpu sync is released. + * The flags argument indicates how the grab / release operation should be + * performed: + */ + +/** + * enum drm_vmw_synccpu_flags - Synccpu flags: + * + * @drm_vmw_synccpu_read: Sync for read. If sync is done for read only, it's a + * hint to the kernel to allow command submissions that references the buffer + * for read-only. + * @drm_vmw_synccpu_write: Sync for write. Block all command submissions + * referencing this buffer. + * @drm_vmw_synccpu_dontblock: Dont wait for GPU idle, but rather return + * -EBUSY should the buffer be busy. + * @drm_vmw_synccpu_allow_cs: Allow command submission that touches the buffer + * while the buffer is synced for CPU. This is similar to the GEM bo idle + * behavior. + */ +enum drm_vmw_synccpu_flags { +	drm_vmw_synccpu_read = (1 << 0), +	drm_vmw_synccpu_write = (1 << 1), +	drm_vmw_synccpu_dontblock = (1 << 2), +	drm_vmw_synccpu_allow_cs = (1 << 3) +}; + +/** + * enum drm_vmw_synccpu_op - Synccpu operations: + * + * @drm_vmw_synccpu_grab:    Grab the buffer for CPU operations + * @drm_vmw_synccpu_release: Release a previous grab. + */ +enum drm_vmw_synccpu_op { +	drm_vmw_synccpu_grab, +	drm_vmw_synccpu_release +}; + +/** + * struct drm_vmw_synccpu_arg + * + * @op:			     The synccpu operation as described above. + * @handle:		     Handle identifying the buffer object. + * @flags:		     Flags as described above. + */ +struct drm_vmw_synccpu_arg { +	enum drm_vmw_synccpu_op op; +	enum drm_vmw_synccpu_flags flags; +	uint32_t handle; +	uint32_t pad64; +}; +  #endif diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild index 115add2515a..24e9033f8b3 100644 --- a/include/uapi/linux/Kbuild +++ b/include/uapi/linux/Kbuild @@ -139,6 +139,7 @@ header-y += hid.h  header-y += hiddev.h  header-y += hidraw.h  header-y += hpet.h +header-y += hyperv.h  header-y += hysdn_if.h  header-y += i2c-dev.h  header-y += i2c.h @@ -241,6 +242,8 @@ header-y += media.h  header-y += mei.h  header-y += mempolicy.h  header-y += meye.h +header-y += mic_common.h +header-y += mic_ioctl.h  header-y += mii.h  header-y += minix_fs.h  header-y += mman.h @@ -314,6 +317,7 @@ header-y += ppp-ioctl.h  header-y += ppp_defs.h  header-y += pps.h  header-y += prctl.h +header-y += psci.h  header-y += ptp_clock.h  header-y += ptrace.h  header-y += qnx4_fs.h @@ -424,3 +428,5 @@ header-y += x25.h  header-y += xattr.h  header-y += xfrm.h  header-y += hw_breakpoint.h +header-y += zorro.h +header-y += zorro_ids.h diff --git a/include/uapi/linux/apm_bios.h b/include/uapi/linux/apm_bios.h index 724f409adae..df79bca1b89 100644 --- a/include/uapi/linux/apm_bios.h +++ b/include/uapi/linux/apm_bios.h @@ -67,6 +67,8 @@ struct apm_bios_info {  #define APM_USER_SUSPEND	0x000a  #define APM_STANDBY_RESUME	0x000b  #define APM_CAPABILITY_CHANGE	0x000c +#define APM_USER_HIBERNATION	0x000d +#define APM_HIBERNATION_RESUME	0x000e  /*   * Error codes diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h index 75cef3fd97a..cf6714752b6 100644 --- a/include/uapi/linux/audit.h +++ b/include/uapi/linux/audit.h @@ -68,6 +68,8 @@  #define AUDIT_MAKE_EQUIV	1015	/* Append to watched tree */  #define AUDIT_TTY_GET		1016	/* Get TTY auditing status */  #define AUDIT_TTY_SET		1017	/* Set TTY auditing status */ +#define AUDIT_SET_FEATURE	1018	/* Turn an audit feature on or off */ +#define AUDIT_GET_FEATURE	1019	/* Get which features are enabled */  #define AUDIT_FIRST_USER_MSG	1100	/* Userspace messages mostly uninteresting to kernel */  #define AUDIT_USER_AVC		1107	/* We filter this differently */ @@ -106,6 +108,8 @@  #define AUDIT_NETFILTER_PKT	1324	/* Packets traversing netfilter chains */  #define AUDIT_NETFILTER_CFG	1325	/* Netfilter chain modifications */  #define AUDIT_SECCOMP		1326	/* Secure Computing event */ +#define AUDIT_PROCTITLE		1327	/* Proctitle emit event */ +#define AUDIT_FEATURE_CHANGE	1328	/* audit log listing feature changes */  #define AUDIT_AVC		1400	/* SE Linux avc denial or grant */  #define AUDIT_SELINUX_ERR	1401	/* Internal SE Linux Errors */ @@ -316,20 +320,33 @@ enum {  #define AUDIT_STATUS_PID		0x0004  #define AUDIT_STATUS_RATE_LIMIT		0x0008  #define AUDIT_STATUS_BACKLOG_LIMIT	0x0010 +#define AUDIT_STATUS_BACKLOG_WAIT_TIME	0x0020 + +#define AUDIT_VERSION_BACKLOG_LIMIT	1 +#define AUDIT_VERSION_BACKLOG_WAIT_TIME	2 +#define AUDIT_VERSION_LATEST AUDIT_VERSION_BACKLOG_WAIT_TIME +  				/* Failure-to-log actions */  #define AUDIT_FAIL_SILENT	0  #define AUDIT_FAIL_PRINTK	1  #define AUDIT_FAIL_PANIC	2 +/* + * These bits disambiguate different calling conventions that share an + * ELF machine type, bitness, and endianness + */ +#define __AUDIT_ARCH_CONVENTION_MASK 0x30000000 +#define __AUDIT_ARCH_CONVENTION_MIPS64_N32 0x20000000 +  /* distinguish syscall tables */  #define __AUDIT_ARCH_64BIT 0x80000000  #define __AUDIT_ARCH_LE	   0x40000000 +  #define AUDIT_ARCH_ALPHA	(EM_ALPHA|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)  #define AUDIT_ARCH_ARM		(EM_ARM|__AUDIT_ARCH_LE)  #define AUDIT_ARCH_ARMEB	(EM_ARM)  #define AUDIT_ARCH_CRIS		(EM_CRIS|__AUDIT_ARCH_LE)  #define AUDIT_ARCH_FRV		(EM_FRV) -#define AUDIT_ARCH_H8300	(EM_H8_300)  #define AUDIT_ARCH_I386		(EM_386|__AUDIT_ARCH_LE)  #define AUDIT_ARCH_IA64		(EM_IA_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)  #define AUDIT_ARCH_M32R		(EM_M32R) @@ -337,7 +354,11 @@ enum {  #define AUDIT_ARCH_MIPS		(EM_MIPS)  #define AUDIT_ARCH_MIPSEL	(EM_MIPS|__AUDIT_ARCH_LE)  #define AUDIT_ARCH_MIPS64	(EM_MIPS|__AUDIT_ARCH_64BIT) +#define AUDIT_ARCH_MIPS64N32	(EM_MIPS|__AUDIT_ARCH_64BIT|\ +				 __AUDIT_ARCH_CONVENTION_MIPS64_N32)  #define AUDIT_ARCH_MIPSEL64	(EM_MIPS|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_MIPSEL64N32	(EM_MIPS|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE|\ +				 __AUDIT_ARCH_CONVENTION_MIPS64_N32)  #define AUDIT_ARCH_OPENRISC	(EM_OPENRISC)  #define AUDIT_ARCH_PARISC	(EM_PARISC)  #define AUDIT_ARCH_PARISC64	(EM_PARISC|__AUDIT_ARCH_64BIT) @@ -358,6 +379,20 @@ enum {  #define AUDIT_PERM_READ		4  #define AUDIT_PERM_ATTR		8 +/* MAX_AUDIT_MESSAGE_LENGTH is set in audit:lib/libaudit.h as: + * 8970 // PATH_MAX*2+CONTEXT_SIZE*2+11+256+1 + * max header+body+tailer: 44 + 29 + 32 + 262 + 7 + pad + */ +#define AUDIT_MESSAGE_TEXT_MAX	8560 + +/* Multicast Netlink socket groups (default up to 32) */ +enum audit_nlgrps { +	AUDIT_NLGRP_NONE,	/* Group 0 not used */ +	AUDIT_NLGRP_READLOG,	/* "best effort" read only socket */ +	__AUDIT_NLGRP_MAX +}; +#define AUDIT_NLGRP_MAX                (__AUDIT_NLGRP_MAX - 1) +  struct audit_status {  	__u32		mask;		/* Bit mask for valid entries */  	__u32		enabled;	/* 1 = enabled, 0 = disabled */ @@ -367,13 +402,32 @@ struct audit_status {  	__u32		backlog_limit;	/* waiting messages limit */  	__u32		lost;		/* messages lost */  	__u32		backlog;	/* messages waiting in queue */ +	__u32		version;	/* audit api version number */ +	__u32		backlog_wait_time;/* message queue wait timeout */ +}; + +struct audit_features { +#define AUDIT_FEATURE_VERSION	1 +	__u32	vers; +	__u32	mask;		/* which bits we are dealing with */ +	__u32	features;	/* which feature to enable/disable */ +	__u32	lock;		/* which features to lock */  }; +#define AUDIT_FEATURE_ONLY_UNSET_LOGINUID	0 +#define AUDIT_FEATURE_LOGINUID_IMMUTABLE	1 +#define AUDIT_LAST_FEATURE			AUDIT_FEATURE_LOGINUID_IMMUTABLE + +#define audit_feature_valid(x)		((x) >= 0 && (x) <= AUDIT_LAST_FEATURE) +#define AUDIT_FEATURE_TO_MASK(x)	(1 << ((x) & 31)) /* mask for __u32 */ +  struct audit_tty_status {  	__u32		enabled;	/* 1 = enabled, 0 = disabled */  	__u32		log_passwd;	/* 1 = enabled, 0 = disabled */  }; +#define AUDIT_UID_UNSET (unsigned int)-1 +  /* audit_rule_data supports filter rules with both integer and string   * fields.  It corresponds with AUDIT_ADD_RULE, AUDIT_DEL_RULE and   * AUDIT_LIST_RULES requests. diff --git a/include/uapi/linux/bcache.h b/include/uapi/linux/bcache.h new file mode 100644 index 00000000000..22b6ad31c70 --- /dev/null +++ b/include/uapi/linux/bcache.h @@ -0,0 +1,374 @@ +#ifndef _LINUX_BCACHE_H +#define _LINUX_BCACHE_H + +/* + * Bcache on disk data structures + */ + +#include <asm/types.h> + +#define BITMASK(name, type, field, offset, size)		\ +static inline __u64 name(const type *k)				\ +{ return (k->field >> offset) & ~(~0ULL << size); }		\ +								\ +static inline void SET_##name(type *k, __u64 v)			\ +{								\ +	k->field &= ~(~(~0ULL << size) << offset);		\ +	k->field |= (v & ~(~0ULL << size)) << offset;		\ +} + +/* Btree keys - all units are in sectors */ + +struct bkey { +	__u64	high; +	__u64	low; +	__u64	ptr[]; +}; + +#define KEY_FIELD(name, field, offset, size)				\ +	BITMASK(name, struct bkey, field, offset, size) + +#define PTR_FIELD(name, offset, size)					\ +static inline __u64 name(const struct bkey *k, unsigned i)		\ +{ return (k->ptr[i] >> offset) & ~(~0ULL << size); }			\ +									\ +static inline void SET_##name(struct bkey *k, unsigned i, __u64 v)	\ +{									\ +	k->ptr[i] &= ~(~(~0ULL << size) << offset);			\ +	k->ptr[i] |= (v & ~(~0ULL << size)) << offset;			\ +} + +#define KEY_SIZE_BITS		16 +#define KEY_MAX_U64S		8 + +KEY_FIELD(KEY_PTRS,	high, 60, 3) +KEY_FIELD(HEADER_SIZE,	high, 58, 2) +KEY_FIELD(KEY_CSUM,	high, 56, 2) +KEY_FIELD(KEY_PINNED,	high, 55, 1) +KEY_FIELD(KEY_DIRTY,	high, 36, 1) + +KEY_FIELD(KEY_SIZE,	high, 20, KEY_SIZE_BITS) +KEY_FIELD(KEY_INODE,	high, 0,  20) + +/* Next time I change the on disk format, KEY_OFFSET() won't be 64 bits */ + +static inline __u64 KEY_OFFSET(const struct bkey *k) +{ +	return k->low; +} + +static inline void SET_KEY_OFFSET(struct bkey *k, __u64 v) +{ +	k->low = v; +} + +/* + * The high bit being set is a relic from when we used it to do binary + * searches - it told you where a key started. It's not used anymore, + * and can probably be safely dropped. + */ +#define KEY(inode, offset, size)					\ +((struct bkey) {							\ +	.high = (1ULL << 63) | ((__u64) (size) << 20) | (inode),	\ +	.low = (offset)							\ +}) + +#define ZERO_KEY			KEY(0, 0, 0) + +#define MAX_KEY_INODE			(~(~0 << 20)) +#define MAX_KEY_OFFSET			(~0ULL >> 1) +#define MAX_KEY				KEY(MAX_KEY_INODE, MAX_KEY_OFFSET, 0) + +#define KEY_START(k)			(KEY_OFFSET(k) - KEY_SIZE(k)) +#define START_KEY(k)			KEY(KEY_INODE(k), KEY_START(k), 0) + +#define PTR_DEV_BITS			12 + +PTR_FIELD(PTR_DEV,			51, PTR_DEV_BITS) +PTR_FIELD(PTR_OFFSET,			8,  43) +PTR_FIELD(PTR_GEN,			0,  8) + +#define PTR_CHECK_DEV			((1 << PTR_DEV_BITS) - 1) + +#define PTR(gen, offset, dev)						\ +	((((__u64) dev) << 51) | ((__u64) offset) << 8 | gen) + +/* Bkey utility code */ + +static inline unsigned long bkey_u64s(const struct bkey *k) +{ +	return (sizeof(struct bkey) / sizeof(__u64)) + KEY_PTRS(k); +} + +static inline unsigned long bkey_bytes(const struct bkey *k) +{ +	return bkey_u64s(k) * sizeof(__u64); +} + +#define bkey_copy(_dest, _src)	memcpy(_dest, _src, bkey_bytes(_src)) + +static inline void bkey_copy_key(struct bkey *dest, const struct bkey *src) +{ +	SET_KEY_INODE(dest, KEY_INODE(src)); +	SET_KEY_OFFSET(dest, KEY_OFFSET(src)); +} + +static inline struct bkey *bkey_next(const struct bkey *k) +{ +	__u64 *d = (void *) k; +	return (struct bkey *) (d + bkey_u64s(k)); +} + +static inline struct bkey *bkey_idx(const struct bkey *k, unsigned nr_keys) +{ +	__u64 *d = (void *) k; +	return (struct bkey *) (d + nr_keys); +} +/* Enough for a key with 6 pointers */ +#define BKEY_PAD		8 + +#define BKEY_PADDED(key)					\ +	union { struct bkey key; __u64 key ## _pad[BKEY_PAD]; } + +/* Superblock */ + +/* Version 0: Cache device + * Version 1: Backing device + * Version 2: Seed pointer into btree node checksum + * Version 3: Cache device with new UUID format + * Version 4: Backing device with data offset + */ +#define BCACHE_SB_VERSION_CDEV		0 +#define BCACHE_SB_VERSION_BDEV		1 +#define BCACHE_SB_VERSION_CDEV_WITH_UUID 3 +#define BCACHE_SB_VERSION_BDEV_WITH_OFFSET 4 +#define BCACHE_SB_MAX_VERSION		4 + +#define SB_SECTOR			8 +#define SB_SIZE				4096 +#define SB_LABEL_SIZE			32 +#define SB_JOURNAL_BUCKETS		256U +/* SB_JOURNAL_BUCKETS must be divisible by BITS_PER_LONG */ +#define MAX_CACHES_PER_SET		8 + +#define BDEV_DATA_START_DEFAULT		16	/* sectors */ + +struct cache_sb { +	__u64			csum; +	__u64			offset;	/* sector where this sb was written */ +	__u64			version; + +	__u8			magic[16]; + +	__u8			uuid[16]; +	union { +		__u8		set_uuid[16]; +		__u64		set_magic; +	}; +	__u8			label[SB_LABEL_SIZE]; + +	__u64			flags; +	__u64			seq; +	__u64			pad[8]; + +	union { +	struct { +		/* Cache devices */ +		__u64		nbuckets;	/* device size */ + +		__u16		block_size;	/* sectors */ +		__u16		bucket_size;	/* sectors */ + +		__u16		nr_in_set; +		__u16		nr_this_dev; +	}; +	struct { +		/* Backing devices */ +		__u64		data_offset; + +		/* +		 * block_size from the cache device section is still used by +		 * backing devices, so don't add anything here until we fix +		 * things to not need it for backing devices anymore +		 */ +	}; +	}; + +	__u32			last_mount;	/* time_t */ + +	__u16			first_bucket; +	union { +		__u16		njournal_buckets; +		__u16		keys; +	}; +	__u64			d[SB_JOURNAL_BUCKETS];	/* journal buckets */ +}; + +static inline _Bool SB_IS_BDEV(const struct cache_sb *sb) +{ +	return sb->version == BCACHE_SB_VERSION_BDEV +		|| sb->version == BCACHE_SB_VERSION_BDEV_WITH_OFFSET; +} + +BITMASK(CACHE_SYNC,			struct cache_sb, flags, 0, 1); +BITMASK(CACHE_DISCARD,			struct cache_sb, flags, 1, 1); +BITMASK(CACHE_REPLACEMENT,		struct cache_sb, flags, 2, 3); +#define CACHE_REPLACEMENT_LRU		0U +#define CACHE_REPLACEMENT_FIFO		1U +#define CACHE_REPLACEMENT_RANDOM	2U + +BITMASK(BDEV_CACHE_MODE,		struct cache_sb, flags, 0, 4); +#define CACHE_MODE_WRITETHROUGH		0U +#define CACHE_MODE_WRITEBACK		1U +#define CACHE_MODE_WRITEAROUND		2U +#define CACHE_MODE_NONE			3U +BITMASK(BDEV_STATE,			struct cache_sb, flags, 61, 2); +#define BDEV_STATE_NONE			0U +#define BDEV_STATE_CLEAN		1U +#define BDEV_STATE_DIRTY		2U +#define BDEV_STATE_STALE		3U + +/* + * Magic numbers + * + * The various other data structures have their own magic numbers, which are + * xored with the first part of the cache set's UUID + */ + +#define JSET_MAGIC			0x245235c1a3625032ULL +#define PSET_MAGIC			0x6750e15f87337f91ULL +#define BSET_MAGIC			0x90135c78b99e07f5ULL + +static inline __u64 jset_magic(struct cache_sb *sb) +{ +	return sb->set_magic ^ JSET_MAGIC; +} + +static inline __u64 pset_magic(struct cache_sb *sb) +{ +	return sb->set_magic ^ PSET_MAGIC; +} + +static inline __u64 bset_magic(struct cache_sb *sb) +{ +	return sb->set_magic ^ BSET_MAGIC; +} + +/* + * Journal + * + * On disk format for a journal entry: + * seq is monotonically increasing; every journal entry has its own unique + * sequence number. + * + * last_seq is the oldest journal entry that still has keys the btree hasn't + * flushed to disk yet. + * + * version is for on disk format changes. + */ + +#define BCACHE_JSET_VERSION_UUIDv1	1 +#define BCACHE_JSET_VERSION_UUID	1	/* Always latest UUID format */ +#define BCACHE_JSET_VERSION		1 + +struct jset { +	__u64			csum; +	__u64			magic; +	__u64			seq; +	__u32			version; +	__u32			keys; + +	__u64			last_seq; + +	BKEY_PADDED(uuid_bucket); +	BKEY_PADDED(btree_root); +	__u16			btree_level; +	__u16			pad[3]; + +	__u64			prio_bucket[MAX_CACHES_PER_SET]; + +	union { +		struct bkey	start[0]; +		__u64		d[0]; +	}; +}; + +/* Bucket prios/gens */ + +struct prio_set { +	__u64			csum; +	__u64			magic; +	__u64			seq; +	__u32			version; +	__u32			pad; + +	__u64			next_bucket; + +	struct bucket_disk { +		__u16		prio; +		__u8		gen; +	} __attribute((packed)) data[]; +}; + +/* UUIDS - per backing device/flash only volume metadata */ + +struct uuid_entry { +	union { +		struct { +			__u8	uuid[16]; +			__u8	label[32]; +			__u32	first_reg; +			__u32	last_reg; +			__u32	invalidated; + +			__u32	flags; +			/* Size of flash only volumes */ +			__u64	sectors; +		}; + +		__u8		pad[128]; +	}; +}; + +BITMASK(UUID_FLASH_ONLY,	struct uuid_entry, flags, 0, 1); + +/* Btree nodes */ + +/* Version 1: Seed pointer into btree node checksum + */ +#define BCACHE_BSET_CSUM		1 +#define BCACHE_BSET_VERSION		1 + +/* + * Btree nodes + * + * On disk a btree node is a list/log of these; within each set the keys are + * sorted + */ +struct bset { +	__u64			csum; +	__u64			magic; +	__u64			seq; +	__u32			version; +	__u32			keys; + +	union { +		struct bkey	start[0]; +		__u64		d[0]; +	}; +}; + +/* OBSOLETE */ + +/* UUIDS - per backing device/flash only volume metadata */ + +struct uuid_entry_v0 { +	__u8		uuid[16]; +	__u8		label[32]; +	__u32		first_reg; +	__u32		last_reg; +	__u32		invalidated; +	__u32		pad; +}; + +#endif /* _LINUX_BCACHE_H */ diff --git a/include/uapi/linux/btrfs.h b/include/uapi/linux/btrfs.h index 45e618921c6..2f47824e7a3 100644 --- a/include/uapi/linux/btrfs.h +++ b/include/uapi/linux/btrfs.h @@ -38,6 +38,7 @@ struct btrfs_ioctl_vol_args {  #define BTRFS_SUBVOL_QGROUP_INHERIT	(1ULL << 2)  #define BTRFS_FSID_SIZE 16  #define BTRFS_UUID_SIZE 16 +#define BTRFS_UUID_UNPARSED_SIZE	37  #define BTRFS_QGROUP_INHERIT_SET_LIMITS	(1ULL << 0) @@ -181,7 +182,17 @@ struct btrfs_ioctl_fs_info_args {  	__u64 max_id;				/* out */  	__u64 num_devices;			/* out */  	__u8 fsid[BTRFS_FSID_SIZE];		/* out */ -	__u64 reserved[124];			/* pad to 1k */ +	__u32 nodesize;				/* out */ +	__u32 sectorsize;			/* out */ +	__u32 clone_alignment;			/* out */ +	__u32 reserved32; +	__u64 reserved[122];			/* pad to 1k */ +}; + +struct btrfs_ioctl_feature_flags { +	__u64 compat_flags; +	__u64 compat_ro_flags; +	__u64 incompat_flags;  };  /* balance control ioctl modes */ @@ -205,7 +216,8 @@ struct btrfs_balance_args {  	__u64 flags; -	__u64 unused[8]; +	__u64 limit;		/* limit number of processed chunks */ +	__u64 unused[7];  } __attribute__ ((__packed__));  /* report balance progress to userspace */ @@ -295,6 +307,14 @@ struct btrfs_ioctl_search_args {  	char buf[BTRFS_SEARCH_ARGS_BUFSIZE];  }; +struct btrfs_ioctl_search_args_v2 { +	struct btrfs_ioctl_search_key key; /* in/out - search parameters */ +	__u64 buf_size;		   /* in - size of buffer +					    * out - on EOVERFLOW: needed size +					    *       to store item */ +	__u64 buf[0];                       /* out - found items */ +}; +  struct btrfs_ioctl_clone_range_args {    __s64 src_fd;    __u64 src_offset, src_length; @@ -547,6 +567,8 @@ static inline char *btrfs_err_str(enum btrfs_err_code err_code)  				struct btrfs_ioctl_defrag_range_args)  #define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \  				   struct btrfs_ioctl_search_args) +#define BTRFS_IOC_TREE_SEARCH_V2 _IOWR(BTRFS_IOCTL_MAGIC, 17, \ +					   struct btrfs_ioctl_search_args_v2)  #define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \  				   struct btrfs_ioctl_ino_lookup_args)  #define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, __u64) @@ -606,5 +628,11 @@ static inline char *btrfs_err_str(enum btrfs_err_code err_code)  				    struct btrfs_ioctl_dev_replace_args)  #define BTRFS_IOC_FILE_EXTENT_SAME _IOWR(BTRFS_IOCTL_MAGIC, 54, \  					 struct btrfs_ioctl_same_args) +#define BTRFS_IOC_GET_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \ +				   struct btrfs_ioctl_feature_flags) +#define BTRFS_IOC_SET_FEATURES _IOW(BTRFS_IOCTL_MAGIC, 57, \ +				   struct btrfs_ioctl_feature_flags[2]) +#define BTRFS_IOC_GET_SUPPORTED_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \ +				   struct btrfs_ioctl_feature_flags[3])  #endif /* _UAPI_LINUX_BTRFS_H */ diff --git a/include/uapi/linux/can.h b/include/uapi/linux/can.h index e52958d7c2d..41892f72005 100644 --- a/include/uapi/linux/can.h +++ b/include/uapi/linux/can.h @@ -8,10 +8,42 @@   * Copyright (c) 2002-2007 Volkswagen Group Electronic Research   * 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. + * 3. Neither the name of Volkswagen nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * Alternatively, provided that this notice is retained in full, this + * software may be distributed under the terms of the GNU General + * Public License ("GPL") version 2, in which case the provisions of the + * GPL apply INSTEAD OF those given above. + * + * The provided data structures and external interfaces from this code + * are not restricted to be used by modules with a GPL compatible license. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT + * OWNER 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.   */ -#ifndef CAN_H -#define CAN_H +#ifndef _UAPI_CAN_H +#define _UAPI_CAN_H  #include <linux/types.h>  #include <linux/socket.h> @@ -159,4 +191,4 @@ struct can_filter {  #define CAN_INV_FILTER 0x20000000U /* to be set in can_filter.can_id */ -#endif /* CAN_H */ +#endif /* !_UAPI_CAN_H */ diff --git a/include/uapi/linux/can/bcm.h b/include/uapi/linux/can/bcm.h index 3ebe387fea4..89ddb9dc9bd 100644 --- a/include/uapi/linux/can/bcm.h +++ b/include/uapi/linux/can/bcm.h @@ -7,10 +7,42 @@   * Copyright (c) 2002-2007 Volkswagen Group Electronic Research   * 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. + * 3. Neither the name of Volkswagen nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * Alternatively, provided that this notice is retained in full, this + * software may be distributed under the terms of the GNU General + * Public License ("GPL") version 2, in which case the provisions of the + * GPL apply INSTEAD OF those given above. + * + * The provided data structures and external interfaces from this code + * are not restricted to be used by modules with a GPL compatible license. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT + * OWNER 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.   */ -#ifndef CAN_BCM_H -#define CAN_BCM_H +#ifndef _UAPI_CAN_BCM_H +#define _UAPI_CAN_BCM_H  #include <linux/types.h>  #include <linux/can.h> @@ -63,4 +95,4 @@ enum {  #define TX_RESET_MULTI_IDX  0x0200  #define RX_RTR_FRAME        0x0400 -#endif /* CAN_BCM_H */ +#endif /* !_UAPI_CAN_BCM_H */ diff --git a/include/uapi/linux/can/error.h b/include/uapi/linux/can/error.h index 7b7148bded7..c247446ab25 100644 --- a/include/uapi/linux/can/error.h +++ b/include/uapi/linux/can/error.h @@ -7,10 +7,42 @@   * Copyright (c) 2002-2007 Volkswagen Group Electronic Research   * 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. + * 3. Neither the name of Volkswagen nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * Alternatively, provided that this notice is retained in full, this + * software may be distributed under the terms of the GNU General + * Public License ("GPL") version 2, in which case the provisions of the + * GPL apply INSTEAD OF those given above. + * + * The provided data structures and external interfaces from this code + * are not restricted to be used by modules with a GPL compatible license. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT + * OWNER 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.   */ -#ifndef CAN_ERROR_H -#define CAN_ERROR_H +#ifndef _UAPI_CAN_ERROR_H +#define _UAPI_CAN_ERROR_H  #define CAN_ERR_DLC 8 /* dlc for error message frames */ @@ -88,4 +120,4 @@  /* controller specific additional information / data[5..7] */ -#endif /* CAN_ERROR_H */ +#endif /* _UAPI_CAN_ERROR_H */ diff --git a/include/uapi/linux/can/gw.h b/include/uapi/linux/can/gw.h index 4e27c82b564..3e6184cf2f6 100644 --- a/include/uapi/linux/can/gw.h +++ b/include/uapi/linux/can/gw.h @@ -7,10 +7,42 @@   * Copyright (c) 2011 Volkswagen Group Electronic Research   * 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. + * 3. Neither the name of Volkswagen nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * Alternatively, provided that this notice is retained in full, this + * software may be distributed under the terms of the GNU General + * Public License ("GPL") version 2, in which case the provisions of the + * GPL apply INSTEAD OF those given above. + * + * The provided data structures and external interfaces from this code + * are not restricted to be used by modules with a GPL compatible license. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT + * OWNER 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.   */ -#ifndef CAN_GW_H -#define CAN_GW_H +#ifndef _UAPI_CAN_GW_H +#define _UAPI_CAN_GW_H  #include <linux/types.h>  #include <linux/can.h> @@ -168,4 +200,4 @@ enum {   *         Beware of sending unpacked or aligned structs!   */ -#endif +#endif /* !_UAPI_CAN_GW_H */ diff --git a/include/uapi/linux/can/netlink.h b/include/uapi/linux/can/netlink.h index 14966ddb7df..813d11f5497 100644 --- a/include/uapi/linux/can/netlink.h +++ b/include/uapi/linux/can/netlink.h @@ -5,10 +5,18 @@   *   * Copyright (c) 2009 Wolfgang Grandegger <wg@grandegger.com>   * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the version 2 of the GNU General Public License + * as published by the Free Software Foundation + * + * 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 CAN_NETLINK_H -#define CAN_NETLINK_H +#ifndef _UAPI_CAN_NETLINK_H +#define _UAPI_CAN_NETLINK_H  #include <linux/types.h> @@ -88,6 +96,7 @@ struct can_ctrlmode {  #define CAN_CTRLMODE_3_SAMPLES		0x04	/* Triple sampling mode */  #define CAN_CTRLMODE_ONE_SHOT		0x08	/* One-Shot mode */  #define CAN_CTRLMODE_BERR_REPORTING	0x10	/* Bus-error reporting */ +#define CAN_CTRLMODE_FD			0x20	/* CAN FD mode */  /*   * CAN device statistics @@ -114,9 +123,11 @@ enum {  	IFLA_CAN_RESTART_MS,  	IFLA_CAN_RESTART,  	IFLA_CAN_BERR_COUNTER, +	IFLA_CAN_DATA_BITTIMING, +	IFLA_CAN_DATA_BITTIMING_CONST,  	__IFLA_CAN_MAX  };  #define IFLA_CAN_MAX	(__IFLA_CAN_MAX - 1) -#endif /* CAN_NETLINK_H */ +#endif /* !_UAPI_CAN_NETLINK_H */ diff --git a/include/uapi/linux/can/raw.h b/include/uapi/linux/can/raw.h index a814062b071..78ec76fd89a 100644 --- a/include/uapi/linux/can/raw.h +++ b/include/uapi/linux/can/raw.h @@ -8,10 +8,42 @@   * Copyright (c) 2002-2007 Volkswagen Group Electronic Research   * 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. + * 3. Neither the name of Volkswagen nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * Alternatively, provided that this notice is retained in full, this + * software may be distributed under the terms of the GNU General + * Public License ("GPL") version 2, in which case the provisions of the + * GPL apply INSTEAD OF those given above. + * + * The provided data structures and external interfaces from this code + * are not restricted to be used by modules with a GPL compatible license. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT + * OWNER 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.   */ -#ifndef CAN_RAW_H -#define CAN_RAW_H +#ifndef _UAPI_CAN_RAW_H +#define _UAPI_CAN_RAW_H  #include <linux/can.h> @@ -27,4 +59,4 @@ enum {  	CAN_RAW_FD_FRAMES,	/* allow CAN FD frames (default:off) */  }; -#endif +#endif /* !_UAPI_CAN_RAW_H */ diff --git a/include/uapi/linux/capability.h b/include/uapi/linux/capability.h index ba478fa3012..12c37a197d2 100644 --- a/include/uapi/linux/capability.h +++ b/include/uapi/linux/capability.h @@ -308,8 +308,12 @@ struct vfs_cap_data {  #define CAP_LEASE            28 +/* Allow writing the audit log via unicast netlink socket */ +  #define CAP_AUDIT_WRITE      29 +/* Allow configuration of audit via unicast netlink socket */ +  #define CAP_AUDIT_CONTROL    30  #define CAP_SETFCAP	     31 @@ -343,7 +347,12 @@ struct vfs_cap_data {  #define CAP_BLOCK_SUSPEND    36 -#define CAP_LAST_CAP         CAP_BLOCK_SUSPEND +/* Allow reading the audit log via multicast netlink socket */ + +#define CAP_AUDIT_READ		37 + + +#define CAP_LAST_CAP         CAP_AUDIT_READ  #define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP) diff --git a/include/uapi/linux/capi.h b/include/uapi/linux/capi.h index 65100d6cb89..7b145fd7afb 100644 --- a/include/uapi/linux/capi.h +++ b/include/uapi/linux/capi.h @@ -102,7 +102,7 @@ typedef struct capi_manufacturer_cmd {  /*   * member contr is input for - * CAPI_GET_MANUFACTURER, CAPI_VERSION, CAPI_GET_SERIAL + * CAPI_GET_MANUFACTURER, CAPI_GET_VERSION, CAPI_GET_SERIAL   * and CAPI_GET_PROFILE   */  typedef union capi_ioctl_struct { diff --git a/include/uapi/linux/dm-ioctl.h b/include/uapi/linux/dm-ioctl.h index f1e12bd40b3..c8a4302093a 100644 --- a/include/uapi/linux/dm-ioctl.h +++ b/include/uapi/linux/dm-ioctl.h @@ -267,9 +267,9 @@ enum {  #define DM_DEV_SET_GEOMETRY	_IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)  #define DM_VERSION_MAJOR	4 -#define DM_VERSION_MINOR	26 +#define DM_VERSION_MINOR	27  #define DM_VERSION_PATCHLEVEL	0 -#define DM_VERSION_EXTRA	"-ioctl (2013-08-15)" +#define DM_VERSION_EXTRA	"-ioctl (2013-10-30)"  /* Status bits */  #define DM_READONLY_FLAG	(1 << 0) /* In/Out */ @@ -341,4 +341,15 @@ enum {   */  #define DM_DATA_OUT_FLAG		(1 << 16) /* Out */ +/* + * If set with DM_DEV_REMOVE or DM_REMOVE_ALL this indicates that if + * the device cannot be removed immediately because it is still in use + * it should instead be scheduled for removal when it gets closed. + * + * On return from DM_DEV_REMOVE, DM_DEV_STATUS or other ioctls, this + * flag indicates that the device is scheduled to be removed when it + * gets closed. + */ +#define DM_DEFERRED_REMOVE		(1 << 17) /* In/Out */ +  #endif				/* _LINUX_DM_IOCTL_H */ diff --git a/include/uapi/linux/dm-log-userspace.h b/include/uapi/linux/dm-log-userspace.h index 0678c2adc42..0fa0d9ef06a 100644 --- a/include/uapi/linux/dm-log-userspace.h +++ b/include/uapi/linux/dm-log-userspace.h @@ -201,11 +201,18 @@   * int (*flush)(struct dm_dirty_log *log);   *   * Payload-to-userspace: - *	None. + *	If the 'integrated_flush' directive is present in the constructor + *	table, the payload is as same as DM_ULOG_MARK_REGION: + *		uint64_t [] - region(s) to mark + *	else + *		None   * Payload-to-kernel:   *	None.   * - * No incoming or outgoing payload.  Simply flush log state to disk. + * If the 'integrated_flush' option was used during the creation of the + * log, mark region requests are carried as payload in the flush request. + * Piggybacking the mark requests in this way allows for fewer communications + * between kernel and userspace.   *   * When the request has been processed, user-space must return the   * dm_ulog_request to the kernel - setting the 'error' field and clearing @@ -385,8 +392,15 @@   *	version 2:  DM_ULOG_CTR allowed to return a string containing a   *	            device name that is to be registered with DM via   *	            'dm_get_device'. + *	version 3:  DM_ULOG_FLUSH is capable of carrying payload for marking + *		    regions.  This "integrated flush" reduces the number of + *		    requests between the kernel and userspace by effectively + *		    merging 'mark' and 'flush' requests.  A constructor table + *		    argument ('integrated_flush') is required to turn this + *		    feature on, so it is backwards compatible with older + *		    userspace versions.   */ -#define DM_ULOG_REQUEST_VERSION 2 +#define DM_ULOG_REQUEST_VERSION 3  struct dm_ulog_request {  	/* diff --git a/include/uapi/linux/dn.h b/include/uapi/linux/dn.h index 5fbdd3d49eb..4295c745f34 100644 --- a/include/uapi/linux/dn.h +++ b/include/uapi/linux/dn.h @@ -1,6 +1,7 @@  #ifndef _LINUX_DN_H  #define _LINUX_DN_H +#include <linux/ioctl.h>  #include <linux/types.h>  #include <linux/if_ether.h> diff --git a/include/uapi/linux/elf-em.h b/include/uapi/linux/elf-em.h index 59c17a2d38a..01529bd9643 100644 --- a/include/uapi/linux/elf-em.h +++ b/include/uapi/linux/elf-em.h @@ -31,7 +31,6 @@  #define EM_CRIS		76	/* Axis Communications 32-bit embedded processor */  #define EM_V850		87	/* NEC v850 */  #define EM_M32R		88	/* Renesas M32R */ -#define EM_H8_300	46	/* Renesas H8/300,300H,H8S */  #define EM_MN10300	89	/* Panasonic/MEI MN10300, AM33 */  #define EM_BLACKFIN     106     /* ADI Blackfin Processor */  #define EM_TI_C6000	140	/* TI C6X DSPs */ diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h index 38dbafaa534..e3c7a719c76 100644 --- a/include/uapi/linux/ethtool.h +++ b/include/uapi/linux/ethtool.h @@ -16,37 +16,97 @@  #include <linux/types.h>  #include <linux/if_ether.h> -/* This should work for both 32 and 64 bit userland. */ +/* All structures exposed to userland should be defined such that they + * have the same layout for 32-bit and 64-bit userland. + */ + +/** + * struct ethtool_cmd - link control and status + * @cmd: Command number = %ETHTOOL_GSET or %ETHTOOL_SSET + * @supported: Bitmask of %SUPPORTED_* flags for the link modes, + *	physical connectors and other link features for which the + *	interface supports autonegotiation or auto-detection. + *	Read-only. + * @advertising: Bitmask of %ADVERTISED_* flags for the link modes, + *	physical connectors and other link features that are + *	advertised through autonegotiation or enabled for + *	auto-detection. + * @speed: Low bits of the speed + * @duplex: Duplex mode; one of %DUPLEX_* + * @port: Physical connector type; one of %PORT_* + * @phy_address: MDIO address of PHY (transceiver); 0 or 255 if not + *	applicable.  For clause 45 PHYs this is the PRTAD. + * @transceiver: Historically used to distinguish different possible + *	PHY types, but not in a consistent way.  Deprecated. + * @autoneg: Enable/disable autonegotiation and auto-detection; + *	either %AUTONEG_DISABLE or %AUTONEG_ENABLE + * @mdio_support: Bitmask of %ETH_MDIO_SUPPORTS_* flags for the MDIO + *	protocols supported by the interface; 0 if unknown. + *	Read-only. + * @maxtxpkt: Historically used to report TX IRQ coalescing; now + *	obsoleted by &struct ethtool_coalesce.  Read-only; deprecated. + * @maxrxpkt: Historically used to report RX IRQ coalescing; now + *	obsoleted by &struct ethtool_coalesce.  Read-only; deprecated. + * @speed_hi: High bits of the speed + * @eth_tp_mdix: Ethernet twisted-pair MDI(-X) status; one of + *	%ETH_TP_MDI_*.  If the status is unknown or not applicable, the + *	value will be %ETH_TP_MDI_INVALID.  Read-only. + * @eth_tp_mdix_ctrl: Ethernet twisted pair MDI(-X) control; one of + *	%ETH_TP_MDI_*.  If MDI(-X) control is not implemented, reads + *	yield %ETH_TP_MDI_INVALID and writes may be ignored or rejected. + *	When written successfully, the link should be renegotiated if + *	necessary. + * @lp_advertising: Bitmask of %ADVERTISED_* flags for the link modes + *	and other link features that the link partner advertised + *	through autonegotiation; 0 if unknown or not applicable. + *	Read-only. + * + * The link speed in Mbps is split between @speed and @speed_hi.  Use + * the ethtool_cmd_speed() and ethtool_cmd_speed_set() functions to + * access it. + * + * If autonegotiation is disabled, the speed and @duplex represent the + * fixed link mode and are writable if the driver supports multiple + * link modes.  If it is enabled then they are read-only; if the link + * is up they represent the negotiated link mode; if the link is down, + * the speed is 0, %SPEED_UNKNOWN or the highest enabled speed and + * @duplex is %DUPLEX_UNKNOWN or the best enabled duplex mode. + * + * Some hardware interfaces may have multiple PHYs and/or physical + * connectors fitted or do not allow the driver to detect which are + * fitted.  For these interfaces @port and/or @phy_address may be + * writable, possibly dependent on @autoneg being %AUTONEG_DISABLE. + * Otherwise, attempts to write different values may be ignored or + * rejected. + * + * Users should assume that all fields not marked read-only are + * writable and subject to validation by the driver.  They should use + * %ETHTOOL_GSET to get the current values before making specific + * changes and then applying them with %ETHTOOL_SSET. + * + * Drivers that implement set_settings() should validate all fields + * other than @cmd that are not described as read-only or deprecated, + * and must ignore all fields described as read-only. + * + * Deprecated fields should be ignored by both users and drivers. + */  struct ethtool_cmd {  	__u32	cmd; -	__u32	supported;	/* Features this interface supports */ -	__u32	advertising;	/* Features this interface advertises */ -	__u16	speed;	        /* The forced speed (lower bits) in -				 * Mbps. Please use -				 * ethtool_cmd_speed()/_set() to -				 * access it */ -	__u8	duplex;		/* Duplex, half or full */ -	__u8	port;		/* Which connector port */ -	__u8	phy_address;	/* MDIO PHY address (PRTAD for clause 45). -				 * May be read-only or read-write -				 * depending on the driver. -				 */ -	__u8	transceiver;	/* Which transceiver to use */ -	__u8	autoneg;	/* Enable or disable autonegotiation */ -	__u8	mdio_support;	/* MDIO protocols supported.  Read-only. -				 * Not set by all drivers. -				 */ -	__u32	maxtxpkt;	/* Tx pkts before generating tx int */ -	__u32	maxrxpkt;	/* Rx pkts before generating rx int */ -	__u16	speed_hi;       /* The forced speed (upper -				 * bits) in Mbps. Please use -				 * ethtool_cmd_speed()/_set() to -				 * access it */ -	__u8	eth_tp_mdix;	/* twisted pair MDI-X status */ -	__u8    eth_tp_mdix_ctrl; /* twisted pair MDI-X control, when set, -				   * link should be renegotiated if necessary -				   */ -	__u32	lp_advertising;	/* Features the link partner advertises */ +	__u32	supported; +	__u32	advertising; +	__u16	speed; +	__u8	duplex; +	__u8	port; +	__u8	phy_address; +	__u8	transceiver; +	__u8	autoneg; +	__u8	mdio_support; +	__u32	maxtxpkt; +	__u32	maxrxpkt; +	__u16	speed_hi; +	__u8	eth_tp_mdix; +	__u8	eth_tp_mdix_ctrl; +	__u32	lp_advertising;  	__u32	reserved[2];  }; @@ -79,37 +139,68 @@ static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)  #define ETHTOOL_FWVERS_LEN	32  #define ETHTOOL_BUSINFO_LEN	32 -/* these strings are set to whatever the driver author decides... */ + +/** + * struct ethtool_drvinfo - general driver and device information + * @cmd: Command number = %ETHTOOL_GDRVINFO + * @driver: Driver short name.  This should normally match the name + *	in its bus driver structure (e.g. pci_driver::name).  Must + *	not be an empty string. + * @version: Driver version string; may be an empty string + * @fw_version: Firmware version string; may be an empty string + * @bus_info: Device bus address.  This should match the dev_name() + *	string for the underlying bus device, if there is one.  May be + *	an empty string. + * @n_priv_flags: Number of flags valid for %ETHTOOL_GPFLAGS and + *	%ETHTOOL_SPFLAGS commands; also the number of strings in the + *	%ETH_SS_PRIV_FLAGS set + * @n_stats: Number of u64 statistics returned by the %ETHTOOL_GSTATS + *	command; also the number of strings in the %ETH_SS_STATS set + * @testinfo_len: Number of results returned by the %ETHTOOL_TEST + *	command; also the number of strings in the %ETH_SS_TEST set + * @eedump_len: Size of EEPROM accessible through the %ETHTOOL_GEEPROM + *	and %ETHTOOL_SEEPROM commands, in bytes + * @regdump_len: Size of register dump returned by the %ETHTOOL_GREGS + *	command, in bytes + * + * Users can use the %ETHTOOL_GSSET_INFO command to get the number of + * strings in any string set (from Linux 2.6.34). + * + * Drivers should set at most @driver, @version, @fw_version and + * @bus_info in their get_drvinfo() implementation.  The ethtool + * core fills in the other fields using other driver operations. + */  struct ethtool_drvinfo {  	__u32	cmd; -	char	driver[32];	/* driver short name, "tulip", "eepro100" */ -	char	version[32];	/* driver version string */ -	char	fw_version[ETHTOOL_FWVERS_LEN];	/* firmware version string */ -	char	bus_info[ETHTOOL_BUSINFO_LEN];	/* Bus info for this IF. */ -				/* For PCI devices, use pci_name(pci_dev). */ +	char	driver[32]; +	char	version[32]; +	char	fw_version[ETHTOOL_FWVERS_LEN]; +	char	bus_info[ETHTOOL_BUSINFO_LEN];  	char	reserved1[32];  	char	reserved2[12]; -				/* -				 * Some struct members below are filled in -				 * using ops->get_sset_count().  Obtaining -				 * this info from ethtool_drvinfo is now -				 * deprecated; Use ETHTOOL_GSSET_INFO -				 * instead. -				 */ -	__u32	n_priv_flags;	/* number of flags valid in ETHTOOL_GPFLAGS */ -	__u32	n_stats;	/* number of u64's from ETHTOOL_GSTATS */ +	__u32	n_priv_flags; +	__u32	n_stats;  	__u32	testinfo_len; -	__u32	eedump_len;	/* Size of data from ETHTOOL_GEEPROM (bytes) */ -	__u32	regdump_len;	/* Size of data from ETHTOOL_GREGS (bytes) */ +	__u32	eedump_len; +	__u32	regdump_len;  };  #define SOPASS_MAX	6 -/* wake-on-lan settings */ + +/** + * struct ethtool_wolinfo - Wake-On-Lan configuration + * @cmd: Command number = %ETHTOOL_GWOL or %ETHTOOL_SWOL + * @supported: Bitmask of %WAKE_* flags for supported Wake-On-Lan modes. + *	Read-only. + * @wolopts: Bitmask of %WAKE_* flags for enabled Wake-On-Lan modes. + * @sopass: SecureOn(tm) password; meaningful only if %WAKE_MAGICSECURE + *	is set in @wolopts. + */  struct ethtool_wolinfo {  	__u32	cmd;  	__u32	supported;  	__u32	wolopts; -	__u8	sopass[SOPASS_MAX]; /* SecureOn(tm) password */ +	__u8	sopass[SOPASS_MAX];  };  /* for passing single values */ @@ -118,20 +209,51 @@ struct ethtool_value {  	__u32	data;  }; -/* for passing big chunks of data */ +/** + * struct ethtool_regs - hardware register dump + * @cmd: Command number = %ETHTOOL_GREGS + * @version: Dump format version.  This is driver-specific and may + *	distinguish different chips/revisions.  Drivers must use new + *	version numbers whenever the dump format changes in an + *	incompatible way. + * @len: On entry, the real length of @data.  On return, the number of + *	bytes used. + * @data: Buffer for the register dump + * + * Users should use %ETHTOOL_GDRVINFO to find the maximum length of + * a register dump for the interface.  They must allocate the buffer + * immediately following this structure. + */  struct ethtool_regs {  	__u32	cmd; -	__u32	version; /* driver-specific, indicates different chips/revs */ -	__u32	len; /* bytes */ +	__u32	version; +	__u32	len;  	__u8	data[0];  }; -/* for passing EEPROM chunks */ +/** + * struct ethtool_eeprom - EEPROM dump + * @cmd: Command number = %ETHTOOL_GEEPROM, %ETHTOOL_GMODULEEEPROM or + *	%ETHTOOL_SEEPROM + * @magic: A 'magic cookie' value to guard against accidental changes. + *	The value passed in to %ETHTOOL_SEEPROM must match the value + *	returned by %ETHTOOL_GEEPROM for the same device.  This is + *	unused when @cmd is %ETHTOOL_GMODULEEEPROM. + * @offset: Offset within the EEPROM to begin reading/writing, in bytes + * @len: On entry, number of bytes to read/write.  On successful + *	return, number of bytes actually read/written.  In case of + *	error, this may indicate at what point the error occurred. + * @data: Buffer to read/write from + * + * Users may use %ETHTOOL_GDRVINFO or %ETHTOOL_GMODULEINFO to find + * the length of an on-board or module EEPROM, respectively.  They + * must allocate the buffer immediately following this structure. + */  struct ethtool_eeprom {  	__u32	cmd;  	__u32	magic; -	__u32	offset; /* in bytes */ -	__u32	len; /* in bytes */ +	__u32	offset; +	__u32	len;  	__u8	data[0];  }; @@ -229,17 +351,18 @@ struct ethtool_modinfo {   * @rate_sample_interval: How often to do adaptive coalescing packet rate   *	sampling, measured in seconds.  Must not be zero.   * - * Each pair of (usecs, max_frames) fields specifies this exit - * condition for interrupt coalescing: + * Each pair of (usecs, max_frames) fields specifies that interrupts + * should be coalesced until   *	(usecs > 0 && time_since_first_completion >= usecs) ||   *	(max_frames > 0 && completed_frames >= max_frames) + *   * It is illegal to set both usecs and max_frames to zero as this   * would cause interrupts to never be generated.  To disable   * coalescing, set usecs = 0 and max_frames = 1.   *   * Some implementations ignore the value of max_frames and use the - * condition: - *	time_since_first_completion >= usecs + * condition time_since_first_completion >= usecs + *   * This is deprecated.  Drivers for hardware that does not support   * counting completions should validate that max_frames == !rx_usecs.   * @@ -279,22 +402,37 @@ struct ethtool_coalesce {  	__u32	rate_sample_interval;  }; -/* for configuring RX/TX ring parameters */ +/** + * struct ethtool_ringparam - RX/TX ring parameters + * @cmd: Command number = %ETHTOOL_GRINGPARAM or %ETHTOOL_SRINGPARAM + * @rx_max_pending: Maximum supported number of pending entries per + *	RX ring.  Read-only. + * @rx_mini_max_pending: Maximum supported number of pending entries + *	per RX mini ring.  Read-only. + * @rx_jumbo_max_pending: Maximum supported number of pending entries + *	per RX jumbo ring.  Read-only. + * @tx_max_pending: Maximum supported number of pending entries per + *	TX ring.  Read-only. + * @rx_pending: Current maximum number of pending entries per RX ring + * @rx_mini_pending: Current maximum number of pending entries per RX + *	mini ring + * @rx_jumbo_pending: Current maximum number of pending entries per RX + *	jumbo ring + * @tx_pending: Current maximum supported number of pending entries + *	per TX ring + * + * If the interface does not have separate RX mini and/or jumbo rings, + * @rx_mini_max_pending and/or @rx_jumbo_max_pending will be 0. + * + * There may also be driver-dependent minimum values for the number + * of entries per ring. + */  struct ethtool_ringparam { -	__u32	cmd;	/* ETHTOOL_{G,S}RINGPARAM */ - -	/* Read only attributes.  These indicate the maximum number -	 * of pending RX/TX ring entries the driver will allow the -	 * user to set. -	 */ +	__u32	cmd;  	__u32	rx_max_pending;  	__u32	rx_mini_max_pending;  	__u32	rx_jumbo_max_pending;  	__u32	tx_max_pending; - -	/* Values changeable by the user.  The valid values are -	 * in the range 1 to the "*_max_pending" counterpart above. -	 */  	__u32	rx_pending;  	__u32	rx_mini_pending;  	__u32	rx_jumbo_pending; @@ -329,51 +467,96 @@ struct ethtool_channels {  	__u32	combined_count;  }; -/* for configuring link flow control parameters */ +/** + * struct ethtool_pauseparam - Ethernet pause (flow control) parameters + * @cmd: Command number = %ETHTOOL_GPAUSEPARAM or %ETHTOOL_SPAUSEPARAM + * @autoneg: Flag to enable autonegotiation of pause frame use + * @rx_pause: Flag to enable reception of pause frames + * @tx_pause: Flag to enable transmission of pause frames + * + * Drivers should reject a non-zero setting of @autoneg when + * autoneogotiation is disabled (or not supported) for the link. + * + * If the link is autonegotiated, drivers should use + * mii_advertise_flowctrl() or similar code to set the advertised + * pause frame capabilities based on the @rx_pause and @tx_pause flags, + * even if @autoneg is zero.  They should also allow the advertised + * pause frame capabilities to be controlled directly through the + * advertising field of &struct ethtool_cmd. + * + * If @autoneg is non-zero, the MAC is configured to send and/or + * receive pause frames according to the result of autonegotiation. + * Otherwise, it is configured directly based on the @rx_pause and + * @tx_pause flags. + */  struct ethtool_pauseparam { -	__u32	cmd;	/* ETHTOOL_{G,S}PAUSEPARAM */ - -	/* If the link is being auto-negotiated (via ethtool_cmd.autoneg -	 * being true) the user may set 'autoneg' here non-zero to have the -	 * pause parameters be auto-negotiated too.  In such a case, the -	 * {rx,tx}_pause values below determine what capabilities are -	 * advertised. -	 * -	 * If 'autoneg' is zero or the link is not being auto-negotiated, -	 * then {rx,tx}_pause force the driver to use/not-use pause -	 * flow control. -	 */ +	__u32	cmd;  	__u32	autoneg;  	__u32	rx_pause;  	__u32	tx_pause;  };  #define ETH_GSTRING_LEN		32 + +/** + * enum ethtool_stringset - string set ID + * @ETH_SS_TEST: Self-test result names, for use with %ETHTOOL_TEST + * @ETH_SS_STATS: Statistic names, for use with %ETHTOOL_GSTATS + * @ETH_SS_PRIV_FLAGS: Driver private flag names, for use with + *	%ETHTOOL_GPFLAGS and %ETHTOOL_SPFLAGS + * @ETH_SS_NTUPLE_FILTERS: Previously used with %ETHTOOL_GRXNTUPLE; + *	now deprecated + * @ETH_SS_FEATURES: Device feature names + */  enum ethtool_stringset {  	ETH_SS_TEST		= 0,  	ETH_SS_STATS,  	ETH_SS_PRIV_FLAGS, -	ETH_SS_NTUPLE_FILTERS,	/* Do not use, GRXNTUPLE is now deprecated */ +	ETH_SS_NTUPLE_FILTERS,  	ETH_SS_FEATURES,  }; -/* for passing string sets for data tagging */ +/** + * struct ethtool_gstrings - string set for data tagging + * @cmd: Command number = %ETHTOOL_GSTRINGS + * @string_set: String set ID; one of &enum ethtool_stringset + * @len: On return, the number of strings in the string set + * @data: Buffer for strings.  Each string is null-padded to a size of + *	%ETH_GSTRING_LEN. + * + * Users must use %ETHTOOL_GSSET_INFO to find the number of strings in + * the string set.  They must allocate a buffer of the appropriate + * size immediately following this structure. + */  struct ethtool_gstrings { -	__u32	cmd;		/* ETHTOOL_GSTRINGS */ -	__u32	string_set;	/* string set id e.c. ETH_SS_TEST, etc*/ -	__u32	len;		/* number of strings in the string set */ +	__u32	cmd; +	__u32	string_set; +	__u32	len;  	__u8	data[0];  }; +/** + * struct ethtool_sset_info - string set information + * @cmd: Command number = %ETHTOOL_GSSET_INFO + * @sset_mask: On entry, a bitmask of string sets to query, with bits + *	numbered according to &enum ethtool_stringset.  On return, a + *	bitmask of those string sets queried that are supported. + * @data: Buffer for string set sizes.  On return, this contains the + *	size of each string set that was queried and supported, in + *	order of ID. + * + * Example: The user passes in @sset_mask = 0x7 (sets 0, 1, 2) and on + * return @sset_mask == 0x6 (sets 1, 2).  Then @data[0] contains the + * size of set 1 and @data[1] contains the size of set 2. + * + * Users must allocate a buffer of the appropriate size (4 * number of + * sets queried) immediately following this structure. + */  struct ethtool_sset_info { -	__u32	cmd;		/* ETHTOOL_GSSET_INFO */ +	__u32	cmd;  	__u32	reserved; -	__u64	sset_mask;	/* input: each bit selects an sset to query */ -				/* output: each bit a returned sset */ -	__u32	data[0];	/* ETH_SS_xxx count, in order, based on bits -				   in sset_mask.  One bit implies one -				   __u32, two bits implies two -				   __u32's, etc. */ +	__u64	sset_mask; +	__u32	data[0];  };  /** @@ -393,24 +576,58 @@ enum ethtool_test_flags {  	ETH_TEST_FL_EXTERNAL_LB_DONE	= (1 << 3),  }; -/* for requesting NIC test and getting results*/ +/** + * struct ethtool_test - device self-test invocation + * @cmd: Command number = %ETHTOOL_TEST + * @flags: A bitmask of flags from &enum ethtool_test_flags.  Some + *	flags may be set by the user on entry; others may be set by + *	the driver on return. + * @len: On return, the number of test results + * @data: Array of test results + * + * Users must use %ETHTOOL_GSSET_INFO or %ETHTOOL_GDRVINFO to find the + * number of test results that will be returned.  They must allocate a + * buffer of the appropriate size (8 * number of results) immediately + * following this structure. + */  struct ethtool_test { -	__u32	cmd;		/* ETHTOOL_TEST */ -	__u32	flags;		/* ETH_TEST_FL_xxx */ +	__u32	cmd; +	__u32	flags;  	__u32	reserved; -	__u32	len;		/* result length, in number of u64 elements */ +	__u32	len;  	__u64	data[0];  }; -/* for dumping NIC-specific statistics */ +/** + * struct ethtool_stats - device-specific statistics + * @cmd: Command number = %ETHTOOL_GSTATS + * @n_stats: On return, the number of statistics + * @data: Array of statistics + * + * Users must use %ETHTOOL_GSSET_INFO or %ETHTOOL_GDRVINFO to find the + * number of statistics that will be returned.  They must allocate a + * buffer of the appropriate size (8 * number of statistics) + * immediately following this structure. + */  struct ethtool_stats { -	__u32	cmd;		/* ETHTOOL_GSTATS */ -	__u32	n_stats;	/* number of u64's being returned */ +	__u32	cmd; +	__u32	n_stats;  	__u64	data[0];  }; +/** + * struct ethtool_perm_addr - permanent hardware address + * @cmd: Command number = %ETHTOOL_GPERMADDR + * @size: On entry, the size of the buffer.  On return, the size of the + *	address.  The command fails if the buffer is too small. + * @data: Buffer for the address + * + * Users must allocate the buffer immediately following this structure. + * A buffer size of %MAX_ADDR_LEN should be sufficient for any address + * type. + */  struct ethtool_perm_addr { -	__u32	cmd;		/* ETHTOOL_GPERMADDR */ +	__u32	cmd;  	__u32	size;  	__u8	data[0];  }; @@ -593,7 +810,7 @@ struct ethtool_rx_flow_spec {   * %ETHTOOL_SRXCLSRLINS may add the rule at any suitable unused   * location, and may remove a rule at a later location (lower   * priority) that matches exactly the same set of flows.  The special - * values are: %RX_CLS_LOC_ANY, selecting any location; + * values are %RX_CLS_LOC_ANY, selecting any location;   * %RX_CLS_LOC_FIRST, selecting the first suitable location (maximum   * priority); and %RX_CLS_LOC_LAST, selecting the last suitable   * location (minimum priority).  Additional special values may be @@ -630,6 +847,38 @@ struct ethtool_rxfh_indir {  };  /** + * struct ethtool_rxfh - command to get/set RX flow hash indir or/and hash key. + * @cmd: Specific command number - %ETHTOOL_GRSSH or %ETHTOOL_SRSSH + * @rss_context: RSS context identifier. + * @indir_size: On entry, the array size of the user buffer for the + *	indirection table, which may be zero, or (for %ETHTOOL_SRSSH), + *	%ETH_RXFH_INDIR_NO_CHANGE.  On return from %ETHTOOL_GRSSH, + *	the array size of the hardware indirection table. + * @key_size: On entry, the array size of the user buffer for the hash key, + *	which may be zero.  On return from %ETHTOOL_GRSSH, the size of the + *	hardware hash key. + * @rsvd:	Reserved for future extensions. + * @rss_config: RX ring/queue index for each hash value i.e., indirection table + *	of @indir_size __u32 elements, followed by hash key of @key_size + *	bytes. + * + * For %ETHTOOL_GRSSH, a @indir_size and key_size of zero means that only the + * size should be returned.  For %ETHTOOL_SRSSH, an @indir_size of + * %ETH_RXFH_INDIR_NO_CHANGE means that indir table setting is not requested + * and a @indir_size of zero means the indir table should be reset to default + * values. + */ +struct ethtool_rxfh { +	__u32   cmd; +	__u32	rss_context; +	__u32   indir_size; +	__u32   key_size; +	__u32	rsvd[2]; +	__u32   rss_config[0]; +}; +#define ETH_RXFH_INDIR_NO_CHANGE	0xffffffff + +/**   * struct ethtool_rx_ntuple_flow_spec - specification for RX flow filter   * @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW   * @h_u: Flow field values to match (dependent on @flow_type) @@ -704,9 +953,6 @@ struct ethtool_flash {   * 	 for %ETHTOOL_GET_DUMP_FLAG command   * @data: data collected for get dump data operation   */ - -#define ETH_FW_DUMP_DISABLE 0 -  struct ethtool_dump {  	__u32	cmd;  	__u32	version; @@ -715,6 +961,8 @@ struct ethtool_dump {  	__u8	data[0];  }; +#define ETH_FW_DUMP_DISABLE 0 +  /* for returning and changing feature sets */  /** @@ -734,8 +982,9 @@ struct ethtool_get_features_block {  /**   * struct ethtool_gfeatures - command to get state of device's features   * @cmd: command number = %ETHTOOL_GFEATURES - * @size: in: number of elements in the features[] array; - *       out: number of elements in features[] needed to hold all features + * @size: On entry, the number of elements in the features[] array; + *	on return, the number of elements in features[] needed to hold + *	all features   * @features: state of features   */  struct ethtool_gfeatures { @@ -901,11 +1150,13 @@ enum ethtool_sfeatures_retval_bits {  #define ETHTOOL_GEEE		0x00000044 /* Get EEE settings */  #define ETHTOOL_SEEE		0x00000045 /* Set EEE settings */ +#define ETHTOOL_GRSSH		0x00000046 /* Get RX flow hash configuration */ +#define ETHTOOL_SRSSH		0x00000047 /* Set RX flow hash configuration */ +  /* compatibility with older code */  #define SPARC_ETH_GSET		ETHTOOL_GSET  #define SPARC_ETH_SSET		ETHTOOL_SSET -/* Indicates what features are supported by the interface. */  #define SUPPORTED_10baseT_Half		(1 << 0)  #define SUPPORTED_10baseT_Full		(1 << 1)  #define SUPPORTED_100baseT_Half		(1 << 2) @@ -934,7 +1185,6 @@ enum ethtool_sfeatures_retval_bits {  #define SUPPORTED_40000baseSR4_Full	(1 << 25)  #define SUPPORTED_40000baseLR4_Full	(1 << 26) -/* Indicates what features are advertised by the interface. */  #define ADVERTISED_10baseT_Half		(1 << 0)  #define ADVERTISED_10baseT_Full		(1 << 1)  #define ADVERTISED_100baseT_Half	(1 << 2) @@ -999,9 +1249,7 @@ enum ethtool_sfeatures_retval_bits {  #define XCVR_DUMMY2		0x03  #define XCVR_DUMMY3		0x04 -/* Enable or disable autonegotiation.  If this is set to enable, - * the forced link modes above are completely ignored. - */ +/* Enable or disable autonegotiation. */  #define AUTONEG_DISABLE		0x00  #define AUTONEG_ENABLE		0x01 diff --git a/include/uapi/linux/eventpoll.h b/include/uapi/linux/eventpoll.h index 2c267bcbb85..bc81fb2e1f0 100644 --- a/include/uapi/linux/eventpoll.h +++ b/include/uapi/linux/eventpoll.h @@ -61,5 +61,16 @@ struct epoll_event {  	__u64 data;  } EPOLL_PACKED; - +#ifdef CONFIG_PM_SLEEP +static inline void ep_take_care_of_epollwakeup(struct epoll_event *epev) +{ +	if ((epev->events & EPOLLWAKEUP) && !capable(CAP_BLOCK_SUSPEND)) +		epev->events &= ~EPOLLWAKEUP; +} +#else +static inline void ep_take_care_of_epollwakeup(struct epoll_event *epev) +{ +	epev->events &= ~EPOLLWAKEUP; +} +#endif  #endif /* _UAPI_LINUX_EVENTPOLL_H */ diff --git a/include/uapi/linux/falloc.h b/include/uapi/linux/falloc.h index 990c4ccf8b6..d1197ae3723 100644 --- a/include/uapi/linux/falloc.h +++ b/include/uapi/linux/falloc.h @@ -5,5 +5,40 @@  #define FALLOC_FL_PUNCH_HOLE	0x02 /* de-allocates range */  #define FALLOC_FL_NO_HIDE_STALE	0x04 /* reserved codepoint */ +/* + * FALLOC_FL_COLLAPSE_RANGE is used to remove a range of a file + * without leaving a hole in the file. The contents of the file beyond + * the range being removed is appended to the start offset of the range + * being removed (i.e. the hole that was punched is "collapsed"), + * resulting in a file layout that looks like the range that was + * removed never existed. As such collapsing a range of a file changes + * the size of the file, reducing it by the same length of the range + * that has been removed by the operation. + * + * Different filesystems may implement different limitations on the + * granularity of the operation. Most will limit operations to + * filesystem block size boundaries, but this boundary may be larger or + * smaller depending on the filesystem and/or the configuration of the + * filesystem or file. + * + * Attempting to collapse a range that crosses the end of the file is + * considered an illegal operation - just use ftruncate(2) if you need + * to collapse a range that crosses EOF. + */ +#define FALLOC_FL_COLLAPSE_RANGE	0x08 + +/* + * FALLOC_FL_ZERO_RANGE is used to convert a range of file to zeros preferably + * without issuing data IO. Blocks should be preallocated for the regions that + * span holes in the file, and the entire range is preferable converted to + * unwritten extents - even though file system may choose to zero out the + * extent or do whatever which will result in reading zeros from the range + * while the range remains allocated for the file. + * + * This can be also used to preallocate blocks past EOF in the same way as + * with fallocate. Flag FALLOC_FL_KEEP_SIZE should cause the inode + * size to remain the same. + */ +#define FALLOC_FL_ZERO_RANGE		0x10  #endif /* _UAPI_FALLOC_H_ */ diff --git a/include/uapi/linux/fd.h b/include/uapi/linux/fd.h index f1f3dd5981b..84c517cbce9 100644 --- a/include/uapi/linux/fd.h +++ b/include/uapi/linux/fd.h @@ -185,7 +185,8 @@ enum {  				 * to clear media change status */  	FD_UNUSED_BIT,  	FD_DISK_CHANGED_BIT,	/* disk has been changed since last i/o */ -	FD_DISK_WRITABLE_BIT	/* disk is writable */ +	FD_DISK_WRITABLE_BIT,	/* disk is writable */ +	FD_OPEN_SHOULD_FAIL_BIT  };  #define FDSETDRVPRM _IOW(2, 0x90, struct floppy_drive_params) diff --git a/include/uapi/linux/filter.h b/include/uapi/linux/filter.h index 8eb9ccaa5b4..253b4d42cf2 100644 --- a/include/uapi/linux/filter.h +++ b/include/uapi/linux/filter.h @@ -130,7 +130,8 @@ struct sock_fprog {	/* Required for SO_ATTACH_FILTER. */  #define SKF_AD_VLAN_TAG	44  #define SKF_AD_VLAN_TAG_PRESENT 48  #define SKF_AD_PAY_OFFSET	52 -#define SKF_AD_MAX	56 +#define SKF_AD_RANDOM	56 +#define SKF_AD_MAX	60  #define SKF_NET_OFF   (-0x100000)  #define SKF_LL_OFF    (-0x200000) diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h index 6c28b61bb69..ca1a11bb444 100644 --- a/include/uapi/linux/fs.h +++ b/include/uapi/linux/fs.h @@ -35,6 +35,9 @@  #define SEEK_HOLE	4	/* seek to the next hole */  #define SEEK_MAX	SEEK_HOLE +#define RENAME_NOREPLACE	(1 << 0)	/* Don't overwrite target */ +#define RENAME_EXCHANGE		(1 << 1)	/* Exchange source and dest */ +  struct fstrim_range {  	__u64 start;  	__u64 len; diff --git a/include/uapi/linux/fuse.h b/include/uapi/linux/fuse.h index 60bb2f9f7b7..25084a052a1 100644 --- a/include/uapi/linux/fuse.h +++ b/include/uapi/linux/fuse.h @@ -93,6 +93,15 @@   *   * 7.22   *  - add FUSE_ASYNC_DIO + * + * 7.23 + *  - add FUSE_WRITEBACK_CACHE + *  - add time_gran to fuse_init_out + *  - add reserved space to fuse_init_out + *  - add FATTR_CTIME + *  - add ctime and ctimensec to fuse_setattr_in + *  - add FUSE_RENAME2 request + *  - add FUSE_NO_OPEN_SUPPORT flag   */  #ifndef _LINUX_FUSE_H @@ -128,7 +137,7 @@  #define FUSE_KERNEL_VERSION 7  /** Minor version number of this interface */ -#define FUSE_KERNEL_MINOR_VERSION 22 +#define FUSE_KERNEL_MINOR_VERSION 23  /** The node ID of the root inode */  #define FUSE_ROOT_ID 1 @@ -188,6 +197,7 @@ struct fuse_file_lock {  #define FATTR_ATIME_NOW	(1 << 7)  #define FATTR_MTIME_NOW	(1 << 8)  #define FATTR_LOCKOWNER	(1 << 9) +#define FATTR_CTIME	(1 << 10)  /**   * Flags returned by the OPEN request @@ -219,6 +229,8 @@ struct fuse_file_lock {   * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one)   * FUSE_READDIRPLUS_AUTO: adaptive readdirplus   * FUSE_ASYNC_DIO: asynchronous direct I/O submission + * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes + * FUSE_NO_OPEN_SUPPORT: kernel supports zero-message opens   */  #define FUSE_ASYNC_READ		(1 << 0)  #define FUSE_POSIX_LOCKS	(1 << 1) @@ -236,6 +248,8 @@ struct fuse_file_lock {  #define FUSE_DO_READDIRPLUS	(1 << 13)  #define FUSE_READDIRPLUS_AUTO	(1 << 14)  #define FUSE_ASYNC_DIO		(1 << 15) +#define FUSE_WRITEBACK_CACHE	(1 << 16) +#define FUSE_NO_OPEN_SUPPORT	(1 << 17)  /**   * CUSE INIT request/reply flags @@ -343,6 +357,7 @@ enum fuse_opcode {  	FUSE_BATCH_FORGET  = 42,  	FUSE_FALLOCATE     = 43,  	FUSE_READDIRPLUS   = 44, +	FUSE_RENAME2       = 45,  	/* CUSE specific operations */  	CUSE_INIT          = 4096, @@ -421,6 +436,12 @@ struct fuse_rename_in {  	uint64_t	newdir;  }; +struct fuse_rename2_in { +	uint64_t	newdir; +	uint32_t	flags; +	uint32_t	padding; +}; +  struct fuse_link_in {  	uint64_t	oldnodeid;  }; @@ -433,10 +454,10 @@ struct fuse_setattr_in {  	uint64_t	lock_owner;  	uint64_t	atime;  	uint64_t	mtime; -	uint64_t	unused2; +	uint64_t	ctime;  	uint32_t	atimensec;  	uint32_t	mtimensec; -	uint32_t	unused3; +	uint32_t	ctimensec;  	uint32_t	mode;  	uint32_t	unused4;  	uint32_t	uid; @@ -554,6 +575,9 @@ struct fuse_init_in {  	uint32_t	flags;  }; +#define FUSE_COMPAT_INIT_OUT_SIZE 8 +#define FUSE_COMPAT_22_INIT_OUT_SIZE 24 +  struct fuse_init_out {  	uint32_t	major;  	uint32_t	minor; @@ -562,6 +586,8 @@ struct fuse_init_out {  	uint16_t	max_background;  	uint16_t	congestion_threshold;  	uint32_t	max_write; +	uint32_t	time_gran; +	uint32_t	unused[9];  };  #define CUSE_INIT_INFO_MAX 4096 diff --git a/include/uapi/linux/genetlink.h b/include/uapi/linux/genetlink.h index c880a417d8a..c3363ba1ae0 100644 --- a/include/uapi/linux/genetlink.h +++ b/include/uapi/linux/genetlink.h @@ -27,6 +27,8 @@ struct genlmsghdr {   */  #define GENL_ID_GENERATE	0  #define GENL_ID_CTRL		NLMSG_MIN_TYPE +#define GENL_ID_VFS_DQUOT	(NLMSG_MIN_TYPE + 1) +#define GENL_ID_PMCRAID		(NLMSG_MIN_TYPE + 2)  /**************************************************************************   * Controller diff --git a/include/uapi/linux/genwqe/genwqe_card.h b/include/uapi/linux/genwqe/genwqe_card.h new file mode 100644 index 00000000000..795e957bb84 --- /dev/null +++ b/include/uapi/linux/genwqe/genwqe_card.h @@ -0,0 +1,500 @@ +#ifndef __GENWQE_CARD_H__ +#define __GENWQE_CARD_H__ + +/** + * IBM Accelerator Family 'GenWQE' + * + * (C) Copyright IBM Corp. 2013 + * + * Author: Frank Haverkamp <haver@linux.vnet.ibm.com> + * Author: Joerg-Stephan Vogt <jsvogt@de.ibm.com> + * Author: Michael Jung <mijung@de.ibm.com> + * Author: Michael Ruettger <michael@ibmra.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License (version 2 only) + * as published by the Free Software Foundation. + * + * 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. + */ + +/* + * User-space API for the GenWQE card. For debugging and test purposes + * the register addresses are included here too. + */ + +#include <linux/types.h> +#include <linux/ioctl.h> + +/* Basename of sysfs, debugfs and /dev interfaces */ +#define GENWQE_DEVNAME			"genwqe" + +#define GENWQE_TYPE_ALTERA_230		0x00 /* GenWQE4 Stratix-IV-230 */ +#define GENWQE_TYPE_ALTERA_530		0x01 /* GenWQE4 Stratix-IV-530 */ +#define GENWQE_TYPE_ALTERA_A4		0x02 /* GenWQE5 A4 Stratix-V-A4 */ +#define GENWQE_TYPE_ALTERA_A7		0x03 /* GenWQE5 A7 Stratix-V-A7 */ + +/* MMIO Unit offsets: Each UnitID occupies a defined address range */ +#define GENWQE_UID_OFFS(uid)		((uid) << 24) +#define GENWQE_SLU_OFFS			GENWQE_UID_OFFS(0) +#define GENWQE_HSU_OFFS			GENWQE_UID_OFFS(1) +#define GENWQE_APP_OFFS			GENWQE_UID_OFFS(2) +#define GENWQE_MAX_UNITS		3 + +/* Common offsets per UnitID */ +#define IO_EXTENDED_ERROR_POINTER	0x00000048 +#define IO_ERROR_INJECT_SELECTOR	0x00000060 +#define IO_EXTENDED_DIAG_SELECTOR	0x00000070 +#define IO_EXTENDED_DIAG_READ_MBX	0x00000078 +#define IO_EXTENDED_DIAG_MAP(ring)	(0x00000500 | ((ring) << 3)) + +#define GENWQE_EXTENDED_DIAG_SELECTOR(ring, trace) (((ring) << 8) | (trace)) + +/* UnitID 0: Service Layer Unit (SLU) */ + +/* SLU: Unit Configuration Register */ +#define IO_SLU_UNITCFG			0x00000000 +#define IO_SLU_UNITCFG_TYPE_MASK	0x000000000ff00000 /* 27:20 */ + +/* SLU: Fault Isolation Register (FIR) (ac_slu_fir) */ +#define IO_SLU_FIR			0x00000008 /* read only, wr direct */ +#define IO_SLU_FIR_CLR			0x00000010 /* read and clear */ + +/* SLU: First Error Capture Register (FEC/WOF) */ +#define IO_SLU_FEC			0x00000018 + +#define IO_SLU_ERR_ACT_MASK		0x00000020 +#define IO_SLU_ERR_ATTN_MASK		0x00000028 +#define IO_SLU_FIRX1_ACT_MASK		0x00000030 +#define IO_SLU_FIRX0_ACT_MASK		0x00000038 +#define IO_SLU_SEC_LEM_DEBUG_OVR	0x00000040 +#define IO_SLU_EXTENDED_ERR_PTR		0x00000048 +#define IO_SLU_COMMON_CONFIG		0x00000060 + +#define IO_SLU_FLASH_FIR		0x00000108 +#define IO_SLU_SLC_FIR			0x00000110 +#define IO_SLU_RIU_TRAP			0x00000280 +#define IO_SLU_FLASH_FEC		0x00000308 +#define IO_SLU_SLC_FEC			0x00000310 + +/* + * The  Virtual Function's Access is from offset 0x00010000 + * The Physical Function's Access is from offset 0x00050000 + * Single Shared Registers exists only at offset 0x00060000 + * + * SLC: Queue Virtual Window Window for accessing into a specific VF + * queue. When accessing the 0x10000 space using the 0x50000 address + * segment, the value indicated here is used to specify which VF + * register is decoded. This register, and the 0x50000 register space + * can only be accessed by the PF. Example, if this register is set to + * 0x2, then a read from 0x50000 is the same as a read from 0x10000 + * from VF=2. + */ + +/* SLC: Queue Segment */ +#define IO_SLC_QUEUE_SEGMENT		0x00010000 +#define IO_SLC_VF_QUEUE_SEGMENT		0x00050000 + +/* SLC: Queue Offset */ +#define IO_SLC_QUEUE_OFFSET		0x00010008 +#define IO_SLC_VF_QUEUE_OFFSET		0x00050008 + +/* SLC: Queue Configuration */ +#define IO_SLC_QUEUE_CONFIG		0x00010010 +#define IO_SLC_VF_QUEUE_CONFIG		0x00050010 + +/* SLC: Job Timout/Only accessible for the PF */ +#define IO_SLC_APPJOB_TIMEOUT		0x00010018 +#define IO_SLC_VF_APPJOB_TIMEOUT	0x00050018 +#define TIMEOUT_250MS			0x0000000f +#define HEARTBEAT_DISABLE		0x0000ff00 + +/* SLC: Queue InitSequence Register */ +#define	IO_SLC_QUEUE_INITSQN		0x00010020 +#define	IO_SLC_VF_QUEUE_INITSQN		0x00050020 + +/* SLC: Queue Wrap */ +#define IO_SLC_QUEUE_WRAP		0x00010028 +#define IO_SLC_VF_QUEUE_WRAP		0x00050028 + +/* SLC: Queue Status */ +#define IO_SLC_QUEUE_STATUS		0x00010100 +#define IO_SLC_VF_QUEUE_STATUS		0x00050100 + +/* SLC: Queue Working Time */ +#define IO_SLC_QUEUE_WTIME		0x00010030 +#define IO_SLC_VF_QUEUE_WTIME		0x00050030 + +/* SLC: Queue Error Counts */ +#define IO_SLC_QUEUE_ERRCNTS		0x00010038 +#define IO_SLC_VF_QUEUE_ERRCNTS		0x00050038 + +/* SLC: Queue Loast Response Word */ +#define IO_SLC_QUEUE_LRW		0x00010040 +#define IO_SLC_VF_QUEUE_LRW		0x00050040 + +/* SLC: Freerunning Timer */ +#define IO_SLC_FREE_RUNNING_TIMER	0x00010108 +#define IO_SLC_VF_FREE_RUNNING_TIMER	0x00050108 + +/* SLC: Queue Virtual Access Region */ +#define IO_PF_SLC_VIRTUAL_REGION	0x00050000 + +/* SLC: Queue Virtual Window */ +#define IO_PF_SLC_VIRTUAL_WINDOW	0x00060000 + +/* SLC: DDCB Application Job Pending [n] (n=0:63) */ +#define IO_PF_SLC_JOBPEND(n)		(0x00061000 + 8*(n)) +#define IO_SLC_JOBPEND(n)		IO_PF_SLC_JOBPEND(n) + +/* SLC: Parser Trap RAM [n] (n=0:31) */ +#define IO_SLU_SLC_PARSE_TRAP(n)	(0x00011000 + 8*(n)) + +/* SLC: Dispatcher Trap RAM [n] (n=0:31) */ +#define IO_SLU_SLC_DISP_TRAP(n)	(0x00011200 + 8*(n)) + +/* Global Fault Isolation Register (GFIR) */ +#define IO_SLC_CFGREG_GFIR		0x00020000 +#define GFIR_ERR_TRIGGER		0x0000ffff + +/* SLU: Soft Reset Register */ +#define IO_SLC_CFGREG_SOFTRESET		0x00020018 + +/* SLU: Misc Debug Register */ +#define IO_SLC_MISC_DEBUG		0x00020060 +#define IO_SLC_MISC_DEBUG_CLR		0x00020068 +#define IO_SLC_MISC_DEBUG_SET		0x00020070 + +/* Temperature Sensor Reading */ +#define IO_SLU_TEMPERATURE_SENSOR	0x00030000 +#define IO_SLU_TEMPERATURE_CONFIG	0x00030008 + +/* Voltage Margining Control */ +#define IO_SLU_VOLTAGE_CONTROL		0x00030080 +#define IO_SLU_VOLTAGE_NOMINAL		0x00000000 +#define IO_SLU_VOLTAGE_DOWN5		0x00000006 +#define IO_SLU_VOLTAGE_UP5		0x00000007 + +/* Direct LED Control Register */ +#define IO_SLU_LEDCONTROL		0x00030100 + +/* SLU: Flashbus Direct Access -A5 */ +#define IO_SLU_FLASH_DIRECTACCESS	0x00040010 + +/* SLU: Flashbus Direct Access2 -A5 */ +#define IO_SLU_FLASH_DIRECTACCESS2	0x00040020 + +/* SLU: Flashbus Command Interface -A5 */ +#define IO_SLU_FLASH_CMDINTF		0x00040030 + +/* SLU: BitStream Loaded */ +#define IO_SLU_BITSTREAM		0x00040040 + +/* This Register has a switch which will change the CAs to UR */ +#define IO_HSU_ERR_BEHAVIOR		0x01001010 + +#define IO_SLC2_SQB_TRAP		0x00062000 +#define IO_SLC2_QUEUE_MANAGER_TRAP	0x00062008 +#define IO_SLC2_FLS_MASTER_TRAP		0x00062010 + +/* UnitID 1: HSU Registers */ +#define IO_HSU_UNITCFG			0x01000000 +#define IO_HSU_FIR			0x01000008 +#define IO_HSU_FIR_CLR			0x01000010 +#define IO_HSU_FEC			0x01000018 +#define IO_HSU_ERR_ACT_MASK		0x01000020 +#define IO_HSU_ERR_ATTN_MASK		0x01000028 +#define IO_HSU_FIRX1_ACT_MASK		0x01000030 +#define IO_HSU_FIRX0_ACT_MASK		0x01000038 +#define IO_HSU_SEC_LEM_DEBUG_OVR	0x01000040 +#define IO_HSU_EXTENDED_ERR_PTR		0x01000048 +#define IO_HSU_COMMON_CONFIG		0x01000060 + +/* UnitID 2: Application Unit (APP) */ +#define IO_APP_UNITCFG			0x02000000 +#define IO_APP_FIR			0x02000008 +#define IO_APP_FIR_CLR			0x02000010 +#define IO_APP_FEC			0x02000018 +#define IO_APP_ERR_ACT_MASK		0x02000020 +#define IO_APP_ERR_ATTN_MASK		0x02000028 +#define IO_APP_FIRX1_ACT_MASK		0x02000030 +#define IO_APP_FIRX0_ACT_MASK		0x02000038 +#define IO_APP_SEC_LEM_DEBUG_OVR	0x02000040 +#define IO_APP_EXTENDED_ERR_PTR		0x02000048 +#define IO_APP_COMMON_CONFIG		0x02000060 + +#define IO_APP_DEBUG_REG_01		0x02010000 +#define IO_APP_DEBUG_REG_02		0x02010008 +#define IO_APP_DEBUG_REG_03		0x02010010 +#define IO_APP_DEBUG_REG_04		0x02010018 +#define IO_APP_DEBUG_REG_05		0x02010020 +#define IO_APP_DEBUG_REG_06		0x02010028 +#define IO_APP_DEBUG_REG_07		0x02010030 +#define IO_APP_DEBUG_REG_08		0x02010038 +#define IO_APP_DEBUG_REG_09		0x02010040 +#define IO_APP_DEBUG_REG_10		0x02010048 +#define IO_APP_DEBUG_REG_11		0x02010050 +#define IO_APP_DEBUG_REG_12		0x02010058 +#define IO_APP_DEBUG_REG_13		0x02010060 +#define IO_APP_DEBUG_REG_14		0x02010068 +#define IO_APP_DEBUG_REG_15		0x02010070 +#define IO_APP_DEBUG_REG_16		0x02010078 +#define IO_APP_DEBUG_REG_17		0x02010080 +#define IO_APP_DEBUG_REG_18		0x02010088 + +/* Read/write from/to registers */ +struct genwqe_reg_io { +	__u64 num;		/* register offset/address */ +	__u64 val64; +}; + +/* + * All registers of our card will return values not equal this values. + * If we see IO_ILLEGAL_VALUE on any of our MMIO register reads, the + * card can be considered as unusable. It will need recovery. + */ +#define IO_ILLEGAL_VALUE		0xffffffffffffffffull + +/* + * Generic DDCB execution interface. + * + * This interface is a first prototype resulting from discussions we + * had with other teams which wanted to use the Genwqe card. It allows + * to issue a DDCB request in a generic way. The request will block + * until it finishes or time out with error. + * + * Some DDCBs require DMA addresses to be specified in the ASIV + * block. The interface provies the capability to let the kernel + * driver know where those addresses are by specifying the ATS field, + * such that it can replace the user-space addresses with appropriate + * DMA addresses or DMA addresses of a scatter gather list which is + * dynamically created. + * + * Our hardware will refuse DDCB execution if the ATS field is not as + * expected. That means the DDCB execution engine in the chip knows + * where it expects DMA addresses within the ASIV part of the DDCB and + * will check that against the ATS field definition. Any invalid or + * unknown ATS content will lead to DDCB refusal. + */ + +/* Genwqe chip Units */ +#define DDCB_ACFUNC_SLU			0x00  /* chip service layer unit */ +#define DDCB_ACFUNC_APP			0x01  /* chip application */ + +/* DDCB return codes (RETC) */ +#define DDCB_RETC_IDLE			0x0000 /* Unexecuted/DDCB created */ +#define DDCB_RETC_PENDING		0x0101 /* Pending Execution */ +#define DDCB_RETC_COMPLETE		0x0102 /* Cmd complete. No error */ +#define DDCB_RETC_FAULT			0x0104 /* App Err, recoverable */ +#define DDCB_RETC_ERROR			0x0108 /* App Err, non-recoverable */ +#define DDCB_RETC_FORCED_ERROR		0x01ff /* overwritten by driver  */ + +#define DDCB_RETC_UNEXEC		0x0110 /* Unexe/Removed from queue */ +#define DDCB_RETC_TERM			0x0120 /* Terminated */ +#define DDCB_RETC_RES0			0x0140 /* Reserved */ +#define DDCB_RETC_RES1			0x0180 /* Reserved */ + +/* DDCB Command Options (CMDOPT) */ +#define DDCB_OPT_ECHO_FORCE_NO		0x0000 /* ECHO DDCB */ +#define DDCB_OPT_ECHO_FORCE_102		0x0001 /* force return code */ +#define DDCB_OPT_ECHO_FORCE_104		0x0002 +#define DDCB_OPT_ECHO_FORCE_108		0x0003 + +#define DDCB_OPT_ECHO_FORCE_110		0x0004 /* only on PF ! */ +#define DDCB_OPT_ECHO_FORCE_120		0x0005 +#define DDCB_OPT_ECHO_FORCE_140		0x0006 +#define DDCB_OPT_ECHO_FORCE_180		0x0007 + +#define DDCB_OPT_ECHO_COPY_NONE		(0 << 5) +#define DDCB_OPT_ECHO_COPY_ALL		(1 << 5) + +/* Definitions of Service Layer Commands */ +#define SLCMD_ECHO_SYNC			0x00 /* PF/VF */ +#define SLCMD_MOVE_FLASH		0x06 /* PF only */ +#define SLCMD_MOVE_FLASH_FLAGS_MODE	0x03 /* bit 0 and 1 used for mode */ +#define SLCMD_MOVE_FLASH_FLAGS_DLOAD	0	/* mode: download  */ +#define SLCMD_MOVE_FLASH_FLAGS_EMUL	1	/* mode: emulation */ +#define SLCMD_MOVE_FLASH_FLAGS_UPLOAD	2	/* mode: upload	   */ +#define SLCMD_MOVE_FLASH_FLAGS_VERIFY	3	/* mode: verify	   */ +#define SLCMD_MOVE_FLASH_FLAG_NOTAP	(1 << 2)/* just dump DDCB and exit */ +#define SLCMD_MOVE_FLASH_FLAG_POLL	(1 << 3)/* wait for RETC >= 0102   */ +#define SLCMD_MOVE_FLASH_FLAG_PARTITION	(1 << 4) +#define SLCMD_MOVE_FLASH_FLAG_ERASE	(1 << 5) + +enum genwqe_card_state { +	GENWQE_CARD_UNUSED = 0, +	GENWQE_CARD_USED = 1, +	GENWQE_CARD_FATAL_ERROR = 2, +	GENWQE_CARD_STATE_MAX, +}; + +/* common struct for chip image exchange */ +struct genwqe_bitstream { +	__u64 data_addr;		/* pointer to image data */ +	__u32 size;			/* size of image file */ +	__u32 crc;			/* crc of this image */ +	__u64 target_addr;		/* starting address in Flash */ +	__u32 partition;		/* '0', '1', or 'v' */ +	__u32 uid;			/* 1=host/x=dram */ + +	__u64 slu_id;			/* informational/sim: SluID */ +	__u64 app_id;			/* informational/sim: AppID */ + +	__u16 retc;			/* returned from processing */ +	__u16 attn;			/* attention code from processing */ +	__u32 progress;			/* progress code from processing */ +}; + +/* Issuing a specific DDCB command */ +#define DDCB_LENGTH			256 /* for debug data */ +#define DDCB_ASIV_LENGTH		104 /* len of the DDCB ASIV array */ +#define DDCB_ASIV_LENGTH_ATS		96  /* ASIV in ATS architecture */ +#define DDCB_ASV_LENGTH			64  /* len of the DDCB ASV array  */ +#define DDCB_FIXUPS			12  /* maximum number of fixups */ + +struct genwqe_debug_data { +	char driver_version[64]; +	__u64 slu_unitcfg; +	__u64 app_unitcfg; + +	__u8  ddcb_before[DDCB_LENGTH]; +	__u8  ddcb_prev[DDCB_LENGTH]; +	__u8  ddcb_finished[DDCB_LENGTH]; +}; + +/* + * Address Translation Specification (ATS) definitions + * + * Each 4 bit within the ATS 64-bit word specify the required address + * translation at the defined offset. + * + * 63 LSB + *         6666.5555.5555.5544.4444.4443.3333.3333 ... 11 + *         3210.9876.5432.1098.7654.3210.9876.5432 ... 1098.7654.3210 + * + * offset: 0x00 0x08 0x10 0x18 0x20 0x28 0x30 0x38 ... 0x68 0x70 0x78 + *         res  res  res  res  ASIV ... + * The first 4 entries in the ATS word are reserved. The following nibbles + * each describe at an 8 byte offset the format of the required data. + */ +#define ATS_TYPE_DATA			0x0ull /* data  */ +#define ATS_TYPE_FLAT_RD		0x4ull /* flat buffer read only */ +#define ATS_TYPE_FLAT_RDWR		0x5ull /* flat buffer read/write */ +#define ATS_TYPE_SGL_RD			0x6ull /* sgl read only */ +#define ATS_TYPE_SGL_RDWR		0x7ull /* sgl read/write */ + +#define ATS_SET_FLAGS(_struct, _field, _flags)				\ +	(((_flags) & 0xf) << (44 - (4 * (offsetof(_struct, _field) / 8)))) + +#define ATS_GET_FLAGS(_ats, _byte_offs)					\ +	(((_ats)	  >> (44 - (4 * ((_byte_offs) / 8)))) & 0xf) + +/** + * struct genwqe_ddcb_cmd - User parameter for generic DDCB commands + * + * On the way into the kernel the driver will read the whole data + * structure. On the way out the driver will not copy the ASIV data + * back to user-space. + */ +struct genwqe_ddcb_cmd { +	/* START of data copied to/from driver */ +	__u64 next_addr;		/* chaining genwqe_ddcb_cmd */ +	__u64 flags;			/* reserved */ + +	__u8  acfunc;			/* accelerators functional unit */ +	__u8  cmd;			/* command to execute */ +	__u8  asiv_length;		/* used parameter length */ +	__u8  asv_length;		/* length of valid return values  */ +	__u16 cmdopts;			/* command options */ +	__u16 retc;			/* return code from processing    */ + +	__u16 attn;			/* attention code from processing */ +	__u16 vcrc;			/* variant crc16 */ +	__u32 progress;			/* progress code from processing  */ + +	__u64 deque_ts;			/* dequeue time stamp */ +	__u64 cmplt_ts;			/* completion time stamp */ +	__u64 disp_ts;			/* SW processing start */ + +	/* move to end and avoid copy-back */ +	__u64 ddata_addr;		/* collect debug data */ + +	/* command specific values */ +	__u8  asv[DDCB_ASV_LENGTH]; + +	/* END of data copied from driver */ +	union { +		struct { +			__u64 ats; +			__u8  asiv[DDCB_ASIV_LENGTH_ATS]; +		}; +		/* used for flash update to keep it backward compatible */ +		__u8 __asiv[DDCB_ASIV_LENGTH]; +	}; +	/* END of data copied to driver */ +}; + +#define GENWQE_IOC_CODE	    0xa5 + +/* Access functions */ +#define GENWQE_READ_REG64   _IOR(GENWQE_IOC_CODE, 30, struct genwqe_reg_io) +#define GENWQE_WRITE_REG64  _IOW(GENWQE_IOC_CODE, 31, struct genwqe_reg_io) +#define GENWQE_READ_REG32   _IOR(GENWQE_IOC_CODE, 32, struct genwqe_reg_io) +#define GENWQE_WRITE_REG32  _IOW(GENWQE_IOC_CODE, 33, struct genwqe_reg_io) +#define GENWQE_READ_REG16   _IOR(GENWQE_IOC_CODE, 34, struct genwqe_reg_io) +#define GENWQE_WRITE_REG16  _IOW(GENWQE_IOC_CODE, 35, struct genwqe_reg_io) + +#define GENWQE_GET_CARD_STATE _IOR(GENWQE_IOC_CODE, 36,	enum genwqe_card_state) + +/** + * struct genwqe_mem - Memory pinning/unpinning information + * @addr:          virtual user space address + * @size:          size of the area pin/dma-map/unmap + * direction:      0: read/1: read and write + * + * Avoid pinning and unpinning of memory pages dynamically. Instead + * the idea is to pin the whole buffer space required for DDCB + * opertionas in advance. The driver will reuse this pinning and the + * memory associated with it to setup the sglists for the DDCB + * requests without the need to allocate and free memory or map and + * unmap to get the DMA addresses. + * + * The inverse operation needs to be called after the pinning is not + * needed anymore. The pinnings else the pinnings will get removed + * after the device is closed. Note that pinnings will required + * memory. + */ +struct genwqe_mem { +	__u64 addr; +	__u64 size; +	__u64 direction; +	__u64 flags; +}; + +#define GENWQE_PIN_MEM	      _IOWR(GENWQE_IOC_CODE, 40, struct genwqe_mem) +#define GENWQE_UNPIN_MEM      _IOWR(GENWQE_IOC_CODE, 41, struct genwqe_mem) + +/* + * Generic synchronous DDCB execution interface. + * Synchronously execute a DDCB. + * + * Return: 0 on success or negative error code. + *         -EINVAL: Invalid parameters (ASIV_LEN, ASV_LEN, illegal fixups + *                  no mappings found/could not create mappings + *         -EFAULT: illegal addresses in fixups, purging failed + *         -EBADMSG: enqueing failed, retc != DDCB_RETC_COMPLETE + */ +#define GENWQE_EXECUTE_DDCB					\ +	_IOWR(GENWQE_IOC_CODE, 50, struct genwqe_ddcb_cmd) + +#define GENWQE_EXECUTE_RAW_DDCB					\ +	_IOWR(GENWQE_IOC_CODE, 51, struct genwqe_ddcb_cmd) + +/* Service Layer functions (PF only) */ +#define GENWQE_SLU_UPDATE  _IOWR(GENWQE_IOC_CODE, 80, struct genwqe_bitstream) +#define GENWQE_SLU_READ	   _IOWR(GENWQE_IOC_CODE, 81, struct genwqe_bitstream) + +#endif	/* __GENWQE_CARD_H__ */ diff --git a/include/uapi/linux/gfs2_ondisk.h b/include/uapi/linux/gfs2_ondisk.h index b2de1f9a88d..1a763eaae0b 100644 --- a/include/uapi/linux/gfs2_ondisk.h +++ b/include/uapi/linux/gfs2_ondisk.h @@ -20,7 +20,7 @@  #define GFS2_MOUNT_LOCK		0  #define GFS2_LIVE_LOCK		1 -#define GFS2_TRANS_LOCK		2 +#define GFS2_FREEZE_LOCK	2  #define GFS2_RENAME_LOCK	3  #define GFS2_CONTROL_LOCK	4  #define GFS2_MOUNTED_LOCK	5 @@ -304,7 +304,13 @@ struct gfs2_dirent {  	__be16 de_rec_len;  	__be16 de_name_len;  	__be16 de_type; -	__u8 __pad[14]; +	union { +		__u8 __pad[14]; +		struct { +			__be16 de_rahead; +			__u8 pad2[12]; +		}; +	};  };  /* @@ -319,7 +325,16 @@ struct gfs2_leaf {  	__be32 lf_dirent_format;	/* Format of the dirents */  	__be64 lf_next;			/* Next leaf, if overflow */ -	__u8 lf_reserved[64]; +	union { +		__u8 lf_reserved[64]; +		struct { +			__be64 lf_inode;	/* Dir inode number */ +			__be32 lf_dist;		/* Dist from inode on chain */ +			__be32 lf_nsec;		/* Last ins/del usecs */ +			__be64 lf_sec;		/* Last ins/del in secs */ +			__u8 lf_reserved2[40]; +		}; +	};  };  /* @@ -338,9 +353,9 @@ struct gfs2_leaf {   * metadata header. Each inode, if it has extended attributes, will   * have either a single block containing the extended attribute headers   * or a single indirect block pointing to blocks containing the - * extended attribure headers. + * extended attribute headers.   * - * The maximim size of the data part of an extended attribute is 64k + * The maximum size of the data part of an extended attribute is 64k   * so the number of blocks required depends upon block size. Since the   * block size also determines the number of pointers in an indirect   * block, its a fairly complicated calculation to work out the maximum diff --git a/include/uapi/linux/hash_info.h b/include/uapi/linux/hash_info.h new file mode 100644 index 00000000000..ca18c45f830 --- /dev/null +++ b/include/uapi/linux/hash_info.h @@ -0,0 +1,37 @@ +/* + * Hash Info: Hash algorithms information + * + * Copyright (c) 2013 Dmitry Kasatkin <d.kasatkin@samsung.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 of the License, or (at your option) + * any later version. + * + */ + +#ifndef _UAPI_LINUX_HASH_INFO_H +#define _UAPI_LINUX_HASH_INFO_H + +enum hash_algo { +	HASH_ALGO_MD4, +	HASH_ALGO_MD5, +	HASH_ALGO_SHA1, +	HASH_ALGO_RIPE_MD_160, +	HASH_ALGO_SHA256, +	HASH_ALGO_SHA384, +	HASH_ALGO_SHA512, +	HASH_ALGO_SHA224, +	HASH_ALGO_RIPE_MD_128, +	HASH_ALGO_RIPE_MD_256, +	HASH_ALGO_RIPE_MD_320, +	HASH_ALGO_WP_256, +	HASH_ALGO_WP_384, +	HASH_ALGO_WP_512, +	HASH_ALGO_TGR_128, +	HASH_ALGO_TGR_160, +	HASH_ALGO_TGR_192, +	HASH_ALGO__LAST +}; + +#endif /* _UAPI_LINUX_HASH_INFO_H */ diff --git a/include/uapi/linux/hsr_netlink.h b/include/uapi/linux/hsr_netlink.h new file mode 100644 index 00000000000..2475cb8a53a --- /dev/null +++ b/include/uapi/linux/hsr_netlink.h @@ -0,0 +1,50 @@ +/* + * Copyright 2011-2013 Autronica Fire and Security AS + * + * 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 of the License, or (at your option) + * any later version. + * + * Author(s): + *	2011-2013 Arvid Brodin, arvid.brodin@xdin.com + */ + +#ifndef __UAPI_HSR_NETLINK_H +#define __UAPI_HSR_NETLINK_H + +/* Generic Netlink HSR family definition + */ + +/* attributes */ +enum { +	HSR_A_UNSPEC, +	HSR_A_NODE_ADDR, +	HSR_A_IFINDEX, +	HSR_A_IF1_AGE, +	HSR_A_IF2_AGE, +	HSR_A_NODE_ADDR_B, +	HSR_A_IF1_SEQ, +	HSR_A_IF2_SEQ, +	HSR_A_IF1_IFINDEX, +	HSR_A_IF2_IFINDEX, +	HSR_A_ADDR_B_IFINDEX, +	__HSR_A_MAX, +}; +#define HSR_A_MAX (__HSR_A_MAX - 1) + + +/* commands */ +enum { +	HSR_C_UNSPEC, +	HSR_C_RING_ERROR, +	HSR_C_NODE_DOWN, +	HSR_C_GET_NODE_STATUS, +	HSR_C_SET_NODE_STATUS, +	HSR_C_GET_NODE_LIST, +	HSR_C_SET_NODE_LIST, +	__HSR_C_MAX, +}; +#define HSR_C_MAX (__HSR_C_MAX - 1) + +#endif /* __UAPI_HSR_NETLINK_H */ diff --git a/include/uapi/linux/hyperv.h b/include/uapi/linux/hyperv.h new file mode 100644 index 00000000000..78e4a86030d --- /dev/null +++ b/include/uapi/linux/hyperv.h @@ -0,0 +1,391 @@ +/* + * + * Copyright (c) 2011, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope 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. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + *   Haiyang Zhang <haiyangz@microsoft.com> + *   Hank Janssen  <hjanssen@microsoft.com> + *   K. Y. Srinivasan <kys@microsoft.com> + * + */ + +#ifndef _UAPI_HYPERV_H +#define _UAPI_HYPERV_H + +#include <linux/uuid.h> + +/* + * Framework version for util services. + */ +#define UTIL_FW_MINOR  0 + +#define UTIL_WS2K8_FW_MAJOR  1 +#define UTIL_WS2K8_FW_VERSION     (UTIL_WS2K8_FW_MAJOR << 16 | UTIL_FW_MINOR) + +#define UTIL_FW_MAJOR  3 +#define UTIL_FW_VERSION     (UTIL_FW_MAJOR << 16 | UTIL_FW_MINOR) + + +/* + * Implementation of host controlled snapshot of the guest. + */ + +#define VSS_OP_REGISTER 128 + +enum hv_vss_op { +	VSS_OP_CREATE = 0, +	VSS_OP_DELETE, +	VSS_OP_HOT_BACKUP, +	VSS_OP_GET_DM_INFO, +	VSS_OP_BU_COMPLETE, +	/* +	 * Following operations are only supported with IC version >= 5.0 +	 */ +	VSS_OP_FREEZE, /* Freeze the file systems in the VM */ +	VSS_OP_THAW, /* Unfreeze the file systems */ +	VSS_OP_AUTO_RECOVER, +	VSS_OP_COUNT /* Number of operations, must be last */ +}; + + +/* + * Header for all VSS messages. + */ +struct hv_vss_hdr { +	__u8 operation; +	__u8 reserved[7]; +} __attribute__((packed)); + + +/* + * Flag values for the hv_vss_check_feature. Linux supports only + * one value. + */ +#define VSS_HBU_NO_AUTO_RECOVERY	0x00000005 + +struct hv_vss_check_feature { +	__u32 flags; +} __attribute__((packed)); + +struct hv_vss_check_dm_info { +	__u32 flags; +} __attribute__((packed)); + +struct hv_vss_msg { +	union { +		struct hv_vss_hdr vss_hdr; +		int error; +	}; +	union { +		struct hv_vss_check_feature vss_cf; +		struct hv_vss_check_dm_info dm_info; +	}; +} __attribute__((packed)); + +/* + * Implementation of a host to guest copy facility. + */ + +#define FCOPY_VERSION_0 0 +#define FCOPY_CURRENT_VERSION FCOPY_VERSION_0 +#define W_MAX_PATH 260 + +enum hv_fcopy_op { +	START_FILE_COPY = 0, +	WRITE_TO_FILE, +	COMPLETE_FCOPY, +	CANCEL_FCOPY, +}; + +struct hv_fcopy_hdr { +	__u32 operation; +	uuid_le service_id0; /* currently unused */ +	uuid_le service_id1; /* currently unused */ +} __attribute__((packed)); + +#define OVER_WRITE	0x1 +#define CREATE_PATH	0x2 + +struct hv_start_fcopy { +	struct hv_fcopy_hdr hdr; +	__u16 file_name[W_MAX_PATH]; +	__u16 path_name[W_MAX_PATH]; +	__u32 copy_flags; +	__u64 file_size; +} __attribute__((packed)); + +/* + * The file is chunked into fragments. + */ +#define DATA_FRAGMENT	(6 * 1024) + +struct hv_do_fcopy { +	struct hv_fcopy_hdr hdr; +	__u64	offset; +	__u32	size; +	__u8	data[DATA_FRAGMENT]; +}; + +/* + * An implementation of HyperV key value pair (KVP) functionality for Linux. + * + * + * Copyright (C) 2010, Novell, Inc. + * Author : K. Y. Srinivasan <ksrinivasan@novell.com> + * + */ + +/* + * Maximum value size - used for both key names and value data, and includes + * any applicable NULL terminators. + * + * Note:  This limit is somewhat arbitrary, but falls easily within what is + * supported for all native guests (back to Win 2000) and what is reasonable + * for the IC KVP exchange functionality.  Note that Windows Me/98/95 are + * limited to 255 character key names. + * + * MSDN recommends not storing data values larger than 2048 bytes in the + * registry. + * + * Note:  This value is used in defining the KVP exchange message - this value + * cannot be modified without affecting the message size and compatibility. + */ + +/* + * bytes, including any null terminators + */ +#define HV_KVP_EXCHANGE_MAX_VALUE_SIZE          (2048) + + +/* + * Maximum key size - the registry limit for the length of an entry name + * is 256 characters, including the null terminator + */ + +#define HV_KVP_EXCHANGE_MAX_KEY_SIZE            (512) + +/* + * In Linux, we implement the KVP functionality in two components: + * 1) The kernel component which is packaged as part of the hv_utils driver + * is responsible for communicating with the host and responsible for + * implementing the host/guest protocol. 2) A user level daemon that is + * responsible for data gathering. + * + * Host/Guest Protocol: The host iterates over an index and expects the guest + * to assign a key name to the index and also return the value corresponding to + * the key. The host will have atmost one KVP transaction outstanding at any + * given point in time. The host side iteration stops when the guest returns + * an error. Microsoft has specified the following mapping of key names to + * host specified index: + * + *	Index		Key Name + *	0		FullyQualifiedDomainName + *	1		IntegrationServicesVersion + *	2		NetworkAddressIPv4 + *	3		NetworkAddressIPv6 + *	4		OSBuildNumber + *	5		OSName + *	6		OSMajorVersion + *	7		OSMinorVersion + *	8		OSVersion + *	9		ProcessorArchitecture + * + * The Windows host expects the Key Name and Key Value to be encoded in utf16. + * + * Guest Kernel/KVP Daemon Protocol: As noted earlier, we implement all of the + * data gathering functionality in a user mode daemon. The user level daemon + * is also responsible for binding the key name to the index as well. The + * kernel and user-level daemon communicate using a connector channel. + * + * The user mode component first registers with the + * the kernel component. Subsequently, the kernel component requests, data + * for the specified keys. In response to this message the user mode component + * fills in the value corresponding to the specified key. We overload the + * sequence field in the cn_msg header to define our KVP message types. + * + * + * The kernel component simply acts as a conduit for communication between the + * Windows host and the user-level daemon. The kernel component passes up the + * index received from the Host to the user-level daemon. If the index is + * valid (supported), the corresponding key as well as its + * value (both are strings) is returned. If the index is invalid + * (not supported), a NULL key string is returned. + */ + + +/* + * Registry value types. + */ + +#define REG_SZ 1 +#define REG_U32 4 +#define REG_U64 8 + +/* + * As we look at expanding the KVP functionality to include + * IP injection functionality, we need to maintain binary + * compatibility with older daemons. + * + * The KVP opcodes are defined by the host and it was unfortunate + * that I chose to treat the registration operation as part of the + * KVP operations defined by the host. + * Here is the level of compatibility + * (between the user level daemon and the kernel KVP driver) that we + * will implement: + * + * An older daemon will always be supported on a newer driver. + * A given user level daemon will require a minimal version of the + * kernel driver. + * If we cannot handle the version differences, we will fail gracefully + * (this can happen when we have a user level daemon that is more + * advanced than the KVP driver. + * + * We will use values used in this handshake for determining if we have + * workable user level daemon and the kernel driver. We begin by taking the + * registration opcode out of the KVP opcode namespace. We will however, + * maintain compatibility with the existing user-level daemon code. + */ + +/* + * Daemon code not supporting IP injection (legacy daemon). + */ + +#define KVP_OP_REGISTER	4 + +/* + * Daemon code supporting IP injection. + * The KVP opcode field is used to communicate the + * registration information; so define a namespace that + * will be distinct from the host defined KVP opcode. + */ + +#define KVP_OP_REGISTER1 100 + +enum hv_kvp_exchg_op { +	KVP_OP_GET = 0, +	KVP_OP_SET, +	KVP_OP_DELETE, +	KVP_OP_ENUMERATE, +	KVP_OP_GET_IP_INFO, +	KVP_OP_SET_IP_INFO, +	KVP_OP_COUNT /* Number of operations, must be last. */ +}; + +enum hv_kvp_exchg_pool { +	KVP_POOL_EXTERNAL = 0, +	KVP_POOL_GUEST, +	KVP_POOL_AUTO, +	KVP_POOL_AUTO_EXTERNAL, +	KVP_POOL_AUTO_INTERNAL, +	KVP_POOL_COUNT /* Number of pools, must be last. */ +}; + +/* + * Some Hyper-V status codes. + */ + +#define HV_S_OK				0x00000000 +#define HV_E_FAIL			0x80004005 +#define HV_S_CONT			0x80070103 +#define HV_ERROR_NOT_SUPPORTED		0x80070032 +#define HV_ERROR_MACHINE_LOCKED		0x800704F7 +#define HV_ERROR_DEVICE_NOT_CONNECTED	0x8007048F +#define HV_INVALIDARG			0x80070057 +#define HV_GUID_NOTFOUND		0x80041002 +#define HV_ERROR_ALREADY_EXISTS		0x80070050 + +#define ADDR_FAMILY_NONE	0x00 +#define ADDR_FAMILY_IPV4	0x01 +#define ADDR_FAMILY_IPV6	0x02 + +#define MAX_ADAPTER_ID_SIZE	128 +#define MAX_IP_ADDR_SIZE	1024 +#define MAX_GATEWAY_SIZE	512 + + +struct hv_kvp_ipaddr_value { +	__u16	adapter_id[MAX_ADAPTER_ID_SIZE]; +	__u8	addr_family; +	__u8	dhcp_enabled; +	__u16	ip_addr[MAX_IP_ADDR_SIZE]; +	__u16	sub_net[MAX_IP_ADDR_SIZE]; +	__u16	gate_way[MAX_GATEWAY_SIZE]; +	__u16	dns_addr[MAX_IP_ADDR_SIZE]; +} __attribute__((packed)); + + +struct hv_kvp_hdr { +	__u8 operation; +	__u8 pool; +	__u16 pad; +} __attribute__((packed)); + +struct hv_kvp_exchg_msg_value { +	__u32 value_type; +	__u32 key_size; +	__u32 value_size; +	__u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE]; +	union { +		__u8 value[HV_KVP_EXCHANGE_MAX_VALUE_SIZE]; +		__u32 value_u32; +		__u64 value_u64; +	}; +} __attribute__((packed)); + +struct hv_kvp_msg_enumerate { +	__u32 index; +	struct hv_kvp_exchg_msg_value data; +} __attribute__((packed)); + +struct hv_kvp_msg_get { +	struct hv_kvp_exchg_msg_value data; +}; + +struct hv_kvp_msg_set { +	struct hv_kvp_exchg_msg_value data; +}; + +struct hv_kvp_msg_delete { +	__u32 key_size; +	__u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE]; +}; + +struct hv_kvp_register { +	__u8 version[HV_KVP_EXCHANGE_MAX_KEY_SIZE]; +}; + +struct hv_kvp_msg { +	union { +		struct hv_kvp_hdr	kvp_hdr; +		int error; +	}; +	union { +		struct hv_kvp_msg_get		kvp_get; +		struct hv_kvp_msg_set		kvp_set; +		struct hv_kvp_msg_delete	kvp_delete; +		struct hv_kvp_msg_enumerate	kvp_enum_data; +		struct hv_kvp_ipaddr_value      kvp_ip_val; +		struct hv_kvp_register		kvp_register; +	} body; +} __attribute__((packed)); + +struct hv_kvp_ip_msg { +	__u8 operation; +	__u8 pool; +	struct hv_kvp_ipaddr_value      kvp_ip_val; +} __attribute__((packed)); + +#endif /* _UAPI_HYPERV_H */ diff --git a/include/uapi/linux/if.h b/include/uapi/linux/if.h index 1ec407b01e4..9cf2394f0bc 100644 --- a/include/uapi/linux/if.h +++ b/include/uapi/linux/if.h @@ -27,64 +27,91 @@  #define	IFALIASZ	256  #include <linux/hdlc/ioctl.h> -/* Standard interface flags (netdevice->flags). */ -#define	IFF_UP		0x1		/* interface is up		*/ -#define	IFF_BROADCAST	0x2		/* broadcast address valid	*/ -#define	IFF_DEBUG	0x4		/* turn on debugging		*/ -#define	IFF_LOOPBACK	0x8		/* is a loopback net		*/ -#define	IFF_POINTOPOINT	0x10		/* interface is has p-p link	*/ -#define	IFF_NOTRAILERS	0x20		/* avoid use of trailers	*/ -#define	IFF_RUNNING	0x40		/* interface RFC2863 OPER_UP	*/ -#define	IFF_NOARP	0x80		/* no ARP protocol		*/ -#define	IFF_PROMISC	0x100		/* receive all packets		*/ -#define	IFF_ALLMULTI	0x200		/* receive all multicast packets*/ - -#define IFF_MASTER	0x400		/* master of a load balancer 	*/ -#define IFF_SLAVE	0x800		/* slave of a load balancer	*/ - -#define IFF_MULTICAST	0x1000		/* Supports multicast		*/ - -#define IFF_PORTSEL	0x2000          /* can set media type		*/ -#define IFF_AUTOMEDIA	0x4000		/* auto media select active	*/ -#define IFF_DYNAMIC	0x8000		/* dialup device with changing addresses*/ - -#define IFF_LOWER_UP	0x10000		/* driver signals L1 up		*/ -#define IFF_DORMANT	0x20000		/* driver signals dormant	*/ +/** + * enum net_device_flags - &struct net_device flags + * + * These are the &struct net_device flags, they can be set by drivers, the + * kernel and some can be triggered by userspace. Userspace can query and + * set these flags using userspace utilities but there is also a sysfs + * entry available for all dev flags which can be queried and set. These flags + * are shared for all types of net_devices. The sysfs entries are available + * via /sys/class/net/<dev>/flags. Flags which can be toggled through sysfs + * are annotated below, note that only a few flags can be toggled and some + * other flags are always always preserved from the original net_device flags + * even if you try to set them via sysfs. Flags which are always preserved + * are kept under the flag grouping @IFF_VOLATILE. Flags which are volatile + * are annotated below as such. + * + * You should have a pretty good reason to be extending these flags. + * + * @IFF_UP: interface is up. Can be toggled through sysfs. + * @IFF_BROADCAST: broadcast address valid. Volatile. + * @IFF_DEBUG: turn on debugging. Can be toggled through sysfs. + * @IFF_LOOPBACK: is a loopback net. Volatile. + * @IFF_POINTOPOINT: interface is has p-p link. Volatile. + * @IFF_NOTRAILERS: avoid use of trailers. Can be toggled through sysfs. + *	Volatile. + * @IFF_RUNNING: interface RFC2863 OPER_UP. Volatile. + * @IFF_NOARP: no ARP protocol. Can be toggled through sysfs. Volatile. + * @IFF_PROMISC: receive all packets. Can be toggled through sysfs. + * @IFF_ALLMULTI: receive all multicast packets. Can be toggled through + *	sysfs. + * @IFF_MASTER: master of a load balancer. Volatile. + * @IFF_SLAVE: slave of a load balancer. Volatile. + * @IFF_MULTICAST: Supports multicast. Can be toggled through sysfs. + * @IFF_PORTSEL: can set media type. Can be toggled through sysfs. + * @IFF_AUTOMEDIA: auto media select active. Can be toggled through sysfs. + * @IFF_DYNAMIC: dialup device with changing addresses. Can be toggled + *	through sysfs. + * @IFF_LOWER_UP: driver signals L1 up. Volatile. + * @IFF_DORMANT: driver signals dormant. Volatile. + * @IFF_ECHO: echo sent packets. Volatile. + */ +enum net_device_flags { +	IFF_UP				= 1<<0,  /* sysfs */ +	IFF_BROADCAST			= 1<<1,  /* volatile */ +	IFF_DEBUG			= 1<<2,  /* sysfs */ +	IFF_LOOPBACK			= 1<<3,  /* volatile */ +	IFF_POINTOPOINT			= 1<<4,  /* volatile */ +	IFF_NOTRAILERS			= 1<<5,  /* sysfs */ +	IFF_RUNNING			= 1<<6,  /* volatile */ +	IFF_NOARP			= 1<<7,  /* sysfs */ +	IFF_PROMISC			= 1<<8,  /* sysfs */ +	IFF_ALLMULTI			= 1<<9,  /* sysfs */ +	IFF_MASTER			= 1<<10, /* volatile */ +	IFF_SLAVE			= 1<<11, /* volatile */ +	IFF_MULTICAST			= 1<<12, /* sysfs */ +	IFF_PORTSEL			= 1<<13, /* sysfs */ +	IFF_AUTOMEDIA			= 1<<14, /* sysfs */ +	IFF_DYNAMIC			= 1<<15, /* sysfs */ +	IFF_LOWER_UP			= 1<<16, /* volatile */ +	IFF_DORMANT			= 1<<17, /* volatile */ +	IFF_ECHO			= 1<<18, /* volatile */ +}; -#define IFF_ECHO	0x40000		/* echo sent packets		*/ +#define IFF_UP				IFF_UP +#define IFF_BROADCAST			IFF_BROADCAST +#define IFF_DEBUG			IFF_DEBUG +#define IFF_LOOPBACK			IFF_LOOPBACK +#define IFF_POINTOPOINT			IFF_POINTOPOINT +#define IFF_NOTRAILERS			IFF_NOTRAILERS +#define IFF_RUNNING			IFF_RUNNING +#define IFF_NOARP			IFF_NOARP +#define IFF_PROMISC			IFF_PROMISC +#define IFF_ALLMULTI			IFF_ALLMULTI +#define IFF_MASTER			IFF_MASTER +#define IFF_SLAVE			IFF_SLAVE +#define IFF_MULTICAST			IFF_MULTICAST +#define IFF_PORTSEL			IFF_PORTSEL +#define IFF_AUTOMEDIA			IFF_AUTOMEDIA +#define IFF_DYNAMIC			IFF_DYNAMIC +#define IFF_LOWER_UP			IFF_LOWER_UP +#define IFF_DORMANT			IFF_DORMANT +#define IFF_ECHO			IFF_ECHO  #define IFF_VOLATILE	(IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\  		IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT) -/* Private (from user) interface flags (netdevice->priv_flags). */ -#define IFF_802_1Q_VLAN 0x1             /* 802.1Q VLAN device.          */ -#define IFF_EBRIDGE	0x2		/* Ethernet bridging device.	*/ -#define IFF_SLAVE_INACTIVE	0x4	/* bonding slave not the curr. active */ -#define IFF_MASTER_8023AD	0x8	/* bonding master, 802.3ad. 	*/ -#define IFF_MASTER_ALB	0x10		/* bonding master, balance-alb.	*/ -#define IFF_BONDING	0x20		/* bonding master or slave	*/ -#define IFF_SLAVE_NEEDARP 0x40		/* need ARPs for validation	*/ -#define IFF_ISATAP	0x80		/* ISATAP interface (RFC4214)	*/ -#define IFF_MASTER_ARPMON 0x100		/* bonding master, ARP mon in use */ -#define IFF_WAN_HDLC	0x200		/* WAN HDLC device		*/ -#define IFF_XMIT_DST_RELEASE 0x400	/* dev_hard_start_xmit() is allowed to -					 * release skb->dst -					 */ -#define IFF_DONT_BRIDGE 0x800		/* disallow bridging this ether dev */ -#define IFF_DISABLE_NETPOLL	0x1000	/* disable netpoll at run-time */ -#define IFF_MACVLAN_PORT	0x2000	/* device used as macvlan port */ -#define IFF_BRIDGE_PORT	0x4000		/* device used as bridge port */ -#define IFF_OVS_DATAPATH	0x8000	/* device used as Open vSwitch -					 * datapath port */ -#define IFF_TX_SKB_SHARING	0x10000	/* The interface supports sharing -					 * skbs on transmit */ -#define IFF_UNICAST_FLT	0x20000		/* Supports unicast filtering	*/ -#define IFF_TEAM_PORT	0x40000		/* device used as team port */ -#define IFF_SUPP_NOFCS	0x80000		/* device supports sending custom FCS */ -#define IFF_LIVE_ADDR_CHANGE 0x100000	/* device supports hardware address -					 * change when it's running */ - -  #define IF_GET_IFACE	0x0001		/* for querying only */  #define IF_GET_PROTO	0x0002 diff --git a/include/uapi/linux/if_addr.h b/include/uapi/linux/if_addr.h index 23357ab81a7..dea10a87dfd 100644 --- a/include/uapi/linux/if_addr.h +++ b/include/uapi/linux/if_addr.h @@ -18,6 +18,9 @@ struct ifaddrmsg {   * It makes no difference for normally configured broadcast interfaces,   * but for point-to-point IFA_ADDRESS is DESTINATION address,   * local address is supplied in IFA_LOCAL attribute. + * + * IFA_FLAGS is a u32 attribute that extends the u8 field ifa_flags. + * If present, the value from struct ifaddrmsg will be ignored.   */  enum {  	IFA_UNSPEC, @@ -28,6 +31,7 @@ enum {  	IFA_ANYCAST,  	IFA_CACHEINFO,  	IFA_MULTICAST, +	IFA_FLAGS,  	__IFA_MAX,  }; @@ -44,6 +48,8 @@ enum {  #define IFA_F_DEPRECATED	0x20  #define IFA_F_TENTATIVE		0x40  #define IFA_F_PERMANENT		0x80 +#define IFA_F_MANAGETEMPADDR	0x100 +#define IFA_F_NOPREFIXROUTE	0x200  struct ifa_cacheinfo {  	__u32	ifa_prefered; diff --git a/include/uapi/linux/if_arp.h b/include/uapi/linux/if_arp.h index d7fea3496f3..4d024d75d64 100644 --- a/include/uapi/linux/if_arp.h +++ b/include/uapi/linux/if_arp.h @@ -94,6 +94,7 @@  #define ARPHRD_CAIF	822		/* CAIF media type		*/  #define ARPHRD_IP6GRE	823		/* GRE over IPv6		*/  #define ARPHRD_NETLINK	824		/* Netlink header		*/ +#define ARPHRD_6LOWPAN	825		/* IPv6 over LoWPAN             */  #define ARPHRD_VOID	  0xFFFF	/* Void type, nothing is known */  #define ARPHRD_NONE	  0xFFFE	/* zero header length */ diff --git a/include/uapi/linux/if_bonding.h b/include/uapi/linux/if_bonding.h index a17edda8a78..9635a62f6f8 100644 --- a/include/uapi/linux/if_bonding.h +++ b/include/uapi/linux/if_bonding.h @@ -91,6 +91,8 @@  #define BOND_XMIT_POLICY_LAYER2		0 /* layer 2 (MAC only), default */  #define BOND_XMIT_POLICY_LAYER34	1 /* layer 3+4 (IP ^ (TCP || UDP)) */  #define BOND_XMIT_POLICY_LAYER23	2 /* layer 2+3 (IP ^ MAC) */ +#define BOND_XMIT_POLICY_ENCAP23	3 /* encapsulated layer 2+3 */ +#define BOND_XMIT_POLICY_ENCAP34	4 /* encapsulated layer 3+4 */  typedef struct ifbond {  	__s32 bond_mode; diff --git a/include/uapi/linux/if_ether.h b/include/uapi/linux/if_ether.h index ade07f1c491..0f8210b8e0b 100644 --- a/include/uapi/linux/if_ether.h +++ b/include/uapi/linux/if_ether.h @@ -68,11 +68,11 @@  #define ETH_P_SLOW	0x8809		/* Slow Protocol. See 802.3ad 43B */  #define ETH_P_WCCP	0x883E		/* Web-cache coordination protocol  					 * defined in draft-wilson-wrec-wccp-v2-00.txt */ -#define ETH_P_PPP_DISC	0x8863		/* PPPoE discovery messages     */ -#define ETH_P_PPP_SES	0x8864		/* PPPoE session messages	*/  #define ETH_P_MPLS_UC	0x8847		/* MPLS Unicast traffic		*/  #define ETH_P_MPLS_MC	0x8848		/* MPLS Multicast traffic	*/  #define ETH_P_ATMMPOA	0x884c		/* MultiProtocol Over ATM	*/ +#define ETH_P_PPP_DISC	0x8863		/* PPPoE discovery messages     */ +#define ETH_P_PPP_SES	0x8864		/* PPPoE session messages	*/  #define ETH_P_LINK_CTL	0x886c		/* HPNA, wlan link local tunnel */  #define ETH_P_ATMFATE	0x8884		/* Frame-based ATM Transport  					 * over Ethernet @@ -85,9 +85,12 @@  #define ETH_P_8021AH	0x88E7          /* 802.1ah Backbone Service Tag */  #define ETH_P_MVRP	0x88F5          /* 802.1Q MVRP                  */  #define ETH_P_1588	0x88F7		/* IEEE 1588 Timesync */ +#define ETH_P_PRP	0x88FB		/* IEC 62439-3 PRP/HSRv0	*/  #define ETH_P_FCOE	0x8906		/* Fibre Channel over Ethernet  */  #define ETH_P_TDLS	0x890D          /* TDLS */  #define ETH_P_FIP	0x8914		/* FCoE Initialization Protocol */ +#define ETH_P_80221	0x8917		/* IEEE 802.21 Media Independent Handover Protocol */ +#define ETH_P_LOOPBACK	0x9000		/* Ethernet loopback packet, per IEEE 802.3 */  #define ETH_P_QINQ1	0x9100		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */  #define ETH_P_QINQ2	0x9200		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */  #define ETH_P_QINQ3	0x9300		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */ diff --git a/include/uapi/linux/if_fddi.h b/include/uapi/linux/if_fddi.h index 0d36909c3ae..1086cd9f675 100644 --- a/include/uapi/linux/if_fddi.h +++ b/include/uapi/linux/if_fddi.h @@ -30,74 +30,76 @@   *  Define max and min legal sizes.  The frame sizes do not include   *  4 byte FCS/CRC (frame check sequence).   */ -#define FDDI_K_ALEN			6		/* Octets in one FDDI address */ -#define FDDI_K_8022_HLEN	16		/* Total octets in 802.2 header */ -#define FDDI_K_SNAP_HLEN	21		/* Total octets in 802.2 SNAP header */ -#define FDDI_K_8022_ZLEN	16		/* Min octets in 802.2 frame sans FCS */ -#define FDDI_K_SNAP_ZLEN	21		/* Min octets in 802.2 SNAP frame sans FCS */ +#define FDDI_K_ALEN		6	/* Octets in one FDDI address */ +#define FDDI_K_8022_HLEN	16	/* Total octets in 802.2 header */ +#define FDDI_K_SNAP_HLEN	21	/* Total octets in 802.2 SNAP header */ +#define FDDI_K_8022_ZLEN	16	/* Min octets in 802.2 frame sans +					   FCS */ +#define FDDI_K_SNAP_ZLEN	21	/* Min octets in 802.2 SNAP frame sans +					   FCS */  #define FDDI_K_8022_DLEN	4475	/* Max octets in 802.2 payload */  #define FDDI_K_SNAP_DLEN	4470	/* Max octets in 802.2 SNAP payload */ -#define FDDI_K_LLC_ZLEN		13		/* Min octets in LLC frame sans FCS */ +#define FDDI_K_LLC_ZLEN		13	/* Min octets in LLC frame sans FCS */  #define FDDI_K_LLC_LEN		4491	/* Max octets in LLC frame sans FCS */ +#define FDDI_K_OUI_LEN		3	/* Octets in OUI in 802.2 SNAP +					   header */  /* Define FDDI Frame Control (FC) Byte values */ -#define FDDI_FC_K_VOID					0x00	 -#define FDDI_FC_K_NON_RESTRICTED_TOKEN	0x80	 -#define FDDI_FC_K_RESTRICTED_TOKEN		0xC0	 -#define FDDI_FC_K_SMT_MIN				0x41 -#define FDDI_FC_K_SMT_MAX		   		0x4F -#define FDDI_FC_K_MAC_MIN				0xC1 -#define FDDI_FC_K_MAC_MAX		  		0xCF	 -#define FDDI_FC_K_ASYNC_LLC_MIN			0x50 -#define FDDI_FC_K_ASYNC_LLC_DEF			0x54 -#define FDDI_FC_K_ASYNC_LLC_MAX			0x5F -#define FDDI_FC_K_SYNC_LLC_MIN			0xD0 -#define FDDI_FC_K_SYNC_LLC_MAX			0xD7 -#define FDDI_FC_K_IMPLEMENTOR_MIN		0x60 -#define FDDI_FC_K_IMPLEMENTOR_MAX  		0x6F -#define FDDI_FC_K_RESERVED_MIN			0x70 -#define FDDI_FC_K_RESERVED_MAX			0x7F +#define FDDI_FC_K_VOID			0x00 +#define FDDI_FC_K_NON_RESTRICTED_TOKEN	0x80 +#define FDDI_FC_K_RESTRICTED_TOKEN	0xC0 +#define FDDI_FC_K_SMT_MIN		0x41 +#define FDDI_FC_K_SMT_MAX		0x4F +#define FDDI_FC_K_MAC_MIN		0xC1 +#define FDDI_FC_K_MAC_MAX		0xCF +#define FDDI_FC_K_ASYNC_LLC_MIN		0x50 +#define FDDI_FC_K_ASYNC_LLC_DEF		0x54 +#define FDDI_FC_K_ASYNC_LLC_MAX		0x5F +#define FDDI_FC_K_SYNC_LLC_MIN		0xD0 +#define FDDI_FC_K_SYNC_LLC_MAX		0xD7 +#define FDDI_FC_K_IMPLEMENTOR_MIN	0x60 +#define FDDI_FC_K_IMPLEMENTOR_MAX	0x6F +#define FDDI_FC_K_RESERVED_MIN		0x70 +#define FDDI_FC_K_RESERVED_MAX		0x7F  /* Define LLC and SNAP constants */ -#define FDDI_EXTENDED_SAP	0xAA +#define FDDI_EXTENDED_SAP		0xAA  #define FDDI_UI_CMD			0x03  /* Define 802.2 Type 1 header */  struct fddi_8022_1_hdr { -	__u8	dsap;					/* destination service access point */ -	__u8	ssap;					/* source service access point */ -	__u8	ctrl;					/* control byte #1 */ +	__u8	dsap;			/* destination service access point */ +	__u8	ssap;			/* source service access point */ +	__u8	ctrl;			/* control byte #1 */  } __attribute__((packed));  /* Define 802.2 Type 2 header */  struct fddi_8022_2_hdr { -	__u8	dsap;					/* destination service access point */ -	__u8	ssap;					/* source service access point */ -	__u8	ctrl_1;					/* control byte #1 */ -	__u8	ctrl_2;					/* control byte #2 */ +	__u8	dsap;			/* destination service access point */ +	__u8	ssap;			/* source service access point */ +	__u8	ctrl_1;			/* control byte #1 */ +	__u8	ctrl_2;			/* control byte #2 */  } __attribute__((packed));  /* Define 802.2 SNAP header */ -#define FDDI_K_OUI_LEN	3  struct fddi_snap_hdr { -	__u8	dsap;					/* always 0xAA */ -	__u8	ssap;					/* always 0xAA */ -	__u8	ctrl;					/* always 0x03 */ +	__u8	dsap;			/* always 0xAA */ +	__u8	ssap;			/* always 0xAA */ +	__u8	ctrl;			/* always 0x03 */  	__u8	oui[FDDI_K_OUI_LEN];	/* organizational universal id */ -	__be16	ethertype;				/* packet type ID field */ +	__be16	ethertype;		/* packet type ID field */  } __attribute__((packed));  /* Define FDDI LLC frame header */  struct fddihdr { -	__u8	fc;						/* frame control */ -	__u8	daddr[FDDI_K_ALEN];		/* destination address */ -	__u8	saddr[FDDI_K_ALEN];		/* source address */ -	union -		{ -		struct fddi_8022_1_hdr		llc_8022_1; -		struct fddi_8022_2_hdr		llc_8022_2; -		struct fddi_snap_hdr		llc_snap; -		} hdr; +	__u8	fc;			/* frame control */ +	__u8	daddr[FDDI_K_ALEN];	/* destination address */ +	__u8	saddr[FDDI_K_ALEN];	/* source address */ +	union { +		struct fddi_8022_1_hdr	llc_8022_1; +		struct fddi_8022_2_hdr	llc_8022_2; +		struct fddi_snap_hdr	llc_snap; +	} hdr;  } __attribute__((packed)); diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h index 80394e8dc3a..b38534895db 100644 --- a/include/uapi/linux/if_link.h +++ b/include/uapi/linux/if_link.h @@ -144,6 +144,7 @@ enum {  	IFLA_NUM_RX_QUEUES,  	IFLA_CARRIER,  	IFLA_PHYS_PORT_ID, +	IFLA_CARRIER_CHANGES,  	__IFLA_MAX  }; @@ -240,6 +241,8 @@ enum {  	IFLA_INFO_KIND,  	IFLA_INFO_DATA,  	IFLA_INFO_XSTATS, +	IFLA_INFO_SLAVE_KIND, +	IFLA_INFO_SLAVE_DATA,  	__IFLA_INFO_MAX,  }; @@ -316,6 +319,9 @@ enum {  	IFLA_VXLAN_PORT,	/* destination port */  	IFLA_VXLAN_GROUP6,  	IFLA_VXLAN_LOCAL6, +	IFLA_VXLAN_UDP_CSUM, +	IFLA_VXLAN_UDP_ZERO_CSUM6_TX, +	IFLA_VXLAN_UDP_ZERO_CSUM6_RX,  	__IFLA_VXLAN_MAX  };  #define IFLA_VXLAN_MAX	(__IFLA_VXLAN_MAX - 1) @@ -325,6 +331,63 @@ struct ifla_vxlan_port_range {  	__be16	high;  }; +/* Bonding section */ + +enum { +	IFLA_BOND_UNSPEC, +	IFLA_BOND_MODE, +	IFLA_BOND_ACTIVE_SLAVE, +	IFLA_BOND_MIIMON, +	IFLA_BOND_UPDELAY, +	IFLA_BOND_DOWNDELAY, +	IFLA_BOND_USE_CARRIER, +	IFLA_BOND_ARP_INTERVAL, +	IFLA_BOND_ARP_IP_TARGET, +	IFLA_BOND_ARP_VALIDATE, +	IFLA_BOND_ARP_ALL_TARGETS, +	IFLA_BOND_PRIMARY, +	IFLA_BOND_PRIMARY_RESELECT, +	IFLA_BOND_FAIL_OVER_MAC, +	IFLA_BOND_XMIT_HASH_POLICY, +	IFLA_BOND_RESEND_IGMP, +	IFLA_BOND_NUM_PEER_NOTIF, +	IFLA_BOND_ALL_SLAVES_ACTIVE, +	IFLA_BOND_MIN_LINKS, +	IFLA_BOND_LP_INTERVAL, +	IFLA_BOND_PACKETS_PER_SLAVE, +	IFLA_BOND_AD_LACP_RATE, +	IFLA_BOND_AD_SELECT, +	IFLA_BOND_AD_INFO, +	__IFLA_BOND_MAX, +}; + +#define IFLA_BOND_MAX	(__IFLA_BOND_MAX - 1) + +enum { +	IFLA_BOND_AD_INFO_UNSPEC, +	IFLA_BOND_AD_INFO_AGGREGATOR, +	IFLA_BOND_AD_INFO_NUM_PORTS, +	IFLA_BOND_AD_INFO_ACTOR_KEY, +	IFLA_BOND_AD_INFO_PARTNER_KEY, +	IFLA_BOND_AD_INFO_PARTNER_MAC, +	__IFLA_BOND_AD_INFO_MAX, +}; + +#define IFLA_BOND_AD_INFO_MAX	(__IFLA_BOND_AD_INFO_MAX - 1) + +enum { +	IFLA_BOND_SLAVE_UNSPEC, +	IFLA_BOND_SLAVE_STATE, +	IFLA_BOND_SLAVE_MII_STATUS, +	IFLA_BOND_SLAVE_LINK_FAILURE_COUNT, +	IFLA_BOND_SLAVE_PERM_HWADDR, +	IFLA_BOND_SLAVE_QUEUE_ID, +	IFLA_BOND_SLAVE_AD_AGGREGATOR_ID, +	__IFLA_BOND_SLAVE_MAX, +}; + +#define IFLA_BOND_SLAVE_MAX	(__IFLA_BOND_SLAVE_MAX - 1) +  /* SR-IOV virtual function management section */  enum { @@ -339,9 +402,10 @@ enum {  	IFLA_VF_UNSPEC,  	IFLA_VF_MAC,		/* Hardware queue specific attributes */  	IFLA_VF_VLAN, -	IFLA_VF_TX_RATE,	/* TX Bandwidth Allocation */ +	IFLA_VF_TX_RATE,	/* Max TX Bandwidth Allocation */  	IFLA_VF_SPOOFCHK,	/* Spoof Checking on/off switch */  	IFLA_VF_LINK_STATE,	/* link state enable/disable/auto switch */ +	IFLA_VF_RATE,		/* Min and Max TX Bandwidth Allocation */  	__IFLA_VF_MAX,  }; @@ -363,6 +427,12 @@ struct ifla_vf_tx_rate {  	__u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */  }; +struct ifla_vf_rate { +	__u32 vf; +	__u32 min_tx_rate; /* Min Bandwidth in Mbps */ +	__u32 max_tx_rate; /* Max Bandwidth in Mbps */ +}; +  struct ifla_vf_spoofchk {  	__u32 vf;  	__u32 setting; @@ -470,4 +540,19 @@ enum {  #define IFLA_IPOIB_MAX (__IFLA_IPOIB_MAX - 1) + +/* HSR section */ + +enum { +	IFLA_HSR_UNSPEC, +	IFLA_HSR_SLAVE1, +	IFLA_HSR_SLAVE2, +	IFLA_HSR_MULTICAST_SPEC,	/* Last byte of supervision addr */ +	IFLA_HSR_SUPERVISION_ADDR,	/* Supervision frame multicast addr */ +	IFLA_HSR_SEQ_NR, +	__IFLA_HSR_MAX, +}; + +#define IFLA_HSR_MAX (__IFLA_HSR_MAX - 1) +  #endif /* _UAPI_LINUX_IF_LINK_H */ diff --git a/include/uapi/linux/if_packet.h b/include/uapi/linux/if_packet.h index dbf06667394..bac27fa05f5 100644 --- a/include/uapi/linux/if_packet.h +++ b/include/uapi/linux/if_packet.h @@ -26,8 +26,10 @@ struct sockaddr_ll {  #define PACKET_MULTICAST	2		/* To group		*/  #define PACKET_OTHERHOST	3		/* To someone else 	*/  #define PACKET_OUTGOING		4		/* Outgoing of any type */ -/* These ones are invisible by user level */  #define PACKET_LOOPBACK		5		/* MC/BRD frame looped back */ +#define PACKET_USER		6		/* To user space	*/ +#define PACKET_KERNEL		7		/* To kernel space	*/ +/* Unused, PACKET_FASTROUTE and PACKET_LOOPBACK are invisible to user space */  #define PACKET_FASTROUTE	6		/* Fastrouted frame	*/  /* Packet socket options */ @@ -51,12 +53,14 @@ struct sockaddr_ll {  #define PACKET_TIMESTAMP		17  #define PACKET_FANOUT			18  #define PACKET_TX_HAS_OFF		19 +#define PACKET_QDISC_BYPASS		20  #define PACKET_FANOUT_HASH		0  #define PACKET_FANOUT_LB		1  #define PACKET_FANOUT_CPU		2  #define PACKET_FANOUT_ROLLOVER		3  #define PACKET_FANOUT_RND		4 +#define PACKET_FANOUT_QM		5  #define PACKET_FANOUT_FLAG_ROLLOVER	0x1000  #define PACKET_FANOUT_FLAG_DEFRAG	0x8000 @@ -83,17 +87,18 @@ struct tpacket_auxdata {  	__u16		tp_mac;  	__u16		tp_net;  	__u16		tp_vlan_tci; -	__u16		tp_padding; +	__u16		tp_vlan_tpid;  };  /* Rx ring - header status */ -#define TP_STATUS_KERNEL	      0 -#define TP_STATUS_USER		(1 << 0) -#define TP_STATUS_COPY		(1 << 1) -#define TP_STATUS_LOSING	(1 << 2) -#define TP_STATUS_CSUMNOTREADY	(1 << 3) -#define TP_STATUS_VLAN_VALID	(1 << 4) /* auxdata has valid tp_vlan_tci */ -#define TP_STATUS_BLK_TMO	(1 << 5) +#define TP_STATUS_KERNEL		      0 +#define TP_STATUS_USER			(1 << 0) +#define TP_STATUS_COPY			(1 << 1) +#define TP_STATUS_LOSING		(1 << 2) +#define TP_STATUS_CSUMNOTREADY		(1 << 3) +#define TP_STATUS_VLAN_VALID		(1 << 4) /* auxdata has valid tp_vlan_tci */ +#define TP_STATUS_BLK_TMO		(1 << 5) +#define TP_STATUS_VLAN_TPID_VALID	(1 << 6) /* auxdata has valid tp_vlan_tpid */  /* Tx ring - header status */  #define TP_STATUS_AVAILABLE	      0 @@ -132,12 +137,15 @@ struct tpacket2_hdr {  	__u32		tp_sec;  	__u32		tp_nsec;  	__u16		tp_vlan_tci; -	__u16		tp_padding; +	__u16		tp_vlan_tpid; +	__u8		tp_padding[4];  };  struct tpacket_hdr_variant1 {  	__u32	tp_rxhash;  	__u32	tp_vlan_tci; +	__u16	tp_vlan_tpid; +	__u16	tp_padding;  };  struct tpacket3_hdr { @@ -153,6 +161,7 @@ struct tpacket3_hdr {  	union {  		struct tpacket_hdr_variant1 hv1;  	}; +	__u8		tp_padding[8];  };  struct tpacket_bd_ts { diff --git a/include/uapi/linux/if_tunnel.h b/include/uapi/linux/if_tunnel.h index aee73d0611f..3bce9e9d9f7 100644 --- a/include/uapi/linux/if_tunnel.h +++ b/include/uapi/linux/if_tunnel.h @@ -100,7 +100,7 @@ enum {  #define IFLA_GRE_MAX	(__IFLA_GRE_MAX - 1)  /* VTI-mode i_flags */ -#define VTI_ISVTI 0x0001 +#define VTI_ISVTI ((__force __be16)0x0001)  enum {  	IFLA_VTI_UNSPEC, diff --git a/include/uapi/linux/in.h b/include/uapi/linux/in.h index f9e8e496ae5..c33a65e3d62 100644 --- a/include/uapi/linux/in.h +++ b/include/uapi/linux/in.h @@ -115,6 +115,15 @@ struct in_addr {  #define IP_PMTUDISC_WANT		1	/* Use per route hints	*/  #define IP_PMTUDISC_DO			2	/* Always DF		*/  #define IP_PMTUDISC_PROBE		3       /* Ignore dst pmtu      */ +/* Always use interface mtu (ignores dst pmtu) but don't set DF flag. + * Also incoming ICMP frag_needed notifications will be ignored on + * this socket to prevent accepting spoofed ones. + */ +#define IP_PMTUDISC_INTERFACE		4 +/* weaker version of IP_PMTUDISC_INTERFACE, which allos packets to get + * fragmented if they exeed the interface mtu + */ +#define IP_PMTUDISC_OMIT		5  #define IP_MULTICAST_IF			32  #define IP_MULTICAST_TTL 		33 diff --git a/include/uapi/linux/in6.h b/include/uapi/linux/in6.h index 440d5c47914..0d8e0f0342d 100644 --- a/include/uapi/linux/in6.h +++ b/include/uapi/linux/in6.h @@ -85,6 +85,8 @@ struct in6_flowlabel_req {  #define IPV6_FL_F_CREATE	1  #define IPV6_FL_F_EXCL		2 +#define IPV6_FL_F_REFLECT	4 +#define IPV6_FL_F_REMOTE	8  #define IPV6_FL_S_NONE		0  #define IPV6_FL_S_EXCL		1 @@ -126,22 +128,13 @@ struct in6_flowlabel_req {   *	IPV6 extension headers   */  #if __UAPI_DEF_IPPROTO_V6 -enum { -  IPPROTO_HOPOPTS = 0,		/* IPv6 hop-by-hop options      */ -#define IPPROTO_HOPOPTS		IPPROTO_HOPOPTS -  IPPROTO_ROUTING = 43,		/* IPv6 routing header          */ -#define IPPROTO_ROUTING		IPPROTO_ROUTING -  IPPROTO_FRAGMENT = 44,	/* IPv6 fragmentation header    */ -#define IPPROTO_FRAGMENT	IPPROTO_FRAGMENT -  IPPROTO_ICMPV6 = 58,		/* ICMPv6                       */ -#define IPPROTO_ICMPV6		IPPROTO_ICMPV6 -  IPPROTO_NONE = 59,		/* IPv6 no next header          */ -#define IPPROTO_NONE		IPPROTO_NONE -  IPPROTO_DSTOPTS = 60,		/* IPv6 destination options     */ -#define IPPROTO_DSTOPTS		IPPROTO_DSTOPTS -  IPPROTO_MH = 135,		/* IPv6 mobility header         */ -#define IPPROTO_MH		IPPROTO_MH -}; +#define IPPROTO_HOPOPTS		0	/* IPv6 hop-by-hop options	*/ +#define IPPROTO_ROUTING		43	/* IPv6 routing header		*/ +#define IPPROTO_FRAGMENT	44	/* IPv6 fragmentation header	*/ +#define IPPROTO_ICMPV6		58	/* ICMPv6			*/ +#define IPPROTO_NONE		59	/* IPv6 no next header		*/ +#define IPPROTO_DSTOPTS		60	/* IPv6 destination options	*/ +#define IPPROTO_MH		135	/* IPv6 mobility header		*/  #endif /* __UAPI_DEF_IPPROTO_V6 */  /* @@ -188,6 +181,14 @@ enum {  #define IPV6_PMTUDISC_WANT		1  #define IPV6_PMTUDISC_DO		2  #define IPV6_PMTUDISC_PROBE		3 +/* same as IPV6_PMTUDISC_PROBE, provided for symetry with IPv4 + * also see comments on IP_PMTUDISC_INTERFACE + */ +#define IPV6_PMTUDISC_INTERFACE		4 +/* weaker version of IPV6_PMTUDISC_INTERFACE, which allows packets to + * get fragmented if they exceed the interface mtu + */ +#define IPV6_PMTUDISC_OMIT		5  /* Flowlabel */  #define IPV6_FLOWLABEL_MGR	32 diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h index a3726275876..19df18c9b8b 100644 --- a/include/uapi/linux/input.h +++ b/include/uapi/linux/input.h @@ -164,6 +164,7 @@ struct input_keymap_entry {  #define INPUT_PROP_DIRECT		0x01	/* direct input devices */  #define INPUT_PROP_BUTTONPAD		0x02	/* has button(s) under pad */  #define INPUT_PROP_SEMI_MT		0x03	/* touch rectangle only */ +#define INPUT_PROP_TOPBUTTONPAD		0x04	/* softbuttons at top of pad */  #define INPUT_PROP_MAX			0x1f  #define INPUT_PROP_CNT			(INPUT_PROP_MAX + 1) @@ -461,10 +462,14 @@ struct input_keymap_entry {  #define KEY_VIDEO_NEXT		241	/* drive next video source */  #define KEY_VIDEO_PREV		242	/* drive previous video source */  #define KEY_BRIGHTNESS_CYCLE	243	/* brightness up, after max is min */ -#define KEY_BRIGHTNESS_ZERO	244	/* brightness off, use ambient */ +#define KEY_BRIGHTNESS_AUTO	244	/* Set Auto Brightness: manual +					  brightness control is off, +					  rely on ambient */ +#define KEY_BRIGHTNESS_ZERO	KEY_BRIGHTNESS_AUTO  #define KEY_DISPLAY_OFF		245	/* display device to off state */ -#define KEY_WIMAX		246 +#define KEY_WWAN		246	/* Wireless WAN (LTE, UMTS, GSM, etc.) */ +#define KEY_WIMAX		KEY_WWAN  #define KEY_RFKILL		247	/* Key that controls all radios */  #define KEY_MICMUTE		248	/* Mute / unmute the microphone */ @@ -630,6 +635,7 @@ struct input_keymap_entry {  #define KEY_ADDRESSBOOK		0x1ad	/* AL Contacts/Address Book */  #define KEY_MESSENGER		0x1ae	/* AL Instant Messaging */  #define KEY_DISPLAYTOGGLE	0x1af	/* Turn display (LCD) on and off */ +#define KEY_BRIGHTNESS_TOGGLE	KEY_DISPLAYTOGGLE  #define KEY_SPELLCHECK		0x1b0   /* AL Spell Check */  #define KEY_LOGOFF		0x1b1   /* AL Logoff */ @@ -719,6 +725,19 @@ struct input_keymap_entry {  #define BTN_DPAD_LEFT		0x222  #define BTN_DPAD_RIGHT		0x223 +#define KEY_ALS_TOGGLE		0x230	/* Ambient light sensor */ + +#define KEY_BUTTONCONFIG		0x240	/* AL Button Configuration */ +#define KEY_TASKMANAGER		0x241	/* AL Task/Project Manager */ +#define KEY_JOURNAL		0x242	/* AL Log/Journal/Timecard */ +#define KEY_CONTROLPANEL		0x243	/* AL Control Panel */ +#define KEY_APPSELECT		0x244	/* AL Select Task/Application */ +#define KEY_SCREENSAVER		0x245	/* AL Screen Saver */ +#define KEY_VOICECOMMAND		0x246	/* Listening Voice Command */ + +#define KEY_BRIGHTNESS_MIN		0x250	/* Set Brightness to Minimum */ +#define KEY_BRIGHTNESS_MAX		0x251	/* Set Brightness to Maximum */ +  #define BTN_TRIGGER_HAPPY		0x2c0  #define BTN_TRIGGER_HAPPY1		0x2c0  #define BTN_TRIGGER_HAPPY2		0x2c1 @@ -856,6 +875,7 @@ struct input_keymap_entry {  #define SW_FRONT_PROXIMITY	0x0b  /* set = front proximity sensor active */  #define SW_ROTATE_LOCK		0x0c  /* set = rotate locked/disabled */  #define SW_LINEIN_INSERT	0x0d  /* set = inserted */ +#define SW_MUTE_DEVICE		0x0e  /* set = device disabled */  #define SW_MAX			0x0f  #define SW_CNT			(SW_MAX+1) diff --git a/include/uapi/linux/ip_vs.h b/include/uapi/linux/ip_vs.h index 29458223d04..fbcffe8041f 100644 --- a/include/uapi/linux/ip_vs.h +++ b/include/uapi/linux/ip_vs.h @@ -334,7 +334,7 @@ enum {  	__IPVS_CMD_ATTR_MAX,  }; -#define IPVS_CMD_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1) +#define IPVS_CMD_ATTR_MAX (__IPVS_CMD_ATTR_MAX - 1)  /*   * Attributes used to describe a service diff --git a/include/uapi/linux/kexec.h b/include/uapi/linux/kexec.h index 104838f65bc..d6629d49a24 100644 --- a/include/uapi/linux/kexec.h +++ b/include/uapi/linux/kexec.h @@ -18,6 +18,7 @@   */  #define KEXEC_ARCH_DEFAULT ( 0 << 16)  #define KEXEC_ARCH_386     ( 3 << 16) +#define KEXEC_ARCH_68K     ( 4 << 16)  #define KEXEC_ARCH_X86_64  (62 << 16)  #define KEXEC_ARCH_PPC     (20 << 16)  #define KEXEC_ARCH_PPC64   (21 << 16) diff --git a/include/uapi/linux/keyctl.h b/include/uapi/linux/keyctl.h index c9b7f4faf97..840cb990abe 100644 --- a/include/uapi/linux/keyctl.h +++ b/include/uapi/linux/keyctl.h @@ -56,5 +56,6 @@  #define KEYCTL_REJECT			19	/* reject a partially constructed key */  #define KEYCTL_INSTANTIATE_IOV		20	/* instantiate a partially constructed key */  #define KEYCTL_INVALIDATE		21	/* invalidate a key */ +#define KEYCTL_GET_PERSISTENT		22	/* get a user's persistent keyring */  #endif /*  _LINUX_KEYCTL_H */ diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 99c25338ede..e11d8f170a6 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -171,6 +171,7 @@ struct kvm_pit_config {  #define KVM_EXIT_WATCHDOG         21  #define KVM_EXIT_S390_TSCH        22  #define KVM_EXIT_EPR              23 +#define KVM_EXIT_SYSTEM_EVENT     24  /* For KVM_EXIT_INTERNAL_ERROR */  /* Emulate instruction failed. */ @@ -301,6 +302,13 @@ struct kvm_run {  		struct {  			__u32 epr;  		} epr; +		/* KVM_EXIT_SYSTEM_EVENT */ +		struct { +#define KVM_SYSTEM_EVENT_SHUTDOWN       1 +#define KVM_SYSTEM_EVENT_RESET          2 +			__u32 type; +			__u64 flags; +		} system_event;  		/* Fix the size of the union. */  		char padding[256];  	}; @@ -413,7 +421,11 @@ struct kvm_s390_psw {  #define KVM_S390_PROGRAM_INT		0xfffe0001u  #define KVM_S390_SIGP_SET_PREFIX	0xfffe0002u  #define KVM_S390_RESTART		0xfffe0003u +#define KVM_S390_INT_PFAULT_INIT	0xfffe0004u +#define KVM_S390_INT_PFAULT_DONE	0xfffe0005u  #define KVM_S390_MCHK			0xfffe1000u +#define KVM_S390_INT_CLOCK_COMP		0xffff1004u +#define KVM_S390_INT_CPU_TIMER		0xffff1005u  #define KVM_S390_INT_VIRTIO		0xffff2603u  #define KVM_S390_INT_SERVICE		0xffff2401u  #define KVM_S390_INT_EMERGENCY		0xffff1201u @@ -434,6 +446,69 @@ struct kvm_s390_interrupt {  	__u64 parm64;  }; +struct kvm_s390_io_info { +	__u16 subchannel_id; +	__u16 subchannel_nr; +	__u32 io_int_parm; +	__u32 io_int_word; +}; + +struct kvm_s390_ext_info { +	__u32 ext_params; +	__u32 pad; +	__u64 ext_params2; +}; + +struct kvm_s390_pgm_info { +	__u64 trans_exc_code; +	__u64 mon_code; +	__u64 per_address; +	__u32 data_exc_code; +	__u16 code; +	__u16 mon_class_nr; +	__u8 per_code; +	__u8 per_atmid; +	__u8 exc_access_id; +	__u8 per_access_id; +	__u8 op_access_id; +	__u8 pad[3]; +}; + +struct kvm_s390_prefix_info { +	__u32 address; +}; + +struct kvm_s390_extcall_info { +	__u16 code; +}; + +struct kvm_s390_emerg_info { +	__u16 code; +}; + +struct kvm_s390_mchk_info { +	__u64 cr14; +	__u64 mcic; +	__u64 failing_storage_address; +	__u32 ext_damage_code; +	__u32 pad; +	__u8 fixed_logout[16]; +}; + +struct kvm_s390_irq { +	__u64 type; +	union { +		struct kvm_s390_io_info io; +		struct kvm_s390_ext_info ext; +		struct kvm_s390_pgm_info pgm; +		struct kvm_s390_emerg_info emerg; +		struct kvm_s390_extcall_info extcall; +		struct kvm_s390_prefix_info prefix; +		struct kvm_s390_mchk_info mchk; +		char reserved[64]; +	} u; +}; +  /* for KVM_SET_GUEST_DEBUG */  #define KVM_GUESTDBG_ENABLE		0x00000001 @@ -450,6 +525,7 @@ enum {  	kvm_ioeventfd_flag_nr_pio,  	kvm_ioeventfd_flag_nr_deassign,  	kvm_ioeventfd_flag_nr_virtio_ccw_notify, +	kvm_ioeventfd_flag_nr_fast_mmio,  	kvm_ioeventfd_flag_nr_max,  }; @@ -464,7 +540,7 @@ enum {  struct kvm_ioeventfd {  	__u64 datamatch;  	__u64 addr;        /* legal pio/mmio address */ -	__u32 len;         /* 1, 2, 4, or 8 bytes    */ +	__u32 len;         /* 1, 2, 4, or 8 bytes; or 0 to ignore length */  	__s32 fd;  	__u32 flags;  	__u8  pad[36]; @@ -518,6 +594,10 @@ struct kvm_ppc_smmu_info {  /* machine type bits, to be used as argument to KVM_CREATE_VM */  #define KVM_VM_S390_UCONTROL	1 +/* on ppc, 0 indicate default, 1 should force HV and 2 PR */ +#define KVM_VM_PPC_HV 1 +#define KVM_VM_PPC_PR 2 +  #define KVM_S390_SIE_PAGE_OFFSET 1  /* @@ -541,6 +621,7 @@ struct kvm_ppc_smmu_info {  #define KVM_TRACE_ENABLE          __KVM_DEPRECATED_MAIN_W_0x06  #define KVM_TRACE_PAUSE           __KVM_DEPRECATED_MAIN_0x07  #define KVM_TRACE_DISABLE         __KVM_DEPRECATED_MAIN_0x08 +#define KVM_GET_EMULATED_CPUID	  _IOWR(KVMIO, 0x09, struct kvm_cpuid2)  /*   * Extension capability list. @@ -668,6 +749,15 @@ struct kvm_ppc_smmu_info {  #define KVM_CAP_IRQ_XICS 92  #define KVM_CAP_ARM_EL1_32BIT 93  #define KVM_CAP_SPAPR_MULTITCE 94 +#define KVM_CAP_EXT_EMUL_CPUID 95 +#define KVM_CAP_HYPERV_TIME 96 +#define KVM_CAP_IOAPIC_POLARITY_IGNORED 97 +#define KVM_CAP_ENABLE_CAP_VM 98 +#define KVM_CAP_S390_IRQCHIP 99 +#define KVM_CAP_IOEVENTFD_NO_LENGTH 100 +#define KVM_CAP_VM_ATTRIBUTES 101 +#define KVM_CAP_ARM_PSCI_0_2 102 +#define KVM_CAP_PPC_FIXUP_HCALL 103  #ifdef KVM_CAP_IRQ_ROUTING @@ -683,9 +773,18 @@ struct kvm_irq_routing_msi {  	__u32 pad;  }; +struct kvm_irq_routing_s390_adapter { +	__u64 ind_addr; +	__u64 summary_addr; +	__u64 ind_offset; +	__u32 summary_offset; +	__u32 adapter_id; +}; +  /* gsi routing entry types */  #define KVM_IRQ_ROUTING_IRQCHIP 1  #define KVM_IRQ_ROUTING_MSI 2 +#define KVM_IRQ_ROUTING_S390_ADAPTER 3  struct kvm_irq_routing_entry {  	__u32 gsi; @@ -695,6 +794,7 @@ struct kvm_irq_routing_entry {  	union {  		struct kvm_irq_routing_irqchip irqchip;  		struct kvm_irq_routing_msi msi; +		struct kvm_irq_routing_s390_adapter adapter;  		__u32 pad[8];  	} u;  }; @@ -843,6 +943,12 @@ struct kvm_device_attr {  #define KVM_DEV_TYPE_FSL_MPIC_20	1  #define KVM_DEV_TYPE_FSL_MPIC_42	2  #define KVM_DEV_TYPE_XICS		3 +#define KVM_DEV_TYPE_VFIO		4 +#define  KVM_DEV_VFIO_GROUP			1 +#define   KVM_DEV_VFIO_GROUP_ADD			1 +#define   KVM_DEV_VFIO_GROUP_DEL			2 +#define KVM_DEV_TYPE_ARM_VGIC_V2	5 +#define KVM_DEV_TYPE_FLIC		6  /*   * ioctls for VM fds @@ -997,6 +1103,10 @@ struct kvm_s390_ucas_mapping {  /* Available with KVM_CAP_DEBUGREGS */  #define KVM_GET_DEBUGREGS         _IOR(KVMIO,  0xa1, struct kvm_debugregs)  #define KVM_SET_DEBUGREGS         _IOW(KVMIO,  0xa2, struct kvm_debugregs) +/* + * vcpu version available with KVM_ENABLE_CAP + * vm version available with KVM_CAP_ENABLE_CAP_VM + */  #define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap)  /* Available with KVM_CAP_XSAVE */  #define KVM_GET_XSAVE		  _IOR(KVMIO,  0xa4, struct kvm_xsave) @@ -1012,6 +1122,7 @@ struct kvm_s390_ucas_mapping {  /* VM is being stopped by host */  #define KVM_KVMCLOCK_CTRL	  _IO(KVMIO,   0xad)  #define KVM_ARM_VCPU_INIT	  _IOW(KVMIO,  0xae, struct kvm_vcpu_init) +#define KVM_ARM_PREFERRED_TARGET  _IOR(KVMIO,  0xaf, struct kvm_vcpu_init)  #define KVM_GET_REG_LIST	  _IOWR(KVMIO, 0xb0, struct kvm_reg_list)  #define KVM_DEV_ASSIGN_ENABLE_IOMMU	(1 << 0) diff --git a/include/uapi/linux/kvm_para.h b/include/uapi/linux/kvm_para.h index 2841f86eae0..bf6cd7d5cac 100644 --- a/include/uapi/linux/kvm_para.h +++ b/include/uapi/linux/kvm_para.h @@ -20,6 +20,9 @@  #define KVM_HC_FEATURES			3  #define KVM_HC_PPC_MAP_MAGIC_PAGE	4  #define KVM_HC_KICK_CPU			5 +#define KVM_HC_MIPS_GET_CLOCK_FREQ	6 +#define KVM_HC_MIPS_EXIT_VM		7 +#define KVM_HC_MIPS_CONSOLE_OUTPUT	8  /*   * hypercalls use architecture specific diff --git a/include/uapi/linux/l2tp.h b/include/uapi/linux/l2tp.h index 8adb6816032..21caa2631c2 100644 --- a/include/uapi/linux/l2tp.h +++ b/include/uapi/linux/l2tp.h @@ -124,6 +124,8 @@ enum {  	L2TP_ATTR_STATS,		/* nested */  	L2TP_ATTR_IP6_SADDR,		/* struct in6_addr */  	L2TP_ATTR_IP6_DADDR,		/* struct in6_addr */ +	L2TP_ATTR_UDP_ZERO_CSUM6_TX,	/* u8 */ +	L2TP_ATTR_UDP_ZERO_CSUM6_RX,	/* u8 */  	__L2TP_ATTR_MAX,  }; diff --git a/include/uapi/linux/libc-compat.h b/include/uapi/linux/libc-compat.h index 335e8a7cad3..c140620dad9 100644 --- a/include/uapi/linux/libc-compat.h +++ b/include/uapi/linux/libc-compat.h @@ -85,6 +85,12 @@  #endif /* _NETINET_IN_H */ +/* Definitions for xattr.h */ +#if defined(_SYS_XATTR_H) +#define __UAPI_DEF_XATTR		0 +#else +#define __UAPI_DEF_XATTR		1 +#endif  /* If we did not see any headers from any supported C libraries,   * or we are being included in the kernel, then define everything @@ -98,6 +104,9 @@  #define __UAPI_DEF_IPV6_MREQ		1  #define __UAPI_DEF_IPPROTO_V6		1 +/* Definitions for xattr.h */ +#define __UAPI_DEF_XATTR		1 +  #endif /* __GLIBC__ */  #endif /* _UAPI_LIBC_COMPAT_H */ diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h index 2944278a8ba..77c60311a6c 100644 --- a/include/uapi/linux/magic.h +++ b/include/uapi/linux/magic.h @@ -71,6 +71,6 @@  #define USBDEVICE_SUPER_MAGIC	0x9fa2  #define MTD_INODE_FS_MAGIC      0x11307854  #define ANON_INODE_FS_MAGIC	0x09041934 - +#define BTRFS_TEST_MAGIC	0x73727279  #endif /* __LINUX_MAGIC_H__ */ diff --git a/include/uapi/linux/major.h b/include/uapi/linux/major.h index 6a8ca98c9a9..620252e69b4 100644 --- a/include/uapi/linux/major.h +++ b/include/uapi/linux/major.h @@ -54,6 +54,7 @@  #define ACSI_MAJOR		28  #define AZTECH_CDROM_MAJOR	29  #define FB_MAJOR		29   /* /dev/fb* framebuffers */ +#define MTD_BLOCK_MAJOR		31  #define CM206_CDROM_MAJOR	32  #define IDE2_MAJOR		33  #define IDE3_MAJOR		34 @@ -105,6 +106,7 @@  #define IDE6_MAJOR		88  #define IDE7_MAJOR		89  #define IDE8_MAJOR		90 +#define MTD_CHAR_MAJOR		90  #define IDE9_MAJOR		91  #define DASD_MAJOR		94 diff --git a/include/uapi/linux/media.h b/include/uapi/linux/media.h index ed49574ad75..d847c760e8f 100644 --- a/include/uapi/linux/media.h +++ b/include/uapi/linux/media.h @@ -98,6 +98,7 @@ struct media_entity_desc {  #define MEDIA_PAD_FL_SINK		(1 << 0)  #define MEDIA_PAD_FL_SOURCE		(1 << 1) +#define MEDIA_PAD_FL_MUST_CONNECT	(1 << 2)  struct media_pad_desc {  	__u32 entity;		/* entity ID */ diff --git a/include/uapi/linux/mic_common.h b/include/uapi/linux/mic_common.h new file mode 100644 index 00000000000..6eb40244e01 --- /dev/null +++ b/include/uapi/linux/mic_common.h @@ -0,0 +1,232 @@ +/* + * Intel MIC Platform Software Stack (MPSS) + * + * Copyright(c) 2013 Intel Corporation. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, as + * published by the Free Software Foundation. + * + * 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. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Intel MIC driver. + * + */ +#ifndef __MIC_COMMON_H_ +#define __MIC_COMMON_H_ + +#include <linux/virtio_ring.h> + +#define __mic_align(a, x) (((a) + (x) - 1) & ~((x) - 1)) + +/** + * struct mic_device_desc: Virtio device information shared between the + * virtio driver and userspace backend + * + * @type: Device type: console/network/disk etc.  Type 0/-1 terminates. + * @num_vq: Number of virtqueues. + * @feature_len: Number of bytes of feature bits.  Multiply by 2: one for +   host features and one for guest acknowledgements. + * @config_len: Number of bytes of the config array after virtqueues. + * @status: A status byte, written by the Guest. + * @config: Start of the following variable length config. + */ +struct mic_device_desc { +	__s8 type; +	__u8 num_vq; +	__u8 feature_len; +	__u8 config_len; +	__u8 status; +	__le64 config[0]; +} __attribute__ ((aligned(8))); + +/** + * struct mic_device_ctrl: Per virtio device information in the device page + * used internally by the host and card side drivers. + * + * @vdev: Used for storing MIC vdev information by the guest. + * @config_change: Set to 1 by host when a config change is requested. + * @vdev_reset: Set to 1 by guest to indicate virtio device has been reset. + * @guest_ack: Set to 1 by guest to ack a command. + * @host_ack: Set to 1 by host to ack a command. + * @used_address_updated: Set to 1 by guest when the used address should be + * updated. + * @c2h_vdev_db: The doorbell number to be used by guest. Set by host. + * @h2c_vdev_db: The doorbell number to be used by host. Set by guest. + */ +struct mic_device_ctrl { +	__le64 vdev; +	__u8 config_change; +	__u8 vdev_reset; +	__u8 guest_ack; +	__u8 host_ack; +	__u8 used_address_updated; +	__s8 c2h_vdev_db; +	__s8 h2c_vdev_db; +} __attribute__ ((aligned(8))); + +/** + * struct mic_bootparam: Virtio device independent information in device page + * + * @magic: A magic value used by the card to ensure it can see the host + * @c2h_shutdown_db: Card to Host shutdown doorbell set by host + * @h2c_shutdown_db: Host to Card shutdown doorbell set by card + * @h2c_config_db: Host to Card Virtio config doorbell set by card + * @shutdown_status: Card shutdown status set by card + * @shutdown_card: Set to 1 by the host when a card shutdown is initiated + */ +struct mic_bootparam { +	__le32 magic; +	__s8 c2h_shutdown_db; +	__s8 h2c_shutdown_db; +	__s8 h2c_config_db; +	__u8 shutdown_status; +	__u8 shutdown_card; +} __attribute__ ((aligned(8))); + +/** + * struct mic_device_page: High level representation of the device page + * + * @bootparam: The bootparam structure is used for sharing information and + * status updates between MIC host and card drivers. + * @desc: Array of MIC virtio device descriptors. + */ +struct mic_device_page { +	struct mic_bootparam bootparam; +	struct mic_device_desc desc[0]; +}; +/** + * struct mic_vqconfig: This is how we expect the device configuration field + * for a virtqueue to be laid out in config space. + * + * @address: Guest/MIC physical address of the virtio ring + * (avail and desc rings) + * @used_address: Guest/MIC physical address of the used ring + * @num: The number of entries in the virtio_ring + */ +struct mic_vqconfig { +	__le64 address; +	__le64 used_address; +	__le16 num; +} __attribute__ ((aligned(8))); + +/* + * The alignment to use between consumer and producer parts of vring. + * This is pagesize for historical reasons. + */ +#define MIC_VIRTIO_RING_ALIGN		4096 + +#define MIC_MAX_VRINGS			4 +#define MIC_VRING_ENTRIES		128 + +/* + * Max vring entries (power of 2) to ensure desc and avail rings + * fit in a single page + */ +#define MIC_MAX_VRING_ENTRIES		128 + +/** + * Max size of the desc block in bytes: includes: + *	- struct mic_device_desc + *	- struct mic_vqconfig (num_vq of these) + *	- host and guest features + *	- virtio device config space + */ +#define MIC_MAX_DESC_BLK_SIZE		256 + +/** + * struct _mic_vring_info - Host vring info exposed to userspace backend + * for the avail index and magic for the card. + * + * @avail_idx: host avail idx + * @magic: A magic debug cookie. + */ +struct _mic_vring_info { +	__u16 avail_idx; +	__le32 magic; +}; + +/** + * struct mic_vring - Vring information. + * + * @vr: The virtio ring. + * @info: Host vring information exposed to the userspace backend for the + * avail index and magic for the card. + * @va: The va for the buffer allocated for vr and info. + * @len: The length of the buffer required for allocating vr and info. + */ +struct mic_vring { +	struct vring vr; +	struct _mic_vring_info *info; +	void *va; +	int len; +}; + +#define mic_aligned_desc_size(d) __mic_align(mic_desc_size(d), 8) + +#ifndef INTEL_MIC_CARD +static inline unsigned mic_desc_size(const struct mic_device_desc *desc) +{ +	return sizeof(*desc) + desc->num_vq * sizeof(struct mic_vqconfig) +		+ desc->feature_len * 2 + desc->config_len; +} + +static inline struct mic_vqconfig * +mic_vq_config(const struct mic_device_desc *desc) +{ +	return (struct mic_vqconfig *)(desc + 1); +} + +static inline __u8 *mic_vq_features(const struct mic_device_desc *desc) +{ +	return (__u8 *)(mic_vq_config(desc) + desc->num_vq); +} + +static inline __u8 *mic_vq_configspace(const struct mic_device_desc *desc) +{ +	return mic_vq_features(desc) + desc->feature_len * 2; +} +static inline unsigned mic_total_desc_size(struct mic_device_desc *desc) +{ +	return mic_aligned_desc_size(desc) + sizeof(struct mic_device_ctrl); +} +#endif + +/* Device page size */ +#define MIC_DP_SIZE 4096 + +#define MIC_MAGIC 0xc0ffee00 + +/** + * enum mic_states - MIC states. + */ +enum mic_states { +	MIC_OFFLINE = 0, +	MIC_ONLINE, +	MIC_SHUTTING_DOWN, +	MIC_RESET_FAILED, +	MIC_SUSPENDING, +	MIC_SUSPENDED, +	MIC_LAST +}; + +/** + * enum mic_status - MIC status reported by card after + * a host or card initiated shutdown or a card crash. + */ +enum mic_status { +	MIC_NOP = 0, +	MIC_CRASHED, +	MIC_HALTED, +	MIC_POWER_OFF, +	MIC_RESTART, +	MIC_STATUS_LAST +}; + +#endif diff --git a/include/uapi/linux/mic_ioctl.h b/include/uapi/linux/mic_ioctl.h new file mode 100644 index 00000000000..feb0b4c0814 --- /dev/null +++ b/include/uapi/linux/mic_ioctl.h @@ -0,0 +1,76 @@ +/* + * Intel MIC Platform Software Stack (MPSS) + * + * Copyright(c) 2013 Intel Corporation. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, as + * published by the Free Software Foundation. + * + * 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. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Intel MIC Host driver. + * + */ +#ifndef _MIC_IOCTL_H_ +#define _MIC_IOCTL_H_ + +#include <linux/types.h> + +/* + * mic_copy - MIC virtio descriptor copy. + * + * @iov: An array of IOVEC structures containing user space buffers. + * @iovcnt: Number of IOVEC structures in iov. + * @vr_idx: The vring index. + * @update_used: A non zero value results in used index being updated. + * @out_len: The aggregate of the total length written to or read from + *	the virtio device. + */ +struct mic_copy_desc { +#ifdef __KERNEL__ +	struct iovec __user *iov; +#else +	struct iovec *iov; +#endif +	__u32 iovcnt; +	__u8 vr_idx; +	__u8 update_used; +	__u32 out_len; +}; + +/* + * Add a new virtio device + * The (struct mic_device_desc *) pointer points to a device page entry + *	for the virtio device consisting of: + *	- struct mic_device_desc + *	- struct mic_vqconfig (num_vq of these) + *	- host and guest features + *	- virtio device config space + * The total size referenced by the pointer should equal the size returned + * by desc_size() in mic_common.h + */ +#define MIC_VIRTIO_ADD_DEVICE _IOWR('s', 1, struct mic_device_desc *) + +/* + * Copy the number of entries in the iovec and update the used index + * if requested by the user. + */ +#define MIC_VIRTIO_COPY_DESC	_IOWR('s', 2, struct mic_copy_desc *) + +/* + * Notify virtio device of a config change + * The (__u8 *) pointer points to config space values for the device + * as they should be written into the device page. The total size + * referenced by the pointer should equal the config_len field of struct + * mic_device_desc. + */ +#define MIC_VIRTIO_CONFIG_CHANGE _IOWR('s', 5, __u8 *) + +#endif diff --git a/include/uapi/linux/mpls.h b/include/uapi/linux/mpls.h new file mode 100644 index 00000000000..bc9abfe88c9 --- /dev/null +++ b/include/uapi/linux/mpls.h @@ -0,0 +1,34 @@ +#ifndef _UAPI_MPLS_H +#define _UAPI_MPLS_H + +#include <linux/types.h> +#include <asm/byteorder.h> + +/* Reference: RFC 5462, RFC 3032 + * + *  0                   1                   2                   3 + *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * |                Label                  | TC  |S|       TTL     | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + *	Label:  Label Value, 20 bits + *	TC:     Traffic Class field, 3 bits + *	S:      Bottom of Stack, 1 bit + *	TTL:    Time to Live, 8 bits + */ + +struct mpls_label { +	__be32 entry; +}; + +#define MPLS_LS_LABEL_MASK      0xFFFFF000 +#define MPLS_LS_LABEL_SHIFT     12 +#define MPLS_LS_TC_MASK         0x00000E00 +#define MPLS_LS_TC_SHIFT        9 +#define MPLS_LS_S_MASK          0x00000100 +#define MPLS_LS_S_SHIFT         8 +#define MPLS_LS_TTL_MASK        0x000000FF +#define MPLS_LS_TTL_SHIFT       0 + +#endif /* _UAPI_MPLS_H */ diff --git a/include/uapi/linux/mqueue.h b/include/uapi/linux/mqueue.h index 8b5a79615fb..d0a2b8e8981 100644 --- a/include/uapi/linux/mqueue.h +++ b/include/uapi/linux/mqueue.h @@ -23,11 +23,11 @@  #define MQ_BYTES_MAX	819200  struct mq_attr { -	long	mq_flags;	/* message queue flags			*/ -	long	mq_maxmsg;	/* maximum number of messages		*/ -	long	mq_msgsize;	/* maximum message size			*/ -	long	mq_curmsgs;	/* number of messages currently queued	*/ -	long	__reserved[4];	/* ignored for input, zeroed for output */ +	__kernel_long_t	mq_flags;	/* message queue flags			*/ +	__kernel_long_t	mq_maxmsg;	/* maximum number of messages		*/ +	__kernel_long_t	mq_msgsize;	/* maximum message size			*/ +	__kernel_long_t	mq_curmsgs;	/* number of messages currently queued	*/ +	__kernel_long_t	__reserved[4];	/* ignored for input, zeroed for output */  };  /* diff --git a/include/uapi/linux/msg.h b/include/uapi/linux/msg.h index 22d95c6854e..a7037552657 100644 --- a/include/uapi/linux/msg.h +++ b/include/uapi/linux/msg.h @@ -34,8 +34,8 @@ struct msqid_ds {  /* message buffer for msgsnd and msgrcv calls */  struct msgbuf { -	long mtype;         /* type of message */ -	char mtext[1];      /* message text */ +	__kernel_long_t mtype;          /* type of message */ +	char mtext[1];                  /* message text */  };  /* buffer for msgctl calls IPC_INFO, MSG_INFO */ diff --git a/include/uapi/linux/neighbour.h b/include/uapi/linux/neighbour.h index f175212420a..4a1d7e96dfe 100644 --- a/include/uapi/linux/neighbour.h +++ b/include/uapi/linux/neighbour.h @@ -24,6 +24,7 @@ enum {  	NDA_PORT,  	NDA_VNI,  	NDA_IFINDEX, +	NDA_MASTER,  	__NDA_MAX  }; @@ -58,7 +59,7 @@ enum {  /* NUD_NOARP & NUD_PERMANENT are pseudostates, they never change     and make no address resolution or NUD. -   NUD_PERMANENT is also cannot be deleted by garbage collectors. +   NUD_PERMANENT also cannot be deleted by garbage collectors.   */  struct nda_cacheinfo { diff --git a/include/uapi/linux/net_tstamp.h b/include/uapi/linux/net_tstamp.h index ae5df122e42..f53879c0f59 100644 --- a/include/uapi/linux/net_tstamp.h +++ b/include/uapi/linux/net_tstamp.h @@ -26,17 +26,17 @@ enum {  };  /** - * struct hwtstamp_config - %SIOCSHWTSTAMP parameter + * struct hwtstamp_config - %SIOCGHWTSTAMP and %SIOCSHWTSTAMP parameter   * - * @flags:	no flags defined right now, must be zero + * @flags:	no flags defined right now, must be zero for %SIOCSHWTSTAMP   * @tx_type:	one of HWTSTAMP_TX_* - * @rx_type:	one of one of HWTSTAMP_FILTER_* + * @rx_filter:	one of HWTSTAMP_FILTER_*   * - * %SIOCSHWTSTAMP expects a &struct ifreq with a ifr_data pointer to - * this structure. dev_ifsioc() in the kernel takes care of the - * translation between 32 bit userspace and 64 bit kernel. The - * structure is intentionally chosen so that it has the same layout on - * 32 and 64 bit systems, don't break this! + * %SIOCGHWTSTAMP and %SIOCSHWTSTAMP expect a &struct ifreq with a + * ifr_data pointer to this structure.  For %SIOCSHWTSTAMP, if the + * driver or hardware does not support the requested @rx_filter value, + * the driver may use a more general filter mode.  In this case + * @rx_filter will indicate the actual mode on return.   */  struct hwtstamp_config {  	int flags; diff --git a/include/uapi/linux/netconf.h b/include/uapi/linux/netconf.h index 64804a798b0..669a1f0b1d9 100644 --- a/include/uapi/linux/netconf.h +++ b/include/uapi/linux/netconf.h @@ -14,6 +14,7 @@ enum {  	NETCONFA_FORWARDING,  	NETCONFA_RP_FILTER,  	NETCONFA_MC_FORWARDING, +	NETCONFA_PROXY_NEIGH,  	__NETCONFA_MAX  };  #define NETCONFA_MAX	(__NETCONFA_MAX - 1) diff --git a/include/uapi/linux/netdevice.h b/include/uapi/linux/netdevice.h index 6b9500bc2d5..fdfbd1c1706 100644 --- a/include/uapi/linux/netdevice.h +++ b/include/uapi/linux/netdevice.h @@ -49,5 +49,11 @@ enum {          IF_PORT_100BASEFX  }; +/* hardware address assignment types */ +#define NET_ADDR_PERM		0	/* address is permanent (default) */ +#define NET_ADDR_RANDOM		1	/* address is generated randomly */ +#define NET_ADDR_STOLEN		2	/* address is stolen from other device */ +#define NET_ADDR_SET		3	/* address is set using +					 * dev_set_mac_address() */  #endif /* _UAPI_LINUX_NETDEVICE_H */ diff --git a/include/uapi/linux/netfilter.h b/include/uapi/linux/netfilter.h index f7dc0ebeeba..ef1b1f88ca1 100644 --- a/include/uapi/linux/netfilter.h +++ b/include/uapi/linux/netfilter.h @@ -53,6 +53,7 @@ enum nf_inet_hooks {  enum {  	NFPROTO_UNSPEC =  0, +	NFPROTO_INET   =  1,  	NFPROTO_IPV4   =  2,  	NFPROTO_ARP    =  3,  	NFPROTO_BRIDGE =  7, diff --git a/include/uapi/linux/netfilter/Kbuild b/include/uapi/linux/netfilter/Kbuild index 174915420d3..1d973d2ba41 100644 --- a/include/uapi/linux/netfilter/Kbuild +++ b/include/uapi/linux/netfilter/Kbuild @@ -5,6 +5,8 @@ header-y += nf_conntrack_ftp.h  header-y += nf_conntrack_sctp.h  header-y += nf_conntrack_tcp.h  header-y += nf_conntrack_tuple_common.h +header-y += nf_tables.h +header-y += nf_tables_compat.h  header-y += nf_nat.h  header-y += nfnetlink.h  header-y += nfnetlink_acct.h @@ -37,6 +39,7 @@ header-y += xt_TEE.h  header-y += xt_TPROXY.h  header-y += xt_addrtype.h  header-y += xt_bpf.h +header-y += xt_cgroup.h  header-y += xt_cluster.h  header-y += xt_comment.h  header-y += xt_connbytes.h @@ -52,8 +55,10 @@ header-y += xt_ecn.h  header-y += xt_esp.h  header-y += xt_hashlimit.h  header-y += xt_helper.h +header-y += xt_ipcomp.h  header-y += xt_iprange.h  header-y += xt_ipvs.h +header-y += xt_l2tp.h  header-y += xt_length.h  header-y += xt_limit.h  header-y += xt_mac.h diff --git a/include/uapi/linux/netfilter/ipset/ip_set.h b/include/uapi/linux/netfilter/ipset/ip_set.h index 8024cdf13b7..78c2f2e7992 100644 --- a/include/uapi/linux/netfilter/ipset/ip_set.h +++ b/include/uapi/linux/netfilter/ipset/ip_set.h @@ -10,12 +10,14 @@  #ifndef _UAPI_IP_SET_H  #define _UAPI_IP_SET_H -  #include <linux/types.h>  /* The protocol version */  #define IPSET_PROTOCOL		6 +/* The maximum permissible comment length we will accept over netlink */ +#define IPSET_MAX_COMMENT_SIZE	255 +  /* The max length of strings including NUL: set and type identifiers */  #define IPSET_MAXNAMELEN	32 @@ -80,6 +82,8 @@ enum {  	IPSET_ATTR_PROTO,	/* 7 */  	IPSET_ATTR_CADT_FLAGS,	/* 8 */  	IPSET_ATTR_CADT_LINENO = IPSET_ATTR_LINENO,	/* 9 */ +	IPSET_ATTR_MARK,	/* 10 */ +	IPSET_ATTR_MARKMASK,	/* 11 */  	/* Reserve empty slots */  	IPSET_ATTR_CADT_MAX = 16,  	/* Create-only specific attributes */ @@ -110,6 +114,7 @@ enum {  	IPSET_ATTR_IFACE,  	IPSET_ATTR_BYTES,  	IPSET_ATTR_PACKETS, +	IPSET_ATTR_COMMENT,  	__IPSET_ATTR_ADT_MAX,  };  #define IPSET_ATTR_ADT_MAX	(__IPSET_ATTR_ADT_MAX - 1) @@ -140,6 +145,8 @@ enum ipset_errno {  	IPSET_ERR_IPADDR_IPV4,  	IPSET_ERR_IPADDR_IPV6,  	IPSET_ERR_COUNTER, +	IPSET_ERR_COMMENT, +	IPSET_ERR_INVALID_MARKMASK,  	/* Type specific error codes */  	IPSET_ERR_TYPE_SPECIFIC = 4352, @@ -176,9 +183,20 @@ enum ipset_cadt_flags {  	IPSET_FLAG_NOMATCH	= (1 << IPSET_FLAG_BIT_NOMATCH),  	IPSET_FLAG_BIT_WITH_COUNTERS = 3,  	IPSET_FLAG_WITH_COUNTERS = (1 << IPSET_FLAG_BIT_WITH_COUNTERS), +	IPSET_FLAG_BIT_WITH_COMMENT = 4, +	IPSET_FLAG_WITH_COMMENT = (1 << IPSET_FLAG_BIT_WITH_COMMENT), +	IPSET_FLAG_BIT_WITH_FORCEADD = 5, +	IPSET_FLAG_WITH_FORCEADD = (1 << IPSET_FLAG_BIT_WITH_FORCEADD),  	IPSET_FLAG_CADT_MAX	= 15,  }; +/* The flag bits which correspond to the non-extension create flags */ +enum ipset_create_flags { +	IPSET_CREATE_FLAG_BIT_FORCEADD = 0, +	IPSET_CREATE_FLAG_FORCEADD = (1 << IPSET_CREATE_FLAG_BIT_FORCEADD), +	IPSET_CREATE_FLAG_BIT_MAX = 7, +}; +  /* Commands with settype-specific attributes */  enum ipset_adt {  	IPSET_ADD, @@ -250,6 +268,14 @@ struct ip_set_req_get_set {  #define IP_SET_OP_GET_BYINDEX	0x00000007	/* Get set name by index */  /* Uses ip_set_req_get_set */ +#define IP_SET_OP_GET_FNAME	0x00000008	/* Get set index and family */ +struct ip_set_req_get_set_family { +	unsigned int op; +	unsigned int version; +	unsigned int family; +	union ip_set_name_index set; +}; +  #define IP_SET_OP_VERSION	0x00000100	/* Ask kernel version */  struct ip_set_req_version {  	unsigned int op; diff --git a/include/uapi/linux/netfilter/nf_conntrack_common.h b/include/uapi/linux/netfilter/nf_conntrack_common.h index 8dd803818eb..319f47128db 100644 --- a/include/uapi/linux/netfilter/nf_conntrack_common.h +++ b/include/uapi/linux/netfilter/nf_conntrack_common.h @@ -25,6 +25,10 @@ enum ip_conntrack_info {  	IP_CT_NUMBER = IP_CT_IS_REPLY * 2 - 1  }; +#define NF_CT_STATE_INVALID_BIT			(1 << 0) +#define NF_CT_STATE_BIT(ctinfo)			(1 << ((ctinfo) % IP_CT_IS_REPLY + 1)) +#define NF_CT_STATE_UNTRACKED_BIT		(1 << (IP_CT_NUMBER + 1)) +  /* Bitset representing status of connection. */  enum ip_conntrack_status {  	/* It's an expected connection: bit 0 set.  This bit never changed */ diff --git a/include/uapi/linux/netfilter/nf_nat.h b/include/uapi/linux/netfilter/nf_nat.h index bf0cc373ffb..1ad3659102b 100644 --- a/include/uapi/linux/netfilter/nf_nat.h +++ b/include/uapi/linux/netfilter/nf_nat.h @@ -4,10 +4,14 @@  #include <linux/netfilter.h>  #include <linux/netfilter/nf_conntrack_tuple_common.h> -#define NF_NAT_RANGE_MAP_IPS		1 -#define NF_NAT_RANGE_PROTO_SPECIFIED	2 -#define NF_NAT_RANGE_PROTO_RANDOM	4 -#define NF_NAT_RANGE_PERSISTENT		8 +#define NF_NAT_RANGE_MAP_IPS			(1 << 0) +#define NF_NAT_RANGE_PROTO_SPECIFIED		(1 << 1) +#define NF_NAT_RANGE_PROTO_RANDOM		(1 << 2) +#define NF_NAT_RANGE_PERSISTENT			(1 << 3) +#define NF_NAT_RANGE_PROTO_RANDOM_FULLY		(1 << 4) + +#define NF_NAT_RANGE_PROTO_RANDOM_ALL		\ +	(NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY)  struct nf_nat_ipv4_range {  	unsigned int			flags; diff --git a/include/uapi/linux/netfilter/nf_tables.h b/include/uapi/linux/netfilter/nf_tables.h new file mode 100644 index 00000000000..2a88f645a5d --- /dev/null +++ b/include/uapi/linux/netfilter/nf_tables.h @@ -0,0 +1,789 @@ +#ifndef _LINUX_NF_TABLES_H +#define _LINUX_NF_TABLES_H + +#define NFT_CHAIN_MAXNAMELEN	32 +#define NFT_USERDATA_MAXLEN	256 + +enum nft_registers { +	NFT_REG_VERDICT, +	NFT_REG_1, +	NFT_REG_2, +	NFT_REG_3, +	NFT_REG_4, +	__NFT_REG_MAX +}; +#define NFT_REG_MAX	(__NFT_REG_MAX - 1) + +/** + * enum nft_verdicts - nf_tables internal verdicts + * + * @NFT_CONTINUE: continue evaluation of the current rule + * @NFT_BREAK: terminate evaluation of the current rule + * @NFT_JUMP: push the current chain on the jump stack and jump to a chain + * @NFT_GOTO: jump to a chain without pushing the current chain on the jump stack + * @NFT_RETURN: return to the topmost chain on the jump stack + * + * The nf_tables verdicts share their numeric space with the netfilter verdicts. + */ +enum nft_verdicts { +	NFT_CONTINUE	= -1, +	NFT_BREAK	= -2, +	NFT_JUMP	= -3, +	NFT_GOTO	= -4, +	NFT_RETURN	= -5, +}; + +/** + * enum nf_tables_msg_types - nf_tables netlink message types + * + * @NFT_MSG_NEWTABLE: create a new table (enum nft_table_attributes) + * @NFT_MSG_GETTABLE: get a table (enum nft_table_attributes) + * @NFT_MSG_DELTABLE: delete a table (enum nft_table_attributes) + * @NFT_MSG_NEWCHAIN: create a new chain (enum nft_chain_attributes) + * @NFT_MSG_GETCHAIN: get a chain (enum nft_chain_attributes) + * @NFT_MSG_DELCHAIN: delete a chain (enum nft_chain_attributes) + * @NFT_MSG_NEWRULE: create a new rule (enum nft_rule_attributes) + * @NFT_MSG_GETRULE: get a rule (enum nft_rule_attributes) + * @NFT_MSG_DELRULE: delete a rule (enum nft_rule_attributes) + * @NFT_MSG_NEWSET: create a new set (enum nft_set_attributes) + * @NFT_MSG_GETSET: get a set (enum nft_set_attributes) + * @NFT_MSG_DELSET: delete a set (enum nft_set_attributes) + * @NFT_MSG_NEWSETELEM: create a new set element (enum nft_set_elem_attributes) + * @NFT_MSG_GETSETELEM: get a set element (enum nft_set_elem_attributes) + * @NFT_MSG_DELSETELEM: delete a set element (enum nft_set_elem_attributes) + */ +enum nf_tables_msg_types { +	NFT_MSG_NEWTABLE, +	NFT_MSG_GETTABLE, +	NFT_MSG_DELTABLE, +	NFT_MSG_NEWCHAIN, +	NFT_MSG_GETCHAIN, +	NFT_MSG_DELCHAIN, +	NFT_MSG_NEWRULE, +	NFT_MSG_GETRULE, +	NFT_MSG_DELRULE, +	NFT_MSG_NEWSET, +	NFT_MSG_GETSET, +	NFT_MSG_DELSET, +	NFT_MSG_NEWSETELEM, +	NFT_MSG_GETSETELEM, +	NFT_MSG_DELSETELEM, +	NFT_MSG_MAX, +}; + +/** + * enum nft_list_attributes - nf_tables generic list netlink attributes + * + * @NFTA_LIST_ELEM: list element (NLA_NESTED) + */ +enum nft_list_attributes { +	NFTA_LIST_UNPEC, +	NFTA_LIST_ELEM, +	__NFTA_LIST_MAX +}; +#define NFTA_LIST_MAX		(__NFTA_LIST_MAX - 1) + +/** + * enum nft_hook_attributes - nf_tables netfilter hook netlink attributes + * + * @NFTA_HOOK_HOOKNUM: netfilter hook number (NLA_U32) + * @NFTA_HOOK_PRIORITY: netfilter hook priority (NLA_U32) + */ +enum nft_hook_attributes { +	NFTA_HOOK_UNSPEC, +	NFTA_HOOK_HOOKNUM, +	NFTA_HOOK_PRIORITY, +	__NFTA_HOOK_MAX +}; +#define NFTA_HOOK_MAX		(__NFTA_HOOK_MAX - 1) + +/** + * enum nft_table_flags - nf_tables table flags + * + * @NFT_TABLE_F_DORMANT: this table is not active + */ +enum nft_table_flags { +	NFT_TABLE_F_DORMANT	= 0x1, +}; + +/** + * enum nft_table_attributes - nf_tables table netlink attributes + * + * @NFTA_TABLE_NAME: name of the table (NLA_STRING) + * @NFTA_TABLE_FLAGS: bitmask of enum nft_table_flags (NLA_U32) + * @NFTA_TABLE_USE: number of chains in this table (NLA_U32) + */ +enum nft_table_attributes { +	NFTA_TABLE_UNSPEC, +	NFTA_TABLE_NAME, +	NFTA_TABLE_FLAGS, +	NFTA_TABLE_USE, +	__NFTA_TABLE_MAX +}; +#define NFTA_TABLE_MAX		(__NFTA_TABLE_MAX - 1) + +/** + * enum nft_chain_attributes - nf_tables chain netlink attributes + * + * @NFTA_CHAIN_TABLE: name of the table containing the chain (NLA_STRING) + * @NFTA_CHAIN_HANDLE: numeric handle of the chain (NLA_U64) + * @NFTA_CHAIN_NAME: name of the chain (NLA_STRING) + * @NFTA_CHAIN_HOOK: hook specification for basechains (NLA_NESTED: nft_hook_attributes) + * @NFTA_CHAIN_POLICY: numeric policy of the chain (NLA_U32) + * @NFTA_CHAIN_USE: number of references to this chain (NLA_U32) + * @NFTA_CHAIN_TYPE: type name of the string (NLA_NUL_STRING) + * @NFTA_CHAIN_COUNTERS: counter specification of the chain (NLA_NESTED: nft_counter_attributes) + */ +enum nft_chain_attributes { +	NFTA_CHAIN_UNSPEC, +	NFTA_CHAIN_TABLE, +	NFTA_CHAIN_HANDLE, +	NFTA_CHAIN_NAME, +	NFTA_CHAIN_HOOK, +	NFTA_CHAIN_POLICY, +	NFTA_CHAIN_USE, +	NFTA_CHAIN_TYPE, +	NFTA_CHAIN_COUNTERS, +	__NFTA_CHAIN_MAX +}; +#define NFTA_CHAIN_MAX		(__NFTA_CHAIN_MAX - 1) + +/** + * enum nft_rule_attributes - nf_tables rule netlink attributes + * + * @NFTA_RULE_TABLE: name of the table containing the rule (NLA_STRING) + * @NFTA_RULE_CHAIN: name of the chain containing the rule (NLA_STRING) + * @NFTA_RULE_HANDLE: numeric handle of the rule (NLA_U64) + * @NFTA_RULE_EXPRESSIONS: list of expressions (NLA_NESTED: nft_expr_attributes) + * @NFTA_RULE_COMPAT: compatibility specifications of the rule (NLA_NESTED: nft_rule_compat_attributes) + * @NFTA_RULE_POSITION: numeric handle of the previous rule (NLA_U64) + * @NFTA_RULE_USERDATA: user data (NLA_BINARY, NFT_USERDATA_MAXLEN) + */ +enum nft_rule_attributes { +	NFTA_RULE_UNSPEC, +	NFTA_RULE_TABLE, +	NFTA_RULE_CHAIN, +	NFTA_RULE_HANDLE, +	NFTA_RULE_EXPRESSIONS, +	NFTA_RULE_COMPAT, +	NFTA_RULE_POSITION, +	NFTA_RULE_USERDATA, +	__NFTA_RULE_MAX +}; +#define NFTA_RULE_MAX		(__NFTA_RULE_MAX - 1) + +/** + * enum nft_rule_compat_flags - nf_tables rule compat flags + * + * @NFT_RULE_COMPAT_F_INV: invert the check result + */ +enum nft_rule_compat_flags { +	NFT_RULE_COMPAT_F_INV	= (1 << 1), +	NFT_RULE_COMPAT_F_MASK	= NFT_RULE_COMPAT_F_INV, +}; + +/** + * enum nft_rule_compat_attributes - nf_tables rule compat attributes + * + * @NFTA_RULE_COMPAT_PROTO: numerice value of handled protocol (NLA_U32) + * @NFTA_RULE_COMPAT_FLAGS: bitmask of enum nft_rule_compat_flags (NLA_U32) + */ +enum nft_rule_compat_attributes { +	NFTA_RULE_COMPAT_UNSPEC, +	NFTA_RULE_COMPAT_PROTO, +	NFTA_RULE_COMPAT_FLAGS, +	__NFTA_RULE_COMPAT_MAX +}; +#define NFTA_RULE_COMPAT_MAX	(__NFTA_RULE_COMPAT_MAX - 1) + +/** + * enum nft_set_flags - nf_tables set flags + * + * @NFT_SET_ANONYMOUS: name allocation, automatic cleanup on unlink + * @NFT_SET_CONSTANT: set contents may not change while bound + * @NFT_SET_INTERVAL: set contains intervals + * @NFT_SET_MAP: set is used as a dictionary + */ +enum nft_set_flags { +	NFT_SET_ANONYMOUS		= 0x1, +	NFT_SET_CONSTANT		= 0x2, +	NFT_SET_INTERVAL		= 0x4, +	NFT_SET_MAP			= 0x8, +}; + +/** + * enum nft_set_policies - set selection policy + * + * @NFT_SET_POL_PERFORMANCE: prefer high performance over low memory use + * @NFT_SET_POL_MEMORY: prefer low memory use over high performance + */ +enum nft_set_policies { +	NFT_SET_POL_PERFORMANCE, +	NFT_SET_POL_MEMORY, +}; + +/** + * enum nft_set_desc_attributes - set element description + * + * @NFTA_SET_DESC_SIZE: number of elements in set (NLA_U32) + */ +enum nft_set_desc_attributes { +	NFTA_SET_DESC_UNSPEC, +	NFTA_SET_DESC_SIZE, +	__NFTA_SET_DESC_MAX +}; +#define NFTA_SET_DESC_MAX	(__NFTA_SET_DESC_MAX - 1) + +/** + * enum nft_set_attributes - nf_tables set netlink attributes + * + * @NFTA_SET_TABLE: table name (NLA_STRING) + * @NFTA_SET_NAME: set name (NLA_STRING) + * @NFTA_SET_FLAGS: bitmask of enum nft_set_flags (NLA_U32) + * @NFTA_SET_KEY_TYPE: key data type, informational purpose only (NLA_U32) + * @NFTA_SET_KEY_LEN: key data length (NLA_U32) + * @NFTA_SET_DATA_TYPE: mapping data type (NLA_U32) + * @NFTA_SET_DATA_LEN: mapping data length (NLA_U32) + * @NFTA_SET_POLICY: selection policy (NLA_U32) + * @NFTA_SET_DESC: set description (NLA_NESTED) + * @NFTA_SET_ID: uniquely identifies a set in a transaction (NLA_U32) + */ +enum nft_set_attributes { +	NFTA_SET_UNSPEC, +	NFTA_SET_TABLE, +	NFTA_SET_NAME, +	NFTA_SET_FLAGS, +	NFTA_SET_KEY_TYPE, +	NFTA_SET_KEY_LEN, +	NFTA_SET_DATA_TYPE, +	NFTA_SET_DATA_LEN, +	NFTA_SET_POLICY, +	NFTA_SET_DESC, +	NFTA_SET_ID, +	__NFTA_SET_MAX +}; +#define NFTA_SET_MAX		(__NFTA_SET_MAX - 1) + +/** + * enum nft_set_elem_flags - nf_tables set element flags + * + * @NFT_SET_ELEM_INTERVAL_END: element ends the previous interval + */ +enum nft_set_elem_flags { +	NFT_SET_ELEM_INTERVAL_END	= 0x1, +}; + +/** + * enum nft_set_elem_attributes - nf_tables set element netlink attributes + * + * @NFTA_SET_ELEM_KEY: key value (NLA_NESTED: nft_data) + * @NFTA_SET_ELEM_DATA: data value of mapping (NLA_NESTED: nft_data_attributes) + * @NFTA_SET_ELEM_FLAGS: bitmask of nft_set_elem_flags (NLA_U32) + */ +enum nft_set_elem_attributes { +	NFTA_SET_ELEM_UNSPEC, +	NFTA_SET_ELEM_KEY, +	NFTA_SET_ELEM_DATA, +	NFTA_SET_ELEM_FLAGS, +	__NFTA_SET_ELEM_MAX +}; +#define NFTA_SET_ELEM_MAX	(__NFTA_SET_ELEM_MAX - 1) + +/** + * enum nft_set_elem_list_attributes - nf_tables set element list netlink attributes + * + * @NFTA_SET_ELEM_LIST_TABLE: table of the set to be changed (NLA_STRING) + * @NFTA_SET_ELEM_LIST_SET: name of the set to be changed (NLA_STRING) + * @NFTA_SET_ELEM_LIST_ELEMENTS: list of set elements (NLA_NESTED: nft_set_elem_attributes) + * @NFTA_SET_ELEM_LIST_SET_ID: uniquely identifies a set in a transaction (NLA_U32) + */ +enum nft_set_elem_list_attributes { +	NFTA_SET_ELEM_LIST_UNSPEC, +	NFTA_SET_ELEM_LIST_TABLE, +	NFTA_SET_ELEM_LIST_SET, +	NFTA_SET_ELEM_LIST_ELEMENTS, +	NFTA_SET_ELEM_LIST_SET_ID, +	__NFTA_SET_ELEM_LIST_MAX +}; +#define NFTA_SET_ELEM_LIST_MAX	(__NFTA_SET_ELEM_LIST_MAX - 1) + +/** + * enum nft_data_types - nf_tables data types + * + * @NFT_DATA_VALUE: generic data + * @NFT_DATA_VERDICT: netfilter verdict + * + * The type of data is usually determined by the kernel directly and is not + * explicitly specified by userspace. The only difference are sets, where + * userspace specifies the key and mapping data types. + * + * The values 0xffffff00-0xffffffff are reserved for internally used types. + * The remaining range can be freely used by userspace to encode types, all + * values are equivalent to NFT_DATA_VALUE. + */ +enum nft_data_types { +	NFT_DATA_VALUE, +	NFT_DATA_VERDICT	= 0xffffff00U, +}; + +#define NFT_DATA_RESERVED_MASK	0xffffff00U + +/** + * enum nft_data_attributes - nf_tables data netlink attributes + * + * @NFTA_DATA_VALUE: generic data (NLA_BINARY) + * @NFTA_DATA_VERDICT: nf_tables verdict (NLA_NESTED: nft_verdict_attributes) + */ +enum nft_data_attributes { +	NFTA_DATA_UNSPEC, +	NFTA_DATA_VALUE, +	NFTA_DATA_VERDICT, +	__NFTA_DATA_MAX +}; +#define NFTA_DATA_MAX		(__NFTA_DATA_MAX - 1) + +/** + * enum nft_verdict_attributes - nf_tables verdict netlink attributes + * + * @NFTA_VERDICT_CODE: nf_tables verdict (NLA_U32: enum nft_verdicts) + * @NFTA_VERDICT_CHAIN: jump target chain name (NLA_STRING) + */ +enum nft_verdict_attributes { +	NFTA_VERDICT_UNSPEC, +	NFTA_VERDICT_CODE, +	NFTA_VERDICT_CHAIN, +	__NFTA_VERDICT_MAX +}; +#define NFTA_VERDICT_MAX	(__NFTA_VERDICT_MAX - 1) + +/** + * enum nft_expr_attributes - nf_tables expression netlink attributes + * + * @NFTA_EXPR_NAME: name of the expression type (NLA_STRING) + * @NFTA_EXPR_DATA: type specific data (NLA_NESTED) + */ +enum nft_expr_attributes { +	NFTA_EXPR_UNSPEC, +	NFTA_EXPR_NAME, +	NFTA_EXPR_DATA, +	__NFTA_EXPR_MAX +}; +#define NFTA_EXPR_MAX		(__NFTA_EXPR_MAX - 1) + +/** + * enum nft_immediate_attributes - nf_tables immediate expression netlink attributes + * + * @NFTA_IMMEDIATE_DREG: destination register to load data into (NLA_U32) + * @NFTA_IMMEDIATE_DATA: data to load (NLA_NESTED: nft_data_attributes) + */ +enum nft_immediate_attributes { +	NFTA_IMMEDIATE_UNSPEC, +	NFTA_IMMEDIATE_DREG, +	NFTA_IMMEDIATE_DATA, +	__NFTA_IMMEDIATE_MAX +}; +#define NFTA_IMMEDIATE_MAX	(__NFTA_IMMEDIATE_MAX - 1) + +/** + * enum nft_bitwise_attributes - nf_tables bitwise expression netlink attributes + * + * @NFTA_BITWISE_SREG: source register (NLA_U32: nft_registers) + * @NFTA_BITWISE_DREG: destination register (NLA_U32: nft_registers) + * @NFTA_BITWISE_LEN: length of operands (NLA_U32) + * @NFTA_BITWISE_MASK: mask value (NLA_NESTED: nft_data_attributes) + * @NFTA_BITWISE_XOR: xor value (NLA_NESTED: nft_data_attributes) + * + * The bitwise expression performs the following operation: + * + * dreg = (sreg & mask) ^ xor + * + * which allow to express all bitwise operations: + * + * 		mask	xor + * NOT:		1	1 + * OR:		0	x + * XOR:		1	x + * AND:		x	0 + */ +enum nft_bitwise_attributes { +	NFTA_BITWISE_UNSPEC, +	NFTA_BITWISE_SREG, +	NFTA_BITWISE_DREG, +	NFTA_BITWISE_LEN, +	NFTA_BITWISE_MASK, +	NFTA_BITWISE_XOR, +	__NFTA_BITWISE_MAX +}; +#define NFTA_BITWISE_MAX	(__NFTA_BITWISE_MAX - 1) + +/** + * enum nft_byteorder_ops - nf_tables byteorder operators + * + * @NFT_BYTEORDER_NTOH: network to host operator + * @NFT_BYTEORDER_HTON: host to network opertaor + */ +enum nft_byteorder_ops { +	NFT_BYTEORDER_NTOH, +	NFT_BYTEORDER_HTON, +}; + +/** + * enum nft_byteorder_attributes - nf_tables byteorder expression netlink attributes + * + * @NFTA_BYTEORDER_SREG: source register (NLA_U32: nft_registers) + * @NFTA_BYTEORDER_DREG: destination register (NLA_U32: nft_registers) + * @NFTA_BYTEORDER_OP: operator (NLA_U32: enum nft_byteorder_ops) + * @NFTA_BYTEORDER_LEN: length of the data (NLA_U32) + * @NFTA_BYTEORDER_SIZE: data size in bytes (NLA_U32: 2 or 4) + */ +enum nft_byteorder_attributes { +	NFTA_BYTEORDER_UNSPEC, +	NFTA_BYTEORDER_SREG, +	NFTA_BYTEORDER_DREG, +	NFTA_BYTEORDER_OP, +	NFTA_BYTEORDER_LEN, +	NFTA_BYTEORDER_SIZE, +	__NFTA_BYTEORDER_MAX +}; +#define NFTA_BYTEORDER_MAX	(__NFTA_BYTEORDER_MAX - 1) + +/** + * enum nft_cmp_ops - nf_tables relational operator + * + * @NFT_CMP_EQ: equal + * @NFT_CMP_NEQ: not equal + * @NFT_CMP_LT: less than + * @NFT_CMP_LTE: less than or equal to + * @NFT_CMP_GT: greater than + * @NFT_CMP_GTE: greater than or equal to + */ +enum nft_cmp_ops { +	NFT_CMP_EQ, +	NFT_CMP_NEQ, +	NFT_CMP_LT, +	NFT_CMP_LTE, +	NFT_CMP_GT, +	NFT_CMP_GTE, +}; + +/** + * enum nft_cmp_attributes - nf_tables cmp expression netlink attributes + * + * @NFTA_CMP_SREG: source register of data to compare (NLA_U32: nft_registers) + * @NFTA_CMP_OP: cmp operation (NLA_U32: nft_cmp_ops) + * @NFTA_CMP_DATA: data to compare against (NLA_NESTED: nft_data_attributes) + */ +enum nft_cmp_attributes { +	NFTA_CMP_UNSPEC, +	NFTA_CMP_SREG, +	NFTA_CMP_OP, +	NFTA_CMP_DATA, +	__NFTA_CMP_MAX +}; +#define NFTA_CMP_MAX		(__NFTA_CMP_MAX - 1) + +/** + * enum nft_lookup_attributes - nf_tables set lookup expression netlink attributes + * + * @NFTA_LOOKUP_SET: name of the set where to look for (NLA_STRING) + * @NFTA_LOOKUP_SREG: source register of the data to look for (NLA_U32: nft_registers) + * @NFTA_LOOKUP_DREG: destination register (NLA_U32: nft_registers) + * @NFTA_LOOKUP_SET_ID: uniquely identifies a set in a transaction (NLA_U32) + */ +enum nft_lookup_attributes { +	NFTA_LOOKUP_UNSPEC, +	NFTA_LOOKUP_SET, +	NFTA_LOOKUP_SREG, +	NFTA_LOOKUP_DREG, +	NFTA_LOOKUP_SET_ID, +	__NFTA_LOOKUP_MAX +}; +#define NFTA_LOOKUP_MAX		(__NFTA_LOOKUP_MAX - 1) + +/** + * enum nft_payload_bases - nf_tables payload expression offset bases + * + * @NFT_PAYLOAD_LL_HEADER: link layer header + * @NFT_PAYLOAD_NETWORK_HEADER: network header + * @NFT_PAYLOAD_TRANSPORT_HEADER: transport header + */ +enum nft_payload_bases { +	NFT_PAYLOAD_LL_HEADER, +	NFT_PAYLOAD_NETWORK_HEADER, +	NFT_PAYLOAD_TRANSPORT_HEADER, +}; + +/** + * enum nft_payload_attributes - nf_tables payload expression netlink attributes + * + * @NFTA_PAYLOAD_DREG: destination register to load data into (NLA_U32: nft_registers) + * @NFTA_PAYLOAD_BASE: payload base (NLA_U32: nft_payload_bases) + * @NFTA_PAYLOAD_OFFSET: payload offset relative to base (NLA_U32) + * @NFTA_PAYLOAD_LEN: payload length (NLA_U32) + */ +enum nft_payload_attributes { +	NFTA_PAYLOAD_UNSPEC, +	NFTA_PAYLOAD_DREG, +	NFTA_PAYLOAD_BASE, +	NFTA_PAYLOAD_OFFSET, +	NFTA_PAYLOAD_LEN, +	__NFTA_PAYLOAD_MAX +}; +#define NFTA_PAYLOAD_MAX	(__NFTA_PAYLOAD_MAX - 1) + +/** + * enum nft_exthdr_attributes - nf_tables IPv6 extension header expression netlink attributes + * + * @NFTA_EXTHDR_DREG: destination register (NLA_U32: nft_registers) + * @NFTA_EXTHDR_TYPE: extension header type (NLA_U8) + * @NFTA_EXTHDR_OFFSET: extension header offset (NLA_U32) + * @NFTA_EXTHDR_LEN: extension header length (NLA_U32) + */ +enum nft_exthdr_attributes { +	NFTA_EXTHDR_UNSPEC, +	NFTA_EXTHDR_DREG, +	NFTA_EXTHDR_TYPE, +	NFTA_EXTHDR_OFFSET, +	NFTA_EXTHDR_LEN, +	__NFTA_EXTHDR_MAX +}; +#define NFTA_EXTHDR_MAX		(__NFTA_EXTHDR_MAX - 1) + +/** + * enum nft_meta_keys - nf_tables meta expression keys + * + * @NFT_META_LEN: packet length (skb->len) + * @NFT_META_PROTOCOL: packet ethertype protocol (skb->protocol), invalid in OUTPUT + * @NFT_META_PRIORITY: packet priority (skb->priority) + * @NFT_META_MARK: packet mark (skb->mark) + * @NFT_META_IIF: packet input interface index (dev->ifindex) + * @NFT_META_OIF: packet output interface index (dev->ifindex) + * @NFT_META_IIFNAME: packet input interface name (dev->name) + * @NFT_META_OIFNAME: packet output interface name (dev->name) + * @NFT_META_IIFTYPE: packet input interface type (dev->type) + * @NFT_META_OIFTYPE: packet output interface type (dev->type) + * @NFT_META_SKUID: originating socket UID (fsuid) + * @NFT_META_SKGID: originating socket GID (fsgid) + * @NFT_META_NFTRACE: packet nftrace bit + * @NFT_META_RTCLASSID: realm value of packet's route (skb->dst->tclassid) + * @NFT_META_SECMARK: packet secmark (skb->secmark) + * @NFT_META_NFPROTO: netfilter protocol + * @NFT_META_L4PROTO: layer 4 protocol number + * @NFT_META_BRI_IIFNAME: packet input bridge interface name + * @NFT_META_BRI_OIFNAME: packet output bridge interface name + */ +enum nft_meta_keys { +	NFT_META_LEN, +	NFT_META_PROTOCOL, +	NFT_META_PRIORITY, +	NFT_META_MARK, +	NFT_META_IIF, +	NFT_META_OIF, +	NFT_META_IIFNAME, +	NFT_META_OIFNAME, +	NFT_META_IIFTYPE, +	NFT_META_OIFTYPE, +	NFT_META_SKUID, +	NFT_META_SKGID, +	NFT_META_NFTRACE, +	NFT_META_RTCLASSID, +	NFT_META_SECMARK, +	NFT_META_NFPROTO, +	NFT_META_L4PROTO, +	NFT_META_BRI_IIFNAME, +	NFT_META_BRI_OIFNAME, +}; + +/** + * enum nft_meta_attributes - nf_tables meta expression netlink attributes + * + * @NFTA_META_DREG: destination register (NLA_U32) + * @NFTA_META_KEY: meta data item to load (NLA_U32: nft_meta_keys) + * @NFTA_META_SREG: source register (NLA_U32) + */ +enum nft_meta_attributes { +	NFTA_META_UNSPEC, +	NFTA_META_DREG, +	NFTA_META_KEY, +	NFTA_META_SREG, +	__NFTA_META_MAX +}; +#define NFTA_META_MAX		(__NFTA_META_MAX - 1) + +/** + * enum nft_ct_keys - nf_tables ct expression keys + * + * @NFT_CT_STATE: conntrack state (bitmask of enum ip_conntrack_info) + * @NFT_CT_DIRECTION: conntrack direction (enum ip_conntrack_dir) + * @NFT_CT_STATUS: conntrack status (bitmask of enum ip_conntrack_status) + * @NFT_CT_MARK: conntrack mark value + * @NFT_CT_SECMARK: conntrack secmark value + * @NFT_CT_EXPIRATION: relative conntrack expiration time in ms + * @NFT_CT_HELPER: connection tracking helper assigned to conntrack + * @NFT_CT_L3PROTOCOL: conntrack layer 3 protocol + * @NFT_CT_SRC: conntrack layer 3 protocol source (IPv4/IPv6 address) + * @NFT_CT_DST: conntrack layer 3 protocol destination (IPv4/IPv6 address) + * @NFT_CT_PROTOCOL: conntrack layer 4 protocol + * @NFT_CT_PROTO_SRC: conntrack layer 4 protocol source + * @NFT_CT_PROTO_DST: conntrack layer 4 protocol destination + */ +enum nft_ct_keys { +	NFT_CT_STATE, +	NFT_CT_DIRECTION, +	NFT_CT_STATUS, +	NFT_CT_MARK, +	NFT_CT_SECMARK, +	NFT_CT_EXPIRATION, +	NFT_CT_HELPER, +	NFT_CT_L3PROTOCOL, +	NFT_CT_SRC, +	NFT_CT_DST, +	NFT_CT_PROTOCOL, +	NFT_CT_PROTO_SRC, +	NFT_CT_PROTO_DST, +	NFT_CT_LABELS, +}; + +/** + * enum nft_ct_attributes - nf_tables ct expression netlink attributes + * + * @NFTA_CT_DREG: destination register (NLA_U32) + * @NFTA_CT_KEY: conntrack data item to load (NLA_U32: nft_ct_keys) + * @NFTA_CT_DIRECTION: direction in case of directional keys (NLA_U8) + * @NFTA_CT_SREG: source register (NLA_U32) + */ +enum nft_ct_attributes { +	NFTA_CT_UNSPEC, +	NFTA_CT_DREG, +	NFTA_CT_KEY, +	NFTA_CT_DIRECTION, +	NFTA_CT_SREG, +	__NFTA_CT_MAX +}; +#define NFTA_CT_MAX		(__NFTA_CT_MAX - 1) + +/** + * enum nft_limit_attributes - nf_tables limit expression netlink attributes + * + * @NFTA_LIMIT_RATE: refill rate (NLA_U64) + * @NFTA_LIMIT_UNIT: refill unit (NLA_U64) + */ +enum nft_limit_attributes { +	NFTA_LIMIT_UNSPEC, +	NFTA_LIMIT_RATE, +	NFTA_LIMIT_UNIT, +	__NFTA_LIMIT_MAX +}; +#define NFTA_LIMIT_MAX		(__NFTA_LIMIT_MAX - 1) + +/** + * enum nft_counter_attributes - nf_tables counter expression netlink attributes + * + * @NFTA_COUNTER_BYTES: number of bytes (NLA_U64) + * @NFTA_COUNTER_PACKETS: number of packets (NLA_U64) + */ +enum nft_counter_attributes { +	NFTA_COUNTER_UNSPEC, +	NFTA_COUNTER_BYTES, +	NFTA_COUNTER_PACKETS, +	__NFTA_COUNTER_MAX +}; +#define NFTA_COUNTER_MAX	(__NFTA_COUNTER_MAX - 1) + +/** + * enum nft_log_attributes - nf_tables log expression netlink attributes + * + * @NFTA_LOG_GROUP: netlink group to send messages to (NLA_U32) + * @NFTA_LOG_PREFIX: prefix to prepend to log messages (NLA_STRING) + * @NFTA_LOG_SNAPLEN: length of payload to include in netlink message (NLA_U32) + * @NFTA_LOG_QTHRESHOLD: queue threshold (NLA_U32) + */ +enum nft_log_attributes { +	NFTA_LOG_UNSPEC, +	NFTA_LOG_GROUP, +	NFTA_LOG_PREFIX, +	NFTA_LOG_SNAPLEN, +	NFTA_LOG_QTHRESHOLD, +	__NFTA_LOG_MAX +}; +#define NFTA_LOG_MAX		(__NFTA_LOG_MAX - 1) + +/** + * enum nft_queue_attributes - nf_tables queue expression netlink attributes + * + * @NFTA_QUEUE_NUM: netlink queue to send messages to (NLA_U16) + * @NFTA_QUEUE_TOTAL: number of queues to load balance packets on (NLA_U16) + * @NFTA_QUEUE_FLAGS: various flags (NLA_U16) + */ +enum nft_queue_attributes { +	NFTA_QUEUE_UNSPEC, +	NFTA_QUEUE_NUM, +	NFTA_QUEUE_TOTAL, +	NFTA_QUEUE_FLAGS, +	__NFTA_QUEUE_MAX +}; +#define NFTA_QUEUE_MAX		(__NFTA_QUEUE_MAX - 1) + +#define NFT_QUEUE_FLAG_BYPASS		0x01 /* for compatibility with v2 */ +#define NFT_QUEUE_FLAG_CPU_FANOUT	0x02 /* use current CPU (no hashing) */ +#define NFT_QUEUE_FLAG_MASK		0x03 + +/** + * enum nft_reject_types - nf_tables reject expression reject types + * + * @NFT_REJECT_ICMP_UNREACH: reject using ICMP unreachable + * @NFT_REJECT_TCP_RST: reject using TCP RST + */ +enum nft_reject_types { +	NFT_REJECT_ICMP_UNREACH, +	NFT_REJECT_TCP_RST, +}; + +/** + * enum nft_reject_attributes - nf_tables reject expression netlink attributes + * + * @NFTA_REJECT_TYPE: packet type to use (NLA_U32: nft_reject_types) + * @NFTA_REJECT_ICMP_CODE: ICMP code to use (NLA_U8) + */ +enum nft_reject_attributes { +	NFTA_REJECT_UNSPEC, +	NFTA_REJECT_TYPE, +	NFTA_REJECT_ICMP_CODE, +	__NFTA_REJECT_MAX +}; +#define NFTA_REJECT_MAX		(__NFTA_REJECT_MAX - 1) + +/** + * enum nft_nat_types - nf_tables nat expression NAT types + * + * @NFT_NAT_SNAT: source NAT + * @NFT_NAT_DNAT: destination NAT + */ +enum nft_nat_types { +	NFT_NAT_SNAT, +	NFT_NAT_DNAT, +}; + +/** + * enum nft_nat_attributes - nf_tables nat expression netlink attributes + * + * @NFTA_NAT_TYPE: NAT type (NLA_U32: nft_nat_types) + * @NFTA_NAT_FAMILY: NAT family (NLA_U32) + * @NFTA_NAT_REG_ADDR_MIN: source register of address range start (NLA_U32: nft_registers) + * @NFTA_NAT_REG_ADDR_MAX: source register of address range end (NLA_U32: nft_registers) + * @NFTA_NAT_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers) + * @NFTA_NAT_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers) + */ +enum nft_nat_attributes { +	NFTA_NAT_UNSPEC, +	NFTA_NAT_TYPE, +	NFTA_NAT_FAMILY, +	NFTA_NAT_REG_ADDR_MIN, +	NFTA_NAT_REG_ADDR_MAX, +	NFTA_NAT_REG_PROTO_MIN, +	NFTA_NAT_REG_PROTO_MAX, +	__NFTA_NAT_MAX +}; +#define NFTA_NAT_MAX		(__NFTA_NAT_MAX - 1) + +#endif /* _LINUX_NF_TABLES_H */ diff --git a/include/uapi/linux/netfilter/nf_tables_compat.h b/include/uapi/linux/netfilter/nf_tables_compat.h new file mode 100644 index 00000000000..8310f5f7655 --- /dev/null +++ b/include/uapi/linux/netfilter/nf_tables_compat.h @@ -0,0 +1,38 @@ +#ifndef _NFT_COMPAT_NFNETLINK_H_ +#define _NFT_COMPAT_NFNETLINK_H_ + +enum nft_target_attributes { +	NFTA_TARGET_UNSPEC, +	NFTA_TARGET_NAME, +	NFTA_TARGET_REV, +	NFTA_TARGET_INFO, +	__NFTA_TARGET_MAX +}; +#define NFTA_TARGET_MAX		(__NFTA_TARGET_MAX - 1) + +enum nft_match_attributes { +	NFTA_MATCH_UNSPEC, +	NFTA_MATCH_NAME, +	NFTA_MATCH_REV, +	NFTA_MATCH_INFO, +	__NFTA_MATCH_MAX +}; +#define NFTA_MATCH_MAX		(__NFTA_MATCH_MAX - 1) + +#define NFT_COMPAT_NAME_MAX	32 + +enum { +	NFNL_MSG_COMPAT_GET, +	NFNL_MSG_COMPAT_MAX +}; + +enum { +	NFTA_COMPAT_UNSPEC = 0, +	NFTA_COMPAT_NAME, +	NFTA_COMPAT_REV, +	NFTA_COMPAT_TYPE, +	__NFTA_COMPAT_MAX, +}; +#define NFTA_COMPAT_MAX (__NFTA_COMPAT_MAX - 1) + +#endif diff --git a/include/uapi/linux/netfilter/nfnetlink.h b/include/uapi/linux/netfilter/nfnetlink.h index 4a4efafad5f..354a7e5e50f 100644 --- a/include/uapi/linux/netfilter/nfnetlink.h +++ b/include/uapi/linux/netfilter/nfnetlink.h @@ -18,6 +18,10 @@ enum nfnetlink_groups {  #define NFNLGRP_CONNTRACK_EXP_UPDATE	NFNLGRP_CONNTRACK_EXP_UPDATE  	NFNLGRP_CONNTRACK_EXP_DESTROY,  #define NFNLGRP_CONNTRACK_EXP_DESTROY	NFNLGRP_CONNTRACK_EXP_DESTROY +	NFNLGRP_NFTABLES, +#define NFNLGRP_NFTABLES                NFNLGRP_NFTABLES +	NFNLGRP_ACCT_QUOTA, +#define NFNLGRP_ACCT_QUOTA		NFNLGRP_ACCT_QUOTA  	__NFNLGRP_MAX,  };  #define NFNLGRP_MAX	(__NFNLGRP_MAX - 1) @@ -51,6 +55,12 @@ struct nfgenmsg {  #define NFNL_SUBSYS_ACCT		7  #define NFNL_SUBSYS_CTNETLINK_TIMEOUT	8  #define NFNL_SUBSYS_CTHELPER		9 -#define NFNL_SUBSYS_COUNT		10 +#define NFNL_SUBSYS_NFTABLES		10 +#define NFNL_SUBSYS_NFT_COMPAT		11 +#define NFNL_SUBSYS_COUNT		12 + +/* Reserved control nfnetlink messages */ +#define NFNL_MSG_BATCH_BEGIN		NLMSG_MIN_TYPE +#define NFNL_MSG_BATCH_END		NLMSG_MIN_TYPE+1  #endif /* _UAPI_NFNETLINK_H */ diff --git a/include/uapi/linux/netfilter/nfnetlink_acct.h b/include/uapi/linux/netfilter/nfnetlink_acct.h index c7b6269e760..51404ec1902 100644 --- a/include/uapi/linux/netfilter/nfnetlink_acct.h +++ b/include/uapi/linux/netfilter/nfnetlink_acct.h @@ -10,15 +10,24 @@ enum nfnl_acct_msg_types {  	NFNL_MSG_ACCT_GET,  	NFNL_MSG_ACCT_GET_CTRZERO,  	NFNL_MSG_ACCT_DEL, +	NFNL_MSG_ACCT_OVERQUOTA,  	NFNL_MSG_ACCT_MAX  }; +enum nfnl_acct_flags { +	NFACCT_F_QUOTA_PKTS	= (1 << 0), +	NFACCT_F_QUOTA_BYTES	= (1 << 1), +	NFACCT_F_OVERQUOTA	= (1 << 2), /* can't be set from userspace */ +}; +  enum nfnl_acct_type {  	NFACCT_UNSPEC,  	NFACCT_NAME,  	NFACCT_PKTS,  	NFACCT_BYTES,  	NFACCT_USE, +	NFACCT_FLAGS, +	NFACCT_QUOTA,  	__NFACCT_MAX  };  #define NFACCT_MAX (__NFACCT_MAX - 1) diff --git a/include/uapi/linux/netfilter/nfnetlink_cttimeout.h b/include/uapi/linux/netfilter/nfnetlink_cttimeout.h index a2810a7c5e3..1ab0b97b3a1 100644 --- a/include/uapi/linux/netfilter/nfnetlink_cttimeout.h +++ b/include/uapi/linux/netfilter/nfnetlink_cttimeout.h @@ -6,6 +6,8 @@ enum ctnl_timeout_msg_types {  	IPCTNL_MSG_TIMEOUT_NEW,  	IPCTNL_MSG_TIMEOUT_GET,  	IPCTNL_MSG_TIMEOUT_DELETE, +	IPCTNL_MSG_TIMEOUT_DEFAULT_SET, +	IPCTNL_MSG_TIMEOUT_DEFAULT_GET,  	IPCTNL_MSG_TIMEOUT_MAX  }; diff --git a/include/uapi/linux/netfilter/nfnetlink_queue.h b/include/uapi/linux/netfilter/nfnetlink_queue.h index 0132bad79de..8dd819e2b5f 100644 --- a/include/uapi/linux/netfilter/nfnetlink_queue.h +++ b/include/uapi/linux/netfilter/nfnetlink_queue.h @@ -47,6 +47,8 @@ enum nfqnl_attr_type {  	NFQA_CAP_LEN,			/* __u32 length of captured packet */  	NFQA_SKB_INFO,			/* __u32 skb meta information */  	NFQA_EXP,			/* nf_conntrack_netlink.h */ +	NFQA_UID,			/* __u32 sk uid */ +	NFQA_GID,			/* __u32 sk gid */  	__NFQA_MAX  }; @@ -99,7 +101,8 @@ enum nfqnl_attr_config {  #define NFQA_CFG_F_FAIL_OPEN			(1 << 0)  #define NFQA_CFG_F_CONNTRACK			(1 << 1)  #define NFQA_CFG_F_GSO				(1 << 2) -#define NFQA_CFG_F_MAX				(1 << 3) +#define NFQA_CFG_F_UID_GID			(1 << 3) +#define NFQA_CFG_F_MAX				(1 << 4)  /* flags for NFQA_SKB_INFO */  /* packet appears to have wrong checksums, but they are ok */ diff --git a/include/uapi/linux/netfilter/xt_cgroup.h b/include/uapi/linux/netfilter/xt_cgroup.h new file mode 100644 index 00000000000..43acb7e175f --- /dev/null +++ b/include/uapi/linux/netfilter/xt_cgroup.h @@ -0,0 +1,11 @@ +#ifndef _UAPI_XT_CGROUP_H +#define _UAPI_XT_CGROUP_H + +#include <linux/types.h> + +struct xt_cgroup_info { +	__u32 id; +	__u32 invert; +}; + +#endif /* _UAPI_XT_CGROUP_H */ diff --git a/include/uapi/linux/netfilter/xt_ipcomp.h b/include/uapi/linux/netfilter/xt_ipcomp.h new file mode 100644 index 00000000000..45c7e40eb8e --- /dev/null +++ b/include/uapi/linux/netfilter/xt_ipcomp.h @@ -0,0 +1,16 @@ +#ifndef _XT_IPCOMP_H +#define _XT_IPCOMP_H + +#include <linux/types.h> + +struct xt_ipcomp { +	__u32 spis[2];	/* Security Parameter Index */ +	__u8 invflags;	/* Inverse flags */ +	__u8 hdrres;	/* Test of the Reserved Filed */ +}; + +/* Values for "invflags" field in struct xt_ipcomp. */ +#define XT_IPCOMP_INV_SPI	0x01	/* Invert the sense of spi. */ +#define XT_IPCOMP_INV_MASK	0x01	/* All possible flags. */ + +#endif /*_XT_IPCOMP_H*/ diff --git a/include/uapi/linux/netfilter/xt_l2tp.h b/include/uapi/linux/netfilter/xt_l2tp.h new file mode 100644 index 00000000000..7dccfa0acbf --- /dev/null +++ b/include/uapi/linux/netfilter/xt_l2tp.h @@ -0,0 +1,27 @@ +#ifndef _LINUX_NETFILTER_XT_L2TP_H +#define _LINUX_NETFILTER_XT_L2TP_H + +#include <linux/types.h> + +enum xt_l2tp_type { +	XT_L2TP_TYPE_CONTROL, +	XT_L2TP_TYPE_DATA, +}; + +/* L2TP matching stuff */ +struct xt_l2tp_info { +	__u32 tid;			/* tunnel id */ +	__u32 sid;			/* session id */ +	__u8 version;			/* L2TP protocol version */ +	__u8 type;			/* L2TP packet type */ +	__u8 flags;			/* which fields to match */ +}; + +enum { +	XT_L2TP_TID	= (1 << 0),	/* match L2TP tunnel id */ +	XT_L2TP_SID	= (1 << 1),	/* match L2TP session id */ +	XT_L2TP_VERSION	= (1 << 2),	/* match L2TP protocol version */ +	XT_L2TP_TYPE	= (1 << 3),	/* match L2TP packet type */ +}; + +#endif /* _LINUX_NETFILTER_XT_L2TP_H */ diff --git a/include/uapi/linux/netfilter/xt_osf.h b/include/uapi/linux/netfilter/xt_osf.h index 18afa495f97..5d66caeba3e 100644 --- a/include/uapi/linux/netfilter/xt_osf.h +++ b/include/uapi/linux/netfilter/xt_osf.h @@ -13,8 +13,7 @@   * GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * along with this program; if not, see <http://www.gnu.org/licenses/>.   */  #ifndef _XT_OSF_H diff --git a/include/uapi/linux/netlink_diag.h b/include/uapi/linux/netlink_diag.h index 4e31db4eea4..f2159d30d1f 100644 --- a/include/uapi/linux/netlink_diag.h +++ b/include/uapi/linux/netlink_diag.h @@ -33,6 +33,7 @@ struct netlink_diag_ring {  };  enum { +	/* NETLINK_DIAG_NONE, standard nl API requires this attribute!  */  	NETLINK_DIAG_MEMINFO,  	NETLINK_DIAG_GROUPS,  	NETLINK_DIAG_RX_RING, diff --git a/include/uapi/linux/nfc.h b/include/uapi/linux/nfc.h index 29bed72a4ac..9b19b446192 100644 --- a/include/uapi/linux/nfc.h +++ b/include/uapi/linux/nfc.h @@ -85,6 +85,7 @@   *	a specific SE notifies us about the end of a transaction. The parameter   *	for this event is the application ID (AID).   * @NFC_CMD_GET_SE: Dump all discovered secure elements from an NFC controller. + * @NFC_CMD_SE_IO: Send/Receive APDUs to/from the selected secure element.   */  enum nfc_commands {  	NFC_CMD_UNSPEC, @@ -114,6 +115,7 @@ enum nfc_commands {  	NFC_EVENT_SE_CONNECTIVITY,  	NFC_EVENT_SE_TRANSACTION,  	NFC_CMD_GET_SE, +	NFC_CMD_SE_IO,  /* private: internal use only */  	__NFC_CMD_AFTER_LAST  }; @@ -147,6 +149,9 @@ enum nfc_commands {   * @NFC_ATTR_SE_INDEX: Secure element index   * @NFC_ATTR_SE_TYPE: Secure element type (UICC or EMBEDDED)   * @NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS: Firmware download operation status + * @NFC_ATTR_APDU: Secure element APDU + * @NFC_ATTR_TARGET_ISO15693_DSFID: ISO 15693 Data Storage Format Identifier + * @NFC_ATTR_TARGET_ISO15693_UID: ISO 15693 Unique Identifier   */  enum nfc_attrs {  	NFC_ATTR_UNSPEC, @@ -174,6 +179,9 @@ enum nfc_attrs {  	NFC_ATTR_SE_TYPE,  	NFC_ATTR_SE_AID,  	NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS, +	NFC_ATTR_SE_APDU, +	NFC_ATTR_TARGET_ISO15693_DSFID, +	NFC_ATTR_TARGET_ISO15693_UID,  /* private: internal use only */  	__NFC_ATTR_AFTER_LAST  }; @@ -196,6 +204,7 @@ enum nfc_sdp_attr {  #define NFC_SENSF_RES_MAXSIZE 18  #define NFC_GB_MAXSIZE        48  #define NFC_FIRMWARE_NAME_MAXSIZE 32 +#define NFC_ISO15693_UID_MAXSIZE 8  /* NFC protocols */  #define NFC_PROTO_JEWEL		1 @@ -204,8 +213,9 @@ enum nfc_sdp_attr {  #define NFC_PROTO_ISO14443	4  #define NFC_PROTO_NFC_DEP	5  #define NFC_PROTO_ISO14443_B	6 +#define NFC_PROTO_ISO15693	7 -#define NFC_PROTO_MAX		7 +#define NFC_PROTO_MAX		8  /* NFC communication modes */  #define NFC_COMM_ACTIVE  0 @@ -223,6 +233,7 @@ enum nfc_sdp_attr {  #define NFC_PROTO_ISO14443_MASK	  (1 << NFC_PROTO_ISO14443)  #define NFC_PROTO_NFC_DEP_MASK	  (1 << NFC_PROTO_NFC_DEP)  #define NFC_PROTO_ISO14443_B_MASK (1 << NFC_PROTO_ISO14443_B) +#define NFC_PROTO_ISO15693_MASK	  (1 << NFC_PROTO_ISO15693)  /* NFC Secure Elements */  #define NFC_SE_UICC     0x1 @@ -262,11 +273,19 @@ struct sockaddr_nfc_llcp {   * First byte is the adapter index   * Second byte contains flags   *  - 0x01 - Direction (0=RX, 1=TX) - *  - 0x02-0x80 - Reserved + *  - 0x02-0x04 - Payload type (000=LLCP, 001=NCI, 010=HCI, 011=Digital, + *                              100=Proprietary) + *  - 0x05-0x80 - Reserved   **/ -#define NFC_LLCP_RAW_HEADER_SIZE	2 -#define NFC_LLCP_DIRECTION_RX		0x00 -#define NFC_LLCP_DIRECTION_TX		0x01 +#define NFC_RAW_HEADER_SIZE	2 +#define NFC_DIRECTION_RX		0x00 +#define NFC_DIRECTION_TX		0x01 + +#define RAW_PAYLOAD_LLCP 0 +#define RAW_PAYLOAD_NCI	1 +#define RAW_PAYLOAD_HCI	2 +#define RAW_PAYLOAD_DIGITAL	3 +#define RAW_PAYLOAD_PROPRIETARY	4  /* socket option names */  #define NFC_LLCP_RW		0 diff --git a/include/uapi/linux/nfs4.h b/include/uapi/linux/nfs4.h index 788128ebac4..35f5f4c6c26 100644 --- a/include/uapi/linux/nfs4.h +++ b/include/uapi/linux/nfs4.h @@ -150,7 +150,7 @@  #define NFS4_SECINFO_STYLE4_CURRENT_FH	0  #define NFS4_SECINFO_STYLE4_PARENT	1 -#define NFS4_MAX_UINT64	(~(u64)0) +#define NFS4_MAX_UINT64	(~(__u64)0)  /* An NFS4 sessions server must support at least NFS4_MAX_OPS operations.   * If a compound requires more operations, adjust NFS4_MAX_OPS accordingly. diff --git a/include/uapi/linux/nfs_mount.h b/include/uapi/linux/nfs_mount.h index 576bddd72e0..64b0f22f5c4 100644 --- a/include/uapi/linux/nfs_mount.h +++ b/include/uapi/linux/nfs_mount.h @@ -60,7 +60,7 @@ struct nfs_mount_data {  #define NFS_MOUNT_BROKEN_SUID	0x0400	/* 4 */  #define NFS_MOUNT_NOACL		0x0800	/* 4 */  #define NFS_MOUNT_STRICTLOCK	0x1000	/* reserved for NFSv4 */ -#define NFS_MOUNT_SECFLAVOUR	0x2000	/* 5 */ +#define NFS_MOUNT_SECFLAVOUR	0x2000	/* 5 non-text parsed mount data only */  #define NFS_MOUNT_NORDIRPLUS	0x4000	/* 5 */  #define NFS_MOUNT_UNSHARED	0x8000	/* 5 */  #define NFS_MOUNT_FLAGMASK	0xFFFF diff --git a/include/uapi/linux/nfsd/nfsfh.h b/include/uapi/linux/nfsd/nfsfh.h index 616e3b39647..20391235d08 100644 --- a/include/uapi/linux/nfsd/nfsfh.h +++ b/include/uapi/linux/nfsd/nfsfh.h @@ -1,13 +1,7 @@  /* - * include/linux/nfsd/nfsfh.h - *   * This file describes the layout of the file handles as passed   * over the wire.   * - * Earlier versions of knfsd used to sign file handles using keyed MD5 - * or SHA. I've removed this code, because it doesn't give you more - * security than blocking external access to port 2049 on your firewall. - *   * Copyright (C) 1995, 1996, 1997 Olaf Kirch <okir@monad.swb.de>   */ @@ -37,7 +31,7 @@ struct nfs_fhbase_old {  };  /* - * This is the new flexible, extensible style NFSv2/v3 file handle. + * This is the new flexible, extensible style NFSv2/v3/v4 file handle.   * by Neil Brown <neilb@cse.unsw.edu.au> - March 2000   *   * The file handle starts with a sequence of four-byte words. @@ -47,14 +41,7 @@ struct nfs_fhbase_old {   *   * All four-byte values are in host-byte-order.   * - * The auth_type field specifies how the filehandle can be authenticated - * This might allow a file to be confirmed to be in a writable part of a - * filetree without checking the path from it up to the root. - * Current values: - *     0  - No authentication.  fb_auth is 0 bytes long - * Possible future values: - *     1  - 4 bytes taken from MD5 hash of the remainer of the file handle - *          prefixed by a secret and with the important export flags. + * The auth_type field is deprecated and must be set to 0.   *   * The fsid_type identifies how the filesystem (or export point) is   *    encoded. @@ -71,14 +58,9 @@ struct nfs_fhbase_old {   *     7  - 8 byte inode number and 16 byte uuid   *   * The fileid_type identified how the file within the filesystem is encoded. - * This is (will be) passed to, and set by, the underlying filesystem if it supports - * filehandle operations.  The filesystem must not use the value '0' or '0xff' and may - * only use the values 1 and 2 as defined below: - *  Current values: - *    0   - The root, or export point, of the filesystem.  fb_fileid is 0 bytes. - *    1   - 32bit inode number, 32 bit generation number. - *    2   - 32bit inode number, 32 bit generation number, 32 bit parent directory inode number. - * + *   The values for this field are filesystem specific, exccept that + *   filesystems must not use the values '0' or '0xff'. 'See enum fid_type' + *   in include/linux/exportfs.h for currently registered values.   */  struct nfs_fhbase_new {  	__u8		fb_version;	/* == 1, even => nfs_fhbase_old */ @@ -114,9 +96,9 @@ struct knfsd_fh {  #define	fh_fsid_type		fh_base.fh_new.fb_fsid_type  #define	fh_auth_type		fh_base.fh_new.fb_auth_type  #define	fh_fileid_type		fh_base.fh_new.fb_fileid_type -#define	fh_auth			fh_base.fh_new.fb_auth  #define	fh_fsid			fh_base.fh_new.fb_auth - +/* Do not use, provided for userspace compatiblity. */ +#define	fh_auth			fh_base.fh_new.fb_auth  #endif /* _UAPI_LINUX_NFSD_FH_H */ diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index fde2c021b26..be9519b52bb 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -303,8 +303,9 @@   *	passed, all channels allowed for the current regulatory domain   *	are used.  Extra IEs can also be passed from the userspace by   *	using the %NL80211_ATTR_IE attribute. - * @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan.  Returns -ENOENT - *	if scheduled scan is not running. + * @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan. Returns -ENOENT if + *	scheduled scan is not running. The caller may assume that as soon + *	as the call returns, it is safe to start a new scheduled scan again.   * @NL80211_CMD_SCHED_SCAN_RESULTS: indicates that there are scheduled scan   *	results available.   * @NL80211_CMD_SCHED_SCAN_STOPPED: indicates that the scheduled scan has @@ -418,8 +419,18 @@   *	%NL80211_ATTR_SSID attribute, and can optionally specify the association   *	IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_USE_MFP,   *	%NL80211_ATTR_MAC, %NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT, - *	%NL80211_ATTR_CONTROL_PORT_ETHERTYPE and - *	%NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT. + *	%NL80211_ATTR_CONTROL_PORT_ETHERTYPE, + *	%NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, %NL80211_ATTR_MAC_HINT, and + *	%NL80211_ATTR_WIPHY_FREQ_HINT. + *	If included, %NL80211_ATTR_MAC and %NL80211_ATTR_WIPHY_FREQ are + *	restrictions on BSS selection, i.e., they effectively prevent roaming + *	within the ESS. %NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT + *	can be included to provide a recommendation of the initial BSS while + *	allowing the driver to roam to other BSSes within the ESS and also to + *	ignore this recommendation if the indicated BSS is not ideal. Only one + *	set of BSSID,frequency parameters is used (i.e., either the enforcing + *	%NL80211_ATTR_MAC,%NL80211_ATTR_WIPHY_FREQ or the less strict + *	%NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT).   *	Background scan period can optionally be   *	specified in %NL80211_ATTR_BG_SCAN_PERIOD,   *	if not specified default background scan configuration @@ -492,6 +503,9 @@   *	TX status event pertaining to the TX request.   *	%NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the   *	management frames at CCK rate or not in 2GHz band. + *	%NL80211_ATTR_CSA_C_OFFSETS_TX is an array of offsets to CSA + *	counters which will be updated to the current value. This attribute + *	is used during CSA period.   * @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this   *	command may be used with the corresponding cookie to cancel the wait   *	time if it is known that it is no longer necessary. @@ -581,7 +595,14 @@   *	operation, %NL80211_ATTR_MAC contains the peer MAC address, and   *	%NL80211_ATTR_REASON_CODE the reason code to be used (only with   *	%NL80211_TDLS_TEARDOWN). - * @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame. + * @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame. The + *	%NL80211_ATTR_TDLS_ACTION attribute determines the type of frame to be + *	sent. Public Action codes (802.11-2012 8.1.5.1) will be sent as + *	802.11 management frames, while TDLS action codes (802.11-2012 + *	8.5.13.1) will be encapsulated and sent as data frames. The currently + *	supported Public Action code is %WLAN_PUB_ACTION_TDLS_DISCOVER_RES + *	and the currently supported TDLS actions codes are given in + *	&enum ieee80211_tdls_actioncode.   *   * @NL80211_CMD_UNEXPECTED_FRAME: Used by an application controlling an AP   *	(or GO) interface (i.e. hostapd) to ask for unexpected frames to @@ -686,6 +707,21 @@   *	other station that transmission must be blocked until the channel   *	switch is complete.   * + * @NL80211_CMD_VENDOR: Vendor-specified command/event. The command is specified + *	by the %NL80211_ATTR_VENDOR_ID attribute and a sub-command in + *	%NL80211_ATTR_VENDOR_SUBCMD. Parameter(s) can be transported in + *	%NL80211_ATTR_VENDOR_DATA. + *	For feature advertisement, the %NL80211_ATTR_VENDOR_DATA attribute is + *	used in the wiphy data as a nested attribute containing descriptions + *	(&struct nl80211_vendor_cmd_info) of the supported vendor commands. + *	This may also be sent as an event with the same attributes. + * + * @NL80211_CMD_SET_QOS_MAP: Set Interworking QoS mapping for IP DSCP values. + *	The QoS mapping information is included in %NL80211_ATTR_QOS_MAP. If + *	that attribute is not included, QoS mapping is disabled. Since this + *	QoS mapping is relevant for IP packets, it is only valid during an + *	association. This is cleared on disassociation and AP restart. + *   * @NL80211_CMD_MAX: highest used command number   * @__NL80211_CMD_AFTER_LAST: internal use   */ @@ -853,6 +889,10 @@ enum nl80211_commands {  	NL80211_CMD_CHANNEL_SWITCH, +	NL80211_CMD_VENDOR, + +	NL80211_CMD_SET_QOS_MAP, +  	/* add new commands above here */  	/* used to define NL80211_CMD_MAX below */ @@ -988,7 +1028,7 @@ enum nl80211_commands {   * 	to query the CRDA to retrieve one regulatory domain. This attribute can   * 	also be used by userspace to query the kernel for the currently set   * 	regulatory domain. We chose an alpha2 as that is also used by the - * 	IEEE-802.11d country information element to identify a country. + * 	IEEE-802.11 country information element to identify a country.   * 	Users can also simply ask the wireless core to set regulatory domain   * 	to a specific alpha2.   * @NL80211_ATTR_REG_RULES: a nested array of regulatory domain regulatory @@ -1488,14 +1528,69 @@ enum nl80211_commands {   *	operation).   * @NL80211_ATTR_CSA_IES: Nested set of attributes containing the IE information   *	for the time while performing a channel switch. - * @NL80211_ATTR_CSA_C_OFF_BEACON: Offset of the channel switch counter - *	field in the beacons tail (%NL80211_ATTR_BEACON_TAIL). - * @NL80211_ATTR_CSA_C_OFF_PRESP: Offset of the channel switch counter - *	field in the probe response (%NL80211_ATTR_PROBE_RESP). + * @NL80211_ATTR_CSA_C_OFF_BEACON: An array of offsets (u16) to the channel + *	switch counters in the beacons tail (%NL80211_ATTR_BEACON_TAIL). + * @NL80211_ATTR_CSA_C_OFF_PRESP: An array of offsets (u16) to the channel + *	switch counters in the probe response (%NL80211_ATTR_PROBE_RESP).   *   * @NL80211_ATTR_RXMGMT_FLAGS: flags for nl80211_send_mgmt(), u32.   *	As specified in the &enum nl80211_rxmgmt_flags.   * + * @NL80211_ATTR_STA_SUPPORTED_CHANNELS: array of supported channels. + * + * @NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES: array of supported + *      supported operating classes. + * + * @NL80211_ATTR_HANDLE_DFS: A flag indicating whether user space + *	controls DFS operation in IBSS mode. If the flag is included in + *	%NL80211_CMD_JOIN_IBSS request, the driver will allow use of DFS + *	channels and reports radar events to userspace. Userspace is required + *	to react to radar events, e.g. initiate a channel switch or leave the + *	IBSS network. + * + * @NL80211_ATTR_SUPPORT_5_MHZ: A flag indicating that the device supports + *	5 MHz channel bandwidth. + * @NL80211_ATTR_SUPPORT_10_MHZ: A flag indicating that the device supports + *	10 MHz channel bandwidth. + * + * @NL80211_ATTR_OPMODE_NOTIF: Operating mode field from Operating Mode + *	Notification Element based on association request when used with + *	%NL80211_CMD_NEW_STATION; u8 attribute. + * + * @NL80211_ATTR_VENDOR_ID: The vendor ID, either a 24-bit OUI or, if + *	%NL80211_VENDOR_ID_IS_LINUX is set, a special Linux ID (not used yet) + * @NL80211_ATTR_VENDOR_SUBCMD: vendor sub-command + * @NL80211_ATTR_VENDOR_DATA: data for the vendor command, if any; this + *	attribute is also used for vendor command feature advertisement + * @NL80211_ATTR_VENDOR_EVENTS: used for event list advertising in the wiphy + *	info, containing a nested array of possible events + * + * @NL80211_ATTR_QOS_MAP: IP DSCP mapping for Interworking QoS mapping. This + *	data is in the format defined for the payload of the QoS Map Set element + *	in IEEE Std 802.11-2012, 8.4.2.97. + * + * @NL80211_ATTR_MAC_HINT: MAC address recommendation as initial BSS + * @NL80211_ATTR_WIPHY_FREQ_HINT: frequency of the recommended initial BSS + * + * @NL80211_ATTR_MAX_AP_ASSOC_STA: Device attribute that indicates how many + *	associated stations are supported in AP mode (including P2P GO); u32. + *	Since drivers may not have a fixed limit on the maximum number (e.g., + *	other concurrent operations may affect this), drivers are allowed to + *	advertise values that cannot always be met. In such cases, an attempt + *	to add a new station entry with @NL80211_CMD_NEW_STATION may fail. + * + * @NL80211_ATTR_CSA_C_OFFSETS_TX: An array of csa counter offsets (u16) which + *	should be updated when the frame is transmitted. + * @NL80211_ATTR_MAX_CSA_COUNTERS: U8 attribute used to advertise the maximum + *	supported number of csa counters. + * + * @NL80211_ATTR_TDLS_PEER_CAPABILITY: flags for TDLS peer capabilities, u32. + *	As specified in the &enum nl80211_tdls_peer_capability. + * + * @NL80211_ATTR_IFACE_SOCKET_OWNER: flag attribute, if set during interface + *	creation then the new interface will be owned by the netlink socket + *	that created it and will be destroyed when the socket is closed + *   * @NL80211_ATTR_MAX: highest attribute number currently defined   * @__NL80211_ATTR_AFTER_LAST: internal use   */ @@ -1806,6 +1901,36 @@ enum nl80211_attrs {  	NL80211_ATTR_RXMGMT_FLAGS, +	NL80211_ATTR_STA_SUPPORTED_CHANNELS, + +	NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES, + +	NL80211_ATTR_HANDLE_DFS, + +	NL80211_ATTR_SUPPORT_5_MHZ, +	NL80211_ATTR_SUPPORT_10_MHZ, + +	NL80211_ATTR_OPMODE_NOTIF, + +	NL80211_ATTR_VENDOR_ID, +	NL80211_ATTR_VENDOR_SUBCMD, +	NL80211_ATTR_VENDOR_DATA, +	NL80211_ATTR_VENDOR_EVENTS, + +	NL80211_ATTR_QOS_MAP, + +	NL80211_ATTR_MAC_HINT, +	NL80211_ATTR_WIPHY_FREQ_HINT, + +	NL80211_ATTR_MAX_AP_ASSOC_STA, + +	NL80211_ATTR_TDLS_PEER_CAPABILITY, + +	NL80211_ATTR_IFACE_SOCKET_OWNER, + +	NL80211_ATTR_CSA_C_OFFSETS_TX, +	NL80211_ATTR_MAX_CSA_COUNTERS, +  	/* add attributes here, update the policy in nl80211.c */  	__NL80211_ATTR_AFTER_LAST, @@ -2074,6 +2199,8 @@ enum nl80211_sta_bss_param {   *	Contains a nested array of signal strength attributes (u8, dBm)   * @NL80211_STA_INFO_CHAIN_SIGNAL_AVG: per-chain signal strength average   *	Same format as NL80211_STA_INFO_CHAIN_SIGNAL. + * @NL80211_STA_EXPECTED_THROUGHPUT: expected throughput considering also the + *	802.11 header (u32, kbps)   * @__NL80211_STA_INFO_AFTER_LAST: internal   * @NL80211_STA_INFO_MAX: highest possible station info attribute   */ @@ -2105,6 +2232,7 @@ enum nl80211_sta_info {  	NL80211_STA_INFO_TX_BYTES64,  	NL80211_STA_INFO_CHAIN_SIGNAL,  	NL80211_STA_INFO_CHAIN_SIGNAL_AVG, +	NL80211_STA_INFO_EXPECTED_THROUGHPUT,  	/* keep last */  	__NL80211_STA_INFO_AFTER_LAST, @@ -2206,10 +2334,9 @@ enum nl80211_band_attr {   * @NL80211_FREQUENCY_ATTR_FREQ: Frequency in MHz   * @NL80211_FREQUENCY_ATTR_DISABLED: Channel is disabled in current   *	regulatory domain. - * @NL80211_FREQUENCY_ATTR_PASSIVE_SCAN: Only passive scanning is - *	permitted on this channel in current regulatory domain. - * @NL80211_FREQUENCY_ATTR_NO_IBSS: IBSS networks are not permitted - *	on this channel in current regulatory domain. + * @NL80211_FREQUENCY_ATTR_NO_IR: no mechanisms that initiate radiation + * 	are permitted on this channel, this includes sending probe + * 	requests, or modes of operation that require beaconing.   * @NL80211_FREQUENCY_ATTR_RADAR: Radar detection is mandatory   *	on this channel in current regulatory domain.   * @NL80211_FREQUENCY_ATTR_MAX_TX_POWER: Maximum transmission power in mBm @@ -2228,16 +2355,42 @@ enum nl80211_band_attr {   * @NL80211_FREQUENCY_ATTR_NO_160MHZ: any 160 MHz (but not 80+80) channel   *	using this channel as the primary or any of the secondary channels   *	isn't possible + * @NL80211_FREQUENCY_ATTR_DFS_CAC_TIME: DFS CAC time in milliseconds. + * @NL80211_FREQUENCY_ATTR_INDOOR_ONLY: Only indoor use is permitted on this + *	channel. A channel that has the INDOOR_ONLY attribute can only be + *	used when there is a clear assessment that the device is operating in + *	an indoor surroundings, i.e., it is connected to AC power (and not + *	through portable DC inverters) or is under the control of a master + *	that is acting as an AP and is connected to AC power. + * @NL80211_FREQUENCY_ATTR_GO_CONCURRENT: GO operation is allowed on this + *	channel if it's connected concurrently to a BSS on the same channel on + *	the 2 GHz band or to a channel in the same UNII band (on the 5 GHz + *	band), and IEEE80211_CHAN_RADAR is not set. Instantiating a GO on a + *	channel that has the GO_CONCURRENT attribute set can be done when there + *	is a clear assessment that the device is operating under the guidance of + *	an authorized master, i.e., setting up a GO while the device is also + *	connected to an AP with DFS and radar detection on the UNII band (it is + *	up to user-space, i.e., wpa_supplicant to perform the required + *	verifications) + * @NL80211_FREQUENCY_ATTR_NO_20MHZ: 20 MHz operation is not allowed + *	on this channel in current regulatory domain. + * @NL80211_FREQUENCY_ATTR_NO_10MHZ: 10 MHz operation is not allowed + *	on this channel in current regulatory domain.   * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number   *	currently defined   * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use + * + * See https://apps.fcc.gov/eas/comments/GetPublishedDocument.html?id=327&tn=528122 + * for more information on the FCC description of the relaxations allowed + * by NL80211_FREQUENCY_ATTR_INDOOR_ONLY and + * NL80211_FREQUENCY_ATTR_GO_CONCURRENT.   */  enum nl80211_frequency_attr {  	__NL80211_FREQUENCY_ATTR_INVALID,  	NL80211_FREQUENCY_ATTR_FREQ,  	NL80211_FREQUENCY_ATTR_DISABLED, -	NL80211_FREQUENCY_ATTR_PASSIVE_SCAN, -	NL80211_FREQUENCY_ATTR_NO_IBSS, +	NL80211_FREQUENCY_ATTR_NO_IR, +	__NL80211_FREQUENCY_ATTR_NO_IBSS,  	NL80211_FREQUENCY_ATTR_RADAR,  	NL80211_FREQUENCY_ATTR_MAX_TX_POWER,  	NL80211_FREQUENCY_ATTR_DFS_STATE, @@ -2246,6 +2399,11 @@ enum nl80211_frequency_attr {  	NL80211_FREQUENCY_ATTR_NO_HT40_PLUS,  	NL80211_FREQUENCY_ATTR_NO_80MHZ,  	NL80211_FREQUENCY_ATTR_NO_160MHZ, +	NL80211_FREQUENCY_ATTR_DFS_CAC_TIME, +	NL80211_FREQUENCY_ATTR_INDOOR_ONLY, +	NL80211_FREQUENCY_ATTR_GO_CONCURRENT, +	NL80211_FREQUENCY_ATTR_NO_20MHZ, +	NL80211_FREQUENCY_ATTR_NO_10MHZ,  	/* keep last */  	__NL80211_FREQUENCY_ATTR_AFTER_LAST, @@ -2253,6 +2411,9 @@ enum nl80211_frequency_attr {  };  #define NL80211_FREQUENCY_ATTR_MAX_TX_POWER NL80211_FREQUENCY_ATTR_MAX_TX_POWER +#define NL80211_FREQUENCY_ATTR_PASSIVE_SCAN	NL80211_FREQUENCY_ATTR_NO_IR +#define NL80211_FREQUENCY_ATTR_NO_IBSS		NL80211_FREQUENCY_ATTR_NO_IR +#define NL80211_FREQUENCY_ATTR_NO_IR		NL80211_FREQUENCY_ATTR_NO_IR  /**   * enum nl80211_bitrate_attr - bitrate attributes @@ -2333,12 +2494,14 @@ enum nl80211_reg_type {   * 	in KHz. This is not a center a frequency but an actual regulatory   * 	band edge.   * @NL80211_ATTR_FREQ_RANGE_MAX_BW: maximum allowed bandwidth for this - * 	frequency range, in KHz. + *	frequency range, in KHz.   * @NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN: the maximum allowed antenna gain   * 	for a given frequency range. The value is in mBi (100 * dBi).   * 	If you don't have one then don't send this.   * @NL80211_ATTR_POWER_RULE_MAX_EIRP: the maximum allowed EIRP for   * 	a given frequency range. The value is in mBm (100 * dBm). + * @NL80211_ATTR_DFS_CAC_TIME: DFS CAC time in milliseconds. + *	If not present or 0 default CAC time will be used.   * @NL80211_REG_RULE_ATTR_MAX: highest regulatory rule attribute number   *	currently defined   * @__NL80211_REG_RULE_ATTR_AFTER_LAST: internal use @@ -2354,6 +2517,8 @@ enum nl80211_reg_rule_attr {  	NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN,  	NL80211_ATTR_POWER_RULE_MAX_EIRP, +	NL80211_ATTR_DFS_CAC_TIME, +  	/* keep last */  	__NL80211_REG_RULE_ATTR_AFTER_LAST,  	NL80211_REG_RULE_ATTR_MAX = __NL80211_REG_RULE_ATTR_AFTER_LAST - 1 @@ -2363,9 +2528,15 @@ enum nl80211_reg_rule_attr {   * enum nl80211_sched_scan_match_attr - scheduled scan match attributes   * @__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: attribute number 0 is reserved   * @NL80211_SCHED_SCAN_MATCH_ATTR_SSID: SSID to be used for matching, - * only report BSS with matching SSID. + *	only report BSS with matching SSID.   * @NL80211_SCHED_SCAN_MATCH_ATTR_RSSI: RSSI threshold (in dBm) for reporting a - *	BSS in scan results. Filtering is turned off if not specified. + *	BSS in scan results. Filtering is turned off if not specified. Note that + *	if this attribute is in a match set of its own, then it is treated as + *	the default value for all matchsets with an SSID, rather than being a + *	matchset of its own without an RSSI filter. This is due to problems with + *	how this API was implemented in the past. Also, due to the same problem, + *	the only way to create a matchset with only an RSSI filter (with this + *	attribute) is if there's only a single matchset with the RSSI attribute.   * @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter   *	attribute number currently defined   * @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use @@ -2395,8 +2566,12 @@ enum nl80211_sched_scan_match_attr {   * @NL80211_RRF_DFS: DFS support is required to be used   * @NL80211_RRF_PTP_ONLY: this is only for Point To Point links   * @NL80211_RRF_PTMP_ONLY: this is only for Point To Multi Point links - * @NL80211_RRF_PASSIVE_SCAN: passive scan is required - * @NL80211_RRF_NO_IBSS: no IBSS is allowed + * @NL80211_RRF_NO_IR: no mechanisms that initiate radiation are allowed, + * 	this includes probe requests or modes of operation that require + * 	beaconing. + * @NL80211_RRF_AUTO_BW: maximum available bandwidth should be calculated + *	base on contiguous rules and wider channels will be allowed to cross + *	multiple contiguous/overlapping frequency ranges.   */  enum nl80211_reg_rule_flags {  	NL80211_RRF_NO_OFDM		= 1<<0, @@ -2406,10 +2581,18 @@ enum nl80211_reg_rule_flags {  	NL80211_RRF_DFS			= 1<<4,  	NL80211_RRF_PTP_ONLY		= 1<<5,  	NL80211_RRF_PTMP_ONLY		= 1<<6, -	NL80211_RRF_PASSIVE_SCAN	= 1<<7, -	NL80211_RRF_NO_IBSS		= 1<<8, +	NL80211_RRF_NO_IR		= 1<<7, +	__NL80211_RRF_NO_IBSS		= 1<<8, +	NL80211_RRF_AUTO_BW		= 1<<11,  }; +#define NL80211_RRF_PASSIVE_SCAN	NL80211_RRF_NO_IR +#define NL80211_RRF_NO_IBSS		NL80211_RRF_NO_IR +#define NL80211_RRF_NO_IR		NL80211_RRF_NO_IR + +/* For backport compatibility with older userspace */ +#define NL80211_RRF_NO_IR_ALL		(NL80211_RRF_NO_IR | __NL80211_RRF_NO_IBSS) +  /**   * enum nl80211_dfs_regions - regulatory DFS regions   * @@ -2439,10 +2622,13 @@ enum nl80211_dfs_regions {   *	present has been registered with the wireless core that   *	has listed NL80211_FEATURE_CELL_BASE_REG_HINTS as a   *	supported feature. + * @NL80211_USER_REG_HINT_INDOOR: a user sent an hint indicating that the + *	platform is operating in an indoor environment.   */  enum nl80211_user_reg_hint_type {  	NL80211_USER_REG_HINT_USER	= 0,  	NL80211_USER_REG_HINT_CELL_BASE = 1, +	NL80211_USER_REG_HINT_INDOOR    = 2,  };  /** @@ -3040,21 +3226,43 @@ enum nl80211_key_attributes {   *	in an array of rates as defined in IEEE 802.11 7.3.2.2 (u8 values with   *	1 = 500 kbps) but without the IE length restriction (at most   *	%NL80211_MAX_SUPP_RATES in a single array). - * @NL80211_TXRATE_MCS: HT (MCS) rates allowed for TX rate selection + * @NL80211_TXRATE_HT: HT (MCS) rates allowed for TX rate selection   *	in an array of MCS numbers. + * @NL80211_TXRATE_VHT: VHT rates allowed for TX rate selection, + *	see &struct nl80211_txrate_vht + * @NL80211_TXRATE_GI: configure GI, see &enum nl80211_txrate_gi   * @__NL80211_TXRATE_AFTER_LAST: internal   * @NL80211_TXRATE_MAX: highest TX rate attribute   */  enum nl80211_tx_rate_attributes {  	__NL80211_TXRATE_INVALID,  	NL80211_TXRATE_LEGACY, -	NL80211_TXRATE_MCS, +	NL80211_TXRATE_HT, +	NL80211_TXRATE_VHT, +	NL80211_TXRATE_GI,  	/* keep last */  	__NL80211_TXRATE_AFTER_LAST,  	NL80211_TXRATE_MAX = __NL80211_TXRATE_AFTER_LAST - 1  }; +#define NL80211_TXRATE_MCS NL80211_TXRATE_HT +#define NL80211_VHT_NSS_MAX		8 + +/** + * struct nl80211_txrate_vht - VHT MCS/NSS txrate bitmap + * @mcs: MCS bitmap table for each NSS (array index 0 for 1 stream, etc.) + */ +struct nl80211_txrate_vht { +	__u16 mcs[NL80211_VHT_NSS_MAX]; +}; + +enum nl80211_txrate_gi { +	NL80211_TXRATE_DEFAULT_GI, +	NL80211_TXRATE_FORCE_SGI, +	NL80211_TXRATE_FORCE_LGI, +}; +  /**   * enum nl80211_band - Frequency band   * @NL80211_BAND_2GHZ: 2.4 GHz ISM band @@ -3494,6 +3702,8 @@ enum nl80211_iface_limit_attrs {   *	different channels may be used within this group.   * @NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS: u32 attribute containing the bitmap   *	of supported channel widths for radar detection. + * @NL80211_IFACE_COMB_RADAR_DETECT_REGIONS: u32 attribute containing the bitmap + *	of supported regulatory regions for radar detection.   * @NUM_NL80211_IFACE_COMB: number of attributes   * @MAX_NL80211_IFACE_COMB: highest attribute number   * @@ -3527,6 +3737,7 @@ enum nl80211_if_combination_attrs {  	NL80211_IFACE_COMB_STA_AP_BI_MATCH,  	NL80211_IFACE_COMB_NUM_CHANNELS,  	NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS, +	NL80211_IFACE_COMB_RADAR_DETECT_REGIONS,  	/* keep last */  	NUM_NL80211_IFACE_COMB, @@ -3700,11 +3911,8 @@ enum nl80211_ap_sme_features {   * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested   *	to work properly to suppport receiving regulatory hints from   *	cellular base stations. - * @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: If this is set, an active - *	P2P Device (%NL80211_IFTYPE_P2P_DEVICE) requires its own channel - *	in the interface combinations, even when it's only used for scan - *	and remain-on-channel. This could be due to, for example, the - *	remain-on-channel implementation requiring a channel context. + * @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: (no longer available, only + *	here to reserve the value for API/ABI compatibility)   * @NL80211_FEATURE_SAE: This driver supports simultaneous authentication of   *	equals (SAE) with user space SME (NL80211_CMD_AUTHENTICATE) in station   *	mode @@ -3740,6 +3948,9 @@ enum nl80211_ap_sme_features {   *	interface. An active monitor interface behaves like a normal monitor   *	interface, but gets added to the driver. It ensures that incoming   *	unicast packets directed at the configured interface address get ACKed. + * @NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE: This driver supports dynamic + *	channel bandwidth change (e.g., HT 20 <-> 40 MHz channel) during the + *	lifetime of a BSS.   */  enum nl80211_feature_flags {  	NL80211_FEATURE_SK_TX_STATUS			= 1 << 0, @@ -3760,6 +3971,7 @@ enum nl80211_feature_flags {  	NL80211_FEATURE_FULL_AP_CLIENT_STATE		= 1 << 15,  	NL80211_FEATURE_USERSPACE_MPM			= 1 << 16,  	NL80211_FEATURE_ACTIVE_MONITOR			= 1 << 17, +	NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE	= 1 << 18,  };  /** @@ -3860,13 +4072,12 @@ enum nl80211_radar_event {   *   * Channel states used by the DFS code.   * - * @IEEE80211_DFS_USABLE: The channel can be used, but channel availability + * @NL80211_DFS_USABLE: The channel can be used, but channel availability   *	check (CAC) must be performed before using it for AP or IBSS. - * @IEEE80211_DFS_UNAVAILABLE: A radar has been detected on this channel, it + * @NL80211_DFS_UNAVAILABLE: A radar has been detected on this channel, it   *	is therefore marked as not available. - * @IEEE80211_DFS_AVAILABLE: The channel has been CAC checked and is available. + * @NL80211_DFS_AVAILABLE: The channel has been CAC checked and is available.   */ -  enum nl80211_dfs_state {  	NL80211_DFS_USABLE,  	NL80211_DFS_UNAVAILABLE, @@ -3917,4 +4128,40 @@ enum nl80211_rxmgmt_flags {  	NL80211_RXMGMT_FLAG_ANSWERED = 1 << 0,  }; +/* + * If this flag is unset, the lower 24 bits are an OUI, if set + * a Linux nl80211 vendor ID is used (no such IDs are allocated + * yet, so that's not valid so far) + */ +#define NL80211_VENDOR_ID_IS_LINUX	0x80000000 + +/** + * struct nl80211_vendor_cmd_info - vendor command data + * @vendor_id: If the %NL80211_VENDOR_ID_IS_LINUX flag is clear, then the + *	value is a 24-bit OUI; if it is set then a separately allocated ID + *	may be used, but no such IDs are allocated yet. New IDs should be + *	added to this file when needed. + * @subcmd: sub-command ID for the command + */ +struct nl80211_vendor_cmd_info { +	__u32 vendor_id; +	__u32 subcmd; +}; + +/** + * enum nl80211_tdls_peer_capability - TDLS peer flags. + * + * Used by tdls_mgmt() to determine which conditional elements need + * to be added to TDLS Setup frames. + * + * @NL80211_TDLS_PEER_HT: TDLS peer is HT capable. + * @NL80211_TDLS_PEER_VHT: TDLS peer is VHT capable. + * @NL80211_TDLS_PEER_WMM: TDLS peer is WMM capable. + */ +enum nl80211_tdls_peer_capability { +	NL80211_TDLS_PEER_HT = 1<<0, +	NL80211_TDLS_PEER_VHT = 1<<1, +	NL80211_TDLS_PEER_WMM = 1<<2, +}; +  #endif /* __LINUX_NL80211_H */ diff --git a/include/uapi/linux/nvme.h b/include/uapi/linux/nvme.h index 989c04e0c56..29a7d8619d8 100644 --- a/include/uapi/linux/nvme.h +++ b/include/uapi/linux/nvme.h @@ -1,6 +1,6 @@  /*   * Definitions for the NVM Express interface - * Copyright (c) 2011-2013, Intel Corporation. + * Copyright (c) 2011-2014, Intel Corporation.   *   * This program is free software; you can redistribute it and/or modify it   * under the terms and conditions of the GNU General Public License, @@ -10,10 +10,6 @@   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for   * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc.,  - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.   */  #ifndef _UAPI_LINUX_NVME_H @@ -31,7 +27,12 @@ struct nvme_id_power_state {  	__u8			read_lat;  	__u8			write_tput;  	__u8			write_lat; -	__u8			rsvd16[16]; +	__le16			idle_power; +	__u8			idle_scale; +	__u8			rsvd19; +	__le16			active_power; +	__u8			active_work_scale; +	__u8			rsvd23[9];  };  enum { @@ -49,7 +50,9 @@ struct nvme_id_ctrl {  	__u8			ieee[3];  	__u8			mic;  	__u8			mdts; -	__u8			rsvd78[178]; +	__u16			cntlid; +	__u32			ver; +	__u8			rsvd84[172];  	__le16			oacs;  	__u8			acl;  	__u8			aerl; @@ -57,7 +60,11 @@ struct nvme_id_ctrl {  	__u8			lpa;  	__u8			elpe;  	__u8			npss; -	__u8			rsvd264[248]; +	__u8			avscc; +	__u8			apsta; +	__le16			wctemp; +	__le16			cctemp; +	__u8			rsvd270[242];  	__u8			sqes;  	__u8			cqes;  	__u8			rsvd514[2]; @@ -68,7 +75,12 @@ struct nvme_id_ctrl {  	__u8			vwc;  	__le16			awun;  	__le16			awupf; -	__u8			rsvd530[1518]; +	__u8			nvscc; +	__u8			rsvd531; +	__le16			acwu; +	__u8			rsvd534[2]; +	__le32			sgls; +	__u8			rsvd540[1508];  	struct nvme_id_power_state	psd[32];  	__u8			vs[1024];  }; @@ -77,6 +89,7 @@ enum {  	NVME_CTRL_ONCS_COMPARE			= 1 << 0,  	NVME_CTRL_ONCS_WRITE_UNCORRECTABLE	= 1 << 1,  	NVME_CTRL_ONCS_DSM			= 1 << 2, +	NVME_CTRL_VWC_PRESENT			= 1 << 0,  };  struct nvme_lbaf { @@ -95,7 +108,15 @@ struct nvme_id_ns {  	__u8			mc;  	__u8			dpc;  	__u8			dps; -	__u8			rsvd30[98]; +	__u8			nmic; +	__u8			rescap; +	__u8			fpi; +	__u8			rsvd33; +	__le16			nawun; +	__le16			nawupf; +	__le16			nacwu; +	__u8			rsvd40[80]; +	__u8			eui64[8];  	struct nvme_lbaf	lbaf[16];  	__u8			rsvd192[192];  	__u8			vs[3712]; @@ -126,7 +147,10 @@ struct nvme_smart_log {  	__u8			unsafe_shutdowns[16];  	__u8			media_errors[16];  	__u8			num_err_log_entries[16]; -	__u8			rsvd192[320]; +	__le32			warning_temp_time; +	__le32			critical_comp_time; +	__le16			temp_sensor[8]; +	__u8			rsvd216[296];  };  enum { @@ -282,6 +306,10 @@ enum {  	NVME_FEAT_WRITE_ATOMIC	= 0x0a,  	NVME_FEAT_ASYNC_EVENT	= 0x0b,  	NVME_FEAT_SW_PROGRESS	= 0x0c, +	NVME_LOG_ERROR		= 0x01, +	NVME_LOG_SMART		= 0x02, +	NVME_LOG_FW_SLOT	= 0x03, +	NVME_LOG_RESERVATION	= 0x80,  	NVME_FWACT_REPL		= (0 << 3),  	NVME_FWACT_REPL_ACTV	= (1 << 3),  	NVME_FWACT_ACTV		= (2 << 3), @@ -350,6 +378,16 @@ struct nvme_delete_queue {  	__u32			rsvd11[5];  }; +struct nvme_abort_cmd { +	__u8			opcode; +	__u8			flags; +	__u16			command_id; +	__u32			rsvd1[9]; +	__le16			sqid; +	__u16			cid; +	__u32			rsvd11[5]; +}; +  struct nvme_download_firmware {  	__u8			opcode;  	__u8			flags; @@ -384,6 +422,7 @@ struct nvme_command {  		struct nvme_download_firmware dlfw;  		struct nvme_format_cmd format;  		struct nvme_dsm_cmd dsm; +		struct nvme_abort_cmd abort;  	};  }; @@ -423,6 +462,7 @@ enum {  	NVME_SC_REFTAG_CHECK		= 0x284,  	NVME_SC_COMPARE_FAILED		= 0x285,  	NVME_SC_ACCESS_DENIED		= 0x286, +	NVME_SC_DNR			= 0x4000,  };  struct nvme_completion { diff --git a/include/uapi/linux/openvswitch.h b/include/uapi/linux/openvswitch.h index a74d375b439..0b979ee4bfc 100644 --- a/include/uapi/linux/openvswitch.h +++ b/include/uapi/linux/openvswitch.h @@ -40,7 +40,15 @@ struct ovs_header {  #define OVS_DATAPATH_FAMILY  "ovs_datapath"  #define OVS_DATAPATH_MCGROUP "ovs_datapath" -#define OVS_DATAPATH_VERSION 0x1 + +/* V2: + *   - API users are expected to provide OVS_DP_ATTR_USER_FEATURES + *     when creating the datapath. + */ +#define OVS_DATAPATH_VERSION 2 + +/* First OVS datapath version to support features */ +#define OVS_DP_VER_FEATURES 2  enum ovs_datapath_cmd {  	OVS_DP_CMD_UNSPEC, @@ -63,15 +71,19 @@ enum ovs_datapath_cmd {   * not be sent.   * @OVS_DP_ATTR_STATS: Statistics about packets that have passed through the   * datapath.  Always present in notifications. + * @OVS_DP_ATTR_MEGAFLOW_STATS: Statistics about mega flow masks usage for the + * datapath. Always present in notifications.   *   * These attributes follow the &struct ovs_header within the Generic Netlink   * payload for %OVS_DP_* commands.   */  enum ovs_datapath_attr {  	OVS_DP_ATTR_UNSPEC, -	OVS_DP_ATTR_NAME,       /* name of dp_ifindex netdev */ -	OVS_DP_ATTR_UPCALL_PID, /* Netlink PID to receive upcalls */ -	OVS_DP_ATTR_STATS,      /* struct ovs_dp_stats */ +	OVS_DP_ATTR_NAME,		/* name of dp_ifindex netdev */ +	OVS_DP_ATTR_UPCALL_PID,		/* Netlink PID to receive upcalls */ +	OVS_DP_ATTR_STATS,		/* struct ovs_dp_stats */ +	OVS_DP_ATTR_MEGAFLOW_STATS,	/* struct ovs_dp_megaflow_stats */ +	OVS_DP_ATTR_USER_FEATURES,	/* OVS_DP_F_*  */  	__OVS_DP_ATTR_MAX  }; @@ -84,6 +96,14 @@ struct ovs_dp_stats {  	__u64 n_flows;           /* Number of flows present */  }; +struct ovs_dp_megaflow_stats { +	__u64 n_mask_hit;	 /* Number of masks used for flow lookups. */ +	__u32 n_masks;		 /* Number of masks for the datapath. */ +	__u32 pad0;		 /* Pad for future expension. */ +	__u64 pad1;		 /* Pad for future expension. */ +	__u64 pad2;		 /* Pad for future expension. */ +}; +  struct ovs_vport_stats {  	__u64   rx_packets;		/* total packets received       */  	__u64   tx_packets;		/* total packets transmitted    */ @@ -95,6 +115,9 @@ struct ovs_vport_stats {  	__u64   tx_dropped;		/* no space available in linux  */  }; +/* Allow last Netlink attribute to be unaligned */ +#define OVS_DP_F_UNALIGNED	(1 << 0) +  /* Fixed logical ports. */  #define OVSP_LOCAL      ((__u32)0) @@ -260,6 +283,7 @@ enum ovs_key_attr {  	OVS_KEY_ATTR_SKB_MARK,  /* u32 skb mark */  	OVS_KEY_ATTR_TUNNEL,    /* Nested set of ovs_tunnel attributes */  	OVS_KEY_ATTR_SCTP,      /* struct ovs_key_sctp */ +	OVS_KEY_ATTR_TCP_FLAGS,	/* be16 TCP flags. */  #ifdef __KERNEL__  	OVS_KEY_ATTR_IPV4_TUNNEL,  /* struct ovs_key_ipv4_tunnel */ @@ -371,7 +395,9 @@ struct ovs_key_nd {   * @OVS_FLOW_ATTR_ACTIONS: Nested %OVS_ACTION_ATTR_* attributes specifying   * the actions to take for packets that match the key.  Always present in   * notifications.  Required for %OVS_FLOW_CMD_NEW requests, optional for - * %OVS_FLOW_CMD_SET requests. + * %OVS_FLOW_CMD_SET requests.  An %OVS_FLOW_CMD_SET without + * %OVS_FLOW_ATTR_ACTIONS will not modify the actions.  To clear the actions, + * an %OVS_FLOW_ATTR_ACTIONS without any nested attributes must be given.   * @OVS_FLOW_ATTR_STATS: &struct ovs_flow_stats giving statistics for this   * flow.  Present in notifications if the stats would be nonzero.  Ignored in   * requests. diff --git a/include/uapi/linux/packet_diag.h b/include/uapi/linux/packet_diag.h index b2cc0cd9c4d..d08c63f3dd6 100644 --- a/include/uapi/linux/packet_diag.h +++ b/include/uapi/linux/packet_diag.h @@ -29,6 +29,7 @@ struct packet_diag_msg {  };  enum { +	/* PACKET_DIAG_NONE, standard nl API requires this attribute!  */  	PACKET_DIAG_INFO,  	PACKET_DIAG_MCLIST,  	PACKET_DIAG_RX_RING, diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h index baa7852468e..30db069bce6 100644 --- a/include/uapi/linux/pci_regs.h +++ b/include/uapi/linux/pci_regs.h @@ -13,10 +13,10 @@   *	PCI to PCI Bridge Specification   *	PCI System Design Guide   * - * 	For hypertransport information, please consult the following manuals - * 	from http://www.hypertransport.org + *	For HyperTransport information, please consult the following manuals + *	from http://www.hypertransport.org   * - *	The Hypertransport I/O Link Specification + *	The HyperTransport I/O Link Specification   */  #ifndef LINUX_PCI_REGS_H @@ -37,7 +37,7 @@  #define  PCI_COMMAND_INVALIDATE	0x10	/* Use memory write and invalidate */  #define  PCI_COMMAND_VGA_PALETTE 0x20	/* Enable palette snooping */  #define  PCI_COMMAND_PARITY	0x40	/* Enable parity checking */ -#define  PCI_COMMAND_WAIT 	0x80	/* Enable address/data stepping */ +#define  PCI_COMMAND_WAIT	0x80	/* Enable address/data stepping */  #define  PCI_COMMAND_SERR	0x100	/* Enable SERR */  #define  PCI_COMMAND_FAST_BACK	0x200	/* Enable back-to-back writes */  #define  PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */ @@ -45,7 +45,7 @@  #define PCI_STATUS		0x06	/* 16 bits */  #define  PCI_STATUS_INTERRUPT	0x08	/* Interrupt status */  #define  PCI_STATUS_CAP_LIST	0x10	/* Support Capability List */ -#define  PCI_STATUS_66MHZ	0x20	/* Support 66 Mhz PCI 2.1 bus */ +#define  PCI_STATUS_66MHZ	0x20	/* Support 66 MHz PCI 2.1 bus */  #define  PCI_STATUS_UDF		0x40	/* Support User Definable Features [obsolete] */  #define  PCI_STATUS_FAST_BACK	0x80	/* Accept fast-back to back */  #define  PCI_STATUS_PARITY	0x100	/* Detected parity error */ @@ -205,14 +205,14 @@  #define  PCI_CAP_ID_CHSWP	0x06	/* CompactPCI HotSwap */  #define  PCI_CAP_ID_PCIX	0x07	/* PCI-X */  #define  PCI_CAP_ID_HT		0x08	/* HyperTransport */ -#define  PCI_CAP_ID_VNDR	0x09	/* Vendor specific */ +#define  PCI_CAP_ID_VNDR	0x09	/* Vendor-Specific */  #define  PCI_CAP_ID_DBG		0x0A	/* Debug port */  #define  PCI_CAP_ID_CCRC	0x0B	/* CompactPCI Central Resource Control */ -#define  PCI_CAP_ID_SHPC 	0x0C	/* PCI Standard Hot-Plug Controller */ +#define  PCI_CAP_ID_SHPC	0x0C	/* PCI Standard Hot-Plug Controller */  #define  PCI_CAP_ID_SSVID	0x0D	/* Bridge subsystem vendor/device ID */  #define  PCI_CAP_ID_AGP3	0x0E	/* AGP Target PCI-PCI bridge */  #define  PCI_CAP_ID_SECDEV	0x0F	/* Secure Device */ -#define  PCI_CAP_ID_EXP 	0x10	/* PCI Express */ +#define  PCI_CAP_ID_EXP		0x10	/* PCI Express */  #define  PCI_CAP_ID_MSIX	0x11	/* MSI-X */  #define  PCI_CAP_ID_SATA	0x12	/* SATA Data/Index Conf. */  #define  PCI_CAP_ID_AF		0x13	/* PCI Advanced Features */ @@ -268,8 +268,8 @@  #define  PCI_AGP_COMMAND_RQ_MASK 0xff000000  /* Master: Maximum number of requests */  #define  PCI_AGP_COMMAND_SBA	0x0200	/* Sideband addressing enabled */  #define  PCI_AGP_COMMAND_AGP	0x0100	/* Allow processing of AGP transactions */ -#define  PCI_AGP_COMMAND_64BIT	0x0020 	/* Allow processing of 64-bit addresses */ -#define  PCI_AGP_COMMAND_FW	0x0010 	/* Force FW transfers */ +#define  PCI_AGP_COMMAND_64BIT	0x0020	/* Allow processing of 64-bit addresses */ +#define  PCI_AGP_COMMAND_FW	0x0010	/* Force FW transfers */  #define  PCI_AGP_COMMAND_RATE4	0x0004	/* Use 4x rate */  #define  PCI_AGP_COMMAND_RATE2	0x0002	/* Use 2x rate */  #define  PCI_AGP_COMMAND_RATE1	0x0001	/* Use 1x rate */ @@ -319,10 +319,9 @@  #define PCI_MSIX_PBA		8	/* Pending Bit Array offset */  #define  PCI_MSIX_PBA_BIR	0x00000007 /* BAR index */  #define  PCI_MSIX_PBA_OFFSET	0xfffffff8 /* Offset into specified BAR */ -#define  PCI_MSIX_FLAGS_BIRMASK	(7 << 0)   /* deprecated */  #define PCI_CAP_MSIX_SIZEOF	12	/* size of MSIX registers */ -/* MSI-X entry's format */ +/* MSI-X Table entry format */  #define PCI_MSIX_ENTRY_SIZE		16  #define  PCI_MSIX_ENTRY_LOWER_ADDR	0  #define  PCI_MSIX_ENTRY_UPPER_ADDR	4 @@ -373,7 +372,7 @@  #define  PCI_X_CMD_SPLIT_16	0x0060	/* Max 16 */  #define  PCI_X_CMD_SPLIT_32	0x0070	/* Max 32 */  #define  PCI_X_CMD_MAX_SPLIT	0x0070	/* Max Outstanding Split Transactions */ -#define  PCI_X_CMD_VERSION(x) 	(((x) >> 12) & 3) /* Version */ +#define  PCI_X_CMD_VERSION(x)	(((x) >> 12) & 3) /* Version */  #define PCI_X_STATUS		4	/* PCI-X capabilities */  #define  PCI_X_STATUS_DEVFN	0x000000ff	/* A copy of devfn */  #define  PCI_X_STATUS_BUS	0x0000ff00	/* A copy of bus nr */ @@ -408,8 +407,8 @@  /* PCI Bridge Subsystem ID registers */ -#define PCI_SSVID_VENDOR_ID     4	/* PCI-Bridge subsystem vendor id register */ -#define PCI_SSVID_DEVICE_ID     6	/* PCI-Bridge subsystem device id register */ +#define PCI_SSVID_VENDOR_ID     4	/* PCI Bridge subsystem vendor ID */ +#define PCI_SSVID_DEVICE_ID     6	/* PCI Bridge subsystem device ID */  /* PCI Express capability registers */ @@ -485,12 +484,17 @@  #define  PCI_EXP_LNKCTL_CLKREQ_EN 0x0100 /* Enable clkreq */  #define  PCI_EXP_LNKCTL_HAWD	0x0200	/* Hardware Autonomous Width Disable */  #define  PCI_EXP_LNKCTL_LBMIE	0x0400	/* Link Bandwidth Management Interrupt Enable */ -#define  PCI_EXP_LNKCTL_LABIE	0x0800	/* Lnk Autonomous Bandwidth Interrupt Enable */ +#define  PCI_EXP_LNKCTL_LABIE	0x0800	/* Link Autonomous Bandwidth Interrupt Enable */  #define PCI_EXP_LNKSTA		18	/* Link Status */  #define  PCI_EXP_LNKSTA_CLS	0x000f	/* Current Link Speed */  #define  PCI_EXP_LNKSTA_CLS_2_5GB 0x0001 /* Current Link Speed 2.5GT/s */  #define  PCI_EXP_LNKSTA_CLS_5_0GB 0x0002 /* Current Link Speed 5.0GT/s */ -#define  PCI_EXP_LNKSTA_NLW	0x03f0	/* Nogotiated Link Width */ +#define  PCI_EXP_LNKSTA_CLS_8_0GB 0x0003 /* Current Link Speed 8.0GT/s */ +#define  PCI_EXP_LNKSTA_NLW	0x03f0	/* Negotiated Link Width */ +#define  PCI_EXP_LNKSTA_NLW_X1	0x0010	/* Current Link Width x1 */ +#define  PCI_EXP_LNKSTA_NLW_X2	0x0020	/* Current Link Width x2 */ +#define  PCI_EXP_LNKSTA_NLW_X4	0x0040	/* Current Link Width x4 */ +#define  PCI_EXP_LNKSTA_NLW_X8	0x0080	/* Current Link Width x8 */  #define  PCI_EXP_LNKSTA_NLW_SHIFT 4	/* start of NLW mask in link status */  #define  PCI_EXP_LNKSTA_LT	0x0800	/* Link Training */  #define  PCI_EXP_LNKSTA_SLC	0x1000	/* Slot Clock Configuration */ @@ -519,8 +523,16 @@  #define  PCI_EXP_SLTCTL_CCIE	0x0010	/* Command Completed Interrupt Enable */  #define  PCI_EXP_SLTCTL_HPIE	0x0020	/* Hot-Plug Interrupt Enable */  #define  PCI_EXP_SLTCTL_AIC	0x00c0	/* Attention Indicator Control */ +#define  PCI_EXP_SLTCTL_ATTN_IND_ON    0x0040 /* Attention Indicator on */ +#define  PCI_EXP_SLTCTL_ATTN_IND_BLINK 0x0080 /* Attention Indicator blinking */ +#define  PCI_EXP_SLTCTL_ATTN_IND_OFF   0x00c0 /* Attention Indicator off */  #define  PCI_EXP_SLTCTL_PIC	0x0300	/* Power Indicator Control */ +#define  PCI_EXP_SLTCTL_PWR_IND_ON     0x0100 /* Power Indicator on */ +#define  PCI_EXP_SLTCTL_PWR_IND_BLINK  0x0200 /* Power Indicator blinking */ +#define  PCI_EXP_SLTCTL_PWR_IND_OFF    0x0300 /* Power Indicator off */  #define  PCI_EXP_SLTCTL_PCC	0x0400	/* Power Controller Control */ +#define  PCI_EXP_SLTCTL_PWR_ON         0x0000 /* Power On */ +#define  PCI_EXP_SLTCTL_PWR_OFF        0x0400 /* Power Off */  #define  PCI_EXP_SLTCTL_EIC	0x0800	/* Electromechanical Interlock Control */  #define  PCI_EXP_SLTCTL_DLLSCE	0x1000	/* Data Link Layer State Changed Enable */  #define PCI_EXP_SLTSTA		26	/* Slot Status */ @@ -558,7 +570,8 @@  #define  PCI_EXP_DEVCAP2_OBFF_MSG	0x00040000 /* New message signaling */  #define  PCI_EXP_DEVCAP2_OBFF_WAKE	0x00080000 /* Re-use WAKE# for OBFF */  #define PCI_EXP_DEVCTL2		40	/* Device Control 2 */ -#define  PCI_EXP_DEVCTL2_ARI		0x20	/* Alternative Routing-ID */ +#define  PCI_EXP_DEVCTL2_COMP_TIMEOUT	0x000f	/* Completion Timeout Value */ +#define  PCI_EXP_DEVCTL2_ARI		0x0020	/* Alternative Routing-ID */  #define  PCI_EXP_DEVCTL2_IDO_REQ_EN	0x0100	/* Allow IDO for requests */  #define  PCI_EXP_DEVCTL2_IDO_CMP_EN	0x0200	/* Allow IDO for completions */  #define  PCI_EXP_DEVCTL2_LTR_EN		0x0400	/* Enable LTR mechanism */ @@ -593,7 +606,7 @@  #define PCI_EXT_CAP_ID_MFVC	0x08	/* Multi-Function VC Capability */  #define PCI_EXT_CAP_ID_VC9	0x09	/* same as _VC */  #define PCI_EXT_CAP_ID_RCRB	0x0A	/* Root Complex RB? */ -#define PCI_EXT_CAP_ID_VNDR	0x0B	/* Vendor Specific */ +#define PCI_EXT_CAP_ID_VNDR	0x0B	/* Vendor-Specific */  #define PCI_EXT_CAP_ID_CAC	0x0C	/* Config Access - obsolete */  #define PCI_EXT_CAP_ID_ACS	0x0D	/* Access Control Services */  #define PCI_EXT_CAP_ID_ARI	0x0E	/* Alternate Routing ID */ @@ -602,12 +615,12 @@  #define PCI_EXT_CAP_ID_MRIOV	0x11	/* Multi Root I/O Virtualization */  #define PCI_EXT_CAP_ID_MCAST	0x12	/* Multicast */  #define PCI_EXT_CAP_ID_PRI	0x13	/* Page Request Interface */ -#define PCI_EXT_CAP_ID_AMD_XXX	0x14	/* reserved for AMD */ -#define PCI_EXT_CAP_ID_REBAR	0x15	/* resizable BAR */ -#define PCI_EXT_CAP_ID_DPA	0x16	/* dynamic power alloc */ -#define PCI_EXT_CAP_ID_TPH	0x17	/* TPH request */ -#define PCI_EXT_CAP_ID_LTR	0x18	/* latency tolerance reporting */ -#define PCI_EXT_CAP_ID_SECPCI	0x19	/* Secondary PCIe */ +#define PCI_EXT_CAP_ID_AMD_XXX	0x14	/* Reserved for AMD */ +#define PCI_EXT_CAP_ID_REBAR	0x15	/* Resizable BAR */ +#define PCI_EXT_CAP_ID_DPA	0x16	/* Dynamic Power Allocation */ +#define PCI_EXT_CAP_ID_TPH	0x17	/* TPH Requester */ +#define PCI_EXT_CAP_ID_LTR	0x18	/* Latency Tolerance Reporting */ +#define PCI_EXT_CAP_ID_SECPCI	0x19	/* Secondary PCIe Capability */  #define PCI_EXT_CAP_ID_PMUX	0x1A	/* Protocol Multiplexing */  #define PCI_EXT_CAP_ID_PASID	0x1B	/* Process Address Space ID */  #define PCI_EXT_CAP_ID_MAX	PCI_EXT_CAP_ID_PASID @@ -667,9 +680,9 @@  #define PCI_ERR_ROOT_COR_RCV		0x00000001	/* ERR_COR Received */  /* Multi ERR_COR Received */  #define PCI_ERR_ROOT_MULTI_COR_RCV	0x00000002 -/* ERR_FATAL/NONFATAL Recevied */ +/* ERR_FATAL/NONFATAL Received */  #define PCI_ERR_ROOT_UNCOR_RCV		0x00000004 -/* Multi ERR_FATAL/NONFATAL Recevied */ +/* Multi ERR_FATAL/NONFATAL Received */  #define PCI_ERR_ROOT_MULTI_UNCOR_RCV	0x00000008  #define PCI_ERR_ROOT_FIRST_FATAL	0x00000010	/* First Fatal */  #define PCI_ERR_ROOT_NONFATAL_RCV	0x00000020	/* Non-Fatal Received */ @@ -677,17 +690,34 @@  #define PCI_ERR_ROOT_ERR_SRC	52	/* Error Source Identification */  /* Virtual Channel */ -#define PCI_VC_PORT_REG1	4 -#define  PCI_VC_REG1_EVCC	0x7	/* extended vc count */ -#define PCI_VC_PORT_REG2	8 -#define  PCI_VC_REG2_32_PHASE	0x2 -#define  PCI_VC_REG2_64_PHASE	0x4 -#define  PCI_VC_REG2_128_PHASE	0x8 +#define PCI_VC_PORT_CAP1	4 +#define  PCI_VC_CAP1_EVCC	0x00000007	/* extended VC count */ +#define  PCI_VC_CAP1_LPEVCC	0x00000070	/* low prio extended VC count */ +#define  PCI_VC_CAP1_ARB_SIZE	0x00000c00 +#define PCI_VC_PORT_CAP2	8 +#define  PCI_VC_CAP2_32_PHASE		0x00000002 +#define  PCI_VC_CAP2_64_PHASE		0x00000004 +#define  PCI_VC_CAP2_128_PHASE		0x00000008 +#define  PCI_VC_CAP2_ARB_OFF		0xff000000  #define PCI_VC_PORT_CTRL	12 +#define  PCI_VC_PORT_CTRL_LOAD_TABLE	0x00000001  #define PCI_VC_PORT_STATUS	14 +#define  PCI_VC_PORT_STATUS_TABLE	0x00000001  #define PCI_VC_RES_CAP		16 +#define  PCI_VC_RES_CAP_32_PHASE	0x00000002 +#define  PCI_VC_RES_CAP_64_PHASE	0x00000004 +#define  PCI_VC_RES_CAP_128_PHASE	0x00000008 +#define  PCI_VC_RES_CAP_128_PHASE_TB	0x00000010 +#define  PCI_VC_RES_CAP_256_PHASE	0x00000020 +#define  PCI_VC_RES_CAP_ARB_OFF		0xff000000  #define PCI_VC_RES_CTRL		20 +#define  PCI_VC_RES_CTRL_LOAD_TABLE	0x00010000 +#define  PCI_VC_RES_CTRL_ARB_SELECT	0x000e0000 +#define  PCI_VC_RES_CTRL_ID		0x07000000 +#define  PCI_VC_RES_CTRL_ENABLE		0x80000000  #define PCI_VC_RES_STATUS	26 +#define  PCI_VC_RES_STATUS_TABLE	0x00000001 +#define  PCI_VC_RES_STATUS_NEGO		0x00000002  #define PCI_CAP_VC_BASE_SIZEOF		0x10  #define PCI_CAP_VC_PER_VC_SIZEOF	0x0C @@ -711,7 +741,7 @@  #define  PCI_VNDR_HEADER_LEN(x)	(((x) >> 20) & 0xfff)  /* - * Hypertransport sub capability types + * HyperTransport sub capability types   *   * Unfortunately there are both 3 bit and 5 bit capability types defined   * in the HT spec, catering for that is a little messy. You probably don't @@ -739,8 +769,8 @@  #define HT_CAPTYPE_DIRECT_ROUTE	0xB0	/* Direct routing configuration */  #define HT_CAPTYPE_VCSET	0xB8	/* Virtual Channel configuration */  #define HT_CAPTYPE_ERROR_RETRY	0xC0	/* Retry on error configuration */ -#define HT_CAPTYPE_GEN3		0xD0	/* Generation 3 hypertransport configuration */ -#define HT_CAPTYPE_PM		0xE0	/* Hypertransport powermanagement configuration */ +#define HT_CAPTYPE_GEN3		0xD0	/* Generation 3 HyperTransport configuration */ +#define HT_CAPTYPE_PM		0xE0	/* HyperTransport power management configuration */  #define HT_CAP_SIZEOF_LONG	28	/* slave & primary */  #define HT_CAP_SIZEOF_SHORT	24	/* host & secondary */ @@ -777,14 +807,14 @@  #define PCI_PRI_ALLOC_REQ	0x0c	/* PRI max reqs allowed */  #define PCI_EXT_CAP_PRI_SIZEOF	16 -/* PASID capability */ +/* Process Address Space ID */  #define PCI_PASID_CAP		0x04    /* PASID feature register */  #define  PCI_PASID_CAP_EXEC	0x02	/* Exec permissions Supported */ -#define  PCI_PASID_CAP_PRIV	0x04	/* Priviledge Mode Supported */ +#define  PCI_PASID_CAP_PRIV	0x04	/* Privilege Mode Supported */  #define PCI_PASID_CTRL		0x06    /* PASID control register */  #define  PCI_PASID_CTRL_ENABLE	0x01	/* Enable bit */  #define  PCI_PASID_CTRL_EXEC	0x02	/* Exec permissions Enable */ -#define  PCI_PASID_CTRL_PRIV	0x04	/* Priviledge Mode Enable */ +#define  PCI_PASID_CTRL_PRIV	0x04	/* Privilege Mode Enable */  #define PCI_EXT_CAP_PASID_SIZEOF	8  /* Single Root I/O Virtualization */ @@ -839,22 +869,22 @@  #define PCI_ACS_CTRL		0x06	/* ACS Control Register */  #define PCI_ACS_EGRESS_CTL_V	0x08	/* ACS Egress Control Vector */ -#define PCI_VSEC_HDR		4	/* extended cap - vendor specific */ +#define PCI_VSEC_HDR		4	/* extended cap - vendor-specific */  #define  PCI_VSEC_HDR_LEN_SHIFT	20	/* shift for length field */ -/* sata capability */ +/* SATA capability */  #define PCI_SATA_REGS		4	/* SATA REGs specifier */  #define  PCI_SATA_REGS_MASK	0xF	/* location - BAR#/inline */  #define  PCI_SATA_REGS_INLINE	0xF	/* REGS in config space */  #define PCI_SATA_SIZEOF_SHORT	8  #define PCI_SATA_SIZEOF_LONG	16 -/* resizable BARs */ +/* Resizable BARs */  #define PCI_REBAR_CTRL		8	/* control register */  #define  PCI_REBAR_CTRL_NBAR_MASK	(7 << 5)	/* mask for # bars */  #define  PCI_REBAR_CTRL_NBAR_SHIFT	5	/* shift for # bars */ -/* dynamic power allocation */ +/* Dynamic Power Allocation */  #define PCI_DPA_CAP		4	/* capability register */  #define  PCI_DPA_CAP_SUBSTATE_MASK	0x1F	/* # substates - 1 */  #define PCI_DPA_BASE_SIZEOF	16	/* size with 0 substates */ diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h index 009a655a5d3..9269de25487 100644 --- a/include/uapi/linux/perf_event.h +++ b/include/uapi/linux/perf_event.h @@ -136,8 +136,9 @@ enum perf_event_sample_format {  	PERF_SAMPLE_WEIGHT			= 1U << 14,  	PERF_SAMPLE_DATA_SRC			= 1U << 15,  	PERF_SAMPLE_IDENTIFIER			= 1U << 16, +	PERF_SAMPLE_TRANSACTION			= 1U << 17, -	PERF_SAMPLE_MAX = 1U << 17,		/* non-ABI */ +	PERF_SAMPLE_MAX = 1U << 18,		/* non-ABI */  };  /* @@ -162,8 +163,9 @@ enum perf_branch_sample_type {  	PERF_SAMPLE_BRANCH_ABORT_TX	= 1U << 7, /* transaction aborts */  	PERF_SAMPLE_BRANCH_IN_TX	= 1U << 8, /* in transaction */  	PERF_SAMPLE_BRANCH_NO_TX	= 1U << 9, /* not in transaction */ +	PERF_SAMPLE_BRANCH_COND		= 1U << 10, /* conditional branches */ -	PERF_SAMPLE_BRANCH_MAX		= 1U << 10, /* non-ABI */ +	PERF_SAMPLE_BRANCH_MAX		= 1U << 11, /* non-ABI */  };  #define PERF_SAMPLE_BRANCH_PLM_ALL \ @@ -181,6 +183,28 @@ enum perf_sample_regs_abi {  };  /* + * Values for the memory transaction event qualifier, mostly for + * abort events. Multiple bits can be set. + */ +enum { +	PERF_TXN_ELISION        = (1 << 0), /* From elision */ +	PERF_TXN_TRANSACTION    = (1 << 1), /* From transaction */ +	PERF_TXN_SYNC           = (1 << 2), /* Instruction is related */ +	PERF_TXN_ASYNC          = (1 << 3), /* Instruction not related */ +	PERF_TXN_RETRY          = (1 << 4), /* Retry possible */ +	PERF_TXN_CONFLICT       = (1 << 5), /* Conflict abort */ +	PERF_TXN_CAPACITY_WRITE = (1 << 6), /* Capacity write abort */ +	PERF_TXN_CAPACITY_READ  = (1 << 7), /* Capacity read abort */ + +	PERF_TXN_MAX	        = (1 << 8), /* non-ABI */ + +	/* bits 32..63 are reserved for the abort code */ + +	PERF_TXN_ABORT_MASK  = (0xffffffffULL << 32), +	PERF_TXN_ABORT_SHIFT = 32, +}; + +/*   * The format of the data returned by read() on a perf event fd,   * as specified by attr.read_format:   * @@ -278,8 +302,8 @@ struct perf_event_attr {  				exclude_callchain_kernel : 1, /* exclude kernel callchains */  				exclude_callchain_user   : 1, /* exclude user callchains */  				mmap2          :  1, /* include mmap with inode data     */ - -				__reserved_1   : 40; +				comm_exec      :  1, /* flag comm events that are due to an exec */ +				__reserved_1   : 39;  	union {  		__u32		wakeup_events;	  /* wakeup every n events */ @@ -456,13 +480,15 @@ struct perf_event_mmap_page {  	/*  	 * Control data for the mmap() data buffer.  	 * -	 * User-space reading the @data_head value should issue an rmb(), on -	 * SMP capable platforms, after reading this value -- see -	 * perf_event_wakeup(). +	 * User-space reading the @data_head value should issue an smp_rmb(), +	 * after reading this value.  	 *  	 * When the mapping is PROT_WRITE the @data_tail value should be -	 * written by userspace to reflect the last read data. In this case -	 * the kernel will not over-write unread data. +	 * written by userspace to reflect the last read data, after issueing +	 * an smp_mb() to separate the data read from the ->data_tail store. +	 * In this case the kernel will not over-write unread data. +	 * +	 * See perf_output_put_handle() for the data ordering.  	 */  	__u64   data_head;		/* head in the data section */  	__u64	data_tail;		/* user-space written tail */ @@ -476,7 +502,12 @@ struct perf_event_mmap_page {  #define PERF_RECORD_MISC_GUEST_KERNEL		(4 << 0)  #define PERF_RECORD_MISC_GUEST_USER		(5 << 0) +/* + * PERF_RECORD_MISC_MMAP_DATA and PERF_RECORD_MISC_COMM_EXEC are used on + * different events so can reuse the same bit position. + */  #define PERF_RECORD_MISC_MMAP_DATA		(1 << 13) +#define PERF_RECORD_MISC_COMM_EXEC		(1 << 13)  /*   * Indicates that the content of PERF_SAMPLE_IP points to   * the actual instruction that triggered the event. See also @@ -654,6 +685,7 @@ enum perf_event_type {  	 *  	 *	{ u64			weight;   } && PERF_SAMPLE_WEIGHT  	 *	{ u64			data_src; } && PERF_SAMPLE_DATA_SRC +	 *	{ u64			transaction; } && PERF_SAMPLE_TRANSACTION  	 * };  	 */  	PERF_RECORD_SAMPLE			= 9, @@ -673,6 +705,7 @@ enum perf_event_type {  	 *	u32				min;  	 *	u64				ino;  	 *	u64				ino_generation; +	 *	u32				prot, flags;  	 *	char				filename[];  	 * 	struct sample_id		sample_id;  	 * }; @@ -696,9 +729,10 @@ enum perf_callchain_context {  	PERF_CONTEXT_MAX		= (__u64)-4095,  }; -#define PERF_FLAG_FD_NO_GROUP		(1U << 0) -#define PERF_FLAG_FD_OUTPUT		(1U << 1) -#define PERF_FLAG_PID_CGROUP		(1U << 2) /* pid=cgroup id, per-cpu mode only */ +#define PERF_FLAG_FD_NO_GROUP		(1UL << 0) +#define PERF_FLAG_FD_OUTPUT		(1UL << 1) +#define PERF_FLAG_PID_CGROUP		(1UL << 2) /* pid=cgroup id, per-cpu mode only */ +#define PERF_FLAG_FD_CLOEXEC		(1UL << 3) /* O_CLOEXEC */  union perf_mem_data_src {  	__u64 val; @@ -761,7 +795,7 @@ union perf_mem_data_src {  #define PERF_MEM_TLB_SHIFT	26  #define PERF_MEM_S(a, s) \ -	(((u64)PERF_MEM_##a##_##s) << PERF_MEM_##a##_SHIFT) +	(((__u64)PERF_MEM_##a##_##s) << PERF_MEM_##a##_SHIFT)  /*   * single taken branch record layout: diff --git a/include/uapi/linux/pfkeyv2.h b/include/uapi/linux/pfkeyv2.h index 0b80c806631..ada7f0171cc 100644 --- a/include/uapi/linux/pfkeyv2.h +++ b/include/uapi/linux/pfkeyv2.h @@ -235,6 +235,18 @@ struct sadb_x_kmaddress {  } __attribute__((packed));  /* sizeof(struct sadb_x_kmaddress) == 8 */ +/* To specify the SA dump filter */ +struct sadb_x_filter { +	__u16	sadb_x_filter_len; +	__u16	sadb_x_filter_exttype; +	__u32	sadb_x_filter_saddr[4]; +	__u32	sadb_x_filter_daddr[4]; +	__u16	sadb_x_filter_family; +	__u8	sadb_x_filter_splen; +	__u8	sadb_x_filter_dplen; +} __attribute__((packed)); +/* sizeof(struct sadb_x_filter) == 40 */ +  /* Message types */  #define SADB_RESERVED		0  #define SADB_GETSPI		1 @@ -358,7 +370,8 @@ struct sadb_x_kmaddress {  #define SADB_X_EXT_SEC_CTX		24  /* Used with MIGRATE to pass @ to IKE for negotiation */  #define SADB_X_EXT_KMADDRESS		25 -#define SADB_EXT_MAX			25 +#define SADB_X_EXT_FILTER		26 +#define SADB_EXT_MAX			26  /* Identity Extension values */  #define SADB_IDENTTYPE_RESERVED	0 diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h index 082eafaf026..25731dfb3fc 100644 --- a/include/uapi/linux/pkt_cls.h +++ b/include/uapi/linux/pkt_cls.h @@ -388,6 +388,20 @@ enum {  #define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1) +/* BPF classifier */ + +enum { +	TCA_BPF_UNSPEC, +	TCA_BPF_ACT, +	TCA_BPF_POLICE, +	TCA_BPF_CLASSID, +	TCA_BPF_OPS_LEN, +	TCA_BPF_OPS, +	__TCA_BPF_MAX, +}; + +#define TCA_BPF_MAX (__TCA_BPF_MAX - 1) +  /* Extended Matches */  struct tcf_ematch_tree_hdr { diff --git a/include/uapi/linux/pkt_sched.h b/include/uapi/linux/pkt_sched.h index 9b829134d42..d62316baae9 100644 --- a/include/uapi/linux/pkt_sched.h +++ b/include/uapi/linux/pkt_sched.h @@ -171,6 +171,10 @@ enum {  	TCA_TBF_PARMS,  	TCA_TBF_RTAB,  	TCA_TBF_PTAB, +	TCA_TBF_RATE64, +	TCA_TBF_PRATE64, +	TCA_TBF_BURST, +	TCA_TBF_PBURST,  	__TCA_TBF_MAX,  }; @@ -357,6 +361,8 @@ enum {  	TCA_HTB_CTAB,  	TCA_HTB_RTAB,  	TCA_HTB_DIRECT_QLEN, +	TCA_HTB_RATE64, +	TCA_HTB_CEIL64,  	__TCA_HTB_MAX,  }; @@ -519,6 +525,7 @@ enum {  	TCA_NETEM_LOSS,  	TCA_NETEM_RATE,  	TCA_NETEM_ECN, +	TCA_NETEM_RATE64,  	__TCA_NETEM_MAX,  }; @@ -759,13 +766,14 @@ enum {  	TCA_FQ_RATE_ENABLE,	/* enable/disable rate limiting */ -	TCA_FQ_FLOW_DEFAULT_RATE,/* for sockets with unspecified sk_rate, -				  * use the following rate -				  */ +	TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */  	TCA_FQ_FLOW_MAX_RATE,	/* per flow max rate */  	TCA_FQ_BUCKETS_LOG,	/* log2(number of buckets) */ + +	TCA_FQ_FLOW_REFILL_DELAY,	/* flow credit refill delay in usec */ +  	__TCA_FQ_MAX  }; @@ -785,4 +793,54 @@ struct tc_fq_qd_stats {  	__u32	throttled_flows;  	__u32	pad;  }; + +/* Heavy-Hitter Filter */ + +enum { +	TCA_HHF_UNSPEC, +	TCA_HHF_BACKLOG_LIMIT, +	TCA_HHF_QUANTUM, +	TCA_HHF_HH_FLOWS_LIMIT, +	TCA_HHF_RESET_TIMEOUT, +	TCA_HHF_ADMIT_BYTES, +	TCA_HHF_EVICT_TIMEOUT, +	TCA_HHF_NON_HH_WEIGHT, +	__TCA_HHF_MAX +}; + +#define TCA_HHF_MAX	(__TCA_HHF_MAX - 1) + +struct tc_hhf_xstats { +	__u32	drop_overlimit; /* number of times max qdisc packet limit +				 * was hit +				 */ +	__u32	hh_overlimit;   /* number of times max heavy-hitters was hit */ +	__u32	hh_tot_count;   /* number of captured heavy-hitters so far */ +	__u32	hh_cur_count;   /* number of current heavy-hitters */ +}; + +/* PIE */ +enum { +	TCA_PIE_UNSPEC, +	TCA_PIE_TARGET, +	TCA_PIE_LIMIT, +	TCA_PIE_TUPDATE, +	TCA_PIE_ALPHA, +	TCA_PIE_BETA, +	TCA_PIE_ECN, +	TCA_PIE_BYTEMODE, +	__TCA_PIE_MAX +}; +#define TCA_PIE_MAX   (__TCA_PIE_MAX - 1) + +struct tc_pie_xstats { +	__u32 prob;             /* current probability */ +	__u32 delay;            /* current delay in ms */ +	__u32 avg_dq_rate;      /* current average dq_rate in bits/pie_time */ +	__u32 packets_in;       /* total number of packets enqueued */ +	__u32 dropped;          /* packets dropped due to pie_action */ +	__u32 overlimit;        /* dropped due to lack of space in queue */ +	__u32 maxq;             /* maximum queue size */ +	__u32 ecn_mark;         /* packets marked with ecn*/ +};  #endif diff --git a/include/uapi/linux/ppp-ioctl.h b/include/uapi/linux/ppp-ioctl.h index 2d9a8859550..63a23a3b8bb 100644 --- a/include/uapi/linux/ppp-ioctl.h +++ b/include/uapi/linux/ppp-ioctl.h @@ -12,6 +12,7 @@  #include <linux/types.h>  #include <linux/compiler.h> +#include <linux/ppp_defs.h>  /*   * Bit definitions for flags argument to PPPIOCGFLAGS/PPPIOCSFLAGS. diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h index 289760f424a..58afc04c107 100644 --- a/include/uapi/linux/prctl.h +++ b/include/uapi/linux/prctl.h @@ -149,4 +149,7 @@  #define PR_GET_TID_ADDRESS	40 +#define PR_SET_THP_DISABLE	41 +#define PR_GET_THP_DISABLE	42 +  #endif /* _LINUX_PRCTL_H */ diff --git a/include/uapi/linux/psci.h b/include/uapi/linux/psci.h new file mode 100644 index 00000000000..310d83e0a91 --- /dev/null +++ b/include/uapi/linux/psci.h @@ -0,0 +1,90 @@ +/* + * ARM Power State and Coordination Interface (PSCI) header + * + * This header holds common PSCI defines and macros shared + * by: ARM kernel, ARM64 kernel, KVM ARM/ARM64 and user space. + * + * Copyright (C) 2014 Linaro Ltd. + * Author: Anup Patel <anup.patel@linaro.org> + */ + +#ifndef _UAPI_LINUX_PSCI_H +#define _UAPI_LINUX_PSCI_H + +/* + * PSCI v0.1 interface + * + * The PSCI v0.1 function numbers are implementation defined. + * + * Only PSCI return values such as: SUCCESS, NOT_SUPPORTED, + * INVALID_PARAMS, and DENIED defined below are applicable + * to PSCI v0.1. + */ + +/* PSCI v0.2 interface */ +#define PSCI_0_2_FN_BASE			0x84000000 +#define PSCI_0_2_FN(n)				(PSCI_0_2_FN_BASE + (n)) +#define PSCI_0_2_64BIT				0x40000000 +#define PSCI_0_2_FN64_BASE			\ +					(PSCI_0_2_FN_BASE + PSCI_0_2_64BIT) +#define PSCI_0_2_FN64(n)			(PSCI_0_2_FN64_BASE + (n)) + +#define PSCI_0_2_FN_PSCI_VERSION		PSCI_0_2_FN(0) +#define PSCI_0_2_FN_CPU_SUSPEND			PSCI_0_2_FN(1) +#define PSCI_0_2_FN_CPU_OFF			PSCI_0_2_FN(2) +#define PSCI_0_2_FN_CPU_ON			PSCI_0_2_FN(3) +#define PSCI_0_2_FN_AFFINITY_INFO		PSCI_0_2_FN(4) +#define PSCI_0_2_FN_MIGRATE			PSCI_0_2_FN(5) +#define PSCI_0_2_FN_MIGRATE_INFO_TYPE		PSCI_0_2_FN(6) +#define PSCI_0_2_FN_MIGRATE_INFO_UP_CPU		PSCI_0_2_FN(7) +#define PSCI_0_2_FN_SYSTEM_OFF			PSCI_0_2_FN(8) +#define PSCI_0_2_FN_SYSTEM_RESET		PSCI_0_2_FN(9) + +#define PSCI_0_2_FN64_CPU_SUSPEND		PSCI_0_2_FN64(1) +#define PSCI_0_2_FN64_CPU_ON			PSCI_0_2_FN64(3) +#define PSCI_0_2_FN64_AFFINITY_INFO		PSCI_0_2_FN64(4) +#define PSCI_0_2_FN64_MIGRATE			PSCI_0_2_FN64(5) +#define PSCI_0_2_FN64_MIGRATE_INFO_UP_CPU	PSCI_0_2_FN64(7) + +/* PSCI v0.2 power state encoding for CPU_SUSPEND function */ +#define PSCI_0_2_POWER_STATE_ID_MASK		0xffff +#define PSCI_0_2_POWER_STATE_ID_SHIFT		0 +#define PSCI_0_2_POWER_STATE_TYPE_SHIFT		16 +#define PSCI_0_2_POWER_STATE_TYPE_MASK		\ +				(0x1 << PSCI_0_2_POWER_STATE_TYPE_SHIFT) +#define PSCI_0_2_POWER_STATE_AFFL_SHIFT		24 +#define PSCI_0_2_POWER_STATE_AFFL_MASK		\ +				(0x3 << PSCI_0_2_POWER_STATE_AFFL_SHIFT) + +/* PSCI v0.2 affinity level state returned by AFFINITY_INFO */ +#define PSCI_0_2_AFFINITY_LEVEL_ON		0 +#define PSCI_0_2_AFFINITY_LEVEL_OFF		1 +#define PSCI_0_2_AFFINITY_LEVEL_ON_PENDING	2 + +/* PSCI v0.2 multicore support in Trusted OS returned by MIGRATE_INFO_TYPE */ +#define PSCI_0_2_TOS_UP_MIGRATE			0 +#define PSCI_0_2_TOS_UP_NO_MIGRATE		1 +#define PSCI_0_2_TOS_MP				2 + +/* PSCI version decoding (independent of PSCI version) */ +#define PSCI_VERSION_MAJOR_SHIFT		16 +#define PSCI_VERSION_MINOR_MASK			\ +		((1U << PSCI_VERSION_MAJOR_SHIFT) - 1) +#define PSCI_VERSION_MAJOR_MASK			~PSCI_VERSION_MINOR_MASK +#define PSCI_VERSION_MAJOR(ver)			\ +		(((ver) & PSCI_VERSION_MAJOR_MASK) >> PSCI_VERSION_MAJOR_SHIFT) +#define PSCI_VERSION_MINOR(ver)			\ +		((ver) & PSCI_VERSION_MINOR_MASK) + +/* PSCI return values (inclusive of all PSCI versions) */ +#define PSCI_RET_SUCCESS			0 +#define PSCI_RET_NOT_SUPPORTED			-1 +#define PSCI_RET_INVALID_PARAMS			-2 +#define PSCI_RET_DENIED				-3 +#define PSCI_RET_ALREADY_ON			-4 +#define PSCI_RET_ON_PENDING			-5 +#define PSCI_RET_INTERNAL_FAILURE		-6 +#define PSCI_RET_NOT_PRESENT			-7 +#define PSCI_RET_DISABLED			-8 + +#endif /* _UAPI_LINUX_PSCI_H */ diff --git a/include/uapi/linux/ptp_clock.h b/include/uapi/linux/ptp_clock.h index b65c834f83e..f0b7bfe5da9 100644 --- a/include/uapi/linux/ptp_clock.h +++ b/include/uapi/linux/ptp_clock.h @@ -50,7 +50,8 @@ struct ptp_clock_caps {  	int n_ext_ts;  /* Number of external time stamp channels. */  	int n_per_out; /* Number of programmable periodic signals. */  	int pps;       /* Whether the clock supports a PPS callback. */ -	int rsv[15];   /* Reserved for future use. */ +	int n_pins;    /* Number of input/output pins. */ +	int rsv[14];   /* Reserved for future use. */  };  struct ptp_extts_request { @@ -80,6 +81,40 @@ struct ptp_sys_offset {  	struct ptp_clock_time ts[2 * PTP_MAX_SAMPLES + 1];  }; +enum ptp_pin_function { +	PTP_PF_NONE, +	PTP_PF_EXTTS, +	PTP_PF_PEROUT, +	PTP_PF_PHYSYNC, +}; + +struct ptp_pin_desc { +	/* +	 * Hardware specific human readable pin name. This field is +	 * set by the kernel during the PTP_PIN_GETFUNC ioctl and is +	 * ignored for the PTP_PIN_SETFUNC ioctl. +	 */ +	char name[64]; +	/* +	 * Pin index in the range of zero to ptp_clock_caps.n_pins - 1. +	 */ +	unsigned int index; +	/* +	 * Which of the PTP_PF_xxx functions to use on this pin. +	 */ +	unsigned int func; +	/* +	 * The specific channel to use for this function. +	 * This corresponds to the 'index' field of the +	 * PTP_EXTTS_REQUEST and PTP_PEROUT_REQUEST ioctls. +	 */ +	unsigned int chan; +	/* +	 * Reserved for future use. +	 */ +	unsigned int rsv[5]; +}; +  #define PTP_CLK_MAGIC '='  #define PTP_CLOCK_GETCAPS  _IOR(PTP_CLK_MAGIC, 1, struct ptp_clock_caps) @@ -87,6 +122,8 @@ struct ptp_sys_offset {  #define PTP_PEROUT_REQUEST _IOW(PTP_CLK_MAGIC, 3, struct ptp_perout_request)  #define PTP_ENABLE_PPS     _IOW(PTP_CLK_MAGIC, 4, int)  #define PTP_SYS_OFFSET     _IOW(PTP_CLK_MAGIC, 5, struct ptp_sys_offset) +#define PTP_PIN_GETFUNC    _IOWR(PTP_CLK_MAGIC, 6, struct ptp_pin_desc) +#define PTP_PIN_SETFUNC    _IOW(PTP_CLK_MAGIC, 7, struct ptp_pin_desc)  struct ptp_extts_event {  	struct ptp_clock_time t; /* Time event occured. */ diff --git a/include/uapi/linux/raid/md_p.h b/include/uapi/linux/raid/md_p.h index fe1a5406d4d..49f4210d439 100644 --- a/include/uapi/linux/raid/md_p.h +++ b/include/uapi/linux/raid/md_p.h @@ -16,6 +16,7 @@  #define _MD_P_H  #include <linux/types.h> +#include <asm/byteorder.h>  /*   * RAID superblock. @@ -291,6 +292,9 @@ struct mdp_superblock_1 {  					    * backwards anyway.  					    */  #define	MD_FEATURE_NEW_OFFSET		64 /* new_offset must be honoured */ +#define	MD_FEATURE_RECOVERY_BITMAP	128 /* recovery that is happening +					     * is guided by bitmap. +					     */  #define	MD_FEATURE_ALL			(MD_FEATURE_BITMAP_OFFSET	\  					|MD_FEATURE_RECOVERY_OFFSET	\  					|MD_FEATURE_RESHAPE_ACTIVE	\ @@ -298,6 +302,7 @@ struct mdp_superblock_1 {  					|MD_FEATURE_REPLACEMENT		\  					|MD_FEATURE_RESHAPE_BACKWARDS	\  					|MD_FEATURE_NEW_OFFSET		\ +					|MD_FEATURE_RECOVERY_BITMAP	\  					) -#endif  +#endif diff --git a/include/uapi/linux/random.h b/include/uapi/linux/random.h index 7471b5b3b8b..fff3528a078 100644 --- a/include/uapi/linux/random.h +++ b/include/uapi/linux/random.h @@ -40,11 +40,4 @@ struct rand_pool_info {  	__u32	buf[0];  }; -struct rnd_state { -	__u32 s1, s2, s3; -}; - -/* Exported functions */ - -  #endif /* _UAPI_LINUX_RANDOM_H */ diff --git a/include/uapi/linux/resource.h b/include/uapi/linux/resource.h index e0ed28477f4..36fb3b5fb18 100644 --- a/include/uapi/linux/resource.h +++ b/include/uapi/linux/resource.h @@ -23,25 +23,25 @@  struct	rusage {  	struct timeval ru_utime;	/* user time used */  	struct timeval ru_stime;	/* system time used */ -	long	ru_maxrss;		/* maximum resident set size */ -	long	ru_ixrss;		/* integral shared memory size */ -	long	ru_idrss;		/* integral unshared data size */ -	long	ru_isrss;		/* integral unshared stack size */ -	long	ru_minflt;		/* page reclaims */ -	long	ru_majflt;		/* page faults */ -	long	ru_nswap;		/* swaps */ -	long	ru_inblock;		/* block input operations */ -	long	ru_oublock;		/* block output operations */ -	long	ru_msgsnd;		/* messages sent */ -	long	ru_msgrcv;		/* messages received */ -	long	ru_nsignals;		/* signals received */ -	long	ru_nvcsw;		/* voluntary context switches */ -	long	ru_nivcsw;		/* involuntary " */ +	__kernel_long_t	ru_maxrss;	/* maximum resident set size */ +	__kernel_long_t	ru_ixrss;	/* integral shared memory size */ +	__kernel_long_t	ru_idrss;	/* integral unshared data size */ +	__kernel_long_t	ru_isrss;	/* integral unshared stack size */ +	__kernel_long_t	ru_minflt;	/* page reclaims */ +	__kernel_long_t	ru_majflt;	/* page faults */ +	__kernel_long_t	ru_nswap;	/* swaps */ +	__kernel_long_t	ru_inblock;	/* block input operations */ +	__kernel_long_t	ru_oublock;	/* block output operations */ +	__kernel_long_t	ru_msgsnd;	/* messages sent */ +	__kernel_long_t	ru_msgrcv;	/* messages received */ +	__kernel_long_t	ru_nsignals;	/* signals received */ +	__kernel_long_t	ru_nvcsw;	/* voluntary context switches */ +	__kernel_long_t	ru_nivcsw;	/* involuntary " */  };  struct rlimit { -	unsigned long	rlim_cur; -	unsigned long	rlim_max; +	__kernel_ulong_t	rlim_cur; +	__kernel_ulong_t	rlim_max;  };  #define RLIM64_INFINITY		(~0ULL) diff --git a/include/uapi/linux/sched.h b/include/uapi/linux/sched.h index 5a0f945927a..34f9d7387d1 100644 --- a/include/uapi/linux/sched.h +++ b/include/uapi/linux/sched.h @@ -39,8 +39,14 @@  #define SCHED_BATCH		3  /* SCHED_ISO: reserved but not implemented yet */  #define SCHED_IDLE		5 +#define SCHED_DEADLINE		6 +  /* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */  #define SCHED_RESET_ON_FORK     0x40000000 +/* + * For the sched_{set,get}attr() calls + */ +#define SCHED_FLAG_RESET_ON_FORK	0x01  #endif /* _UAPI_LINUX_SCHED_H */ diff --git a/include/uapi/linux/sctp.h b/include/uapi/linux/sctp.h index ca451e99b28..266022a2be4 100644 --- a/include/uapi/linux/sctp.h +++ b/include/uapi/linux/sctp.h @@ -22,9 +22,8 @@   * See the GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with GNU CC; see the file COPYING.  If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * along with GNU CC; see the file COPYING.  If not, see + * <http://www.gnu.org/licenses/>.   *   * Please send any bug reports or fixes you make to the   * email address(es): diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h index b47dba2c1e6..5820269aa13 100644 --- a/include/uapi/linux/serial_core.h +++ b/include/uapi/linux/serial_core.h @@ -211,7 +211,7 @@  /* VIA VT8500 SoC */  #define PORT_VT8500	97 -/* Xilinx PSS UART */ +/* Cadence (Xilinx Zynq) UART */  #define PORT_XUARTPS	98  /* Atheros AR933X SoC */ @@ -238,4 +238,10 @@  /* Tilera TILE-Gx UART */  #define PORT_TILEGX	106 +/* MEN 16z135 UART */ +#define PORT_MEN_Z135	107 + +/* SC16IS74xx */ +#define PORT_SC16IS7XX   108 +  #endif /* _UAPILINUX_SERIAL_CORE_H */ diff --git a/include/uapi/linux/serial_reg.h b/include/uapi/linux/serial_reg.h index e6322605b13..99b47058816 100644 --- a/include/uapi/linux/serial_reg.h +++ b/include/uapi/linux/serial_reg.h @@ -32,7 +32,7 @@  #define UART_IIR	2	/* In:  Interrupt ID Register */  #define UART_IIR_NO_INT		0x01 /* No interrupts pending */ -#define UART_IIR_ID		0x06 /* Mask for the interrupt ID */ +#define UART_IIR_ID		0x0e /* Mask for the interrupt ID */  #define UART_IIR_MSI		0x00 /* Modem status interrupt */  #define UART_IIR_THRI		0x02 /* Transmitter holding register empty */  #define UART_IIR_RDI		0x04 /* Receiver data interrupt */ diff --git a/include/uapi/linux/shm.h b/include/uapi/linux/shm.h index ec36fa1a83a..1fbf24ea37f 100644 --- a/include/uapi/linux/shm.h +++ b/include/uapi/linux/shm.h @@ -8,19 +8,20 @@  #endif  /* - * SHMMAX, SHMMNI and SHMALL are upper limits are defaults which can - * be increased by sysctl + * SHMMNI, SHMMAX and SHMALL are default upper limits which can be + * modified by sysctl. The SHMMAX and SHMALL values have been chosen to + * be as large possible without facilitating scenarios where userspace + * causes overflows when adjusting the limits via operations of the form + * "retrieve current limit; add X; update limit". It is therefore not + * advised to make SHMMAX and SHMALL any larger. These limits are + * suitable for both 32 and 64-bit systems.   */ - -#define SHMMAX 0x2000000		 /* max shared seg size (bytes) */  #define SHMMIN 1			 /* min shared seg size (bytes) */  #define SHMMNI 4096			 /* max num of segs system wide */ -#ifndef __KERNEL__ -#define SHMALL (SHMMAX/getpagesize()*(SHMMNI/16)) -#endif +#define SHMMAX (ULONG_MAX - (1UL << 24)) /* max shared seg size (bytes) */ +#define SHMALL (ULONG_MAX - (1UL << 24)) /* max shm system wide (pages) */  #define SHMSEG SHMMNI			 /* max shared segs per process */ -  /* Obsolete, used only for backwards compatibility and libc5 compiles */  struct shmid_ds {  	struct ipc_perm		shm_perm;	/* operation perms */ @@ -68,11 +69,11 @@ struct	shminfo {  struct shm_info {  	int used_ids; -	unsigned long shm_tot;	/* total allocated shm */ -	unsigned long shm_rss;	/* total resident shm */ -	unsigned long shm_swp;	/* total swapped shm */ -	unsigned long swap_attempts; -	unsigned long swap_successes; +	__kernel_ulong_t shm_tot;	/* total allocated shm */ +	__kernel_ulong_t shm_rss;	/* total resident shm */ +	__kernel_ulong_t shm_swp;	/* total swapped shm */ +	__kernel_ulong_t swap_attempts; +	__kernel_ulong_t swap_successes;  }; diff --git a/include/uapi/linux/snmp.h b/include/uapi/linux/snmp.h index 1bdb4a39d1e..df40137f33d 100644 --- a/include/uapi/linux/snmp.h +++ b/include/uapi/linux/snmp.h @@ -252,12 +252,19 @@ enum  	LINUX_MIB_TCPCHALLENGEACK,		/* TCPChallengeACK */  	LINUX_MIB_TCPSYNCHALLENGE,		/* TCPSYNChallenge */  	LINUX_MIB_TCPFASTOPENACTIVE,		/* TCPFastOpenActive */ +	LINUX_MIB_TCPFASTOPENACTIVEFAIL,	/* TCPFastOpenActiveFail */  	LINUX_MIB_TCPFASTOPENPASSIVE,		/* TCPFastOpenPassive*/  	LINUX_MIB_TCPFASTOPENPASSIVEFAIL,	/* TCPFastOpenPassiveFail */  	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW,	/* TCPFastOpenListenOverflow */  	LINUX_MIB_TCPFASTOPENCOOKIEREQD,	/* TCPFastOpenCookieReqd */  	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES, /* TCPSpuriousRtxHostQueues */  	LINUX_MIB_BUSYPOLLRXPACKETS,		/* BusyPollRxPackets */ +	LINUX_MIB_TCPAUTOCORKING,		/* TCPAutoCorking */ +	LINUX_MIB_TCPFROMZEROWINDOWADV,		/* TCPFromZeroWindowAdv */ +	LINUX_MIB_TCPTOZEROWINDOWADV,		/* TCPToZeroWindowAdv */ +	LINUX_MIB_TCPWANTZEROWINDOWADV,		/* TCPWantZeroWindowAdv */ +	LINUX_MIB_TCPSYNRETRANS,		/* TCPSynRetrans */ +	LINUX_MIB_TCPORIGDATASENT,		/* TCPOrigDataSent */  	__LINUX_MIB_MAX  }; diff --git a/include/uapi/linux/sockios.h b/include/uapi/linux/sockios.h index 7997a506ad4..e888b1aed69 100644 --- a/include/uapi/linux/sockios.h +++ b/include/uapi/linux/sockios.h @@ -125,7 +125,8 @@  #define SIOCBRDELIF	0x89a3		/* remove interface from bridge */  /* hardware time stamping: parameters in linux/net_tstamp.h */ -#define SIOCSHWTSTAMP   0x89b0 +#define SIOCSHWTSTAMP	0x89b0		/* set and get config		*/ +#define SIOCGHWTSTAMP	0x89b1		/* get config			*/  /* Device private ioctl calls */ diff --git a/include/uapi/linux/spi/spidev.h b/include/uapi/linux/spi/spidev.h index 52d9ed01855..dd5f21e7580 100644 --- a/include/uapi/linux/spi/spidev.h +++ b/include/uapi/linux/spi/spidev.h @@ -42,6 +42,10 @@  #define SPI_LOOP		0x20  #define SPI_NO_CS		0x40  #define SPI_READY		0x80 +#define SPI_TX_DUAL		0x100 +#define SPI_TX_QUAD		0x200 +#define SPI_RX_DUAL		0x400 +#define SPI_RX_QUAD		0x800  /*---------------------------------------------------------------------------*/ @@ -92,7 +96,9 @@ struct spi_ioc_transfer {  	__u16		delay_usecs;  	__u8		bits_per_word;  	__u8		cs_change; -	__u32		pad; +	__u8		tx_nbits; +	__u8		rx_nbits; +	__u16		pad;  	/* If the contents of 'struct spi_ioc_transfer' ever change  	 * incompatibly, then the ioctl number (currently 0) must change; @@ -110,7 +116,7 @@ struct spi_ioc_transfer {  #define SPI_IOC_MESSAGE(N) _IOW(SPI_IOC_MAGIC, 0, char[SPI_MSGSIZE(N)]) -/* Read / Write of SPI mode (SPI_MODE_0..SPI_MODE_3) */ +/* Read / Write of SPI mode (SPI_MODE_0..SPI_MODE_3) (limited to 8 bits) */  #define SPI_IOC_RD_MODE			_IOR(SPI_IOC_MAGIC, 1, __u8)  #define SPI_IOC_WR_MODE			_IOW(SPI_IOC_MAGIC, 1, __u8) @@ -126,6 +132,10 @@ struct spi_ioc_transfer {  #define SPI_IOC_RD_MAX_SPEED_HZ		_IOR(SPI_IOC_MAGIC, 4, __u32)  #define SPI_IOC_WR_MAX_SPEED_HZ		_IOW(SPI_IOC_MAGIC, 4, __u32) +/* Read / Write of the SPI mode field */ +#define SPI_IOC_RD_MODE32		_IOR(SPI_IOC_MAGIC, 5, __u32) +#define SPI_IOC_WR_MODE32		_IOW(SPI_IOC_MAGIC, 5, __u32) +  #endif /* SPIDEV_H */ diff --git a/include/uapi/linux/tc_act/tc_ipt.h b/include/uapi/linux/tc_act/tc_ipt.h index a2335563d21..130aaadf6fa 100644 --- a/include/uapi/linux/tc_act/tc_ipt.h +++ b/include/uapi/linux/tc_act/tc_ipt.h @@ -4,6 +4,7 @@  #include <linux/pkt_cls.h>  #define TCA_ACT_IPT 6 +#define TCA_ACT_XT 10  enum {  	TCA_IPT_UNSPEC, diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h index 377f1e59411..3b9718328d8 100644 --- a/include/uapi/linux/tcp.h +++ b/include/uapi/linux/tcp.h @@ -186,6 +186,9 @@ struct tcp_info {  	__u32	tcpi_rcv_space;  	__u32	tcpi_total_retrans; + +	__u64	tcpi_pacing_rate; +	__u64	tcpi_max_pacing_rate;  };  /* for TCP_MD5SIG socket option */ diff --git a/include/uapi/linux/tcp_metrics.h b/include/uapi/linux/tcp_metrics.h index cb5157b55f3..93533926035 100644 --- a/include/uapi/linux/tcp_metrics.h +++ b/include/uapi/linux/tcp_metrics.h @@ -11,12 +11,15 @@  #define TCP_METRICS_GENL_VERSION	0x1  enum tcp_metric_index { -	TCP_METRIC_RTT, -	TCP_METRIC_RTTVAR, +	TCP_METRIC_RTT,		/* in ms units */ +	TCP_METRIC_RTTVAR,	/* in ms units */  	TCP_METRIC_SSTHRESH,  	TCP_METRIC_CWND,  	TCP_METRIC_REORDERING, +	TCP_METRIC_RTT_US,	/* in usec units */ +	TCP_METRIC_RTTVAR_US,	/* in usec units */ +  	/* Always last.  */  	__TCP_METRIC_MAX,  }; @@ -35,6 +38,8 @@ enum {  	TCP_METRICS_ATTR_FOPEN_SYN_DROPS,	/* u16, count of drops */  	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS,	/* msecs age */  	TCP_METRICS_ATTR_FOPEN_COOKIE,		/* binary */ +	TCP_METRICS_ATTR_SADDR_IPV4,		/* u32 */ +	TCP_METRICS_ATTR_SADDR_IPV6,		/* binary */  	__TCP_METRICS_ATTR_MAX,  }; diff --git a/include/uapi/linux/timex.h b/include/uapi/linux/timex.h index a7ea81f1371..92685d82644 100644 --- a/include/uapi/linux/timex.h +++ b/include/uapi/linux/timex.h @@ -63,27 +63,27 @@   */  struct timex {  	unsigned int modes;	/* mode selector */ -	long offset;		/* time offset (usec) */ -	long freq;		/* frequency offset (scaled ppm) */ -	long maxerror;		/* maximum error (usec) */ -	long esterror;		/* estimated error (usec) */ +	__kernel_long_t offset;	/* time offset (usec) */ +	__kernel_long_t freq;	/* frequency offset (scaled ppm) */ +	__kernel_long_t maxerror;/* maximum error (usec) */ +	__kernel_long_t esterror;/* estimated error (usec) */  	int status;		/* clock command/status */ -	long constant;		/* pll time constant */ -	long precision;		/* clock precision (usec) (read only) */ -	long tolerance;		/* clock frequency tolerance (ppm) -				 * (read only) -				 */ +	__kernel_long_t constant;/* pll time constant */ +	__kernel_long_t precision;/* clock precision (usec) (read only) */ +	__kernel_long_t tolerance;/* clock frequency tolerance (ppm) +				   * (read only) +				   */  	struct timeval time;	/* (read only, except for ADJ_SETOFFSET) */ -	long tick;		/* (modified) usecs between clock ticks */ +	__kernel_long_t tick;	/* (modified) usecs between clock ticks */ -	long ppsfreq;           /* pps frequency (scaled ppm) (ro) */ -	long jitter;            /* pps jitter (us) (ro) */ +	__kernel_long_t ppsfreq;/* pps frequency (scaled ppm) (ro) */ +	__kernel_long_t jitter; /* pps jitter (us) (ro) */  	int shift;              /* interval duration (s) (shift) (ro) */ -	long stabil;            /* pps stability (scaled ppm) (ro) */ -	long jitcnt;            /* jitter limit exceeded (ro) */ -	long calcnt;            /* calibration intervals (ro) */ -	long errcnt;            /* calibration errors (ro) */ -	long stbcnt;            /* stability limit exceeded (ro) */ +	__kernel_long_t stabil;            /* pps stability (scaled ppm) (ro) */ +	__kernel_long_t jitcnt; /* jitter limit exceeded (ro) */ +	__kernel_long_t calcnt; /* calibration intervals (ro) */ +	__kernel_long_t errcnt; /* calibration errors (ro) */ +	__kernel_long_t stbcnt; /* stability limit exceeded (ro) */  	int tai;		/* TAI offset (ro) */ diff --git a/include/uapi/linux/tipc.h b/include/uapi/linux/tipc.h index 852373d27db..6f71b9b4159 100644 --- a/include/uapi/linux/tipc.h +++ b/include/uapi/linux/tipc.h @@ -38,6 +38,7 @@  #define _LINUX_TIPC_H_  #include <linux/types.h> +#include <linux/sockios.h>  /*   * TIPC addressing primitives @@ -87,6 +88,7 @@ static inline unsigned int tipc_node(__u32 addr)  #define TIPC_CFG_SRV		0	/* configuration service name type */  #define TIPC_TOP_SRV		1	/* topology service name type */ +#define TIPC_LINK_STATE		2	/* link state name type */  #define TIPC_RESERVED_TYPES	64	/* lowest user-publishable name type */  /* @@ -206,4 +208,25 @@ struct sockaddr_tipc {  #define TIPC_NODE_RECVQ_DEPTH	131	/* Default: none (read only) */  #define TIPC_SOCK_RECVQ_DEPTH	132	/* Default: none (read only) */ +/* + * Maximum sizes of TIPC bearer-related names (including terminating NULL) + * The string formatting for each name element is: + * media: media + * interface: media:interface name + * link: Z.C.N:interface-Z.C.N:interface + * + */ + +#define TIPC_MAX_MEDIA_NAME	16 +#define TIPC_MAX_IF_NAME	16 +#define TIPC_MAX_BEARER_NAME	32 +#define TIPC_MAX_LINK_NAME	60 + +#define SIOCGETLINKNAME		SIOCPROTOPRIVATE + +struct tipc_sioc_ln_req { +	__u32 peer; +	__u32 bearer_id; +	char linkname[TIPC_MAX_LINK_NAME]; +};  #endif diff --git a/include/uapi/linux/tipc_config.h b/include/uapi/linux/tipc_config.h index 6b0bff09b3a..41a76acbb30 100644 --- a/include/uapi/linux/tipc_config.h +++ b/include/uapi/linux/tipc_config.h @@ -39,6 +39,7 @@  #include <linux/types.h>  #include <linux/string.h> +#include <linux/tipc.h>  #include <asm/byteorder.h>  #ifndef __KERNEL__ @@ -155,15 +156,6 @@  #define TIPC_TLV_PORT_REF	26	/* 32-bit port reference */  /* - * Maximum sizes of TIPC bearer-related names (including terminating NUL) - */ - -#define TIPC_MAX_MEDIA_NAME	16	/* format = media */ -#define TIPC_MAX_IF_NAME	16	/* format = interface */ -#define TIPC_MAX_BEARER_NAME	32	/* format = media:interface */ -#define TIPC_MAX_LINK_NAME	60	/* format = Z.C.N:interface-Z.C.N:interface */ - -/*   * Link priority limits (min, default, max, media default)   */ diff --git a/include/uapi/linux/udp.h b/include/uapi/linux/udp.h index e2bcfd75a30..16574ea18f0 100644 --- a/include/uapi/linux/udp.h +++ b/include/uapi/linux/udp.h @@ -29,6 +29,8 @@ struct udphdr {  /* UDP socket options */  #define UDP_CORK	1	/* Never send partially complete segments */  #define UDP_ENCAP	100	/* Set the socket to accept encapsulated packets */ +#define UDP_NO_CHECK6_TX 101	/* Disable sending checksum for UDP6X */ +#define UDP_NO_CHECK6_RX 102	/* Disable accpeting checksum for UDP6 */  /* UDP encapsulation types */  #define UDP_ENCAP_ESPINUDP_NON_IKE	1 /* draft-ietf-ipsec-nat-t-ike-00/01 */ diff --git a/include/uapi/linux/uhid.h b/include/uapi/linux/uhid.h index 414b74be4da..1e3b09c191c 100644 --- a/include/uapi/linux/uhid.h +++ b/include/uapi/linux/uhid.h @@ -21,6 +21,7 @@  #include <linux/input.h>  #include <linux/types.h> +#include <linux/hid.h>  enum uhid_event_type {  	UHID_CREATE, @@ -34,6 +35,8 @@ enum uhid_event_type {  	UHID_INPUT,  	UHID_FEATURE,  	UHID_FEATURE_ANSWER, +	UHID_CREATE2, +	UHID_INPUT2,  };  struct uhid_create_req { @@ -50,6 +53,19 @@ struct uhid_create_req {  	__u32 country;  } __attribute__((__packed__)); +struct uhid_create2_req { +	__u8 name[128]; +	__u8 phys[64]; +	__u8 uniq[64]; +	__u16 rd_size; +	__u16 bus; +	__u32 vendor; +	__u32 product; +	__u32 version; +	__u32 country; +	__u8 rd_data[HID_MAX_DESCRIPTOR_SIZE]; +} __attribute__((__packed__)); +  #define UHID_DATA_MAX 4096  enum uhid_report_type { @@ -63,6 +79,11 @@ struct uhid_input_req {  	__u16 size;  } __attribute__((__packed__)); +struct uhid_input2_req { +	__u16 size; +	__u8 data[UHID_DATA_MAX]; +} __attribute__((__packed__)); +  struct uhid_output_req {  	__u8 data[UHID_DATA_MAX];  	__u16 size; @@ -100,6 +121,8 @@ struct uhid_event {  		struct uhid_output_ev_req output_ev;  		struct uhid_feature_req feature;  		struct uhid_feature_answer_req feature_answer; +		struct uhid_create2_req create2; +		struct uhid_input2_req input2;  	} u;  } __attribute__((__packed__)); diff --git a/include/uapi/linux/uinput.h b/include/uapi/linux/uinput.h index fe46431593f..0389b489bbb 100644 --- a/include/uapi/linux/uinput.h +++ b/include/uapi/linux/uinput.h @@ -20,6 +20,8 @@   * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>   *   * Changes/Revisions: + *	0.4	01/09/2014 (Benjamin Tissoires <benjamin.tissoires@redhat.com>) + *		- add UI_GET_SYSNAME ioctl   *	0.3	24/05/2006 (Anssi Hannula <anssi.hannulagmail.com>)   *		- update ff support for the changes in kernel interface   *		- add UINPUT_VERSION @@ -35,7 +37,7 @@  #include <linux/types.h>  #include <linux/input.h> -#define UINPUT_VERSION		3 +#define UINPUT_VERSION		4  struct uinput_ff_upload { @@ -73,6 +75,15 @@ struct uinput_ff_erase {  #define UI_BEGIN_FF_ERASE	_IOWR(UINPUT_IOCTL_BASE, 202, struct uinput_ff_erase)  #define UI_END_FF_ERASE		_IOW(UINPUT_IOCTL_BASE, 203, struct uinput_ff_erase) +/** + * UI_GET_SYSNAME - get the sysfs name of the created uinput device + * + * @return the sysfs name of the created virtual input device. + * The complete sysfs path is then /sys/devices/virtual/input/--NAME-- + * Usually, it is in the form "inputN" + */ +#define UI_GET_SYSNAME(len)	_IOC(_IOC_READ, UINPUT_IOCTL_BASE, 300, len) +  /*   * To write a force-feedback-capable driver, the upload_effect   * and erase_effect callbacks in input_dev must be implemented. diff --git a/include/uapi/linux/unix_diag.h b/include/uapi/linux/unix_diag.h index b9e2a6a7446..1eb0b8dd183 100644 --- a/include/uapi/linux/unix_diag.h +++ b/include/uapi/linux/unix_diag.h @@ -31,6 +31,7 @@ struct unix_diag_msg {  };  enum { +	/* UNIX_DIAG_NONE, standard nl API requires this attribute!  */  	UNIX_DIAG_NAME,  	UNIX_DIAG_VFS,  	UNIX_DIAG_PEER, diff --git a/include/uapi/linux/usb/Kbuild b/include/uapi/linux/usb/Kbuild index 6cb4ea82683..4cc4d6e7e52 100644 --- a/include/uapi/linux/usb/Kbuild +++ b/include/uapi/linux/usb/Kbuild @@ -1,6 +1,7 @@  # UAPI Header export list  header-y += audio.h  header-y += cdc.h +header-y += cdc-wdm.h  header-y += ch11.h  header-y += ch9.h  header-y += functionfs.h diff --git a/include/uapi/linux/usb/cdc-wdm.h b/include/uapi/linux/usb/cdc-wdm.h index f03134feebd..0dc132e7503 100644 --- a/include/uapi/linux/usb/cdc-wdm.h +++ b/include/uapi/linux/usb/cdc-wdm.h @@ -9,6 +9,8 @@  #ifndef _UAPI__LINUX_USB_CDC_WDM_H  #define _UAPI__LINUX_USB_CDC_WDM_H +#include <linux/types.h> +  /*   * This IOCTL is used to retrieve the wMaxCommand for the device,   * defining the message limit for both reading and writing. diff --git a/include/uapi/linux/usb/cdc.h b/include/uapi/linux/usb/cdc.h index f35aa0a338c..b6a9cdd6e09 100644 --- a/include/uapi/linux/usb/cdc.h +++ b/include/uapi/linux/usb/cdc.h @@ -56,6 +56,7 @@  #define USB_CDC_OBEX_TYPE		0x15  #define USB_CDC_NCM_TYPE		0x1a  #define USB_CDC_MBIM_TYPE		0x1b +#define USB_CDC_MBIM_EXTENDED_TYPE	0x1c  /* "Header Functional Descriptor" from CDC spec  5.2.3.1 */  struct usb_cdc_header_desc { @@ -205,6 +206,17 @@ struct usb_cdc_mbim_desc {  	__u8    bmNetworkCapabilities;  } __attribute__ ((packed)); +/* "MBIM Extended Functional Descriptor" from CDC MBIM spec 1.0 errata-1 */ +struct usb_cdc_mbim_extended_desc { +	__u8	bLength; +	__u8	bDescriptorType; +	__u8	bDescriptorSubType; + +	__le16	bcdMBIMExtendedVersion; +	__u8	bMaxOutstandingCommandMessages; +	__le16	wMTU; +} __attribute__ ((packed)); +  /*-------------------------------------------------------------------------*/  /* diff --git a/include/uapi/linux/usb/functionfs.h b/include/uapi/linux/usb/functionfs.h index d6b01283f85..24b68c59dcf 100644 --- a/include/uapi/linux/usb/functionfs.h +++ b/include/uapi/linux/usb/functionfs.h @@ -10,9 +10,15 @@  enum {  	FUNCTIONFS_DESCRIPTORS_MAGIC = 1, -	FUNCTIONFS_STRINGS_MAGIC     = 2 +	FUNCTIONFS_STRINGS_MAGIC = 2, +	FUNCTIONFS_DESCRIPTORS_MAGIC_V2 = 3,  }; +enum functionfs_flags { +	FUNCTIONFS_HAS_FS_DESC = 1, +	FUNCTIONFS_HAS_HS_DESC = 2, +	FUNCTIONFS_HAS_SS_DESC = 4, +};  #ifndef __KERNEL__ @@ -27,31 +33,48 @@ struct usb_endpoint_descriptor_no_audio {  	__u8  bInterval;  } __attribute__((packed)); - -/* - * All numbers must be in little endian order. - */ - +/* Legacy format, deprecated as of 3.14. */  struct usb_functionfs_descs_head {  	__le32 magic;  	__le32 length;  	__le32 fs_count;  	__le32 hs_count; -} __attribute__((packed)); +} __attribute__((packed, deprecated));  /*   * Descriptors format:   *   * | off | name      | type         | description                          |   * |-----+-----------+--------------+--------------------------------------| - * |   0 | magic     | LE32         | FUNCTIONFS_{FS,HS}_DESCRIPTORS_MAGIC | + * |   0 | magic     | LE32         | FUNCTIONFS_DESCRIPTORS_MAGIC_V2      | + * |   4 | length    | LE32         | length of the whole data chunk       | + * |   8 | flags     | LE32         | combination of functionfs_flags      | + * |     | fs_count  | LE32         | number of full-speed descriptors     | + * |     | hs_count  | LE32         | number of high-speed descriptors     | + * |     | ss_count  | LE32         | number of super-speed descriptors    | + * |     | fs_descrs | Descriptor[] | list of full-speed descriptors       | + * |     | hs_descrs | Descriptor[] | list of high-speed descriptors       | + * |     | ss_descrs | Descriptor[] | list of super-speed descriptors      | + * + * Depending on which flags are set, various fields may be missing in the + * structure.  Any flags that are not recognised cause the whole block to be + * rejected with -ENOSYS. + * + * Legacy descriptors format: + * + * | off | name      | type         | description                          | + * |-----+-----------+--------------+--------------------------------------| + * |   0 | magic     | LE32         | FUNCTIONFS_DESCRIPTORS_MAGIC         |   * |   4 | length    | LE32         | length of the whole data chunk       |   * |   8 | fs_count  | LE32         | number of full-speed descriptors     |   * |  12 | hs_count  | LE32         | number of high-speed descriptors     |   * |  16 | fs_descrs | Descriptor[] | list of full-speed descriptors       |   * |     | hs_descrs | Descriptor[] | list of high-speed descriptors       |   * - * descs are just valid USB descriptors and have the following format: + * All numbers must be in little endian order. + * + * Descriptor[] is an array of valid USB descriptors which have the following + * format:   *   * | off | name            | type | description              |   * |-----+-----------------+------+--------------------------| diff --git a/include/uapi/linux/usbdevice_fs.h b/include/uapi/linux/usbdevice_fs.h index 0c65e4b1261..abe5f4bd4d8 100644 --- a/include/uapi/linux/usbdevice_fs.h +++ b/include/uapi/linux/usbdevice_fs.h @@ -102,7 +102,10 @@ struct usbdevfs_urb {  	int buffer_length;  	int actual_length;  	int start_frame; -	int number_of_packets; +	union { +		int number_of_packets;	/* Only used for isoc urbs */ +		unsigned int stream_id;	/* Only used with bulk streams */ +	};  	int error_count;  	unsigned int signr;	/* signal to be sent on completion,  				  or 0 if none should be sent. */ @@ -144,6 +147,11 @@ struct usbdevfs_disconnect_claim {  	char driver[USBDEVFS_MAXDRIVERNAME + 1];  }; +struct usbdevfs_streams { +	unsigned int num_streams; /* Not used by USBDEVFS_FREE_STREAMS */ +	unsigned int num_eps; +	unsigned char eps[0]; +};  #define USBDEVFS_CONTROL           _IOWR('U', 0, struct usbdevfs_ctrltransfer)  #define USBDEVFS_CONTROL32           _IOWR('U', 0, struct usbdevfs_ctrltransfer32) @@ -176,5 +184,7 @@ struct usbdevfs_disconnect_claim {  #define USBDEVFS_RELEASE_PORT      _IOR('U', 25, unsigned int)  #define USBDEVFS_GET_CAPABILITIES  _IOR('U', 26, __u32)  #define USBDEVFS_DISCONNECT_CLAIM  _IOR('U', 27, struct usbdevfs_disconnect_claim) +#define USBDEVFS_ALLOC_STREAMS     _IOR('U', 28, struct usbdevfs_streams) +#define USBDEVFS_FREE_STREAMS      _IOR('U', 29, struct usbdevfs_streams)  #endif /* _UAPI_LINUX_USBDEVICE_FS_H */ diff --git a/include/uapi/linux/v4l2-common.h b/include/uapi/linux/v4l2-common.h index 4f0667e010d..2f6f8cafe77 100644 --- a/include/uapi/linux/v4l2-common.h +++ b/include/uapi/linux/v4l2-common.h @@ -29,6 +29,8 @@  #ifndef __V4L2_COMMON__  #define __V4L2_COMMON__ +#include <linux/types.h> +  /*   *   * Selection interface definitions @@ -68,4 +70,12 @@  #define V4L2_SUBDEV_SEL_FLAG_SIZE_LE	V4L2_SEL_FLAG_LE  #define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG V4L2_SEL_FLAG_KEEP_CONFIG +struct v4l2_edid { +	__u32 pad; +	__u32 start_block; +	__u32 blocks; +	__u32 reserved[5]; +	__u8  *edid; +}; +  #endif /* __V4L2_COMMON__ */ diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h index 083bb5a5aae..2ac5597f3ee 100644 --- a/include/uapi/linux/v4l2-controls.h +++ b/include/uapi/linux/v4l2-controls.h @@ -60,6 +60,7 @@  #define V4L2_CTRL_CLASS_IMAGE_PROC	0x009f0000	/* Image processing controls */  #define V4L2_CTRL_CLASS_DV		0x00a00000	/* Digital Video controls */  #define V4L2_CTRL_CLASS_FM_RX		0x00a10000	/* FM Receiver controls */ +#define V4L2_CTRL_CLASS_RF_TUNER	0x00a20000	/* RF tuner controls */  /* User-class control IDs */ @@ -160,6 +161,14 @@ enum v4l2_colorfx {   * of controls. Total of 16 controls is reserved for this driver */  #define V4L2_CID_USER_SI476X_BASE		(V4L2_CID_USER_BASE + 0x1040) +/* The base for the TI VPE driver controls. Total of 16 controls is reserved for + * this driver */ +#define V4L2_CID_USER_TI_VPE_BASE		(V4L2_CID_USER_BASE + 0x1050) + +/* The base for the saa7134 driver controls. + * We reserve 16 controls for this driver. */ +#define V4L2_CID_USER_SAA7134_BASE		(V4L2_CID_USER_BASE + 0x1060) +  /* MPEG-class control IDs */  /* The MPEG controls are applicable to all codec controls   * and the 'MPEG' part of the define is historical */ @@ -368,6 +377,8 @@ enum v4l2_mpeg_video_multi_slice_mode {  #define V4L2_CID_MPEG_VIDEO_DEC_FRAME			(V4L2_CID_MPEG_BASE+224)  #define V4L2_CID_MPEG_VIDEO_VBV_DELAY			(V4L2_CID_MPEG_BASE+225)  #define V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER		(V4L2_CID_MPEG_BASE+226) +#define V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE		(V4L2_CID_MPEG_BASE+227) +#define V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE		(V4L2_CID_MPEG_BASE+228)  #define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP		(V4L2_CID_MPEG_BASE+300)  #define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP		(V4L2_CID_MPEG_BASE+301) @@ -550,6 +561,11 @@ enum v4l2_vp8_golden_frame_sel {  	V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV		= 0,  	V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD	= 1,  }; +#define V4L2_CID_MPEG_VIDEO_VPX_MIN_QP			(V4L2_CID_MPEG_BASE+507) +#define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP			(V4L2_CID_MPEG_BASE+508) +#define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP		(V4L2_CID_MPEG_BASE+509) +#define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP		(V4L2_CID_MPEG_BASE+510) +#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE			(V4L2_CID_MPEG_BASE+511)  /*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */  #define V4L2_CID_MPEG_CX2341X_BASE 				(V4L2_CTRL_CLASS_MPEG | 0x1000) @@ -799,6 +815,9 @@ enum v4l2_flash_strobe_source {  #define V4L2_FLASH_FAULT_SHORT_CIRCUIT		(1 << 3)  #define V4L2_FLASH_FAULT_OVER_CURRENT		(1 << 4)  #define V4L2_FLASH_FAULT_INDICATOR		(1 << 5) +#define V4L2_FLASH_FAULT_UNDER_VOLTAGE		(1 << 6) +#define V4L2_FLASH_FAULT_INPUT_VOLTAGE		(1 << 7) +#define V4L2_FLASH_FAULT_LED_OVER_TEMPERATURE	(1 << 8)  #define V4L2_CID_FLASH_CHARGE			(V4L2_CID_FLASH_CLASS_BASE + 11)  #define V4L2_CID_FLASH_READY			(V4L2_CID_FLASH_CLASS_BASE + 12) @@ -882,4 +901,17 @@ enum v4l2_deemphasis {  #define V4L2_CID_RDS_RECEPTION			(V4L2_CID_FM_RX_CLASS_BASE + 2) +#define V4L2_CID_RF_TUNER_CLASS_BASE		(V4L2_CTRL_CLASS_RF_TUNER | 0x900) +#define V4L2_CID_RF_TUNER_CLASS			(V4L2_CTRL_CLASS_RF_TUNER | 1) + +#define V4L2_CID_RF_TUNER_BANDWIDTH_AUTO	(V4L2_CID_RF_TUNER_CLASS_BASE + 11) +#define V4L2_CID_RF_TUNER_BANDWIDTH		(V4L2_CID_RF_TUNER_CLASS_BASE + 12) +#define V4L2_CID_RF_TUNER_LNA_GAIN_AUTO		(V4L2_CID_RF_TUNER_CLASS_BASE + 41) +#define V4L2_CID_RF_TUNER_LNA_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 42) +#define V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO	(V4L2_CID_RF_TUNER_CLASS_BASE + 51) +#define V4L2_CID_RF_TUNER_MIXER_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 52) +#define V4L2_CID_RF_TUNER_IF_GAIN_AUTO		(V4L2_CID_RF_TUNER_CLASS_BASE + 61) +#define V4L2_CID_RF_TUNER_IF_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 62) +#define V4L2_CID_RF_TUNER_PLL_LOCK			(V4L2_CID_RF_TUNER_CLASS_BASE + 91) +  #endif diff --git a/include/uapi/linux/v4l2-dv-timings.h b/include/uapi/linux/v4l2-dv-timings.h index be709fe2955..6c8f159e416 100644 --- a/include/uapi/linux/v4l2-dv-timings.h +++ b/include/uapi/linux/v4l2-dv-timings.h @@ -173,6 +173,76 @@  		V4L2_DV_FL_CAN_REDUCE_FPS) \  } +#define V4L2_DV_BT_CEA_3840X2160P24 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		297000000, 1276, 88, 296, 8, 10, 72, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ +} + +#define V4L2_DV_BT_CEA_3840X2160P25 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		297000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, 0) \ +} + +#define V4L2_DV_BT_CEA_3840X2160P30 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		297000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ +} + +#define V4L2_DV_BT_CEA_3840X2160P50 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		594000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, 0) \ +} + +#define V4L2_DV_BT_CEA_3840X2160P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		594000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ +} + +#define V4L2_DV_BT_CEA_4096X2160P24 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		297000000, 1020, 88, 296, 8, 10, 72, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ +} + +#define V4L2_DV_BT_CEA_4096X2160P25 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		297000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, 0) \ +} + +#define V4L2_DV_BT_CEA_4096X2160P30 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		297000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ +} + +#define V4L2_DV_BT_CEA_4096X2160P50 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		594000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, 0) \ +} + +#define V4L2_DV_BT_CEA_4096X2160P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		594000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ +} +  /* VESA Discrete Monitor Timings as per version 1.0, revision 12 */ @@ -823,4 +893,21 @@  		V4L2_DV_FL_REDUCED_BLANKING) \  } +/* 4K resolutions */ +#define V4L2_DV_BT_DMT_4096X2160P60_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		556744000, 8, 32, 40, 48, 8, 6, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_4096X2160P59_94_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ +		556188000, 8, 32, 40, 48, 8, 6, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} +  #endif diff --git a/include/uapi/linux/v4l2-mediabus.h b/include/uapi/linux/v4l2-mediabus.h index a9601257bb4..1445e858854 100644 --- a/include/uapi/linux/v4l2-mediabus.h +++ b/include/uapi/linux/v4l2-mediabus.h @@ -52,7 +52,7 @@ enum v4l2_mbus_pixelcode {  	V4L2_MBUS_FMT_RGB888_2X12_LE = 0x100c,  	V4L2_MBUS_FMT_ARGB8888_1X32 = 0x100d, -	/* YUV (including grey) - next is 0x2018 */ +	/* YUV (including grey) - next is 0x2024 */  	V4L2_MBUS_FMT_Y8_1X8 = 0x2001,  	V4L2_MBUS_FMT_UV8_1X8 = 0x2015,  	V4L2_MBUS_FMT_UYVY8_1_5X8 = 0x2002, @@ -64,6 +64,8 @@ enum v4l2_mbus_pixelcode {  	V4L2_MBUS_FMT_YUYV8_2X8 = 0x2008,  	V4L2_MBUS_FMT_YVYU8_2X8 = 0x2009,  	V4L2_MBUS_FMT_Y10_1X10 = 0x200a, +	V4L2_MBUS_FMT_UYVY10_2X10 = 0x2018, +	V4L2_MBUS_FMT_VYUY10_2X10 = 0x2019,  	V4L2_MBUS_FMT_YUYV10_2X10 = 0x200b,  	V4L2_MBUS_FMT_YVYU10_2X10 = 0x200c,  	V4L2_MBUS_FMT_Y12_1X12 = 0x2013, @@ -72,10 +74,20 @@ enum v4l2_mbus_pixelcode {  	V4L2_MBUS_FMT_YUYV8_1X16 = 0x2011,  	V4L2_MBUS_FMT_YVYU8_1X16 = 0x2012,  	V4L2_MBUS_FMT_YDYUYDYV8_1X16 = 0x2014, +	V4L2_MBUS_FMT_UYVY10_1X20 = 0x201a, +	V4L2_MBUS_FMT_VYUY10_1X20 = 0x201b,  	V4L2_MBUS_FMT_YUYV10_1X20 = 0x200d,  	V4L2_MBUS_FMT_YVYU10_1X20 = 0x200e,  	V4L2_MBUS_FMT_YUV10_1X30 = 0x2016,  	V4L2_MBUS_FMT_AYUV8_1X32 = 0x2017, +	V4L2_MBUS_FMT_UYVY12_2X12 = 0x201c, +	V4L2_MBUS_FMT_VYUY12_2X12 = 0x201d, +	V4L2_MBUS_FMT_YUYV12_2X12 = 0x201e, +	V4L2_MBUS_FMT_YVYU12_2X12 = 0x201f, +	V4L2_MBUS_FMT_UYVY12_1X24 = 0x2020, +	V4L2_MBUS_FMT_VYUY12_1X24 = 0x2021, +	V4L2_MBUS_FMT_YUYV12_1X24 = 0x2022, +	V4L2_MBUS_FMT_YVYU12_1X24 = 0x2023,  	/* Bayer - next is 0x3019 */  	V4L2_MBUS_FMT_SBGGR8_1X8 = 0x3001, @@ -110,6 +122,9 @@ enum v4l2_mbus_pixelcode {  	/* S5C73M3 sensor specific interleaved UYVY and JPEG */  	V4L2_MBUS_FMT_S5C_UYVY_JPEG_1X8 = 0x5001, + +	/* HSV - next is 0x6002 */ +	V4L2_MBUS_FMT_AHSV8888_1X32 = 0x6001,  };  /** diff --git a/include/uapi/linux/v4l2-subdev.h b/include/uapi/linux/v4l2-subdev.h index a33c4daadce..a619cdd300a 100644 --- a/include/uapi/linux/v4l2-subdev.h +++ b/include/uapi/linux/v4l2-subdev.h @@ -148,33 +148,27 @@ struct v4l2_subdev_selection {  	__u32 reserved[8];  }; -struct v4l2_subdev_edid { -	__u32 pad; -	__u32 start_block; -	__u32 blocks; -	__u32 reserved[5]; -	__u8 __user *edid; -}; +/* Backwards compatibility define --- to be removed */ +#define v4l2_subdev_edid v4l2_edid -#define VIDIOC_SUBDEV_G_FMT	_IOWR('V',  4, struct v4l2_subdev_format) -#define VIDIOC_SUBDEV_S_FMT	_IOWR('V',  5, struct v4l2_subdev_format) -#define VIDIOC_SUBDEV_G_FRAME_INTERVAL \ -			_IOWR('V', 21, struct v4l2_subdev_frame_interval) -#define VIDIOC_SUBDEV_S_FRAME_INTERVAL \ -			_IOWR('V', 22, struct v4l2_subdev_frame_interval) -#define VIDIOC_SUBDEV_ENUM_MBUS_CODE \ -			_IOWR('V',  2, struct v4l2_subdev_mbus_code_enum) -#define VIDIOC_SUBDEV_ENUM_FRAME_SIZE \ -			_IOWR('V', 74, struct v4l2_subdev_frame_size_enum) -#define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \ -			_IOWR('V', 75, struct v4l2_subdev_frame_interval_enum) -#define VIDIOC_SUBDEV_G_CROP	_IOWR('V', 59, struct v4l2_subdev_crop) -#define VIDIOC_SUBDEV_S_CROP	_IOWR('V', 60, struct v4l2_subdev_crop) -#define VIDIOC_SUBDEV_G_SELECTION \ -	_IOWR('V', 61, struct v4l2_subdev_selection) -#define VIDIOC_SUBDEV_S_SELECTION \ -	_IOWR('V', 62, struct v4l2_subdev_selection) -#define VIDIOC_SUBDEV_G_EDID	_IOWR('V', 40, struct v4l2_subdev_edid) -#define VIDIOC_SUBDEV_S_EDID	_IOWR('V', 41, struct v4l2_subdev_edid) +#define VIDIOC_SUBDEV_G_FMT			_IOWR('V',  4, struct v4l2_subdev_format) +#define VIDIOC_SUBDEV_S_FMT			_IOWR('V',  5, struct v4l2_subdev_format) +#define VIDIOC_SUBDEV_G_FRAME_INTERVAL		_IOWR('V', 21, struct v4l2_subdev_frame_interval) +#define VIDIOC_SUBDEV_S_FRAME_INTERVAL		_IOWR('V', 22, struct v4l2_subdev_frame_interval) +#define VIDIOC_SUBDEV_ENUM_MBUS_CODE		_IOWR('V',  2, struct v4l2_subdev_mbus_code_enum) +#define VIDIOC_SUBDEV_ENUM_FRAME_SIZE		_IOWR('V', 74, struct v4l2_subdev_frame_size_enum) +#define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL	_IOWR('V', 75, struct v4l2_subdev_frame_interval_enum) +#define VIDIOC_SUBDEV_G_CROP			_IOWR('V', 59, struct v4l2_subdev_crop) +#define VIDIOC_SUBDEV_S_CROP			_IOWR('V', 60, struct v4l2_subdev_crop) +#define VIDIOC_SUBDEV_G_SELECTION		_IOWR('V', 61, struct v4l2_subdev_selection) +#define VIDIOC_SUBDEV_S_SELECTION		_IOWR('V', 62, struct v4l2_subdev_selection) +/* The following ioctls are identical to the ioctls in videodev2.h */ +#define VIDIOC_SUBDEV_G_EDID			_IOWR('V', 40, struct v4l2_edid) +#define VIDIOC_SUBDEV_S_EDID			_IOWR('V', 41, struct v4l2_edid) +#define VIDIOC_SUBDEV_S_DV_TIMINGS		_IOWR('V', 87, struct v4l2_dv_timings) +#define VIDIOC_SUBDEV_G_DV_TIMINGS		_IOWR('V', 88, struct v4l2_dv_timings) +#define VIDIOC_SUBDEV_ENUM_DV_TIMINGS		_IOWR('V', 98, struct v4l2_enum_dv_timings) +#define VIDIOC_SUBDEV_QUERY_DV_TIMINGS		_IOR('V', 99, struct v4l2_dv_timings) +#define VIDIOC_SUBDEV_DV_TIMINGS_CAP		_IOWR('V', 100, struct v4l2_dv_timings_cap)  #endif diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h index 0fd47f5bc14..cb9023d4f06 100644 --- a/include/uapi/linux/vfio.h +++ b/include/uapi/linux/vfio.h @@ -23,6 +23,12 @@  #define VFIO_TYPE1_IOMMU		1  #define VFIO_SPAPR_TCE_IOMMU		2 +#define VFIO_TYPE1v2_IOMMU		3 +/* + * IOMMU enforces DMA cache coherence (ex. PCIe NoSnoop stripping).  This + * capability is subject to change as groups are added or removed. + */ +#define VFIO_DMA_CC_IOMMU		4  /*   * The IOCTL interface is designed for extensibility by embedding the diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index 437f1b0f893..168ff507bf7 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -139,6 +139,7 @@ enum v4l2_buf_type {  #endif  	V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,  	V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10, +	V4L2_BUF_TYPE_SDR_CAPTURE          = 11,  	/* Deprecated, do not use */  	V4L2_BUF_TYPE_PRIVATE              = 0x80,  }; @@ -159,6 +160,8 @@ enum v4l2_tuner_type {  	V4L2_TUNER_RADIO	     = 1,  	V4L2_TUNER_ANALOG_TV	     = 2,  	V4L2_TUNER_DIGITAL_TV	     = 3, +	V4L2_TUNER_ADC               = 4, +	V4L2_TUNER_RF                = 5,  };  enum v4l2_memory { @@ -207,8 +210,8 @@ enum v4l2_priority {  struct v4l2_rect {  	__s32   left;  	__s32   top; -	__s32   width; -	__s32   height; +	__u32   width; +	__u32   height;  };  struct v4l2_fract { @@ -264,6 +267,8 @@ struct v4l2_capability {  #define V4L2_CAP_RADIO			0x00040000  /* is a radio device */  #define V4L2_CAP_MODULATOR		0x00080000  /* has a modulator */ +#define V4L2_CAP_SDR_CAPTURE		0x00100000  /* Is a SDR capture device */ +  #define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */  #define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */  #define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */ @@ -431,6 +436,10 @@ struct v4l2_pix_format {  #define V4L2_PIX_FMT_SE401      v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */  #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */ +/* SDR formats - used only for Software Defined Radio devices */ +#define V4L2_SDR_FMT_CU8          v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */ +#define V4L2_SDR_FMT_CU16LE       v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */ +  /*   *	F O R M A T   E N U M E R A T I O N   */ @@ -640,7 +649,6 @@ struct v4l2_plane {   * @length:	size in bytes of the buffer (NOT its payload) for single-plane   *		buffers (when type != *_MPLANE); number of elements in the   *		planes array for multi-plane buffers - * @input:	input number from which the video data has has been captured   *   * Contains data exchanged by application and driver using one of the Streaming   * I/O methods. @@ -669,24 +677,36 @@ struct v4l2_buffer {  };  /*  Flags for 'flags' field */ -#define V4L2_BUF_FLAG_MAPPED	0x0001  /* Buffer is mapped (flag) */ -#define V4L2_BUF_FLAG_QUEUED	0x0002	/* Buffer is queued for processing */ -#define V4L2_BUF_FLAG_DONE	0x0004	/* Buffer is ready */ -#define V4L2_BUF_FLAG_KEYFRAME	0x0008	/* Image is a keyframe (I-frame) */ -#define V4L2_BUF_FLAG_PFRAME	0x0010	/* Image is a P-frame */ -#define V4L2_BUF_FLAG_BFRAME	0x0020	/* Image is a B-frame */ +/* Buffer is mapped (flag) */ +#define V4L2_BUF_FLAG_MAPPED			0x00000001 +/* Buffer is queued for processing */ +#define V4L2_BUF_FLAG_QUEUED			0x00000002 +/* Buffer is ready */ +#define V4L2_BUF_FLAG_DONE			0x00000004 +/* Image is a keyframe (I-frame) */ +#define V4L2_BUF_FLAG_KEYFRAME			0x00000008 +/* Image is a P-frame */ +#define V4L2_BUF_FLAG_PFRAME			0x00000010 +/* Image is a B-frame */ +#define V4L2_BUF_FLAG_BFRAME			0x00000020  /* Buffer is ready, but the data contained within is corrupted. */ -#define V4L2_BUF_FLAG_ERROR	0x0040 -#define V4L2_BUF_FLAG_TIMECODE	0x0100	/* timecode field is valid */ -#define V4L2_BUF_FLAG_PREPARED	0x0400	/* Buffer is prepared for queuing */ +#define V4L2_BUF_FLAG_ERROR			0x00000040 +/* timecode field is valid */ +#define V4L2_BUF_FLAG_TIMECODE			0x00000100 +/* Buffer is prepared for queuing */ +#define V4L2_BUF_FLAG_PREPARED			0x00000400  /* Cache handling flags */ -#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE	0x0800 -#define V4L2_BUF_FLAG_NO_CACHE_CLEAN		0x1000 +#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE	0x00000800 +#define V4L2_BUF_FLAG_NO_CACHE_CLEAN		0x00001000  /* Timestamp type */ -#define V4L2_BUF_FLAG_TIMESTAMP_MASK		0xe000 -#define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN		0x0000 -#define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC	0x2000 -#define V4L2_BUF_FLAG_TIMESTAMP_COPY		0x4000 +#define V4L2_BUF_FLAG_TIMESTAMP_MASK		0x0000e000 +#define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN		0x00000000 +#define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC	0x00002000 +#define V4L2_BUF_FLAG_TIMESTAMP_COPY		0x00004000 +/* Timestamp sources. */ +#define V4L2_BUF_FLAG_TSTAMP_SRC_MASK		0x00070000 +#define V4L2_BUF_FLAG_TSTAMP_SRC_EOF		0x00000000 +#define V4L2_BUF_FLAG_TSTAMP_SRC_SOE		0x00010000  /**   * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor @@ -1059,14 +1079,14 @@ struct v4l2_bt_timings {  /* A few useful defines to calculate the total blanking and frame sizes */  #define V4L2_DV_BT_BLANKING_WIDTH(bt) \ -	(bt->hfrontporch + bt->hsync + bt->hbackporch) +	((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch)  #define V4L2_DV_BT_FRAME_WIDTH(bt) \ -	(bt->width + V4L2_DV_BT_BLANKING_WIDTH(bt)) +	((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))  #define V4L2_DV_BT_BLANKING_HEIGHT(bt) \ -	(bt->vfrontporch + bt->vsync + bt->vbackporch + \ -	 bt->il_vfrontporch + bt->il_vsync + bt->il_vbackporch) +	((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \ +	 (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch)  #define V4L2_DV_BT_FRAME_HEIGHT(bt) \ -	(bt->height + V4L2_DV_BT_BLANKING_HEIGHT(bt)) +	((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))  /** struct v4l2_dv_timings - DV timings   * @type:	the type of the timings @@ -1086,12 +1106,15 @@ struct v4l2_dv_timings {  /** struct v4l2_enum_dv_timings - DV timings enumeration   * @index:	enumeration index + * @pad:	the pad number for which to enumerate timings (used with + *		v4l-subdev nodes only)   * @reserved:	must be zeroed   * @timings:	the timings for the given index   */  struct v4l2_enum_dv_timings {  	__u32 index; -	__u32 reserved[3]; +	__u32 pad; +	__u32 reserved[2];  	struct v4l2_dv_timings timings;  }; @@ -1129,11 +1152,14 @@ struct v4l2_bt_timings_cap {  /** struct v4l2_dv_timings_cap - DV timings capabilities   * @type:	the type of the timings (same as in struct v4l2_dv_timings) + * @pad:	the pad number for which to query capabilities (used with + *		v4l-subdev nodes only)   * @bt:		the BT656/1120 timings capabilities   */  struct v4l2_dv_timings_cap {  	__u32 type; -	__u32 reserved[3]; +	__u32 pad; +	__u32 reserved[2];  	union {  		struct v4l2_bt_timings_cap bt;  		__u32 raw_data[32]; @@ -1339,6 +1365,7 @@ struct v4l2_modulator {  #define V4L2_TUNER_CAP_RDS_CONTROLS	0x0200  #define V4L2_TUNER_CAP_FREQ_BANDS	0x0400  #define V4L2_TUNER_CAP_HWSEEK_PROG_LIM	0x0800 +#define V4L2_TUNER_CAP_1HZ		0x1000  /*  Flags for the 'rxsubchans' field */  #define V4L2_TUNER_SUB_MONO		0x0001 @@ -1692,6 +1719,15 @@ struct v4l2_pix_format_mplane {  } __attribute__ ((packed));  /** + * struct v4l2_sdr_format - SDR format definition + * @pixelformat:	little endian four character code (fourcc) + */ +struct v4l2_sdr_format { +	__u32				pixelformat; +	__u8				reserved[28]; +} __attribute__ ((packed)); + +/**   * struct v4l2_format - stream data format   * @type:	enum v4l2_buf_type; type of the data stream   * @pix:	definition of an image format @@ -1709,6 +1745,7 @@ struct v4l2_format {  		struct v4l2_window		win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */  		struct v4l2_vbi_format		vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */  		struct v4l2_sliced_vbi_format	sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */ +		struct v4l2_sdr_format		sdr;     /* V4L2_BUF_TYPE_SDR_CAPTURE */  		__u8	raw_data[200];                   /* user-defined */  	} fmt;  }; @@ -1733,6 +1770,7 @@ struct v4l2_streamparm {  #define V4L2_EVENT_EOS				2  #define V4L2_EVENT_CTRL				3  #define V4L2_EVENT_FRAME_SYNC			4 +#define V4L2_EVENT_SOURCE_CHANGE		5  #define V4L2_EVENT_PRIVATE_START		0x08000000  /* Payload for V4L2_EVENT_VSYNC */ @@ -1764,12 +1802,19 @@ struct v4l2_event_frame_sync {  	__u32 frame_sequence;  }; +#define V4L2_EVENT_SRC_CH_RESOLUTION		(1 << 0) + +struct v4l2_event_src_change { +	__u32 changes; +}; +  struct v4l2_event {  	__u32				type;  	union {  		struct v4l2_event_vsync		vsync;  		struct v4l2_event_ctrl		ctrl;  		struct v4l2_event_frame_sync	frame_sync; +		struct v4l2_event_src_change	src_change;  		__u8				data[64];  	} u;  	__u32				pending; @@ -1885,6 +1930,8 @@ struct v4l2_create_buffers {  #define VIDIOC_QUERYMENU	_IOWR('V', 37, struct v4l2_querymenu)  #define VIDIOC_G_INPUT		 _IOR('V', 38, int)  #define VIDIOC_S_INPUT		_IOWR('V', 39, int) +#define VIDIOC_G_EDID		_IOWR('V', 40, struct v4l2_edid) +#define VIDIOC_S_EDID		_IOWR('V', 41, struct v4l2_edid)  #define VIDIOC_G_OUTPUT		 _IOR('V', 46, int)  #define VIDIOC_S_OUTPUT		_IOWR('V', 47, int)  #define VIDIOC_ENUMOUTPUT	_IOWR('V', 48, struct v4l2_output) diff --git a/include/uapi/linux/vsp1.h b/include/uapi/linux/vsp1.h new file mode 100644 index 00000000000..e18858f6e86 --- /dev/null +++ b/include/uapi/linux/vsp1.h @@ -0,0 +1,34 @@ +/* + * vsp1.h + * + * Renesas R-Car VSP1 - User-space API + * + * Copyright (C) 2013 Renesas Corporation + * + * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef __VSP1_USER_H__ +#define __VSP1_USER_H__ + +#include <linux/types.h> +#include <linux/videodev2.h> + +/* + * Private IOCTLs + * + * VIDIOC_VSP1_LUT_CONFIG - Configure the lookup table + */ + +#define VIDIOC_VSP1_LUT_CONFIG \ +	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct vsp1_lut_config) + +struct vsp1_lut_config { +	u32 lut[256]; +}; + +#endif	/* __VSP1_USER_H__ */ diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h index e4629b93bdd..c38355c1f3c 100644 --- a/include/uapi/linux/xattr.h +++ b/include/uapi/linux/xattr.h @@ -7,11 +7,18 @@    Copyright (c) 2001-2002 Silicon Graphics, Inc.  All Rights Reserved.    Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>  */ + +#include <linux/libc-compat.h> +  #ifndef _UAPI_LINUX_XATTR_H  #define _UAPI_LINUX_XATTR_H +#ifdef __UAPI_DEF_XATTR +#define __USE_KERNEL_XATTR_DEFS +  #define XATTR_CREATE	0x1	/* set value, fail if attr already exists */  #define XATTR_REPLACE	0x2	/* set value, fail if attr does not exist */ +#endif  /* Namespaces */  #define XATTR_OS2_PREFIX "os2." @@ -20,6 +27,9 @@  #define XATTR_MAC_OSX_PREFIX "osx."  #define XATTR_MAC_OSX_PREFIX_LEN (sizeof(XATTR_MAC_OSX_PREFIX) - 1) +#define XATTR_BTRFS_PREFIX "btrfs." +#define XATTR_BTRFS_PREFIX_LEN (sizeof(XATTR_BTRFS_PREFIX) - 1) +  #define XATTR_SECURITY_PREFIX	"security."  #define XATTR_SECURITY_PREFIX_LEN (sizeof(XATTR_SECURITY_PREFIX) - 1) diff --git a/include/uapi/linux/xfrm.h b/include/uapi/linux/xfrm.h index a8cd6a4a297..25e5dd916ba 100644 --- a/include/uapi/linux/xfrm.h +++ b/include/uapi/linux/xfrm.h @@ -298,6 +298,8 @@ enum xfrm_attr_type_t {  	XFRMA_TFCPAD,		/* __u32 */  	XFRMA_REPLAY_ESN_VAL,	/* struct xfrm_replay_esn */  	XFRMA_SA_EXTRA_FLAGS,	/* __u32 */ +	XFRMA_PROTO,		/* __u8 */ +	XFRMA_ADDRESS_FILTER,	/* struct xfrm_address_filter */  	__XFRMA_MAX  #define XFRMA_MAX (__XFRMA_MAX - 1) @@ -474,6 +476,14 @@ struct xfrm_user_mapping {  	__be16				new_sport;  }; +struct xfrm_address_filter { +	xfrm_address_t			saddr; +	xfrm_address_t			daddr; +	__u16				family; +	__u8				splen; +	__u8				dplen; +}; +  #ifndef __KERNEL__  /* backwards compatibility for userspace */  #define XFRMGRP_ACQUIRE		1 diff --git a/include/uapi/linux/zorro.h b/include/uapi/linux/zorro.h new file mode 100644 index 00000000000..59d021b242e --- /dev/null +++ b/include/uapi/linux/zorro.h @@ -0,0 +1,113 @@ +/* + *  linux/zorro.h -- Amiga AutoConfig (Zorro) Bus Definitions + * + *  Copyright (C) 1995--2003 Geert Uytterhoeven + * + *  This file is subject to the terms and conditions of the GNU General Public + *  License.  See the file COPYING in the main directory of this archive + *  for more details. + */ + +#ifndef _UAPI_LINUX_ZORRO_H +#define _UAPI_LINUX_ZORRO_H + +#include <linux/types.h> + + +    /* +     *  Each Zorro board has a 32-bit ID of the form +     * +     *      mmmmmmmmmmmmmmmmppppppppeeeeeeee +     * +     *  with +     * +     *      mmmmmmmmmmmmmmmm	16-bit Manufacturer ID (assigned by CBM (sigh)) +     *      pppppppp		8-bit Product ID (assigned by manufacturer) +     *      eeeeeeee		8-bit Extended Product ID (currently only used +     *				for some GVP boards) +     */ + + +#define ZORRO_MANUF(id)		((id) >> 16) +#define ZORRO_PROD(id)		(((id) >> 8) & 0xff) +#define ZORRO_EPC(id)		((id) & 0xff) + +#define ZORRO_ID(manuf, prod, epc) \ +	((ZORRO_MANUF_##manuf << 16) | ((prod) << 8) | (epc)) + +typedef __u32 zorro_id; + + +/* Include the ID list */ +#include <linux/zorro_ids.h> + + +    /* +     *  GVP identifies most of its products through the 'extended product code' +     *  (epc). The epc has to be ANDed with the GVP_PRODMASK before the +     *  identification. +     */ + +#define GVP_PRODMASK		(0xf8) +#define GVP_SCSICLKMASK		(0x01) + +enum GVP_flags { +	GVP_IO			= 0x01, +	GVP_ACCEL		= 0x02, +	GVP_SCSI		= 0x04, +	GVP_24BITDMA		= 0x08, +	GVP_25BITDMA		= 0x10, +	GVP_NOBANK		= 0x20, +	GVP_14MHZ		= 0x40, +}; + + +struct Node { +	__be32 ln_Succ;		/* Pointer to next (successor) */ +	__be32 ln_Pred;		/* Pointer to previous (predecessor) */ +	__u8   ln_Type; +	__s8   ln_Pri;		/* Priority, for sorting */ +	__be32 ln_Name;		/* ID string, null terminated */ +} __packed; + +struct ExpansionRom { +	/* -First 16 bytes of the expansion ROM */ +	__u8   er_Type;		/* Board type, size and flags */ +	__u8   er_Product;	/* Product number, assigned by manufacturer */ +	__u8   er_Flags;		/* Flags */ +	__u8   er_Reserved03;	/* Must be zero ($ff inverted) */ +	__be16 er_Manufacturer;	/* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */ +	__be32 er_SerialNumber;	/* Available for use by manufacturer */ +	__be16 er_InitDiagVec;	/* Offset to optional "DiagArea" structure */ +	__u8   er_Reserved0c; +	__u8   er_Reserved0d; +	__u8   er_Reserved0e; +	__u8   er_Reserved0f; +} __packed; + +/* er_Type board type bits */ +#define ERT_TYPEMASK	0xc0 +#define ERT_ZORROII	0xc0 +#define ERT_ZORROIII	0x80 + +/* other bits defined in er_Type */ +#define ERTB_MEMLIST	5		/* Link RAM into free memory list */ +#define ERTF_MEMLIST	(1<<5) + +struct ConfigDev { +	struct Node	cd_Node; +	__u8		cd_Flags;	/* (read/write) */ +	__u8		cd_Pad;		/* reserved */ +	struct ExpansionRom cd_Rom;	/* copy of board's expansion ROM */ +	__be32		cd_BoardAddr;	/* where in memory the board was placed */ +	__be32		cd_BoardSize;	/* size of board in bytes */ +	__be16		cd_SlotAddr;	/* which slot number (PRIVATE) */ +	__be16		cd_SlotSize;	/* number of slots (PRIVATE) */ +	__be32		cd_Driver;	/* pointer to node of driver */ +	__be32		cd_NextCD;	/* linked list of drivers to config */ +	__be32		cd_Unused[4];	/* for whatever the driver wants */ +} __packed; + +#define ZORRO_NUM_AUTO		16 + +#endif /* _UAPI_LINUX_ZORRO_H */ diff --git a/include/uapi/linux/zorro_ids.h b/include/uapi/linux/zorro_ids.h new file mode 100644 index 00000000000..74bc53bcfdc --- /dev/null +++ b/include/uapi/linux/zorro_ids.h @@ -0,0 +1,552 @@ +/* + *  Zorro board IDs + * + *  Please keep sorted. + */ + + +#define ZORRO_MANUF_PACIFIC_PERIPHERALS				0x00D3 +#define  ZORRO_PROD_PACIFIC_PERIPHERALS_SE_2000_A500		ZORRO_ID(PACIFIC_PERIPHERALS, 0x00, 0) +#define  ZORRO_PROD_PACIFIC_PERIPHERALS_SCSI			ZORRO_ID(PACIFIC_PERIPHERALS, 0x0A, 0) + +#define ZORRO_MANUF_MACROSYSTEMS_USA_2				0x0100 +#define  ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE			ZORRO_ID(MACROSYSTEMS_USA_2, 0x13, 0) + +#define ZORRO_MANUF_KUPKE_1					0x00DD +#define  ZORRO_PROD_KUPKE_GOLEM_RAM_BOX_2MB			ZORRO_ID(KUPKE_1, 0x00, 0) + +#define ZORRO_MANUF_MEMPHIS					0x0100 +#define  ZORRO_PROD_MEMPHIS_STORMBRINGER			ZORRO_ID(MEMPHIS, 0x00, 0) + +#define ZORRO_MANUF_3_STATE					0x0200 +#define  ZORRO_PROD_3_STATE_MEGAMIX_2000			ZORRO_ID(3_STATE, 0x02, 0) + +#define ZORRO_MANUF_COMMODORE_BRAUNSCHWEIG			0x0201 +#define  ZORRO_PROD_CBM_A2088_A2286				ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x01, 0) +#define  ZORRO_PROD_CBM_A2286					ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x02, 0) +#define  ZORRO_PROD_CBM_A4091_1					ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x54, 0) +#define  ZORRO_PROD_CBM_A2386SX_1				ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x67, 0) + +#define ZORRO_MANUF_COMMODORE_WEST_CHESTER_1			0x0202 +#define  ZORRO_PROD_CBM_A2090A					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x01, 0) +#define  ZORRO_PROD_CBM_A590_A2091_1				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x02, 0) +#define  ZORRO_PROD_CBM_A590_A2091_2				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x03, 0) +#define  ZORRO_PROD_CBM_A2090B					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x04, 0) +#define  ZORRO_PROD_CBM_A2060					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x09, 0) +#define  ZORRO_PROD_CBM_A590_A2052_A2058_A2091			ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x0A, 0) +#define  ZORRO_PROD_CBM_A560_RAM				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x20, 0) +#define  ZORRO_PROD_CBM_A2232_PROTOTYPE				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x45, 0) +#define  ZORRO_PROD_CBM_A2232					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x46, 0) +#define  ZORRO_PROD_CBM_A2620					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x50, 0) +#define  ZORRO_PROD_CBM_A2630					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x51, 0) +#define  ZORRO_PROD_CBM_A4091_2					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x54, 0) +#define  ZORRO_PROD_CBM_A2065_1					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x5A, 0) +#define  ZORRO_PROD_CBM_ROMULATOR				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x60, 0) +#define  ZORRO_PROD_CBM_A3000_TEST_FIXTURE			ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x61, 0) +#define  ZORRO_PROD_CBM_A2386SX_2				ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x67, 0) +#define  ZORRO_PROD_CBM_A2065_2					ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x70, 0) + +#define ZORRO_MANUF_COMMODORE_WEST_CHESTER_2			0x0203 +#define  ZORRO_PROD_CBM_A2090A_CM				ZORRO_ID(COMMODORE_WEST_CHESTER_2, 0x03, 0) + +#define ZORRO_MANUF_PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_2	0x02F4 +#define  ZORRO_PROD_PPS_EXP8000					ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_2, 0x02, 0) + +#define ZORRO_MANUF_KOLFF_COMPUTER_SUPPLIES			0x02FF +#define  ZORRO_PROD_KCS_POWER_PC_BOARD				ZORRO_ID(KOLFF_COMPUTER_SUPPLIES, 0x00, 0) + +#define ZORRO_MANUF_CARDCO_1					0x03EC +#define  ZORRO_PROD_CARDCO_KRONOS_2000_1			ZORRO_ID(CARDCO_1, 0x04, 0) +#define  ZORRO_PROD_CARDCO_A1000_1				ZORRO_ID(CARDCO_1, 0x0C, 0) +#define  ZORRO_PROD_CARDCO_ESCORT				ZORRO_ID(CARDCO_1, 0x0E, 0) +#define  ZORRO_PROD_CARDCO_A2410				ZORRO_ID(CARDCO_1, 0xF5, 0) + +#define ZORRO_MANUF_A_SQUARED					0x03ED +#define  ZORRO_PROD_A_SQUARED_LIVE_2000				ZORRO_ID(A_SQUARED, 0x01, 0) + +#define ZORRO_MANUF_COMSPEC_COMMUNICATIONS			0x03EE +#define  ZORRO_PROD_COMSPEC_COMMUNICATIONS_AX2000		ZORRO_ID(COMSPEC_COMMUNICATIONS, 0x01, 0) + +#define ZORRO_MANUF_ANAKIN_RESEARCH				0x03F1 +#define  ZORRO_PROD_ANAKIN_RESEARCH_EASYL			ZORRO_ID(ANAKIN_RESEARCH, 0x01, 0) + +#define ZORRO_MANUF_MICROBOTICS					0x03F2 +#define  ZORRO_PROD_MICROBOTICS_STARBOARD_II			ZORRO_ID(MICROBOTICS, 0x00, 0) +#define  ZORRO_PROD_MICROBOTICS_STARDRIVE			ZORRO_ID(MICROBOTICS, 0x02, 0) +#define  ZORRO_PROD_MICROBOTICS_8_UP_A				ZORRO_ID(MICROBOTICS, 0x03, 0) +#define  ZORRO_PROD_MICROBOTICS_8_UP_Z				ZORRO_ID(MICROBOTICS, 0x04, 0) +#define  ZORRO_PROD_MICROBOTICS_DELTA_RAM			ZORRO_ID(MICROBOTICS, 0x20, 0) +#define  ZORRO_PROD_MICROBOTICS_8_STAR_RAM			ZORRO_ID(MICROBOTICS, 0x40, 0) +#define  ZORRO_PROD_MICROBOTICS_8_STAR				ZORRO_ID(MICROBOTICS, 0x41, 0) +#define  ZORRO_PROD_MICROBOTICS_VXL_RAM_32			ZORRO_ID(MICROBOTICS, 0x44, 0) +#define  ZORRO_PROD_MICROBOTICS_VXL_68030			ZORRO_ID(MICROBOTICS, 0x45, 0) +#define  ZORRO_PROD_MICROBOTICS_DELTA				ZORRO_ID(MICROBOTICS, 0x60, 0) +#define  ZORRO_PROD_MICROBOTICS_MBX_1200_1200Z_RAM		ZORRO_ID(MICROBOTICS, 0x81, 0) +#define  ZORRO_PROD_MICROBOTICS_HARDFRAME_2000_1		ZORRO_ID(MICROBOTICS, 0x96, 0) +#define  ZORRO_PROD_MICROBOTICS_HARDFRAME_2000_2		ZORRO_ID(MICROBOTICS, 0x9E, 0) +#define  ZORRO_PROD_MICROBOTICS_MBX_1200_1200Z			ZORRO_ID(MICROBOTICS, 0xC1, 0) + +#define ZORRO_MANUF_ACCESS_ASSOCIATES_ALEGRA			0x03F4 + +#define ZORRO_MANUF_EXPANSION_TECHNOLOGIES			0x03F6 + +#define ZORRO_MANUF_ASDG					0x03FF +#define  ZORRO_PROD_ASDG_MEMORY_1				ZORRO_ID(ASDG, 0x01, 0) +#define  ZORRO_PROD_ASDG_MEMORY_2				ZORRO_ID(ASDG, 0x02, 0) +#define  ZORRO_PROD_ASDG_EB920_LAN_ROVER			ZORRO_ID(ASDG, 0xFE, 0) +#define  ZORRO_PROD_ASDG_GPIB_DUALIEEE488_TWIN_X		ZORRO_ID(ASDG, 0xFF, 0) + +#define ZORRO_MANUF_IMTRONICS_1					0x0404 +#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_1			ZORRO_ID(IMTRONICS_1, 0x39, 0) +#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_2			ZORRO_ID(IMTRONICS_1, 0x57, 0) + +#define ZORRO_MANUF_CBM_UNIVERSITY_OF_LOWELL			0x0406 +#define  ZORRO_PROD_CBM_A2410					ZORRO_ID(CBM_UNIVERSITY_OF_LOWELL, 0x00, 0) + +#define ZORRO_MANUF_AMERISTAR					0x041D +#define  ZORRO_PROD_AMERISTAR_A2065				ZORRO_ID(AMERISTAR, 0x01, 0) +#define  ZORRO_PROD_AMERISTAR_A560				ZORRO_ID(AMERISTAR, 0x09, 0) +#define  ZORRO_PROD_AMERISTAR_A4066				ZORRO_ID(AMERISTAR, 0x0A, 0) + +#define ZORRO_MANUF_SUPRA					0x0420 +#define  ZORRO_PROD_SUPRA_SUPRADRIVE_4x4			ZORRO_ID(SUPRA, 0x01, 0) +#define  ZORRO_PROD_SUPRA_1000_RAM				ZORRO_ID(SUPRA, 0x02, 0) +#define  ZORRO_PROD_SUPRA_2000_DMA				ZORRO_ID(SUPRA, 0x03, 0) +#define  ZORRO_PROD_SUPRA_500					ZORRO_ID(SUPRA, 0x05, 0) +#define  ZORRO_PROD_SUPRA_500_SCSI				ZORRO_ID(SUPRA, 0x08, 0) +#define  ZORRO_PROD_SUPRA_500XP_2000_RAM			ZORRO_ID(SUPRA, 0x09, 0) +#define  ZORRO_PROD_SUPRA_500RX_2000_RAM			ZORRO_ID(SUPRA, 0x0A, 0) +#define  ZORRO_PROD_SUPRA_2400ZI				ZORRO_ID(SUPRA, 0x0B, 0) +#define  ZORRO_PROD_SUPRA_500XP_SUPRADRIVE_WORDSYNC		ZORRO_ID(SUPRA, 0x0C, 0) +#define  ZORRO_PROD_SUPRA_SUPRADRIVE_WORDSYNC_II		ZORRO_ID(SUPRA, 0x0D, 0) +#define  ZORRO_PROD_SUPRA_2400ZIPLUS				ZORRO_ID(SUPRA, 0x10, 0) + +#define ZORRO_MANUF_COMPUTER_SYSTEMS_ASSOCIATES			0x0422 +#define  ZORRO_PROD_CSA_MAGNUM					ZORRO_ID(COMPUTER_SYSTEMS_ASSOCIATES, 0x11, 0) +#define  ZORRO_PROD_CSA_12_GAUGE				ZORRO_ID(COMPUTER_SYSTEMS_ASSOCIATES, 0x15, 0) + +#define ZORRO_MANUF_MARC_MICHAEL_GROTH				0x0439 + +#define ZORRO_MANUF_M_TECH					0x0502 +#define  ZORRO_PROD_MTEC_AT500_1				ZORRO_ID(M_TECH, 0x03, 0) + +#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_1			0x06E1 +#define  ZORRO_PROD_GVP_IMPACT_SERIES_I				ZORRO_ID(GREAT_VALLEY_PRODUCTS_1, 0x08, 0) + +#define ZORRO_MANUF_BYTEBOX					0x07DA +#define  ZORRO_PROD_BYTEBOX_A500				ZORRO_ID(BYTEBOX, 0x00, 0) + +#define ZORRO_MANUF_DKB_POWER_COMPUTING				0x07DC +#define  ZORRO_PROD_DKB_POWER_COMPUTING_SECUREKEY		ZORRO_ID(DKB_POWER_COMPUTING, 0x09, 0) +#define  ZORRO_PROD_DKB_POWER_COMPUTING_DKM_3128		ZORRO_ID(DKB_POWER_COMPUTING, 0x0E, 0) +#define  ZORRO_PROD_DKB_POWER_COMPUTING_RAPID_FIRE		ZORRO_ID(DKB_POWER_COMPUTING, 0x0F, 0) +#define  ZORRO_PROD_DKB_POWER_COMPUTING_DKM_1202		ZORRO_ID(DKB_POWER_COMPUTING, 0x10, 0) +#define  ZORRO_PROD_DKB_POWER_COMPUTING_COBRA_VIPER_II_68EC030	ZORRO_ID(DKB_POWER_COMPUTING, 0x12, 0) +#define  ZORRO_PROD_DKB_POWER_COMPUTING_WILDFIRE_060_1		ZORRO_ID(DKB_POWER_COMPUTING, 0x17, 0) +#define  ZORRO_PROD_DKB_POWER_COMPUTING_WILDFIRE_060_2		ZORRO_ID(DKB_POWER_COMPUTING, 0xFF, 0) + +#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_2			0x07E1 +#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_4K			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x01, 0) +#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_16K_2			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x02, 0) +#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_16K_3			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x03, 0) +#define  ZORRO_PROD_GVP_IMPACT_3001_IDE_1			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x08, 0) +#define  ZORRO_PROD_GVP_IMPACT_3001_RAM				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x09, 0) +#define  ZORRO_PROD_GVP_IMPACT_SERIES_II_RAM_1			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0A, 0) +#define  ZORRO_PROD_GVP_EPC_BASE				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0) +#define  ZORRO_PROD_GVP_GFORCE_040_1				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x20) +#define  ZORRO_PROD_GVP_GFORCE_040_SCSI_1			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x30) +#define  ZORRO_PROD_GVP_A1291					ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x40) +#define  ZORRO_PROD_GVP_COMBO_030_R4				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x60) +#define  ZORRO_PROD_GVP_COMBO_030_R4_SCSI			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x70) +#define  ZORRO_PROD_GVP_PHONEPAK				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x78) +#define  ZORRO_PROD_GVP_IO_EXTENDER				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x98) +#define  ZORRO_PROD_GVP_GFORCE_030				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xa0) +#define  ZORRO_PROD_GVP_GFORCE_030_SCSI				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xb0) +#define  ZORRO_PROD_GVP_A530					ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xc0) +#define  ZORRO_PROD_GVP_A530_SCSI				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xd0) +#define  ZORRO_PROD_GVP_COMBO_030_R3				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xe0) +#define  ZORRO_PROD_GVP_COMBO_030_R3_SCSI			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xf0) +#define  ZORRO_PROD_GVP_SERIES_II				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xf8) +#define  ZORRO_PROD_GVP_IMPACT_3001_IDE_2			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0) +/*#define  ZORRO_PROD_GVP_A2000_030				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)*/ +/*#define  ZORRO_PROD_GVP_GFORCE_040_SCSI_2			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)*/ +#define  ZORRO_PROD_GVP_GFORCE_040_060				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x16, 0) +#define  ZORRO_PROD_GVP_IMPACT_VISION_24			ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x20, 0) +#define  ZORRO_PROD_GVP_GFORCE_040_2				ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0xFF, 0) + +#define ZORRO_MANUF_CALIFORNIA_ACCESS_SYNERGY			0x07E5 +#define  ZORRO_PROD_CALIFORNIA_ACCESS_SYNERGY_MALIBU		ZORRO_ID(CALIFORNIA_ACCESS_SYNERGY, 0x01, 0) + +#define ZORRO_MANUF_XETEC					0x07E6 +#define  ZORRO_PROD_XETEC_FASTCARD				ZORRO_ID(XETEC, 0x01, 0) +#define  ZORRO_PROD_XETEC_FASTCARD_RAM				ZORRO_ID(XETEC, 0x02, 0) +#define  ZORRO_PROD_XETEC_FASTCARD_PLUS				ZORRO_ID(XETEC, 0x03, 0) + +#define ZORRO_MANUF_PROGRESSIVE_PERIPHERALS_AND_SYSTEMS		0x07EA +#define  ZORRO_PROD_PPS_MERCURY					ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x00, 0) +#define  ZORRO_PROD_PPS_A3000_68040				ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x01, 0) +#define  ZORRO_PROD_PPS_A2000_68040				ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x69, 0) +#define  ZORRO_PROD_PPS_ZEUS					ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x96, 0) +#define  ZORRO_PROD_PPS_A500_68040				ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0xBB, 0) + +#define ZORRO_MANUF_XEBEC					0x07EC + +#define ZORRO_MANUF_SPIRIT_TECHNOLOGY				0x07F2 +#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INSIDER_IN1000		ZORRO_ID(SPIRIT_TECHNOLOGY, 0x01, 0) +#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INSIDER_IN500		ZORRO_ID(SPIRIT_TECHNOLOGY, 0x02, 0) +#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_SIN500			ZORRO_ID(SPIRIT_TECHNOLOGY, 0x03, 0) +#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_HDA_506			ZORRO_ID(SPIRIT_TECHNOLOGY, 0x04, 0) +#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_AX_S			ZORRO_ID(SPIRIT_TECHNOLOGY, 0x05, 0) +#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_OCTABYTE			ZORRO_ID(SPIRIT_TECHNOLOGY, 0x06, 0) +#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INMATE			ZORRO_ID(SPIRIT_TECHNOLOGY, 0x08, 0) + +#define ZORRO_MANUF_SPIRIT_TECHNOLOGY_2				0x07F3 + +#define ZORRO_MANUF_BSC_ALFADATA_1				0x07FE +#define  ZORRO_PROD_BSC_ALF_3_1					ZORRO_ID(BSC_ALFADATA_1, 0x03, 0) + +#define ZORRO_MANUF_BSC_ALFADATA_2				0x0801 +#define  ZORRO_PROD_BSC_ALF_2_1					ZORRO_ID(BSC_ALFADATA_2, 0x01, 0) +#define  ZORRO_PROD_BSC_ALF_2_2					ZORRO_ID(BSC_ALFADATA_2, 0x02, 0) +#define  ZORRO_PROD_BSC_ALF_3_2					ZORRO_ID(BSC_ALFADATA_2, 0x03, 0) + +#define ZORRO_MANUF_CARDCO_2					0x0802 +#define  ZORRO_PROD_CARDCO_KRONOS_2000_2			ZORRO_ID(CARDCO_2, 0x04, 0) +#define  ZORRO_PROD_CARDCO_A1000_2				ZORRO_ID(CARDCO_2, 0x0C, 0) + +#define ZORRO_MANUF_JOCHHEIM					0x0804 +#define  ZORRO_PROD_JOCHHEIM_RAM				ZORRO_ID(JOCHHEIM, 0x01, 0) + +#define ZORRO_MANUF_CHECKPOINT_TECHNOLOGIES			0x0807 +#define  ZORRO_PROD_CHECKPOINT_TECHNOLOGIES_SERIAL_SOLUTION	ZORRO_ID(CHECKPOINT_TECHNOLOGIES, 0x00, 0) + +#define ZORRO_MANUF_EDOTRONIK					0x0810 +#define  ZORRO_PROD_EDOTRONIK_IEEE_488				ZORRO_ID(EDOTRONIK, 0x01, 0) +#define  ZORRO_PROD_EDOTRONIK_8032				ZORRO_ID(EDOTRONIK, 0x02, 0) +#define  ZORRO_PROD_EDOTRONIK_MULTISERIAL			ZORRO_ID(EDOTRONIK, 0x03, 0) +#define  ZORRO_PROD_EDOTRONIK_VIDEODIGITIZER			ZORRO_ID(EDOTRONIK, 0x04, 0) +#define  ZORRO_PROD_EDOTRONIK_PARALLEL_IO			ZORRO_ID(EDOTRONIK, 0x05, 0) +#define  ZORRO_PROD_EDOTRONIK_PIC_PROTOYPING			ZORRO_ID(EDOTRONIK, 0x06, 0) +#define  ZORRO_PROD_EDOTRONIK_ADC				ZORRO_ID(EDOTRONIK, 0x07, 0) +#define  ZORRO_PROD_EDOTRONIK_VME				ZORRO_ID(EDOTRONIK, 0x08, 0) +#define  ZORRO_PROD_EDOTRONIK_DSP96000				ZORRO_ID(EDOTRONIK, 0x09, 0) + +#define ZORRO_MANUF_NES_INC					0x0813 +#define  ZORRO_PROD_NES_INC_RAM					ZORRO_ID(NES_INC, 0x00, 0) + +#define ZORRO_MANUF_ICD						0x0817 +#define  ZORRO_PROD_ICD_ADVANTAGE_2000_SCSI			ZORRO_ID(ICD, 0x01, 0) +#define  ZORRO_PROD_ICD_ADVANTAGE_IDE				ZORRO_ID(ICD, 0x03, 0) +#define  ZORRO_PROD_ICD_ADVANTAGE_2080_RAM			ZORRO_ID(ICD, 0x04, 0) + +#define ZORRO_MANUF_KUPKE_2					0x0819 +#define  ZORRO_PROD_KUPKE_OMTI					ZORRO_ID(KUPKE_2, 0x01, 0) +#define  ZORRO_PROD_KUPKE_SCSI_II				ZORRO_ID(KUPKE_2, 0x02, 0) +#define  ZORRO_PROD_KUPKE_GOLEM_BOX				ZORRO_ID(KUPKE_2, 0x03, 0) +#define  ZORRO_PROD_KUPKE_030_882				ZORRO_ID(KUPKE_2, 0x04, 0) +#define  ZORRO_PROD_KUPKE_SCSI_AT				ZORRO_ID(KUPKE_2, 0x05, 0) + +#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_3			0x081D +#define  ZORRO_PROD_GVP_A2000_RAM8				ZORRO_ID(GREAT_VALLEY_PRODUCTS_3, 0x09, 0) +#define  ZORRO_PROD_GVP_IMPACT_SERIES_II_RAM_2			ZORRO_ID(GREAT_VALLEY_PRODUCTS_3, 0x0A, 0) + +#define ZORRO_MANUF_INTERWORKS_NETWORK				0x081E + +#define ZORRO_MANUF_HARDITAL_SYNTHESIS				0x0820 +#define  ZORRO_PROD_HARDITAL_SYNTHESIS_TQM_68030_68882		ZORRO_ID(HARDITAL_SYNTHESIS, 0x14, 0) + +#define ZORRO_MANUF_APPLIED_ENGINEERING				0x0828 +#define  ZORRO_PROD_APPLIED_ENGINEERING_DL2000			ZORRO_ID(APPLIED_ENGINEERING, 0x10, 0) +#define  ZORRO_PROD_APPLIED_ENGINEERING_RAM_WORKS		ZORRO_ID(APPLIED_ENGINEERING, 0xE0, 0) + +#define ZORRO_MANUF_BSC_ALFADATA_3				0x082C +#define  ZORRO_PROD_BSC_OKTAGON_2008				ZORRO_ID(BSC_ALFADATA_3, 0x05, 0) +#define  ZORRO_PROD_BSC_TANDEM_AT_2008_508			ZORRO_ID(BSC_ALFADATA_3, 0x06, 0) +#define  ZORRO_PROD_BSC_ALFA_RAM_1200				ZORRO_ID(BSC_ALFADATA_3, 0x07, 0) +#define  ZORRO_PROD_BSC_OKTAGON_2008_RAM			ZORRO_ID(BSC_ALFADATA_3, 0x08, 0) +#define  ZORRO_PROD_BSC_MULTIFACE_I				ZORRO_ID(BSC_ALFADATA_3, 0x10, 0) +#define  ZORRO_PROD_BSC_MULTIFACE_II				ZORRO_ID(BSC_ALFADATA_3, 0x11, 0) +#define  ZORRO_PROD_BSC_MULTIFACE_III				ZORRO_ID(BSC_ALFADATA_3, 0x12, 0) +#define  ZORRO_PROD_BSC_FRAMEMASTER_II				ZORRO_ID(BSC_ALFADATA_3, 0x20, 0) +#define  ZORRO_PROD_BSC_GRAFFITI_RAM				ZORRO_ID(BSC_ALFADATA_3, 0x21, 0) +#define  ZORRO_PROD_BSC_GRAFFITI_REG				ZORRO_ID(BSC_ALFADATA_3, 0x22, 0) +#define  ZORRO_PROD_BSC_ISDN_MASTERCARD				ZORRO_ID(BSC_ALFADATA_3, 0x40, 0) +#define  ZORRO_PROD_BSC_ISDN_MASTERCARD_II			ZORRO_ID(BSC_ALFADATA_3, 0x41, 0) + +#define ZORRO_MANUF_PHOENIX					0x0835 +#define  ZORRO_PROD_PHOENIX_ST506				ZORRO_ID(PHOENIX, 0x21, 0) +#define  ZORRO_PROD_PHOENIX_SCSI				ZORRO_ID(PHOENIX, 0x22, 0) +#define  ZORRO_PROD_PHOENIX_RAM					ZORRO_ID(PHOENIX, 0xBE, 0) + +#define ZORRO_MANUF_ADVANCED_STORAGE_SYSTEMS			0x0836 +#define  ZORRO_PROD_ADVANCED_STORAGE_SYSTEMS_NEXUS		ZORRO_ID(ADVANCED_STORAGE_SYSTEMS, 0x01, 0) +#define  ZORRO_PROD_ADVANCED_STORAGE_SYSTEMS_NEXUS_RAM		ZORRO_ID(ADVANCED_STORAGE_SYSTEMS, 0x08, 0) + +#define ZORRO_MANUF_IMPULSE					0x0838 +#define  ZORRO_PROD_IMPULSE_FIRECRACKER_24			ZORRO_ID(IMPULSE, 0x00, 0) + +#define ZORRO_MANUF_IVS						0x0840 +#define  ZORRO_PROD_IVS_GRANDSLAM_PIC_2				ZORRO_ID(IVS, 0x02, 0) +#define  ZORRO_PROD_IVS_GRANDSLAM_PIC_1				ZORRO_ID(IVS, 0x04, 0) +#define  ZORRO_PROD_IVS_OVERDRIVE				ZORRO_ID(IVS, 0x10, 0) +#define  ZORRO_PROD_IVS_TRUMPCARD_CLASSIC			ZORRO_ID(IVS, 0x30, 0) +#define  ZORRO_PROD_IVS_TRUMPCARD_PRO_GRANDSLAM			ZORRO_ID(IVS, 0x34, 0) +#define  ZORRO_PROD_IVS_META_4					ZORRO_ID(IVS, 0x40, 0) +#define  ZORRO_PROD_IVS_WAVETOOLS				ZORRO_ID(IVS, 0xBF, 0) +#define  ZORRO_PROD_IVS_VECTOR_1				ZORRO_ID(IVS, 0xF3, 0) +#define  ZORRO_PROD_IVS_VECTOR_2				ZORRO_ID(IVS, 0xF4, 0) + +#define ZORRO_MANUF_VECTOR_1					0x0841 +#define  ZORRO_PROD_VECTOR_CONNECTION_1				ZORRO_ID(VECTOR_1, 0xE3, 0) + +#define ZORRO_MANUF_XPERT_PRODEV				0x0845 +#define  ZORRO_PROD_XPERT_PRODEV_VISIONA_RAM			ZORRO_ID(XPERT_PRODEV, 0x01, 0) +#define  ZORRO_PROD_XPERT_PRODEV_VISIONA_REG			ZORRO_ID(XPERT_PRODEV, 0x02, 0) +#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_RAM			ZORRO_ID(XPERT_PRODEV, 0x03, 0) +#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_REG_1			ZORRO_ID(XPERT_PRODEV, 0x04, 0) +#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_REG_2			ZORRO_ID(XPERT_PRODEV, 0xC9, 0) + +#define ZORRO_MANUF_HYDRA_SYSTEMS				0x0849 +#define  ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET			ZORRO_ID(HYDRA_SYSTEMS, 0x01, 0) + +#define ZORRO_MANUF_SUNRIZE_INDUSTRIES				0x084F +#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_AD1012			ZORRO_ID(SUNRIZE_INDUSTRIES, 0x01, 0) +#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_AD516			ZORRO_ID(SUNRIZE_INDUSTRIES, 0x02, 0) +#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_DD512			ZORRO_ID(SUNRIZE_INDUSTRIES, 0x03, 0) + +#define ZORRO_MANUF_TRICERATOPS					0x0850 +#define  ZORRO_PROD_TRICERATOPS_MULTI_IO			ZORRO_ID(TRICERATOPS, 0x01, 0) + +#define ZORRO_MANUF_APPLIED_MAGIC				0x0851 +#define  ZORRO_PROD_APPLIED_MAGIC_DMI_RESOLVER			ZORRO_ID(APPLIED_MAGIC, 0x01, 0) +#define  ZORRO_PROD_APPLIED_MAGIC_DIGITAL_BROADCASTER		ZORRO_ID(APPLIED_MAGIC, 0x06, 0) + +#define ZORRO_MANUF_GFX_BASE					0x085E +#define  ZORRO_PROD_GFX_BASE_GDA_1_VRAM				ZORRO_ID(GFX_BASE, 0x00, 0) +#define  ZORRO_PROD_GFX_BASE_GDA_1				ZORRO_ID(GFX_BASE, 0x01, 0) + +#define ZORRO_MANUF_ROCTEC					0x0860 +#define  ZORRO_PROD_ROCTEC_RH_800C				ZORRO_ID(ROCTEC, 0x01, 0) +#define  ZORRO_PROD_ROCTEC_RH_800C_RAM				ZORRO_ID(ROCTEC, 0x01, 0) + +#define ZORRO_MANUF_KATO					0x0861 +#define  ZORRO_PROD_KATO_MELODY					ZORRO_ID(KATO, 0x80, 0) +/* ID clash!! */ +#define ZORRO_MANUF_HELFRICH_1					0x0861 +#define  ZORRO_PROD_HELFRICH_RAINBOW_II				ZORRO_ID(HELFRICH_1, 0x20, 0) +#define  ZORRO_PROD_HELFRICH_RAINBOW_III			ZORRO_ID(HELFRICH_1, 0x21, 0) + +#define ZORRO_MANUF_ATLANTIS					0x0862 + +#define ZORRO_MANUF_PROTAR					0x0864 + +#define ZORRO_MANUF_ACS						0x0865 + +#define ZORRO_MANUF_SOFTWARE_RESULTS_ENTERPRISES		0x0866 +#define  ZORRO_PROD_SOFTWARE_RESULTS_ENTERPRISES_GOLDEN_GATE_2_BUS_PLUS	ZORRO_ID(SOFTWARE_RESULTS_ENTERPRISES, 0x01, 0) + +#define ZORRO_MANUF_MASOBOSHI					0x086D +#define  ZORRO_PROD_MASOBOSHI_MASTER_CARD_SC201			ZORRO_ID(MASOBOSHI, 0x03, 0) +#define  ZORRO_PROD_MASOBOSHI_MASTER_CARD_MC702			ZORRO_ID(MASOBOSHI, 0x04, 0) +#define  ZORRO_PROD_MASOBOSHI_MVD_819				ZORRO_ID(MASOBOSHI, 0x07, 0) + +#define ZORRO_MANUF_MAINHATTAN_DATA				0x086F +#define  ZORRO_PROD_MAINHATTAN_DATA_IDE				ZORRO_ID(MAINHATTAN_DATA, 0x01, 0) + +#define ZORRO_MANUF_VILLAGE_TRONIC				0x0877 +#define  ZORRO_PROD_VILLAGE_TRONIC_DOMINO_RAM			ZORRO_ID(VILLAGE_TRONIC, 0x01, 0) +#define  ZORRO_PROD_VILLAGE_TRONIC_DOMINO_REG			ZORRO_ID(VILLAGE_TRONIC, 0x02, 0) +#define  ZORRO_PROD_VILLAGE_TRONIC_DOMINO_16M_PROTOTYPE		ZORRO_ID(VILLAGE_TRONIC, 0x03, 0) +#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_RAM	ZORRO_ID(VILLAGE_TRONIC, 0x0B, 0) +#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_REG	ZORRO_ID(VILLAGE_TRONIC, 0x0C, 0) +#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_SEGMENTED_MODE	ZORRO_ID(VILLAGE_TRONIC, 0x0D, 0) +#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_RAM1		ZORRO_ID(VILLAGE_TRONIC, 0x15, 0) +#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_RAM2		ZORRO_ID(VILLAGE_TRONIC, 0x16, 0) +#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_REG		ZORRO_ID(VILLAGE_TRONIC, 0x17, 0) +#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z3		ZORRO_ID(VILLAGE_TRONIC, 0x18, 0) +#define  ZORRO_PROD_VILLAGE_TRONIC_ARIADNE			ZORRO_ID(VILLAGE_TRONIC, 0xC9, 0) +#define  ZORRO_PROD_VILLAGE_TRONIC_ARIADNE2			ZORRO_ID(VILLAGE_TRONIC, 0xCA, 0) + +#define ZORRO_MANUF_UTILITIES_UNLIMITED				0x087B +#define  ZORRO_PROD_UTILITIES_UNLIMITED_EMPLANT_DELUXE		ZORRO_ID(UTILITIES_UNLIMITED, 0x15, 0) +#define  ZORRO_PROD_UTILITIES_UNLIMITED_EMPLANT_DELUXE2		ZORRO_ID(UTILITIES_UNLIMITED, 0x20, 0) + +#define ZORRO_MANUF_AMITRIX					0x0880 +#define  ZORRO_PROD_AMITRIX_MULTI_IO				ZORRO_ID(AMITRIX, 0x01, 0) +#define  ZORRO_PROD_AMITRIX_CD_RAM				ZORRO_ID(AMITRIX, 0x02, 0) + +#define ZORRO_MANUF_ARMAX					0x0885 +#define  ZORRO_PROD_ARMAX_OMNIBUS				ZORRO_ID(ARMAX, 0x00, 0) + +#define ZORRO_MANUF_ZEUS					0x088D +#define  ZORRO_PROD_ZEUS_SPIDER					ZORRO_ID(ZEUS, 0x04, 0) + +#define ZORRO_MANUF_NEWTEK					0x088F +#define  ZORRO_PROD_NEWTEK_VIDEOTOASTER				ZORRO_ID(NEWTEK, 0x00, 0) + +#define ZORRO_MANUF_M_TECH_GERMANY				0x0890 +#define  ZORRO_PROD_MTEC_AT500_2				ZORRO_ID(M_TECH_GERMANY, 0x01, 0) +#define  ZORRO_PROD_MTEC_68030					ZORRO_ID(M_TECH_GERMANY, 0x03, 0) +#define  ZORRO_PROD_MTEC_68020I					ZORRO_ID(M_TECH_GERMANY, 0x06, 0) +#define  ZORRO_PROD_MTEC_A1200_T68030_RTC			ZORRO_ID(M_TECH_GERMANY, 0x20, 0) +#define  ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530		ZORRO_ID(M_TECH_GERMANY, 0x21, 0) +#define  ZORRO_PROD_MTEC_8_MB_RAM				ZORRO_ID(M_TECH_GERMANY, 0x22, 0) +#define  ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530_SCSI_IDE	ZORRO_ID(M_TECH_GERMANY, 0x24, 0) + +#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_4			0x0891 +#define  ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_RAM			ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x01, 0) +#define  ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_REG			ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x02, 0) + +#define ZORRO_MANUF_APOLLO_1					0x0892 +#define  ZORRO_PROD_APOLLO_A1200				ZORRO_ID(APOLLO_1, 0x01, 0) + +#define ZORRO_MANUF_HELFRICH_2					0x0893 +#define  ZORRO_PROD_HELFRICH_PICCOLO_RAM			ZORRO_ID(HELFRICH_2, 0x05, 0) +#define  ZORRO_PROD_HELFRICH_PICCOLO_REG			ZORRO_ID(HELFRICH_2, 0x06, 0) +#define  ZORRO_PROD_HELFRICH_PEGGY_PLUS_MPEG			ZORRO_ID(HELFRICH_2, 0x07, 0) +#define  ZORRO_PROD_HELFRICH_VIDEOCRUNCHER			ZORRO_ID(HELFRICH_2, 0x08, 0) +#define  ZORRO_PROD_HELFRICH_SD64_RAM				ZORRO_ID(HELFRICH_2, 0x0A, 0) +#define  ZORRO_PROD_HELFRICH_SD64_REG				ZORRO_ID(HELFRICH_2, 0x0B, 0) + +#define ZORRO_MANUF_MACROSYSTEMS_USA				0x089B +#define  ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE_40xx		ZORRO_ID(MACROSYSTEMS_USA, 0x13, 0) + +#define ZORRO_MANUF_ELBOX_COMPUTER				0x089E +#define  ZORRO_PROD_ELBOX_COMPUTER_1200_4			ZORRO_ID(ELBOX_COMPUTER, 0x06, 0) + +#define ZORRO_MANUF_HARMS_PROFESSIONAL				0x0A00 +#define  ZORRO_PROD_HARMS_PROFESSIONAL_030_PLUS			ZORRO_ID(HARMS_PROFESSIONAL, 0x10, 0) +#define  ZORRO_PROD_HARMS_PROFESSIONAL_3500			ZORRO_ID(HARMS_PROFESSIONAL, 0xD0, 0) + +#define ZORRO_MANUF_MICRONIK					0x0A50 +#define  ZORRO_PROD_MICRONIK_RCA_120				ZORRO_ID(MICRONIK, 0x0A, 0) + +#define ZORRO_MANUF_MICRONIK2					0x0F0F +#define  ZORRO_PROD_MICRONIK2_Z3I				ZORRO_ID(MICRONIK2, 0x01, 0) + +#define ZORRO_MANUF_MEGAMICRO					0x1000 +#define  ZORRO_PROD_MEGAMICRO_SCRAM_500				ZORRO_ID(MEGAMICRO, 0x03, 0) +#define  ZORRO_PROD_MEGAMICRO_SCRAM_500_RAM			ZORRO_ID(MEGAMICRO, 0x04, 0) + +#define ZORRO_MANUF_IMTRONICS_2					0x1028 +#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_3			ZORRO_ID(IMTRONICS_2, 0x39, 0) +#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_4			ZORRO_ID(IMTRONICS_2, 0x57, 0) + +/* unofficial ID */ +#define ZORRO_MANUF_INDIVIDUAL_COMPUTERS			0x1212 +#define  ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA			ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x00, 0) +#define  ZORRO_PROD_INDIVIDUAL_COMPUTERS_X_SURF			ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x17, 0) +#define  ZORRO_PROD_INDIVIDUAL_COMPUTERS_CATWEASEL		ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x2A, 0) + +#define ZORRO_MANUF_KUPKE_3					0x1248 +#define  ZORRO_PROD_KUPKE_GOLEM_HD_3000				ZORRO_ID(KUPKE_3, 0x01, 0) + +#define ZORRO_MANUF_ITH						0x1388 +#define  ZORRO_PROD_ITH_ISDN_MASTER_II				ZORRO_ID(ITH, 0x01, 0) + +#define ZORRO_MANUF_VMC						0x1389 +#define  ZORRO_PROD_VMC_ISDN_BLASTER_Z2				ZORRO_ID(VMC, 0x01, 0) +#define  ZORRO_PROD_VMC_HYPERCOM_4				ZORRO_ID(VMC, 0x02, 0) + +#define ZORRO_MANUF_INFORMATION					0x157C +#define  ZORRO_PROD_INFORMATION_ISDN_ENGINE_I			ZORRO_ID(INFORMATION, 0x64, 0) + +#define ZORRO_MANUF_VORTEX					0x2017 +#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_80386SX			ZORRO_ID(VORTEX, 0x07, 0) +#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_RAM			ZORRO_ID(VORTEX, 0x08, 0) +#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_80486			ZORRO_ID(VORTEX, 0x09, 0) + +#define ZORRO_MANUF_EXPANSION_SYSTEMS				0x2062 +#define  ZORRO_PROD_EXPANSION_SYSTEMS_DATAFLYER_4000SX		ZORRO_ID(EXPANSION_SYSTEMS, 0x01, 0) +#define  ZORRO_PROD_EXPANSION_SYSTEMS_DATAFLYER_4000SX_RAM	ZORRO_ID(EXPANSION_SYSTEMS, 0x02, 0) + +#define ZORRO_MANUF_READYSOFT					0x2100 +#define  ZORRO_PROD_READYSOFT_AMAX_II_IV			ZORRO_ID(READYSOFT, 0x01, 0) + +#define ZORRO_MANUF_PHASE5					0x2140 +#define  ZORRO_PROD_PHASE5_BLIZZARD_RAM				ZORRO_ID(PHASE5, 0x01, 0) +#define  ZORRO_PROD_PHASE5_BLIZZARD				ZORRO_ID(PHASE5, 0x02, 0) +#define  ZORRO_PROD_PHASE5_BLIZZARD_1220_IV			ZORRO_ID(PHASE5, 0x06, 0) +#define  ZORRO_PROD_PHASE5_FASTLANE_Z3_RAM			ZORRO_ID(PHASE5, 0x0A, 0) +#define  ZORRO_PROD_PHASE5_BLIZZARD_1230_II_FASTLANE_Z3_CYBERSCSI_CYBERSTORM060	ZORRO_ID(PHASE5, 0x0B, 0) +#define  ZORRO_PROD_PHASE5_BLIZZARD_1220_CYBERSTORM		ZORRO_ID(PHASE5, 0x0C, 0) +#define  ZORRO_PROD_PHASE5_BLIZZARD_1230			ZORRO_ID(PHASE5, 0x0D, 0) +#define  ZORRO_PROD_PHASE5_BLIZZARD_1230_IV_1260		ZORRO_ID(PHASE5, 0x11, 0) +#define  ZORRO_PROD_PHASE5_BLIZZARD_2060			ZORRO_ID(PHASE5, 0x18, 0) +#define  ZORRO_PROD_PHASE5_CYBERSTORM_MK_II			ZORRO_ID(PHASE5, 0x19, 0) +#define  ZORRO_PROD_PHASE5_CYBERVISION64			ZORRO_ID(PHASE5, 0x22, 0) +#define  ZORRO_PROD_PHASE5_CYBERVISION64_3D_PROTOTYPE		ZORRO_ID(PHASE5, 0x32, 0) +#define  ZORRO_PROD_PHASE5_CYBERVISION64_3D			ZORRO_ID(PHASE5, 0x43, 0) +#define  ZORRO_PROD_PHASE5_CYBERSTORM_MK_III			ZORRO_ID(PHASE5, 0x64, 0) +#define  ZORRO_PROD_PHASE5_BLIZZARD_603E_PLUS			ZORRO_ID(PHASE5, 0x6e, 0) + +#define ZORRO_MANUF_DPS						0x2169 +#define  ZORRO_PROD_DPS_PERSONAL_ANIMATION_RECORDER		ZORRO_ID(DPS, 0x01, 0) + +#define ZORRO_MANUF_APOLLO_2					0x2200 +#define  ZORRO_PROD_APOLLO_A620_68020_1				ZORRO_ID(APOLLO_2, 0x00, 0) +#define  ZORRO_PROD_APOLLO_A620_68020_2				ZORRO_ID(APOLLO_2, 0x01, 0) + +#define ZORRO_MANUF_APOLLO_3					0x2222 +#define  ZORRO_PROD_APOLLO_AT_APOLLO				ZORRO_ID(APOLLO_3, 0x22, 0) +#define  ZORRO_PROD_APOLLO_1230_1240_1260_2030_4040_4060	ZORRO_ID(APOLLO_3, 0x23, 0) + +#define ZORRO_MANUF_PETSOFF_LP					0x38A5 +#define  ZORRO_PROD_PETSOFF_LP_DELFINA				ZORRO_ID(PETSOFF_LP, 0x00, 0) +#define  ZORRO_PROD_PETSOFF_LP_DELFINA_LITE			ZORRO_ID(PETSOFF_LP, 0x01, 0) + +#define ZORRO_MANUF_UWE_GERLACH					0x3FF7 +#define  ZORRO_PROD_UWE_GERLACH_RAM_ROM				ZORRO_ID(UWE_GERLACH, 0xd4, 0) + +#define ZORRO_MANUF_ACT						0x4231 +#define  ZORRO_PROD_ACT_PRELUDE					ZORRO_ID(ACT, 0x01, 0) + +#define ZORRO_MANUF_MACROSYSTEMS_GERMANY			0x4754 +#define  ZORRO_PROD_MACROSYSTEMS_MAESTRO			ZORRO_ID(MACROSYSTEMS_GERMANY, 0x03, 0) +#define  ZORRO_PROD_MACROSYSTEMS_VLAB				ZORRO_ID(MACROSYSTEMS_GERMANY, 0x04, 0) +#define  ZORRO_PROD_MACROSYSTEMS_MAESTRO_PRO			ZORRO_ID(MACROSYSTEMS_GERMANY, 0x05, 0) +#define  ZORRO_PROD_MACROSYSTEMS_RETINA				ZORRO_ID(MACROSYSTEMS_GERMANY, 0x06, 0) +#define  ZORRO_PROD_MACROSYSTEMS_MULTI_EVOLUTION		ZORRO_ID(MACROSYSTEMS_GERMANY, 0x08, 0) +#define  ZORRO_PROD_MACROSYSTEMS_TOCCATA			ZORRO_ID(MACROSYSTEMS_GERMANY, 0x0C, 0) +#define  ZORRO_PROD_MACROSYSTEMS_RETINA_Z3			ZORRO_ID(MACROSYSTEMS_GERMANY, 0x10, 0) +#define  ZORRO_PROD_MACROSYSTEMS_VLAB_MOTION			ZORRO_ID(MACROSYSTEMS_GERMANY, 0x12, 0) +#define  ZORRO_PROD_MACROSYSTEMS_ALTAIS				ZORRO_ID(MACROSYSTEMS_GERMANY, 0x13, 0) +#define  ZORRO_PROD_MACROSYSTEMS_FALCON_040			ZORRO_ID(MACROSYSTEMS_GERMANY, 0xFD, 0) + +#define ZORRO_MANUF_COMBITEC					0x6766 + +#define ZORRO_MANUF_SKI_PERIPHERALS				0x8000 +#define  ZORRO_PROD_SKI_PERIPHERALS_MAST_FIREBALL		ZORRO_ID(SKI_PERIPHERALS, 0x08, 0) +#define  ZORRO_PROD_SKI_PERIPHERALS_SCSI_DUAL_SERIAL		ZORRO_ID(SKI_PERIPHERALS, 0x80, 0) + +#define ZORRO_MANUF_REIS_WARE_2					0xA9AD +#define  ZORRO_PROD_REIS_WARE_SCAN_KING				ZORRO_ID(REIS_WARE_2, 0x11, 0) + +#define ZORRO_MANUF_CAMERON					0xAA01 +#define  ZORRO_PROD_CAMERON_PERSONAL_A4				ZORRO_ID(CAMERON, 0x10, 0) + +#define ZORRO_MANUF_REIS_WARE					0xAA11 +#define  ZORRO_PROD_REIS_WARE_HANDYSCANNER			ZORRO_ID(REIS_WARE, 0x11, 0) + +#define ZORRO_MANUF_PHOENIX_2					0xB5A8 +#define  ZORRO_PROD_PHOENIX_ST506_2				ZORRO_ID(PHOENIX_2, 0x21, 0) +#define  ZORRO_PROD_PHOENIX_SCSI_2				ZORRO_ID(PHOENIX_2, 0x22, 0) +#define  ZORRO_PROD_PHOENIX_RAM_2				ZORRO_ID(PHOENIX_2, 0xBE, 0) + +#define ZORRO_MANUF_COMBITEC_2					0xC008 +#define  ZORRO_PROD_COMBITEC_HD					ZORRO_ID(COMBITEC_2, 0x2A, 0) +#define  ZORRO_PROD_COMBITEC_SRAM				ZORRO_ID(COMBITEC_2, 0x2B, 0) + + +    /* +     *  Test and illegal Manufacturer IDs. +     */ + +#define ZORRO_MANUF_HACKER					0x07DB +#define  ZORRO_PROD_GENERAL_PROTOTYPE				ZORRO_ID(HACKER, 0x00, 0) +#define  ZORRO_PROD_HACKER_SCSI					ZORRO_ID(HACKER, 0x01, 0) +#define  ZORRO_PROD_RESOURCE_MANAGEMENT_FORCE_QUICKNET_QN2000	ZORRO_ID(HACKER, 0x02, 0) +#define  ZORRO_PROD_VECTOR_CONNECTION_2				ZORRO_ID(HACKER, 0xE0, 0) +#define  ZORRO_PROD_VECTOR_CONNECTION_3				ZORRO_ID(HACKER, 0xE1, 0) +#define  ZORRO_PROD_VECTOR_CONNECTION_4				ZORRO_ID(HACKER, 0xE2, 0) +#define  ZORRO_PROD_VECTOR_CONNECTION_5				ZORRO_ID(HACKER, 0xE3, 0) diff --git a/include/uapi/mtd/mtd-abi.h b/include/uapi/mtd/mtd-abi.h index 36eace03b2a..763bb695040 100644 --- a/include/uapi/mtd/mtd-abi.h +++ b/include/uapi/mtd/mtd-abi.h @@ -94,10 +94,10 @@ struct mtd_write_req {  #define MTD_RAM			1  #define MTD_ROM			2  #define MTD_NORFLASH		3 -#define MTD_NANDFLASH		4 +#define MTD_NANDFLASH		4	/* SLC NAND */  #define MTD_DATAFLASH		6  #define MTD_UBIVOLUME		7 -#define MTD_MLCNANDFLASH	8 +#define MTD_MLCNANDFLASH	8	/* MLC NAND (including TLC) */  #define MTD_WRITEABLE		0x400	/* Device is writeable */  #define MTD_BIT_WRITEABLE	0x800	/* Single bits can be flipped */ @@ -109,6 +109,7 @@ struct mtd_write_req {  #define MTD_CAP_RAM		(MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)  #define MTD_CAP_NORFLASH	(MTD_WRITEABLE | MTD_BIT_WRITEABLE)  #define MTD_CAP_NANDFLASH	(MTD_WRITEABLE) +#define MTD_CAP_NVRAM		(MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)  /* Obsolete ECC byte placement modes (used with obsolete MEMGETOOBSEL) */  #define MTD_NANDECC_OFF		0	// Switch off ECC (Not recommended) @@ -275,4 +276,9 @@ enum mtd_file_modes {  	MTD_FILE_MODE_RAW,  }; +static inline int mtd_type_is_nand_user(const struct mtd_info_user *mtd) +{ +	return mtd->type == MTD_NANDFLASH || mtd->type == MTD_MLCNANDFLASH; +} +  #endif /* __MTD_ABI_H__ */ diff --git a/include/uapi/mtd/ubi-user.h b/include/uapi/mtd/ubi-user.h index 723c324590c..1927b0d78a9 100644 --- a/include/uapi/mtd/ubi-user.h +++ b/include/uapi/mtd/ubi-user.h @@ -134,6 +134,16 @@   * used. A pointer to a &struct ubi_set_vol_prop_req object is expected to be   * passed. The object describes which property should be set, and to which value   * it should be set. + * + * Block devices on UBI volumes + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * To create a R/O block device on top of an UBI volume the %UBI_IOCVOLCRBLK + * should be used. A pointer to a &struct ubi_blkcreate_req object is expected + * to be passed, which is not used and reserved for future usage. + * + * Conversely, to remove a block device the %UBI_IOCVOLRMBLK should be used, + * which takes no arguments.   */  /* @@ -191,6 +201,10 @@  /* Set an UBI volume property */  #define UBI_IOCSETVOLPROP _IOW(UBI_VOL_IOC_MAGIC, 6, \  			       struct ubi_set_vol_prop_req) +/* Create a R/O block device on top of an UBI volume */ +#define UBI_IOCVOLCRBLK _IOW(UBI_VOL_IOC_MAGIC, 7, struct ubi_blkcreate_req) +/* Remove the R/O block device */ +#define UBI_IOCVOLRMBLK _IO(UBI_VOL_IOC_MAGIC, 8)  /* Maximum MTD device name length supported by UBI */  #define MAX_UBI_MTD_NAME_LEN 127 @@ -420,4 +434,12 @@ struct ubi_set_vol_prop_req {  	__u64 value;  }  __packed; +/** + * struct ubi_blkcreate_req - a data structure used in block creation requests. + * @padding: reserved for future, not used, has to be zeroed + */ +struct ubi_blkcreate_req { +	__s8  padding[128]; +}  __packed; +  #endif /* __UBI_USER_H__ */ diff --git a/include/uapi/rdma/ib_user_verbs.h b/include/uapi/rdma/ib_user_verbs.h index 0b233c56b0e..cbfdd4ca951 100644 --- a/include/uapi/rdma/ib_user_verbs.h +++ b/include/uapi/rdma/ib_user_verbs.h @@ -87,8 +87,11 @@ enum {  	IB_USER_VERBS_CMD_CLOSE_XRCD,  	IB_USER_VERBS_CMD_CREATE_XSRQ,  	IB_USER_VERBS_CMD_OPEN_QP, -	IB_USER_VERBS_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD, -	IB_USER_VERBS_CMD_DESTROY_FLOW +}; + +enum { +	IB_USER_VERBS_EX_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD, +	IB_USER_VERBS_EX_CMD_DESTROY_FLOW  };  /* @@ -120,16 +123,20 @@ struct ib_uverbs_comp_event_desc {   * the rest of the command struct based on these value.   */ +#define IB_USER_VERBS_CMD_COMMAND_MASK 0xff +#define IB_USER_VERBS_CMD_FLAGS_MASK 0xff000000u +#define IB_USER_VERBS_CMD_FLAGS_SHIFT 24 + +#define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80 +  struct ib_uverbs_cmd_hdr {  	__u32 command;  	__u16 in_words;  	__u16 out_words;  }; -struct ib_uverbs_cmd_hdr_ex { -	__u32 command; -	__u16 in_words; -	__u16 out_words; +struct ib_uverbs_ex_cmd_hdr { +	__u64 response;  	__u16 provider_in_words;  	__u16 provider_out_words;  	__u32 cmd_hdr_reserved; @@ -696,61 +703,71 @@ struct ib_uverbs_detach_mcast {  	__u64 driver_data[0];  }; -struct ib_kern_eth_filter { +struct ib_uverbs_flow_spec_hdr { +	__u32 type; +	__u16 size; +	__u16 reserved; +	/* followed by flow_spec */ +	__u64 flow_spec_data[0]; +}; + +struct ib_uverbs_flow_eth_filter {  	__u8  dst_mac[6];  	__u8  src_mac[6];  	__be16 ether_type;  	__be16 vlan_tag;  }; -struct ib_kern_spec_eth { -	__u32  type; -	__u16  size; -	__u16  reserved; -	struct ib_kern_eth_filter val; -	struct ib_kern_eth_filter mask; +struct ib_uverbs_flow_spec_eth { +	union { +		struct ib_uverbs_flow_spec_hdr hdr; +		struct { +			__u32 type; +			__u16 size; +			__u16 reserved; +		}; +	}; +	struct ib_uverbs_flow_eth_filter val; +	struct ib_uverbs_flow_eth_filter mask;  }; -struct ib_kern_ipv4_filter { +struct ib_uverbs_flow_ipv4_filter {  	__be32 src_ip;  	__be32 dst_ip;  }; -struct ib_kern_spec_ipv4 { -	__u32  type; -	__u16  size; -	__u16  reserved; -	struct ib_kern_ipv4_filter val; -	struct ib_kern_ipv4_filter mask; +struct ib_uverbs_flow_spec_ipv4 { +	union { +		struct ib_uverbs_flow_spec_hdr hdr; +		struct { +			__u32 type; +			__u16 size; +			__u16 reserved; +		}; +	}; +	struct ib_uverbs_flow_ipv4_filter val; +	struct ib_uverbs_flow_ipv4_filter mask;  }; -struct ib_kern_tcp_udp_filter { +struct ib_uverbs_flow_tcp_udp_filter {  	__be16 dst_port;  	__be16 src_port;  }; -struct ib_kern_spec_tcp_udp { -	__u32  type; -	__u16  size; -	__u16  reserved; -	struct ib_kern_tcp_udp_filter val; -	struct ib_kern_tcp_udp_filter mask; -}; - -struct ib_kern_spec { +struct ib_uverbs_flow_spec_tcp_udp {  	union { +		struct ib_uverbs_flow_spec_hdr hdr;  		struct {  			__u32 type;  			__u16 size;  			__u16 reserved;  		}; -		struct ib_kern_spec_eth	    eth; -		struct ib_kern_spec_ipv4    ipv4; -		struct ib_kern_spec_tcp_udp tcp_udp;  	}; +	struct ib_uverbs_flow_tcp_udp_filter val; +	struct ib_uverbs_flow_tcp_udp_filter mask;  }; -struct ib_kern_flow_attr { +struct ib_uverbs_flow_attr {  	__u32 type;  	__u16 size;  	__u16 priority; @@ -762,13 +779,13 @@ struct ib_kern_flow_attr {  	 * struct ib_flow_spec_xxx  	 * struct ib_flow_spec_yyy  	 */ +	struct ib_uverbs_flow_spec_hdr flow_specs[0];  };  struct ib_uverbs_create_flow  {  	__u32 comp_mask; -	__u64 response;  	__u32 qp_handle; -	struct ib_kern_flow_attr flow_attr; +	struct ib_uverbs_flow_attr flow_attr;  };  struct ib_uverbs_create_flow_resp { diff --git a/include/uapi/rdma/rdma_netlink.h b/include/uapi/rdma/rdma_netlink.h index 8297285b628..de69170a30c 100644 --- a/include/uapi/rdma/rdma_netlink.h +++ b/include/uapi/rdma/rdma_netlink.h @@ -4,7 +4,16 @@  #include <linux/types.h>  enum { -	RDMA_NL_RDMA_CM = 1 +	RDMA_NL_RDMA_CM = 1, +	RDMA_NL_NES, +	RDMA_NL_C4IW, +	RDMA_NL_NUM_CLIENTS +}; + +enum { +	RDMA_NL_GROUP_CM = 1, +	RDMA_NL_GROUP_IWPM, +	RDMA_NL_NUM_GROUPS  };  #define RDMA_NL_GET_CLIENT(type) ((type & (((1 << 6) - 1) << 10)) >> 10) @@ -22,6 +31,18 @@ enum {  	RDMA_NL_RDMA_CM_NUM_ATTR,  }; +/* iwarp port mapper op-codes */ +enum { +	RDMA_NL_IWPM_REG_PID = 0, +	RDMA_NL_IWPM_ADD_MAPPING, +	RDMA_NL_IWPM_QUERY_MAPPING, +	RDMA_NL_IWPM_REMOVE_MAPPING, +	RDMA_NL_IWPM_HANDLE_ERR, +	RDMA_NL_IWPM_MAPINFO, +	RDMA_NL_IWPM_MAPINFO_NUM, +	RDMA_NL_IWPM_NUM_OPS +}; +  struct rdma_cm_id_stats {  	__u32	qp_num;  	__u32	bound_dev_if; @@ -33,5 +54,78 @@ struct rdma_cm_id_stats {  	__u8	qp_type;  }; +enum { +	IWPM_NLA_REG_PID_UNSPEC = 0, +	IWPM_NLA_REG_PID_SEQ, +	IWPM_NLA_REG_IF_NAME, +	IWPM_NLA_REG_IBDEV_NAME, +	IWPM_NLA_REG_ULIB_NAME, +	IWPM_NLA_REG_PID_MAX +}; + +enum { +	IWPM_NLA_RREG_PID_UNSPEC = 0, +	IWPM_NLA_RREG_PID_SEQ, +	IWPM_NLA_RREG_IBDEV_NAME, +	IWPM_NLA_RREG_ULIB_NAME, +	IWPM_NLA_RREG_ULIB_VER, +	IWPM_NLA_RREG_PID_ERR, +	IWPM_NLA_RREG_PID_MAX + +}; + +enum { +	IWPM_NLA_MANAGE_MAPPING_UNSPEC = 0, +	IWPM_NLA_MANAGE_MAPPING_SEQ, +	IWPM_NLA_MANAGE_ADDR, +	IWPM_NLA_MANAGE_MAPPED_LOC_ADDR, +	IWPM_NLA_RMANAGE_MAPPING_ERR, +	IWPM_NLA_RMANAGE_MAPPING_MAX +}; + +#define IWPM_NLA_MANAGE_MAPPING_MAX 3 +#define IWPM_NLA_QUERY_MAPPING_MAX  4 +#define IWPM_NLA_MAPINFO_SEND_MAX   3 + +enum { +	IWPM_NLA_QUERY_MAPPING_UNSPEC = 0, +	IWPM_NLA_QUERY_MAPPING_SEQ, +	IWPM_NLA_QUERY_LOCAL_ADDR, +	IWPM_NLA_QUERY_REMOTE_ADDR, +	IWPM_NLA_RQUERY_MAPPED_LOC_ADDR, +	IWPM_NLA_RQUERY_MAPPED_REM_ADDR, +	IWPM_NLA_RQUERY_MAPPING_ERR, +	IWPM_NLA_RQUERY_MAPPING_MAX +}; + +enum { +	IWPM_NLA_MAPINFO_REQ_UNSPEC = 0, +	IWPM_NLA_MAPINFO_ULIB_NAME, +	IWPM_NLA_MAPINFO_ULIB_VER, +	IWPM_NLA_MAPINFO_REQ_MAX +}; + +enum { +	IWPM_NLA_MAPINFO_UNSPEC = 0, +	IWPM_NLA_MAPINFO_LOCAL_ADDR, +	IWPM_NLA_MAPINFO_MAPPED_ADDR, +	IWPM_NLA_MAPINFO_MAX +}; + +enum { +	IWPM_NLA_MAPINFO_NUM_UNSPEC = 0, +	IWPM_NLA_MAPINFO_SEQ, +	IWPM_NLA_MAPINFO_SEND_NUM, +	IWPM_NLA_MAPINFO_ACK_NUM, +	IWPM_NLA_MAPINFO_NUM_MAX +}; + +enum { +	IWPM_NLA_ERR_UNSPEC = 0, +	IWPM_NLA_ERR_SEQ, +	IWPM_NLA_ERR_CODE, +	IWPM_NLA_ERR_MAX +}; +  #endif /* _UAPI_RDMA_NETLINK_H */ diff --git a/include/uapi/sound/Kbuild b/include/uapi/sound/Kbuild index 0f7d279ebde..a7f27704f98 100644 --- a/include/uapi/sound/Kbuild +++ b/include/uapi/sound/Kbuild @@ -5,6 +5,7 @@ header-y += asound_fm.h  header-y += compress_offload.h  header-y += compress_params.h  header-y += emu10k1.h +header-y += firewire.h  header-y += hdsp.h  header-y += hdspm.h  header-y += sb16_csp.h diff --git a/include/uapi/sound/asound.h b/include/uapi/sound/asound.h index 041203f20f6..224948342f1 100644 --- a/include/uapi/sound/asound.h +++ b/include/uapi/sound/asound.h @@ -93,9 +93,12 @@ enum {  	SNDRV_HWDEP_IFACE_SB_RC,	/* SB Extigy/Audigy2NX remote control */  	SNDRV_HWDEP_IFACE_HDA,		/* HD-audio */  	SNDRV_HWDEP_IFACE_USB_STREAM,	/* direct access to usb stream */ +	SNDRV_HWDEP_IFACE_FW_DICE,	/* TC DICE FireWire device */ +	SNDRV_HWDEP_IFACE_FW_FIREWORKS,	/* Echo Audio Fireworks based device */ +	SNDRV_HWDEP_IFACE_FW_BEBOB,	/* BridgeCo BeBoB based device */  	/* Don't forget to change the following: */ -	SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_USB_STREAM +	SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_FW_BEBOB  };  struct snd_hwdep_info { diff --git a/include/uapi/sound/compress_offload.h b/include/uapi/sound/compress_offload.h index d630163b9a2..1964026b5e0 100644 --- a/include/uapi/sound/compress_offload.h +++ b/include/uapi/sound/compress_offload.h @@ -30,7 +30,7 @@  #include <sound/compress_params.h> -#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 1) +#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 2)  /**   * struct snd_compressed_buffer: compressed buffer   * @fragment_size: size of buffer fragment in bytes @@ -39,7 +39,7 @@  struct snd_compressed_buffer {  	__u32 fragment_size;  	__u32 fragments; -}; +} __attribute__((packed, aligned(4)));  /**   * struct snd_compr_params: compressed stream params @@ -51,7 +51,7 @@ struct snd_compr_params {  	struct snd_compressed_buffer buffer;  	struct snd_codec codec;  	__u8 no_wake_mode; -}; +} __attribute__((packed, aligned(4)));  /**   * struct snd_compr_tstamp: timestamp descriptor @@ -67,10 +67,10 @@ struct snd_compr_params {  struct snd_compr_tstamp {  	__u32 byte_offset;  	__u32 copied_total; -	snd_pcm_uframes_t pcm_frames; -	snd_pcm_uframes_t pcm_io_frames; +	__u32 pcm_frames; +	__u32 pcm_io_frames;  	__u32 sampling_rate; -}; +} __attribute__((packed, aligned(4)));  /**   * struct snd_compr_avail: avail descriptor @@ -80,7 +80,7 @@ struct snd_compr_tstamp {  struct snd_compr_avail {  	__u64 avail;  	struct snd_compr_tstamp tstamp; -}; +} __attribute__((packed, aligned(4)));  enum snd_compr_direction {  	SND_COMPRESS_PLAYBACK = 0, @@ -107,7 +107,7 @@ struct snd_compr_caps {  	__u32 max_fragments;  	__u32 codecs[MAX_NUM_CODECS];  	__u32 reserved[11]; -}; +} __attribute__((packed, aligned(4)));  /**   * struct snd_compr_codec_caps: query capability of codec @@ -119,7 +119,7 @@ struct snd_compr_codec_caps {  	__u32 codec;  	__u32 num_descriptors;  	struct snd_codec_desc descriptor[MAX_NUM_CODEC_DESCRIPTORS]; -}; +} __attribute__((packed, aligned(4)));  /**   * @SNDRV_COMPRESS_ENCODER_PADDING: no of samples appended by the encoder at the @@ -140,7 +140,7 @@ enum {  struct snd_compr_metadata {  	 __u32 key;  	 __u32 value[8]; -}; +} __attribute__((packed, aligned(4)));  /**   * compress path ioctl definitions diff --git a/include/uapi/sound/compress_params.h b/include/uapi/sound/compress_params.h index 602dc6c45d1..d9bd9ca0d5b 100644 --- a/include/uapi/sound/compress_params.h +++ b/include/uapi/sound/compress_params.h @@ -57,6 +57,7 @@  #define MAX_NUM_CODECS 32  #define MAX_NUM_CODEC_DESCRIPTORS 32  #define MAX_NUM_BITRATES 32 +#define MAX_NUM_SAMPLE_RATES 32  /* Codecs are listed linearly to allow for extensibility */  #define SND_AUDIOCODEC_PCM                   ((__u32) 0x00000001) @@ -267,7 +268,7 @@ struct snd_enc_vorbis {  	__u32 max_bit_rate;  	__u32 min_bit_rate;  	__u32 downmix; -}; +} __attribute__((packed, aligned(4)));  /** @@ -283,7 +284,7 @@ struct snd_enc_real {  	__u32 quant_bits;  	__u32 start_region;  	__u32 num_regions; -}; +} __attribute__((packed, aligned(4)));  /**   * struct snd_enc_flac @@ -307,12 +308,12 @@ struct snd_enc_real {  struct snd_enc_flac {  	__u32 num;  	__u32 gain; -}; +} __attribute__((packed, aligned(4)));  struct snd_enc_generic {  	__u32 bw;	/* encoder bandwidth */  	__s32 reserved[15]; -}; +} __attribute__((packed, aligned(4)));  union snd_codec_options {  	struct snd_enc_wma wma; @@ -320,11 +321,12 @@ union snd_codec_options {  	struct snd_enc_real real;  	struct snd_enc_flac flac;  	struct snd_enc_generic generic; -}; +} __attribute__((packed, aligned(4)));  /** struct snd_codec_desc - description of codec capabilities   * @max_ch: Maximum number of audio channels - * @sample_rates: Sampling rates in Hz, use SNDRV_PCM_RATE_xxx for this + * @sample_rates: Sampling rates in Hz, use values like 48000 for this + * @num_sample_rates: Number of valid values in sample_rates array   * @bit_rate: Indexed array containing supported bit rates   * @num_bitrates: Number of valid values in bit_rate array   * @rate_control: value is specified by SND_RATECONTROLMODE defines. @@ -346,7 +348,8 @@ union snd_codec_options {  struct snd_codec_desc {  	__u32 max_ch; -	__u32 sample_rates; +	__u32 sample_rates[MAX_NUM_SAMPLE_RATES]; +	__u32 num_sample_rates;  	__u32 bit_rate[MAX_NUM_BITRATES];  	__u32 num_bitrates;  	__u32 rate_control; @@ -355,7 +358,7 @@ struct snd_codec_desc {  	__u32 formats;  	__u32 min_buffer;  	__u32 reserved[15]; -}; +} __attribute__((packed, aligned(4)));  /** struct snd_codec   * @id: Identifies the supported audio encoder/decoder. @@ -364,7 +367,8 @@ struct snd_codec_desc {   * @ch_out: Number of output channels. In case of contradiction between   *		this field and the channelMode field, the channelMode field   *		overrides. - * @sample_rate: Audio sample rate of input data + * @sample_rate: Audio sample rate of input data in Hz, use values like 48000 + *		for this.   * @bit_rate: Bitrate of encoded data. May be ignored by decoders   * @rate_control: Encoding rate control. See SND_RATECONTROLMODE defines.   *               Encoders may rely on profiles for quality levels. @@ -395,6 +399,6 @@ struct snd_codec {  	__u32 align;  	union snd_codec_options options;  	__u32 reserved[3]; -}; +} __attribute__((packed, aligned(4)));  #endif diff --git a/include/uapi/sound/firewire.h b/include/uapi/sound/firewire.h new file mode 100644 index 00000000000..af4bd136c75 --- /dev/null +++ b/include/uapi/sound/firewire.h @@ -0,0 +1,72 @@ +#ifndef _UAPI_SOUND_FIREWIRE_H_INCLUDED +#define _UAPI_SOUND_FIREWIRE_H_INCLUDED + +#include <linux/ioctl.h> +#include <linux/types.h> + +/* events can be read() from the hwdep device */ + +#define SNDRV_FIREWIRE_EVENT_LOCK_STATUS	0x000010cc +#define SNDRV_FIREWIRE_EVENT_DICE_NOTIFICATION	0xd1ce004e +#define SNDRV_FIREWIRE_EVENT_EFW_RESPONSE	0x4e617475 + +struct snd_firewire_event_common { +	unsigned int type; /* SNDRV_FIREWIRE_EVENT_xxx */ +}; + +struct snd_firewire_event_lock_status { +	unsigned int type; +	unsigned int status; /* 0/1 = unlocked/locked */ +}; + +struct snd_firewire_event_dice_notification { +	unsigned int type; +	unsigned int notification; /* DICE-specific bits */ +}; + +#define SND_EFW_TRANSACTION_USER_SEQNUM_MAX	((__u32)((__u16)~0) - 1) +/* each field should be in big endian */ +struct snd_efw_transaction { +	__be32 length; +	__be32 version; +	__be32 seqnum; +	__be32 category; +	__be32 command; +	__be32 status; +	__be32 params[0]; +}; +struct snd_firewire_event_efw_response { +	unsigned int type; +	__be32 response[0];	/* some responses */ +}; + +union snd_firewire_event { +	struct snd_firewire_event_common            common; +	struct snd_firewire_event_lock_status       lock_status; +	struct snd_firewire_event_dice_notification dice_notification; +	struct snd_firewire_event_efw_response      efw_response; +}; + + +#define SNDRV_FIREWIRE_IOCTL_GET_INFO _IOR('H', 0xf8, struct snd_firewire_get_info) +#define SNDRV_FIREWIRE_IOCTL_LOCK      _IO('H', 0xf9) +#define SNDRV_FIREWIRE_IOCTL_UNLOCK    _IO('H', 0xfa) + +#define SNDRV_FIREWIRE_TYPE_DICE	1 +#define SNDRV_FIREWIRE_TYPE_FIREWORKS	2 +#define SNDRV_FIREWIRE_TYPE_BEBOB	3 +/* AV/C, RME, MOTU, ... */ + +struct snd_firewire_get_info { +	unsigned int type; /* SNDRV_FIREWIRE_TYPE_xxx */ +	unsigned int card; /* same as fw_cdev_get_info.card */ +	unsigned char guid[8]; +	char device_name[16]; /* device node in /dev */ +}; + +/* + * SNDRV_FIREWIRE_IOCTL_LOCK prevents the driver from streaming. + * Returns -EBUSY if the driver is already streaming. + */ + +#endif /* _UAPI_SOUND_FIREWIRE_H_INCLUDED */ diff --git a/include/uapi/xen/Kbuild b/include/uapi/xen/Kbuild index 61257cb1465..5c459628e8c 100644 --- a/include/uapi/xen/Kbuild +++ b/include/uapi/xen/Kbuild @@ -1,3 +1,5 @@  # UAPI Header export list  header-y += evtchn.h +header-y += gntalloc.h +header-y += gntdev.h  header-y += privcmd.h diff --git a/include/uapi/xen/gntalloc.h b/include/uapi/xen/gntalloc.h new file mode 100644 index 00000000000..76bd58065f4 --- /dev/null +++ b/include/uapi/xen/gntalloc.h @@ -0,0 +1,82 @@ +/****************************************************************************** + * gntalloc.h + * + * Interface to /dev/xen/gntalloc. + * + * Author: Daniel De Graaf <dgdegra@tycho.nsa.gov> + * + * This file is in the public domain. + */ + +#ifndef __LINUX_PUBLIC_GNTALLOC_H__ +#define __LINUX_PUBLIC_GNTALLOC_H__ + +/* + * Allocates a new page and creates a new grant reference. + */ +#define IOCTL_GNTALLOC_ALLOC_GREF \ +_IOC(_IOC_NONE, 'G', 5, sizeof(struct ioctl_gntalloc_alloc_gref)) +struct ioctl_gntalloc_alloc_gref { +	/* IN parameters */ +	/* The ID of the domain to be given access to the grants. */ +	uint16_t domid; +	/* Flags for this mapping */ +	uint16_t flags; +	/* Number of pages to map */ +	uint32_t count; +	/* OUT parameters */ +	/* The offset to be used on a subsequent call to mmap(). */ +	uint64_t index; +	/* The grant references of the newly created grant, one per page */ +	/* Variable size, depending on count */ +	uint32_t gref_ids[1]; +}; + +#define GNTALLOC_FLAG_WRITABLE 1 + +/* + * Deallocates the grant reference, allowing the associated page to be freed if + * no other domains are using it. + */ +#define IOCTL_GNTALLOC_DEALLOC_GREF \ +_IOC(_IOC_NONE, 'G', 6, sizeof(struct ioctl_gntalloc_dealloc_gref)) +struct ioctl_gntalloc_dealloc_gref { +	/* IN parameters */ +	/* The offset returned in the map operation */ +	uint64_t index; +	/* Number of references to unmap */ +	uint32_t count; +}; + +/* + * Sets up an unmap notification within the page, so that the other side can do + * cleanup if this side crashes. Required to implement cross-domain robust + * mutexes or close notification on communication channels. + * + * Each mapped page only supports one notification; multiple calls referring to + * the same page overwrite the previous notification. You must clear the + * notification prior to the IOCTL_GNTALLOC_DEALLOC_GREF if you do not want it + * to occur. + */ +#define IOCTL_GNTALLOC_SET_UNMAP_NOTIFY \ +_IOC(_IOC_NONE, 'G', 7, sizeof(struct ioctl_gntalloc_unmap_notify)) +struct ioctl_gntalloc_unmap_notify { +	/* IN parameters */ +	/* Offset in the file descriptor for a byte within the page (same as +	 * used in mmap). If using UNMAP_NOTIFY_CLEAR_BYTE, this is the byte to +	 * be cleared. Otherwise, it can be any byte in the page whose +	 * notification we are adjusting. +	 */ +	uint64_t index; +	/* Action(s) to take on unmap */ +	uint32_t action; +	/* Event channel to notify */ +	uint32_t event_channel_port; +}; + +/* Clear (set to zero) the byte specified by index */ +#define UNMAP_NOTIFY_CLEAR_BYTE 0x1 +/* Send an interrupt on the indicated event channel */ +#define UNMAP_NOTIFY_SEND_EVENT 0x2 + +#endif /* __LINUX_PUBLIC_GNTALLOC_H__ */ diff --git a/include/uapi/xen/gntdev.h b/include/uapi/xen/gntdev.h new file mode 100644 index 00000000000..5304bd3c84c --- /dev/null +++ b/include/uapi/xen/gntdev.h @@ -0,0 +1,150 @@ +/****************************************************************************** + * gntdev.h + *  + * Interface to /dev/xen/gntdev. + *  + * Copyright (c) 2007, D G Murray + *  + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation; or, when distributed + * separately from the Linux kernel or incorporated into other + * software packages, subject to the following license: + *  + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this source file (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, modify, + * merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + *  + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + *  + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#ifndef __LINUX_PUBLIC_GNTDEV_H__ +#define __LINUX_PUBLIC_GNTDEV_H__ + +struct ioctl_gntdev_grant_ref { +	/* The domain ID of the grant to be mapped. */ +	uint32_t domid; +	/* The grant reference of the grant to be mapped. */ +	uint32_t ref; +}; + +/* + * Inserts the grant references into the mapping table of an instance + * of gntdev. N.B. This does not perform the mapping, which is deferred + * until mmap() is called with @index as the offset. + */ +#define IOCTL_GNTDEV_MAP_GRANT_REF \ +_IOC(_IOC_NONE, 'G', 0, sizeof(struct ioctl_gntdev_map_grant_ref)) +struct ioctl_gntdev_map_grant_ref { +	/* IN parameters */ +	/* The number of grants to be mapped. */ +	uint32_t count; +	uint32_t pad; +	/* OUT parameters */ +	/* The offset to be used on a subsequent call to mmap(). */ +	uint64_t index; +	/* Variable IN parameter. */ +	/* Array of grant references, of size @count. */ +	struct ioctl_gntdev_grant_ref refs[1]; +}; + +/* + * Removes the grant references from the mapping table of an instance of + * of gntdev. N.B. munmap() must be called on the relevant virtual address(es) + * before this ioctl is called, or an error will result. + */ +#define IOCTL_GNTDEV_UNMAP_GRANT_REF \ +_IOC(_IOC_NONE, 'G', 1, sizeof(struct ioctl_gntdev_unmap_grant_ref)) +struct ioctl_gntdev_unmap_grant_ref { +	/* IN parameters */ +	/* The offset was returned by the corresponding map operation. */ +	uint64_t index; +	/* The number of pages to be unmapped. */ +	uint32_t count; +	uint32_t pad; +}; + +/* + * Returns the offset in the driver's address space that corresponds + * to @vaddr. This can be used to perform a munmap(), followed by an + * UNMAP_GRANT_REF ioctl, where no state about the offset is retained by + * the caller. The number of pages that were allocated at the same time as + * @vaddr is returned in @count. + * + * N.B. Where more than one page has been mapped into a contiguous range, the + *      supplied @vaddr must correspond to the start of the range; otherwise + *      an error will result. It is only possible to munmap() the entire + *      contiguously-allocated range at once, and not any subrange thereof. + */ +#define IOCTL_GNTDEV_GET_OFFSET_FOR_VADDR \ +_IOC(_IOC_NONE, 'G', 2, sizeof(struct ioctl_gntdev_get_offset_for_vaddr)) +struct ioctl_gntdev_get_offset_for_vaddr { +	/* IN parameters */ +	/* The virtual address of the first mapped page in a range. */ +	uint64_t vaddr; +	/* OUT parameters */ +	/* The offset that was used in the initial mmap() operation. */ +	uint64_t offset; +	/* The number of pages mapped in the VM area that begins at @vaddr. */ +	uint32_t count; +	uint32_t pad; +}; + +/* + * Sets the maximum number of grants that may mapped at once by this gntdev + * instance. + * + * N.B. This must be called before any other ioctl is performed on the device. + */ +#define IOCTL_GNTDEV_SET_MAX_GRANTS \ +_IOC(_IOC_NONE, 'G', 3, sizeof(struct ioctl_gntdev_set_max_grants)) +struct ioctl_gntdev_set_max_grants { +	/* IN parameter */ +	/* The maximum number of grants that may be mapped at once. */ +	uint32_t count; +}; + +/* + * Sets up an unmap notification within the page, so that the other side can do + * cleanup if this side crashes. Required to implement cross-domain robust + * mutexes or close notification on communication channels. + * + * Each mapped page only supports one notification; multiple calls referring to + * the same page overwrite the previous notification. You must clear the + * notification prior to the IOCTL_GNTALLOC_DEALLOC_GREF if you do not want it + * to occur. + */ +#define IOCTL_GNTDEV_SET_UNMAP_NOTIFY \ +_IOC(_IOC_NONE, 'G', 7, sizeof(struct ioctl_gntdev_unmap_notify)) +struct ioctl_gntdev_unmap_notify { +	/* IN parameters */ +	/* Offset in the file descriptor for a byte within the page (same as +	 * used in mmap). If using UNMAP_NOTIFY_CLEAR_BYTE, this is the byte to +	 * be cleared. Otherwise, it can be any byte in the page whose +	 * notification we are adjusting. +	 */ +	uint64_t index; +	/* Action(s) to take on unmap */ +	uint32_t action; +	/* Event channel to notify */ +	uint32_t event_channel_port; +}; + +/* Clear (set to zero) the byte specified by index */ +#define UNMAP_NOTIFY_CLEAR_BYTE 0x1 +/* Send an interrupt on the indicated event channel */ +#define UNMAP_NOTIFY_SEND_EVENT 0x2 + +#endif /* __LINUX_PUBLIC_GNTDEV_H__ */  | 
