diff options
Diffstat (limited to 'include')
105 files changed, 2511 insertions, 2185 deletions
diff --git a/include/Kbuild b/include/Kbuild index 8d226bfa2696..83256b64166a 100644 --- a/include/Kbuild +++ b/include/Kbuild | |||
| @@ -1,12 +1,8 @@ | |||
| 1 | # Top-level Makefile calls into asm-$(ARCH) | 1 | # Top-level Makefile calls into asm-$(ARCH) |
| 2 | # List only non-arch directories below | 2 | # List only non-arch directories below |
| 3 | 3 | ||
| 4 | header-y += asm-generic/ | ||
| 5 | header-y += linux/ | 4 | header-y += linux/ |
| 6 | header-y += sound/ | 5 | header-y += sound/ |
| 7 | header-y += mtd/ | ||
| 8 | header-y += rdma/ | 6 | header-y += rdma/ |
| 9 | header-y += video/ | 7 | header-y += video/ |
| 10 | header-y += drm/ | ||
| 11 | header-y += xen/ | ||
| 12 | header-y += scsi/ | 8 | header-y += scsi/ |
diff --git a/include/asm-generic/Kbuild b/include/asm-generic/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/asm-generic/Kbuild +++ /dev/null | |||
diff --git a/include/drm/Kbuild b/include/drm/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/drm/Kbuild +++ /dev/null | |||
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h index c78bb997e2c6..c5c35e629426 100644 --- a/include/drm/drm_pciids.h +++ b/include/drm/drm_pciids.h | |||
| @@ -205,9 +205,12 @@ | |||
| 205 | {0x1002, 0x6788, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | 205 | {0x1002, 0x6788, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
| 206 | {0x1002, 0x678A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | 206 | {0x1002, 0x678A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
| 207 | {0x1002, 0x6790, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | 207 | {0x1002, 0x6790, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
| 208 | {0x1002, 0x6791, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | ||
| 209 | {0x1002, 0x6792, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | ||
| 208 | {0x1002, 0x6798, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | 210 | {0x1002, 0x6798, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
| 209 | {0x1002, 0x6799, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | 211 | {0x1002, 0x6799, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
| 210 | {0x1002, 0x679A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | 212 | {0x1002, 0x679A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
| 213 | {0x1002, 0x679B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | ||
| 211 | {0x1002, 0x679E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | 214 | {0x1002, 0x679E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
| 212 | {0x1002, 0x679F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | 215 | {0x1002, 0x679F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
| 213 | {0x1002, 0x6800, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 216 | {0x1002, 0x6800, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
| @@ -217,6 +220,7 @@ | |||
| 217 | {0x1002, 0x6808, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | 220 | {0x1002, 0x6808, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ |
| 218 | {0x1002, 0x6809, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | 221 | {0x1002, 0x6809, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ |
| 219 | {0x1002, 0x6810, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | 222 | {0x1002, 0x6810, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ |
| 223 | {0x1002, 0x6811, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | ||
| 220 | {0x1002, 0x6816, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | 224 | {0x1002, 0x6816, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ |
| 221 | {0x1002, 0x6817, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | 225 | {0x1002, 0x6817, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ |
| 222 | {0x1002, 0x6818, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | 226 | {0x1002, 0x6818, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 5b57367e28db..7fe2dae251e5 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -1,31 +1,5 @@ | |||
| 1 | header-y += byteorder/ | ||
| 2 | header-y += can/ | ||
| 3 | header-y += caif/ | ||
| 4 | header-y += dvb/ | 1 | header-y += dvb/ |
| 5 | header-y += hdlc/ | 2 | header-y += hdlc/ |
| 6 | header-y += hsi/ | 3 | header-y += hsi/ |
| 7 | header-y += isdn/ | ||
| 8 | header-y += mmc/ | ||
| 9 | header-y += nfsd/ | ||
| 10 | header-y += raid/ | 4 | header-y += raid/ |
| 11 | header-y += spi/ | ||
| 12 | header-y += sunrpc/ | ||
| 13 | header-y += tc_act/ | ||
| 14 | header-y += tc_ematch/ | ||
| 15 | header-y += netfilter/ | ||
| 16 | header-y += netfilter_arp/ | ||
| 17 | header-y += netfilter_bridge/ | ||
| 18 | header-y += netfilter_ipv4/ | ||
| 19 | header-y += netfilter_ipv6/ | ||
| 20 | header-y += usb/ | 5 | header-y += usb/ |
| 21 | header-y += wimax/ | ||
| 22 | |||
| 23 | ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/a.out.h \ | ||
| 24 | $(srctree)/arch/$(SRCARCH)/include/uapi/asm/a.out.h),) | ||
| 25 | endif | ||
| 26 | ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm.h \ | ||
| 27 | $(srctree)/arch/$(SRCARCH)/include/uapi/asm/kvm.h),) | ||
| 28 | endif | ||
| 29 | ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm_para.h \ | ||
| 30 | $(srctree)/arch/$(SRCARCH)/include/uapi/asm/kvm_para.h),) | ||
| 31 | endif | ||
diff --git a/include/linux/bug.h b/include/linux/bug.h index aaac4bba6f5c..b1cf40de847e 100644 --- a/include/linux/bug.h +++ b/include/linux/bug.h | |||
| @@ -15,6 +15,7 @@ struct pt_regs; | |||
| 15 | #define BUILD_BUG_ON_NOT_POWER_OF_2(n) | 15 | #define BUILD_BUG_ON_NOT_POWER_OF_2(n) |
| 16 | #define BUILD_BUG_ON_ZERO(e) (0) | 16 | #define BUILD_BUG_ON_ZERO(e) (0) |
| 17 | #define BUILD_BUG_ON_NULL(e) ((void*)0) | 17 | #define BUILD_BUG_ON_NULL(e) ((void*)0) |
| 18 | #define BUILD_BUG_ON_INVALID(e) (0) | ||
| 18 | #define BUILD_BUG_ON(condition) | 19 | #define BUILD_BUG_ON(condition) |
| 19 | #define BUILD_BUG() (0) | 20 | #define BUILD_BUG() (0) |
| 20 | #else /* __CHECKER__ */ | 21 | #else /* __CHECKER__ */ |
diff --git a/include/linux/byteorder/Kbuild b/include/linux/byteorder/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/byteorder/Kbuild +++ /dev/null | |||
diff --git a/include/linux/caif/Kbuild b/include/linux/caif/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/caif/Kbuild +++ /dev/null | |||
diff --git a/include/linux/can/Kbuild b/include/linux/can/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/can/Kbuild +++ /dev/null | |||
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index c12731582920..f9f5e9eeb9dd 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
| @@ -335,8 +335,8 @@ const char *__clk_get_name(struct clk *clk); | |||
| 335 | struct clk_hw *__clk_get_hw(struct clk *clk); | 335 | struct clk_hw *__clk_get_hw(struct clk *clk); |
| 336 | u8 __clk_get_num_parents(struct clk *clk); | 336 | u8 __clk_get_num_parents(struct clk *clk); |
| 337 | struct clk *__clk_get_parent(struct clk *clk); | 337 | struct clk *__clk_get_parent(struct clk *clk); |
| 338 | inline int __clk_get_enable_count(struct clk *clk); | 338 | int __clk_get_enable_count(struct clk *clk); |
| 339 | inline int __clk_get_prepare_count(struct clk *clk); | 339 | int __clk_get_prepare_count(struct clk *clk); |
| 340 | unsigned long __clk_get_rate(struct clk *clk); | 340 | unsigned long __clk_get_rate(struct clk *clk); |
| 341 | unsigned long __clk_get_flags(struct clk *clk); | 341 | unsigned long __clk_get_flags(struct clk *clk); |
| 342 | int __clk_is_enabled(struct clk *clk); | 342 | int __clk_is_enabled(struct clk *clk); |
diff --git a/include/linux/coredump.h b/include/linux/coredump.h index 1775eb8acc03..1d7399314a89 100644 --- a/include/linux/coredump.h +++ b/include/linux/coredump.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/mm.h> | 5 | #include <linux/mm.h> |
| 6 | #include <linux/fs.h> | 6 | #include <linux/fs.h> |
| 7 | #include <asm/siginfo.h> | ||
| 7 | 8 | ||
| 8 | /* | 9 | /* |
| 9 | * These are the only things you should do on a core-file: use only these | 10 | * These are the only things you should do on a core-file: use only these |
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index c18257b0fa72..6dd4787a798a 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h | |||
| @@ -61,7 +61,7 @@ int __dynamic_netdev_dbg(struct _ddebug *descriptor, | |||
| 61 | const char *fmt, ...); | 61 | const char *fmt, ...); |
| 62 | 62 | ||
| 63 | #define DEFINE_DYNAMIC_DEBUG_METADATA(name, fmt) \ | 63 | #define DEFINE_DYNAMIC_DEBUG_METADATA(name, fmt) \ |
| 64 | static struct _ddebug __used __aligned(8) \ | 64 | static struct _ddebug __aligned(8) \ |
| 65 | __attribute__((section("__verbose"))) name = { \ | 65 | __attribute__((section("__verbose"))) name = { \ |
| 66 | .modname = KBUILD_MODNAME, \ | 66 | .modname = KBUILD_MODNAME, \ |
| 67 | .function = __func__, \ | 67 | .function = __func__, \ |
diff --git a/include/linux/elf-fdpic.h b/include/linux/elf-fdpic.h new file mode 100644 index 000000000000..386440317b0c --- /dev/null +++ b/include/linux/elf-fdpic.h | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | /* FDPIC ELF load map | ||
| 2 | * | ||
| 3 | * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved. | ||
| 4 | * Written by David Howells (dhowells@redhat.com) | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or | ||
| 7 | * modify it under the terms of the GNU General Public License | ||
| 8 | * as published by the Free Software Foundation; either version | ||
| 9 | * 2 of the License, or (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef _LINUX_ELF_FDPIC_H | ||
| 13 | #define _LINUX_ELF_FDPIC_H | ||
| 14 | |||
| 15 | #include <uapi/linux/elf-fdpic.h> | ||
| 16 | |||
| 17 | /* | ||
| 18 | * binfmt binary parameters structure | ||
| 19 | */ | ||
| 20 | struct elf_fdpic_params { | ||
| 21 | struct elfhdr hdr; /* ref copy of ELF header */ | ||
| 22 | struct elf_phdr *phdrs; /* ref copy of PT_PHDR table */ | ||
| 23 | struct elf32_fdpic_loadmap *loadmap; /* loadmap to be passed to userspace */ | ||
| 24 | unsigned long elfhdr_addr; /* mapped ELF header user address */ | ||
| 25 | unsigned long ph_addr; /* mapped PT_PHDR user address */ | ||
| 26 | unsigned long map_addr; /* mapped loadmap user address */ | ||
| 27 | unsigned long entry_addr; /* mapped entry user address */ | ||
| 28 | unsigned long stack_size; /* stack size requested (PT_GNU_STACK) */ | ||
| 29 | unsigned long dynamic_addr; /* mapped PT_DYNAMIC user address */ | ||
| 30 | unsigned long load_addr; /* user address at which to map binary */ | ||
| 31 | unsigned long flags; | ||
| 32 | #define ELF_FDPIC_FLAG_ARRANGEMENT 0x0000000f /* PT_LOAD arrangement flags */ | ||
| 33 | #define ELF_FDPIC_FLAG_INDEPENDENT 0x00000000 /* PT_LOADs can be put anywhere */ | ||
| 34 | #define ELF_FDPIC_FLAG_HONOURVADDR 0x00000001 /* PT_LOAD.vaddr must be honoured */ | ||
| 35 | #define ELF_FDPIC_FLAG_CONSTDISP 0x00000002 /* PT_LOADs require constant | ||
| 36 | * displacement */ | ||
| 37 | #define ELF_FDPIC_FLAG_CONTIGUOUS 0x00000003 /* PT_LOADs should be contiguous */ | ||
| 38 | #define ELF_FDPIC_FLAG_EXEC_STACK 0x00000010 /* T if stack to be executable */ | ||
| 39 | #define ELF_FDPIC_FLAG_NOEXEC_STACK 0x00000020 /* T if stack not to be executable */ | ||
| 40 | #define ELF_FDPIC_FLAG_EXECUTABLE 0x00000040 /* T if this object is the executable */ | ||
| 41 | #define ELF_FDPIC_FLAG_PRESENT 0x80000000 /* T if this object is present */ | ||
| 42 | }; | ||
| 43 | |||
| 44 | #ifdef CONFIG_MMU | ||
| 45 | extern void elf_fdpic_arch_lay_out_mm(struct elf_fdpic_params *exec_params, | ||
| 46 | struct elf_fdpic_params *interp_params, | ||
| 47 | unsigned long *start_stack, | ||
| 48 | unsigned long *start_brk); | ||
| 49 | #endif | ||
| 50 | |||
| 51 | #endif /* _LINUX_ELF_FDPIC_H */ | ||
diff --git a/include/linux/extcon.h b/include/linux/extcon.h index 7443a560c9d0..2c26c14cd710 100644 --- a/include/linux/extcon.h +++ b/include/linux/extcon.h | |||
| @@ -68,7 +68,7 @@ enum extcon_cable_name { | |||
| 68 | EXTCON_VIDEO_OUT, | 68 | EXTCON_VIDEO_OUT, |
| 69 | EXTCON_MECHANICAL, | 69 | EXTCON_MECHANICAL, |
| 70 | }; | 70 | }; |
| 71 | extern const char *extcon_cable_name[]; | 71 | extern const char extcon_cable_name[][CABLE_NAME_MAX + 1]; |
| 72 | 72 | ||
| 73 | struct extcon_cable; | 73 | struct extcon_cable; |
| 74 | 74 | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index 001c7cff2d48..75fe9a134803 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -64,6 +64,73 @@ typedef void (dio_iodone_t)(struct kiocb *iocb, loff_t offset, | |||
| 64 | ssize_t bytes, void *private, int ret, | 64 | ssize_t bytes, void *private, int ret, |
| 65 | bool is_async); | 65 | bool is_async); |
| 66 | 66 | ||
| 67 | #define MAY_EXEC 0x00000001 | ||
| 68 | #define MAY_WRITE 0x00000002 | ||
| 69 | #define MAY_READ 0x00000004 | ||
| 70 | #define MAY_APPEND 0x00000008 | ||
| 71 | #define MAY_ACCESS 0x00000010 | ||
| 72 | #define MAY_OPEN 0x00000020 | ||
| 73 | #define MAY_CHDIR 0x00000040 | ||
| 74 | /* called from RCU mode, don't block */ | ||
| 75 | #define MAY_NOT_BLOCK 0x00000080 | ||
| 76 | |||
| 77 | /* | ||
| 78 | * flags in file.f_mode. Note that FMODE_READ and FMODE_WRITE must correspond | ||
| 79 | * to O_WRONLY and O_RDWR via the strange trick in __dentry_open() | ||
| 80 | */ | ||
| 81 | |||
| 82 | /* file is open for reading */ | ||
| 83 | #define FMODE_READ ((__force fmode_t)0x1) | ||
| 84 | /* file is open for writing */ | ||
| 85 | #define FMODE_WRITE ((__force fmode_t)0x2) | ||
| 86 | /* file is seekable */ | ||
| 87 | #define FMODE_LSEEK ((__force fmode_t)0x4) | ||
| 88 | /* file can be accessed using pread */ | ||
| 89 | #define FMODE_PREAD ((__force fmode_t)0x8) | ||
| 90 | /* file can be accessed using pwrite */ | ||
| 91 | #define FMODE_PWRITE ((__force fmode_t)0x10) | ||
| 92 | /* File is opened for execution with sys_execve / sys_uselib */ | ||
| 93 | #define FMODE_EXEC ((__force fmode_t)0x20) | ||
| 94 | /* File is opened with O_NDELAY (only set for block devices) */ | ||
| 95 | #define FMODE_NDELAY ((__force fmode_t)0x40) | ||
| 96 | /* File is opened with O_EXCL (only set for block devices) */ | ||
| 97 | #define FMODE_EXCL ((__force fmode_t)0x80) | ||
| 98 | /* File is opened using open(.., 3, ..) and is writeable only for ioctls | ||
| 99 | (specialy hack for floppy.c) */ | ||
| 100 | #define FMODE_WRITE_IOCTL ((__force fmode_t)0x100) | ||
| 101 | /* 32bit hashes as llseek() offset (for directories) */ | ||
| 102 | #define FMODE_32BITHASH ((__force fmode_t)0x200) | ||
| 103 | /* 64bit hashes as llseek() offset (for directories) */ | ||
| 104 | #define FMODE_64BITHASH ((__force fmode_t)0x400) | ||
| 105 | |||
| 106 | /* | ||
| 107 | * Don't update ctime and mtime. | ||
| 108 | * | ||
| 109 | * Currently a special hack for the XFS open_by_handle ioctl, but we'll | ||
| 110 | * hopefully graduate it to a proper O_CMTIME flag supported by open(2) soon. | ||
| 111 | */ | ||
| 112 | #define FMODE_NOCMTIME ((__force fmode_t)0x800) | ||
| 113 | |||
| 114 | /* Expect random access pattern */ | ||
| 115 | #define FMODE_RANDOM ((__force fmode_t)0x1000) | ||
| 116 | |||
| 117 | /* File is huge (eg. /dev/kmem): treat loff_t as unsigned */ | ||
| 118 | #define FMODE_UNSIGNED_OFFSET ((__force fmode_t)0x2000) | ||
| 119 | |||
| 120 | /* File is opened with O_PATH; almost nothing can be done with it */ | ||
| 121 | #define FMODE_PATH ((__force fmode_t)0x4000) | ||
| 122 | |||
| 123 | /* File was opened by fanotify and shouldn't generate fanotify events */ | ||
| 124 | #define FMODE_NONOTIFY ((__force fmode_t)0x1000000) | ||
| 125 | |||
| 126 | /* | ||
| 127 | * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector | ||
| 128 | * that indicates that they should check the contents of the iovec are | ||
| 129 | * valid, but not check the memory that the iovec elements | ||
| 130 | * points too. | ||
| 131 | */ | ||
| 132 | #define CHECK_IOVEC_ONLY -1 | ||
| 133 | |||
| 67 | /* | 134 | /* |
| 68 | * The below are the various read and write types that we support. Some of | 135 | * The below are the various read and write types that we support. Some of |
| 69 | * them include behavioral modifiers that send information down to the | 136 | * them include behavioral modifiers that send information down to the |
| @@ -395,8 +462,6 @@ struct block_device { | |||
| 395 | int bd_fsfreeze_count; | 462 | int bd_fsfreeze_count; |
| 396 | /* Mutex for freeze */ | 463 | /* Mutex for freeze */ |
| 397 | struct mutex bd_fsfreeze_mutex; | 464 | struct mutex bd_fsfreeze_mutex; |
| 398 | /* A semaphore that prevents I/O while block size is being changed */ | ||
| 399 | struct percpu_rw_semaphore bd_block_size_semaphore; | ||
| 400 | }; | 465 | }; |
| 401 | 466 | ||
| 402 | /* | 467 | /* |
| @@ -1557,6 +1622,60 @@ struct super_operations { | |||
| 1557 | }; | 1622 | }; |
| 1558 | 1623 | ||
| 1559 | /* | 1624 | /* |
| 1625 | * Inode flags - they have no relation to superblock flags now | ||
| 1626 | */ | ||
| 1627 | #define S_SYNC 1 /* Writes are synced at once */ | ||
| 1628 | #define S_NOATIME 2 /* Do not update access times */ | ||
| 1629 | #define S_APPEND 4 /* Append-only file */ | ||
| 1630 | #define S_IMMUTABLE 8 /* Immutable file */ | ||
| 1631 | #define S_DEAD 16 /* removed, but still open directory */ | ||
| 1632 | #define S_NOQUOTA 32 /* Inode is not counted to quota */ | ||
| 1633 | #define S_DIRSYNC 64 /* Directory modifications are synchronous */ | ||
| 1634 | #define S_NOCMTIME 128 /* Do not update file c/mtime */ | ||
| 1635 | #define S_SWAPFILE 256 /* Do not truncate: swapon got its bmaps */ | ||
| 1636 | #define S_PRIVATE 512 /* Inode is fs-internal */ | ||
| 1637 | #define S_IMA 1024 /* Inode has an associated IMA struct */ | ||
| 1638 | #define S_AUTOMOUNT 2048 /* Automount/referral quasi-directory */ | ||
| 1639 | #define S_NOSEC 4096 /* no suid or xattr security attributes */ | ||
| 1640 | |||
| 1641 | /* | ||
| 1642 | * Note that nosuid etc flags are inode-specific: setting some file-system | ||
| 1643 | * flags just means all the inodes inherit those flags by default. It might be | ||
| 1644 | * possible to override it selectively if you really wanted to with some | ||
| 1645 | * ioctl() that is not currently implemented. | ||
| 1646 | * | ||
| 1647 | * Exception: MS_RDONLY is always applied to the entire file system. | ||
| 1648 | * | ||
| 1649 | * Unfortunately, it is possible to change a filesystems flags with it mounted | ||
| 1650 | * with files in use. This means that all of the inodes will not have their | ||
| 1651 | * i_flags updated. Hence, i_flags no longer inherit the superblock mount | ||
| 1652 | * flags, so these have to be checked separately. -- rmk@arm.uk.linux.org | ||
| 1653 | */ | ||
| 1654 | #define __IS_FLG(inode, flg) ((inode)->i_sb->s_flags & (flg)) | ||
| 1655 | |||
| 1656 | #define IS_RDONLY(inode) ((inode)->i_sb->s_flags & MS_RDONLY) | ||
| 1657 | #define IS_SYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS) || \ | ||
| 1658 | ((inode)->i_flags & S_SYNC)) | ||
| 1659 | #define IS_DIRSYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS|MS_DIRSYNC) || \ | ||
| 1660 | ((inode)->i_flags & (S_SYNC|S_DIRSYNC))) | ||
| 1661 | #define IS_MANDLOCK(inode) __IS_FLG(inode, MS_MANDLOCK) | ||
| 1662 | #define IS_NOATIME(inode) __IS_FLG(inode, MS_RDONLY|MS_NOATIME) | ||
| 1663 | #define IS_I_VERSION(inode) __IS_FLG(inode, MS_I_VERSION) | ||
| 1664 | |||
| 1665 | #define IS_NOQUOTA(inode) ((inode)->i_flags & S_NOQUOTA) | ||
| 1666 | #define IS_APPEND(inode) ((inode)->i_flags & S_APPEND) | ||
| 1667 | #define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE) | ||
| 1668 | #define IS_POSIXACL(inode) __IS_FLG(inode, MS_POSIXACL) | ||
| 1669 | |||
| 1670 | #define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD) | ||
| 1671 | #define IS_NOCMTIME(inode) ((inode)->i_flags & S_NOCMTIME) | ||
| 1672 | #define IS_SWAPFILE(inode) ((inode)->i_flags & S_SWAPFILE) | ||
| 1673 | #define IS_PRIVATE(inode) ((inode)->i_flags & S_PRIVATE) | ||
| 1674 | #define IS_IMA(inode) ((inode)->i_flags & S_IMA) | ||
| 1675 | #define IS_AUTOMOUNT(inode) ((inode)->i_flags & S_AUTOMOUNT) | ||
| 1676 | #define IS_NOSEC(inode) ((inode)->i_flags & S_NOSEC) | ||
| 1677 | |||
| 1678 | /* | ||
| 1560 | * Inode state bits. Protected by inode->i_lock | 1679 | * Inode state bits. Protected by inode->i_lock |
| 1561 | * | 1680 | * |
| 1562 | * Three bits determine the dirty state of the inode, I_DIRTY_SYNC, | 1681 | * Three bits determine the dirty state of the inode, I_DIRTY_SYNC, |
| @@ -1688,6 +1807,11 @@ int sync_inode_metadata(struct inode *inode, int wait); | |||
| 1688 | struct file_system_type { | 1807 | struct file_system_type { |
| 1689 | const char *name; | 1808 | const char *name; |
| 1690 | int fs_flags; | 1809 | int fs_flags; |
| 1810 | #define FS_REQUIRES_DEV 1 | ||
| 1811 | #define FS_BINARY_MOUNTDATA 2 | ||
| 1812 | #define FS_HAS_SUBTYPE 4 | ||
| 1813 | #define FS_REVAL_DOT 16384 /* Check the paths ".", ".." for staleness */ | ||
| 1814 | #define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during rename() internally. */ | ||
| 1691 | struct dentry *(*mount) (struct file_system_type *, int, | 1815 | struct dentry *(*mount) (struct file_system_type *, int, |
| 1692 | const char *, void *); | 1816 | const char *, void *); |
| 1693 | void (*kill_sb) (struct super_block *); | 1817 | void (*kill_sb) (struct super_block *); |
| @@ -1923,7 +2047,6 @@ extern void unregister_blkdev(unsigned int, const char *); | |||
| 1923 | extern struct block_device *bdget(dev_t); | 2047 | extern struct block_device *bdget(dev_t); |
| 1924 | extern struct block_device *bdgrab(struct block_device *bdev); | 2048 | extern struct block_device *bdgrab(struct block_device *bdev); |
| 1925 | extern void bd_set_size(struct block_device *, loff_t size); | 2049 | extern void bd_set_size(struct block_device *, loff_t size); |
| 1926 | extern sector_t blkdev_max_block(struct block_device *bdev); | ||
| 1927 | extern void bd_forget(struct inode *inode); | 2050 | extern void bd_forget(struct inode *inode); |
| 1928 | extern void bdput(struct block_device *); | 2051 | extern void bdput(struct block_device *); |
| 1929 | extern void invalidate_bdev(struct block_device *); | 2052 | extern void invalidate_bdev(struct block_device *); |
| @@ -2253,8 +2376,6 @@ extern int generic_segment_checks(const struct iovec *iov, | |||
| 2253 | unsigned long *nr_segs, size_t *count, int access_flags); | 2376 | unsigned long *nr_segs, size_t *count, int access_flags); |
| 2254 | 2377 | ||
| 2255 | /* fs/block_dev.c */ | 2378 | /* fs/block_dev.c */ |
| 2256 | extern ssize_t blkdev_aio_read(struct kiocb *iocb, const struct iovec *iov, | ||
| 2257 | unsigned long nr_segs, loff_t pos); | ||
| 2258 | extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, | 2379 | extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, |
| 2259 | unsigned long nr_segs, loff_t pos); | 2380 | unsigned long nr_segs, loff_t pos); |
| 2260 | extern int blkdev_fsync(struct file *filp, loff_t start, loff_t end, | 2381 | extern int blkdev_fsync(struct file *filp, loff_t start, loff_t end, |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 02c1c9710be0..d0a79678f169 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
| @@ -31,6 +31,7 @@ struct vm_area_struct; | |||
| 31 | #define ___GFP_THISNODE 0x40000u | 31 | #define ___GFP_THISNODE 0x40000u |
| 32 | #define ___GFP_RECLAIMABLE 0x80000u | 32 | #define ___GFP_RECLAIMABLE 0x80000u |
| 33 | #define ___GFP_NOTRACK 0x200000u | 33 | #define ___GFP_NOTRACK 0x200000u |
| 34 | #define ___GFP_NO_KSWAPD 0x400000u | ||
| 34 | #define ___GFP_OTHER_NODE 0x800000u | 35 | #define ___GFP_OTHER_NODE 0x800000u |
| 35 | #define ___GFP_WRITE 0x1000000u | 36 | #define ___GFP_WRITE 0x1000000u |
| 36 | 37 | ||
| @@ -85,6 +86,7 @@ struct vm_area_struct; | |||
| 85 | #define __GFP_RECLAIMABLE ((__force gfp_t)___GFP_RECLAIMABLE) /* Page is reclaimable */ | 86 | #define __GFP_RECLAIMABLE ((__force gfp_t)___GFP_RECLAIMABLE) /* Page is reclaimable */ |
| 86 | #define __GFP_NOTRACK ((__force gfp_t)___GFP_NOTRACK) /* Don't track with kmemcheck */ | 87 | #define __GFP_NOTRACK ((__force gfp_t)___GFP_NOTRACK) /* Don't track with kmemcheck */ |
| 87 | 88 | ||
| 89 | #define __GFP_NO_KSWAPD ((__force gfp_t)___GFP_NO_KSWAPD) | ||
| 88 | #define __GFP_OTHER_NODE ((__force gfp_t)___GFP_OTHER_NODE) /* On behalf of other node */ | 90 | #define __GFP_OTHER_NODE ((__force gfp_t)___GFP_OTHER_NODE) /* On behalf of other node */ |
| 89 | #define __GFP_WRITE ((__force gfp_t)___GFP_WRITE) /* Allocator intends to dirty page */ | 91 | #define __GFP_WRITE ((__force gfp_t)___GFP_WRITE) /* Allocator intends to dirty page */ |
| 90 | 92 | ||
| @@ -114,7 +116,8 @@ struct vm_area_struct; | |||
| 114 | __GFP_MOVABLE) | 116 | __GFP_MOVABLE) |
| 115 | #define GFP_IOFS (__GFP_IO | __GFP_FS) | 117 | #define GFP_IOFS (__GFP_IO | __GFP_FS) |
| 116 | #define GFP_TRANSHUGE (GFP_HIGHUSER_MOVABLE | __GFP_COMP | \ | 118 | #define GFP_TRANSHUGE (GFP_HIGHUSER_MOVABLE | __GFP_COMP | \ |
| 117 | __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN) | 119 | __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN | \ |
| 120 | __GFP_NO_KSWAPD) | ||
| 118 | 121 | ||
| 119 | #ifdef CONFIG_NUMA | 122 | #ifdef CONFIG_NUMA |
| 120 | #define GFP_THISNODE (__GFP_THISNODE | __GFP_NOWARN | __GFP_NORETRY) | 123 | #define GFP_THISNODE (__GFP_THISNODE | __GFP_NOWARN | __GFP_NORETRY) |
diff --git a/include/linux/hashtable.h b/include/linux/hashtable.h new file mode 100644 index 000000000000..227c62424f3c --- /dev/null +++ b/include/linux/hashtable.h | |||
| @@ -0,0 +1,192 @@ | |||
| 1 | /* | ||
| 2 | * Statically sized hash table implementation | ||
| 3 | * (C) 2012 Sasha Levin <levinsasha928@gmail.com> | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef _LINUX_HASHTABLE_H | ||
| 7 | #define _LINUX_HASHTABLE_H | ||
| 8 | |||
| 9 | #include <linux/list.h> | ||
| 10 | #include <linux/types.h> | ||
| 11 | #include <linux/kernel.h> | ||
| 12 | #include <linux/hash.h> | ||
| 13 | #include <linux/rculist.h> | ||
| 14 | |||
| 15 | #define DEFINE_HASHTABLE(name, bits) \ | ||
| 16 | struct hlist_head name[1 << (bits)] = \ | ||
| 17 | { [0 ... ((1 << (bits)) - 1)] = HLIST_HEAD_INIT } | ||
| 18 | |||
| 19 | #define DECLARE_HASHTABLE(name, bits) \ | ||
| 20 | struct hlist_head name[1 << (bits)] | ||
| 21 | |||
| 22 | #define HASH_SIZE(name) (ARRAY_SIZE(name)) | ||
| 23 | #define HASH_BITS(name) ilog2(HASH_SIZE(name)) | ||
| 24 | |||
| 25 | /* Use hash_32 when possible to allow for fast 32bit hashing in 64bit kernels. */ | ||
| 26 | #define hash_min(val, bits) \ | ||
| 27 | (sizeof(val) <= 4 ? hash_32(val, bits) : hash_long(val, bits)) | ||
| 28 | |||
| 29 | static inline void __hash_init(struct hlist_head *ht, unsigned int sz) | ||
| 30 | { | ||
| 31 | unsigned int i; | ||
| 32 | |||
| 33 | for (i = 0; i < sz; i++) | ||
| 34 | INIT_HLIST_HEAD(&ht[i]); | ||
| 35 | } | ||
| 36 | |||
| 37 | /** | ||
| 38 | * hash_init - initialize a hash table | ||
| 39 | * @hashtable: hashtable to be initialized | ||
| 40 | * | ||
| 41 | * Calculates the size of the hashtable from the given parameter, otherwise | ||
| 42 | * same as hash_init_size. | ||
| 43 | * | ||
| 44 | * This has to be a macro since HASH_BITS() will not work on pointers since | ||
| 45 | * it calculates the size during preprocessing. | ||
| 46 | */ | ||
| 47 | #define hash_init(hashtable) __hash_init(hashtable, HASH_SIZE(hashtable)) | ||
| 48 | |||
| 49 | /** | ||
| 50 | * hash_add - add an object to a hashtable | ||
| 51 | * @hashtable: hashtable to add to | ||
| 52 | * @node: the &struct hlist_node of the object to be added | ||
| 53 | * @key: the key of the object to be added | ||
| 54 | */ | ||
| 55 | #define hash_add(hashtable, node, key) \ | ||
| 56 | hlist_add_head(node, &hashtable[hash_min(key, HASH_BITS(hashtable))]) | ||
| 57 | |||
| 58 | /** | ||
| 59 | * hash_add_rcu - add an object to a rcu enabled hashtable | ||
| 60 | * @hashtable: hashtable to add to | ||
| 61 | * @node: the &struct hlist_node of the object to be added | ||
| 62 | * @key: the key of the object to be added | ||
| 63 | */ | ||
| 64 | #define hash_add_rcu(hashtable, node, key) \ | ||
| 65 | hlist_add_head_rcu(node, &hashtable[hash_min(key, HASH_BITS(hashtable))]) | ||
| 66 | |||
| 67 | /** | ||
| 68 | * hash_hashed - check whether an object is in any hashtable | ||
| 69 | * @node: the &struct hlist_node of the object to be checked | ||
| 70 | */ | ||
| 71 | static inline bool hash_hashed(struct hlist_node *node) | ||
| 72 | { | ||
| 73 | return !hlist_unhashed(node); | ||
| 74 | } | ||
| 75 | |||
| 76 | static inline bool __hash_empty(struct hlist_head *ht, unsigned int sz) | ||
| 77 | { | ||
| 78 | unsigned int i; | ||
| 79 | |||
| 80 | for (i = 0; i < sz; i++) | ||
| 81 | if (!hlist_empty(&ht[i])) | ||
| 82 | return false; | ||
| 83 | |||
| 84 | return true; | ||
| 85 | } | ||
| 86 | |||
| 87 | /** | ||
| 88 | * hash_empty - check whether a hashtable is empty | ||
| 89 | * @hashtable: hashtable to check | ||
| 90 | * | ||
| 91 | * This has to be a macro since HASH_BITS() will not work on pointers since | ||
| 92 | * it calculates the size during preprocessing. | ||
| 93 | */ | ||
| 94 | #define hash_empty(hashtable) __hash_empty(hashtable, HASH_SIZE(hashtable)) | ||
| 95 | |||
| 96 | /** | ||
| 97 | * hash_del - remove an object from a hashtable | ||
| 98 | * @node: &struct hlist_node of the object to remove | ||
| 99 | */ | ||
| 100 | static inline void hash_del(struct hlist_node *node) | ||
| 101 | { | ||
| 102 | hlist_del_init(node); | ||
| 103 | } | ||
| 104 | |||
| 105 | /** | ||
| 106 | * hash_del_rcu - remove an object from a rcu enabled hashtable | ||
| 107 | * @node: &struct hlist_node of the object to remove | ||
| 108 | */ | ||
| 109 | static inline void hash_del_rcu(struct hlist_node *node) | ||
| 110 | { | ||
| 111 | hlist_del_init_rcu(node); | ||
| 112 | } | ||
| 113 | |||
| 114 | /** | ||
| 115 | * hash_for_each - iterate over a hashtable | ||
| 116 | * @name: hashtable to iterate | ||
| 117 | * @bkt: integer to use as bucket loop cursor | ||
| 118 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 119 | * @obj: the type * to use as a loop cursor for each entry | ||
| 120 | * @member: the name of the hlist_node within the struct | ||
| 121 | */ | ||
| 122 | #define hash_for_each(name, bkt, node, obj, member) \ | ||
| 123 | for ((bkt) = 0, node = NULL; node == NULL && (bkt) < HASH_SIZE(name); (bkt)++)\ | ||
| 124 | hlist_for_each_entry(obj, node, &name[bkt], member) | ||
| 125 | |||
| 126 | /** | ||
| 127 | * hash_for_each_rcu - iterate over a rcu enabled hashtable | ||
| 128 | * @name: hashtable to iterate | ||
| 129 | * @bkt: integer to use as bucket loop cursor | ||
| 130 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 131 | * @obj: the type * to use as a loop cursor for each entry | ||
| 132 | * @member: the name of the hlist_node within the struct | ||
| 133 | */ | ||
| 134 | #define hash_for_each_rcu(name, bkt, node, obj, member) \ | ||
| 135 | for ((bkt) = 0, node = NULL; node == NULL && (bkt) < HASH_SIZE(name); (bkt)++)\ | ||
| 136 | hlist_for_each_entry_rcu(obj, node, &name[bkt], member) | ||
| 137 | |||
| 138 | /** | ||
| 139 | * hash_for_each_safe - iterate over a hashtable safe against removal of | ||
| 140 | * hash entry | ||
| 141 | * @name: hashtable to iterate | ||
| 142 | * @bkt: integer to use as bucket loop cursor | ||
| 143 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 144 | * @tmp: a &struct used for temporary storage | ||
| 145 | * @obj: the type * to use as a loop cursor for each entry | ||
| 146 | * @member: the name of the hlist_node within the struct | ||
| 147 | */ | ||
| 148 | #define hash_for_each_safe(name, bkt, node, tmp, obj, member) \ | ||
| 149 | for ((bkt) = 0, node = NULL; node == NULL && (bkt) < HASH_SIZE(name); (bkt)++)\ | ||
| 150 | hlist_for_each_entry_safe(obj, node, tmp, &name[bkt], member) | ||
| 151 | |||
| 152 | /** | ||
| 153 | * hash_for_each_possible - iterate over all possible objects hashing to the | ||
| 154 | * same bucket | ||
| 155 | * @name: hashtable to iterate | ||
| 156 | * @obj: the type * to use as a loop cursor for each entry | ||
| 157 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 158 | * @member: the name of the hlist_node within the struct | ||
| 159 | * @key: the key of the objects to iterate over | ||
| 160 | */ | ||
| 161 | #define hash_for_each_possible(name, obj, node, member, key) \ | ||
| 162 | hlist_for_each_entry(obj, node, &name[hash_min(key, HASH_BITS(name))], member) | ||
| 163 | |||
| 164 | /** | ||
| 165 | * hash_for_each_possible_rcu - iterate over all possible objects hashing to the | ||
| 166 | * same bucket in an rcu enabled hashtable | ||
| 167 | * in a rcu enabled hashtable | ||
| 168 | * @name: hashtable to iterate | ||
| 169 | * @obj: the type * to use as a loop cursor for each entry | ||
| 170 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 171 | * @member: the name of the hlist_node within the struct | ||
| 172 | * @key: the key of the objects to iterate over | ||
| 173 | */ | ||
| 174 | #define hash_for_each_possible_rcu(name, obj, node, member, key) \ | ||
| 175 | hlist_for_each_entry_rcu(obj, node, &name[hash_min(key, HASH_BITS(name))], member) | ||
| 176 | |||
| 177 | /** | ||
| 178 | * hash_for_each_possible_safe - iterate over all possible objects hashing to the | ||
| 179 | * same bucket safe against removals | ||
| 180 | * @name: hashtable to iterate | ||
| 181 | * @obj: the type * to use as a loop cursor for each entry | ||
| 182 | * @node: the &struct list_head to use as a loop cursor for each entry | ||
| 183 | * @tmp: a &struct used for temporary storage | ||
| 184 | * @member: the name of the hlist_node within the struct | ||
| 185 | * @key: the key of the objects to iterate over | ||
| 186 | */ | ||
| 187 | #define hash_for_each_possible_safe(name, obj, node, tmp, member, key) \ | ||
| 188 | hlist_for_each_entry_safe(obj, node, tmp, \ | ||
| 189 | &name[hash_min(key, HASH_BITS(name))], member) | ||
| 190 | |||
| 191 | |||
| 192 | #endif | ||
diff --git a/include/linux/hsi/Kbuild b/include/linux/hsi/Kbuild index 271a770b4784..e69de29bb2d1 100644 --- a/include/linux/hsi/Kbuild +++ b/include/linux/hsi/Kbuild | |||
| @@ -1 +0,0 @@ | |||
| 1 | header-y += hsi_char.h | ||
diff --git a/include/linux/hw_breakpoint.h b/include/linux/hw_breakpoint.h index 6ae9c631a1be..0464c85e63fd 100644 --- a/include/linux/hw_breakpoint.h +++ b/include/linux/hw_breakpoint.h | |||
| @@ -1,35 +1,8 @@ | |||
| 1 | #ifndef _LINUX_HW_BREAKPOINT_H | 1 | #ifndef _LINUX_HW_BREAKPOINT_H |
| 2 | #define _LINUX_HW_BREAKPOINT_H | 2 | #define _LINUX_HW_BREAKPOINT_H |
| 3 | 3 | ||
| 4 | enum { | ||
| 5 | HW_BREAKPOINT_LEN_1 = 1, | ||
| 6 | HW_BREAKPOINT_LEN_2 = 2, | ||
| 7 | HW_BREAKPOINT_LEN_4 = 4, | ||
| 8 | HW_BREAKPOINT_LEN_8 = 8, | ||
| 9 | }; | ||
| 10 | |||
| 11 | enum { | ||
| 12 | HW_BREAKPOINT_EMPTY = 0, | ||
| 13 | HW_BREAKPOINT_R = 1, | ||
| 14 | HW_BREAKPOINT_W = 2, | ||
| 15 | HW_BREAKPOINT_RW = HW_BREAKPOINT_R | HW_BREAKPOINT_W, | ||
| 16 | HW_BREAKPOINT_X = 4, | ||
| 17 | HW_BREAKPOINT_INVALID = HW_BREAKPOINT_RW | HW_BREAKPOINT_X, | ||
| 18 | }; | ||
| 19 | |||
| 20 | enum bp_type_idx { | ||
| 21 | TYPE_INST = 0, | ||
| 22 | #ifdef CONFIG_HAVE_MIXED_BREAKPOINTS_REGS | ||
| 23 | TYPE_DATA = 0, | ||
| 24 | #else | ||
| 25 | TYPE_DATA = 1, | ||
| 26 | #endif | ||
| 27 | TYPE_MAX | ||
| 28 | }; | ||
| 29 | |||
| 30 | #ifdef __KERNEL__ | ||
| 31 | |||
| 32 | #include <linux/perf_event.h> | 4 | #include <linux/perf_event.h> |
| 5 | #include <uapi/linux/hw_breakpoint.h> | ||
| 33 | 6 | ||
| 34 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | 7 | #ifdef CONFIG_HAVE_HW_BREAKPOINT |
| 35 | 8 | ||
| @@ -151,6 +124,4 @@ static inline struct arch_hw_breakpoint *counter_arch_bp(struct perf_event *bp) | |||
| 151 | } | 124 | } |
| 152 | 125 | ||
| 153 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | 126 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ |
| 154 | #endif /* __KERNEL__ */ | ||
| 155 | |||
| 156 | #endif /* _LINUX_HW_BREAKPOINT_H */ | 127 | #endif /* _LINUX_HW_BREAKPOINT_H */ |
diff --git a/include/linux/i2c-omap.h b/include/linux/i2c-omap.h index df804ba73e0b..92a0dc75bc74 100644 --- a/include/linux/i2c-omap.h +++ b/include/linux/i2c-omap.h | |||
| @@ -34,6 +34,7 @@ struct omap_i2c_bus_platform_data { | |||
| 34 | u32 clkrate; | 34 | u32 clkrate; |
| 35 | u32 rev; | 35 | u32 rev; |
| 36 | u32 flags; | 36 | u32 flags; |
| 37 | void (*set_mpu_wkup_lat)(struct device *dev, long set); | ||
| 37 | }; | 38 | }; |
| 38 | 39 | ||
| 39 | #endif | 40 | #endif |
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index c0ae76ac4e0b..7806c24e5bc8 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h | |||
| @@ -618,4 +618,20 @@ static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) | |||
| 618 | }; | 618 | }; |
| 619 | #endif | 619 | #endif |
| 620 | 620 | ||
| 621 | /** | ||
| 622 | * IIO_DEGREE_TO_RAD() - Convert degree to rad | ||
| 623 | * @deg: A value in degree | ||
| 624 | * | ||
| 625 | * Returns the given value converted from degree to rad | ||
| 626 | */ | ||
| 627 | #define IIO_DEGREE_TO_RAD(deg) (((deg) * 314159ULL + 9000000ULL) / 18000000ULL) | ||
| 628 | |||
| 629 | /** | ||
| 630 | * IIO_G_TO_M_S_2() - Convert g to meter / second**2 | ||
| 631 | * @g: A value in g | ||
| 632 | * | ||
| 633 | * Returns the given value converted from g to meter / second**2 | ||
| 634 | */ | ||
| 635 | #define IIO_G_TO_M_S_2(g) ((g) * 980665ULL / 100000ULL) | ||
| 636 | |||
| 621 | #endif /* _INDUSTRIAL_IO_H_ */ | 637 | #endif /* _INDUSTRIAL_IO_H_ */ |
diff --git a/include/linux/isdn/Kbuild b/include/linux/isdn/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/isdn/Kbuild +++ /dev/null | |||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index a123b13b70fd..7d8dfc7392f1 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -701,6 +701,13 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } | |||
| 701 | #define COMPACTION_BUILD 0 | 701 | #define COMPACTION_BUILD 0 |
| 702 | #endif | 702 | #endif |
| 703 | 703 | ||
| 704 | /* This helps us to avoid #ifdef CONFIG_SYMBOL_PREFIX */ | ||
| 705 | #ifdef CONFIG_SYMBOL_PREFIX | ||
| 706 | #define SYMBOL_PREFIX CONFIG_SYMBOL_PREFIX | ||
| 707 | #else | ||
| 708 | #define SYMBOL_PREFIX "" | ||
| 709 | #endif | ||
| 710 | |||
| 704 | /* Rebuild everything on CONFIG_FTRACE_MCOUNT_RECORD */ | 711 | /* Rebuild everything on CONFIG_FTRACE_MCOUNT_RECORD */ |
| 705 | #ifdef CONFIG_FTRACE_MCOUNT_RECORD | 712 | #ifdef CONFIG_FTRACE_MCOUNT_RECORD |
| 706 | # define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD | 713 | # define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 93bfc9f9815c..ecc554374e44 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -42,19 +42,8 @@ | |||
| 42 | */ | 42 | */ |
| 43 | #define KVM_MEMSLOT_INVALID (1UL << 16) | 43 | #define KVM_MEMSLOT_INVALID (1UL << 16) |
| 44 | 44 | ||
| 45 | /* | 45 | /* Two fragments for cross MMIO pages. */ |
| 46 | * If we support unaligned MMIO, at most one fragment will be split into two: | 46 | #define KVM_MAX_MMIO_FRAGMENTS 2 |
| 47 | */ | ||
| 48 | #ifdef KVM_UNALIGNED_MMIO | ||
| 49 | # define KVM_EXTRA_MMIO_FRAGMENTS 1 | ||
| 50 | #else | ||
| 51 | # define KVM_EXTRA_MMIO_FRAGMENTS 0 | ||
| 52 | #endif | ||
| 53 | |||
| 54 | #define KVM_USER_MMIO_SIZE 8 | ||
| 55 | |||
| 56 | #define KVM_MAX_MMIO_FRAGMENTS \ | ||
| 57 | (KVM_MMIO_SIZE / KVM_USER_MMIO_SIZE + KVM_EXTRA_MMIO_FRAGMENTS) | ||
| 58 | 47 | ||
| 59 | /* | 48 | /* |
| 60 | * For the normal pfn, the highest 12 bits should be zero, | 49 | * For the normal pfn, the highest 12 bits should be zero, |
diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 569d67d4243e..d452ee191066 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h | |||
| @@ -57,6 +57,7 @@ int memblock_add(phys_addr_t base, phys_addr_t size); | |||
| 57 | int memblock_remove(phys_addr_t base, phys_addr_t size); | 57 | int memblock_remove(phys_addr_t base, phys_addr_t size); |
| 58 | int memblock_free(phys_addr_t base, phys_addr_t size); | 58 | int memblock_free(phys_addr_t base, phys_addr_t size); |
| 59 | int memblock_reserve(phys_addr_t base, phys_addr_t size); | 59 | int memblock_reserve(phys_addr_t base, phys_addr_t size); |
| 60 | void memblock_trim_memory(phys_addr_t align); | ||
| 60 | 61 | ||
| 61 | #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP | 62 | #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP |
| 62 | void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn, | 63 | void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn, |
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index e5ccb9ddd90e..dbd212723b74 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h | |||
| @@ -82,16 +82,6 @@ static inline void mpol_cond_put(struct mempolicy *pol) | |||
| 82 | __mpol_put(pol); | 82 | __mpol_put(pol); |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | extern struct mempolicy *__mpol_cond_copy(struct mempolicy *tompol, | ||
| 86 | struct mempolicy *frompol); | ||
| 87 | static inline struct mempolicy *mpol_cond_copy(struct mempolicy *tompol, | ||
| 88 | struct mempolicy *frompol) | ||
| 89 | { | ||
| 90 | if (!frompol) | ||
| 91 | return frompol; | ||
| 92 | return __mpol_cond_copy(tompol, frompol); | ||
| 93 | } | ||
| 94 | |||
| 95 | extern struct mempolicy *__mpol_dup(struct mempolicy *pol); | 85 | extern struct mempolicy *__mpol_dup(struct mempolicy *pol); |
| 96 | static inline struct mempolicy *mpol_dup(struct mempolicy *pol) | 86 | static inline struct mempolicy *mpol_dup(struct mempolicy *pol) |
| 97 | { | 87 | { |
| @@ -215,12 +205,6 @@ static inline void mpol_cond_put(struct mempolicy *pol) | |||
| 215 | { | 205 | { |
| 216 | } | 206 | } |
| 217 | 207 | ||
| 218 | static inline struct mempolicy *mpol_cond_copy(struct mempolicy *to, | ||
| 219 | struct mempolicy *from) | ||
| 220 | { | ||
| 221 | return from; | ||
| 222 | } | ||
| 223 | |||
| 224 | static inline void mpol_get(struct mempolicy *pol) | 208 | static inline void mpol_get(struct mempolicy *pol) |
| 225 | { | 209 | { |
| 226 | } | 210 | } |
diff --git a/include/linux/mfd/max77693.h b/include/linux/mfd/max77693.h index 1d28ae90384e..fe03b2d35d4f 100644 --- a/include/linux/mfd/max77693.h +++ b/include/linux/mfd/max77693.h | |||
| @@ -30,7 +30,20 @@ | |||
| 30 | #ifndef __LINUX_MFD_MAX77693_H | 30 | #ifndef __LINUX_MFD_MAX77693_H |
| 31 | #define __LINUX_MFD_MAX77693_H | 31 | #define __LINUX_MFD_MAX77693_H |
| 32 | 32 | ||
| 33 | struct max77693_reg_data { | ||
| 34 | u8 addr; | ||
| 35 | u8 data; | ||
| 36 | }; | ||
| 37 | |||
| 38 | struct max77693_muic_platform_data { | ||
| 39 | struct max77693_reg_data *init_data; | ||
| 40 | int num_init_data; | ||
| 41 | }; | ||
| 42 | |||
| 33 | struct max77693_platform_data { | 43 | struct max77693_platform_data { |
| 34 | int wakeup; | 44 | int wakeup; |
| 45 | |||
| 46 | /* muic data */ | ||
| 47 | struct max77693_muic_platform_data *muic_data; | ||
| 35 | }; | 48 | }; |
| 36 | #endif /* __LINUX_MFD_MAX77693_H */ | 49 | #endif /* __LINUX_MFD_MAX77693_H */ |
diff --git a/include/linux/mm.h b/include/linux/mm.h index fa0680402738..bcaab4e6fe91 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -1684,9 +1684,5 @@ static inline unsigned int debug_guardpage_minorder(void) { return 0; } | |||
| 1684 | static inline bool page_is_guard(struct page *page) { return false; } | 1684 | static inline bool page_is_guard(struct page *page) { return false; } |
| 1685 | #endif /* CONFIG_DEBUG_PAGEALLOC */ | 1685 | #endif /* CONFIG_DEBUG_PAGEALLOC */ |
| 1686 | 1686 | ||
| 1687 | extern void reset_zone_present_pages(void); | ||
| 1688 | extern void fixup_zone_present_pages(int nid, unsigned long start_pfn, | ||
| 1689 | unsigned long end_pfn); | ||
| 1690 | |||
| 1691 | #endif /* __KERNEL__ */ | 1687 | #endif /* __KERNEL__ */ |
| 1692 | #endif /* _LINUX_MM_H */ | 1688 | #endif /* _LINUX_MM_H */ |
diff --git a/include/linux/mmc/Kbuild b/include/linux/mmc/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/mmc/Kbuild +++ /dev/null | |||
diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h index 7c6a1139d8fa..96531664a061 100644 --- a/include/linux/mmc/dw_mmc.h +++ b/include/linux/mmc/dw_mmc.h | |||
| @@ -137,7 +137,7 @@ struct dw_mci { | |||
| 137 | 137 | ||
| 138 | dma_addr_t sg_dma; | 138 | dma_addr_t sg_dma; |
| 139 | void *sg_cpu; | 139 | void *sg_cpu; |
| 140 | struct dw_mci_dma_ops *dma_ops; | 140 | const struct dw_mci_dma_ops *dma_ops; |
| 141 | #ifdef CONFIG_MMC_DW_IDMAC | 141 | #ifdef CONFIG_MMC_DW_IDMAC |
| 142 | unsigned int ring_size; | 142 | unsigned int ring_size; |
| 143 | #else | 143 | #else |
| @@ -162,7 +162,7 @@ struct dw_mci { | |||
| 162 | u16 data_offset; | 162 | u16 data_offset; |
| 163 | struct device *dev; | 163 | struct device *dev; |
| 164 | struct dw_mci_board *pdata; | 164 | struct dw_mci_board *pdata; |
| 165 | struct dw_mci_drv_data *drv_data; | 165 | const struct dw_mci_drv_data *drv_data; |
| 166 | void *priv; | 166 | void *priv; |
| 167 | struct clk *biu_clk; | 167 | struct clk *biu_clk; |
| 168 | struct clk *ciu_clk; | 168 | struct clk *ciu_clk; |
| @@ -186,7 +186,7 @@ struct dw_mci { | |||
| 186 | 186 | ||
| 187 | struct regulator *vmmc; /* Power regulator */ | 187 | struct regulator *vmmc; /* Power regulator */ |
| 188 | unsigned long irq_flags; /* IRQ flags */ | 188 | unsigned long irq_flags; /* IRQ flags */ |
| 189 | unsigned int irq; | 189 | int irq; |
| 190 | }; | 190 | }; |
| 191 | 191 | ||
| 192 | /* DMA ops for Internal/External DMAC interface */ | 192 | /* DMA ops for Internal/External DMAC interface */ |
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h index fa8529a859b8..1edcb4dad8c4 100644 --- a/include/linux/mmc/sdhci.h +++ b/include/linux/mmc/sdhci.h | |||
| @@ -91,6 +91,7 @@ struct sdhci_host { | |||
| 91 | unsigned int quirks2; /* More deviations from spec. */ | 91 | unsigned int quirks2; /* More deviations from spec. */ |
| 92 | 92 | ||
| 93 | #define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0) | 93 | #define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0) |
| 94 | #define SDHCI_QUIRK2_HOST_NO_CMD23 (1<<1) | ||
| 94 | 95 | ||
| 95 | int irq; /* Device IRQ */ | 96 | int irq; /* Device IRQ */ |
| 96 | void __iomem *ioaddr; /* Mapped address */ | 97 | void __iomem *ioaddr; /* Mapped address */ |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 50aaca81f63d..a23923ba8263 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -752,7 +752,7 @@ extern int init_currently_empty_zone(struct zone *zone, unsigned long start_pfn, | |||
| 752 | unsigned long size, | 752 | unsigned long size, |
| 753 | enum memmap_context context); | 753 | enum memmap_context context); |
| 754 | 754 | ||
| 755 | extern void lruvec_init(struct lruvec *lruvec, struct zone *zone); | 755 | extern void lruvec_init(struct lruvec *lruvec); |
| 756 | 756 | ||
| 757 | static inline struct zone *lruvec_zone(struct lruvec *lruvec) | 757 | static inline struct zone *lruvec_zone(struct lruvec *lruvec) |
| 758 | { | 758 | { |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index f8eda0276f03..a848ffc327f4 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -1488,6 +1488,9 @@ struct napi_gro_cb { | |||
| 1488 | 1488 | ||
| 1489 | /* Used in ipv6_gro_receive() */ | 1489 | /* Used in ipv6_gro_receive() */ |
| 1490 | int proto; | 1490 | int proto; |
| 1491 | |||
| 1492 | /* used in skb_gro_receive() slow path */ | ||
| 1493 | struct sk_buff *last; | ||
| 1491 | }; | 1494 | }; |
| 1492 | 1495 | ||
| 1493 | #define NAPI_GRO_CB(skb) ((struct napi_gro_cb *)(skb)->cb) | 1496 | #define NAPI_GRO_CB(skb) ((struct napi_gro_cb *)(skb)->cb) |
diff --git a/include/linux/netfilter/Kbuild b/include/linux/netfilter/Kbuild deleted file mode 100644 index b3322023e9a5..000000000000 --- a/include/linux/netfilter/Kbuild +++ /dev/null | |||
| @@ -1 +0,0 @@ | |||
| 1 | header-y += ipset/ | ||
diff --git a/include/linux/netfilter/ipset/Kbuild b/include/linux/netfilter/ipset/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/netfilter/ipset/Kbuild +++ /dev/null | |||
diff --git a/include/linux/netfilter_arp/Kbuild b/include/linux/netfilter_arp/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/netfilter_arp/Kbuild +++ /dev/null | |||
diff --git a/include/linux/netfilter_bridge/Kbuild b/include/linux/netfilter_bridge/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/netfilter_bridge/Kbuild +++ /dev/null | |||
diff --git a/include/linux/netfilter_ipv4/Kbuild b/include/linux/netfilter_ipv4/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/netfilter_ipv4/Kbuild +++ /dev/null | |||
diff --git a/include/linux/netfilter_ipv6/Kbuild b/include/linux/netfilter_ipv6/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/netfilter_ipv6/Kbuild +++ /dev/null | |||
diff --git a/include/linux/nfsd/Kbuild b/include/linux/nfsd/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/nfsd/Kbuild +++ /dev/null | |||
diff --git a/include/linux/of.h b/include/linux/of.h index 72843b72a2b2..b4e50d56fc74 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -331,6 +331,13 @@ static inline bool of_have_populated_dt(void) | |||
| 331 | #define for_each_child_of_node(parent, child) \ | 331 | #define for_each_child_of_node(parent, child) \ |
| 332 | while (0) | 332 | while (0) |
| 333 | 333 | ||
| 334 | static inline struct device_node *of_get_child_by_name( | ||
| 335 | const struct device_node *node, | ||
| 336 | const char *name) | ||
| 337 | { | ||
| 338 | return NULL; | ||
| 339 | } | ||
| 340 | |||
| 334 | static inline int of_get_child_count(const struct device_node *np) | 341 | static inline int of_get_child_count(const struct device_node *np) |
| 335 | { | 342 | { |
| 336 | return 0; | 343 | return 0; |
diff --git a/include/linux/of_address.h b/include/linux/of_address.h index c3cdc1025c30..0506eb53519b 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h | |||
| @@ -19,7 +19,7 @@ extern void __iomem *of_iomap(struct device_node *device, int index); | |||
| 19 | * the address space flags too. The PCI version uses a BAR number | 19 | * the address space flags too. The PCI version uses a BAR number |
| 20 | * instead of an absolute index | 20 | * instead of an absolute index |
| 21 | */ | 21 | */ |
| 22 | extern const u32 *of_get_address(struct device_node *dev, int index, | 22 | extern const __be32 *of_get_address(struct device_node *dev, int index, |
| 23 | u64 *size, unsigned int *flags); | 23 | u64 *size, unsigned int *flags); |
| 24 | 24 | ||
| 25 | #ifndef pci_address_to_pio | 25 | #ifndef pci_address_to_pio |
| @@ -28,11 +28,13 @@ static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } | |||
| 28 | #endif | 28 | #endif |
| 29 | 29 | ||
| 30 | #else /* CONFIG_OF_ADDRESS */ | 30 | #else /* CONFIG_OF_ADDRESS */ |
| 31 | #ifndef of_address_to_resource | ||
| 31 | static inline int of_address_to_resource(struct device_node *dev, int index, | 32 | static inline int of_address_to_resource(struct device_node *dev, int index, |
| 32 | struct resource *r) | 33 | struct resource *r) |
| 33 | { | 34 | { |
| 34 | return -EINVAL; | 35 | return -EINVAL; |
| 35 | } | 36 | } |
| 37 | #endif | ||
| 36 | static inline struct device_node *of_find_matching_node_by_address( | 38 | static inline struct device_node *of_find_matching_node_by_address( |
| 37 | struct device_node *from, | 39 | struct device_node *from, |
| 38 | const struct of_device_id *matches, | 40 | const struct of_device_id *matches, |
| @@ -40,11 +42,13 @@ static inline struct device_node *of_find_matching_node_by_address( | |||
| 40 | { | 42 | { |
| 41 | return NULL; | 43 | return NULL; |
| 42 | } | 44 | } |
| 45 | #ifndef of_iomap | ||
| 43 | static inline void __iomem *of_iomap(struct device_node *device, int index) | 46 | static inline void __iomem *of_iomap(struct device_node *device, int index) |
| 44 | { | 47 | { |
| 45 | return NULL; | 48 | return NULL; |
| 46 | } | 49 | } |
| 47 | static inline const u32 *of_get_address(struct device_node *dev, int index, | 50 | #endif |
| 51 | static inline const __be32 *of_get_address(struct device_node *dev, int index, | ||
| 48 | u64 *size, unsigned int *flags) | 52 | u64 *size, unsigned int *flags) |
| 49 | { | 53 | { |
| 50 | return NULL; | 54 | return NULL; |
diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h index b8e241125201..535cecf1e02f 100644 --- a/include/linux/of_irq.h +++ b/include/linux/of_irq.h | |||
| @@ -58,8 +58,8 @@ static inline int of_irq_map_oldworld(struct device_node *device, int index, | |||
| 58 | #endif /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ | 58 | #endif /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ |
| 59 | 59 | ||
| 60 | 60 | ||
| 61 | extern int of_irq_map_raw(struct device_node *parent, const u32 *intspec, | 61 | extern int of_irq_map_raw(struct device_node *parent, const __be32 *intspec, |
| 62 | u32 ointsize, const u32 *addr, | 62 | u32 ointsize, const __be32 *addr, |
| 63 | struct of_irq *out_irq); | 63 | struct of_irq *out_irq); |
| 64 | extern int of_irq_map_one(struct device_node *device, int index, | 64 | extern int of_irq_map_one(struct device_node *device, int index, |
| 65 | struct of_irq *out_irq); | 65 | struct of_irq *out_irq); |
diff --git a/include/linux/percpu-rwsem.h b/include/linux/percpu-rwsem.h index cf80f7e5277f..bd1e86071e57 100644 --- a/include/linux/percpu-rwsem.h +++ b/include/linux/percpu-rwsem.h | |||
| @@ -12,34 +12,27 @@ struct percpu_rw_semaphore { | |||
| 12 | struct mutex mtx; | 12 | struct mutex mtx; |
| 13 | }; | 13 | }; |
| 14 | 14 | ||
| 15 | #define light_mb() barrier() | ||
| 16 | #define heavy_mb() synchronize_sched_expedited() | ||
| 17 | |||
| 15 | static inline void percpu_down_read(struct percpu_rw_semaphore *p) | 18 | static inline void percpu_down_read(struct percpu_rw_semaphore *p) |
| 16 | { | 19 | { |
| 17 | rcu_read_lock(); | 20 | rcu_read_lock_sched(); |
| 18 | if (unlikely(p->locked)) { | 21 | if (unlikely(p->locked)) { |
| 19 | rcu_read_unlock(); | 22 | rcu_read_unlock_sched(); |
| 20 | mutex_lock(&p->mtx); | 23 | mutex_lock(&p->mtx); |
| 21 | this_cpu_inc(*p->counters); | 24 | this_cpu_inc(*p->counters); |
| 22 | mutex_unlock(&p->mtx); | 25 | mutex_unlock(&p->mtx); |
| 23 | return; | 26 | return; |
| 24 | } | 27 | } |
| 25 | this_cpu_inc(*p->counters); | 28 | this_cpu_inc(*p->counters); |
| 26 | rcu_read_unlock(); | 29 | rcu_read_unlock_sched(); |
| 30 | light_mb(); /* A, between read of p->locked and read of data, paired with D */ | ||
| 27 | } | 31 | } |
| 28 | 32 | ||
| 29 | static inline void percpu_up_read(struct percpu_rw_semaphore *p) | 33 | static inline void percpu_up_read(struct percpu_rw_semaphore *p) |
| 30 | { | 34 | { |
| 31 | /* | 35 | light_mb(); /* B, between read of the data and write to p->counter, paired with C */ |
| 32 | * On X86, write operation in this_cpu_dec serves as a memory unlock | ||
| 33 | * barrier (i.e. memory accesses may be moved before the write, but | ||
| 34 | * no memory accesses are moved past the write). | ||
| 35 | * On other architectures this may not be the case, so we need smp_mb() | ||
| 36 | * there. | ||
| 37 | */ | ||
| 38 | #if defined(CONFIG_X86) && (!defined(CONFIG_X86_PPRO_FENCE) && !defined(CONFIG_X86_OOSTORE)) | ||
| 39 | barrier(); | ||
| 40 | #else | ||
| 41 | smp_mb(); | ||
| 42 | #endif | ||
| 43 | this_cpu_dec(*p->counters); | 36 | this_cpu_dec(*p->counters); |
| 44 | } | 37 | } |
| 45 | 38 | ||
| @@ -58,14 +51,15 @@ static inline void percpu_down_write(struct percpu_rw_semaphore *p) | |||
| 58 | { | 51 | { |
| 59 | mutex_lock(&p->mtx); | 52 | mutex_lock(&p->mtx); |
| 60 | p->locked = true; | 53 | p->locked = true; |
| 61 | synchronize_rcu(); | 54 | synchronize_sched_expedited(); /* make sure that all readers exit the rcu_read_lock_sched region */ |
| 62 | while (__percpu_count(p->counters)) | 55 | while (__percpu_count(p->counters)) |
| 63 | msleep(1); | 56 | msleep(1); |
| 64 | smp_rmb(); /* paired with smp_mb() in percpu_sem_up_read() */ | 57 | heavy_mb(); /* C, between read of p->counter and write to data, paired with B */ |
| 65 | } | 58 | } |
| 66 | 59 | ||
| 67 | static inline void percpu_up_write(struct percpu_rw_semaphore *p) | 60 | static inline void percpu_up_write(struct percpu_rw_semaphore *p) |
| 68 | { | 61 | { |
| 62 | heavy_mb(); /* D, between write to data and write to p->locked, paired with A */ | ||
| 69 | p->locked = false; | 63 | p->locked = false; |
| 70 | mutex_unlock(&p->mtx); | 64 | mutex_unlock(&p->mtx); |
| 71 | } | 65 | } |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 2e902359aee5..6bfb2faa0b19 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
| @@ -803,12 +803,16 @@ static inline void perf_event_task_tick(void) { } | |||
| 803 | do { \ | 803 | do { \ |
| 804 | static struct notifier_block fn##_nb __cpuinitdata = \ | 804 | static struct notifier_block fn##_nb __cpuinitdata = \ |
| 805 | { .notifier_call = fn, .priority = CPU_PRI_PERF }; \ | 805 | { .notifier_call = fn, .priority = CPU_PRI_PERF }; \ |
| 806 | unsigned long cpu = smp_processor_id(); \ | ||
| 807 | unsigned long flags; \ | ||
| 806 | fn(&fn##_nb, (unsigned long)CPU_UP_PREPARE, \ | 808 | fn(&fn##_nb, (unsigned long)CPU_UP_PREPARE, \ |
| 807 | (void *)(unsigned long)smp_processor_id()); \ | 809 | (void *)(unsigned long)cpu); \ |
| 810 | local_irq_save(flags); \ | ||
| 808 | fn(&fn##_nb, (unsigned long)CPU_STARTING, \ | 811 | fn(&fn##_nb, (unsigned long)CPU_STARTING, \ |
| 809 | (void *)(unsigned long)smp_processor_id()); \ | 812 | (void *)(unsigned long)cpu); \ |
| 813 | local_irq_restore(flags); \ | ||
| 810 | fn(&fn##_nb, (unsigned long)CPU_ONLINE, \ | 814 | fn(&fn##_nb, (unsigned long)CPU_ONLINE, \ |
| 811 | (void *)(unsigned long)smp_processor_id()); \ | 815 | (void *)(unsigned long)cpu); \ |
| 812 | register_cpu_notifier(&fn##_nb); \ | 816 | register_cpu_notifier(&fn##_nb); \ |
| 813 | } while (0) | 817 | } while (0) |
| 814 | 818 | ||
diff --git a/include/linux/pid_namespace.h b/include/linux/pid_namespace.h index 00474b047145..65e3e87eacc5 100644 --- a/include/linux/pid_namespace.h +++ b/include/linux/pid_namespace.h | |||
| @@ -47,15 +47,9 @@ static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns) | |||
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | extern struct pid_namespace *copy_pid_ns(unsigned long flags, struct pid_namespace *ns); | 49 | extern struct pid_namespace *copy_pid_ns(unsigned long flags, struct pid_namespace *ns); |
| 50 | extern void free_pid_ns(struct kref *kref); | ||
| 51 | extern void zap_pid_ns_processes(struct pid_namespace *pid_ns); | 50 | extern void zap_pid_ns_processes(struct pid_namespace *pid_ns); |
| 52 | extern int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd); | 51 | extern int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd); |
| 53 | 52 | extern void put_pid_ns(struct pid_namespace *ns); | |
| 54 | static inline void put_pid_ns(struct pid_namespace *ns) | ||
| 55 | { | ||
| 56 | if (ns != &init_pid_ns) | ||
| 57 | kref_put(&ns->kref, free_pid_ns); | ||
| 58 | } | ||
| 59 | 53 | ||
| 60 | #else /* !CONFIG_PID_NS */ | 54 | #else /* !CONFIG_PID_NS */ |
| 61 | #include <linux/err.h> | 55 | #include <linux/err.h> |
diff --git a/include/linux/platform_data/omap_ocp2scp.h b/include/linux/platform_data/omap_ocp2scp.h new file mode 100644 index 000000000000..5c6c3939355f --- /dev/null +++ b/include/linux/platform_data/omap_ocp2scp.h | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | /* | ||
| 2 | * omap_ocp2scp.h -- ocp2scp header file | ||
| 3 | * | ||
| 4 | * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License as published by | ||
| 7 | * the Free Software Foundation; either version 2 of the License, or | ||
| 8 | * (at your option) any later version. | ||
| 9 | * | ||
| 10 | * Author: Kishon Vijay Abraham I <kishon@ti.com> | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | */ | ||
| 18 | |||
| 19 | #ifndef __DRIVERS_OMAP_OCP2SCP_H | ||
| 20 | #define __DRIVERS_OMAP_OCP2SCP_H | ||
| 21 | |||
| 22 | struct omap_ocp2scp_dev { | ||
| 23 | const char *drv_name; | ||
| 24 | struct resource *res; | ||
| 25 | }; | ||
| 26 | |||
| 27 | struct omap_ocp2scp_platform_data { | ||
| 28 | int dev_cnt; | ||
| 29 | struct omap_ocp2scp_dev **devices; | ||
| 30 | }; | ||
| 31 | #endif /* __DRIVERS_OMAP_OCP2SCP_H */ | ||
diff --git a/include/linux/ptp_clock_kernel.h b/include/linux/ptp_clock_kernel.h index f2dc6d8fc680..38a993508327 100644 --- a/include/linux/ptp_clock_kernel.h +++ b/include/linux/ptp_clock_kernel.h | |||
| @@ -54,7 +54,8 @@ struct ptp_clock_request { | |||
| 54 | * clock operations | 54 | * clock operations |
| 55 | * | 55 | * |
| 56 | * @adjfreq: Adjusts the frequency of the hardware clock. | 56 | * @adjfreq: Adjusts the frequency of the hardware clock. |
| 57 | * parameter delta: Desired period change in parts per billion. | 57 | * parameter delta: Desired frequency offset from nominal frequency |
| 58 | * in parts per billion | ||
| 58 | * | 59 | * |
| 59 | * @adjtime: Shifts the time of the hardware clock. | 60 | * @adjtime: Shifts the time of the hardware clock. |
| 60 | * parameter delta: Desired change in nanoseconds. | 61 | * parameter delta: Desired change in nanoseconds. |
diff --git a/include/linux/raid/Kbuild b/include/linux/raid/Kbuild index 2415a64c5e51..e69de29bb2d1 100644 --- a/include/linux/raid/Kbuild +++ b/include/linux/raid/Kbuild | |||
| @@ -1,2 +0,0 @@ | |||
| 1 | header-y += md_p.h | ||
| 2 | header-y += md_u.h | ||
diff --git a/include/linux/raid/md_u.h b/include/linux/raid/md_u.h index fb1abb3367e9..358c04bfbe2a 100644 --- a/include/linux/raid/md_u.h +++ b/include/linux/raid/md_u.h | |||
| @@ -11,149 +11,10 @@ | |||
| 11 | (for example /usr/src/linux/COPYING); if not, write to the Free | 11 | (for example /usr/src/linux/COPYING); if not, write to the Free |
| 12 | Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 12 | Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 13 | */ | 13 | */ |
| 14 | |||
| 15 | #ifndef _MD_U_H | 14 | #ifndef _MD_U_H |
| 16 | #define _MD_U_H | 15 | #define _MD_U_H |
| 17 | 16 | ||
| 18 | /* | 17 | #include <uapi/linux/raid/md_u.h> |
| 19 | * Different major versions are not compatible. | ||
| 20 | * Different minor versions are only downward compatible. | ||
| 21 | * Different patchlevel versions are downward and upward compatible. | ||
| 22 | */ | ||
| 23 | #define MD_MAJOR_VERSION 0 | ||
| 24 | #define MD_MINOR_VERSION 90 | ||
| 25 | /* | ||
| 26 | * MD_PATCHLEVEL_VERSION indicates kernel functionality. | ||
| 27 | * >=1 means different superblock formats are selectable using SET_ARRAY_INFO | ||
| 28 | * and major_version/minor_version accordingly | ||
| 29 | * >=2 means that Internal bitmaps are supported by setting MD_SB_BITMAP_PRESENT | ||
| 30 | * in the super status byte | ||
| 31 | * >=3 means that bitmap superblock version 4 is supported, which uses | ||
| 32 | * little-ending representation rather than host-endian | ||
| 33 | */ | ||
| 34 | #define MD_PATCHLEVEL_VERSION 3 | ||
| 35 | |||
| 36 | /* ioctls */ | ||
| 37 | |||
| 38 | /* status */ | ||
| 39 | #define RAID_VERSION _IOR (MD_MAJOR, 0x10, mdu_version_t) | ||
| 40 | #define GET_ARRAY_INFO _IOR (MD_MAJOR, 0x11, mdu_array_info_t) | ||
| 41 | #define GET_DISK_INFO _IOR (MD_MAJOR, 0x12, mdu_disk_info_t) | ||
| 42 | #define PRINT_RAID_DEBUG _IO (MD_MAJOR, 0x13) | ||
| 43 | #define RAID_AUTORUN _IO (MD_MAJOR, 0x14) | ||
| 44 | #define GET_BITMAP_FILE _IOR (MD_MAJOR, 0x15, mdu_bitmap_file_t) | ||
| 45 | |||
| 46 | /* configuration */ | ||
| 47 | #define CLEAR_ARRAY _IO (MD_MAJOR, 0x20) | ||
| 48 | #define ADD_NEW_DISK _IOW (MD_MAJOR, 0x21, mdu_disk_info_t) | ||
| 49 | #define HOT_REMOVE_DISK _IO (MD_MAJOR, 0x22) | ||
| 50 | #define SET_ARRAY_INFO _IOW (MD_MAJOR, 0x23, mdu_array_info_t) | ||
| 51 | #define SET_DISK_INFO _IO (MD_MAJOR, 0x24) | ||
| 52 | #define WRITE_RAID_INFO _IO (MD_MAJOR, 0x25) | ||
| 53 | #define UNPROTECT_ARRAY _IO (MD_MAJOR, 0x26) | ||
| 54 | #define PROTECT_ARRAY _IO (MD_MAJOR, 0x27) | ||
| 55 | #define HOT_ADD_DISK _IO (MD_MAJOR, 0x28) | ||
| 56 | #define SET_DISK_FAULTY _IO (MD_MAJOR, 0x29) | ||
| 57 | #define HOT_GENERATE_ERROR _IO (MD_MAJOR, 0x2a) | ||
| 58 | #define SET_BITMAP_FILE _IOW (MD_MAJOR, 0x2b, int) | ||
| 59 | 18 | ||
| 60 | /* usage */ | ||
| 61 | #define RUN_ARRAY _IOW (MD_MAJOR, 0x30, mdu_param_t) | ||
| 62 | /* 0x31 was START_ARRAY */ | ||
| 63 | #define STOP_ARRAY _IO (MD_MAJOR, 0x32) | ||
| 64 | #define STOP_ARRAY_RO _IO (MD_MAJOR, 0x33) | ||
| 65 | #define RESTART_ARRAY_RW _IO (MD_MAJOR, 0x34) | ||
| 66 | |||
| 67 | /* 63 partitions with the alternate major number (mdp) */ | ||
| 68 | #define MdpMinorShift 6 | ||
| 69 | #ifdef __KERNEL__ | ||
| 70 | extern int mdp_major; | 19 | extern int mdp_major; |
| 71 | #endif | ||
| 72 | |||
| 73 | typedef struct mdu_version_s { | ||
| 74 | int major; | ||
| 75 | int minor; | ||
| 76 | int patchlevel; | ||
| 77 | } mdu_version_t; | ||
| 78 | |||
| 79 | typedef struct mdu_array_info_s { | ||
| 80 | /* | ||
| 81 | * Generic constant information | ||
| 82 | */ | ||
| 83 | int major_version; | ||
| 84 | int minor_version; | ||
| 85 | int patch_version; | ||
| 86 | int ctime; | ||
| 87 | int level; | ||
| 88 | int size; | ||
| 89 | int nr_disks; | ||
| 90 | int raid_disks; | ||
| 91 | int md_minor; | ||
| 92 | int not_persistent; | ||
| 93 | |||
| 94 | /* | ||
| 95 | * Generic state information | ||
| 96 | */ | ||
| 97 | int utime; /* 0 Superblock update time */ | ||
| 98 | int state; /* 1 State bits (clean, ...) */ | ||
| 99 | int active_disks; /* 2 Number of currently active disks */ | ||
| 100 | int working_disks; /* 3 Number of working disks */ | ||
| 101 | int failed_disks; /* 4 Number of failed disks */ | ||
| 102 | int spare_disks; /* 5 Number of spare disks */ | ||
| 103 | |||
| 104 | /* | ||
| 105 | * Personality information | ||
| 106 | */ | ||
| 107 | int layout; /* 0 the array's physical layout */ | ||
| 108 | int chunk_size; /* 1 chunk size in bytes */ | ||
| 109 | |||
| 110 | } mdu_array_info_t; | ||
| 111 | |||
| 112 | /* non-obvious values for 'level' */ | ||
| 113 | #define LEVEL_MULTIPATH (-4) | ||
| 114 | #define LEVEL_LINEAR (-1) | ||
| 115 | #define LEVEL_FAULTY (-5) | ||
| 116 | |||
| 117 | /* we need a value for 'no level specified' and 0 | ||
| 118 | * means 'raid0', so we need something else. This is | ||
| 119 | * for internal use only | ||
| 120 | */ | ||
| 121 | #define LEVEL_NONE (-1000000) | ||
| 122 | |||
| 123 | typedef struct mdu_disk_info_s { | ||
| 124 | /* | ||
| 125 | * configuration/status of one particular disk | ||
| 126 | */ | ||
| 127 | int number; | ||
| 128 | int major; | ||
| 129 | int minor; | ||
| 130 | int raid_disk; | ||
| 131 | int state; | ||
| 132 | |||
| 133 | } mdu_disk_info_t; | ||
| 134 | |||
| 135 | typedef struct mdu_start_info_s { | ||
| 136 | /* | ||
| 137 | * configuration/status of one particular disk | ||
| 138 | */ | ||
| 139 | int major; | ||
| 140 | int minor; | ||
| 141 | int raid_disk; | ||
| 142 | int state; | ||
| 143 | |||
| 144 | } mdu_start_info_t; | ||
| 145 | |||
| 146 | typedef struct mdu_bitmap_file_s | ||
| 147 | { | ||
| 148 | char pathname[4096]; | ||
| 149 | } mdu_bitmap_file_t; | ||
| 150 | |||
| 151 | typedef struct mdu_param_s | ||
| 152 | { | ||
| 153 | int personality; /* 1,2,3,4 */ | ||
| 154 | int chunk_size; /* in bytes */ | ||
| 155 | int max_fault; /* unused for now */ | ||
| 156 | } mdu_param_t; | ||
| 157 | |||
| 158 | #endif | 20 | #endif |
| 159 | |||
diff --git a/include/linux/ratelimit.h b/include/linux/ratelimit.h index e11ccb4cf48d..0a260d8a18bf 100644 --- a/include/linux/ratelimit.h +++ b/include/linux/ratelimit.h | |||
| @@ -46,20 +46,17 @@ extern int ___ratelimit(struct ratelimit_state *rs, const char *func); | |||
| 46 | #define WARN_ON_RATELIMIT(condition, state) \ | 46 | #define WARN_ON_RATELIMIT(condition, state) \ |
| 47 | WARN_ON((condition) && __ratelimit(state)) | 47 | WARN_ON((condition) && __ratelimit(state)) |
| 48 | 48 | ||
| 49 | #define __WARN_RATELIMIT(condition, state, format...) \ | 49 | #define WARN_RATELIMIT(condition, format, ...) \ |
| 50 | ({ \ | ||
| 51 | int rtn = 0; \ | ||
| 52 | if (unlikely(__ratelimit(state))) \ | ||
| 53 | rtn = WARN(condition, format); \ | ||
| 54 | rtn; \ | ||
| 55 | }) | ||
| 56 | |||
| 57 | #define WARN_RATELIMIT(condition, format...) \ | ||
| 58 | ({ \ | 50 | ({ \ |
| 59 | static DEFINE_RATELIMIT_STATE(_rs, \ | 51 | static DEFINE_RATELIMIT_STATE(_rs, \ |
| 60 | DEFAULT_RATELIMIT_INTERVAL, \ | 52 | DEFAULT_RATELIMIT_INTERVAL, \ |
| 61 | DEFAULT_RATELIMIT_BURST); \ | 53 | DEFAULT_RATELIMIT_BURST); \ |
| 62 | __WARN_RATELIMIT(condition, &_rs, format); \ | 54 | int rtn = !!(condition); \ |
| 55 | \ | ||
| 56 | if (unlikely(rtn && __ratelimit(&_rs))) \ | ||
| 57 | WARN(rtn, format, ##__VA_ARGS__); \ | ||
| 58 | \ | ||
| 59 | rtn; \ | ||
| 63 | }) | 60 | }) |
| 64 | 61 | ||
| 65 | #else | 62 | #else |
| @@ -67,15 +64,9 @@ extern int ___ratelimit(struct ratelimit_state *rs, const char *func); | |||
| 67 | #define WARN_ON_RATELIMIT(condition, state) \ | 64 | #define WARN_ON_RATELIMIT(condition, state) \ |
| 68 | WARN_ON(condition) | 65 | WARN_ON(condition) |
| 69 | 66 | ||
| 70 | #define __WARN_RATELIMIT(condition, state, format...) \ | 67 | #define WARN_RATELIMIT(condition, format, ...) \ |
| 71 | ({ \ | ||
| 72 | int rtn = WARN(condition, format); \ | ||
| 73 | rtn; \ | ||
| 74 | }) | ||
| 75 | |||
| 76 | #define WARN_RATELIMIT(condition, format...) \ | ||
| 77 | ({ \ | 68 | ({ \ |
| 78 | int rtn = WARN(condition, format); \ | 69 | int rtn = WARN(condition, format, ##__VA_ARGS__); \ |
| 79 | rtn; \ | 70 | rtn; \ |
| 80 | }) | 71 | }) |
| 81 | 72 | ||
diff --git a/include/linux/rbtree_augmented.h b/include/linux/rbtree_augmented.h index 214caa33433b..2ac60c9cf644 100644 --- a/include/linux/rbtree_augmented.h +++ b/include/linux/rbtree_augmented.h | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #ifndef _LINUX_RBTREE_AUGMENTED_H | 24 | #ifndef _LINUX_RBTREE_AUGMENTED_H |
| 25 | #define _LINUX_RBTREE_AUGMENTED_H | 25 | #define _LINUX_RBTREE_AUGMENTED_H |
| 26 | 26 | ||
| 27 | #include <linux/compiler.h> | ||
| 27 | #include <linux/rbtree.h> | 28 | #include <linux/rbtree.h> |
| 28 | 29 | ||
| 29 | /* | 30 | /* |
diff --git a/include/linux/rio.h b/include/linux/rio.h index 4187da511006..a3e784278667 100644 --- a/include/linux/rio.h +++ b/include/linux/rio.h | |||
| @@ -275,9 +275,11 @@ struct rio_id_table { | |||
| 275 | * struct rio_net - RIO network info | 275 | * struct rio_net - RIO network info |
| 276 | * @node: Node in global list of RIO networks | 276 | * @node: Node in global list of RIO networks |
| 277 | * @devices: List of devices in this network | 277 | * @devices: List of devices in this network |
| 278 | * @switches: List of switches in this netowrk | ||
| 278 | * @mports: List of master ports accessing this network | 279 | * @mports: List of master ports accessing this network |
| 279 | * @hport: Default port for accessing this network | 280 | * @hport: Default port for accessing this network |
| 280 | * @id: RIO network ID | 281 | * @id: RIO network ID |
| 282 | * @destid_table: destID allocation table | ||
| 281 | */ | 283 | */ |
| 282 | struct rio_net { | 284 | struct rio_net { |
| 283 | struct list_head node; /* node in list of networks */ | 285 | struct list_head node; /* node in list of networks */ |
diff --git a/include/linux/spi/Kbuild b/include/linux/spi/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/spi/Kbuild +++ /dev/null | |||
diff --git a/include/linux/spi/ads7846.h b/include/linux/spi/ads7846.h index c64de9dd7631..2f694f3846a9 100644 --- a/include/linux/spi/ads7846.h +++ b/include/linux/spi/ads7846.h | |||
| @@ -46,8 +46,9 @@ struct ads7846_platform_data { | |||
| 46 | u16 debounce_rep; /* additional consecutive good readings | 46 | u16 debounce_rep; /* additional consecutive good readings |
| 47 | * required after the first two */ | 47 | * required after the first two */ |
| 48 | int gpio_pendown; /* the GPIO used to decide the pendown | 48 | int gpio_pendown; /* the GPIO used to decide the pendown |
| 49 | * state if get_pendown_state == NULL | 49 | * state if get_pendown_state == NULL */ |
| 50 | */ | 50 | int gpio_pendown_debounce; /* platform specific debounce time for |
| 51 | * the gpio_pendown */ | ||
| 51 | int (*get_pendown_state)(void); | 52 | int (*get_pendown_state)(void); |
| 52 | int (*filter_init) (const struct ads7846_platform_data *pdata, | 53 | int (*filter_init) (const struct ads7846_platform_data *pdata, |
| 53 | void **filter_data); | 54 | void **filter_data); |
diff --git a/include/linux/spi/tsc2005.h b/include/linux/spi/tsc2005.h index d9b0c84220c7..8f721e465e05 100644 --- a/include/linux/spi/tsc2005.h +++ b/include/linux/spi/tsc2005.h | |||
| @@ -3,8 +3,6 @@ | |||
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2009-2010 Nokia Corporation | 4 | * Copyright (C) 2009-2010 Nokia Corporation |
| 5 | * | 5 | * |
| 6 | * Contact: Aaro Koskinen <aaro.koskinen@nokia.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
| 9 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
| 10 | * the Free Software Foundation; either version 2 of the License, or | 8 | * the Free Software Foundation; either version 2 of the License, or |
diff --git a/include/linux/sunrpc/Kbuild b/include/linux/sunrpc/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/sunrpc/Kbuild +++ /dev/null | |||
diff --git a/include/linux/tc_act/Kbuild b/include/linux/tc_act/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/tc_act/Kbuild +++ /dev/null | |||
diff --git a/include/linux/tc_ematch/Kbuild b/include/linux/tc_ematch/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/tc_ematch/Kbuild +++ /dev/null | |||
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 8a7fc4be2d75..60b7aac15e0e 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
| @@ -191,7 +191,8 @@ struct tcp_sock { | |||
| 191 | u8 do_early_retrans:1,/* Enable RFC5827 early-retransmit */ | 191 | u8 do_early_retrans:1,/* Enable RFC5827 early-retransmit */ |
| 192 | early_retrans_delayed:1, /* Delayed ER timer installed */ | 192 | early_retrans_delayed:1, /* Delayed ER timer installed */ |
| 193 | syn_data:1, /* SYN includes data */ | 193 | syn_data:1, /* SYN includes data */ |
| 194 | syn_fastopen:1; /* SYN includes Fast Open option */ | 194 | syn_fastopen:1, /* SYN includes Fast Open option */ |
| 195 | syn_data_acked:1;/* data in SYN is acked by SYN-ACK */ | ||
| 195 | 196 | ||
| 196 | /* RTT measurement */ | 197 | /* RTT measurement */ |
| 197 | u32 srtt; /* smoothed round trip time << 3 */ | 198 | u32 srtt; /* smoothed round trip time << 3 */ |
diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h index e6f0331e3d45..24594571c5a3 100644 --- a/include/linux/uprobes.h +++ b/include/linux/uprobes.h | |||
| @@ -35,16 +35,6 @@ struct inode; | |||
| 35 | # include <asm/uprobes.h> | 35 | # include <asm/uprobes.h> |
| 36 | #endif | 36 | #endif |
| 37 | 37 | ||
| 38 | /* flags that denote/change uprobes behaviour */ | ||
| 39 | |||
| 40 | /* Have a copy of original instruction */ | ||
| 41 | #define UPROBE_COPY_INSN 0x1 | ||
| 42 | |||
| 43 | /* Dont run handlers when first register/ last unregister in progress*/ | ||
| 44 | #define UPROBE_RUN_HANDLER 0x2 | ||
| 45 | /* Can skip singlestep */ | ||
| 46 | #define UPROBE_SKIP_SSTEP 0x4 | ||
| 47 | |||
| 48 | struct uprobe_consumer { | 38 | struct uprobe_consumer { |
| 49 | int (*handler)(struct uprobe_consumer *self, struct pt_regs *regs); | 39 | int (*handler)(struct uprobe_consumer *self, struct pt_regs *regs); |
| 50 | /* | 40 | /* |
| @@ -59,7 +49,6 @@ struct uprobe_consumer { | |||
| 59 | #ifdef CONFIG_UPROBES | 49 | #ifdef CONFIG_UPROBES |
| 60 | enum uprobe_task_state { | 50 | enum uprobe_task_state { |
| 61 | UTASK_RUNNING, | 51 | UTASK_RUNNING, |
| 62 | UTASK_BP_HIT, | ||
| 63 | UTASK_SSTEP, | 52 | UTASK_SSTEP, |
| 64 | UTASK_SSTEP_ACK, | 53 | UTASK_SSTEP_ACK, |
| 65 | UTASK_SSTEP_TRAPPED, | 54 | UTASK_SSTEP_TRAPPED, |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 07915a32fb9d..10278d18709c 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -1778,17 +1778,6 @@ static inline int usb_translate_errors(int error_code) | |||
| 1778 | extern void usb_register_notify(struct notifier_block *nb); | 1778 | extern void usb_register_notify(struct notifier_block *nb); |
| 1779 | extern void usb_unregister_notify(struct notifier_block *nb); | 1779 | extern void usb_unregister_notify(struct notifier_block *nb); |
| 1780 | 1780 | ||
| 1781 | #ifdef DEBUG | ||
| 1782 | #define dbg(format, arg...) \ | ||
| 1783 | printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg) | ||
| 1784 | #else | ||
| 1785 | #define dbg(format, arg...) \ | ||
| 1786 | do { \ | ||
| 1787 | if (0) \ | ||
| 1788 | printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg); \ | ||
| 1789 | } while (0) | ||
| 1790 | #endif | ||
| 1791 | |||
| 1792 | /* debugfs stuff */ | 1781 | /* debugfs stuff */ |
| 1793 | extern struct dentry *usb_debug_root; | 1782 | extern struct dentry *usb_debug_root; |
| 1794 | 1783 | ||
diff --git a/include/linux/usb/Kbuild b/include/linux/usb/Kbuild index b607f3532e88..e69de29bb2d1 100644 --- a/include/linux/usb/Kbuild +++ b/include/linux/usb/Kbuild | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | header-y += audio.h | ||
| 2 | header-y += cdc.h | ||
| 3 | header-y += ch9.h | ||
| 4 | header-y += ch11.h | ||
| 5 | header-y += functionfs.h | ||
| 6 | header-y += gadgetfs.h | ||
| 7 | header-y += midi.h | ||
| 8 | header-y += g_printer.h | ||
| 9 | header-y += tmc.h | ||
| 10 | header-y += video.h | ||
diff --git a/include/linux/usb/audio.h b/include/linux/usb/audio.h index a54b8255d75f..3d84619110a4 100644 --- a/include/linux/usb/audio.h +++ b/include/linux/usb/audio.h | |||
| @@ -17,531 +17,11 @@ | |||
| 17 | * Types and defines in this file are either specific to version 1.0 of | 17 | * Types and defines in this file are either specific to version 1.0 of |
| 18 | * this standard or common for newer versions. | 18 | * this standard or common for newer versions. |
| 19 | */ | 19 | */ |
| 20 | |||
| 21 | #ifndef __LINUX_USB_AUDIO_H | 20 | #ifndef __LINUX_USB_AUDIO_H |
| 22 | #define __LINUX_USB_AUDIO_H | 21 | #define __LINUX_USB_AUDIO_H |
| 23 | 22 | ||
| 24 | #include <linux/types.h> | 23 | #include <uapi/linux/usb/audio.h> |
| 25 | |||
| 26 | /* bInterfaceProtocol values to denote the version of the standard used */ | ||
| 27 | #define UAC_VERSION_1 0x00 | ||
| 28 | #define UAC_VERSION_2 0x20 | ||
| 29 | |||
| 30 | /* A.2 Audio Interface Subclass Codes */ | ||
| 31 | #define USB_SUBCLASS_AUDIOCONTROL 0x01 | ||
| 32 | #define USB_SUBCLASS_AUDIOSTREAMING 0x02 | ||
| 33 | #define USB_SUBCLASS_MIDISTREAMING 0x03 | ||
| 34 | |||
| 35 | /* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */ | ||
| 36 | #define UAC_HEADER 0x01 | ||
| 37 | #define UAC_INPUT_TERMINAL 0x02 | ||
| 38 | #define UAC_OUTPUT_TERMINAL 0x03 | ||
| 39 | #define UAC_MIXER_UNIT 0x04 | ||
| 40 | #define UAC_SELECTOR_UNIT 0x05 | ||
| 41 | #define UAC_FEATURE_UNIT 0x06 | ||
| 42 | #define UAC1_PROCESSING_UNIT 0x07 | ||
| 43 | #define UAC1_EXTENSION_UNIT 0x08 | ||
| 44 | |||
| 45 | /* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */ | ||
| 46 | #define UAC_AS_GENERAL 0x01 | ||
| 47 | #define UAC_FORMAT_TYPE 0x02 | ||
| 48 | #define UAC_FORMAT_SPECIFIC 0x03 | ||
| 49 | |||
| 50 | /* A.7 Processing Unit Process Types */ | ||
| 51 | #define UAC_PROCESS_UNDEFINED 0x00 | ||
| 52 | #define UAC_PROCESS_UP_DOWNMIX 0x01 | ||
| 53 | #define UAC_PROCESS_DOLBY_PROLOGIC 0x02 | ||
| 54 | #define UAC_PROCESS_STEREO_EXTENDER 0x03 | ||
| 55 | #define UAC_PROCESS_REVERB 0x04 | ||
| 56 | #define UAC_PROCESS_CHORUS 0x05 | ||
| 57 | #define UAC_PROCESS_DYN_RANGE_COMP 0x06 | ||
| 58 | |||
| 59 | /* A.8 Audio Class-Specific Endpoint Descriptor Subtypes */ | ||
| 60 | #define UAC_EP_GENERAL 0x01 | ||
| 61 | |||
| 62 | /* A.9 Audio Class-Specific Request Codes */ | ||
| 63 | #define UAC_SET_ 0x00 | ||
| 64 | #define UAC_GET_ 0x80 | ||
| 65 | |||
| 66 | #define UAC__CUR 0x1 | ||
| 67 | #define UAC__MIN 0x2 | ||
| 68 | #define UAC__MAX 0x3 | ||
| 69 | #define UAC__RES 0x4 | ||
| 70 | #define UAC__MEM 0x5 | ||
| 71 | |||
| 72 | #define UAC_SET_CUR (UAC_SET_ | UAC__CUR) | ||
| 73 | #define UAC_GET_CUR (UAC_GET_ | UAC__CUR) | ||
| 74 | #define UAC_SET_MIN (UAC_SET_ | UAC__MIN) | ||
| 75 | #define UAC_GET_MIN (UAC_GET_ | UAC__MIN) | ||
| 76 | #define UAC_SET_MAX (UAC_SET_ | UAC__MAX) | ||
| 77 | #define UAC_GET_MAX (UAC_GET_ | UAC__MAX) | ||
| 78 | #define UAC_SET_RES (UAC_SET_ | UAC__RES) | ||
| 79 | #define UAC_GET_RES (UAC_GET_ | UAC__RES) | ||
| 80 | #define UAC_SET_MEM (UAC_SET_ | UAC__MEM) | ||
| 81 | #define UAC_GET_MEM (UAC_GET_ | UAC__MEM) | ||
| 82 | |||
| 83 | #define UAC_GET_STAT 0xff | ||
| 84 | |||
| 85 | /* A.10 Control Selector Codes */ | ||
| 86 | |||
| 87 | /* A.10.1 Terminal Control Selectors */ | ||
| 88 | #define UAC_TERM_COPY_PROTECT 0x01 | ||
| 89 | |||
| 90 | /* A.10.2 Feature Unit Control Selectors */ | ||
| 91 | #define UAC_FU_MUTE 0x01 | ||
| 92 | #define UAC_FU_VOLUME 0x02 | ||
| 93 | #define UAC_FU_BASS 0x03 | ||
| 94 | #define UAC_FU_MID 0x04 | ||
| 95 | #define UAC_FU_TREBLE 0x05 | ||
| 96 | #define UAC_FU_GRAPHIC_EQUALIZER 0x06 | ||
| 97 | #define UAC_FU_AUTOMATIC_GAIN 0x07 | ||
| 98 | #define UAC_FU_DELAY 0x08 | ||
| 99 | #define UAC_FU_BASS_BOOST 0x09 | ||
| 100 | #define UAC_FU_LOUDNESS 0x0a | ||
| 101 | |||
| 102 | #define UAC_CONTROL_BIT(CS) (1 << ((CS) - 1)) | ||
| 103 | |||
| 104 | /* A.10.3.1 Up/Down-mix Processing Unit Controls Selectors */ | ||
| 105 | #define UAC_UD_ENABLE 0x01 | ||
| 106 | #define UAC_UD_MODE_SELECT 0x02 | ||
| 107 | |||
| 108 | /* A.10.3.2 Dolby Prologic (tm) Processing Unit Controls Selectors */ | ||
| 109 | #define UAC_DP_ENABLE 0x01 | ||
| 110 | #define UAC_DP_MODE_SELECT 0x02 | ||
| 111 | |||
| 112 | /* A.10.3.3 3D Stereo Extender Processing Unit Control Selectors */ | ||
| 113 | #define UAC_3D_ENABLE 0x01 | ||
| 114 | #define UAC_3D_SPACE 0x02 | ||
| 115 | |||
| 116 | /* A.10.3.4 Reverberation Processing Unit Control Selectors */ | ||
| 117 | #define UAC_REVERB_ENABLE 0x01 | ||
| 118 | #define UAC_REVERB_LEVEL 0x02 | ||
| 119 | #define UAC_REVERB_TIME 0x03 | ||
| 120 | #define UAC_REVERB_FEEDBACK 0x04 | ||
| 121 | |||
| 122 | /* A.10.3.5 Chorus Processing Unit Control Selectors */ | ||
| 123 | #define UAC_CHORUS_ENABLE 0x01 | ||
| 124 | #define UAC_CHORUS_LEVEL 0x02 | ||
| 125 | #define UAC_CHORUS_RATE 0x03 | ||
| 126 | #define UAC_CHORUS_DEPTH 0x04 | ||
| 127 | |||
| 128 | /* A.10.3.6 Dynamic Range Compressor Unit Control Selectors */ | ||
| 129 | #define UAC_DCR_ENABLE 0x01 | ||
| 130 | #define UAC_DCR_RATE 0x02 | ||
| 131 | #define UAC_DCR_MAXAMPL 0x03 | ||
| 132 | #define UAC_DCR_THRESHOLD 0x04 | ||
| 133 | #define UAC_DCR_ATTACK_TIME 0x05 | ||
| 134 | #define UAC_DCR_RELEASE_TIME 0x06 | ||
| 135 | |||
| 136 | /* A.10.4 Extension Unit Control Selectors */ | ||
| 137 | #define UAC_XU_ENABLE 0x01 | ||
| 138 | |||
| 139 | /* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */ | ||
| 140 | #define UAC_MS_HEADER 0x01 | ||
| 141 | #define UAC_MIDI_IN_JACK 0x02 | ||
| 142 | #define UAC_MIDI_OUT_JACK 0x03 | ||
| 143 | |||
| 144 | /* MIDI - A.1 MS Class-Specific Endpoint Descriptor Subtypes */ | ||
| 145 | #define UAC_MS_GENERAL 0x01 | ||
| 146 | |||
| 147 | /* Terminals - 2.1 USB Terminal Types */ | ||
| 148 | #define UAC_TERMINAL_UNDEFINED 0x100 | ||
| 149 | #define UAC_TERMINAL_STREAMING 0x101 | ||
| 150 | #define UAC_TERMINAL_VENDOR_SPEC 0x1FF | ||
| 151 | |||
| 152 | /* Terminal Control Selectors */ | ||
| 153 | /* 4.3.2 Class-Specific AC Interface Descriptor */ | ||
| 154 | struct uac1_ac_header_descriptor { | ||
| 155 | __u8 bLength; /* 8 + n */ | ||
| 156 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | ||
| 157 | __u8 bDescriptorSubtype; /* UAC_MS_HEADER */ | ||
| 158 | __le16 bcdADC; /* 0x0100 */ | ||
| 159 | __le16 wTotalLength; /* includes Unit and Terminal desc. */ | ||
| 160 | __u8 bInCollection; /* n */ | ||
| 161 | __u8 baInterfaceNr[]; /* [n] */ | ||
| 162 | } __attribute__ ((packed)); | ||
| 163 | |||
| 164 | #define UAC_DT_AC_HEADER_SIZE(n) (8 + (n)) | ||
| 165 | |||
| 166 | /* As above, but more useful for defining your own descriptors: */ | ||
| 167 | #define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n) \ | ||
| 168 | struct uac1_ac_header_descriptor_##n { \ | ||
| 169 | __u8 bLength; \ | ||
| 170 | __u8 bDescriptorType; \ | ||
| 171 | __u8 bDescriptorSubtype; \ | ||
| 172 | __le16 bcdADC; \ | ||
| 173 | __le16 wTotalLength; \ | ||
| 174 | __u8 bInCollection; \ | ||
| 175 | __u8 baInterfaceNr[n]; \ | ||
| 176 | } __attribute__ ((packed)) | ||
| 177 | |||
| 178 | /* 4.3.2.1 Input Terminal Descriptor */ | ||
| 179 | struct uac_input_terminal_descriptor { | ||
| 180 | __u8 bLength; /* in bytes: 12 */ | ||
| 181 | __u8 bDescriptorType; /* CS_INTERFACE descriptor type */ | ||
| 182 | __u8 bDescriptorSubtype; /* INPUT_TERMINAL descriptor subtype */ | ||
| 183 | __u8 bTerminalID; /* Constant uniquely terminal ID */ | ||
| 184 | __le16 wTerminalType; /* USB Audio Terminal Types */ | ||
| 185 | __u8 bAssocTerminal; /* ID of the Output Terminal associated */ | ||
| 186 | __u8 bNrChannels; /* Number of logical output channels */ | ||
| 187 | __le16 wChannelConfig; | ||
| 188 | __u8 iChannelNames; | ||
| 189 | __u8 iTerminal; | ||
| 190 | } __attribute__ ((packed)); | ||
| 191 | |||
| 192 | #define UAC_DT_INPUT_TERMINAL_SIZE 12 | ||
| 193 | |||
| 194 | /* Terminals - 2.2 Input Terminal Types */ | ||
| 195 | #define UAC_INPUT_TERMINAL_UNDEFINED 0x200 | ||
| 196 | #define UAC_INPUT_TERMINAL_MICROPHONE 0x201 | ||
| 197 | #define UAC_INPUT_TERMINAL_DESKTOP_MICROPHONE 0x202 | ||
| 198 | #define UAC_INPUT_TERMINAL_PERSONAL_MICROPHONE 0x203 | ||
| 199 | #define UAC_INPUT_TERMINAL_OMNI_DIR_MICROPHONE 0x204 | ||
| 200 | #define UAC_INPUT_TERMINAL_MICROPHONE_ARRAY 0x205 | ||
| 201 | #define UAC_INPUT_TERMINAL_PROC_MICROPHONE_ARRAY 0x206 | ||
| 202 | |||
| 203 | /* Terminals - control selectors */ | ||
| 204 | |||
| 205 | #define UAC_TERMINAL_CS_COPY_PROTECT_CONTROL 0x01 | ||
| 206 | |||
| 207 | /* 4.3.2.2 Output Terminal Descriptor */ | ||
| 208 | struct uac1_output_terminal_descriptor { | ||
| 209 | __u8 bLength; /* in bytes: 9 */ | ||
| 210 | __u8 bDescriptorType; /* CS_INTERFACE descriptor type */ | ||
| 211 | __u8 bDescriptorSubtype; /* OUTPUT_TERMINAL descriptor subtype */ | ||
| 212 | __u8 bTerminalID; /* Constant uniquely terminal ID */ | ||
| 213 | __le16 wTerminalType; /* USB Audio Terminal Types */ | ||
| 214 | __u8 bAssocTerminal; /* ID of the Input Terminal associated */ | ||
| 215 | __u8 bSourceID; /* ID of the connected Unit or Terminal*/ | ||
| 216 | __u8 iTerminal; | ||
| 217 | } __attribute__ ((packed)); | ||
| 218 | |||
| 219 | #define UAC_DT_OUTPUT_TERMINAL_SIZE 9 | ||
| 220 | |||
| 221 | /* Terminals - 2.3 Output Terminal Types */ | ||
| 222 | #define UAC_OUTPUT_TERMINAL_UNDEFINED 0x300 | ||
| 223 | #define UAC_OUTPUT_TERMINAL_SPEAKER 0x301 | ||
| 224 | #define UAC_OUTPUT_TERMINAL_HEADPHONES 0x302 | ||
| 225 | #define UAC_OUTPUT_TERMINAL_HEAD_MOUNTED_DISPLAY_AUDIO 0x303 | ||
| 226 | #define UAC_OUTPUT_TERMINAL_DESKTOP_SPEAKER 0x304 | ||
| 227 | #define UAC_OUTPUT_TERMINAL_ROOM_SPEAKER 0x305 | ||
| 228 | #define UAC_OUTPUT_TERMINAL_COMMUNICATION_SPEAKER 0x306 | ||
| 229 | #define UAC_OUTPUT_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER 0x307 | ||
| 230 | |||
| 231 | /* Set bControlSize = 2 as default setting */ | ||
| 232 | #define UAC_DT_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 2) | ||
| 233 | |||
| 234 | /* As above, but more useful for defining your own descriptors: */ | ||
| 235 | #define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch) \ | ||
| 236 | struct uac_feature_unit_descriptor_##ch { \ | ||
| 237 | __u8 bLength; \ | ||
| 238 | __u8 bDescriptorType; \ | ||
| 239 | __u8 bDescriptorSubtype; \ | ||
| 240 | __u8 bUnitID; \ | ||
| 241 | __u8 bSourceID; \ | ||
| 242 | __u8 bControlSize; \ | ||
| 243 | __le16 bmaControls[ch + 1]; \ | ||
| 244 | __u8 iFeature; \ | ||
| 245 | } __attribute__ ((packed)) | ||
| 246 | |||
| 247 | /* 4.3.2.3 Mixer Unit Descriptor */ | ||
| 248 | struct uac_mixer_unit_descriptor { | ||
| 249 | __u8 bLength; | ||
| 250 | __u8 bDescriptorType; | ||
| 251 | __u8 bDescriptorSubtype; | ||
| 252 | __u8 bUnitID; | ||
| 253 | __u8 bNrInPins; | ||
| 254 | __u8 baSourceID[]; | ||
| 255 | } __attribute__ ((packed)); | ||
| 256 | 24 | ||
| 257 | static inline __u8 uac_mixer_unit_bNrChannels(struct uac_mixer_unit_descriptor *desc) | ||
| 258 | { | ||
| 259 | return desc->baSourceID[desc->bNrInPins]; | ||
| 260 | } | ||
| 261 | |||
| 262 | static inline __u32 uac_mixer_unit_wChannelConfig(struct uac_mixer_unit_descriptor *desc, | ||
| 263 | int protocol) | ||
| 264 | { | ||
| 265 | if (protocol == UAC_VERSION_1) | ||
| 266 | return (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
| 267 | desc->baSourceID[desc->bNrInPins + 1]; | ||
| 268 | else | ||
| 269 | return (desc->baSourceID[desc->bNrInPins + 4] << 24) | | ||
| 270 | (desc->baSourceID[desc->bNrInPins + 3] << 16) | | ||
| 271 | (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
| 272 | (desc->baSourceID[desc->bNrInPins + 1]); | ||
| 273 | } | ||
| 274 | |||
| 275 | static inline __u8 uac_mixer_unit_iChannelNames(struct uac_mixer_unit_descriptor *desc, | ||
| 276 | int protocol) | ||
| 277 | { | ||
| 278 | return (protocol == UAC_VERSION_1) ? | ||
| 279 | desc->baSourceID[desc->bNrInPins + 3] : | ||
| 280 | desc->baSourceID[desc->bNrInPins + 5]; | ||
| 281 | } | ||
| 282 | |||
| 283 | static inline __u8 *uac_mixer_unit_bmControls(struct uac_mixer_unit_descriptor *desc, | ||
| 284 | int protocol) | ||
| 285 | { | ||
| 286 | return (protocol == UAC_VERSION_1) ? | ||
| 287 | &desc->baSourceID[desc->bNrInPins + 4] : | ||
| 288 | &desc->baSourceID[desc->bNrInPins + 6]; | ||
| 289 | } | ||
| 290 | |||
| 291 | static inline __u8 uac_mixer_unit_iMixer(struct uac_mixer_unit_descriptor *desc) | ||
| 292 | { | ||
| 293 | __u8 *raw = (__u8 *) desc; | ||
| 294 | return raw[desc->bLength - 1]; | ||
| 295 | } | ||
| 296 | |||
| 297 | /* 4.3.2.4 Selector Unit Descriptor */ | ||
| 298 | struct uac_selector_unit_descriptor { | ||
| 299 | __u8 bLength; | ||
| 300 | __u8 bDescriptorType; | ||
| 301 | __u8 bDescriptorSubtype; | ||
| 302 | __u8 bUintID; | ||
| 303 | __u8 bNrInPins; | ||
| 304 | __u8 baSourceID[]; | ||
| 305 | } __attribute__ ((packed)); | ||
| 306 | |||
| 307 | static inline __u8 uac_selector_unit_iSelector(struct uac_selector_unit_descriptor *desc) | ||
| 308 | { | ||
| 309 | __u8 *raw = (__u8 *) desc; | ||
| 310 | return raw[desc->bLength - 1]; | ||
| 311 | } | ||
| 312 | |||
| 313 | /* 4.3.2.5 Feature Unit Descriptor */ | ||
| 314 | struct uac_feature_unit_descriptor { | ||
| 315 | __u8 bLength; | ||
| 316 | __u8 bDescriptorType; | ||
| 317 | __u8 bDescriptorSubtype; | ||
| 318 | __u8 bUnitID; | ||
| 319 | __u8 bSourceID; | ||
| 320 | __u8 bControlSize; | ||
| 321 | __u8 bmaControls[0]; /* variable length */ | ||
| 322 | } __attribute__((packed)); | ||
| 323 | |||
| 324 | static inline __u8 uac_feature_unit_iFeature(struct uac_feature_unit_descriptor *desc) | ||
| 325 | { | ||
| 326 | __u8 *raw = (__u8 *) desc; | ||
| 327 | return raw[desc->bLength - 1]; | ||
| 328 | } | ||
| 329 | |||
| 330 | /* 4.3.2.6 Processing Unit Descriptors */ | ||
| 331 | struct uac_processing_unit_descriptor { | ||
| 332 | __u8 bLength; | ||
| 333 | __u8 bDescriptorType; | ||
| 334 | __u8 bDescriptorSubtype; | ||
| 335 | __u8 bUnitID; | ||
| 336 | __u16 wProcessType; | ||
| 337 | __u8 bNrInPins; | ||
| 338 | __u8 baSourceID[]; | ||
| 339 | } __attribute__ ((packed)); | ||
| 340 | |||
| 341 | static inline __u8 uac_processing_unit_bNrChannels(struct uac_processing_unit_descriptor *desc) | ||
| 342 | { | ||
| 343 | return desc->baSourceID[desc->bNrInPins]; | ||
| 344 | } | ||
| 345 | |||
| 346 | static inline __u32 uac_processing_unit_wChannelConfig(struct uac_processing_unit_descriptor *desc, | ||
| 347 | int protocol) | ||
| 348 | { | ||
| 349 | if (protocol == UAC_VERSION_1) | ||
| 350 | return (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
| 351 | desc->baSourceID[desc->bNrInPins + 1]; | ||
| 352 | else | ||
| 353 | return (desc->baSourceID[desc->bNrInPins + 4] << 24) | | ||
| 354 | (desc->baSourceID[desc->bNrInPins + 3] << 16) | | ||
| 355 | (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
| 356 | (desc->baSourceID[desc->bNrInPins + 1]); | ||
| 357 | } | ||
| 358 | |||
| 359 | static inline __u8 uac_processing_unit_iChannelNames(struct uac_processing_unit_descriptor *desc, | ||
| 360 | int protocol) | ||
| 361 | { | ||
| 362 | return (protocol == UAC_VERSION_1) ? | ||
| 363 | desc->baSourceID[desc->bNrInPins + 3] : | ||
| 364 | desc->baSourceID[desc->bNrInPins + 5]; | ||
| 365 | } | ||
| 366 | |||
| 367 | static inline __u8 uac_processing_unit_bControlSize(struct uac_processing_unit_descriptor *desc, | ||
| 368 | int protocol) | ||
| 369 | { | ||
| 370 | return (protocol == UAC_VERSION_1) ? | ||
| 371 | desc->baSourceID[desc->bNrInPins + 4] : | ||
| 372 | desc->baSourceID[desc->bNrInPins + 6]; | ||
| 373 | } | ||
| 374 | |||
| 375 | static inline __u8 *uac_processing_unit_bmControls(struct uac_processing_unit_descriptor *desc, | ||
| 376 | int protocol) | ||
| 377 | { | ||
| 378 | return (protocol == UAC_VERSION_1) ? | ||
| 379 | &desc->baSourceID[desc->bNrInPins + 5] : | ||
| 380 | &desc->baSourceID[desc->bNrInPins + 7]; | ||
| 381 | } | ||
| 382 | |||
| 383 | static inline __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_descriptor *desc, | ||
| 384 | int protocol) | ||
| 385 | { | ||
| 386 | __u8 control_size = uac_processing_unit_bControlSize(desc, protocol); | ||
| 387 | return desc->baSourceID[desc->bNrInPins + control_size]; | ||
| 388 | } | ||
| 389 | |||
| 390 | static inline __u8 *uac_processing_unit_specific(struct uac_processing_unit_descriptor *desc, | ||
| 391 | int protocol) | ||
| 392 | { | ||
| 393 | __u8 control_size = uac_processing_unit_bControlSize(desc, protocol); | ||
| 394 | return &desc->baSourceID[desc->bNrInPins + control_size + 1]; | ||
| 395 | } | ||
| 396 | |||
| 397 | /* 4.5.2 Class-Specific AS Interface Descriptor */ | ||
| 398 | struct uac1_as_header_descriptor { | ||
| 399 | __u8 bLength; /* in bytes: 7 */ | ||
| 400 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | ||
| 401 | __u8 bDescriptorSubtype; /* AS_GENERAL */ | ||
| 402 | __u8 bTerminalLink; /* Terminal ID of connected Terminal */ | ||
| 403 | __u8 bDelay; /* Delay introduced by the data path */ | ||
| 404 | __le16 wFormatTag; /* The Audio Data Format */ | ||
| 405 | } __attribute__ ((packed)); | ||
| 406 | |||
| 407 | #define UAC_DT_AS_HEADER_SIZE 7 | ||
| 408 | |||
| 409 | /* Formats - A.1.1 Audio Data Format Type I Codes */ | ||
| 410 | #define UAC_FORMAT_TYPE_I_UNDEFINED 0x0 | ||
| 411 | #define UAC_FORMAT_TYPE_I_PCM 0x1 | ||
| 412 | #define UAC_FORMAT_TYPE_I_PCM8 0x2 | ||
| 413 | #define UAC_FORMAT_TYPE_I_IEEE_FLOAT 0x3 | ||
| 414 | #define UAC_FORMAT_TYPE_I_ALAW 0x4 | ||
| 415 | #define UAC_FORMAT_TYPE_I_MULAW 0x5 | ||
| 416 | |||
| 417 | struct uac_format_type_i_continuous_descriptor { | ||
| 418 | __u8 bLength; /* in bytes: 8 + (ns * 3) */ | ||
| 419 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | ||
| 420 | __u8 bDescriptorSubtype; /* FORMAT_TYPE */ | ||
| 421 | __u8 bFormatType; /* FORMAT_TYPE_1 */ | ||
| 422 | __u8 bNrChannels; /* physical channels in the stream */ | ||
| 423 | __u8 bSubframeSize; /* */ | ||
| 424 | __u8 bBitResolution; | ||
| 425 | __u8 bSamFreqType; | ||
| 426 | __u8 tLowerSamFreq[3]; | ||
| 427 | __u8 tUpperSamFreq[3]; | ||
| 428 | } __attribute__ ((packed)); | ||
| 429 | |||
| 430 | #define UAC_FORMAT_TYPE_I_CONTINUOUS_DESC_SIZE 14 | ||
| 431 | |||
| 432 | struct uac_format_type_i_discrete_descriptor { | ||
| 433 | __u8 bLength; /* in bytes: 8 + (ns * 3) */ | ||
| 434 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | ||
| 435 | __u8 bDescriptorSubtype; /* FORMAT_TYPE */ | ||
| 436 | __u8 bFormatType; /* FORMAT_TYPE_1 */ | ||
| 437 | __u8 bNrChannels; /* physical channels in the stream */ | ||
| 438 | __u8 bSubframeSize; /* */ | ||
| 439 | __u8 bBitResolution; | ||
| 440 | __u8 bSamFreqType; | ||
| 441 | __u8 tSamFreq[][3]; | ||
| 442 | } __attribute__ ((packed)); | ||
| 443 | |||
| 444 | #define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n) \ | ||
| 445 | struct uac_format_type_i_discrete_descriptor_##n { \ | ||
| 446 | __u8 bLength; \ | ||
| 447 | __u8 bDescriptorType; \ | ||
| 448 | __u8 bDescriptorSubtype; \ | ||
| 449 | __u8 bFormatType; \ | ||
| 450 | __u8 bNrChannels; \ | ||
| 451 | __u8 bSubframeSize; \ | ||
| 452 | __u8 bBitResolution; \ | ||
| 453 | __u8 bSamFreqType; \ | ||
| 454 | __u8 tSamFreq[n][3]; \ | ||
| 455 | } __attribute__ ((packed)) | ||
| 456 | |||
| 457 | #define UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(n) (8 + (n * 3)) | ||
| 458 | |||
| 459 | struct uac_format_type_i_ext_descriptor { | ||
| 460 | __u8 bLength; | ||
| 461 | __u8 bDescriptorType; | ||
| 462 | __u8 bDescriptorSubtype; | ||
| 463 | __u8 bFormatType; | ||
| 464 | __u8 bSubslotSize; | ||
| 465 | __u8 bBitResolution; | ||
| 466 | __u8 bHeaderLength; | ||
| 467 | __u8 bControlSize; | ||
| 468 | __u8 bSideBandProtocol; | ||
| 469 | } __attribute__((packed)); | ||
| 470 | |||
| 471 | /* Formats - Audio Data Format Type I Codes */ | ||
| 472 | |||
| 473 | #define UAC_FORMAT_TYPE_II_MPEG 0x1001 | ||
| 474 | #define UAC_FORMAT_TYPE_II_AC3 0x1002 | ||
| 475 | |||
| 476 | struct uac_format_type_ii_discrete_descriptor { | ||
| 477 | __u8 bLength; | ||
| 478 | __u8 bDescriptorType; | ||
| 479 | __u8 bDescriptorSubtype; | ||
| 480 | __u8 bFormatType; | ||
| 481 | __le16 wMaxBitRate; | ||
| 482 | __le16 wSamplesPerFrame; | ||
| 483 | __u8 bSamFreqType; | ||
| 484 | __u8 tSamFreq[][3]; | ||
| 485 | } __attribute__((packed)); | ||
| 486 | |||
| 487 | struct uac_format_type_ii_ext_descriptor { | ||
| 488 | __u8 bLength; | ||
| 489 | __u8 bDescriptorType; | ||
| 490 | __u8 bDescriptorSubtype; | ||
| 491 | __u8 bFormatType; | ||
| 492 | __u16 wMaxBitRate; | ||
| 493 | __u16 wSamplesPerFrame; | ||
| 494 | __u8 bHeaderLength; | ||
| 495 | __u8 bSideBandProtocol; | ||
| 496 | } __attribute__((packed)); | ||
| 497 | |||
| 498 | /* type III */ | ||
| 499 | #define UAC_FORMAT_TYPE_III_IEC1937_AC3 0x2001 | ||
| 500 | #define UAC_FORMAT_TYPE_III_IEC1937_MPEG1_LAYER1 0x2002 | ||
| 501 | #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_NOEXT 0x2003 | ||
| 502 | #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_EXT 0x2004 | ||
| 503 | #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER1_LS 0x2005 | ||
| 504 | #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER23_LS 0x2006 | ||
| 505 | |||
| 506 | /* Formats - A.2 Format Type Codes */ | ||
| 507 | #define UAC_FORMAT_TYPE_UNDEFINED 0x0 | ||
| 508 | #define UAC_FORMAT_TYPE_I 0x1 | ||
| 509 | #define UAC_FORMAT_TYPE_II 0x2 | ||
| 510 | #define UAC_FORMAT_TYPE_III 0x3 | ||
| 511 | #define UAC_EXT_FORMAT_TYPE_I 0x81 | ||
| 512 | #define UAC_EXT_FORMAT_TYPE_II 0x82 | ||
| 513 | #define UAC_EXT_FORMAT_TYPE_III 0x83 | ||
| 514 | |||
| 515 | struct uac_iso_endpoint_descriptor { | ||
| 516 | __u8 bLength; /* in bytes: 7 */ | ||
| 517 | __u8 bDescriptorType; /* USB_DT_CS_ENDPOINT */ | ||
| 518 | __u8 bDescriptorSubtype; /* EP_GENERAL */ | ||
| 519 | __u8 bmAttributes; | ||
| 520 | __u8 bLockDelayUnits; | ||
| 521 | __le16 wLockDelay; | ||
| 522 | } __attribute__((packed)); | ||
| 523 | #define UAC_ISO_ENDPOINT_DESC_SIZE 7 | ||
| 524 | |||
| 525 | #define UAC_EP_CS_ATTR_SAMPLE_RATE 0x01 | ||
| 526 | #define UAC_EP_CS_ATTR_PITCH_CONTROL 0x02 | ||
| 527 | #define UAC_EP_CS_ATTR_FILL_MAX 0x80 | ||
| 528 | |||
| 529 | /* status word format (3.7.1.1) */ | ||
| 530 | |||
| 531 | #define UAC1_STATUS_TYPE_ORIG_MASK 0x0f | ||
| 532 | #define UAC1_STATUS_TYPE_ORIG_AUDIO_CONTROL_IF 0x0 | ||
| 533 | #define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_IF 0x1 | ||
| 534 | #define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_EP 0x2 | ||
| 535 | |||
| 536 | #define UAC1_STATUS_TYPE_IRQ_PENDING (1 << 7) | ||
| 537 | #define UAC1_STATUS_TYPE_MEM_CHANGED (1 << 6) | ||
| 538 | |||
| 539 | struct uac1_status_word { | ||
| 540 | __u8 bStatusType; | ||
| 541 | __u8 bOriginator; | ||
| 542 | } __attribute__((packed)); | ||
| 543 | |||
| 544 | #ifdef __KERNEL__ | ||
| 545 | 25 | ||
| 546 | struct usb_audio_control { | 26 | struct usb_audio_control { |
| 547 | struct list_head list; | 27 | struct list_head list; |
| @@ -561,6 +41,4 @@ struct usb_audio_control_selector { | |||
| 561 | struct usb_descriptor_header *desc; | 41 | struct usb_descriptor_header *desc; |
| 562 | }; | 42 | }; |
| 563 | 43 | ||
| 564 | #endif /* __KERNEL__ */ | ||
| 565 | |||
| 566 | #endif /* __LINUX_USB_AUDIO_H */ | 44 | #endif /* __LINUX_USB_AUDIO_H */ |
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h index d1d732c2838d..9c210f2283df 100644 --- a/include/linux/usb/ch9.h +++ b/include/linux/usb/ch9.h | |||
| @@ -29,887 +29,11 @@ | |||
| 29 | * someone that the two other points are non-issues for that | 29 | * someone that the two other points are non-issues for that |
| 30 | * particular descriptor type. | 30 | * particular descriptor type. |
| 31 | */ | 31 | */ |
| 32 | |||
| 33 | #ifndef __LINUX_USB_CH9_H | 32 | #ifndef __LINUX_USB_CH9_H |
| 34 | #define __LINUX_USB_CH9_H | 33 | #define __LINUX_USB_CH9_H |
| 35 | 34 | ||
| 36 | #include <linux/types.h> /* __u8 etc */ | 35 | #include <uapi/linux/usb/ch9.h> |
| 37 | #include <asm/byteorder.h> /* le16_to_cpu */ | ||
| 38 | |||
| 39 | /*-------------------------------------------------------------------------*/ | ||
| 40 | |||
| 41 | /* CONTROL REQUEST SUPPORT */ | ||
| 42 | |||
| 43 | /* | ||
| 44 | * USB directions | ||
| 45 | * | ||
| 46 | * This bit flag is used in endpoint descriptors' bEndpointAddress field. | ||
| 47 | * It's also one of three fields in control requests bRequestType. | ||
| 48 | */ | ||
| 49 | #define USB_DIR_OUT 0 /* to device */ | ||
| 50 | #define USB_DIR_IN 0x80 /* to host */ | ||
| 51 | |||
| 52 | /* | ||
| 53 | * USB types, the second of three bRequestType fields | ||
| 54 | */ | ||
| 55 | #define USB_TYPE_MASK (0x03 << 5) | ||
| 56 | #define USB_TYPE_STANDARD (0x00 << 5) | ||
| 57 | #define USB_TYPE_CLASS (0x01 << 5) | ||
| 58 | #define USB_TYPE_VENDOR (0x02 << 5) | ||
| 59 | #define USB_TYPE_RESERVED (0x03 << 5) | ||
| 60 | |||
| 61 | /* | ||
| 62 | * USB recipients, the third of three bRequestType fields | ||
| 63 | */ | ||
| 64 | #define USB_RECIP_MASK 0x1f | ||
| 65 | #define USB_RECIP_DEVICE 0x00 | ||
| 66 | #define USB_RECIP_INTERFACE 0x01 | ||
| 67 | #define USB_RECIP_ENDPOINT 0x02 | ||
| 68 | #define USB_RECIP_OTHER 0x03 | ||
| 69 | /* From Wireless USB 1.0 */ | ||
| 70 | #define USB_RECIP_PORT 0x04 | ||
| 71 | #define USB_RECIP_RPIPE 0x05 | ||
| 72 | |||
| 73 | /* | ||
| 74 | * Standard requests, for the bRequest field of a SETUP packet. | ||
| 75 | * | ||
| 76 | * These are qualified by the bRequestType field, so that for example | ||
| 77 | * TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved | ||
| 78 | * by a GET_STATUS request. | ||
| 79 | */ | ||
| 80 | #define USB_REQ_GET_STATUS 0x00 | ||
| 81 | #define USB_REQ_CLEAR_FEATURE 0x01 | ||
| 82 | #define USB_REQ_SET_FEATURE 0x03 | ||
| 83 | #define USB_REQ_SET_ADDRESS 0x05 | ||
| 84 | #define USB_REQ_GET_DESCRIPTOR 0x06 | ||
| 85 | #define USB_REQ_SET_DESCRIPTOR 0x07 | ||
| 86 | #define USB_REQ_GET_CONFIGURATION 0x08 | ||
| 87 | #define USB_REQ_SET_CONFIGURATION 0x09 | ||
| 88 | #define USB_REQ_GET_INTERFACE 0x0A | ||
| 89 | #define USB_REQ_SET_INTERFACE 0x0B | ||
| 90 | #define USB_REQ_SYNCH_FRAME 0x0C | ||
| 91 | #define USB_REQ_SET_SEL 0x30 | ||
| 92 | #define USB_REQ_SET_ISOCH_DELAY 0x31 | ||
| 93 | |||
| 94 | #define USB_REQ_SET_ENCRYPTION 0x0D /* Wireless USB */ | ||
| 95 | #define USB_REQ_GET_ENCRYPTION 0x0E | ||
| 96 | #define USB_REQ_RPIPE_ABORT 0x0E | ||
| 97 | #define USB_REQ_SET_HANDSHAKE 0x0F | ||
| 98 | #define USB_REQ_RPIPE_RESET 0x0F | ||
| 99 | #define USB_REQ_GET_HANDSHAKE 0x10 | ||
| 100 | #define USB_REQ_SET_CONNECTION 0x11 | ||
| 101 | #define USB_REQ_SET_SECURITY_DATA 0x12 | ||
| 102 | #define USB_REQ_GET_SECURITY_DATA 0x13 | ||
| 103 | #define USB_REQ_SET_WUSB_DATA 0x14 | ||
| 104 | #define USB_REQ_LOOPBACK_DATA_WRITE 0x15 | ||
| 105 | #define USB_REQ_LOOPBACK_DATA_READ 0x16 | ||
| 106 | #define USB_REQ_SET_INTERFACE_DS 0x17 | ||
| 107 | |||
| 108 | /* The Link Power Management (LPM) ECN defines USB_REQ_TEST_AND_SET command, | ||
| 109 | * used by hubs to put ports into a new L1 suspend state, except that it | ||
| 110 | * forgot to define its number ... | ||
| 111 | */ | ||
| 112 | |||
| 113 | /* | ||
| 114 | * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and | ||
| 115 | * are read as a bit array returned by USB_REQ_GET_STATUS. (So there | ||
| 116 | * are at most sixteen features of each type.) Hubs may also support a | ||
| 117 | * new USB_REQ_TEST_AND_SET_FEATURE to put ports into L1 suspend. | ||
| 118 | */ | ||
| 119 | #define USB_DEVICE_SELF_POWERED 0 /* (read only) */ | ||
| 120 | #define USB_DEVICE_REMOTE_WAKEUP 1 /* dev may initiate wakeup */ | ||
| 121 | #define USB_DEVICE_TEST_MODE 2 /* (wired high speed only) */ | ||
| 122 | #define USB_DEVICE_BATTERY 2 /* (wireless) */ | ||
| 123 | #define USB_DEVICE_B_HNP_ENABLE 3 /* (otg) dev may initiate HNP */ | ||
| 124 | #define USB_DEVICE_WUSB_DEVICE 3 /* (wireless)*/ | ||
| 125 | #define USB_DEVICE_A_HNP_SUPPORT 4 /* (otg) RH port supports HNP */ | ||
| 126 | #define USB_DEVICE_A_ALT_HNP_SUPPORT 5 /* (otg) other RH port does */ | ||
| 127 | #define USB_DEVICE_DEBUG_MODE 6 /* (special devices only) */ | ||
| 128 | |||
| 129 | /* | ||
| 130 | * Test Mode Selectors | ||
| 131 | * See USB 2.0 spec Table 9-7 | ||
| 132 | */ | ||
| 133 | #define TEST_J 1 | ||
| 134 | #define TEST_K 2 | ||
| 135 | #define TEST_SE0_NAK 3 | ||
| 136 | #define TEST_PACKET 4 | ||
| 137 | #define TEST_FORCE_EN 5 | ||
| 138 | |||
| 139 | /* | ||
| 140 | * New Feature Selectors as added by USB 3.0 | ||
| 141 | * See USB 3.0 spec Table 9-6 | ||
| 142 | */ | ||
| 143 | #define USB_DEVICE_U1_ENABLE 48 /* dev may initiate U1 transition */ | ||
| 144 | #define USB_DEVICE_U2_ENABLE 49 /* dev may initiate U2 transition */ | ||
| 145 | #define USB_DEVICE_LTM_ENABLE 50 /* dev may send LTM */ | ||
| 146 | #define USB_INTRF_FUNC_SUSPEND 0 /* function suspend */ | ||
| 147 | |||
| 148 | #define USB_INTR_FUNC_SUSPEND_OPT_MASK 0xFF00 | ||
| 149 | /* | ||
| 150 | * Suspend Options, Table 9-7 USB 3.0 spec | ||
| 151 | */ | ||
| 152 | #define USB_INTRF_FUNC_SUSPEND_LP (1 << (8 + 0)) | ||
| 153 | #define USB_INTRF_FUNC_SUSPEND_RW (1 << (8 + 1)) | ||
| 154 | |||
| 155 | #define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */ | ||
| 156 | |||
| 157 | /* Bit array elements as returned by the USB_REQ_GET_STATUS request. */ | ||
| 158 | #define USB_DEV_STAT_U1_ENABLED 2 /* transition into U1 state */ | ||
| 159 | #define USB_DEV_STAT_U2_ENABLED 3 /* transition into U2 state */ | ||
| 160 | #define USB_DEV_STAT_LTM_ENABLED 4 /* Latency tolerance messages */ | ||
| 161 | |||
| 162 | /** | ||
| 163 | * struct usb_ctrlrequest - SETUP data for a USB device control request | ||
| 164 | * @bRequestType: matches the USB bmRequestType field | ||
| 165 | * @bRequest: matches the USB bRequest field | ||
| 166 | * @wValue: matches the USB wValue field (le16 byte order) | ||
| 167 | * @wIndex: matches the USB wIndex field (le16 byte order) | ||
| 168 | * @wLength: matches the USB wLength field (le16 byte order) | ||
| 169 | * | ||
| 170 | * This structure is used to send control requests to a USB device. It matches | ||
| 171 | * the different fields of the USB 2.0 Spec section 9.3, table 9-2. See the | ||
| 172 | * USB spec for a fuller description of the different fields, and what they are | ||
| 173 | * used for. | ||
| 174 | * | ||
| 175 | * Note that the driver for any interface can issue control requests. | ||
| 176 | * For most devices, interfaces don't coordinate with each other, so | ||
| 177 | * such requests may be made at any time. | ||
| 178 | */ | ||
| 179 | struct usb_ctrlrequest { | ||
| 180 | __u8 bRequestType; | ||
| 181 | __u8 bRequest; | ||
| 182 | __le16 wValue; | ||
| 183 | __le16 wIndex; | ||
| 184 | __le16 wLength; | ||
| 185 | } __attribute__ ((packed)); | ||
| 186 | |||
| 187 | /*-------------------------------------------------------------------------*/ | ||
| 188 | |||
| 189 | /* | ||
| 190 | * STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or | ||
| 191 | * (rarely) accepted by SET_DESCRIPTOR. | ||
| 192 | * | ||
| 193 | * Note that all multi-byte values here are encoded in little endian | ||
| 194 | * byte order "on the wire". Within the kernel and when exposed | ||
| 195 | * through the Linux-USB APIs, they are not converted to cpu byte | ||
| 196 | * order; it is the responsibility of the client code to do this. | ||
| 197 | * The single exception is when device and configuration descriptors (but | ||
| 198 | * not other descriptors) are read from usbfs (i.e. /proc/bus/usb/BBB/DDD); | ||
| 199 | * in this case the fields are converted to host endianness by the kernel. | ||
| 200 | */ | ||
| 201 | |||
| 202 | /* | ||
| 203 | * Descriptor types ... USB 2.0 spec table 9.5 | ||
| 204 | */ | ||
| 205 | #define USB_DT_DEVICE 0x01 | ||
| 206 | #define USB_DT_CONFIG 0x02 | ||
| 207 | #define USB_DT_STRING 0x03 | ||
| 208 | #define USB_DT_INTERFACE 0x04 | ||
| 209 | #define USB_DT_ENDPOINT 0x05 | ||
| 210 | #define USB_DT_DEVICE_QUALIFIER 0x06 | ||
| 211 | #define USB_DT_OTHER_SPEED_CONFIG 0x07 | ||
| 212 | #define USB_DT_INTERFACE_POWER 0x08 | ||
| 213 | /* these are from a minor usb 2.0 revision (ECN) */ | ||
| 214 | #define USB_DT_OTG 0x09 | ||
| 215 | #define USB_DT_DEBUG 0x0a | ||
| 216 | #define USB_DT_INTERFACE_ASSOCIATION 0x0b | ||
| 217 | /* these are from the Wireless USB spec */ | ||
| 218 | #define USB_DT_SECURITY 0x0c | ||
| 219 | #define USB_DT_KEY 0x0d | ||
| 220 | #define USB_DT_ENCRYPTION_TYPE 0x0e | ||
| 221 | #define USB_DT_BOS 0x0f | ||
| 222 | #define USB_DT_DEVICE_CAPABILITY 0x10 | ||
| 223 | #define USB_DT_WIRELESS_ENDPOINT_COMP 0x11 | ||
| 224 | #define USB_DT_WIRE_ADAPTER 0x21 | ||
| 225 | #define USB_DT_RPIPE 0x22 | ||
| 226 | #define USB_DT_CS_RADIO_CONTROL 0x23 | ||
| 227 | /* From the T10 UAS specification */ | ||
| 228 | #define USB_DT_PIPE_USAGE 0x24 | ||
| 229 | /* From the USB 3.0 spec */ | ||
| 230 | #define USB_DT_SS_ENDPOINT_COMP 0x30 | ||
| 231 | |||
| 232 | /* Conventional codes for class-specific descriptors. The convention is | ||
| 233 | * defined in the USB "Common Class" Spec (3.11). Individual class specs | ||
| 234 | * are authoritative for their usage, not the "common class" writeup. | ||
| 235 | */ | ||
| 236 | #define USB_DT_CS_DEVICE (USB_TYPE_CLASS | USB_DT_DEVICE) | ||
| 237 | #define USB_DT_CS_CONFIG (USB_TYPE_CLASS | USB_DT_CONFIG) | ||
| 238 | #define USB_DT_CS_STRING (USB_TYPE_CLASS | USB_DT_STRING) | ||
| 239 | #define USB_DT_CS_INTERFACE (USB_TYPE_CLASS | USB_DT_INTERFACE) | ||
| 240 | #define USB_DT_CS_ENDPOINT (USB_TYPE_CLASS | USB_DT_ENDPOINT) | ||
| 241 | |||
| 242 | /* All standard descriptors have these 2 fields at the beginning */ | ||
| 243 | struct usb_descriptor_header { | ||
| 244 | __u8 bLength; | ||
| 245 | __u8 bDescriptorType; | ||
| 246 | } __attribute__ ((packed)); | ||
| 247 | |||
| 248 | |||
| 249 | /*-------------------------------------------------------------------------*/ | ||
| 250 | |||
| 251 | /* USB_DT_DEVICE: Device descriptor */ | ||
| 252 | struct usb_device_descriptor { | ||
| 253 | __u8 bLength; | ||
| 254 | __u8 bDescriptorType; | ||
| 255 | |||
| 256 | __le16 bcdUSB; | ||
| 257 | __u8 bDeviceClass; | ||
| 258 | __u8 bDeviceSubClass; | ||
| 259 | __u8 bDeviceProtocol; | ||
| 260 | __u8 bMaxPacketSize0; | ||
| 261 | __le16 idVendor; | ||
| 262 | __le16 idProduct; | ||
| 263 | __le16 bcdDevice; | ||
| 264 | __u8 iManufacturer; | ||
| 265 | __u8 iProduct; | ||
| 266 | __u8 iSerialNumber; | ||
| 267 | __u8 bNumConfigurations; | ||
| 268 | } __attribute__ ((packed)); | ||
| 269 | |||
| 270 | #define USB_DT_DEVICE_SIZE 18 | ||
| 271 | |||
| 272 | |||
| 273 | /* | ||
| 274 | * Device and/or Interface Class codes | ||
| 275 | * as found in bDeviceClass or bInterfaceClass | ||
| 276 | * and defined by www.usb.org documents | ||
| 277 | */ | ||
| 278 | #define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ | ||
| 279 | #define USB_CLASS_AUDIO 1 | ||
| 280 | #define USB_CLASS_COMM 2 | ||
| 281 | #define USB_CLASS_HID 3 | ||
| 282 | #define USB_CLASS_PHYSICAL 5 | ||
| 283 | #define USB_CLASS_STILL_IMAGE 6 | ||
| 284 | #define USB_CLASS_PRINTER 7 | ||
| 285 | #define USB_CLASS_MASS_STORAGE 8 | ||
| 286 | #define USB_CLASS_HUB 9 | ||
| 287 | #define USB_CLASS_CDC_DATA 0x0a | ||
| 288 | #define USB_CLASS_CSCID 0x0b /* chip+ smart card */ | ||
| 289 | #define USB_CLASS_CONTENT_SEC 0x0d /* content security */ | ||
| 290 | #define USB_CLASS_VIDEO 0x0e | ||
| 291 | #define USB_CLASS_WIRELESS_CONTROLLER 0xe0 | ||
| 292 | #define USB_CLASS_MISC 0xef | ||
| 293 | #define USB_CLASS_APP_SPEC 0xfe | ||
| 294 | #define USB_CLASS_VENDOR_SPEC 0xff | ||
| 295 | |||
| 296 | #define USB_SUBCLASS_VENDOR_SPEC 0xff | ||
| 297 | |||
| 298 | /*-------------------------------------------------------------------------*/ | ||
| 299 | |||
| 300 | /* USB_DT_CONFIG: Configuration descriptor information. | ||
| 301 | * | ||
| 302 | * USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the | ||
| 303 | * descriptor type is different. Highspeed-capable devices can look | ||
| 304 | * different depending on what speed they're currently running. Only | ||
| 305 | * devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG | ||
| 306 | * descriptors. | ||
| 307 | */ | ||
| 308 | struct usb_config_descriptor { | ||
| 309 | __u8 bLength; | ||
| 310 | __u8 bDescriptorType; | ||
| 311 | |||
| 312 | __le16 wTotalLength; | ||
| 313 | __u8 bNumInterfaces; | ||
| 314 | __u8 bConfigurationValue; | ||
| 315 | __u8 iConfiguration; | ||
| 316 | __u8 bmAttributes; | ||
| 317 | __u8 bMaxPower; | ||
| 318 | } __attribute__ ((packed)); | ||
| 319 | |||
| 320 | #define USB_DT_CONFIG_SIZE 9 | ||
| 321 | |||
| 322 | /* from config descriptor bmAttributes */ | ||
| 323 | #define USB_CONFIG_ATT_ONE (1 << 7) /* must be set */ | ||
| 324 | #define USB_CONFIG_ATT_SELFPOWER (1 << 6) /* self powered */ | ||
| 325 | #define USB_CONFIG_ATT_WAKEUP (1 << 5) /* can wakeup */ | ||
| 326 | #define USB_CONFIG_ATT_BATTERY (1 << 4) /* battery powered */ | ||
| 327 | |||
| 328 | /*-------------------------------------------------------------------------*/ | ||
| 329 | |||
| 330 | /* USB_DT_STRING: String descriptor */ | ||
| 331 | struct usb_string_descriptor { | ||
| 332 | __u8 bLength; | ||
| 333 | __u8 bDescriptorType; | ||
| 334 | |||
| 335 | __le16 wData[1]; /* UTF-16LE encoded */ | ||
| 336 | } __attribute__ ((packed)); | ||
| 337 | |||
| 338 | /* note that "string" zero is special, it holds language codes that | ||
| 339 | * the device supports, not Unicode characters. | ||
| 340 | */ | ||
| 341 | |||
| 342 | /*-------------------------------------------------------------------------*/ | ||
| 343 | |||
| 344 | /* USB_DT_INTERFACE: Interface descriptor */ | ||
| 345 | struct usb_interface_descriptor { | ||
| 346 | __u8 bLength; | ||
| 347 | __u8 bDescriptorType; | ||
| 348 | |||
| 349 | __u8 bInterfaceNumber; | ||
| 350 | __u8 bAlternateSetting; | ||
| 351 | __u8 bNumEndpoints; | ||
| 352 | __u8 bInterfaceClass; | ||
| 353 | __u8 bInterfaceSubClass; | ||
| 354 | __u8 bInterfaceProtocol; | ||
| 355 | __u8 iInterface; | ||
| 356 | } __attribute__ ((packed)); | ||
| 357 | |||
| 358 | #define USB_DT_INTERFACE_SIZE 9 | ||
| 359 | |||
| 360 | /*-------------------------------------------------------------------------*/ | ||
| 361 | |||
| 362 | /* USB_DT_ENDPOINT: Endpoint descriptor */ | ||
| 363 | struct usb_endpoint_descriptor { | ||
| 364 | __u8 bLength; | ||
| 365 | __u8 bDescriptorType; | ||
| 366 | |||
| 367 | __u8 bEndpointAddress; | ||
| 368 | __u8 bmAttributes; | ||
| 369 | __le16 wMaxPacketSize; | ||
| 370 | __u8 bInterval; | ||
| 371 | |||
| 372 | /* NOTE: these two are _only_ in audio endpoints. */ | ||
| 373 | /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */ | ||
| 374 | __u8 bRefresh; | ||
| 375 | __u8 bSynchAddress; | ||
| 376 | } __attribute__ ((packed)); | ||
| 377 | |||
| 378 | #define USB_DT_ENDPOINT_SIZE 7 | ||
| 379 | #define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ | ||
| 380 | |||
| 381 | |||
| 382 | /* | ||
| 383 | * Endpoints | ||
| 384 | */ | ||
| 385 | #define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ | ||
| 386 | #define USB_ENDPOINT_DIR_MASK 0x80 | ||
| 387 | |||
| 388 | #define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ | ||
| 389 | #define USB_ENDPOINT_XFER_CONTROL 0 | ||
| 390 | #define USB_ENDPOINT_XFER_ISOC 1 | ||
| 391 | #define USB_ENDPOINT_XFER_BULK 2 | ||
| 392 | #define USB_ENDPOINT_XFER_INT 3 | ||
| 393 | #define USB_ENDPOINT_MAX_ADJUSTABLE 0x80 | ||
| 394 | |||
| 395 | /* The USB 3.0 spec redefines bits 5:4 of bmAttributes as interrupt ep type. */ | ||
| 396 | #define USB_ENDPOINT_INTRTYPE 0x30 | ||
| 397 | #define USB_ENDPOINT_INTR_PERIODIC (0 << 4) | ||
| 398 | #define USB_ENDPOINT_INTR_NOTIFICATION (1 << 4) | ||
| 399 | |||
| 400 | #define USB_ENDPOINT_SYNCTYPE 0x0c | ||
| 401 | #define USB_ENDPOINT_SYNC_NONE (0 << 2) | ||
| 402 | #define USB_ENDPOINT_SYNC_ASYNC (1 << 2) | ||
| 403 | #define USB_ENDPOINT_SYNC_ADAPTIVE (2 << 2) | ||
| 404 | #define USB_ENDPOINT_SYNC_SYNC (3 << 2) | ||
| 405 | |||
| 406 | #define USB_ENDPOINT_USAGE_MASK 0x30 | ||
| 407 | #define USB_ENDPOINT_USAGE_DATA 0x00 | ||
| 408 | #define USB_ENDPOINT_USAGE_FEEDBACK 0x10 | ||
| 409 | #define USB_ENDPOINT_USAGE_IMPLICIT_FB 0x20 /* Implicit feedback Data endpoint */ | ||
| 410 | |||
| 411 | /*-------------------------------------------------------------------------*/ | ||
| 412 | |||
| 413 | /** | ||
| 414 | * usb_endpoint_num - get the endpoint's number | ||
| 415 | * @epd: endpoint to be checked | ||
| 416 | * | ||
| 417 | * Returns @epd's number: 0 to 15. | ||
| 418 | */ | ||
| 419 | static inline int usb_endpoint_num(const struct usb_endpoint_descriptor *epd) | ||
| 420 | { | ||
| 421 | return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; | ||
| 422 | } | ||
| 423 | |||
| 424 | /** | ||
| 425 | * usb_endpoint_type - get the endpoint's transfer type | ||
| 426 | * @epd: endpoint to be checked | ||
| 427 | * | ||
| 428 | * Returns one of USB_ENDPOINT_XFER_{CONTROL, ISOC, BULK, INT} according | ||
| 429 | * to @epd's transfer type. | ||
| 430 | */ | ||
| 431 | static inline int usb_endpoint_type(const struct usb_endpoint_descriptor *epd) | ||
| 432 | { | ||
| 433 | return epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; | ||
| 434 | } | ||
| 435 | |||
| 436 | /** | ||
| 437 | * usb_endpoint_dir_in - check if the endpoint has IN direction | ||
| 438 | * @epd: endpoint to be checked | ||
| 439 | * | ||
| 440 | * Returns true if the endpoint is of type IN, otherwise it returns false. | ||
| 441 | */ | ||
| 442 | static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd) | ||
| 443 | { | ||
| 444 | return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN); | ||
| 445 | } | ||
| 446 | |||
| 447 | /** | ||
| 448 | * usb_endpoint_dir_out - check if the endpoint has OUT direction | ||
| 449 | * @epd: endpoint to be checked | ||
| 450 | * | ||
| 451 | * Returns true if the endpoint is of type OUT, otherwise it returns false. | ||
| 452 | */ | ||
| 453 | static inline int usb_endpoint_dir_out( | ||
| 454 | const struct usb_endpoint_descriptor *epd) | ||
| 455 | { | ||
| 456 | return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT); | ||
| 457 | } | ||
| 458 | |||
| 459 | /** | ||
| 460 | * usb_endpoint_xfer_bulk - check if the endpoint has bulk transfer type | ||
| 461 | * @epd: endpoint to be checked | ||
| 462 | * | ||
| 463 | * Returns true if the endpoint is of type bulk, otherwise it returns false. | ||
| 464 | */ | ||
| 465 | static inline int usb_endpoint_xfer_bulk( | ||
| 466 | const struct usb_endpoint_descriptor *epd) | ||
| 467 | { | ||
| 468 | return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == | ||
| 469 | USB_ENDPOINT_XFER_BULK); | ||
| 470 | } | ||
| 471 | |||
| 472 | /** | ||
| 473 | * usb_endpoint_xfer_control - check if the endpoint has control transfer type | ||
| 474 | * @epd: endpoint to be checked | ||
| 475 | * | ||
| 476 | * Returns true if the endpoint is of type control, otherwise it returns false. | ||
| 477 | */ | ||
| 478 | static inline int usb_endpoint_xfer_control( | ||
| 479 | const struct usb_endpoint_descriptor *epd) | ||
| 480 | { | ||
| 481 | return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == | ||
| 482 | USB_ENDPOINT_XFER_CONTROL); | ||
| 483 | } | ||
| 484 | |||
| 485 | /** | ||
| 486 | * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type | ||
| 487 | * @epd: endpoint to be checked | ||
| 488 | * | ||
| 489 | * Returns true if the endpoint is of type interrupt, otherwise it returns | ||
| 490 | * false. | ||
| 491 | */ | ||
| 492 | static inline int usb_endpoint_xfer_int( | ||
| 493 | const struct usb_endpoint_descriptor *epd) | ||
| 494 | { | ||
| 495 | return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == | ||
| 496 | USB_ENDPOINT_XFER_INT); | ||
| 497 | } | ||
| 498 | |||
| 499 | /** | ||
| 500 | * usb_endpoint_xfer_isoc - check if the endpoint has isochronous transfer type | ||
| 501 | * @epd: endpoint to be checked | ||
| 502 | * | ||
| 503 | * Returns true if the endpoint is of type isochronous, otherwise it returns | ||
| 504 | * false. | ||
| 505 | */ | ||
| 506 | static inline int usb_endpoint_xfer_isoc( | ||
| 507 | const struct usb_endpoint_descriptor *epd) | ||
| 508 | { | ||
| 509 | return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == | ||
| 510 | USB_ENDPOINT_XFER_ISOC); | ||
| 511 | } | ||
| 512 | |||
| 513 | /** | ||
| 514 | * usb_endpoint_is_bulk_in - check if the endpoint is bulk IN | ||
| 515 | * @epd: endpoint to be checked | ||
| 516 | * | ||
| 517 | * Returns true if the endpoint has bulk transfer type and IN direction, | ||
| 518 | * otherwise it returns false. | ||
| 519 | */ | ||
| 520 | static inline int usb_endpoint_is_bulk_in( | ||
| 521 | const struct usb_endpoint_descriptor *epd) | ||
| 522 | { | ||
| 523 | return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd); | ||
| 524 | } | ||
| 525 | |||
| 526 | /** | ||
| 527 | * usb_endpoint_is_bulk_out - check if the endpoint is bulk OUT | ||
| 528 | * @epd: endpoint to be checked | ||
| 529 | * | ||
| 530 | * Returns true if the endpoint has bulk transfer type and OUT direction, | ||
| 531 | * otherwise it returns false. | ||
| 532 | */ | ||
| 533 | static inline int usb_endpoint_is_bulk_out( | ||
| 534 | const struct usb_endpoint_descriptor *epd) | ||
| 535 | { | ||
| 536 | return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd); | ||
| 537 | } | ||
| 538 | |||
| 539 | /** | ||
| 540 | * usb_endpoint_is_int_in - check if the endpoint is interrupt IN | ||
| 541 | * @epd: endpoint to be checked | ||
| 542 | * | ||
| 543 | * Returns true if the endpoint has interrupt transfer type and IN direction, | ||
| 544 | * otherwise it returns false. | ||
| 545 | */ | ||
| 546 | static inline int usb_endpoint_is_int_in( | ||
| 547 | const struct usb_endpoint_descriptor *epd) | ||
| 548 | { | ||
| 549 | return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd); | ||
| 550 | } | ||
| 551 | |||
| 552 | /** | ||
| 553 | * usb_endpoint_is_int_out - check if the endpoint is interrupt OUT | ||
| 554 | * @epd: endpoint to be checked | ||
| 555 | * | ||
| 556 | * Returns true if the endpoint has interrupt transfer type and OUT direction, | ||
| 557 | * otherwise it returns false. | ||
| 558 | */ | ||
| 559 | static inline int usb_endpoint_is_int_out( | ||
| 560 | const struct usb_endpoint_descriptor *epd) | ||
| 561 | { | ||
| 562 | return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd); | ||
| 563 | } | ||
| 564 | |||
| 565 | /** | ||
| 566 | * usb_endpoint_is_isoc_in - check if the endpoint is isochronous IN | ||
| 567 | * @epd: endpoint to be checked | ||
| 568 | * | ||
| 569 | * Returns true if the endpoint has isochronous transfer type and IN direction, | ||
| 570 | * otherwise it returns false. | ||
| 571 | */ | ||
| 572 | static inline int usb_endpoint_is_isoc_in( | ||
| 573 | const struct usb_endpoint_descriptor *epd) | ||
| 574 | { | ||
| 575 | return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd); | ||
| 576 | } | ||
| 577 | |||
| 578 | /** | ||
| 579 | * usb_endpoint_is_isoc_out - check if the endpoint is isochronous OUT | ||
| 580 | * @epd: endpoint to be checked | ||
| 581 | * | ||
| 582 | * Returns true if the endpoint has isochronous transfer type and OUT direction, | ||
| 583 | * otherwise it returns false. | ||
| 584 | */ | ||
| 585 | static inline int usb_endpoint_is_isoc_out( | ||
| 586 | const struct usb_endpoint_descriptor *epd) | ||
| 587 | { | ||
| 588 | return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd); | ||
| 589 | } | ||
| 590 | |||
| 591 | /** | ||
| 592 | * usb_endpoint_maxp - get endpoint's max packet size | ||
| 593 | * @epd: endpoint to be checked | ||
| 594 | * | ||
| 595 | * Returns @epd's max packet | ||
| 596 | */ | ||
| 597 | static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd) | ||
| 598 | { | ||
| 599 | return __le16_to_cpu(epd->wMaxPacketSize); | ||
| 600 | } | ||
| 601 | |||
| 602 | static inline int usb_endpoint_interrupt_type( | ||
| 603 | const struct usb_endpoint_descriptor *epd) | ||
| 604 | { | ||
| 605 | return epd->bmAttributes & USB_ENDPOINT_INTRTYPE; | ||
| 606 | } | ||
| 607 | |||
| 608 | /*-------------------------------------------------------------------------*/ | ||
| 609 | |||
| 610 | /* USB_DT_SS_ENDPOINT_COMP: SuperSpeed Endpoint Companion descriptor */ | ||
| 611 | struct usb_ss_ep_comp_descriptor { | ||
| 612 | __u8 bLength; | ||
| 613 | __u8 bDescriptorType; | ||
| 614 | |||
| 615 | __u8 bMaxBurst; | ||
| 616 | __u8 bmAttributes; | ||
| 617 | __le16 wBytesPerInterval; | ||
| 618 | } __attribute__ ((packed)); | ||
| 619 | |||
| 620 | #define USB_DT_SS_EP_COMP_SIZE 6 | ||
| 621 | |||
| 622 | /* Bits 4:0 of bmAttributes if this is a bulk endpoint */ | ||
| 623 | static inline int | ||
| 624 | usb_ss_max_streams(const struct usb_ss_ep_comp_descriptor *comp) | ||
| 625 | { | ||
| 626 | int max_streams; | ||
| 627 | |||
| 628 | if (!comp) | ||
| 629 | return 0; | ||
| 630 | |||
| 631 | max_streams = comp->bmAttributes & 0x1f; | ||
| 632 | |||
| 633 | if (!max_streams) | ||
| 634 | return 0; | ||
| 635 | |||
| 636 | max_streams = 1 << max_streams; | ||
| 637 | |||
| 638 | return max_streams; | ||
| 639 | } | ||
| 640 | |||
| 641 | /* Bits 1:0 of bmAttributes if this is an isoc endpoint */ | ||
| 642 | #define USB_SS_MULT(p) (1 + ((p) & 0x3)) | ||
| 643 | |||
| 644 | /*-------------------------------------------------------------------------*/ | ||
| 645 | |||
| 646 | /* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */ | ||
| 647 | struct usb_qualifier_descriptor { | ||
| 648 | __u8 bLength; | ||
| 649 | __u8 bDescriptorType; | ||
| 650 | |||
| 651 | __le16 bcdUSB; | ||
| 652 | __u8 bDeviceClass; | ||
| 653 | __u8 bDeviceSubClass; | ||
| 654 | __u8 bDeviceProtocol; | ||
| 655 | __u8 bMaxPacketSize0; | ||
| 656 | __u8 bNumConfigurations; | ||
| 657 | __u8 bRESERVED; | ||
| 658 | } __attribute__ ((packed)); | ||
| 659 | |||
| 660 | |||
| 661 | /*-------------------------------------------------------------------------*/ | ||
| 662 | |||
| 663 | /* USB_DT_OTG (from OTG 1.0a supplement) */ | ||
| 664 | struct usb_otg_descriptor { | ||
| 665 | __u8 bLength; | ||
| 666 | __u8 bDescriptorType; | ||
| 667 | |||
| 668 | __u8 bmAttributes; /* support for HNP, SRP, etc */ | ||
| 669 | } __attribute__ ((packed)); | ||
| 670 | |||
| 671 | /* from usb_otg_descriptor.bmAttributes */ | ||
| 672 | #define USB_OTG_SRP (1 << 0) | ||
| 673 | #define USB_OTG_HNP (1 << 1) /* swap host/device roles */ | ||
| 674 | |||
| 675 | /*-------------------------------------------------------------------------*/ | ||
| 676 | |||
| 677 | /* USB_DT_DEBUG: for special highspeed devices, replacing serial console */ | ||
| 678 | struct usb_debug_descriptor { | ||
| 679 | __u8 bLength; | ||
| 680 | __u8 bDescriptorType; | ||
| 681 | |||
| 682 | /* bulk endpoints with 8 byte maxpacket */ | ||
| 683 | __u8 bDebugInEndpoint; | ||
| 684 | __u8 bDebugOutEndpoint; | ||
| 685 | } __attribute__((packed)); | ||
| 686 | |||
| 687 | /*-------------------------------------------------------------------------*/ | ||
| 688 | |||
| 689 | /* USB_DT_INTERFACE_ASSOCIATION: groups interfaces */ | ||
| 690 | struct usb_interface_assoc_descriptor { | ||
| 691 | __u8 bLength; | ||
| 692 | __u8 bDescriptorType; | ||
| 693 | |||
| 694 | __u8 bFirstInterface; | ||
| 695 | __u8 bInterfaceCount; | ||
| 696 | __u8 bFunctionClass; | ||
| 697 | __u8 bFunctionSubClass; | ||
| 698 | __u8 bFunctionProtocol; | ||
| 699 | __u8 iFunction; | ||
| 700 | } __attribute__ ((packed)); | ||
| 701 | |||
| 702 | |||
| 703 | /*-------------------------------------------------------------------------*/ | ||
| 704 | |||
| 705 | /* USB_DT_SECURITY: group of wireless security descriptors, including | ||
| 706 | * encryption types available for setting up a CC/association. | ||
| 707 | */ | ||
| 708 | struct usb_security_descriptor { | ||
| 709 | __u8 bLength; | ||
| 710 | __u8 bDescriptorType; | ||
| 711 | |||
| 712 | __le16 wTotalLength; | ||
| 713 | __u8 bNumEncryptionTypes; | ||
| 714 | } __attribute__((packed)); | ||
| 715 | |||
| 716 | /*-------------------------------------------------------------------------*/ | ||
| 717 | |||
| 718 | /* USB_DT_KEY: used with {GET,SET}_SECURITY_DATA; only public keys | ||
| 719 | * may be retrieved. | ||
| 720 | */ | ||
| 721 | struct usb_key_descriptor { | ||
| 722 | __u8 bLength; | ||
| 723 | __u8 bDescriptorType; | ||
| 724 | |||
| 725 | __u8 tTKID[3]; | ||
| 726 | __u8 bReserved; | ||
| 727 | __u8 bKeyData[0]; | ||
| 728 | } __attribute__((packed)); | ||
| 729 | |||
| 730 | /*-------------------------------------------------------------------------*/ | ||
| 731 | |||
| 732 | /* USB_DT_ENCRYPTION_TYPE: bundled in DT_SECURITY groups */ | ||
| 733 | struct usb_encryption_descriptor { | ||
| 734 | __u8 bLength; | ||
| 735 | __u8 bDescriptorType; | ||
| 736 | |||
| 737 | __u8 bEncryptionType; | ||
| 738 | #define USB_ENC_TYPE_UNSECURE 0 | ||
| 739 | #define USB_ENC_TYPE_WIRED 1 /* non-wireless mode */ | ||
| 740 | #define USB_ENC_TYPE_CCM_1 2 /* aes128/cbc session */ | ||
| 741 | #define USB_ENC_TYPE_RSA_1 3 /* rsa3072/sha1 auth */ | ||
| 742 | __u8 bEncryptionValue; /* use in SET_ENCRYPTION */ | ||
| 743 | __u8 bAuthKeyIndex; | ||
| 744 | } __attribute__((packed)); | ||
| 745 | |||
| 746 | |||
| 747 | /*-------------------------------------------------------------------------*/ | ||
| 748 | |||
| 749 | /* USB_DT_BOS: group of device-level capabilities */ | ||
| 750 | struct usb_bos_descriptor { | ||
| 751 | __u8 bLength; | ||
| 752 | __u8 bDescriptorType; | ||
| 753 | |||
| 754 | __le16 wTotalLength; | ||
| 755 | __u8 bNumDeviceCaps; | ||
| 756 | } __attribute__((packed)); | ||
| 757 | |||
| 758 | #define USB_DT_BOS_SIZE 5 | ||
| 759 | /*-------------------------------------------------------------------------*/ | ||
| 760 | |||
| 761 | /* USB_DT_DEVICE_CAPABILITY: grouped with BOS */ | ||
| 762 | struct usb_dev_cap_header { | ||
| 763 | __u8 bLength; | ||
| 764 | __u8 bDescriptorType; | ||
| 765 | __u8 bDevCapabilityType; | ||
| 766 | } __attribute__((packed)); | ||
| 767 | |||
| 768 | #define USB_CAP_TYPE_WIRELESS_USB 1 | ||
| 769 | |||
| 770 | struct usb_wireless_cap_descriptor { /* Ultra Wide Band */ | ||
| 771 | __u8 bLength; | ||
| 772 | __u8 bDescriptorType; | ||
| 773 | __u8 bDevCapabilityType; | ||
| 774 | |||
| 775 | __u8 bmAttributes; | ||
| 776 | #define USB_WIRELESS_P2P_DRD (1 << 1) | ||
| 777 | #define USB_WIRELESS_BEACON_MASK (3 << 2) | ||
| 778 | #define USB_WIRELESS_BEACON_SELF (1 << 2) | ||
| 779 | #define USB_WIRELESS_BEACON_DIRECTED (2 << 2) | ||
| 780 | #define USB_WIRELESS_BEACON_NONE (3 << 2) | ||
| 781 | __le16 wPHYRates; /* bit rates, Mbps */ | ||
| 782 | #define USB_WIRELESS_PHY_53 (1 << 0) /* always set */ | ||
| 783 | #define USB_WIRELESS_PHY_80 (1 << 1) | ||
| 784 | #define USB_WIRELESS_PHY_107 (1 << 2) /* always set */ | ||
| 785 | #define USB_WIRELESS_PHY_160 (1 << 3) | ||
| 786 | #define USB_WIRELESS_PHY_200 (1 << 4) /* always set */ | ||
| 787 | #define USB_WIRELESS_PHY_320 (1 << 5) | ||
| 788 | #define USB_WIRELESS_PHY_400 (1 << 6) | ||
| 789 | #define USB_WIRELESS_PHY_480 (1 << 7) | ||
| 790 | __u8 bmTFITXPowerInfo; /* TFI power levels */ | ||
| 791 | __u8 bmFFITXPowerInfo; /* FFI power levels */ | ||
| 792 | __le16 bmBandGroup; | ||
| 793 | __u8 bReserved; | ||
| 794 | } __attribute__((packed)); | ||
| 795 | |||
| 796 | /* USB 2.0 Extension descriptor */ | ||
| 797 | #define USB_CAP_TYPE_EXT 2 | ||
| 798 | |||
| 799 | struct usb_ext_cap_descriptor { /* Link Power Management */ | ||
| 800 | __u8 bLength; | ||
| 801 | __u8 bDescriptorType; | ||
| 802 | __u8 bDevCapabilityType; | ||
| 803 | __le32 bmAttributes; | ||
| 804 | #define USB_LPM_SUPPORT (1 << 1) /* supports LPM */ | ||
| 805 | #define USB_BESL_SUPPORT (1 << 2) /* supports BESL */ | ||
| 806 | #define USB_BESL_BASELINE_VALID (1 << 3) /* Baseline BESL valid*/ | ||
| 807 | #define USB_BESL_DEEP_VALID (1 << 4) /* Deep BESL valid */ | ||
| 808 | #define USB_GET_BESL_BASELINE(p) (((p) & (0xf << 8)) >> 8) | ||
| 809 | #define USB_GET_BESL_DEEP(p) (((p) & (0xf << 12)) >> 12) | ||
| 810 | } __attribute__((packed)); | ||
| 811 | |||
| 812 | #define USB_DT_USB_EXT_CAP_SIZE 7 | ||
| 813 | |||
| 814 | /* | ||
| 815 | * SuperSpeed USB Capability descriptor: Defines the set of SuperSpeed USB | ||
| 816 | * specific device level capabilities | ||
| 817 | */ | ||
| 818 | #define USB_SS_CAP_TYPE 3 | ||
| 819 | struct usb_ss_cap_descriptor { /* Link Power Management */ | ||
| 820 | __u8 bLength; | ||
| 821 | __u8 bDescriptorType; | ||
| 822 | __u8 bDevCapabilityType; | ||
| 823 | __u8 bmAttributes; | ||
| 824 | #define USB_LTM_SUPPORT (1 << 1) /* supports LTM */ | ||
| 825 | __le16 wSpeedSupported; | ||
| 826 | #define USB_LOW_SPEED_OPERATION (1) /* Low speed operation */ | ||
| 827 | #define USB_FULL_SPEED_OPERATION (1 << 1) /* Full speed operation */ | ||
| 828 | #define USB_HIGH_SPEED_OPERATION (1 << 2) /* High speed operation */ | ||
| 829 | #define USB_5GBPS_OPERATION (1 << 3) /* Operation at 5Gbps */ | ||
| 830 | __u8 bFunctionalitySupport; | ||
| 831 | __u8 bU1devExitLat; | ||
| 832 | __le16 bU2DevExitLat; | ||
| 833 | } __attribute__((packed)); | ||
| 834 | |||
| 835 | #define USB_DT_USB_SS_CAP_SIZE 10 | ||
| 836 | |||
| 837 | /* | ||
| 838 | * Container ID Capability descriptor: Defines the instance unique ID used to | ||
| 839 | * identify the instance across all operating modes | ||
| 840 | */ | ||
| 841 | #define CONTAINER_ID_TYPE 4 | ||
| 842 | struct usb_ss_container_id_descriptor { | ||
| 843 | __u8 bLength; | ||
| 844 | __u8 bDescriptorType; | ||
| 845 | __u8 bDevCapabilityType; | ||
| 846 | __u8 bReserved; | ||
| 847 | __u8 ContainerID[16]; /* 128-bit number */ | ||
| 848 | } __attribute__((packed)); | ||
| 849 | |||
| 850 | #define USB_DT_USB_SS_CONTN_ID_SIZE 20 | ||
| 851 | /*-------------------------------------------------------------------------*/ | ||
| 852 | |||
| 853 | /* USB_DT_WIRELESS_ENDPOINT_COMP: companion descriptor associated with | ||
| 854 | * each endpoint descriptor for a wireless device | ||
| 855 | */ | ||
| 856 | struct usb_wireless_ep_comp_descriptor { | ||
| 857 | __u8 bLength; | ||
| 858 | __u8 bDescriptorType; | ||
| 859 | |||
| 860 | __u8 bMaxBurst; | ||
| 861 | __u8 bMaxSequence; | ||
| 862 | __le16 wMaxStreamDelay; | ||
| 863 | __le16 wOverTheAirPacketSize; | ||
| 864 | __u8 bOverTheAirInterval; | ||
| 865 | __u8 bmCompAttributes; | ||
| 866 | #define USB_ENDPOINT_SWITCH_MASK 0x03 /* in bmCompAttributes */ | ||
| 867 | #define USB_ENDPOINT_SWITCH_NO 0 | ||
| 868 | #define USB_ENDPOINT_SWITCH_SWITCH 1 | ||
| 869 | #define USB_ENDPOINT_SWITCH_SCALE 2 | ||
| 870 | } __attribute__((packed)); | ||
| 871 | |||
| 872 | /*-------------------------------------------------------------------------*/ | ||
| 873 | |||
| 874 | /* USB_REQ_SET_HANDSHAKE is a four-way handshake used between a wireless | ||
| 875 | * host and a device for connection set up, mutual authentication, and | ||
| 876 | * exchanging short lived session keys. The handshake depends on a CC. | ||
| 877 | */ | ||
| 878 | struct usb_handshake { | ||
| 879 | __u8 bMessageNumber; | ||
| 880 | __u8 bStatus; | ||
| 881 | __u8 tTKID[3]; | ||
| 882 | __u8 bReserved; | ||
| 883 | __u8 CDID[16]; | ||
| 884 | __u8 nonce[16]; | ||
| 885 | __u8 MIC[8]; | ||
| 886 | } __attribute__((packed)); | ||
| 887 | |||
| 888 | /*-------------------------------------------------------------------------*/ | ||
| 889 | |||
| 890 | /* USB_REQ_SET_CONNECTION modifies or revokes a connection context (CC). | ||
| 891 | * A CC may also be set up using non-wireless secure channels (including | ||
| 892 | * wired USB!), and some devices may support CCs with multiple hosts. | ||
| 893 | */ | ||
| 894 | struct usb_connection_context { | ||
| 895 | __u8 CHID[16]; /* persistent host id */ | ||
| 896 | __u8 CDID[16]; /* device id (unique w/in host context) */ | ||
| 897 | __u8 CK[16]; /* connection key */ | ||
| 898 | } __attribute__((packed)); | ||
| 899 | |||
| 900 | /*-------------------------------------------------------------------------*/ | ||
| 901 | 36 | ||
| 902 | /* USB 2.0 defines three speeds, here's how Linux identifies them */ | ||
| 903 | |||
| 904 | enum usb_device_speed { | ||
| 905 | USB_SPEED_UNKNOWN = 0, /* enumerating */ | ||
| 906 | USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */ | ||
| 907 | USB_SPEED_HIGH, /* usb 2.0 */ | ||
| 908 | USB_SPEED_WIRELESS, /* wireless (usb 2.5) */ | ||
| 909 | USB_SPEED_SUPER, /* usb 3.0 */ | ||
| 910 | }; | ||
| 911 | |||
| 912 | #ifdef __KERNEL__ | ||
| 913 | 37 | ||
| 914 | /** | 38 | /** |
| 915 | * usb_speed_string() - Returns human readable-name of the speed. | 39 | * usb_speed_string() - Returns human readable-name of the speed. |
| @@ -919,86 +43,4 @@ enum usb_device_speed { | |||
| 919 | */ | 43 | */ |
| 920 | extern const char *usb_speed_string(enum usb_device_speed speed); | 44 | extern const char *usb_speed_string(enum usb_device_speed speed); |
| 921 | 45 | ||
| 922 | #endif | ||
| 923 | |||
| 924 | enum usb_device_state { | ||
| 925 | /* NOTATTACHED isn't in the USB spec, and this state acts | ||
| 926 | * the same as ATTACHED ... but it's clearer this way. | ||
| 927 | */ | ||
| 928 | USB_STATE_NOTATTACHED = 0, | ||
| 929 | |||
| 930 | /* chapter 9 and authentication (wireless) device states */ | ||
| 931 | USB_STATE_ATTACHED, | ||
| 932 | USB_STATE_POWERED, /* wired */ | ||
| 933 | USB_STATE_RECONNECTING, /* auth */ | ||
| 934 | USB_STATE_UNAUTHENTICATED, /* auth */ | ||
| 935 | USB_STATE_DEFAULT, /* limited function */ | ||
| 936 | USB_STATE_ADDRESS, | ||
| 937 | USB_STATE_CONFIGURED, /* most functions */ | ||
| 938 | |||
| 939 | USB_STATE_SUSPENDED | ||
| 940 | |||
| 941 | /* NOTE: there are actually four different SUSPENDED | ||
| 942 | * states, returning to POWERED, DEFAULT, ADDRESS, or | ||
| 943 | * CONFIGURED respectively when SOF tokens flow again. | ||
| 944 | * At this level there's no difference between L1 and L2 | ||
| 945 | * suspend states. (L2 being original USB 1.1 suspend.) | ||
| 946 | */ | ||
| 947 | }; | ||
| 948 | |||
| 949 | enum usb3_link_state { | ||
| 950 | USB3_LPM_U0 = 0, | ||
| 951 | USB3_LPM_U1, | ||
| 952 | USB3_LPM_U2, | ||
| 953 | USB3_LPM_U3 | ||
| 954 | }; | ||
| 955 | |||
| 956 | /* | ||
| 957 | * A U1 timeout of 0x0 means the parent hub will reject any transitions to U1. | ||
| 958 | * 0xff means the parent hub will accept transitions to U1, but will not | ||
| 959 | * initiate a transition. | ||
| 960 | * | ||
| 961 | * A U1 timeout of 0x1 to 0x7F also causes the hub to initiate a transition to | ||
| 962 | * U1 after that many microseconds. Timeouts of 0x80 to 0xFE are reserved | ||
| 963 | * values. | ||
| 964 | * | ||
| 965 | * A U2 timeout of 0x0 means the parent hub will reject any transitions to U2. | ||
| 966 | * 0xff means the parent hub will accept transitions to U2, but will not | ||
| 967 | * initiate a transition. | ||
| 968 | * | ||
| 969 | * A U2 timeout of 0x1 to 0xFE also causes the hub to initiate a transition to | ||
| 970 | * U2 after N*256 microseconds. Therefore a U2 timeout value of 0x1 means a U2 | ||
| 971 | * idle timer of 256 microseconds, 0x2 means 512 microseconds, 0xFE means | ||
| 972 | * 65.024ms. | ||
| 973 | */ | ||
| 974 | #define USB3_LPM_DISABLED 0x0 | ||
| 975 | #define USB3_LPM_U1_MAX_TIMEOUT 0x7F | ||
| 976 | #define USB3_LPM_U2_MAX_TIMEOUT 0xFE | ||
| 977 | #define USB3_LPM_DEVICE_INITIATED 0xFF | ||
| 978 | |||
| 979 | struct usb_set_sel_req { | ||
| 980 | __u8 u1_sel; | ||
| 981 | __u8 u1_pel; | ||
| 982 | __le16 u2_sel; | ||
| 983 | __le16 u2_pel; | ||
| 984 | } __attribute__ ((packed)); | ||
| 985 | |||
| 986 | /* | ||
| 987 | * The Set System Exit Latency control transfer provides one byte each for | ||
| 988 | * U1 SEL and U1 PEL, so the max exit latency is 0xFF. U2 SEL and U2 PEL each | ||
| 989 | * are two bytes long. | ||
| 990 | */ | ||
| 991 | #define USB3_LPM_MAX_U1_SEL_PEL 0xFF | ||
| 992 | #define USB3_LPM_MAX_U2_SEL_PEL 0xFFFF | ||
| 993 | |||
| 994 | /*-------------------------------------------------------------------------*/ | ||
| 995 | |||
| 996 | /* | ||
| 997 | * As per USB compliance update, a device that is actively drawing | ||
| 998 | * more than 100mA from USB must report itself as bus-powered in | ||
| 999 | * the GetStatus(DEVICE) call. | ||
| 1000 | * http://compliance.usb.org/index.asp?UpdateFile=Electrical&Format=Standard#34 | ||
| 1001 | */ | ||
| 1002 | #define USB_SELF_POWER_VBUS_MAX_DRAW 100 | ||
| 1003 | |||
| 1004 | #endif /* __LINUX_USB_CH9_H */ | 46 | #endif /* __LINUX_USB_CH9_H */ |
diff --git a/include/linux/usb/functionfs.h b/include/linux/usb/functionfs.h index a843d0851364..65d0a88dbc67 100644 --- a/include/linux/usb/functionfs.h +++ b/include/linux/usb/functionfs.h | |||
| @@ -1,171 +1,8 @@ | |||
| 1 | #ifndef __LINUX_FUNCTIONFS_H__ | 1 | #ifndef __LINUX_FUNCTIONFS_H__ |
| 2 | #define __LINUX_FUNCTIONFS_H__ 1 | 2 | #define __LINUX_FUNCTIONFS_H__ 1 |
| 3 | 3 | ||
| 4 | #include <uapi/linux/usb/functionfs.h> | ||
| 4 | 5 | ||
| 5 | #include <linux/types.h> | ||
| 6 | #include <linux/ioctl.h> | ||
| 7 | |||
| 8 | #include <linux/usb/ch9.h> | ||
| 9 | |||
| 10 | |||
| 11 | enum { | ||
| 12 | FUNCTIONFS_DESCRIPTORS_MAGIC = 1, | ||
| 13 | FUNCTIONFS_STRINGS_MAGIC = 2 | ||
| 14 | }; | ||
| 15 | |||
| 16 | |||
| 17 | #ifndef __KERNEL__ | ||
| 18 | |||
| 19 | /* Descriptor of an non-audio endpoint */ | ||
| 20 | struct usb_endpoint_descriptor_no_audio { | ||
| 21 | __u8 bLength; | ||
| 22 | __u8 bDescriptorType; | ||
| 23 | |||
| 24 | __u8 bEndpointAddress; | ||
| 25 | __u8 bmAttributes; | ||
| 26 | __le16 wMaxPacketSize; | ||
| 27 | __u8 bInterval; | ||
| 28 | } __attribute__((packed)); | ||
| 29 | |||
| 30 | |||
| 31 | /* | ||
| 32 | * All numbers must be in little endian order. | ||
| 33 | */ | ||
| 34 | |||
| 35 | struct usb_functionfs_descs_head { | ||
| 36 | __le32 magic; | ||
| 37 | __le32 length; | ||
| 38 | __le32 fs_count; | ||
| 39 | __le32 hs_count; | ||
| 40 | } __attribute__((packed)); | ||
| 41 | |||
| 42 | /* | ||
| 43 | * Descriptors format: | ||
| 44 | * | ||
| 45 | * | off | name | type | description | | ||
| 46 | * |-----+-----------+--------------+--------------------------------------| | ||
| 47 | * | 0 | magic | LE32 | FUNCTIONFS_{FS,HS}_DESCRIPTORS_MAGIC | | ||
| 48 | * | 4 | length | LE32 | length of the whole data chunk | | ||
| 49 | * | 8 | fs_count | LE32 | number of full-speed descriptors | | ||
| 50 | * | 12 | hs_count | LE32 | number of high-speed descriptors | | ||
| 51 | * | 16 | fs_descrs | Descriptor[] | list of full-speed descriptors | | ||
| 52 | * | | hs_descrs | Descriptor[] | list of high-speed descriptors | | ||
| 53 | * | ||
| 54 | * descs are just valid USB descriptors and have the following format: | ||
| 55 | * | ||
| 56 | * | off | name | type | description | | ||
| 57 | * |-----+-----------------+------+--------------------------| | ||
| 58 | * | 0 | bLength | U8 | length of the descriptor | | ||
| 59 | * | 1 | bDescriptorType | U8 | descriptor type | | ||
| 60 | * | 2 | payload | | descriptor's payload | | ||
| 61 | */ | ||
| 62 | |||
| 63 | struct usb_functionfs_strings_head { | ||
| 64 | __le32 magic; | ||
| 65 | __le32 length; | ||
| 66 | __le32 str_count; | ||
| 67 | __le32 lang_count; | ||
| 68 | } __attribute__((packed)); | ||
| 69 | |||
| 70 | /* | ||
| 71 | * Strings format: | ||
| 72 | * | ||
| 73 | * | off | name | type | description | | ||
| 74 | * |-----+------------+-----------------------+----------------------------| | ||
| 75 | * | 0 | magic | LE32 | FUNCTIONFS_STRINGS_MAGIC | | ||
| 76 | * | 4 | length | LE32 | length of the data chunk | | ||
| 77 | * | 8 | str_count | LE32 | number of strings | | ||
| 78 | * | 12 | lang_count | LE32 | number of languages | | ||
| 79 | * | 16 | stringtab | StringTab[lang_count] | table of strings per lang | | ||
| 80 | * | ||
| 81 | * For each language there is one stringtab entry (ie. there are lang_count | ||
| 82 | * stringtab entires). Each StringTab has following format: | ||
| 83 | * | ||
| 84 | * | off | name | type | description | | ||
| 85 | * |-----+---------+-------------------+------------------------------------| | ||
| 86 | * | 0 | lang | LE16 | language code | | ||
| 87 | * | 2 | strings | String[str_count] | array of strings in given language | | ||
| 88 | * | ||
| 89 | * For each string there is one strings entry (ie. there are str_count | ||
| 90 | * string entries). Each String is a NUL terminated string encoded in | ||
| 91 | * UTF-8. | ||
| 92 | */ | ||
| 93 | |||
| 94 | #endif | ||
| 95 | |||
| 96 | |||
| 97 | /* | ||
| 98 | * Events are delivered on the ep0 file descriptor, when the user mode driver | ||
| 99 | * reads from this file descriptor after writing the descriptors. Don't | ||
| 100 | * stop polling this descriptor. | ||
| 101 | */ | ||
| 102 | |||
| 103 | enum usb_functionfs_event_type { | ||
| 104 | FUNCTIONFS_BIND, | ||
| 105 | FUNCTIONFS_UNBIND, | ||
| 106 | |||
| 107 | FUNCTIONFS_ENABLE, | ||
| 108 | FUNCTIONFS_DISABLE, | ||
| 109 | |||
| 110 | FUNCTIONFS_SETUP, | ||
| 111 | |||
| 112 | FUNCTIONFS_SUSPEND, | ||
| 113 | FUNCTIONFS_RESUME | ||
| 114 | }; | ||
| 115 | |||
| 116 | /* NOTE: this structure must stay the same size and layout on | ||
| 117 | * both 32-bit and 64-bit kernels. | ||
| 118 | */ | ||
| 119 | struct usb_functionfs_event { | ||
| 120 | union { | ||
| 121 | /* SETUP: packet; DATA phase i/o precedes next event | ||
| 122 | *(setup.bmRequestType & USB_DIR_IN) flags direction */ | ||
| 123 | struct usb_ctrlrequest setup; | ||
| 124 | } __attribute__((packed)) u; | ||
| 125 | |||
| 126 | /* enum usb_functionfs_event_type */ | ||
| 127 | __u8 type; | ||
| 128 | __u8 _pad[3]; | ||
| 129 | } __attribute__((packed)); | ||
| 130 | |||
| 131 | |||
| 132 | /* Endpoint ioctls */ | ||
| 133 | /* The same as in gadgetfs */ | ||
| 134 | |||
| 135 | /* IN transfers may be reported to the gadget driver as complete | ||
| 136 | * when the fifo is loaded, before the host reads the data; | ||
| 137 | * OUT transfers may be reported to the host's "client" driver as | ||
| 138 | * complete when they're sitting in the FIFO unread. | ||
| 139 | * THIS returns how many bytes are "unclaimed" in the endpoint fifo | ||
| 140 | * (needed for precise fault handling, when the hardware allows it) | ||
| 141 | */ | ||
| 142 | #define FUNCTIONFS_FIFO_STATUS _IO('g', 1) | ||
| 143 | |||
| 144 | /* discards any unclaimed data in the fifo. */ | ||
| 145 | #define FUNCTIONFS_FIFO_FLUSH _IO('g', 2) | ||
| 146 | |||
| 147 | /* resets endpoint halt+toggle; used to implement set_interface. | ||
| 148 | * some hardware (like pxa2xx) can't support this. | ||
| 149 | */ | ||
| 150 | #define FUNCTIONFS_CLEAR_HALT _IO('g', 3) | ||
| 151 | |||
| 152 | /* Specific for functionfs */ | ||
| 153 | |||
| 154 | /* | ||
| 155 | * Returns reverse mapping of an interface. Called on EP0. If there | ||
| 156 | * is no such interface returns -EDOM. If function is not active | ||
| 157 | * returns -ENODEV. | ||
| 158 | */ | ||
| 159 | #define FUNCTIONFS_INTERFACE_REVMAP _IO('g', 128) | ||
| 160 | |||
| 161 | /* | ||
| 162 | * Returns real bEndpointAddress of an endpoint. If function is not | ||
| 163 | * active returns -ENODEV. | ||
| 164 | */ | ||
| 165 | #define FUNCTIONFS_ENDPOINT_REVMAP _IO('g', 129) | ||
| 166 | |||
| 167 | |||
| 168 | #ifdef __KERNEL__ | ||
| 169 | 6 | ||
| 170 | struct ffs_data; | 7 | struct ffs_data; |
| 171 | struct usb_composite_dev; | 8 | struct usb_composite_dev; |
| @@ -197,5 +34,3 @@ static void functionfs_release_dev_callback(struct ffs_data *ffs_data) | |||
| 197 | 34 | ||
| 198 | 35 | ||
| 199 | #endif | 36 | #endif |
| 200 | |||
| 201 | #endif | ||
diff --git a/include/linux/wimax/Kbuild b/include/linux/wimax/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/linux/wimax/Kbuild +++ /dev/null | |||
diff --git a/include/mtd/Kbuild b/include/mtd/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/mtd/Kbuild +++ /dev/null | |||
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 1b4989082244..7d5b6000378b 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
| @@ -1218,6 +1218,7 @@ struct cfg80211_deauth_request { | |||
| 1218 | const u8 *ie; | 1218 | const u8 *ie; |
| 1219 | size_t ie_len; | 1219 | size_t ie_len; |
| 1220 | u16 reason_code; | 1220 | u16 reason_code; |
| 1221 | bool local_state_change; | ||
| 1221 | }; | 1222 | }; |
| 1222 | 1223 | ||
| 1223 | /** | 1224 | /** |
| @@ -2651,6 +2652,15 @@ unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb); | |||
| 2651 | unsigned int __attribute_const__ ieee80211_hdrlen(__le16 fc); | 2652 | unsigned int __attribute_const__ ieee80211_hdrlen(__le16 fc); |
| 2652 | 2653 | ||
| 2653 | /** | 2654 | /** |
| 2655 | * ieee80211_get_mesh_hdrlen - get mesh extension header length | ||
| 2656 | * @meshhdr: the mesh extension header, only the flags field | ||
| 2657 | * (first byte) will be accessed | ||
| 2658 | * Returns the length of the extension header, which is always at | ||
| 2659 | * least 6 bytes and at most 18 if address 5 and 6 are present. | ||
| 2660 | */ | ||
| 2661 | unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr); | ||
| 2662 | |||
| 2663 | /** | ||
| 2654 | * DOC: Data path helpers | 2664 | * DOC: Data path helpers |
| 2655 | * | 2665 | * |
| 2656 | * In addition to generic utilities, cfg80211 also offers | 2666 | * In addition to generic utilities, cfg80211 also offers |
diff --git a/include/net/tcp.h b/include/net/tcp.h index 6feeccd83dd7..4af45e33105d 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
| @@ -525,6 +525,7 @@ static inline __u32 cookie_v6_init_sequence(struct sock *sk, | |||
| 525 | extern void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss, | 525 | extern void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss, |
| 526 | int nonagle); | 526 | int nonagle); |
| 527 | extern bool tcp_may_send_now(struct sock *sk); | 527 | extern bool tcp_may_send_now(struct sock *sk); |
| 528 | extern int __tcp_retransmit_skb(struct sock *, struct sk_buff *); | ||
| 528 | extern int tcp_retransmit_skb(struct sock *, struct sk_buff *); | 529 | extern int tcp_retransmit_skb(struct sock *, struct sk_buff *); |
| 529 | extern void tcp_retransmit_timer(struct sock *sk); | 530 | extern void tcp_retransmit_timer(struct sock *sk); |
| 530 | extern void tcp_xmit_retransmit_queue(struct sock *); | 531 | extern void tcp_xmit_retransmit_queue(struct sock *); |
diff --git a/include/net/xfrm.h b/include/net/xfrm.h index 6f0ba01afe73..63445ede48bb 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h | |||
| @@ -1351,7 +1351,7 @@ struct xfrm6_tunnel { | |||
| 1351 | }; | 1351 | }; |
| 1352 | 1352 | ||
| 1353 | extern void xfrm_init(void); | 1353 | extern void xfrm_init(void); |
| 1354 | extern void xfrm4_init(int rt_hash_size); | 1354 | extern void xfrm4_init(void); |
| 1355 | extern int xfrm_state_init(struct net *net); | 1355 | extern int xfrm_state_init(struct net *net); |
| 1356 | extern void xfrm_state_fini(struct net *net); | 1356 | extern void xfrm_state_fini(struct net *net); |
| 1357 | extern void xfrm4_state_init(void); | 1357 | extern void xfrm4_state_init(void); |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 88fae8d20154..55367b04dc94 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
| @@ -135,6 +135,8 @@ struct scsi_device { | |||
| 135 | * because we did a bus reset. */ | 135 | * because we did a bus reset. */ |
| 136 | unsigned use_10_for_rw:1; /* first try 10-byte read / write */ | 136 | unsigned use_10_for_rw:1; /* first try 10-byte read / write */ |
| 137 | unsigned use_10_for_ms:1; /* first try 10-byte mode sense/select */ | 137 | unsigned use_10_for_ms:1; /* first try 10-byte mode sense/select */ |
| 138 | unsigned no_report_opcodes:1; /* no REPORT SUPPORTED OPERATION CODES */ | ||
| 139 | unsigned no_write_same:1; /* no WRITE SAME command */ | ||
| 138 | unsigned skip_ms_page_8:1; /* do not use MODE SENSE page 0x08 */ | 140 | unsigned skip_ms_page_8:1; /* do not use MODE SENSE page 0x08 */ |
| 139 | unsigned skip_ms_page_3f:1; /* do not use MODE SENSE page 0x3f */ | 141 | unsigned skip_ms_page_3f:1; /* do not use MODE SENSE page 0x3f */ |
| 140 | unsigned skip_vpd_pages:1; /* do not read VPD pages */ | 142 | unsigned skip_vpd_pages:1; /* do not read VPD pages */ |
| @@ -362,6 +364,8 @@ extern int scsi_test_unit_ready(struct scsi_device *sdev, int timeout, | |||
| 362 | int retries, struct scsi_sense_hdr *sshdr); | 364 | int retries, struct scsi_sense_hdr *sshdr); |
| 363 | extern int scsi_get_vpd_page(struct scsi_device *, u8 page, unsigned char *buf, | 365 | extern int scsi_get_vpd_page(struct scsi_device *, u8 page, unsigned char *buf, |
| 364 | int buf_len); | 366 | int buf_len); |
| 367 | extern int scsi_report_opcode(struct scsi_device *sdev, unsigned char *buffer, | ||
| 368 | unsigned int len, unsigned char opcode); | ||
| 365 | extern int scsi_device_set_state(struct scsi_device *sdev, | 369 | extern int scsi_device_set_state(struct scsi_device *sdev, |
| 366 | enum scsi_device_state state); | 370 | enum scsi_device_state state); |
| 367 | extern struct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type, | 371 | extern struct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type, |
diff --git a/include/sound/core.h b/include/sound/core.h index bc056687f647..93896ad1fcdd 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
| @@ -132,6 +132,7 @@ struct snd_card { | |||
| 132 | int shutdown; /* this card is going down */ | 132 | int shutdown; /* this card is going down */ |
| 133 | int free_on_last_close; /* free in context of file_release */ | 133 | int free_on_last_close; /* free in context of file_release */ |
| 134 | wait_queue_head_t shutdown_sleep; | 134 | wait_queue_head_t shutdown_sleep; |
| 135 | atomic_t refcount; /* refcount for disconnection */ | ||
| 135 | struct device *dev; /* device assigned to this card */ | 136 | struct device *dev; /* device assigned to this card */ |
| 136 | struct device *card_dev; /* cardX object for sysfs */ | 137 | struct device *card_dev; /* cardX object for sysfs */ |
| 137 | 138 | ||
| @@ -189,6 +190,7 @@ struct snd_minor { | |||
| 189 | const struct file_operations *f_ops; /* file operations */ | 190 | const struct file_operations *f_ops; /* file operations */ |
| 190 | void *private_data; /* private data for f_ops->open */ | 191 | void *private_data; /* private data for f_ops->open */ |
| 191 | struct device *dev; /* device for sysfs */ | 192 | struct device *dev; /* device for sysfs */ |
| 193 | struct snd_card *card_ptr; /* assigned card instance */ | ||
| 192 | }; | 194 | }; |
| 193 | 195 | ||
| 194 | /* return a device pointer linked to each sound device as a parent */ | 196 | /* return a device pointer linked to each sound device as a parent */ |
| @@ -295,6 +297,7 @@ int snd_card_info_done(void); | |||
| 295 | int snd_component_add(struct snd_card *card, const char *component); | 297 | int snd_component_add(struct snd_card *card, const char *component); |
| 296 | int snd_card_file_add(struct snd_card *card, struct file *file); | 298 | int snd_card_file_add(struct snd_card *card, struct file *file); |
| 297 | int snd_card_file_remove(struct snd_card *card, struct file *file); | 299 | int snd_card_file_remove(struct snd_card *card, struct file *file); |
| 300 | void snd_card_unref(struct snd_card *card); | ||
| 298 | 301 | ||
| 299 | #define snd_card_set_dev(card, devptr) ((card)->dev = (devptr)) | 302 | #define snd_card_set_dev(card, devptr) ((card)->dev = (devptr)) |
| 300 | 303 | ||
diff --git a/include/trace/events/gfpflags.h b/include/trace/events/gfpflags.h index 9391706e9254..d6fd8e5b14b7 100644 --- a/include/trace/events/gfpflags.h +++ b/include/trace/events/gfpflags.h | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | {(unsigned long)__GFP_RECLAIMABLE, "GFP_RECLAIMABLE"}, \ | 36 | {(unsigned long)__GFP_RECLAIMABLE, "GFP_RECLAIMABLE"}, \ |
| 37 | {(unsigned long)__GFP_MOVABLE, "GFP_MOVABLE"}, \ | 37 | {(unsigned long)__GFP_MOVABLE, "GFP_MOVABLE"}, \ |
| 38 | {(unsigned long)__GFP_NOTRACK, "GFP_NOTRACK"}, \ | 38 | {(unsigned long)__GFP_NOTRACK, "GFP_NOTRACK"}, \ |
| 39 | {(unsigned long)__GFP_NO_KSWAPD, "GFP_NO_KSWAPD"}, \ | ||
| 39 | {(unsigned long)__GFP_OTHER_NODE, "GFP_OTHER_NODE"} \ | 40 | {(unsigned long)__GFP_OTHER_NODE, "GFP_OTHER_NODE"} \ |
| 40 | ) : "GFP_NOWAIT" | 41 | ) : "GFP_NOWAIT" |
| 41 | 42 | ||
diff --git a/include/trace/events/xen.h b/include/trace/events/xen.h index 15ba03bdd7c6..d06b6da5c1e3 100644 --- a/include/trace/events/xen.h +++ b/include/trace/events/xen.h | |||
| @@ -377,6 +377,14 @@ DECLARE_EVENT_CLASS(xen_mmu_pgd, | |||
| 377 | DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_pin); | 377 | DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_pin); |
| 378 | DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_unpin); | 378 | DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_unpin); |
| 379 | 379 | ||
| 380 | TRACE_EVENT(xen_mmu_flush_tlb_all, | ||
| 381 | TP_PROTO(int x), | ||
| 382 | TP_ARGS(x), | ||
| 383 | TP_STRUCT__entry(__array(char, x, 0)), | ||
| 384 | TP_fast_assign((void)x), | ||
| 385 | TP_printk("%s", "") | ||
| 386 | ); | ||
| 387 | |||
| 380 | TRACE_EVENT(xen_mmu_flush_tlb, | 388 | TRACE_EVENT(xen_mmu_flush_tlb, |
| 381 | TP_PROTO(int x), | 389 | TP_PROTO(int x), |
| 382 | TP_ARGS(x), | 390 | TP_ARGS(x), |
diff --git a/include/uapi/asm-generic/kvm_para.h b/include/uapi/asm-generic/kvm_para.h index e69de29bb2d1..486f0af73c39 100644 --- a/include/uapi/asm-generic/kvm_para.h +++ b/include/uapi/asm-generic/kvm_para.h | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | /* | ||
| 2 | * There isn't anything here, but the file must not be empty or patch | ||
| 3 | * will delete it. | ||
| 4 | */ | ||
diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild index e194387ef784..19e765fbfef7 100644 --- a/include/uapi/linux/Kbuild +++ b/include/uapi/linux/Kbuild | |||
| @@ -415,3 +415,4 @@ header-y += wireless.h | |||
| 415 | header-y += x25.h | 415 | header-y += x25.h |
| 416 | header-y += xattr.h | 416 | header-y += xattr.h |
| 417 | header-y += xfrm.h | 417 | header-y += xfrm.h |
| 418 | header-y += hw_breakpoint.h | ||
diff --git a/include/uapi/linux/elf-fdpic.h b/include/uapi/linux/elf-fdpic.h index 1065078938f9..3921e33aec8e 100644 --- a/include/uapi/linux/elf-fdpic.h +++ b/include/uapi/linux/elf-fdpic.h | |||
| @@ -9,8 +9,8 @@ | |||
| 9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
| 10 | */ | 10 | */ |
| 11 | 11 | ||
| 12 | #ifndef _LINUX_ELF_FDPIC_H | 12 | #ifndef _UAPI_LINUX_ELF_FDPIC_H |
| 13 | #define _LINUX_ELF_FDPIC_H | 13 | #define _UAPI_LINUX_ELF_FDPIC_H |
| 14 | 14 | ||
| 15 | #include <linux/elf.h> | 15 | #include <linux/elf.h> |
| 16 | 16 | ||
| @@ -31,40 +31,4 @@ struct elf32_fdpic_loadmap { | |||
| 31 | 31 | ||
| 32 | #define ELF32_FDPIC_LOADMAP_VERSION 0x0000 | 32 | #define ELF32_FDPIC_LOADMAP_VERSION 0x0000 |
| 33 | 33 | ||
| 34 | #ifndef __KERNEL__ | 34 | #endif /* _UAPI_LINUX_ELF_FDPIC_H */ |
| 35 | /* | ||
| 36 | * binfmt binary parameters structure | ||
| 37 | */ | ||
| 38 | struct elf_fdpic_params { | ||
| 39 | struct elfhdr hdr; /* ref copy of ELF header */ | ||
| 40 | struct elf_phdr *phdrs; /* ref copy of PT_PHDR table */ | ||
| 41 | struct elf32_fdpic_loadmap *loadmap; /* loadmap to be passed to userspace */ | ||
| 42 | unsigned long elfhdr_addr; /* mapped ELF header user address */ | ||
| 43 | unsigned long ph_addr; /* mapped PT_PHDR user address */ | ||
| 44 | unsigned long map_addr; /* mapped loadmap user address */ | ||
| 45 | unsigned long entry_addr; /* mapped entry user address */ | ||
| 46 | unsigned long stack_size; /* stack size requested (PT_GNU_STACK) */ | ||
| 47 | unsigned long dynamic_addr; /* mapped PT_DYNAMIC user address */ | ||
| 48 | unsigned long load_addr; /* user address at which to map binary */ | ||
| 49 | unsigned long flags; | ||
| 50 | #define ELF_FDPIC_FLAG_ARRANGEMENT 0x0000000f /* PT_LOAD arrangement flags */ | ||
| 51 | #define ELF_FDPIC_FLAG_INDEPENDENT 0x00000000 /* PT_LOADs can be put anywhere */ | ||
| 52 | #define ELF_FDPIC_FLAG_HONOURVADDR 0x00000001 /* PT_LOAD.vaddr must be honoured */ | ||
| 53 | #define ELF_FDPIC_FLAG_CONSTDISP 0x00000002 /* PT_LOADs require constant | ||
| 54 | * displacement */ | ||
| 55 | #define ELF_FDPIC_FLAG_CONTIGUOUS 0x00000003 /* PT_LOADs should be contiguous */ | ||
| 56 | #define ELF_FDPIC_FLAG_EXEC_STACK 0x00000010 /* T if stack to be executable */ | ||
| 57 | #define ELF_FDPIC_FLAG_NOEXEC_STACK 0x00000020 /* T if stack not to be executable */ | ||
| 58 | #define ELF_FDPIC_FLAG_EXECUTABLE 0x00000040 /* T if this object is the executable */ | ||
| 59 | #define ELF_FDPIC_FLAG_PRESENT 0x80000000 /* T if this object is present */ | ||
| 60 | }; | ||
| 61 | |||
| 62 | #ifdef CONFIG_MMU | ||
| 63 | extern void elf_fdpic_arch_lay_out_mm(struct elf_fdpic_params *exec_params, | ||
| 64 | struct elf_fdpic_params *interp_params, | ||
| 65 | unsigned long *start_stack, | ||
| 66 | unsigned long *start_brk); | ||
| 67 | #endif | ||
| 68 | #endif /* __KERNEL__ */ | ||
| 69 | |||
| 70 | #endif /* _LINUX_ELF_FDPIC_H */ | ||
diff --git a/include/uapi/linux/eventpoll.h b/include/uapi/linux/eventpoll.h index 8c99ce7202c5..2c267bcbb85c 100644 --- a/include/uapi/linux/eventpoll.h +++ b/include/uapi/linux/eventpoll.h | |||
| @@ -25,7 +25,6 @@ | |||
| 25 | #define EPOLL_CTL_ADD 1 | 25 | #define EPOLL_CTL_ADD 1 |
| 26 | #define EPOLL_CTL_DEL 2 | 26 | #define EPOLL_CTL_DEL 2 |
| 27 | #define EPOLL_CTL_MOD 3 | 27 | #define EPOLL_CTL_MOD 3 |
| 28 | #define EPOLL_CTL_DISABLE 4 | ||
| 29 | 28 | ||
| 30 | /* | 29 | /* |
| 31 | * Request the handling of system wakeup events so as to prevent system suspends | 30 | * Request the handling of system wakeup events so as to prevent system suspends |
diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h index 9fcc880d4be2..780d4c6093eb 100644 --- a/include/uapi/linux/fs.h +++ b/include/uapi/linux/fs.h | |||
| @@ -57,85 +57,6 @@ struct inodes_stat_t { | |||
| 57 | 57 | ||
| 58 | #define NR_FILE 8192 /* this can well be larger on a larger system */ | 58 | #define NR_FILE 8192 /* this can well be larger on a larger system */ |
| 59 | 59 | ||
| 60 | #define MAY_EXEC 0x00000001 | ||
| 61 | #define MAY_WRITE 0x00000002 | ||
| 62 | #define MAY_READ 0x00000004 | ||
| 63 | #define MAY_APPEND 0x00000008 | ||
| 64 | #define MAY_ACCESS 0x00000010 | ||
| 65 | #define MAY_OPEN 0x00000020 | ||
| 66 | #define MAY_CHDIR 0x00000040 | ||
| 67 | /* called from RCU mode, don't block */ | ||
| 68 | #define MAY_NOT_BLOCK 0x00000080 | ||
| 69 | |||
| 70 | /* | ||
| 71 | * flags in file.f_mode. Note that FMODE_READ and FMODE_WRITE must correspond | ||
| 72 | * to O_WRONLY and O_RDWR via the strange trick in __dentry_open() | ||
| 73 | */ | ||
| 74 | |||
| 75 | /* file is open for reading */ | ||
| 76 | #define FMODE_READ ((__force fmode_t)0x1) | ||
| 77 | /* file is open for writing */ | ||
| 78 | #define FMODE_WRITE ((__force fmode_t)0x2) | ||
| 79 | /* file is seekable */ | ||
| 80 | #define FMODE_LSEEK ((__force fmode_t)0x4) | ||
| 81 | /* file can be accessed using pread */ | ||
| 82 | #define FMODE_PREAD ((__force fmode_t)0x8) | ||
| 83 | /* file can be accessed using pwrite */ | ||
| 84 | #define FMODE_PWRITE ((__force fmode_t)0x10) | ||
| 85 | /* File is opened for execution with sys_execve / sys_uselib */ | ||
| 86 | #define FMODE_EXEC ((__force fmode_t)0x20) | ||
| 87 | /* File is opened with O_NDELAY (only set for block devices) */ | ||
| 88 | #define FMODE_NDELAY ((__force fmode_t)0x40) | ||
| 89 | /* File is opened with O_EXCL (only set for block devices) */ | ||
| 90 | #define FMODE_EXCL ((__force fmode_t)0x80) | ||
| 91 | /* File is opened using open(.., 3, ..) and is writeable only for ioctls | ||
| 92 | (specialy hack for floppy.c) */ | ||
| 93 | #define FMODE_WRITE_IOCTL ((__force fmode_t)0x100) | ||
| 94 | /* 32bit hashes as llseek() offset (for directories) */ | ||
| 95 | #define FMODE_32BITHASH ((__force fmode_t)0x200) | ||
| 96 | /* 64bit hashes as llseek() offset (for directories) */ | ||
| 97 | #define FMODE_64BITHASH ((__force fmode_t)0x400) | ||
| 98 | |||
| 99 | /* | ||
| 100 | * Don't update ctime and mtime. | ||
| 101 | * | ||
| 102 | * Currently a special hack for the XFS open_by_handle ioctl, but we'll | ||
| 103 | * hopefully graduate it to a proper O_CMTIME flag supported by open(2) soon. | ||
| 104 | */ | ||
| 105 | #define FMODE_NOCMTIME ((__force fmode_t)0x800) | ||
| 106 | |||
| 107 | /* Expect random access pattern */ | ||
| 108 | #define FMODE_RANDOM ((__force fmode_t)0x1000) | ||
| 109 | |||
| 110 | /* File is huge (eg. /dev/kmem): treat loff_t as unsigned */ | ||
| 111 | #define FMODE_UNSIGNED_OFFSET ((__force fmode_t)0x2000) | ||
| 112 | |||
| 113 | /* File is opened with O_PATH; almost nothing can be done with it */ | ||
| 114 | #define FMODE_PATH ((__force fmode_t)0x4000) | ||
| 115 | |||
| 116 | /* File was opened by fanotify and shouldn't generate fanotify events */ | ||
| 117 | #define FMODE_NONOTIFY ((__force fmode_t)0x1000000) | ||
| 118 | |||
| 119 | /* | ||
| 120 | * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector | ||
| 121 | * that indicates that they should check the contents of the iovec are | ||
| 122 | * valid, but not check the memory that the iovec elements | ||
| 123 | * points too. | ||
| 124 | */ | ||
| 125 | #define CHECK_IOVEC_ONLY -1 | ||
| 126 | |||
| 127 | #define SEL_IN 1 | ||
| 128 | #define SEL_OUT 2 | ||
| 129 | #define SEL_EX 4 | ||
| 130 | |||
| 131 | /* public flags for file_system_type */ | ||
| 132 | #define FS_REQUIRES_DEV 1 | ||
| 133 | #define FS_BINARY_MOUNTDATA 2 | ||
| 134 | #define FS_HAS_SUBTYPE 4 | ||
| 135 | #define FS_REVAL_DOT 16384 /* Check the paths ".", ".." for staleness */ | ||
| 136 | #define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() | ||
| 137 | * during rename() internally. | ||
| 138 | */ | ||
| 139 | 60 | ||
| 140 | /* | 61 | /* |
| 141 | * These are the fs-independent mount-flags: up to 32 flags are supported | 62 | * These are the fs-independent mount-flags: up to 32 flags are supported |
| @@ -181,59 +102,6 @@ struct inodes_stat_t { | |||
| 181 | #define MS_MGC_VAL 0xC0ED0000 | 102 | #define MS_MGC_VAL 0xC0ED0000 |
| 182 | #define MS_MGC_MSK 0xffff0000 | 103 | #define MS_MGC_MSK 0xffff0000 |
| 183 | 104 | ||
| 184 | /* Inode flags - they have nothing to superblock flags now */ | ||
| 185 | |||
| 186 | #define S_SYNC 1 /* Writes are synced at once */ | ||
| 187 | #define S_NOATIME 2 /* Do not update access times */ | ||
| 188 | #define S_APPEND 4 /* Append-only file */ | ||
| 189 | #define S_IMMUTABLE 8 /* Immutable file */ | ||
| 190 | #define S_DEAD 16 /* removed, but still open directory */ | ||
| 191 | #define S_NOQUOTA 32 /* Inode is not counted to quota */ | ||
| 192 | #define S_DIRSYNC 64 /* Directory modifications are synchronous */ | ||
| 193 | #define S_NOCMTIME 128 /* Do not update file c/mtime */ | ||
| 194 | #define S_SWAPFILE 256 /* Do not truncate: swapon got its bmaps */ | ||
| 195 | #define S_PRIVATE 512 /* Inode is fs-internal */ | ||
| 196 | #define S_IMA 1024 /* Inode has an associated IMA struct */ | ||
| 197 | #define S_AUTOMOUNT 2048 /* Automount/referral quasi-directory */ | ||
| 198 | #define S_NOSEC 4096 /* no suid or xattr security attributes */ | ||
| 199 | |||
| 200 | /* | ||
| 201 | * Note that nosuid etc flags are inode-specific: setting some file-system | ||
| 202 | * flags just means all the inodes inherit those flags by default. It might be | ||
| 203 | * possible to override it selectively if you really wanted to with some | ||
| 204 | * ioctl() that is not currently implemented. | ||
| 205 | * | ||
| 206 | * Exception: MS_RDONLY is always applied to the entire file system. | ||
| 207 | * | ||
| 208 | * Unfortunately, it is possible to change a filesystems flags with it mounted | ||
| 209 | * with files in use. This means that all of the inodes will not have their | ||
| 210 | * i_flags updated. Hence, i_flags no longer inherit the superblock mount | ||
| 211 | * flags, so these have to be checked separately. -- rmk@arm.uk.linux.org | ||
| 212 | */ | ||
| 213 | #define __IS_FLG(inode,flg) ((inode)->i_sb->s_flags & (flg)) | ||
| 214 | |||
| 215 | #define IS_RDONLY(inode) ((inode)->i_sb->s_flags & MS_RDONLY) | ||
| 216 | #define IS_SYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS) || \ | ||
| 217 | ((inode)->i_flags & S_SYNC)) | ||
| 218 | #define IS_DIRSYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS|MS_DIRSYNC) || \ | ||
| 219 | ((inode)->i_flags & (S_SYNC|S_DIRSYNC))) | ||
| 220 | #define IS_MANDLOCK(inode) __IS_FLG(inode, MS_MANDLOCK) | ||
| 221 | #define IS_NOATIME(inode) __IS_FLG(inode, MS_RDONLY|MS_NOATIME) | ||
| 222 | #define IS_I_VERSION(inode) __IS_FLG(inode, MS_I_VERSION) | ||
| 223 | |||
| 224 | #define IS_NOQUOTA(inode) ((inode)->i_flags & S_NOQUOTA) | ||
| 225 | #define IS_APPEND(inode) ((inode)->i_flags & S_APPEND) | ||
| 226 | #define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE) | ||
| 227 | #define IS_POSIXACL(inode) __IS_FLG(inode, MS_POSIXACL) | ||
| 228 | |||
| 229 | #define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD) | ||
| 230 | #define IS_NOCMTIME(inode) ((inode)->i_flags & S_NOCMTIME) | ||
| 231 | #define IS_SWAPFILE(inode) ((inode)->i_flags & S_SWAPFILE) | ||
| 232 | #define IS_PRIVATE(inode) ((inode)->i_flags & S_PRIVATE) | ||
| 233 | #define IS_IMA(inode) ((inode)->i_flags & S_IMA) | ||
| 234 | #define IS_AUTOMOUNT(inode) ((inode)->i_flags & S_AUTOMOUNT) | ||
| 235 | #define IS_NOSEC(inode) ((inode)->i_flags & S_NOSEC) | ||
| 236 | |||
| 237 | /* the read-only stuff doesn't really belong here, but any other place is | 105 | /* the read-only stuff doesn't really belong here, but any other place is |
| 238 | probably as bad and I don't want to create yet another include file. */ | 106 | probably as bad and I don't want to create yet another include file. */ |
| 239 | 107 | ||
diff --git a/include/uapi/linux/hsi/Kbuild b/include/uapi/linux/hsi/Kbuild index aafaa5aa54d4..30ab3cd3b8a5 100644 --- a/include/uapi/linux/hsi/Kbuild +++ b/include/uapi/linux/hsi/Kbuild | |||
| @@ -1 +1,2 @@ | |||
| 1 | # UAPI Header export list | 1 | # UAPI Header export list |
| 2 | header-y += hsi_char.h | ||
diff --git a/include/linux/hsi/hsi_char.h b/include/uapi/linux/hsi/hsi_char.h index 76160b4f455d..76160b4f455d 100644 --- a/include/linux/hsi/hsi_char.h +++ b/include/uapi/linux/hsi/hsi_char.h | |||
diff --git a/include/uapi/linux/hw_breakpoint.h b/include/uapi/linux/hw_breakpoint.h new file mode 100644 index 000000000000..b04000a2296a --- /dev/null +++ b/include/uapi/linux/hw_breakpoint.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | #ifndef _UAPI_LINUX_HW_BREAKPOINT_H | ||
| 2 | #define _UAPI_LINUX_HW_BREAKPOINT_H | ||
| 3 | |||
| 4 | enum { | ||
| 5 | HW_BREAKPOINT_LEN_1 = 1, | ||
| 6 | HW_BREAKPOINT_LEN_2 = 2, | ||
| 7 | HW_BREAKPOINT_LEN_4 = 4, | ||
| 8 | HW_BREAKPOINT_LEN_8 = 8, | ||
| 9 | }; | ||
| 10 | |||
| 11 | enum { | ||
| 12 | HW_BREAKPOINT_EMPTY = 0, | ||
| 13 | HW_BREAKPOINT_R = 1, | ||
| 14 | HW_BREAKPOINT_W = 2, | ||
| 15 | HW_BREAKPOINT_RW = HW_BREAKPOINT_R | HW_BREAKPOINT_W, | ||
| 16 | HW_BREAKPOINT_X = 4, | ||
| 17 | HW_BREAKPOINT_INVALID = HW_BREAKPOINT_RW | HW_BREAKPOINT_X, | ||
| 18 | }; | ||
| 19 | |||
| 20 | enum bp_type_idx { | ||
| 21 | TYPE_INST = 0, | ||
| 22 | #ifdef CONFIG_HAVE_MIXED_BREAKPOINTS_REGS | ||
| 23 | TYPE_DATA = 0, | ||
| 24 | #else | ||
| 25 | TYPE_DATA = 1, | ||
| 26 | #endif | ||
| 27 | TYPE_MAX | ||
| 28 | }; | ||
| 29 | |||
| 30 | #endif /* _UAPI_LINUX_HW_BREAKPOINT_H */ | ||
diff --git a/include/uapi/linux/irqnr.h b/include/uapi/linux/irqnr.h index e69de29bb2d1..ae5704fa77ad 100644 --- a/include/uapi/linux/irqnr.h +++ b/include/uapi/linux/irqnr.h | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | /* | ||
| 2 | * There isn't anything here anymore, but the file must not be empty or patch | ||
| 3 | * will delete it. | ||
| 4 | */ | ||
diff --git a/include/uapi/linux/oom.h b/include/uapi/linux/oom.h index a49c4afc7060..b29272d621ce 100644 --- a/include/uapi/linux/oom.h +++ b/include/uapi/linux/oom.h | |||
| @@ -8,4 +8,13 @@ | |||
| 8 | #define OOM_SCORE_ADJ_MIN (-1000) | 8 | #define OOM_SCORE_ADJ_MIN (-1000) |
| 9 | #define OOM_SCORE_ADJ_MAX 1000 | 9 | #define OOM_SCORE_ADJ_MAX 1000 |
| 10 | 10 | ||
| 11 | /* | ||
| 12 | * /proc/<pid>/oom_adj set to -17 protects from the oom killer for legacy | ||
| 13 | * purposes. | ||
| 14 | */ | ||
| 15 | #define OOM_DISABLE (-17) | ||
| 16 | /* inclusive */ | ||
| 17 | #define OOM_ADJUST_MIN (-16) | ||
| 18 | #define OOM_ADJUST_MAX 15 | ||
| 19 | |||
| 11 | #endif /* _UAPI__INCLUDE_LINUX_OOM_H */ | 20 | #endif /* _UAPI__INCLUDE_LINUX_OOM_H */ |
diff --git a/include/uapi/linux/raid/Kbuild b/include/uapi/linux/raid/Kbuild index aafaa5aa54d4..e2c3d25405d7 100644 --- a/include/uapi/linux/raid/Kbuild +++ b/include/uapi/linux/raid/Kbuild | |||
| @@ -1 +1,3 @@ | |||
| 1 | # UAPI Header export list | 1 | # UAPI Header export list |
| 2 | header-y += md_p.h | ||
| 3 | header-y += md_u.h | ||
diff --git a/include/linux/raid/md_p.h b/include/uapi/linux/raid/md_p.h index ee753536ab70..ee753536ab70 100644 --- a/include/linux/raid/md_p.h +++ b/include/uapi/linux/raid/md_p.h | |||
diff --git a/include/uapi/linux/raid/md_u.h b/include/uapi/linux/raid/md_u.h new file mode 100644 index 000000000000..4133e744e4e6 --- /dev/null +++ b/include/uapi/linux/raid/md_u.h | |||
| @@ -0,0 +1,155 @@ | |||
| 1 | /* | ||
| 2 | md_u.h : user <=> kernel API between Linux raidtools and RAID drivers | ||
| 3 | Copyright (C) 1998 Ingo Molnar | ||
| 4 | |||
| 5 | This program is free software; you can redistribute it and/or modify | ||
| 6 | it under the terms of the GNU General Public License as published by | ||
| 7 | the Free Software Foundation; either version 2, or (at your option) | ||
| 8 | any later version. | ||
| 9 | |||
| 10 | You should have received a copy of the GNU General Public License | ||
| 11 | (for example /usr/src/linux/COPYING); if not, write to the Free | ||
| 12 | Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef _UAPI_MD_U_H | ||
| 16 | #define _UAPI_MD_U_H | ||
| 17 | |||
| 18 | /* | ||
| 19 | * Different major versions are not compatible. | ||
| 20 | * Different minor versions are only downward compatible. | ||
| 21 | * Different patchlevel versions are downward and upward compatible. | ||
| 22 | */ | ||
| 23 | #define MD_MAJOR_VERSION 0 | ||
| 24 | #define MD_MINOR_VERSION 90 | ||
| 25 | /* | ||
| 26 | * MD_PATCHLEVEL_VERSION indicates kernel functionality. | ||
| 27 | * >=1 means different superblock formats are selectable using SET_ARRAY_INFO | ||
| 28 | * and major_version/minor_version accordingly | ||
| 29 | * >=2 means that Internal bitmaps are supported by setting MD_SB_BITMAP_PRESENT | ||
| 30 | * in the super status byte | ||
| 31 | * >=3 means that bitmap superblock version 4 is supported, which uses | ||
| 32 | * little-ending representation rather than host-endian | ||
| 33 | */ | ||
| 34 | #define MD_PATCHLEVEL_VERSION 3 | ||
| 35 | |||
| 36 | /* ioctls */ | ||
| 37 | |||
| 38 | /* status */ | ||
| 39 | #define RAID_VERSION _IOR (MD_MAJOR, 0x10, mdu_version_t) | ||
| 40 | #define GET_ARRAY_INFO _IOR (MD_MAJOR, 0x11, mdu_array_info_t) | ||
| 41 | #define GET_DISK_INFO _IOR (MD_MAJOR, 0x12, mdu_disk_info_t) | ||
| 42 | #define PRINT_RAID_DEBUG _IO (MD_MAJOR, 0x13) | ||
| 43 | #define RAID_AUTORUN _IO (MD_MAJOR, 0x14) | ||
| 44 | #define GET_BITMAP_FILE _IOR (MD_MAJOR, 0x15, mdu_bitmap_file_t) | ||
| 45 | |||
| 46 | /* configuration */ | ||
| 47 | #define CLEAR_ARRAY _IO (MD_MAJOR, 0x20) | ||
| 48 | #define ADD_NEW_DISK _IOW (MD_MAJOR, 0x21, mdu_disk_info_t) | ||
| 49 | #define HOT_REMOVE_DISK _IO (MD_MAJOR, 0x22) | ||
| 50 | #define SET_ARRAY_INFO _IOW (MD_MAJOR, 0x23, mdu_array_info_t) | ||
| 51 | #define SET_DISK_INFO _IO (MD_MAJOR, 0x24) | ||
| 52 | #define WRITE_RAID_INFO _IO (MD_MAJOR, 0x25) | ||
| 53 | #define UNPROTECT_ARRAY _IO (MD_MAJOR, 0x26) | ||
| 54 | #define PROTECT_ARRAY _IO (MD_MAJOR, 0x27) | ||
| 55 | #define HOT_ADD_DISK _IO (MD_MAJOR, 0x28) | ||
| 56 | #define SET_DISK_FAULTY _IO (MD_MAJOR, 0x29) | ||
| 57 | #define HOT_GENERATE_ERROR _IO (MD_MAJOR, 0x2a) | ||
| 58 | #define SET_BITMAP_FILE _IOW (MD_MAJOR, 0x2b, int) | ||
| 59 | |||
| 60 | /* usage */ | ||
| 61 | #define RUN_ARRAY _IOW (MD_MAJOR, 0x30, mdu_param_t) | ||
| 62 | /* 0x31 was START_ARRAY */ | ||
| 63 | #define STOP_ARRAY _IO (MD_MAJOR, 0x32) | ||
| 64 | #define STOP_ARRAY_RO _IO (MD_MAJOR, 0x33) | ||
| 65 | #define RESTART_ARRAY_RW _IO (MD_MAJOR, 0x34) | ||
| 66 | |||
| 67 | /* 63 partitions with the alternate major number (mdp) */ | ||
| 68 | #define MdpMinorShift 6 | ||
| 69 | |||
| 70 | typedef struct mdu_version_s { | ||
| 71 | int major; | ||
| 72 | int minor; | ||
| 73 | int patchlevel; | ||
| 74 | } mdu_version_t; | ||
| 75 | |||
| 76 | typedef struct mdu_array_info_s { | ||
| 77 | /* | ||
| 78 | * Generic constant information | ||
| 79 | */ | ||
| 80 | int major_version; | ||
| 81 | int minor_version; | ||
| 82 | int patch_version; | ||
| 83 | int ctime; | ||
| 84 | int level; | ||
| 85 | int size; | ||
| 86 | int nr_disks; | ||
| 87 | int raid_disks; | ||
| 88 | int md_minor; | ||
| 89 | int not_persistent; | ||
| 90 | |||
| 91 | /* | ||
| 92 | * Generic state information | ||
| 93 | */ | ||
| 94 | int utime; /* 0 Superblock update time */ | ||
| 95 | int state; /* 1 State bits (clean, ...) */ | ||
| 96 | int active_disks; /* 2 Number of currently active disks */ | ||
| 97 | int working_disks; /* 3 Number of working disks */ | ||
| 98 | int failed_disks; /* 4 Number of failed disks */ | ||
| 99 | int spare_disks; /* 5 Number of spare disks */ | ||
| 100 | |||
| 101 | /* | ||
| 102 | * Personality information | ||
| 103 | */ | ||
| 104 | int layout; /* 0 the array's physical layout */ | ||
| 105 | int chunk_size; /* 1 chunk size in bytes */ | ||
| 106 | |||
| 107 | } mdu_array_info_t; | ||
| 108 | |||
| 109 | /* non-obvious values for 'level' */ | ||
| 110 | #define LEVEL_MULTIPATH (-4) | ||
| 111 | #define LEVEL_LINEAR (-1) | ||
| 112 | #define LEVEL_FAULTY (-5) | ||
| 113 | |||
| 114 | /* we need a value for 'no level specified' and 0 | ||
| 115 | * means 'raid0', so we need something else. This is | ||
| 116 | * for internal use only | ||
| 117 | */ | ||
| 118 | #define LEVEL_NONE (-1000000) | ||
| 119 | |||
| 120 | typedef struct mdu_disk_info_s { | ||
| 121 | /* | ||
| 122 | * configuration/status of one particular disk | ||
| 123 | */ | ||
| 124 | int number; | ||
| 125 | int major; | ||
| 126 | int minor; | ||
| 127 | int raid_disk; | ||
| 128 | int state; | ||
| 129 | |||
| 130 | } mdu_disk_info_t; | ||
| 131 | |||
| 132 | typedef struct mdu_start_info_s { | ||
| 133 | /* | ||
| 134 | * configuration/status of one particular disk | ||
| 135 | */ | ||
| 136 | int major; | ||
| 137 | int minor; | ||
| 138 | int raid_disk; | ||
| 139 | int state; | ||
| 140 | |||
| 141 | } mdu_start_info_t; | ||
| 142 | |||
| 143 | typedef struct mdu_bitmap_file_s | ||
| 144 | { | ||
| 145 | char pathname[4096]; | ||
| 146 | } mdu_bitmap_file_t; | ||
| 147 | |||
| 148 | typedef struct mdu_param_s | ||
| 149 | { | ||
| 150 | int personality; /* 1,2,3,4 */ | ||
| 151 | int chunk_size; /* in bytes */ | ||
| 152 | int max_fault; /* unused for now */ | ||
| 153 | } mdu_param_t; | ||
| 154 | |||
| 155 | #endif /* _UAPI_MD_U_H */ | ||
diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h index c4b89a5cb7df..e962faa5ab0d 100644 --- a/include/uapi/linux/tcp.h +++ b/include/uapi/linux/tcp.h | |||
| @@ -130,6 +130,7 @@ enum { | |||
| 130 | #define TCPI_OPT_WSCALE 4 | 130 | #define TCPI_OPT_WSCALE 4 |
| 131 | #define TCPI_OPT_ECN 8 /* ECN was negociated at TCP session init */ | 131 | #define TCPI_OPT_ECN 8 /* ECN was negociated at TCP session init */ |
| 132 | #define TCPI_OPT_ECN_SEEN 16 /* we received at least one packet with ECT */ | 132 | #define TCPI_OPT_ECN_SEEN 16 /* we received at least one packet with ECT */ |
| 133 | #define TCPI_OPT_SYN_DATA 32 /* SYN-ACK acked data in SYN sent or rcvd */ | ||
| 133 | 134 | ||
| 134 | enum tcp_ca_state { | 135 | enum tcp_ca_state { |
| 135 | TCP_CA_Open = 0, | 136 | TCP_CA_Open = 0, |
diff --git a/include/uapi/linux/usb/Kbuild b/include/uapi/linux/usb/Kbuild index aafaa5aa54d4..6cb4ea826834 100644 --- a/include/uapi/linux/usb/Kbuild +++ b/include/uapi/linux/usb/Kbuild | |||
| @@ -1 +1,11 @@ | |||
| 1 | # UAPI Header export list | 1 | # UAPI Header export list |
| 2 | header-y += audio.h | ||
| 3 | header-y += cdc.h | ||
| 4 | header-y += ch11.h | ||
| 5 | header-y += ch9.h | ||
| 6 | header-y += functionfs.h | ||
| 7 | header-y += g_printer.h | ||
| 8 | header-y += gadgetfs.h | ||
| 9 | header-y += midi.h | ||
| 10 | header-y += tmc.h | ||
| 11 | header-y += video.h | ||
diff --git a/include/uapi/linux/usb/audio.h b/include/uapi/linux/usb/audio.h new file mode 100644 index 000000000000..ac90037894d9 --- /dev/null +++ b/include/uapi/linux/usb/audio.h | |||
| @@ -0,0 +1,545 @@ | |||
| 1 | /* | ||
| 2 | * <linux/usb/audio.h> -- USB Audio definitions. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2006 Thumtronics Pty Ltd. | ||
| 5 | * Developed for Thumtronics by Grey Innovation | ||
| 6 | * Ben Williamson <ben.williamson@greyinnovation.com> | ||
| 7 | * | ||
| 8 | * This software is distributed under the terms of the GNU General Public | ||
| 9 | * License ("GPL") version 2, as published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This file holds USB constants and structures defined | ||
| 12 | * by the USB Device Class Definition for Audio Devices. | ||
| 13 | * Comments below reference relevant sections of that document: | ||
| 14 | * | ||
| 15 | * http://www.usb.org/developers/devclass_docs/audio10.pdf | ||
| 16 | * | ||
| 17 | * Types and defines in this file are either specific to version 1.0 of | ||
| 18 | * this standard or common for newer versions. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef _UAPI__LINUX_USB_AUDIO_H | ||
| 22 | #define _UAPI__LINUX_USB_AUDIO_H | ||
| 23 | |||
| 24 | #include <linux/types.h> | ||
| 25 | |||
| 26 | /* bInterfaceProtocol values to denote the version of the standard used */ | ||
| 27 | #define UAC_VERSION_1 0x00 | ||
| 28 | #define UAC_VERSION_2 0x20 | ||
| 29 | |||
| 30 | /* A.2 Audio Interface Subclass Codes */ | ||
| 31 | #define USB_SUBCLASS_AUDIOCONTROL 0x01 | ||
| 32 | #define USB_SUBCLASS_AUDIOSTREAMING 0x02 | ||
| 33 | #define USB_SUBCLASS_MIDISTREAMING 0x03 | ||
| 34 | |||
| 35 | /* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */ | ||
| 36 | #define UAC_HEADER 0x01 | ||
| 37 | #define UAC_INPUT_TERMINAL 0x02 | ||
| 38 | #define UAC_OUTPUT_TERMINAL 0x03 | ||
| 39 | #define UAC_MIXER_UNIT 0x04 | ||
| 40 | #define UAC_SELECTOR_UNIT 0x05 | ||
| 41 | #define UAC_FEATURE_UNIT 0x06 | ||
| 42 | #define UAC1_PROCESSING_UNIT 0x07 | ||
| 43 | #define UAC1_EXTENSION_UNIT 0x08 | ||
| 44 | |||
| 45 | /* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */ | ||
| 46 | #define UAC_AS_GENERAL 0x01 | ||
| 47 | #define UAC_FORMAT_TYPE 0x02 | ||
| 48 | #define UAC_FORMAT_SPECIFIC 0x03 | ||
| 49 | |||
| 50 | /* A.7 Processing Unit Process Types */ | ||
| 51 | #define UAC_PROCESS_UNDEFINED 0x00 | ||
| 52 | #define UAC_PROCESS_UP_DOWNMIX 0x01 | ||
| 53 | #define UAC_PROCESS_DOLBY_PROLOGIC 0x02 | ||
| 54 | #define UAC_PROCESS_STEREO_EXTENDER 0x03 | ||
| 55 | #define UAC_PROCESS_REVERB 0x04 | ||
| 56 | #define UAC_PROCESS_CHORUS 0x05 | ||
| 57 | #define UAC_PROCESS_DYN_RANGE_COMP 0x06 | ||
| 58 | |||
| 59 | /* A.8 Audio Class-Specific Endpoint Descriptor Subtypes */ | ||
| 60 | #define UAC_EP_GENERAL 0x01 | ||
| 61 | |||
| 62 | /* A.9 Audio Class-Specific Request Codes */ | ||
| 63 | #define UAC_SET_ 0x00 | ||
| 64 | #define UAC_GET_ 0x80 | ||
| 65 | |||
| 66 | #define UAC__CUR 0x1 | ||
| 67 | #define UAC__MIN 0x2 | ||
| 68 | #define UAC__MAX 0x3 | ||
| 69 | #define UAC__RES 0x4 | ||
| 70 | #define UAC__MEM 0x5 | ||
| 71 | |||
| 72 | #define UAC_SET_CUR (UAC_SET_ | UAC__CUR) | ||
| 73 | #define UAC_GET_CUR (UAC_GET_ | UAC__CUR) | ||
| 74 | #define UAC_SET_MIN (UAC_SET_ | UAC__MIN) | ||
| 75 | #define UAC_GET_MIN (UAC_GET_ | UAC__MIN) | ||
| 76 | #define UAC_SET_MAX (UAC_SET_ | UAC__MAX) | ||
| 77 | #define UAC_GET_MAX (UAC_GET_ | UAC__MAX) | ||
| 78 | #define UAC_SET_RES (UAC_SET_ | UAC__RES) | ||
| 79 | #define UAC_GET_RES (UAC_GET_ | UAC__RES) | ||
| 80 | #define UAC_SET_MEM (UAC_SET_ | UAC__MEM) | ||
| 81 | #define UAC_GET_MEM (UAC_GET_ | UAC__MEM) | ||
| 82 | |||
| 83 | #define UAC_GET_STAT 0xff | ||
| 84 | |||
| 85 | /* A.10 Control Selector Codes */ | ||
| 86 | |||
| 87 | /* A.10.1 Terminal Control Selectors */ | ||
| 88 | #define UAC_TERM_COPY_PROTECT 0x01 | ||
| 89 | |||
| 90 | /* A.10.2 Feature Unit Control Selectors */ | ||
| 91 | #define UAC_FU_MUTE 0x01 | ||
| 92 | #define UAC_FU_VOLUME 0x02 | ||
| 93 | #define UAC_FU_BASS 0x03 | ||
| 94 | #define UAC_FU_MID 0x04 | ||
| 95 | #define UAC_FU_TREBLE 0x05 | ||
| 96 | #define UAC_FU_GRAPHIC_EQUALIZER 0x06 | ||
| 97 | #define UAC_FU_AUTOMATIC_GAIN 0x07 | ||
| 98 | #define UAC_FU_DELAY 0x08 | ||
| 99 | #define UAC_FU_BASS_BOOST 0x09 | ||
| 100 | #define UAC_FU_LOUDNESS 0x0a | ||
| 101 | |||
| 102 | #define UAC_CONTROL_BIT(CS) (1 << ((CS) - 1)) | ||
| 103 | |||
| 104 | /* A.10.3.1 Up/Down-mix Processing Unit Controls Selectors */ | ||
| 105 | #define UAC_UD_ENABLE 0x01 | ||
| 106 | #define UAC_UD_MODE_SELECT 0x02 | ||
| 107 | |||
| 108 | /* A.10.3.2 Dolby Prologic (tm) Processing Unit Controls Selectors */ | ||
| 109 | #define UAC_DP_ENABLE 0x01 | ||
| 110 | #define UAC_DP_MODE_SELECT 0x02 | ||
| 111 | |||
| 112 | /* A.10.3.3 3D Stereo Extender Processing Unit Control Selectors */ | ||
| 113 | #define UAC_3D_ENABLE 0x01 | ||
| 114 | #define UAC_3D_SPACE 0x02 | ||
| 115 | |||
| 116 | /* A.10.3.4 Reverberation Processing Unit Control Selectors */ | ||
| 117 | #define UAC_REVERB_ENABLE 0x01 | ||
| 118 | #define UAC_REVERB_LEVEL 0x02 | ||
| 119 | #define UAC_REVERB_TIME 0x03 | ||
| 120 | #define UAC_REVERB_FEEDBACK 0x04 | ||
| 121 | |||
| 122 | /* A.10.3.5 Chorus Processing Unit Control Selectors */ | ||
| 123 | #define UAC_CHORUS_ENABLE 0x01 | ||
| 124 | #define UAC_CHORUS_LEVEL 0x02 | ||
| 125 | #define UAC_CHORUS_RATE 0x03 | ||
| 126 | #define UAC_CHORUS_DEPTH 0x04 | ||
| 127 | |||
| 128 | /* A.10.3.6 Dynamic Range Compressor Unit Control Selectors */ | ||
| 129 | #define UAC_DCR_ENABLE 0x01 | ||
| 130 | #define UAC_DCR_RATE 0x02 | ||
| 131 | #define UAC_DCR_MAXAMPL 0x03 | ||
| 132 | #define UAC_DCR_THRESHOLD 0x04 | ||
| 133 | #define UAC_DCR_ATTACK_TIME 0x05 | ||
| 134 | #define UAC_DCR_RELEASE_TIME 0x06 | ||
| 135 | |||
| 136 | /* A.10.4 Extension Unit Control Selectors */ | ||
| 137 | #define UAC_XU_ENABLE 0x01 | ||
| 138 | |||
| 139 | /* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */ | ||
| 140 | #define UAC_MS_HEADER 0x01 | ||
| 141 | #define UAC_MIDI_IN_JACK 0x02 | ||
| 142 | #define UAC_MIDI_OUT_JACK 0x03 | ||
| 143 | |||
| 144 | /* MIDI - A.1 MS Class-Specific Endpoint Descriptor Subtypes */ | ||
| 145 | #define UAC_MS_GENERAL 0x01 | ||
| 146 | |||
| 147 | /* Terminals - 2.1 USB Terminal Types */ | ||
| 148 | #define UAC_TERMINAL_UNDEFINED 0x100 | ||
| 149 | #define UAC_TERMINAL_STREAMING 0x101 | ||
| 150 | #define UAC_TERMINAL_VENDOR_SPEC 0x1FF | ||
| 151 | |||
| 152 | /* Terminal Control Selectors */ | ||
| 153 | /* 4.3.2 Class-Specific AC Interface Descriptor */ | ||
| 154 | struct uac1_ac_header_descriptor { | ||
| 155 | __u8 bLength; /* 8 + n */ | ||
| 156 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | ||
| 157 | __u8 bDescriptorSubtype; /* UAC_MS_HEADER */ | ||
| 158 | __le16 bcdADC; /* 0x0100 */ | ||
| 159 | __le16 wTotalLength; /* includes Unit and Terminal desc. */ | ||
| 160 | __u8 bInCollection; /* n */ | ||
| 161 | __u8 baInterfaceNr[]; /* [n] */ | ||
| 162 | } __attribute__ ((packed)); | ||
| 163 | |||
| 164 | #define UAC_DT_AC_HEADER_SIZE(n) (8 + (n)) | ||
| 165 | |||
| 166 | /* As above, but more useful for defining your own descriptors: */ | ||
| 167 | #define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n) \ | ||
| 168 | struct uac1_ac_header_descriptor_##n { \ | ||
| 169 | __u8 bLength; \ | ||
| 170 | __u8 bDescriptorType; \ | ||
| 171 | __u8 bDescriptorSubtype; \ | ||
| 172 | __le16 bcdADC; \ | ||
| 173 | __le16 wTotalLength; \ | ||
| 174 | __u8 bInCollection; \ | ||
| 175 | __u8 baInterfaceNr[n]; \ | ||
| 176 | } __attribute__ ((packed)) | ||
| 177 | |||
| 178 | /* 4.3.2.1 Input Terminal Descriptor */ | ||
| 179 | struct uac_input_terminal_descriptor { | ||
| 180 | __u8 bLength; /* in bytes: 12 */ | ||
| 181 | __u8 bDescriptorType; /* CS_INTERFACE descriptor type */ | ||
| 182 | __u8 bDescriptorSubtype; /* INPUT_TERMINAL descriptor subtype */ | ||
| 183 | __u8 bTerminalID; /* Constant uniquely terminal ID */ | ||
| 184 | __le16 wTerminalType; /* USB Audio Terminal Types */ | ||
| 185 | __u8 bAssocTerminal; /* ID of the Output Terminal associated */ | ||
| 186 | __u8 bNrChannels; /* Number of logical output channels */ | ||
| 187 | __le16 wChannelConfig; | ||
| 188 | __u8 iChannelNames; | ||
| 189 | __u8 iTerminal; | ||
| 190 | } __attribute__ ((packed)); | ||
| 191 | |||
| 192 | #define UAC_DT_INPUT_TERMINAL_SIZE 12 | ||
| 193 | |||
| 194 | /* Terminals - 2.2 Input Terminal Types */ | ||
| 195 | #define UAC_INPUT_TERMINAL_UNDEFINED 0x200 | ||
| 196 | #define UAC_INPUT_TERMINAL_MICROPHONE 0x201 | ||
| 197 | #define UAC_INPUT_TERMINAL_DESKTOP_MICROPHONE 0x202 | ||
| 198 | #define UAC_INPUT_TERMINAL_PERSONAL_MICROPHONE 0x203 | ||
| 199 | #define UAC_INPUT_TERMINAL_OMNI_DIR_MICROPHONE 0x204 | ||
| 200 | #define UAC_INPUT_TERMINAL_MICROPHONE_ARRAY 0x205 | ||
| 201 | #define UAC_INPUT_TERMINAL_PROC_MICROPHONE_ARRAY 0x206 | ||
| 202 | |||
| 203 | /* Terminals - control selectors */ | ||
| 204 | |||
| 205 | #define UAC_TERMINAL_CS_COPY_PROTECT_CONTROL 0x01 | ||
| 206 | |||
| 207 | /* 4.3.2.2 Output Terminal Descriptor */ | ||
| 208 | struct uac1_output_terminal_descriptor { | ||
| 209 | __u8 bLength; /* in bytes: 9 */ | ||
| 210 | __u8 bDescriptorType; /* CS_INTERFACE descriptor type */ | ||
| 211 | __u8 bDescriptorSubtype; /* OUTPUT_TERMINAL descriptor subtype */ | ||
| 212 | __u8 bTerminalID; /* Constant uniquely terminal ID */ | ||
| 213 | __le16 wTerminalType; /* USB Audio Terminal Types */ | ||
| 214 | __u8 bAssocTerminal; /* ID of the Input Terminal associated */ | ||
| 215 | __u8 bSourceID; /* ID of the connected Unit or Terminal*/ | ||
| 216 | __u8 iTerminal; | ||
| 217 | } __attribute__ ((packed)); | ||
| 218 | |||
| 219 | #define UAC_DT_OUTPUT_TERMINAL_SIZE 9 | ||
| 220 | |||
| 221 | /* Terminals - 2.3 Output Terminal Types */ | ||
| 222 | #define UAC_OUTPUT_TERMINAL_UNDEFINED 0x300 | ||
| 223 | #define UAC_OUTPUT_TERMINAL_SPEAKER 0x301 | ||
| 224 | #define UAC_OUTPUT_TERMINAL_HEADPHONES 0x302 | ||
| 225 | #define UAC_OUTPUT_TERMINAL_HEAD_MOUNTED_DISPLAY_AUDIO 0x303 | ||
| 226 | #define UAC_OUTPUT_TERMINAL_DESKTOP_SPEAKER 0x304 | ||
| 227 | #define UAC_OUTPUT_TERMINAL_ROOM_SPEAKER 0x305 | ||
| 228 | #define UAC_OUTPUT_TERMINAL_COMMUNICATION_SPEAKER 0x306 | ||
| 229 | #define UAC_OUTPUT_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER 0x307 | ||
| 230 | |||
| 231 | /* Set bControlSize = 2 as default setting */ | ||
| 232 | #define UAC_DT_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 2) | ||
| 233 | |||
| 234 | /* As above, but more useful for defining your own descriptors: */ | ||
| 235 | #define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch) \ | ||
| 236 | struct uac_feature_unit_descriptor_##ch { \ | ||
| 237 | __u8 bLength; \ | ||
| 238 | __u8 bDescriptorType; \ | ||
| 239 | __u8 bDescriptorSubtype; \ | ||
| 240 | __u8 bUnitID; \ | ||
| 241 | __u8 bSourceID; \ | ||
| 242 | __u8 bControlSize; \ | ||
| 243 | __le16 bmaControls[ch + 1]; \ | ||
| 244 | __u8 iFeature; \ | ||
| 245 | } __attribute__ ((packed)) | ||
| 246 | |||
| 247 | /* 4.3.2.3 Mixer Unit Descriptor */ | ||
| 248 | struct uac_mixer_unit_descriptor { | ||
| 249 | __u8 bLength; | ||
| 250 | __u8 bDescriptorType; | ||
| 251 | __u8 bDescriptorSubtype; | ||
| 252 | __u8 bUnitID; | ||
| 253 | __u8 bNrInPins; | ||
| 254 | __u8 baSourceID[]; | ||
| 255 | } __attribute__ ((packed)); | ||
| 256 | |||
| 257 | static inline __u8 uac_mixer_unit_bNrChannels(struct uac_mixer_unit_descriptor *desc) | ||
| 258 | { | ||
| 259 | return desc->baSourceID[desc->bNrInPins]; | ||
| 260 | } | ||
| 261 | |||
| 262 | static inline __u32 uac_mixer_unit_wChannelConfig(struct uac_mixer_unit_descriptor *desc, | ||
| 263 | int protocol) | ||
| 264 | { | ||
| 265 | if (protocol == UAC_VERSION_1) | ||
| 266 | return (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
| 267 | desc->baSourceID[desc->bNrInPins + 1]; | ||
| 268 | else | ||
| 269 | return (desc->baSourceID[desc->bNrInPins + 4] << 24) | | ||
| 270 | (desc->baSourceID[desc->bNrInPins + 3] << 16) | | ||
| 271 | (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
| 272 | (desc->baSourceID[desc->bNrInPins + 1]); | ||
| 273 | } | ||
| 274 | |||
| 275 | static inline __u8 uac_mixer_unit_iChannelNames(struct uac_mixer_unit_descriptor *desc, | ||
| 276 | int protocol) | ||
| 277 | { | ||
| 278 | return (protocol == UAC_VERSION_1) ? | ||
| 279 | desc->baSourceID[desc->bNrInPins + 3] : | ||
| 280 | desc->baSourceID[desc->bNrInPins + 5]; | ||
| 281 | } | ||
| 282 | |||
| 283 | static inline __u8 *uac_mixer_unit_bmControls(struct uac_mixer_unit_descriptor *desc, | ||
| 284 | int protocol) | ||
| 285 | { | ||
| 286 | return (protocol == UAC_VERSION_1) ? | ||
| 287 | &desc->baSourceID[desc->bNrInPins + 4] : | ||
| 288 | &desc->baSourceID[desc->bNrInPins + 6]; | ||
| 289 | } | ||
| 290 | |||
| 291 | static inline __u8 uac_mixer_unit_iMixer(struct uac_mixer_unit_descriptor *desc) | ||
| 292 | { | ||
| 293 | __u8 *raw = (__u8 *) desc; | ||
| 294 | return raw[desc->bLength - 1]; | ||
| 295 | } | ||
| 296 | |||
| 297 | /* 4.3.2.4 Selector Unit Descriptor */ | ||
| 298 | struct uac_selector_unit_descriptor { | ||
| 299 | __u8 bLength; | ||
| 300 | __u8 bDescriptorType; | ||
| 301 | __u8 bDescriptorSubtype; | ||
| 302 | __u8 bUintID; | ||
| 303 | __u8 bNrInPins; | ||
| 304 | __u8 baSourceID[]; | ||
| 305 | } __attribute__ ((packed)); | ||
| 306 | |||
| 307 | static inline __u8 uac_selector_unit_iSelector(struct uac_selector_unit_descriptor *desc) | ||
| 308 | { | ||
| 309 | __u8 *raw = (__u8 *) desc; | ||
| 310 | return raw[desc->bLength - 1]; | ||
| 311 | } | ||
| 312 | |||
| 313 | /* 4.3.2.5 Feature Unit Descriptor */ | ||
| 314 | struct uac_feature_unit_descriptor { | ||
| 315 | __u8 bLength; | ||
| 316 | __u8 bDescriptorType; | ||
| 317 | __u8 bDescriptorSubtype; | ||
| 318 | __u8 bUnitID; | ||
| 319 | __u8 bSourceID; | ||
| 320 | __u8 bControlSize; | ||
| 321 | __u8 bmaControls[0]; /* variable length */ | ||
| 322 | } __attribute__((packed)); | ||
| 323 | |||
| 324 | static inline __u8 uac_feature_unit_iFeature(struct uac_feature_unit_descriptor *desc) | ||
| 325 | { | ||
| 326 | __u8 *raw = (__u8 *) desc; | ||
| 327 | return raw[desc->bLength - 1]; | ||
| 328 | } | ||
| 329 | |||
| 330 | /* 4.3.2.6 Processing Unit Descriptors */ | ||
| 331 | struct uac_processing_unit_descriptor { | ||
| 332 | __u8 bLength; | ||
| 333 | __u8 bDescriptorType; | ||
| 334 | __u8 bDescriptorSubtype; | ||
| 335 | __u8 bUnitID; | ||
| 336 | __u16 wProcessType; | ||
| 337 | __u8 bNrInPins; | ||
| 338 | __u8 baSourceID[]; | ||
| 339 | } __attribute__ ((packed)); | ||
| 340 | |||
| 341 | static inline __u8 uac_processing_unit_bNrChannels(struct uac_processing_unit_descriptor *desc) | ||
| 342 | { | ||
| 343 | return desc->baSourceID[desc->bNrInPins]; | ||
| 344 | } | ||
| 345 | |||
| 346 | static inline __u32 uac_processing_unit_wChannelConfig(struct uac_processing_unit_descriptor *desc, | ||
| 347 | int protocol) | ||
| 348 | { | ||
| 349 | if (protocol == UAC_VERSION_1) | ||
| 350 | return (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
| 351 | desc->baSourceID[desc->bNrInPins + 1]; | ||
| 352 | else | ||
| 353 | return (desc->baSourceID[desc->bNrInPins + 4] << 24) | | ||
| 354 | (desc->baSourceID[desc->bNrInPins + 3] << 16) | | ||
| 355 | (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
| 356 | (desc->baSourceID[desc->bNrInPins + 1]); | ||
| 357 | } | ||
| 358 | |||
| 359 | static inline __u8 uac_processing_unit_iChannelNames(struct uac_processing_unit_descriptor *desc, | ||
| 360 | int protocol) | ||
| 361 | { | ||
| 362 | return (protocol == UAC_VERSION_1) ? | ||
| 363 | desc->baSourceID[desc->bNrInPins + 3] : | ||
| 364 | desc->baSourceID[desc->bNrInPins + 5]; | ||
| 365 | } | ||
| 366 | |||
| 367 | static inline __u8 uac_processing_unit_bControlSize(struct uac_processing_unit_descriptor *desc, | ||
| 368 | int protocol) | ||
| 369 | { | ||
| 370 | return (protocol == UAC_VERSION_1) ? | ||
| 371 | desc->baSourceID[desc->bNrInPins + 4] : | ||
| 372 | desc->baSourceID[desc->bNrInPins + 6]; | ||
| 373 | } | ||
| 374 | |||
| 375 | static inline __u8 *uac_processing_unit_bmControls(struct uac_processing_unit_descriptor *desc, | ||
| 376 | int protocol) | ||
| 377 | { | ||
| 378 | return (protocol == UAC_VERSION_1) ? | ||
| 379 | &desc->baSourceID[desc->bNrInPins + 5] : | ||
| 380 | &desc->baSourceID[desc->bNrInPins + 7]; | ||
| 381 | } | ||
| 382 | |||
| 383 | static inline __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_descriptor *desc, | ||
| 384 | int protocol) | ||
| 385 | { | ||
| 386 | __u8 control_size = uac_processing_unit_bControlSize(desc, protocol); | ||
| 387 | return desc->baSourceID[desc->bNrInPins + control_size]; | ||
| 388 | } | ||
| 389 | |||
| 390 | static inline __u8 *uac_processing_unit_specific(struct uac_processing_unit_descriptor *desc, | ||
| 391 | int protocol) | ||
| 392 | { | ||
| 393 | __u8 control_size = uac_processing_unit_bControlSize(desc, protocol); | ||
| 394 | return &desc->baSourceID[desc->bNrInPins + control_size + 1]; | ||
| 395 | } | ||
| 396 | |||
| 397 | /* 4.5.2 Class-Specific AS Interface Descriptor */ | ||
| 398 | struct uac1_as_header_descriptor { | ||
| 399 | __u8 bLength; /* in bytes: 7 */ | ||
| 400 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | ||
| 401 | __u8 bDescriptorSubtype; /* AS_GENERAL */ | ||
| 402 | __u8 bTerminalLink; /* Terminal ID of connected Terminal */ | ||
| 403 | __u8 bDelay; /* Delay introduced by the data path */ | ||
| 404 | __le16 wFormatTag; /* The Audio Data Format */ | ||
| 405 | } __attribute__ ((packed)); | ||
| 406 | |||
| 407 | #define UAC_DT_AS_HEADER_SIZE 7 | ||
| 408 | |||
| 409 | /* Formats - A.1.1 Audio Data Format Type I Codes */ | ||
| 410 | #define UAC_FORMAT_TYPE_I_UNDEFINED 0x0 | ||
| 411 | #define UAC_FORMAT_TYPE_I_PCM 0x1 | ||
| 412 | #define UAC_FORMAT_TYPE_I_PCM8 0x2 | ||
| 413 | #define UAC_FORMAT_TYPE_I_IEEE_FLOAT 0x3 | ||
| 414 | #define UAC_FORMAT_TYPE_I_ALAW 0x4 | ||
| 415 | #define UAC_FORMAT_TYPE_I_MULAW 0x5 | ||
| 416 | |||
| 417 | struct uac_format_type_i_continuous_descriptor { | ||
| 418 | __u8 bLength; /* in bytes: 8 + (ns * 3) */ | ||
| 419 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | ||
| 420 | __u8 bDescriptorSubtype; /* FORMAT_TYPE */ | ||
| 421 | __u8 bFormatType; /* FORMAT_TYPE_1 */ | ||
| 422 | __u8 bNrChannels; /* physical channels in the stream */ | ||
| 423 | __u8 bSubframeSize; /* */ | ||
| 424 | __u8 bBitResolution; | ||
| 425 | __u8 bSamFreqType; | ||
| 426 | __u8 tLowerSamFreq[3]; | ||
| 427 | __u8 tUpperSamFreq[3]; | ||
| 428 | } __attribute__ ((packed)); | ||
| 429 | |||
| 430 | #define UAC_FORMAT_TYPE_I_CONTINUOUS_DESC_SIZE 14 | ||
| 431 | |||
| 432 | struct uac_format_type_i_discrete_descriptor { | ||
| 433 | __u8 bLength; /* in bytes: 8 + (ns * 3) */ | ||
| 434 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | ||
| 435 | __u8 bDescriptorSubtype; /* FORMAT_TYPE */ | ||
| 436 | __u8 bFormatType; /* FORMAT_TYPE_1 */ | ||
| 437 | __u8 bNrChannels; /* physical channels in the stream */ | ||
| 438 | __u8 bSubframeSize; /* */ | ||
| 439 | __u8 bBitResolution; | ||
| 440 | __u8 bSamFreqType; | ||
| 441 | __u8 tSamFreq[][3]; | ||
| 442 | } __attribute__ ((packed)); | ||
| 443 | |||
| 444 | #define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n) \ | ||
| 445 | struct uac_format_type_i_discrete_descriptor_##n { \ | ||
| 446 | __u8 bLength; \ | ||
| 447 | __u8 bDescriptorType; \ | ||
| 448 | __u8 bDescriptorSubtype; \ | ||
| 449 | __u8 bFormatType; \ | ||
| 450 | __u8 bNrChannels; \ | ||
| 451 | __u8 bSubframeSize; \ | ||
| 452 | __u8 bBitResolution; \ | ||
| 453 | __u8 bSamFreqType; \ | ||
| 454 | __u8 tSamFreq[n][3]; \ | ||
| 455 | } __attribute__ ((packed)) | ||
| 456 | |||
| 457 | #define UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(n) (8 + (n * 3)) | ||
| 458 | |||
| 459 | struct uac_format_type_i_ext_descriptor { | ||
| 460 | __u8 bLength; | ||
| 461 | __u8 bDescriptorType; | ||
| 462 | __u8 bDescriptorSubtype; | ||
| 463 | __u8 bFormatType; | ||
| 464 | __u8 bSubslotSize; | ||
| 465 | __u8 bBitResolution; | ||
| 466 | __u8 bHeaderLength; | ||
| 467 | __u8 bControlSize; | ||
| 468 | __u8 bSideBandProtocol; | ||
| 469 | } __attribute__((packed)); | ||
| 470 | |||
| 471 | /* Formats - Audio Data Format Type I Codes */ | ||
| 472 | |||
| 473 | #define UAC_FORMAT_TYPE_II_MPEG 0x1001 | ||
| 474 | #define UAC_FORMAT_TYPE_II_AC3 0x1002 | ||
| 475 | |||
| 476 | struct uac_format_type_ii_discrete_descriptor { | ||
| 477 | __u8 bLength; | ||
| 478 | __u8 bDescriptorType; | ||
| 479 | __u8 bDescriptorSubtype; | ||
| 480 | __u8 bFormatType; | ||
| 481 | __le16 wMaxBitRate; | ||
| 482 | __le16 wSamplesPerFrame; | ||
| 483 | __u8 bSamFreqType; | ||
| 484 | __u8 tSamFreq[][3]; | ||
| 485 | } __attribute__((packed)); | ||
| 486 | |||
| 487 | struct uac_format_type_ii_ext_descriptor { | ||
| 488 | __u8 bLength; | ||
| 489 | __u8 bDescriptorType; | ||
| 490 | __u8 bDescriptorSubtype; | ||
| 491 | __u8 bFormatType; | ||
| 492 | __u16 wMaxBitRate; | ||
| 493 | __u16 wSamplesPerFrame; | ||
| 494 | __u8 bHeaderLength; | ||
| 495 | __u8 bSideBandProtocol; | ||
| 496 | } __attribute__((packed)); | ||
| 497 | |||
| 498 | /* type III */ | ||
| 499 | #define UAC_FORMAT_TYPE_III_IEC1937_AC3 0x2001 | ||
| 500 | #define UAC_FORMAT_TYPE_III_IEC1937_MPEG1_LAYER1 0x2002 | ||
| 501 | #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_NOEXT 0x2003 | ||
| 502 | #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_EXT 0x2004 | ||
| 503 | #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER1_LS 0x2005 | ||
| 504 | #define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER23_LS 0x2006 | ||
| 505 | |||
| 506 | /* Formats - A.2 Format Type Codes */ | ||
| 507 | #define UAC_FORMAT_TYPE_UNDEFINED 0x0 | ||
| 508 | #define UAC_FORMAT_TYPE_I 0x1 | ||
| 509 | #define UAC_FORMAT_TYPE_II 0x2 | ||
| 510 | #define UAC_FORMAT_TYPE_III 0x3 | ||
| 511 | #define UAC_EXT_FORMAT_TYPE_I 0x81 | ||
| 512 | #define UAC_EXT_FORMAT_TYPE_II 0x82 | ||
| 513 | #define UAC_EXT_FORMAT_TYPE_III 0x83 | ||
| 514 | |||
| 515 | struct uac_iso_endpoint_descriptor { | ||
| 516 | __u8 bLength; /* in bytes: 7 */ | ||
| 517 | __u8 bDescriptorType; /* USB_DT_CS_ENDPOINT */ | ||
| 518 | __u8 bDescriptorSubtype; /* EP_GENERAL */ | ||
| 519 | __u8 bmAttributes; | ||
| 520 | __u8 bLockDelayUnits; | ||
| 521 | __le16 wLockDelay; | ||
| 522 | } __attribute__((packed)); | ||
| 523 | #define UAC_ISO_ENDPOINT_DESC_SIZE 7 | ||
| 524 | |||
| 525 | #define UAC_EP_CS_ATTR_SAMPLE_RATE 0x01 | ||
| 526 | #define UAC_EP_CS_ATTR_PITCH_CONTROL 0x02 | ||
| 527 | #define UAC_EP_CS_ATTR_FILL_MAX 0x80 | ||
| 528 | |||
| 529 | /* status word format (3.7.1.1) */ | ||
| 530 | |||
| 531 | #define UAC1_STATUS_TYPE_ORIG_MASK 0x0f | ||
| 532 | #define UAC1_STATUS_TYPE_ORIG_AUDIO_CONTROL_IF 0x0 | ||
| 533 | #define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_IF 0x1 | ||
| 534 | #define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_EP 0x2 | ||
| 535 | |||
| 536 | #define UAC1_STATUS_TYPE_IRQ_PENDING (1 << 7) | ||
| 537 | #define UAC1_STATUS_TYPE_MEM_CHANGED (1 << 6) | ||
| 538 | |||
| 539 | struct uac1_status_word { | ||
| 540 | __u8 bStatusType; | ||
| 541 | __u8 bOriginator; | ||
| 542 | } __attribute__((packed)); | ||
| 543 | |||
| 544 | |||
| 545 | #endif /* _UAPI__LINUX_USB_AUDIO_H */ | ||
diff --git a/include/linux/usb/cdc.h b/include/uapi/linux/usb/cdc.h index 81a927930bfd..81a927930bfd 100644 --- a/include/linux/usb/cdc.h +++ b/include/uapi/linux/usb/cdc.h | |||
diff --git a/include/linux/usb/ch11.h b/include/uapi/linux/usb/ch11.h index 7692dc69ccf7..7692dc69ccf7 100644 --- a/include/linux/usb/ch11.h +++ b/include/uapi/linux/usb/ch11.h | |||
diff --git a/include/uapi/linux/usb/ch9.h b/include/uapi/linux/usb/ch9.h new file mode 100644 index 000000000000..50598472dc41 --- /dev/null +++ b/include/uapi/linux/usb/ch9.h | |||
| @@ -0,0 +1,993 @@ | |||
| 1 | /* | ||
| 2 | * This file holds USB constants and structures that are needed for | ||
| 3 | * USB device APIs. These are used by the USB device model, which is | ||
| 4 | * defined in chapter 9 of the USB 2.0 specification and in the | ||
| 5 | * Wireless USB 1.0 (spread around). Linux has several APIs in C that | ||
| 6 | * need these: | ||
| 7 | * | ||
| 8 | * - the master/host side Linux-USB kernel driver API; | ||
| 9 | * - the "usbfs" user space API; and | ||
| 10 | * - the Linux "gadget" slave/device/peripheral side driver API. | ||
| 11 | * | ||
| 12 | * USB 2.0 adds an additional "On The Go" (OTG) mode, which lets systems | ||
| 13 | * act either as a USB master/host or as a USB slave/device. That means | ||
| 14 | * the master and slave side APIs benefit from working well together. | ||
| 15 | * | ||
| 16 | * There's also "Wireless USB", using low power short range radios for | ||
| 17 | * peripheral interconnection but otherwise building on the USB framework. | ||
| 18 | * | ||
| 19 | * Note all descriptors are declared '__attribute__((packed))' so that: | ||
| 20 | * | ||
| 21 | * [a] they never get padded, either internally (USB spec writers | ||
| 22 | * probably handled that) or externally; | ||
| 23 | * | ||
| 24 | * [b] so that accessing bigger-than-a-bytes fields will never | ||
| 25 | * generate bus errors on any platform, even when the location of | ||
| 26 | * its descriptor inside a bundle isn't "naturally aligned", and | ||
| 27 | * | ||
| 28 | * [c] for consistency, removing all doubt even when it appears to | ||
| 29 | * someone that the two other points are non-issues for that | ||
| 30 | * particular descriptor type. | ||
| 31 | */ | ||
| 32 | |||
| 33 | #ifndef _UAPI__LINUX_USB_CH9_H | ||
| 34 | #define _UAPI__LINUX_USB_CH9_H | ||
| 35 | |||
| 36 | #include <linux/types.h> /* __u8 etc */ | ||
| 37 | #include <asm/byteorder.h> /* le16_to_cpu */ | ||
| 38 | |||
| 39 | /*-------------------------------------------------------------------------*/ | ||
| 40 | |||
| 41 | /* CONTROL REQUEST SUPPORT */ | ||
| 42 | |||
| 43 | /* | ||
| 44 | * USB directions | ||
| 45 | * | ||
| 46 | * This bit flag is used in endpoint descriptors' bEndpointAddress field. | ||
| 47 | * It's also one of three fields in control requests bRequestType. | ||
| 48 | */ | ||
| 49 | #define USB_DIR_OUT 0 /* to device */ | ||
| 50 | #define USB_DIR_IN 0x80 /* to host */ | ||
| 51 | |||
| 52 | /* | ||
| 53 | * USB types, the second of three bRequestType fields | ||
| 54 | */ | ||
| 55 | #define USB_TYPE_MASK (0x03 << 5) | ||
| 56 | #define USB_TYPE_STANDARD (0x00 << 5) | ||
| 57 | #define USB_TYPE_CLASS (0x01 << 5) | ||
| 58 | #define USB_TYPE_VENDOR (0x02 << 5) | ||
| 59 | #define USB_TYPE_RESERVED (0x03 << 5) | ||
| 60 | |||
| 61 | /* | ||
| 62 | * USB recipients, the third of three bRequestType fields | ||
| 63 | */ | ||
| 64 | #define USB_RECIP_MASK 0x1f | ||
| 65 | #define USB_RECIP_DEVICE 0x00 | ||
| 66 | #define USB_RECIP_INTERFACE 0x01 | ||
| 67 | #define USB_RECIP_ENDPOINT 0x02 | ||
| 68 | #define USB_RECIP_OTHER 0x03 | ||
| 69 | /* From Wireless USB 1.0 */ | ||
| 70 | #define USB_RECIP_PORT 0x04 | ||
| 71 | #define USB_RECIP_RPIPE 0x05 | ||
| 72 | |||
| 73 | /* | ||
| 74 | * Standard requests, for the bRequest field of a SETUP packet. | ||
| 75 | * | ||
| 76 | * These are qualified by the bRequestType field, so that for example | ||
| 77 | * TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved | ||
| 78 | * by a GET_STATUS request. | ||
| 79 | */ | ||
| 80 | #define USB_REQ_GET_STATUS 0x00 | ||
| 81 | #define USB_REQ_CLEAR_FEATURE 0x01 | ||
| 82 | #define USB_REQ_SET_FEATURE 0x03 | ||
| 83 | #define USB_REQ_SET_ADDRESS 0x05 | ||
| 84 | #define USB_REQ_GET_DESCRIPTOR 0x06 | ||
| 85 | #define USB_REQ_SET_DESCRIPTOR 0x07 | ||
| 86 | #define USB_REQ_GET_CONFIGURATION 0x08 | ||
| 87 | #define USB_REQ_SET_CONFIGURATION 0x09 | ||
| 88 | #define USB_REQ_GET_INTERFACE 0x0A | ||
| 89 | #define USB_REQ_SET_INTERFACE 0x0B | ||
| 90 | #define USB_REQ_SYNCH_FRAME 0x0C | ||
| 91 | #define USB_REQ_SET_SEL 0x30 | ||
| 92 | #define USB_REQ_SET_ISOCH_DELAY 0x31 | ||
| 93 | |||
| 94 | #define USB_REQ_SET_ENCRYPTION 0x0D /* Wireless USB */ | ||
| 95 | #define USB_REQ_GET_ENCRYPTION 0x0E | ||
| 96 | #define USB_REQ_RPIPE_ABORT 0x0E | ||
| 97 | #define USB_REQ_SET_HANDSHAKE 0x0F | ||
| 98 | #define USB_REQ_RPIPE_RESET 0x0F | ||
| 99 | #define USB_REQ_GET_HANDSHAKE 0x10 | ||
| 100 | #define USB_REQ_SET_CONNECTION 0x11 | ||
| 101 | #define USB_REQ_SET_SECURITY_DATA 0x12 | ||
| 102 | #define USB_REQ_GET_SECURITY_DATA 0x13 | ||
| 103 | #define USB_REQ_SET_WUSB_DATA 0x14 | ||
| 104 | #define USB_REQ_LOOPBACK_DATA_WRITE 0x15 | ||
| 105 | #define USB_REQ_LOOPBACK_DATA_READ 0x16 | ||
| 106 | #define USB_REQ_SET_INTERFACE_DS 0x17 | ||
| 107 | |||
| 108 | /* The Link Power Management (LPM) ECN defines USB_REQ_TEST_AND_SET command, | ||
| 109 | * used by hubs to put ports into a new L1 suspend state, except that it | ||
| 110 | * forgot to define its number ... | ||
| 111 | */ | ||
| 112 | |||
| 113 | /* | ||
| 114 | * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and | ||
| 115 | * are read as a bit array returned by USB_REQ_GET_STATUS. (So there | ||
| 116 | * are at most sixteen features of each type.) Hubs may also support a | ||
| 117 | * new USB_REQ_TEST_AND_SET_FEATURE to put ports into L1 suspend. | ||
| 118 | */ | ||
| 119 | #define USB_DEVICE_SELF_POWERED 0 /* (read only) */ | ||
| 120 | #define USB_DEVICE_REMOTE_WAKEUP 1 /* dev may initiate wakeup */ | ||
| 121 | #define USB_DEVICE_TEST_MODE 2 /* (wired high speed only) */ | ||
| 122 | #define USB_DEVICE_BATTERY 2 /* (wireless) */ | ||
| 123 | #define USB_DEVICE_B_HNP_ENABLE 3 /* (otg) dev may initiate HNP */ | ||
| 124 | #define USB_DEVICE_WUSB_DEVICE 3 /* (wireless)*/ | ||
| 125 | #define USB_DEVICE_A_HNP_SUPPORT 4 /* (otg) RH port supports HNP */ | ||
| 126 | #define USB_DEVICE_A_ALT_HNP_SUPPORT 5 /* (otg) other RH port does */ | ||
| 127 | #define USB_DEVICE_DEBUG_MODE 6 /* (special devices only) */ | ||
| 128 | |||
| 129 | /* | ||
| 130 | * Test Mode Selectors | ||
| 131 | * See USB 2.0 spec Table 9-7 | ||
| 132 | */ | ||
| 133 | #define TEST_J 1 | ||
| 134 | #define TEST_K 2 | ||
| 135 | #define TEST_SE0_NAK 3 | ||
| 136 | #define TEST_PACKET 4 | ||
| 137 | #define TEST_FORCE_EN 5 | ||
| 138 | |||
| 139 | /* | ||
| 140 | * New Feature Selectors as added by USB 3.0 | ||
| 141 | * See USB 3.0 spec Table 9-6 | ||
| 142 | */ | ||
| 143 | #define USB_DEVICE_U1_ENABLE 48 /* dev may initiate U1 transition */ | ||
| 144 | #define USB_DEVICE_U2_ENABLE 49 /* dev may initiate U2 transition */ | ||
| 145 | #define USB_DEVICE_LTM_ENABLE 50 /* dev may send LTM */ | ||
| 146 | #define USB_INTRF_FUNC_SUSPEND 0 /* function suspend */ | ||
| 147 | |||
| 148 | #define USB_INTR_FUNC_SUSPEND_OPT_MASK 0xFF00 | ||
| 149 | /* | ||
| 150 | * Suspend Options, Table 9-7 USB 3.0 spec | ||
| 151 | */ | ||
| 152 | #define USB_INTRF_FUNC_SUSPEND_LP (1 << (8 + 0)) | ||
| 153 | #define USB_INTRF_FUNC_SUSPEND_RW (1 << (8 + 1)) | ||
| 154 | |||
| 155 | #define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */ | ||
| 156 | |||
| 157 | /* Bit array elements as returned by the USB_REQ_GET_STATUS request. */ | ||
| 158 | #define USB_DEV_STAT_U1_ENABLED 2 /* transition into U1 state */ | ||
| 159 | #define USB_DEV_STAT_U2_ENABLED 3 /* transition into U2 state */ | ||
| 160 | #define USB_DEV_STAT_LTM_ENABLED 4 /* Latency tolerance messages */ | ||
| 161 | |||
| 162 | /** | ||
| 163 | * struct usb_ctrlrequest - SETUP data for a USB device control request | ||
| 164 | * @bRequestType: matches the USB bmRequestType field | ||
| 165 | * @bRequest: matches the USB bRequest field | ||
| 166 | * @wValue: matches the USB wValue field (le16 byte order) | ||
| 167 | * @wIndex: matches the USB wIndex field (le16 byte order) | ||
| 168 | * @wLength: matches the USB wLength field (le16 byte order) | ||
| 169 | * | ||
| 170 | * This structure is used to send control requests to a USB device. It matches | ||
| 171 | * the different fields of the USB 2.0 Spec section 9.3, table 9-2. See the | ||
| 172 | * USB spec for a fuller description of the different fields, and what they are | ||
| 173 | * used for. | ||
| 174 | * | ||
| 175 | * Note that the driver for any interface can issue control requests. | ||
| 176 | * For most devices, interfaces don't coordinate with each other, so | ||
| 177 | * such requests may be made at any time. | ||
| 178 | */ | ||
| 179 | struct usb_ctrlrequest { | ||
| 180 | __u8 bRequestType; | ||
| 181 | __u8 bRequest; | ||
| 182 | __le16 wValue; | ||
| 183 | __le16 wIndex; | ||
| 184 | __le16 wLength; | ||
| 185 | } __attribute__ ((packed)); | ||
| 186 | |||
| 187 | /*-------------------------------------------------------------------------*/ | ||
| 188 | |||
| 189 | /* | ||
| 190 | * STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or | ||
| 191 | * (rarely) accepted by SET_DESCRIPTOR. | ||
| 192 | * | ||
| 193 | * Note that all multi-byte values here are encoded in little endian | ||
| 194 | * byte order "on the wire". Within the kernel and when exposed | ||
| 195 | * through the Linux-USB APIs, they are not converted to cpu byte | ||
| 196 | * order; it is the responsibility of the client code to do this. | ||
| 197 | * The single exception is when device and configuration descriptors (but | ||
| 198 | * not other descriptors) are read from usbfs (i.e. /proc/bus/usb/BBB/DDD); | ||
| 199 | * in this case the fields are converted to host endianness by the kernel. | ||
| 200 | */ | ||
| 201 | |||
| 202 | /* | ||
| 203 | * Descriptor types ... USB 2.0 spec table 9.5 | ||
| 204 | */ | ||
| 205 | #define USB_DT_DEVICE 0x01 | ||
| 206 | #define USB_DT_CONFIG 0x02 | ||
| 207 | #define USB_DT_STRING 0x03 | ||
| 208 | #define USB_DT_INTERFACE 0x04 | ||
| 209 | #define USB_DT_ENDPOINT 0x05 | ||
| 210 | #define USB_DT_DEVICE_QUALIFIER 0x06 | ||
| 211 | #define USB_DT_OTHER_SPEED_CONFIG 0x07 | ||
| 212 | #define USB_DT_INTERFACE_POWER 0x08 | ||
| 213 | /* these are from a minor usb 2.0 revision (ECN) */ | ||
| 214 | #define USB_DT_OTG 0x09 | ||
| 215 | #define USB_DT_DEBUG 0x0a | ||
| 216 | #define USB_DT_INTERFACE_ASSOCIATION 0x0b | ||
| 217 | /* these are from the Wireless USB spec */ | ||
| 218 | #define USB_DT_SECURITY 0x0c | ||
| 219 | #define USB_DT_KEY 0x0d | ||
| 220 | #define USB_DT_ENCRYPTION_TYPE 0x0e | ||
| 221 | #define USB_DT_BOS 0x0f | ||
| 222 | #define USB_DT_DEVICE_CAPABILITY 0x10 | ||
| 223 | #define USB_DT_WIRELESS_ENDPOINT_COMP 0x11 | ||
| 224 | #define USB_DT_WIRE_ADAPTER 0x21 | ||
| 225 | #define USB_DT_RPIPE 0x22 | ||
| 226 | #define USB_DT_CS_RADIO_CONTROL 0x23 | ||
| 227 | /* From the T10 UAS specification */ | ||
| 228 | #define USB_DT_PIPE_USAGE 0x24 | ||
| 229 | /* From the USB 3.0 spec */ | ||
| 230 | #define USB_DT_SS_ENDPOINT_COMP 0x30 | ||
| 231 | |||
| 232 | /* Conventional codes for class-specific descriptors. The convention is | ||
| 233 | * defined in the USB "Common Class" Spec (3.11). Individual class specs | ||
| 234 | * are authoritative for their usage, not the "common class" writeup. | ||
| 235 | */ | ||
| 236 | #define USB_DT_CS_DEVICE (USB_TYPE_CLASS | USB_DT_DEVICE) | ||
| 237 | #define USB_DT_CS_CONFIG (USB_TYPE_CLASS | USB_DT_CONFIG) | ||
| 238 | #define USB_DT_CS_STRING (USB_TYPE_CLASS | USB_DT_STRING) | ||
| 239 | #define USB_DT_CS_INTERFACE (USB_TYPE_CLASS | USB_DT_INTERFACE) | ||
| 240 | #define USB_DT_CS_ENDPOINT (USB_TYPE_CLASS | USB_DT_ENDPOINT) | ||
| 241 | |||
| 242 | /* All standard descriptors have these 2 fields at the beginning */ | ||
| 243 | struct usb_descriptor_header { | ||
| 244 | __u8 bLength; | ||
| 245 | __u8 bDescriptorType; | ||
| 246 | } __attribute__ ((packed)); | ||
| 247 | |||
| 248 | |||
| 249 | /*-------------------------------------------------------------------------*/ | ||
| 250 | |||
| 251 | /* USB_DT_DEVICE: Device descriptor */ | ||
| 252 | struct usb_device_descriptor { | ||
| 253 | __u8 bLength; | ||
| 254 | __u8 bDescriptorType; | ||
| 255 | |||
| 256 | __le16 bcdUSB; | ||
| 257 | __u8 bDeviceClass; | ||
| 258 | __u8 bDeviceSubClass; | ||
| 259 | __u8 bDeviceProtocol; | ||
| 260 | __u8 bMaxPacketSize0; | ||
| 261 | __le16 idVendor; | ||
| 262 | __le16 idProduct; | ||
| 263 | __le16 bcdDevice; | ||
| 264 | __u8 iManufacturer; | ||
| 265 | __u8 iProduct; | ||
| 266 | __u8 iSerialNumber; | ||
| 267 | __u8 bNumConfigurations; | ||
| 268 | } __attribute__ ((packed)); | ||
| 269 | |||
| 270 | #define USB_DT_DEVICE_SIZE 18 | ||
| 271 | |||
| 272 | |||
| 273 | /* | ||
| 274 | * Device and/or Interface Class codes | ||
| 275 | * as found in bDeviceClass or bInterfaceClass | ||
| 276 | * and defined by www.usb.org documents | ||
| 277 | */ | ||
| 278 | #define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ | ||
| 279 | #define USB_CLASS_AUDIO 1 | ||
| 280 | #define USB_CLASS_COMM 2 | ||
| 281 | #define USB_CLASS_HID 3 | ||
| 282 | #define USB_CLASS_PHYSICAL 5 | ||
| 283 | #define USB_CLASS_STILL_IMAGE 6 | ||
| 284 | #define USB_CLASS_PRINTER 7 | ||
| 285 | #define USB_CLASS_MASS_STORAGE 8 | ||
| 286 | #define USB_CLASS_HUB 9 | ||
| 287 | #define USB_CLASS_CDC_DATA 0x0a | ||
| 288 | #define USB_CLASS_CSCID 0x0b /* chip+ smart card */ | ||
| 289 | #define USB_CLASS_CONTENT_SEC 0x0d /* content security */ | ||
| 290 | #define USB_CLASS_VIDEO 0x0e | ||
| 291 | #define USB_CLASS_WIRELESS_CONTROLLER 0xe0 | ||
| 292 | #define USB_CLASS_MISC 0xef | ||
| 293 | #define USB_CLASS_APP_SPEC 0xfe | ||
| 294 | #define USB_CLASS_VENDOR_SPEC 0xff | ||
| 295 | |||
| 296 | #define USB_SUBCLASS_VENDOR_SPEC 0xff | ||
| 297 | |||
| 298 | /*-------------------------------------------------------------------------*/ | ||
| 299 | |||
| 300 | /* USB_DT_CONFIG: Configuration descriptor information. | ||
| 301 | * | ||
| 302 | * USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the | ||
| 303 | * descriptor type is different. Highspeed-capable devices can look | ||
| 304 | * different depending on what speed they're currently running. Only | ||
| 305 | * devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG | ||
| 306 | * descriptors. | ||
| 307 | */ | ||
| 308 | struct usb_config_descriptor { | ||
| 309 | __u8 bLength; | ||
| 310 | __u8 bDescriptorType; | ||
| 311 | |||
| 312 | __le16 wTotalLength; | ||
| 313 | __u8 bNumInterfaces; | ||
| 314 | __u8 bConfigurationValue; | ||
| 315 | __u8 iConfiguration; | ||
| 316 | __u8 bmAttributes; | ||
| 317 | __u8 bMaxPower; | ||
| 318 | } __attribute__ ((packed)); | ||
| 319 | |||
| 320 | #define USB_DT_CONFIG_SIZE 9 | ||
| 321 | |||
| 322 | /* from config descriptor bmAttributes */ | ||
| 323 | #define USB_CONFIG_ATT_ONE (1 << 7) /* must be set */ | ||
| 324 | #define USB_CONFIG_ATT_SELFPOWER (1 << 6) /* self powered */ | ||
| 325 | #define USB_CONFIG_ATT_WAKEUP (1 << 5) /* can wakeup */ | ||
| 326 | #define USB_CONFIG_ATT_BATTERY (1 << 4) /* battery powered */ | ||
| 327 | |||
| 328 | /*-------------------------------------------------------------------------*/ | ||
| 329 | |||
| 330 | /* USB_DT_STRING: String descriptor */ | ||
| 331 | struct usb_string_descriptor { | ||
| 332 | __u8 bLength; | ||
| 333 | __u8 bDescriptorType; | ||
| 334 | |||
| 335 | __le16 wData[1]; /* UTF-16LE encoded */ | ||
| 336 | } __attribute__ ((packed)); | ||
| 337 | |||
| 338 | /* note that "string" zero is special, it holds language codes that | ||
| 339 | * the device supports, not Unicode characters. | ||
| 340 | */ | ||
| 341 | |||
| 342 | /*-------------------------------------------------------------------------*/ | ||
| 343 | |||
| 344 | /* USB_DT_INTERFACE: Interface descriptor */ | ||
| 345 | struct usb_interface_descriptor { | ||
| 346 | __u8 bLength; | ||
| 347 | __u8 bDescriptorType; | ||
| 348 | |||
| 349 | __u8 bInterfaceNumber; | ||
| 350 | __u8 bAlternateSetting; | ||
| 351 | __u8 bNumEndpoints; | ||
| 352 | __u8 bInterfaceClass; | ||
| 353 | __u8 bInterfaceSubClass; | ||
| 354 | __u8 bInterfaceProtocol; | ||
| 355 | __u8 iInterface; | ||
| 356 | } __attribute__ ((packed)); | ||
| 357 | |||
| 358 | #define USB_DT_INTERFACE_SIZE 9 | ||
| 359 | |||
| 360 | /*-------------------------------------------------------------------------*/ | ||
| 361 | |||
| 362 | /* USB_DT_ENDPOINT: Endpoint descriptor */ | ||
| 363 | struct usb_endpoint_descriptor { | ||
| 364 | __u8 bLength; | ||
| 365 | __u8 bDescriptorType; | ||
| 366 | |||
| 367 | __u8 bEndpointAddress; | ||
| 368 | __u8 bmAttributes; | ||
| 369 | __le16 wMaxPacketSize; | ||
| 370 | __u8 bInterval; | ||
| 371 | |||
| 372 | /* NOTE: these two are _only_ in audio endpoints. */ | ||
| 373 | /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */ | ||
| 374 | __u8 bRefresh; | ||
| 375 | __u8 bSynchAddress; | ||
| 376 | } __attribute__ ((packed)); | ||
| 377 | |||
| 378 | #define USB_DT_ENDPOINT_SIZE 7 | ||
| 379 | #define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ | ||
| 380 | |||
| 381 | |||
| 382 | /* | ||
| 383 | * Endpoints | ||
| 384 | */ | ||
| 385 | #define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ | ||
| 386 | #define USB_ENDPOINT_DIR_MASK 0x80 | ||
| 387 | |||
| 388 | #define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ | ||
| 389 | #define USB_ENDPOINT_XFER_CONTROL 0 | ||
| 390 | #define USB_ENDPOINT_XFER_ISOC 1 | ||
| 391 | #define USB_ENDPOINT_XFER_BULK 2 | ||
| 392 | #define USB_ENDPOINT_XFER_INT 3 | ||
| 393 | #define USB_ENDPOINT_MAX_ADJUSTABLE 0x80 | ||
| 394 | |||
| 395 | /* The USB 3.0 spec redefines bits 5:4 of bmAttributes as interrupt ep type. */ | ||
| 396 | #define USB_ENDPOINT_INTRTYPE 0x30 | ||
| 397 | #define USB_ENDPOINT_INTR_PERIODIC (0 << 4) | ||
| 398 | #define USB_ENDPOINT_INTR_NOTIFICATION (1 << 4) | ||
| 399 | |||
| 400 | #define USB_ENDPOINT_SYNCTYPE 0x0c | ||
| 401 | #define USB_ENDPOINT_SYNC_NONE (0 << 2) | ||
| 402 | #define USB_ENDPOINT_SYNC_ASYNC (1 << 2) | ||
| 403 | #define USB_ENDPOINT_SYNC_ADAPTIVE (2 << 2) | ||
| 404 | #define USB_ENDPOINT_SYNC_SYNC (3 << 2) | ||
| 405 | |||
| 406 | #define USB_ENDPOINT_USAGE_MASK 0x30 | ||
| 407 | #define USB_ENDPOINT_USAGE_DATA 0x00 | ||
| 408 | #define USB_ENDPOINT_USAGE_FEEDBACK 0x10 | ||
| 409 | #define USB_ENDPOINT_USAGE_IMPLICIT_FB 0x20 /* Implicit feedback Data endpoint */ | ||
| 410 | |||
| 411 | /*-------------------------------------------------------------------------*/ | ||
| 412 | |||
| 413 | /** | ||
| 414 | * usb_endpoint_num - get the endpoint's number | ||
| 415 | * @epd: endpoint to be checked | ||
| 416 | * | ||
| 417 | * Returns @epd's number: 0 to 15. | ||
| 418 | */ | ||
| 419 | static inline int usb_endpoint_num(const struct usb_endpoint_descriptor *epd) | ||
| 420 | { | ||
| 421 | return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; | ||
| 422 | } | ||
| 423 | |||
| 424 | /** | ||
| 425 | * usb_endpoint_type - get the endpoint's transfer type | ||
| 426 | * @epd: endpoint to be checked | ||
| 427 | * | ||
| 428 | * Returns one of USB_ENDPOINT_XFER_{CONTROL, ISOC, BULK, INT} according | ||
| 429 | * to @epd's transfer type. | ||
| 430 | */ | ||
| 431 | static inline int usb_endpoint_type(const struct usb_endpoint_descriptor *epd) | ||
| 432 | { | ||
| 433 | return epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; | ||
| 434 | } | ||
| 435 | |||
| 436 | /** | ||
| 437 | * usb_endpoint_dir_in - check if the endpoint has IN direction | ||
| 438 | * @epd: endpoint to be checked | ||
| 439 | * | ||
| 440 | * Returns true if the endpoint is of type IN, otherwise it returns false. | ||
| 441 | */ | ||
| 442 | static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd) | ||
| 443 | { | ||
| 444 | return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN); | ||
| 445 | } | ||
| 446 | |||
| 447 | /** | ||
| 448 | * usb_endpoint_dir_out - check if the endpoint has OUT direction | ||
| 449 | * @epd: endpoint to be checked | ||
| 450 | * | ||
| 451 | * Returns true if the endpoint is of type OUT, otherwise it returns false. | ||
| 452 | */ | ||
| 453 | static inline int usb_endpoint_dir_out( | ||
| 454 | const struct usb_endpoint_descriptor *epd) | ||
| 455 | { | ||
| 456 | return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT); | ||
| 457 | } | ||
| 458 | |||
| 459 | /** | ||
| 460 | * usb_endpoint_xfer_bulk - check if the endpoint has bulk transfer type | ||
| 461 | * @epd: endpoint to be checked | ||
| 462 | * | ||
| 463 | * Returns true if the endpoint is of type bulk, otherwise it returns false. | ||
| 464 | */ | ||
| 465 | static inline int usb_endpoint_xfer_bulk( | ||
| 466 | const struct usb_endpoint_descriptor *epd) | ||
| 467 | { | ||
| 468 | return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == | ||
| 469 | USB_ENDPOINT_XFER_BULK); | ||
| 470 | } | ||
| 471 | |||
| 472 | /** | ||
| 473 | * usb_endpoint_xfer_control - check if the endpoint has control transfer type | ||
| 474 | * @epd: endpoint to be checked | ||
| 475 | * | ||
| 476 | * Returns true if the endpoint is of type control, otherwise it returns false. | ||
| 477 | */ | ||
| 478 | static inline int usb_endpoint_xfer_control( | ||
| 479 | const struct usb_endpoint_descriptor *epd) | ||
| 480 | { | ||
| 481 | return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == | ||
| 482 | USB_ENDPOINT_XFER_CONTROL); | ||
| 483 | } | ||
| 484 | |||
| 485 | /** | ||
| 486 | * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type | ||
| 487 | * @epd: endpoint to be checked | ||
| 488 | * | ||
| 489 | * Returns true if the endpoint is of type interrupt, otherwise it returns | ||
| 490 | * false. | ||
| 491 | */ | ||
| 492 | static inline int usb_endpoint_xfer_int( | ||
| 493 | const struct usb_endpoint_descriptor *epd) | ||
| 494 | { | ||
| 495 | return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == | ||
| 496 | USB_ENDPOINT_XFER_INT); | ||
| 497 | } | ||
| 498 | |||
| 499 | /** | ||
| 500 | * usb_endpoint_xfer_isoc - check if the endpoint has isochronous transfer type | ||
| 501 | * @epd: endpoint to be checked | ||
| 502 | * | ||
| 503 | * Returns true if the endpoint is of type isochronous, otherwise it returns | ||
| 504 | * false. | ||
| 505 | */ | ||
| 506 | static inline int usb_endpoint_xfer_isoc( | ||
| 507 | const struct usb_endpoint_descriptor *epd) | ||
| 508 | { | ||
| 509 | return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == | ||
| 510 | USB_ENDPOINT_XFER_ISOC); | ||
| 511 | } | ||
| 512 | |||
| 513 | /** | ||
| 514 | * usb_endpoint_is_bulk_in - check if the endpoint is bulk IN | ||
| 515 | * @epd: endpoint to be checked | ||
| 516 | * | ||
| 517 | * Returns true if the endpoint has bulk transfer type and IN direction, | ||
| 518 | * otherwise it returns false. | ||
| 519 | */ | ||
| 520 | static inline int usb_endpoint_is_bulk_in( | ||
| 521 | const struct usb_endpoint_descriptor *epd) | ||
| 522 | { | ||
| 523 | return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd); | ||
| 524 | } | ||
| 525 | |||
| 526 | /** | ||
| 527 | * usb_endpoint_is_bulk_out - check if the endpoint is bulk OUT | ||
| 528 | * @epd: endpoint to be checked | ||
| 529 | * | ||
| 530 | * Returns true if the endpoint has bulk transfer type and OUT direction, | ||
| 531 | * otherwise it returns false. | ||
| 532 | */ | ||
| 533 | static inline int usb_endpoint_is_bulk_out( | ||
| 534 | const struct usb_endpoint_descriptor *epd) | ||
| 535 | { | ||
| 536 | return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd); | ||
| 537 | } | ||
| 538 | |||
| 539 | /** | ||
| 540 | * usb_endpoint_is_int_in - check if the endpoint is interrupt IN | ||
| 541 | * @epd: endpoint to be checked | ||
| 542 | * | ||
| 543 | * Returns true if the endpoint has interrupt transfer type and IN direction, | ||
| 544 | * otherwise it returns false. | ||
| 545 | */ | ||
| 546 | static inline int usb_endpoint_is_int_in( | ||
| 547 | const struct usb_endpoint_descriptor *epd) | ||
| 548 | { | ||
| 549 | return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd); | ||
| 550 | } | ||
| 551 | |||
| 552 | /** | ||
| 553 | * usb_endpoint_is_int_out - check if the endpoint is interrupt OUT | ||
| 554 | * @epd: endpoint to be checked | ||
| 555 | * | ||
| 556 | * Returns true if the endpoint has interrupt transfer type and OUT direction, | ||
| 557 | * otherwise it returns false. | ||
| 558 | */ | ||
| 559 | static inline int usb_endpoint_is_int_out( | ||
| 560 | const struct usb_endpoint_descriptor *epd) | ||
| 561 | { | ||
| 562 | return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd); | ||
| 563 | } | ||
| 564 | |||
| 565 | /** | ||
| 566 | * usb_endpoint_is_isoc_in - check if the endpoint is isochronous IN | ||
| 567 | * @epd: endpoint to be checked | ||
| 568 | * | ||
| 569 | * Returns true if the endpoint has isochronous transfer type and IN direction, | ||
| 570 | * otherwise it returns false. | ||
| 571 | */ | ||
| 572 | static inline int usb_endpoint_is_isoc_in( | ||
| 573 | const struct usb_endpoint_descriptor *epd) | ||
| 574 | { | ||
| 575 | return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd); | ||
| 576 | } | ||
| 577 | |||
| 578 | /** | ||
| 579 | * usb_endpoint_is_isoc_out - check if the endpoint is isochronous OUT | ||
| 580 | * @epd: endpoint to be checked | ||
| 581 | * | ||
| 582 | * Returns true if the endpoint has isochronous transfer type and OUT direction, | ||
| 583 | * otherwise it returns false. | ||
| 584 | */ | ||
| 585 | static inline int usb_endpoint_is_isoc_out( | ||
| 586 | const struct usb_endpoint_descriptor *epd) | ||
| 587 | { | ||
| 588 | return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd); | ||
| 589 | } | ||
| 590 | |||
| 591 | /** | ||
| 592 | * usb_endpoint_maxp - get endpoint's max packet size | ||
| 593 | * @epd: endpoint to be checked | ||
| 594 | * | ||
| 595 | * Returns @epd's max packet | ||
| 596 | */ | ||
| 597 | static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd) | ||
| 598 | { | ||
| 599 | return __le16_to_cpu(epd->wMaxPacketSize); | ||
| 600 | } | ||
| 601 | |||
| 602 | static inline int usb_endpoint_interrupt_type( | ||
| 603 | const struct usb_endpoint_descriptor *epd) | ||
| 604 | { | ||
| 605 | return epd->bmAttributes & USB_ENDPOINT_INTRTYPE; | ||
| 606 | } | ||
| 607 | |||
| 608 | /*-------------------------------------------------------------------------*/ | ||
| 609 | |||
| 610 | /* USB_DT_SS_ENDPOINT_COMP: SuperSpeed Endpoint Companion descriptor */ | ||
| 611 | struct usb_ss_ep_comp_descriptor { | ||
| 612 | __u8 bLength; | ||
| 613 | __u8 bDescriptorType; | ||
| 614 | |||
| 615 | __u8 bMaxBurst; | ||
| 616 | __u8 bmAttributes; | ||
| 617 | __le16 wBytesPerInterval; | ||
| 618 | } __attribute__ ((packed)); | ||
| 619 | |||
| 620 | #define USB_DT_SS_EP_COMP_SIZE 6 | ||
| 621 | |||
| 622 | /* Bits 4:0 of bmAttributes if this is a bulk endpoint */ | ||
| 623 | static inline int | ||
| 624 | usb_ss_max_streams(const struct usb_ss_ep_comp_descriptor *comp) | ||
| 625 | { | ||
| 626 | int max_streams; | ||
| 627 | |||
| 628 | if (!comp) | ||
| 629 | return 0; | ||
| 630 | |||
| 631 | max_streams = comp->bmAttributes & 0x1f; | ||
| 632 | |||
| 633 | if (!max_streams) | ||
| 634 | return 0; | ||
| 635 | |||
| 636 | max_streams = 1 << max_streams; | ||
| 637 | |||
| 638 | return max_streams; | ||
| 639 | } | ||
| 640 | |||
| 641 | /* Bits 1:0 of bmAttributes if this is an isoc endpoint */ | ||
| 642 | #define USB_SS_MULT(p) (1 + ((p) & 0x3)) | ||
| 643 | |||
| 644 | /*-------------------------------------------------------------------------*/ | ||
| 645 | |||
| 646 | /* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */ | ||
| 647 | struct usb_qualifier_descriptor { | ||
| 648 | __u8 bLength; | ||
| 649 | __u8 bDescriptorType; | ||
| 650 | |||
| 651 | __le16 bcdUSB; | ||
| 652 | __u8 bDeviceClass; | ||
| 653 | __u8 bDeviceSubClass; | ||
| 654 | __u8 bDeviceProtocol; | ||
| 655 | __u8 bMaxPacketSize0; | ||
| 656 | __u8 bNumConfigurations; | ||
| 657 | __u8 bRESERVED; | ||
| 658 | } __attribute__ ((packed)); | ||
| 659 | |||
| 660 | |||
| 661 | /*-------------------------------------------------------------------------*/ | ||
| 662 | |||
| 663 | /* USB_DT_OTG (from OTG 1.0a supplement) */ | ||
| 664 | struct usb_otg_descriptor { | ||
| 665 | __u8 bLength; | ||
| 666 | __u8 bDescriptorType; | ||
| 667 | |||
| 668 | __u8 bmAttributes; /* support for HNP, SRP, etc */ | ||
| 669 | } __attribute__ ((packed)); | ||
| 670 | |||
| 671 | /* from usb_otg_descriptor.bmAttributes */ | ||
| 672 | #define USB_OTG_SRP (1 << 0) | ||
| 673 | #define USB_OTG_HNP (1 << 1) /* swap host/device roles */ | ||
| 674 | |||
| 675 | /*-------------------------------------------------------------------------*/ | ||
| 676 | |||
| 677 | /* USB_DT_DEBUG: for special highspeed devices, replacing serial console */ | ||
| 678 | struct usb_debug_descriptor { | ||
| 679 | __u8 bLength; | ||
| 680 | __u8 bDescriptorType; | ||
| 681 | |||
| 682 | /* bulk endpoints with 8 byte maxpacket */ | ||
| 683 | __u8 bDebugInEndpoint; | ||
| 684 | __u8 bDebugOutEndpoint; | ||
| 685 | } __attribute__((packed)); | ||
| 686 | |||
| 687 | /*-------------------------------------------------------------------------*/ | ||
| 688 | |||
| 689 | /* USB_DT_INTERFACE_ASSOCIATION: groups interfaces */ | ||
| 690 | struct usb_interface_assoc_descriptor { | ||
| 691 | __u8 bLength; | ||
| 692 | __u8 bDescriptorType; | ||
| 693 | |||
| 694 | __u8 bFirstInterface; | ||
| 695 | __u8 bInterfaceCount; | ||
| 696 | __u8 bFunctionClass; | ||
| 697 | __u8 bFunctionSubClass; | ||
| 698 | __u8 bFunctionProtocol; | ||
| 699 | __u8 iFunction; | ||
| 700 | } __attribute__ ((packed)); | ||
| 701 | |||
| 702 | |||
| 703 | /*-------------------------------------------------------------------------*/ | ||
| 704 | |||
| 705 | /* USB_DT_SECURITY: group of wireless security descriptors, including | ||
| 706 | * encryption types available for setting up a CC/association. | ||
| 707 | */ | ||
| 708 | struct usb_security_descriptor { | ||
| 709 | __u8 bLength; | ||
| 710 | __u8 bDescriptorType; | ||
| 711 | |||
| 712 | __le16 wTotalLength; | ||
| 713 | __u8 bNumEncryptionTypes; | ||
| 714 | } __attribute__((packed)); | ||
| 715 | |||
| 716 | /*-------------------------------------------------------------------------*/ | ||
| 717 | |||
| 718 | /* USB_DT_KEY: used with {GET,SET}_SECURITY_DATA; only public keys | ||
| 719 | * may be retrieved. | ||
| 720 | */ | ||
| 721 | struct usb_key_descriptor { | ||
| 722 | __u8 bLength; | ||
| 723 | __u8 bDescriptorType; | ||
| 724 | |||
| 725 | __u8 tTKID[3]; | ||
| 726 | __u8 bReserved; | ||
| 727 | __u8 bKeyData[0]; | ||
| 728 | } __attribute__((packed)); | ||
| 729 | |||
| 730 | /*-------------------------------------------------------------------------*/ | ||
| 731 | |||
| 732 | /* USB_DT_ENCRYPTION_TYPE: bundled in DT_SECURITY groups */ | ||
| 733 | struct usb_encryption_descriptor { | ||
| 734 | __u8 bLength; | ||
| 735 | __u8 bDescriptorType; | ||
| 736 | |||
| 737 | __u8 bEncryptionType; | ||
| 738 | #define USB_ENC_TYPE_UNSECURE 0 | ||
| 739 | #define USB_ENC_TYPE_WIRED 1 /* non-wireless mode */ | ||
| 740 | #define USB_ENC_TYPE_CCM_1 2 /* aes128/cbc session */ | ||
| 741 | #define USB_ENC_TYPE_RSA_1 3 /* rsa3072/sha1 auth */ | ||
| 742 | __u8 bEncryptionValue; /* use in SET_ENCRYPTION */ | ||
| 743 | __u8 bAuthKeyIndex; | ||
| 744 | } __attribute__((packed)); | ||
| 745 | |||
| 746 | |||
| 747 | /*-------------------------------------------------------------------------*/ | ||
| 748 | |||
| 749 | /* USB_DT_BOS: group of device-level capabilities */ | ||
| 750 | struct usb_bos_descriptor { | ||
| 751 | __u8 bLength; | ||
| 752 | __u8 bDescriptorType; | ||
| 753 | |||
| 754 | __le16 wTotalLength; | ||
| 755 | __u8 bNumDeviceCaps; | ||
| 756 | } __attribute__((packed)); | ||
| 757 | |||
| 758 | #define USB_DT_BOS_SIZE 5 | ||
| 759 | /*-------------------------------------------------------------------------*/ | ||
| 760 | |||
| 761 | /* USB_DT_DEVICE_CAPABILITY: grouped with BOS */ | ||
| 762 | struct usb_dev_cap_header { | ||
| 763 | __u8 bLength; | ||
| 764 | __u8 bDescriptorType; | ||
| 765 | __u8 bDevCapabilityType; | ||
| 766 | } __attribute__((packed)); | ||
| 767 | |||
| 768 | #define USB_CAP_TYPE_WIRELESS_USB 1 | ||
| 769 | |||
| 770 | struct usb_wireless_cap_descriptor { /* Ultra Wide Band */ | ||
| 771 | __u8 bLength; | ||
| 772 | __u8 bDescriptorType; | ||
| 773 | __u8 bDevCapabilityType; | ||
| 774 | |||
| 775 | __u8 bmAttributes; | ||
| 776 | #define USB_WIRELESS_P2P_DRD (1 << 1) | ||
| 777 | #define USB_WIRELESS_BEACON_MASK (3 << 2) | ||
| 778 | #define USB_WIRELESS_BEACON_SELF (1 << 2) | ||
| 779 | #define USB_WIRELESS_BEACON_DIRECTED (2 << 2) | ||
| 780 | #define USB_WIRELESS_BEACON_NONE (3 << 2) | ||
| 781 | __le16 wPHYRates; /* bit rates, Mbps */ | ||
| 782 | #define USB_WIRELESS_PHY_53 (1 << 0) /* always set */ | ||
| 783 | #define USB_WIRELESS_PHY_80 (1 << 1) | ||
| 784 | #define USB_WIRELESS_PHY_107 (1 << 2) /* always set */ | ||
| 785 | #define USB_WIRELESS_PHY_160 (1 << 3) | ||
| 786 | #define USB_WIRELESS_PHY_200 (1 << 4) /* always set */ | ||
| 787 | #define USB_WIRELESS_PHY_320 (1 << 5) | ||
| 788 | #define USB_WIRELESS_PHY_400 (1 << 6) | ||
| 789 | #define USB_WIRELESS_PHY_480 (1 << 7) | ||
| 790 | __u8 bmTFITXPowerInfo; /* TFI power levels */ | ||
| 791 | __u8 bmFFITXPowerInfo; /* FFI power levels */ | ||
| 792 | __le16 bmBandGroup; | ||
| 793 | __u8 bReserved; | ||
| 794 | } __attribute__((packed)); | ||
| 795 | |||
| 796 | /* USB 2.0 Extension descriptor */ | ||
| 797 | #define USB_CAP_TYPE_EXT 2 | ||
| 798 | |||
| 799 | struct usb_ext_cap_descriptor { /* Link Power Management */ | ||
| 800 | __u8 bLength; | ||
| 801 | __u8 bDescriptorType; | ||
| 802 | __u8 bDevCapabilityType; | ||
| 803 | __le32 bmAttributes; | ||
| 804 | #define USB_LPM_SUPPORT (1 << 1) /* supports LPM */ | ||
| 805 | #define USB_BESL_SUPPORT (1 << 2) /* supports BESL */ | ||
| 806 | #define USB_BESL_BASELINE_VALID (1 << 3) /* Baseline BESL valid*/ | ||
| 807 | #define USB_BESL_DEEP_VALID (1 << 4) /* Deep BESL valid */ | ||
| 808 | #define USB_GET_BESL_BASELINE(p) (((p) & (0xf << 8)) >> 8) | ||
| 809 | #define USB_GET_BESL_DEEP(p) (((p) & (0xf << 12)) >> 12) | ||
| 810 | } __attribute__((packed)); | ||
| 811 | |||
| 812 | #define USB_DT_USB_EXT_CAP_SIZE 7 | ||
| 813 | |||
| 814 | /* | ||
| 815 | * SuperSpeed USB Capability descriptor: Defines the set of SuperSpeed USB | ||
| 816 | * specific device level capabilities | ||
| 817 | */ | ||
| 818 | #define USB_SS_CAP_TYPE 3 | ||
| 819 | struct usb_ss_cap_descriptor { /* Link Power Management */ | ||
| 820 | __u8 bLength; | ||
| 821 | __u8 bDescriptorType; | ||
| 822 | __u8 bDevCapabilityType; | ||
| 823 | __u8 bmAttributes; | ||
| 824 | #define USB_LTM_SUPPORT (1 << 1) /* supports LTM */ | ||
| 825 | __le16 wSpeedSupported; | ||
| 826 | #define USB_LOW_SPEED_OPERATION (1) /* Low speed operation */ | ||
| 827 | #define USB_FULL_SPEED_OPERATION (1 << 1) /* Full speed operation */ | ||
| 828 | #define USB_HIGH_SPEED_OPERATION (1 << 2) /* High speed operation */ | ||
| 829 | #define USB_5GBPS_OPERATION (1 << 3) /* Operation at 5Gbps */ | ||
| 830 | __u8 bFunctionalitySupport; | ||
| 831 | __u8 bU1devExitLat; | ||
| 832 | __le16 bU2DevExitLat; | ||
| 833 | } __attribute__((packed)); | ||
| 834 | |||
| 835 | #define USB_DT_USB_SS_CAP_SIZE 10 | ||
| 836 | |||
| 837 | /* | ||
| 838 | * Container ID Capability descriptor: Defines the instance unique ID used to | ||
| 839 | * identify the instance across all operating modes | ||
| 840 | */ | ||
| 841 | #define CONTAINER_ID_TYPE 4 | ||
| 842 | struct usb_ss_container_id_descriptor { | ||
| 843 | __u8 bLength; | ||
| 844 | __u8 bDescriptorType; | ||
| 845 | __u8 bDevCapabilityType; | ||
| 846 | __u8 bReserved; | ||
| 847 | __u8 ContainerID[16]; /* 128-bit number */ | ||
| 848 | } __attribute__((packed)); | ||
| 849 | |||
| 850 | #define USB_DT_USB_SS_CONTN_ID_SIZE 20 | ||
| 851 | /*-------------------------------------------------------------------------*/ | ||
| 852 | |||
| 853 | /* USB_DT_WIRELESS_ENDPOINT_COMP: companion descriptor associated with | ||
| 854 | * each endpoint descriptor for a wireless device | ||
| 855 | */ | ||
| 856 | struct usb_wireless_ep_comp_descriptor { | ||
| 857 | __u8 bLength; | ||
| 858 | __u8 bDescriptorType; | ||
| 859 | |||
| 860 | __u8 bMaxBurst; | ||
| 861 | __u8 bMaxSequence; | ||
| 862 | __le16 wMaxStreamDelay; | ||
| 863 | __le16 wOverTheAirPacketSize; | ||
| 864 | __u8 bOverTheAirInterval; | ||
| 865 | __u8 bmCompAttributes; | ||
| 866 | #define USB_ENDPOINT_SWITCH_MASK 0x03 /* in bmCompAttributes */ | ||
| 867 | #define USB_ENDPOINT_SWITCH_NO 0 | ||
| 868 | #define USB_ENDPOINT_SWITCH_SWITCH 1 | ||
| 869 | #define USB_ENDPOINT_SWITCH_SCALE 2 | ||
| 870 | } __attribute__((packed)); | ||
| 871 | |||
| 872 | /*-------------------------------------------------------------------------*/ | ||
| 873 | |||
| 874 | /* USB_REQ_SET_HANDSHAKE is a four-way handshake used between a wireless | ||
| 875 | * host and a device for connection set up, mutual authentication, and | ||
| 876 | * exchanging short lived session keys. The handshake depends on a CC. | ||
| 877 | */ | ||
| 878 | struct usb_handshake { | ||
| 879 | __u8 bMessageNumber; | ||
| 880 | __u8 bStatus; | ||
| 881 | __u8 tTKID[3]; | ||
| 882 | __u8 bReserved; | ||
| 883 | __u8 CDID[16]; | ||
| 884 | __u8 nonce[16]; | ||
| 885 | __u8 MIC[8]; | ||
| 886 | } __attribute__((packed)); | ||
| 887 | |||
| 888 | /*-------------------------------------------------------------------------*/ | ||
| 889 | |||
| 890 | /* USB_REQ_SET_CONNECTION modifies or revokes a connection context (CC). | ||
| 891 | * A CC may also be set up using non-wireless secure channels (including | ||
| 892 | * wired USB!), and some devices may support CCs with multiple hosts. | ||
| 893 | */ | ||
| 894 | struct usb_connection_context { | ||
| 895 | __u8 CHID[16]; /* persistent host id */ | ||
| 896 | __u8 CDID[16]; /* device id (unique w/in host context) */ | ||
| 897 | __u8 CK[16]; /* connection key */ | ||
| 898 | } __attribute__((packed)); | ||
| 899 | |||
| 900 | /*-------------------------------------------------------------------------*/ | ||
| 901 | |||
| 902 | /* USB 2.0 defines three speeds, here's how Linux identifies them */ | ||
| 903 | |||
| 904 | enum usb_device_speed { | ||
| 905 | USB_SPEED_UNKNOWN = 0, /* enumerating */ | ||
| 906 | USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */ | ||
| 907 | USB_SPEED_HIGH, /* usb 2.0 */ | ||
| 908 | USB_SPEED_WIRELESS, /* wireless (usb 2.5) */ | ||
| 909 | USB_SPEED_SUPER, /* usb 3.0 */ | ||
| 910 | }; | ||
| 911 | |||
| 912 | |||
| 913 | enum usb_device_state { | ||
| 914 | /* NOTATTACHED isn't in the USB spec, and this state acts | ||
| 915 | * the same as ATTACHED ... but it's clearer this way. | ||
| 916 | */ | ||
| 917 | USB_STATE_NOTATTACHED = 0, | ||
| 918 | |||
| 919 | /* chapter 9 and authentication (wireless) device states */ | ||
| 920 | USB_STATE_ATTACHED, | ||
| 921 | USB_STATE_POWERED, /* wired */ | ||
| 922 | USB_STATE_RECONNECTING, /* auth */ | ||
| 923 | USB_STATE_UNAUTHENTICATED, /* auth */ | ||
| 924 | USB_STATE_DEFAULT, /* limited function */ | ||
| 925 | USB_STATE_ADDRESS, | ||
| 926 | USB_STATE_CONFIGURED, /* most functions */ | ||
| 927 | |||
| 928 | USB_STATE_SUSPENDED | ||
| 929 | |||
| 930 | /* NOTE: there are actually four different SUSPENDED | ||
| 931 | * states, returning to POWERED, DEFAULT, ADDRESS, or | ||
| 932 | * CONFIGURED respectively when SOF tokens flow again. | ||
| 933 | * At this level there's no difference between L1 and L2 | ||
| 934 | * suspend states. (L2 being original USB 1.1 suspend.) | ||
| 935 | */ | ||
| 936 | }; | ||
| 937 | |||
| 938 | enum usb3_link_state { | ||
| 939 | USB3_LPM_U0 = 0, | ||
| 940 | USB3_LPM_U1, | ||
| 941 | USB3_LPM_U2, | ||
| 942 | USB3_LPM_U3 | ||
| 943 | }; | ||
| 944 | |||
| 945 | /* | ||
| 946 | * A U1 timeout of 0x0 means the parent hub will reject any transitions to U1. | ||
| 947 | * 0xff means the parent hub will accept transitions to U1, but will not | ||
| 948 | * initiate a transition. | ||
| 949 | * | ||
| 950 | * A U1 timeout of 0x1 to 0x7F also causes the hub to initiate a transition to | ||
| 951 | * U1 after that many microseconds. Timeouts of 0x80 to 0xFE are reserved | ||
| 952 | * values. | ||
| 953 | * | ||
| 954 | * A U2 timeout of 0x0 means the parent hub will reject any transitions to U2. | ||
| 955 | * 0xff means the parent hub will accept transitions to U2, but will not | ||
| 956 | * initiate a transition. | ||
| 957 | * | ||
| 958 | * A U2 timeout of 0x1 to 0xFE also causes the hub to initiate a transition to | ||
| 959 | * U2 after N*256 microseconds. Therefore a U2 timeout value of 0x1 means a U2 | ||
| 960 | * idle timer of 256 microseconds, 0x2 means 512 microseconds, 0xFE means | ||
| 961 | * 65.024ms. | ||
| 962 | */ | ||
| 963 | #define USB3_LPM_DISABLED 0x0 | ||
| 964 | #define USB3_LPM_U1_MAX_TIMEOUT 0x7F | ||
| 965 | #define USB3_LPM_U2_MAX_TIMEOUT 0xFE | ||
| 966 | #define USB3_LPM_DEVICE_INITIATED 0xFF | ||
| 967 | |||
| 968 | struct usb_set_sel_req { | ||
| 969 | __u8 u1_sel; | ||
| 970 | __u8 u1_pel; | ||
| 971 | __le16 u2_sel; | ||
| 972 | __le16 u2_pel; | ||
| 973 | } __attribute__ ((packed)); | ||
| 974 | |||
| 975 | /* | ||
| 976 | * The Set System Exit Latency control transfer provides one byte each for | ||
| 977 | * U1 SEL and U1 PEL, so the max exit latency is 0xFF. U2 SEL and U2 PEL each | ||
| 978 | * are two bytes long. | ||
| 979 | */ | ||
| 980 | #define USB3_LPM_MAX_U1_SEL_PEL 0xFF | ||
| 981 | #define USB3_LPM_MAX_U2_SEL_PEL 0xFFFF | ||
| 982 | |||
| 983 | /*-------------------------------------------------------------------------*/ | ||
| 984 | |||
| 985 | /* | ||
| 986 | * As per USB compliance update, a device that is actively drawing | ||
| 987 | * more than 100mA from USB must report itself as bus-powered in | ||
| 988 | * the GetStatus(DEVICE) call. | ||
| 989 | * http://compliance.usb.org/index.asp?UpdateFile=Electrical&Format=Standard#34 | ||
| 990 | */ | ||
| 991 | #define USB_SELF_POWER_VBUS_MAX_DRAW 100 | ||
| 992 | |||
| 993 | #endif /* _UAPI__LINUX_USB_CH9_H */ | ||
diff --git a/include/uapi/linux/usb/functionfs.h b/include/uapi/linux/usb/functionfs.h new file mode 100644 index 000000000000..d6b01283f85c --- /dev/null +++ b/include/uapi/linux/usb/functionfs.h | |||
| @@ -0,0 +1,169 @@ | |||
| 1 | #ifndef _UAPI__LINUX_FUNCTIONFS_H__ | ||
| 2 | #define _UAPI__LINUX_FUNCTIONFS_H__ | ||
| 3 | |||
| 4 | |||
| 5 | #include <linux/types.h> | ||
| 6 | #include <linux/ioctl.h> | ||
| 7 | |||
| 8 | #include <linux/usb/ch9.h> | ||
| 9 | |||
| 10 | |||
| 11 | enum { | ||
| 12 | FUNCTIONFS_DESCRIPTORS_MAGIC = 1, | ||
| 13 | FUNCTIONFS_STRINGS_MAGIC = 2 | ||
| 14 | }; | ||
| 15 | |||
| 16 | |||
| 17 | #ifndef __KERNEL__ | ||
| 18 | |||
| 19 | /* Descriptor of an non-audio endpoint */ | ||
| 20 | struct usb_endpoint_descriptor_no_audio { | ||
| 21 | __u8 bLength; | ||
| 22 | __u8 bDescriptorType; | ||
| 23 | |||
| 24 | __u8 bEndpointAddress; | ||
| 25 | __u8 bmAttributes; | ||
| 26 | __le16 wMaxPacketSize; | ||
| 27 | __u8 bInterval; | ||
| 28 | } __attribute__((packed)); | ||
| 29 | |||
| 30 | |||
| 31 | /* | ||
| 32 | * All numbers must be in little endian order. | ||
| 33 | */ | ||
| 34 | |||
| 35 | struct usb_functionfs_descs_head { | ||
| 36 | __le32 magic; | ||
| 37 | __le32 length; | ||
| 38 | __le32 fs_count; | ||
| 39 | __le32 hs_count; | ||
| 40 | } __attribute__((packed)); | ||
| 41 | |||
| 42 | /* | ||
| 43 | * Descriptors format: | ||
| 44 | * | ||
| 45 | * | off | name | type | description | | ||
| 46 | * |-----+-----------+--------------+--------------------------------------| | ||
| 47 | * | 0 | magic | LE32 | FUNCTIONFS_{FS,HS}_DESCRIPTORS_MAGIC | | ||
| 48 | * | 4 | length | LE32 | length of the whole data chunk | | ||
| 49 | * | 8 | fs_count | LE32 | number of full-speed descriptors | | ||
| 50 | * | 12 | hs_count | LE32 | number of high-speed descriptors | | ||
| 51 | * | 16 | fs_descrs | Descriptor[] | list of full-speed descriptors | | ||
| 52 | * | | hs_descrs | Descriptor[] | list of high-speed descriptors | | ||
| 53 | * | ||
| 54 | * descs are just valid USB descriptors and have the following format: | ||
| 55 | * | ||
| 56 | * | off | name | type | description | | ||
| 57 | * |-----+-----------------+------+--------------------------| | ||
| 58 | * | 0 | bLength | U8 | length of the descriptor | | ||
| 59 | * | 1 | bDescriptorType | U8 | descriptor type | | ||
| 60 | * | 2 | payload | | descriptor's payload | | ||
| 61 | */ | ||
| 62 | |||
| 63 | struct usb_functionfs_strings_head { | ||
| 64 | __le32 magic; | ||
| 65 | __le32 length; | ||
| 66 | __le32 str_count; | ||
| 67 | __le32 lang_count; | ||
| 68 | } __attribute__((packed)); | ||
| 69 | |||
| 70 | /* | ||
| 71 | * Strings format: | ||
| 72 | * | ||
| 73 | * | off | name | type | description | | ||
| 74 | * |-----+------------+-----------------------+----------------------------| | ||
| 75 | * | 0 | magic | LE32 | FUNCTIONFS_STRINGS_MAGIC | | ||
| 76 | * | 4 | length | LE32 | length of the data chunk | | ||
| 77 | * | 8 | str_count | LE32 | number of strings | | ||
| 78 | * | 12 | lang_count | LE32 | number of languages | | ||
| 79 | * | 16 | stringtab | StringTab[lang_count] | table of strings per lang | | ||
| 80 | * | ||
| 81 | * For each language there is one stringtab entry (ie. there are lang_count | ||
| 82 | * stringtab entires). Each StringTab has following format: | ||
| 83 | * | ||
| 84 | * | off | name | type | description | | ||
| 85 | * |-----+---------+-------------------+------------------------------------| | ||
| 86 | * | 0 | lang | LE16 | language code | | ||
| 87 | * | 2 | strings | String[str_count] | array of strings in given language | | ||
| 88 | * | ||
| 89 | * For each string there is one strings entry (ie. there are str_count | ||
| 90 | * string entries). Each String is a NUL terminated string encoded in | ||
| 91 | * UTF-8. | ||
| 92 | */ | ||
| 93 | |||
| 94 | #endif | ||
| 95 | |||
| 96 | |||
| 97 | /* | ||
| 98 | * Events are delivered on the ep0 file descriptor, when the user mode driver | ||
| 99 | * reads from this file descriptor after writing the descriptors. Don't | ||
| 100 | * stop polling this descriptor. | ||
| 101 | */ | ||
| 102 | |||
| 103 | enum usb_functionfs_event_type { | ||
| 104 | FUNCTIONFS_BIND, | ||
| 105 | FUNCTIONFS_UNBIND, | ||
| 106 | |||
| 107 | FUNCTIONFS_ENABLE, | ||
| 108 | FUNCTIONFS_DISABLE, | ||
| 109 | |||
| 110 | FUNCTIONFS_SETUP, | ||
| 111 | |||
| 112 | FUNCTIONFS_SUSPEND, | ||
| 113 | FUNCTIONFS_RESUME | ||
| 114 | }; | ||
| 115 | |||
| 116 | /* NOTE: this structure must stay the same size and layout on | ||
| 117 | * both 32-bit and 64-bit kernels. | ||
| 118 | */ | ||
| 119 | struct usb_functionfs_event { | ||
| 120 | union { | ||
| 121 | /* SETUP: packet; DATA phase i/o precedes next event | ||
| 122 | *(setup.bmRequestType & USB_DIR_IN) flags direction */ | ||
| 123 | struct usb_ctrlrequest setup; | ||
| 124 | } __attribute__((packed)) u; | ||
| 125 | |||
| 126 | /* enum usb_functionfs_event_type */ | ||
| 127 | __u8 type; | ||
| 128 | __u8 _pad[3]; | ||
| 129 | } __attribute__((packed)); | ||
| 130 | |||
| 131 | |||
| 132 | /* Endpoint ioctls */ | ||
| 133 | /* The same as in gadgetfs */ | ||
| 134 | |||
| 135 | /* IN transfers may be reported to the gadget driver as complete | ||
| 136 | * when the fifo is loaded, before the host reads the data; | ||
| 137 | * OUT transfers may be reported to the host's "client" driver as | ||
| 138 | * complete when they're sitting in the FIFO unread. | ||
| 139 | * THIS returns how many bytes are "unclaimed" in the endpoint fifo | ||
| 140 | * (needed for precise fault handling, when the hardware allows it) | ||
| 141 | */ | ||
| 142 | #define FUNCTIONFS_FIFO_STATUS _IO('g', 1) | ||
| 143 | |||
| 144 | /* discards any unclaimed data in the fifo. */ | ||
| 145 | #define FUNCTIONFS_FIFO_FLUSH _IO('g', 2) | ||
| 146 | |||
| 147 | /* resets endpoint halt+toggle; used to implement set_interface. | ||
| 148 | * some hardware (like pxa2xx) can't support this. | ||
| 149 | */ | ||
| 150 | #define FUNCTIONFS_CLEAR_HALT _IO('g', 3) | ||
| 151 | |||
| 152 | /* Specific for functionfs */ | ||
| 153 | |||
| 154 | /* | ||
| 155 | * Returns reverse mapping of an interface. Called on EP0. If there | ||
| 156 | * is no such interface returns -EDOM. If function is not active | ||
| 157 | * returns -ENODEV. | ||
| 158 | */ | ||
| 159 | #define FUNCTIONFS_INTERFACE_REVMAP _IO('g', 128) | ||
| 160 | |||
| 161 | /* | ||
| 162 | * Returns real bEndpointAddress of an endpoint. If function is not | ||
| 163 | * active returns -ENODEV. | ||
| 164 | */ | ||
| 165 | #define FUNCTIONFS_ENDPOINT_REVMAP _IO('g', 129) | ||
| 166 | |||
| 167 | |||
| 168 | |||
| 169 | #endif /* _UAPI__LINUX_FUNCTIONFS_H__ */ | ||
diff --git a/include/linux/usb/g_printer.h b/include/uapi/linux/usb/g_printer.h index 6178fde50f74..6178fde50f74 100644 --- a/include/linux/usb/g_printer.h +++ b/include/uapi/linux/usb/g_printer.h | |||
diff --git a/include/linux/usb/gadgetfs.h b/include/uapi/linux/usb/gadgetfs.h index 0bb12e0d4f8f..0bb12e0d4f8f 100644 --- a/include/linux/usb/gadgetfs.h +++ b/include/uapi/linux/usb/gadgetfs.h | |||
diff --git a/include/linux/usb/midi.h b/include/uapi/linux/usb/midi.h index c8c52e3c91de..c8c52e3c91de 100644 --- a/include/linux/usb/midi.h +++ b/include/uapi/linux/usb/midi.h | |||
diff --git a/include/linux/usb/tmc.h b/include/uapi/linux/usb/tmc.h index c045ae12556c..c045ae12556c 100644 --- a/include/linux/usb/tmc.h +++ b/include/uapi/linux/usb/tmc.h | |||
diff --git a/include/linux/usb/video.h b/include/uapi/linux/usb/video.h index 3b3b95e01f71..3b3b95e01f71 100644 --- a/include/linux/usb/video.h +++ b/include/uapi/linux/usb/video.h | |||
diff --git a/include/xen/Kbuild b/include/xen/Kbuild deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/include/xen/Kbuild +++ /dev/null | |||
diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h index aecee9d112cb..694dcaf266e6 100644 --- a/include/xen/grant_table.h +++ b/include/xen/grant_table.h | |||
| @@ -170,7 +170,7 @@ gnttab_set_unmap_op(struct gnttab_unmap_grant_ref *unmap, phys_addr_t addr, | |||
| 170 | unmap->dev_bus_addr = 0; | 170 | unmap->dev_bus_addr = 0; |
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes, | 173 | int arch_gnttab_map_shared(xen_pfn_t *frames, unsigned long nr_gframes, |
| 174 | unsigned long max_nr_gframes, | 174 | unsigned long max_nr_gframes, |
| 175 | void **__shared); | 175 | void **__shared); |
| 176 | int arch_gnttab_map_status(uint64_t *frames, unsigned long nr_gframes, | 176 | int arch_gnttab_map_status(uint64_t *frames, unsigned long nr_gframes, |
diff --git a/include/xen/hvm.h b/include/xen/hvm.h index b193fa2f9fdd..13e43e41637d 100644 --- a/include/xen/hvm.h +++ b/include/xen/hvm.h | |||
| @@ -5,6 +5,36 @@ | |||
| 5 | #include <xen/interface/hvm/params.h> | 5 | #include <xen/interface/hvm/params.h> |
| 6 | #include <asm/xen/hypercall.h> | 6 | #include <asm/xen/hypercall.h> |
| 7 | 7 | ||
| 8 | static const char *param_name(int op) | ||
| 9 | { | ||
| 10 | #define PARAM(x) [HVM_PARAM_##x] = #x | ||
| 11 | static const char *const names[] = { | ||
| 12 | PARAM(CALLBACK_IRQ), | ||
| 13 | PARAM(STORE_PFN), | ||
| 14 | PARAM(STORE_EVTCHN), | ||
| 15 | PARAM(PAE_ENABLED), | ||
| 16 | PARAM(IOREQ_PFN), | ||
| 17 | PARAM(BUFIOREQ_PFN), | ||
| 18 | PARAM(TIMER_MODE), | ||
| 19 | PARAM(HPET_ENABLED), | ||
| 20 | PARAM(IDENT_PT), | ||
| 21 | PARAM(DM_DOMAIN), | ||
| 22 | PARAM(ACPI_S_STATE), | ||
| 23 | PARAM(VM86_TSS), | ||
| 24 | PARAM(VPT_ALIGN), | ||
| 25 | PARAM(CONSOLE_PFN), | ||
| 26 | PARAM(CONSOLE_EVTCHN), | ||
| 27 | }; | ||
| 28 | #undef PARAM | ||
| 29 | |||
| 30 | if (op >= ARRAY_SIZE(names)) | ||
| 31 | return "unknown"; | ||
| 32 | |||
| 33 | if (!names[op]) | ||
| 34 | return "reserved"; | ||
| 35 | |||
| 36 | return names[op]; | ||
| 37 | } | ||
| 8 | static inline int hvm_get_parameter(int idx, uint64_t *value) | 38 | static inline int hvm_get_parameter(int idx, uint64_t *value) |
| 9 | { | 39 | { |
| 10 | struct xen_hvm_param xhv; | 40 | struct xen_hvm_param xhv; |
| @@ -14,8 +44,8 @@ static inline int hvm_get_parameter(int idx, uint64_t *value) | |||
| 14 | xhv.index = idx; | 44 | xhv.index = idx; |
| 15 | r = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv); | 45 | r = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv); |
| 16 | if (r < 0) { | 46 | if (r < 0) { |
| 17 | printk(KERN_ERR "Cannot get hvm parameter %d: %d!\n", | 47 | printk(KERN_ERR "Cannot get hvm parameter %s (%d): %d!\n", |
| 18 | idx, r); | 48 | param_name(idx), idx, r); |
| 19 | return r; | 49 | return r; |
| 20 | } | 50 | } |
| 21 | *value = xhv.value; | 51 | *value = xhv.value; |
diff --git a/include/xen/interface/grant_table.h b/include/xen/interface/grant_table.h index f9f8b975ae74..e40fae9bf11a 100644 --- a/include/xen/interface/grant_table.h +++ b/include/xen/interface/grant_table.h | |||
| @@ -310,7 +310,7 @@ struct gnttab_setup_table { | |||
| 310 | uint32_t nr_frames; | 310 | uint32_t nr_frames; |
| 311 | /* OUT parameters. */ | 311 | /* OUT parameters. */ |
| 312 | int16_t status; /* GNTST_* */ | 312 | int16_t status; /* GNTST_* */ |
| 313 | GUEST_HANDLE(ulong) frame_list; | 313 | GUEST_HANDLE(xen_pfn_t) frame_list; |
| 314 | }; | 314 | }; |
| 315 | DEFINE_GUEST_HANDLE_STRUCT(gnttab_setup_table); | 315 | DEFINE_GUEST_HANDLE_STRUCT(gnttab_setup_table); |
| 316 | 316 | ||
diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h index b66d04ce6957..90712e2072d5 100644 --- a/include/xen/interface/memory.h +++ b/include/xen/interface/memory.h | |||
| @@ -179,28 +179,8 @@ struct xen_add_to_physmap { | |||
| 179 | }; | 179 | }; |
| 180 | DEFINE_GUEST_HANDLE_STRUCT(xen_add_to_physmap); | 180 | DEFINE_GUEST_HANDLE_STRUCT(xen_add_to_physmap); |
| 181 | 181 | ||
| 182 | /* | 182 | /*** REMOVED ***/ |
| 183 | * Translates a list of domain-specific GPFNs into MFNs. Returns a -ve error | 183 | /*#define XENMEM_translate_gpfn_list 8*/ |
| 184 | * code on failure. This call only works for auto-translated guests. | ||
| 185 | */ | ||
| 186 | #define XENMEM_translate_gpfn_list 8 | ||
| 187 | struct xen_translate_gpfn_list { | ||
| 188 | /* Which domain to translate for? */ | ||
| 189 | domid_t domid; | ||
| 190 | |||
| 191 | /* Length of list. */ | ||
| 192 | xen_ulong_t nr_gpfns; | ||
| 193 | |||
| 194 | /* List of GPFNs to translate. */ | ||
| 195 | GUEST_HANDLE(ulong) gpfn_list; | ||
| 196 | |||
| 197 | /* | ||
| 198 | * Output list to contain MFN translations. May be the same as the input | ||
| 199 | * list (in which case each input GPFN is overwritten with the output MFN). | ||
| 200 | */ | ||
| 201 | GUEST_HANDLE(ulong) mfn_list; | ||
| 202 | }; | ||
| 203 | DEFINE_GUEST_HANDLE_STRUCT(xen_translate_gpfn_list); | ||
| 204 | 184 | ||
| 205 | /* | 185 | /* |
| 206 | * Returns the pseudo-physical memory map as it was when the domain | 186 | * Returns the pseudo-physical memory map as it was when the domain |
