diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-06-17 02:59:01 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-06-17 02:59:10 -0400 |
| commit | cc4949e1fdade5d063e9f8783cf0e2cc92041ce5 (patch) | |
| tree | 4023bd641bfe464efbde518fb504d6865c9df014 /include/linux | |
| parent | 28b4868820a56de661f54742ff91b78e12f1e582 (diff) | |
| parent | 300df7dc89cc276377fc020704e34875d5c473b6 (diff) | |
Merge branch 'linus' into x86/urgent
Merge reason: pull in latest to fix a bug in it.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux')
124 files changed, 3505 insertions, 714 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 3f0eaa397ef5..a2df7030d49d 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -135,6 +135,7 @@ header-y += posix_types.h | |||
| 135 | header-y += ppdev.h | 135 | header-y += ppdev.h |
| 136 | header-y += prctl.h | 136 | header-y += prctl.h |
| 137 | header-y += qnxtypes.h | 137 | header-y += qnxtypes.h |
| 138 | header-y += qnx4_fs.h | ||
| 138 | header-y += radeonfb.h | 139 | header-y += radeonfb.h |
| 139 | header-y += raw.h | 140 | header-y += raw.h |
| 140 | header-y += resource.h | 141 | header-y += resource.h |
| @@ -308,9 +309,9 @@ unifdef-y += poll.h | |||
| 308 | unifdef-y += ppp_defs.h | 309 | unifdef-y += ppp_defs.h |
| 309 | unifdef-y += ppp-comp.h | 310 | unifdef-y += ppp-comp.h |
| 310 | unifdef-y += ptrace.h | 311 | unifdef-y += ptrace.h |
| 311 | unifdef-y += qnx4_fs.h | ||
| 312 | unifdef-y += quota.h | 312 | unifdef-y += quota.h |
| 313 | unifdef-y += random.h | 313 | unifdef-y += random.h |
| 314 | unifdef-y += rfkill.h | ||
| 314 | unifdef-y += irqnr.h | 315 | unifdef-y += irqnr.h |
| 315 | unifdef-y += reboot.h | 316 | unifdef-y += reboot.h |
| 316 | unifdef-y += reiserfs_fs.h | 317 | unifdef-y += reiserfs_fs.h |
diff --git a/include/linux/amba/pl022.h b/include/linux/amba/pl022.h new file mode 100644 index 000000000000..dcad0ffd1755 --- /dev/null +++ b/include/linux/amba/pl022.h | |||
| @@ -0,0 +1,264 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/amba/pl022.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008-2009 ST-Ericsson AB | ||
| 5 | * Copyright (C) 2006 STMicroelectronics Pvt. Ltd. | ||
| 6 | * | ||
| 7 | * Author: Linus Walleij <linus.walleij@stericsson.com> | ||
| 8 | * | ||
| 9 | * Initial version inspired by: | ||
| 10 | * linux-2.6.17-rc3-mm1/drivers/spi/pxa2xx_spi.c | ||
| 11 | * Initial adoption to PL022 by: | ||
| 12 | * Sachin Verma <sachin.verma@st.com> | ||
| 13 | * | ||
| 14 | * This program is free software; you can redistribute it and/or modify | ||
| 15 | * it under the terms of the GNU General Public License as published by | ||
| 16 | * the Free Software Foundation; either version 2 of the License, or | ||
| 17 | * (at your option) any later version. | ||
| 18 | * | ||
| 19 | * This program is distributed in the hope that it will be useful, | ||
| 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 22 | * GNU General Public License for more details. | ||
| 23 | */ | ||
| 24 | |||
| 25 | #ifndef _SSP_PL022_H | ||
| 26 | #define _SSP_PL022_H | ||
| 27 | |||
| 28 | #include <linux/device.h> | ||
| 29 | |||
| 30 | /** | ||
| 31 | * whether SSP is in loopback mode or not | ||
| 32 | */ | ||
| 33 | enum ssp_loopback { | ||
| 34 | LOOPBACK_DISABLED, | ||
| 35 | LOOPBACK_ENABLED | ||
| 36 | }; | ||
| 37 | |||
| 38 | /** | ||
| 39 | * enum ssp_interface - interfaces allowed for this SSP Controller | ||
| 40 | * @SSP_INTERFACE_MOTOROLA_SPI: Motorola Interface | ||
| 41 | * @SSP_INTERFACE_TI_SYNC_SERIAL: Texas Instrument Synchronous Serial | ||
| 42 | * interface | ||
| 43 | * @SSP_INTERFACE_NATIONAL_MICROWIRE: National Semiconductor Microwire | ||
| 44 | * interface | ||
| 45 | * @SSP_INTERFACE_UNIDIRECTIONAL: Unidirectional interface (STn8810 | ||
| 46 | * &STn8815 only) | ||
| 47 | */ | ||
| 48 | enum ssp_interface { | ||
| 49 | SSP_INTERFACE_MOTOROLA_SPI, | ||
| 50 | SSP_INTERFACE_TI_SYNC_SERIAL, | ||
| 51 | SSP_INTERFACE_NATIONAL_MICROWIRE, | ||
| 52 | SSP_INTERFACE_UNIDIRECTIONAL | ||
| 53 | }; | ||
| 54 | |||
| 55 | /** | ||
| 56 | * enum ssp_hierarchy - whether SSP is configured as Master or Slave | ||
| 57 | */ | ||
| 58 | enum ssp_hierarchy { | ||
| 59 | SSP_MASTER, | ||
| 60 | SSP_SLAVE | ||
| 61 | }; | ||
| 62 | |||
| 63 | /** | ||
| 64 | * enum ssp_clock_params - clock parameters, to set SSP clock at a | ||
| 65 | * desired freq | ||
| 66 | */ | ||
| 67 | struct ssp_clock_params { | ||
| 68 | u8 cpsdvsr; /* value from 2 to 254 (even only!) */ | ||
| 69 | u8 scr; /* value from 0 to 255 */ | ||
| 70 | }; | ||
| 71 | |||
| 72 | /** | ||
| 73 | * enum ssp_rx_endian - endianess of Rx FIFO Data | ||
| 74 | */ | ||
| 75 | enum ssp_rx_endian { | ||
| 76 | SSP_RX_MSB, | ||
| 77 | SSP_RX_LSB | ||
| 78 | }; | ||
| 79 | |||
| 80 | /** | ||
| 81 | * enum ssp_tx_endian - endianess of Tx FIFO Data | ||
| 82 | */ | ||
| 83 | enum ssp_tx_endian { | ||
| 84 | SSP_TX_MSB, | ||
| 85 | SSP_TX_LSB | ||
| 86 | }; | ||
| 87 | |||
| 88 | /** | ||
| 89 | * enum ssp_data_size - number of bits in one data element | ||
| 90 | */ | ||
| 91 | enum ssp_data_size { | ||
| 92 | SSP_DATA_BITS_4 = 0x03, SSP_DATA_BITS_5, SSP_DATA_BITS_6, | ||
| 93 | SSP_DATA_BITS_7, SSP_DATA_BITS_8, SSP_DATA_BITS_9, | ||
| 94 | SSP_DATA_BITS_10, SSP_DATA_BITS_11, SSP_DATA_BITS_12, | ||
| 95 | SSP_DATA_BITS_13, SSP_DATA_BITS_14, SSP_DATA_BITS_15, | ||
| 96 | SSP_DATA_BITS_16, SSP_DATA_BITS_17, SSP_DATA_BITS_18, | ||
| 97 | SSP_DATA_BITS_19, SSP_DATA_BITS_20, SSP_DATA_BITS_21, | ||
| 98 | SSP_DATA_BITS_22, SSP_DATA_BITS_23, SSP_DATA_BITS_24, | ||
| 99 | SSP_DATA_BITS_25, SSP_DATA_BITS_26, SSP_DATA_BITS_27, | ||
| 100 | SSP_DATA_BITS_28, SSP_DATA_BITS_29, SSP_DATA_BITS_30, | ||
| 101 | SSP_DATA_BITS_31, SSP_DATA_BITS_32 | ||
| 102 | }; | ||
| 103 | |||
| 104 | /** | ||
| 105 | * enum ssp_mode - SSP mode of operation (Communication modes) | ||
| 106 | */ | ||
| 107 | enum ssp_mode { | ||
| 108 | INTERRUPT_TRANSFER, | ||
| 109 | POLLING_TRANSFER, | ||
| 110 | DMA_TRANSFER | ||
| 111 | }; | ||
| 112 | |||
| 113 | /** | ||
| 114 | * enum ssp_rx_level_trig - receive FIFO watermark level which triggers | ||
| 115 | * IT: Interrupt fires when _N_ or more elements in RX FIFO. | ||
| 116 | */ | ||
| 117 | enum ssp_rx_level_trig { | ||
| 118 | SSP_RX_1_OR_MORE_ELEM, | ||
| 119 | SSP_RX_4_OR_MORE_ELEM, | ||
| 120 | SSP_RX_8_OR_MORE_ELEM, | ||
| 121 | SSP_RX_16_OR_MORE_ELEM, | ||
| 122 | SSP_RX_32_OR_MORE_ELEM | ||
| 123 | }; | ||
| 124 | |||
| 125 | /** | ||
| 126 | * Transmit FIFO watermark level which triggers (IT Interrupt fires | ||
| 127 | * when _N_ or more empty locations in TX FIFO) | ||
| 128 | */ | ||
| 129 | enum ssp_tx_level_trig { | ||
| 130 | SSP_TX_1_OR_MORE_EMPTY_LOC, | ||
| 131 | SSP_TX_4_OR_MORE_EMPTY_LOC, | ||
| 132 | SSP_TX_8_OR_MORE_EMPTY_LOC, | ||
| 133 | SSP_TX_16_OR_MORE_EMPTY_LOC, | ||
| 134 | SSP_TX_32_OR_MORE_EMPTY_LOC | ||
| 135 | }; | ||
| 136 | |||
| 137 | /** | ||
| 138 | * enum SPI Clock Phase - clock phase (Motorola SPI interface only) | ||
| 139 | * @SSP_CLK_RISING_EDGE: Receive data on rising edge | ||
| 140 | * @SSP_CLK_FALLING_EDGE: Receive data on falling edge | ||
| 141 | */ | ||
| 142 | enum ssp_spi_clk_phase { | ||
| 143 | SSP_CLK_RISING_EDGE, | ||
| 144 | SSP_CLK_FALLING_EDGE | ||
| 145 | }; | ||
| 146 | |||
| 147 | /** | ||
| 148 | * enum SPI Clock Polarity - clock polarity (Motorola SPI interface only) | ||
| 149 | * @SSP_CLK_POL_IDLE_LOW: Low inactive level | ||
| 150 | * @SSP_CLK_POL_IDLE_HIGH: High inactive level | ||
| 151 | */ | ||
| 152 | enum ssp_spi_clk_pol { | ||
| 153 | SSP_CLK_POL_IDLE_LOW, | ||
| 154 | SSP_CLK_POL_IDLE_HIGH | ||
| 155 | }; | ||
| 156 | |||
| 157 | /** | ||
| 158 | * Microwire Conrol Lengths Command size in microwire format | ||
| 159 | */ | ||
| 160 | enum ssp_microwire_ctrl_len { | ||
| 161 | SSP_BITS_4 = 0x03, SSP_BITS_5, SSP_BITS_6, | ||
| 162 | SSP_BITS_7, SSP_BITS_8, SSP_BITS_9, | ||
| 163 | SSP_BITS_10, SSP_BITS_11, SSP_BITS_12, | ||
| 164 | SSP_BITS_13, SSP_BITS_14, SSP_BITS_15, | ||
| 165 | SSP_BITS_16, SSP_BITS_17, SSP_BITS_18, | ||
| 166 | SSP_BITS_19, SSP_BITS_20, SSP_BITS_21, | ||
| 167 | SSP_BITS_22, SSP_BITS_23, SSP_BITS_24, | ||
| 168 | SSP_BITS_25, SSP_BITS_26, SSP_BITS_27, | ||
| 169 | SSP_BITS_28, SSP_BITS_29, SSP_BITS_30, | ||
| 170 | SSP_BITS_31, SSP_BITS_32 | ||
| 171 | }; | ||
| 172 | |||
| 173 | /** | ||
| 174 | * enum Microwire Wait State | ||
| 175 | * @SSP_MWIRE_WAIT_ZERO: No wait state inserted after last command bit | ||
| 176 | * @SSP_MWIRE_WAIT_ONE: One wait state inserted after last command bit | ||
| 177 | */ | ||
| 178 | enum ssp_microwire_wait_state { | ||
| 179 | SSP_MWIRE_WAIT_ZERO, | ||
| 180 | SSP_MWIRE_WAIT_ONE | ||
| 181 | }; | ||
| 182 | |||
| 183 | /** | ||
| 184 | * enum Microwire - whether Full/Half Duplex | ||
| 185 | * @SSP_MICROWIRE_CHANNEL_FULL_DUPLEX: SSPTXD becomes bi-directional, | ||
| 186 | * SSPRXD not used | ||
| 187 | * @SSP_MICROWIRE_CHANNEL_HALF_DUPLEX: SSPTXD is an output, SSPRXD is | ||
| 188 | * an input. | ||
| 189 | */ | ||
| 190 | enum ssp_duplex { | ||
| 191 | SSP_MICROWIRE_CHANNEL_FULL_DUPLEX, | ||
| 192 | SSP_MICROWIRE_CHANNEL_HALF_DUPLEX | ||
| 193 | }; | ||
| 194 | |||
| 195 | /** | ||
| 196 | * CHIP select/deselect commands | ||
| 197 | */ | ||
| 198 | enum ssp_chip_select { | ||
| 199 | SSP_CHIP_SELECT, | ||
| 200 | SSP_CHIP_DESELECT | ||
| 201 | }; | ||
| 202 | |||
| 203 | |||
| 204 | /** | ||
| 205 | * struct pl022_ssp_master - device.platform_data for SPI controller devices. | ||
| 206 | * @num_chipselect: chipselects are used to distinguish individual | ||
| 207 | * SPI slaves, and are numbered from zero to num_chipselects - 1. | ||
| 208 | * each slave has a chipselect signal, but it's common that not | ||
| 209 | * every chipselect is connected to a slave. | ||
| 210 | * @enable_dma: if true enables DMA driven transfers. | ||
| 211 | */ | ||
| 212 | struct pl022_ssp_controller { | ||
| 213 | u16 bus_id; | ||
| 214 | u8 num_chipselect; | ||
| 215 | u8 enable_dma:1; | ||
| 216 | }; | ||
| 217 | |||
| 218 | /** | ||
| 219 | * struct ssp_config_chip - spi_board_info.controller_data for SPI | ||
| 220 | * slave devices, copied to spi_device.controller_data. | ||
| 221 | * | ||
| 222 | * @lbm: used for test purpose to internally connect RX and TX | ||
| 223 | * @iface: Interface type(Motorola, TI, Microwire, Universal) | ||
| 224 | * @hierarchy: sets whether interface is master or slave | ||
| 225 | * @slave_tx_disable: SSPTXD is disconnected (in slave mode only) | ||
| 226 | * @clk_freq: Tune freq parameters of SSP(when in master mode) | ||
| 227 | * @endian_rx: Endianess of Data in Rx FIFO | ||
| 228 | * @endian_tx: Endianess of Data in Tx FIFO | ||
| 229 | * @data_size: Width of data element(4 to 32 bits) | ||
| 230 | * @com_mode: communication mode: polling, Interrupt or DMA | ||
| 231 | * @rx_lev_trig: Rx FIFO watermark level (for IT & DMA mode) | ||
| 232 | * @tx_lev_trig: Tx FIFO watermark level (for IT & DMA mode) | ||
| 233 | * @clk_phase: Motorola SPI interface Clock phase | ||
| 234 | * @clk_pol: Motorola SPI interface Clock polarity | ||
| 235 | * @ctrl_len: Microwire interface: Control length | ||
| 236 | * @wait_state: Microwire interface: Wait state | ||
| 237 | * @duplex: Microwire interface: Full/Half duplex | ||
| 238 | * @cs_control: function pointer to board-specific function to | ||
| 239 | * assert/deassert I/O port to control HW generation of devices chip-select. | ||
| 240 | * @dma_xfer_type: Type of DMA xfer (Mem-to-periph or Periph-to-Periph) | ||
| 241 | * @dma_config: DMA configuration for SSP controller and peripheral | ||
| 242 | */ | ||
| 243 | struct pl022_config_chip { | ||
| 244 | struct device *dev; | ||
| 245 | enum ssp_loopback lbm; | ||
| 246 | enum ssp_interface iface; | ||
| 247 | enum ssp_hierarchy hierarchy; | ||
| 248 | bool slave_tx_disable; | ||
| 249 | struct ssp_clock_params clk_freq; | ||
| 250 | enum ssp_rx_endian endian_rx; | ||
| 251 | enum ssp_tx_endian endian_tx; | ||
| 252 | enum ssp_data_size data_size; | ||
| 253 | enum ssp_mode com_mode; | ||
| 254 | enum ssp_rx_level_trig rx_lev_trig; | ||
| 255 | enum ssp_tx_level_trig tx_lev_trig; | ||
| 256 | enum ssp_spi_clk_phase clk_phase; | ||
| 257 | enum ssp_spi_clk_pol clk_pol; | ||
| 258 | enum ssp_microwire_ctrl_len ctrl_len; | ||
| 259 | enum ssp_microwire_wait_state wait_state; | ||
| 260 | enum ssp_duplex duplex; | ||
| 261 | void (*cs_control) (u32 control); | ||
| 262 | }; | ||
| 263 | |||
| 264 | #endif /* _SSP_PL022_H */ | ||
diff --git a/include/linux/amba/serial.h b/include/linux/amba/serial.h index 64a982ea5d5f..5a5a7fd62490 100644 --- a/include/linux/amba/serial.h +++ b/include/linux/amba/serial.h | |||
| @@ -114,6 +114,9 @@ | |||
| 114 | #define UART011_IFLS_TX4_8 (2 << 0) | 114 | #define UART011_IFLS_TX4_8 (2 << 0) |
| 115 | #define UART011_IFLS_TX6_8 (3 << 0) | 115 | #define UART011_IFLS_TX6_8 (3 << 0) |
| 116 | #define UART011_IFLS_TX7_8 (4 << 0) | 116 | #define UART011_IFLS_TX7_8 (4 << 0) |
| 117 | /* special values for ST vendor with deeper fifo */ | ||
| 118 | #define UART011_IFLS_RX_HALF (5 << 3) | ||
| 119 | #define UART011_IFLS_TX_HALF (5 << 0) | ||
| 117 | 120 | ||
| 118 | #define UART011_OEIM (1 << 10) /* overrun error interrupt mask */ | 121 | #define UART011_OEIM (1 << 10) /* overrun error interrupt mask */ |
| 119 | #define UART011_BEIM (1 << 9) /* break error interrupt mask */ | 122 | #define UART011_BEIM (1 << 9) /* break error interrupt mask */ |
diff --git a/include/linux/atmel-mci.h b/include/linux/atmel-mci.h index 2f1f95737acb..57b1846a3c87 100644 --- a/include/linux/atmel-mci.h +++ b/include/linux/atmel-mci.h | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | * @bus_width: Number of data lines wired up the slot | 10 | * @bus_width: Number of data lines wired up the slot |
| 11 | * @detect_pin: GPIO pin wired to the card detect switch | 11 | * @detect_pin: GPIO pin wired to the card detect switch |
| 12 | * @wp_pin: GPIO pin wired to the write protect sensor | 12 | * @wp_pin: GPIO pin wired to the write protect sensor |
| 13 | * @detect_is_active_high: The state of the detect pin when it is active | ||
| 13 | * | 14 | * |
| 14 | * If a given slot is not present on the board, @bus_width should be | 15 | * If a given slot is not present on the board, @bus_width should be |
| 15 | * set to 0. The other fields are ignored in this case. | 16 | * set to 0. The other fields are ignored in this case. |
| @@ -24,6 +25,7 @@ struct mci_slot_pdata { | |||
| 24 | unsigned int bus_width; | 25 | unsigned int bus_width; |
| 25 | int detect_pin; | 26 | int detect_pin; |
| 26 | int wp_pin; | 27 | int wp_pin; |
| 28 | bool detect_is_active_high; | ||
| 27 | }; | 29 | }; |
| 28 | 30 | ||
| 29 | /** | 31 | /** |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 12737be58601..2a04eb54c0dd 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
| @@ -590,6 +590,11 @@ static inline void bio_list_merge_head(struct bio_list *bl, | |||
| 590 | bl->head = bl2->head; | 590 | bl->head = bl2->head; |
| 591 | } | 591 | } |
| 592 | 592 | ||
| 593 | static inline struct bio *bio_list_peek(struct bio_list *bl) | ||
| 594 | { | ||
| 595 | return bl->head; | ||
| 596 | } | ||
| 597 | |||
| 593 | static inline struct bio *bio_list_pop(struct bio_list *bl) | 598 | static inline struct bio *bio_list_pop(struct bio_list *bl) |
| 594 | { | 599 | { |
| 595 | struct bio *bio = bl->head; | 600 | struct bio *bio = bl->head; |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index ebdfde8fe556..8963d9149b5f 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -926,6 +926,7 @@ extern void blk_queue_alignment_offset(struct request_queue *q, | |||
| 926 | unsigned int alignment); | 926 | unsigned int alignment); |
| 927 | extern void blk_queue_io_min(struct request_queue *q, unsigned int min); | 927 | extern void blk_queue_io_min(struct request_queue *q, unsigned int min); |
| 928 | extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); | 928 | extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); |
| 929 | extern void blk_set_default_limits(struct queue_limits *lim); | ||
| 929 | extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, | 930 | extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, |
| 930 | sector_t offset); | 931 | sector_t offset); |
| 931 | extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, | 932 | extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, |
| @@ -1226,6 +1227,8 @@ struct block_device_operations { | |||
| 1226 | int (*direct_access) (struct block_device *, sector_t, | 1227 | int (*direct_access) (struct block_device *, sector_t, |
| 1227 | void **, unsigned long *); | 1228 | void **, unsigned long *); |
| 1228 | int (*media_changed) (struct gendisk *); | 1229 | int (*media_changed) (struct gendisk *); |
| 1230 | unsigned long long (*set_capacity) (struct gendisk *, | ||
| 1231 | unsigned long long); | ||
| 1229 | int (*revalidate_disk) (struct gendisk *); | 1232 | int (*revalidate_disk) (struct gendisk *); |
| 1230 | int (*getgeo)(struct block_device *, struct hd_geometry *); | 1233 | int (*getgeo)(struct block_device *, struct hd_geometry *); |
| 1231 | struct module *owner; | 1234 | struct module *owner; |
diff --git a/include/linux/can/Kbuild b/include/linux/can/Kbuild index eff898aac02b..8cb05aae661c 100644 --- a/include/linux/can/Kbuild +++ b/include/linux/can/Kbuild | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | header-y += raw.h | 1 | header-y += raw.h |
| 2 | header-y += bcm.h | 2 | header-y += bcm.h |
| 3 | header-y += error.h | 3 | header-y += error.h |
| 4 | header-y += netlink.h | ||
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h new file mode 100644 index 000000000000..4a37a56f6cdd --- /dev/null +++ b/include/linux/can/dev.h | |||
| @@ -0,0 +1,70 @@ | |||
| 1 | /* | ||
| 2 | * linux/can/dev.h | ||
| 3 | * | ||
| 4 | * Definitions for the CAN network device driver interface | ||
| 5 | * | ||
| 6 | * Copyright (C) 2006 Andrey Volkov <avolkov@varma-el.com> | ||
| 7 | * Varma Electronics Oy | ||
| 8 | * | ||
| 9 | * Copyright (C) 2008 Wolfgang Grandegger <wg@grandegger.com> | ||
| 10 | * | ||
| 11 | * Send feedback to <socketcan-users@lists.berlios.de> | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef CAN_DEV_H | ||
| 15 | #define CAN_DEV_H | ||
| 16 | |||
| 17 | #include <linux/can/netlink.h> | ||
| 18 | #include <linux/can/error.h> | ||
| 19 | |||
| 20 | /* | ||
| 21 | * CAN mode | ||
| 22 | */ | ||
| 23 | enum can_mode { | ||
| 24 | CAN_MODE_STOP = 0, | ||
| 25 | CAN_MODE_START, | ||
| 26 | CAN_MODE_SLEEP | ||
| 27 | }; | ||
| 28 | |||
| 29 | /* | ||
| 30 | * CAN common private data | ||
| 31 | */ | ||
| 32 | #define CAN_ECHO_SKB_MAX 4 | ||
| 33 | |||
| 34 | struct can_priv { | ||
| 35 | struct can_device_stats can_stats; | ||
| 36 | |||
| 37 | struct can_bittiming bittiming; | ||
| 38 | struct can_bittiming_const *bittiming_const; | ||
| 39 | struct can_clock clock; | ||
| 40 | |||
| 41 | enum can_state state; | ||
| 42 | u32 ctrlmode; | ||
| 43 | |||
| 44 | int restart_ms; | ||
| 45 | struct timer_list restart_timer; | ||
| 46 | |||
| 47 | struct sk_buff *echo_skb[CAN_ECHO_SKB_MAX]; | ||
| 48 | |||
| 49 | int (*do_set_bittiming)(struct net_device *dev); | ||
| 50 | int (*do_set_mode)(struct net_device *dev, enum can_mode mode); | ||
| 51 | int (*do_get_state)(const struct net_device *dev, | ||
| 52 | enum can_state *state); | ||
| 53 | }; | ||
| 54 | |||
| 55 | struct net_device *alloc_candev(int sizeof_priv); | ||
| 56 | void free_candev(struct net_device *dev); | ||
| 57 | |||
| 58 | int open_candev(struct net_device *dev); | ||
| 59 | void close_candev(struct net_device *dev); | ||
| 60 | |||
| 61 | int register_candev(struct net_device *dev); | ||
| 62 | void unregister_candev(struct net_device *dev); | ||
| 63 | |||
| 64 | int can_restart_now(struct net_device *dev); | ||
| 65 | void can_bus_off(struct net_device *dev); | ||
| 66 | |||
| 67 | void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx); | ||
| 68 | void can_get_echo_skb(struct net_device *dev, int idx); | ||
| 69 | |||
| 70 | #endif /* CAN_DEV_H */ | ||
diff --git a/include/linux/can/netlink.h b/include/linux/can/netlink.h new file mode 100644 index 000000000000..9ecbb7871c0e --- /dev/null +++ b/include/linux/can/netlink.h | |||
| @@ -0,0 +1,113 @@ | |||
| 1 | /* | ||
| 2 | * linux/can/netlink.h | ||
| 3 | * | ||
| 4 | * Definitions for the CAN netlink interface | ||
| 5 | * | ||
| 6 | * Copyright (c) 2009 Wolfgang Grandegger <wg@grandegger.com> | ||
| 7 | * | ||
| 8 | * Send feedback to <socketcan-users@lists.berlios.de> | ||
| 9 | * | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef CAN_NETLINK_H | ||
| 13 | #define CAN_NETLINK_H | ||
| 14 | |||
| 15 | #include <linux/types.h> | ||
| 16 | |||
| 17 | /* | ||
| 18 | * CAN bit-timing parameters | ||
| 19 | * | ||
| 20 | * For futher information, please read chapter "8 BIT TIMING | ||
| 21 | * REQUIREMENTS" of the "Bosch CAN Specification version 2.0" | ||
| 22 | * at http://www.semiconductors.bosch.de/pdf/can2spec.pdf. | ||
| 23 | */ | ||
| 24 | struct can_bittiming { | ||
| 25 | __u32 bitrate; /* Bit-rate in bits/second */ | ||
| 26 | __u32 sample_point; /* Sample point in one-tenth of a percent */ | ||
| 27 | __u32 tq; /* Time quanta (TQ) in nanoseconds */ | ||
| 28 | __u32 prop_seg; /* Propagation segment in TQs */ | ||
| 29 | __u32 phase_seg1; /* Phase buffer segment 1 in TQs */ | ||
| 30 | __u32 phase_seg2; /* Phase buffer segment 2 in TQs */ | ||
| 31 | __u32 sjw; /* Synchronisation jump width in TQs */ | ||
| 32 | __u32 brp; /* Bit-rate prescaler */ | ||
| 33 | }; | ||
| 34 | |||
| 35 | /* | ||
| 36 | * CAN harware-dependent bit-timing constant | ||
| 37 | * | ||
| 38 | * Used for calculating and checking bit-timing parameters | ||
| 39 | */ | ||
| 40 | struct can_bittiming_const { | ||
| 41 | char name[16]; /* Name of the CAN controller hardware */ | ||
| 42 | __u32 tseg1_min; /* Time segement 1 = prop_seg + phase_seg1 */ | ||
| 43 | __u32 tseg1_max; | ||
| 44 | __u32 tseg2_min; /* Time segement 2 = phase_seg2 */ | ||
| 45 | __u32 tseg2_max; | ||
| 46 | __u32 sjw_max; /* Synchronisation jump width */ | ||
| 47 | __u32 brp_min; /* Bit-rate prescaler */ | ||
| 48 | __u32 brp_max; | ||
| 49 | __u32 brp_inc; | ||
| 50 | }; | ||
| 51 | |||
| 52 | /* | ||
| 53 | * CAN clock parameters | ||
| 54 | */ | ||
| 55 | struct can_clock { | ||
| 56 | __u32 freq; /* CAN system clock frequency in Hz */ | ||
| 57 | }; | ||
| 58 | |||
| 59 | /* | ||
| 60 | * CAN operational and error states | ||
| 61 | */ | ||
| 62 | enum can_state { | ||
| 63 | CAN_STATE_ERROR_ACTIVE = 0, /* RX/TX error count < 96 */ | ||
| 64 | CAN_STATE_ERROR_WARNING, /* RX/TX error count < 128 */ | ||
| 65 | CAN_STATE_ERROR_PASSIVE, /* RX/TX error count < 256 */ | ||
| 66 | CAN_STATE_BUS_OFF, /* RX/TX error count >= 256 */ | ||
| 67 | CAN_STATE_STOPPED, /* Device is stopped */ | ||
| 68 | CAN_STATE_SLEEPING, /* Device is sleeping */ | ||
| 69 | CAN_STATE_MAX | ||
| 70 | }; | ||
| 71 | |||
| 72 | /* | ||
| 73 | * CAN controller mode | ||
| 74 | */ | ||
| 75 | struct can_ctrlmode { | ||
| 76 | __u32 mask; | ||
| 77 | __u32 flags; | ||
| 78 | }; | ||
| 79 | |||
| 80 | #define CAN_CTRLMODE_LOOPBACK 0x1 /* Loopback mode */ | ||
| 81 | #define CAN_CTRLMODE_LISTENONLY 0x2 /* Listen-only mode */ | ||
| 82 | #define CAN_CTRLMODE_3_SAMPLES 0x4 /* Triple sampling mode */ | ||
| 83 | |||
| 84 | /* | ||
| 85 | * CAN device statistics | ||
| 86 | */ | ||
| 87 | struct can_device_stats { | ||
| 88 | __u32 bus_error; /* Bus errors */ | ||
| 89 | __u32 error_warning; /* Changes to error warning state */ | ||
| 90 | __u32 error_passive; /* Changes to error passive state */ | ||
| 91 | __u32 bus_off; /* Changes to bus off state */ | ||
| 92 | __u32 arbitration_lost; /* Arbitration lost errors */ | ||
| 93 | __u32 restarts; /* CAN controller re-starts */ | ||
| 94 | }; | ||
| 95 | |||
| 96 | /* | ||
| 97 | * CAN netlink interface | ||
| 98 | */ | ||
| 99 | enum { | ||
| 100 | IFLA_CAN_UNSPEC, | ||
| 101 | IFLA_CAN_BITTIMING, | ||
| 102 | IFLA_CAN_BITTIMING_CONST, | ||
| 103 | IFLA_CAN_CLOCK, | ||
| 104 | IFLA_CAN_STATE, | ||
| 105 | IFLA_CAN_CTRLMODE, | ||
| 106 | IFLA_CAN_RESTART_MS, | ||
| 107 | IFLA_CAN_RESTART, | ||
| 108 | __IFLA_CAN_MAX | ||
| 109 | }; | ||
| 110 | |||
| 111 | #define IFLA_CAN_MAX (__IFLA_CAN_MAX - 1) | ||
| 112 | |||
| 113 | #endif /* CAN_NETLINK_H */ | ||
diff --git a/include/linux/can/platform/sja1000.h b/include/linux/can/platform/sja1000.h new file mode 100644 index 000000000000..01ee2aeb048d --- /dev/null +++ b/include/linux/can/platform/sja1000.h | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | #ifndef _CAN_PLATFORM_SJA1000_H_ | ||
| 2 | #define _CAN_PLATFORM_SJA1000_H_ | ||
| 3 | |||
| 4 | /* clock divider register */ | ||
| 5 | #define CDR_CLKOUT_MASK 0x07 | ||
| 6 | #define CDR_CLK_OFF 0x08 /* Clock off (CLKOUT pin) */ | ||
| 7 | #define CDR_RXINPEN 0x20 /* TX1 output is RX irq output */ | ||
| 8 | #define CDR_CBP 0x40 /* CAN input comparator bypass */ | ||
| 9 | #define CDR_PELICAN 0x80 /* PeliCAN mode */ | ||
| 10 | |||
| 11 | /* output control register */ | ||
| 12 | #define OCR_MODE_BIPHASE 0x00 | ||
| 13 | #define OCR_MODE_TEST 0x01 | ||
| 14 | #define OCR_MODE_NORMAL 0x02 | ||
| 15 | #define OCR_MODE_CLOCK 0x03 | ||
| 16 | #define OCR_MODE_MASK 0x07 | ||
| 17 | #define OCR_TX0_INVERT 0x04 | ||
| 18 | #define OCR_TX0_PULLDOWN 0x08 | ||
| 19 | #define OCR_TX0_PULLUP 0x10 | ||
| 20 | #define OCR_TX0_PUSHPULL 0x18 | ||
| 21 | #define OCR_TX1_INVERT 0x20 | ||
| 22 | #define OCR_TX1_PULLDOWN 0x40 | ||
| 23 | #define OCR_TX1_PULLUP 0x80 | ||
| 24 | #define OCR_TX1_PUSHPULL 0xc0 | ||
| 25 | #define OCR_TX_MASK 0xfc | ||
| 26 | #define OCR_TX_SHIFT 2 | ||
| 27 | |||
| 28 | struct sja1000_platform_data { | ||
| 29 | u32 clock; /* CAN bus oscillator frequency in Hz */ | ||
| 30 | |||
| 31 | u8 ocr; /* output control register */ | ||
| 32 | u8 cdr; /* clock divider register */ | ||
| 33 | }; | ||
| 34 | |||
| 35 | #endif /* !_CAN_PLATFORM_SJA1000_H_ */ | ||
diff --git a/include/linux/cb710.h b/include/linux/cb710.h new file mode 100644 index 000000000000..63bc9a4d2926 --- /dev/null +++ b/include/linux/cb710.h | |||
| @@ -0,0 +1,231 @@ | |||
| 1 | /* | ||
| 2 | * cb710/cb710.h | ||
| 3 | * | ||
| 4 | * Copyright by Michał Mirosław, 2008-2009 | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | #ifndef LINUX_CB710_DRIVER_H | ||
| 11 | #define LINUX_CB710_DRIVER_H | ||
| 12 | |||
| 13 | #include <linux/io.h> | ||
| 14 | #include <linux/interrupt.h> | ||
| 15 | #include <linux/spinlock.h> | ||
| 16 | #include <linux/pci.h> | ||
| 17 | #include <linux/platform_device.h> | ||
| 18 | #include <linux/mmc/host.h> | ||
| 19 | |||
| 20 | struct cb710_slot; | ||
| 21 | |||
| 22 | typedef int (*cb710_irq_handler_t)(struct cb710_slot *); | ||
| 23 | |||
| 24 | /* per-virtual-slot structure */ | ||
| 25 | struct cb710_slot { | ||
| 26 | struct platform_device pdev; | ||
| 27 | void __iomem *iobase; | ||
| 28 | cb710_irq_handler_t irq_handler; | ||
| 29 | }; | ||
| 30 | |||
| 31 | /* per-device structure */ | ||
| 32 | struct cb710_chip { | ||
| 33 | struct pci_dev *pdev; | ||
| 34 | void __iomem *iobase; | ||
| 35 | unsigned platform_id; | ||
| 36 | #ifdef CONFIG_CB710_DEBUG_ASSUMPTIONS | ||
| 37 | atomic_t slot_refs_count; | ||
| 38 | #endif | ||
| 39 | unsigned slot_mask; | ||
| 40 | unsigned slots; | ||
| 41 | spinlock_t irq_lock; | ||
| 42 | struct cb710_slot slot[0]; | ||
| 43 | }; | ||
| 44 | |||
| 45 | /* NOTE: cb710_chip.slots is modified only during device init/exit and | ||
| 46 | * they are all serialized wrt themselves */ | ||
| 47 | |||
| 48 | /* cb710_chip.slot_mask values */ | ||
| 49 | #define CB710_SLOT_MMC 1 | ||
| 50 | #define CB710_SLOT_MS 2 | ||
| 51 | #define CB710_SLOT_SM 4 | ||
| 52 | |||
| 53 | /* slot port accessors - so the logic is more clear in the code */ | ||
| 54 | #define CB710_PORT_ACCESSORS(t) \ | ||
| 55 | static inline void cb710_write_port_##t(struct cb710_slot *slot, \ | ||
| 56 | unsigned port, u##t value) \ | ||
| 57 | { \ | ||
| 58 | iowrite##t(value, slot->iobase + port); \ | ||
| 59 | } \ | ||
| 60 | \ | ||
| 61 | static inline u##t cb710_read_port_##t(struct cb710_slot *slot, \ | ||
| 62 | unsigned port) \ | ||
| 63 | { \ | ||
| 64 | return ioread##t(slot->iobase + port); \ | ||
| 65 | } \ | ||
| 66 | \ | ||
| 67 | static inline void cb710_modify_port_##t(struct cb710_slot *slot, \ | ||
| 68 | unsigned port, u##t set, u##t clear) \ | ||
| 69 | { \ | ||
| 70 | iowrite##t( \ | ||
| 71 | (ioread##t(slot->iobase + port) & ~clear)|set, \ | ||
| 72 | slot->iobase + port); \ | ||
| 73 | } | ||
| 74 | |||
| 75 | CB710_PORT_ACCESSORS(8) | ||
| 76 | CB710_PORT_ACCESSORS(16) | ||
| 77 | CB710_PORT_ACCESSORS(32) | ||
| 78 | |||
| 79 | void cb710_pci_update_config_reg(struct pci_dev *pdev, | ||
| 80 | int reg, uint32_t and, uint32_t xor); | ||
| 81 | void cb710_set_irq_handler(struct cb710_slot *slot, | ||
| 82 | cb710_irq_handler_t handler); | ||
| 83 | |||
| 84 | /* some device struct walking */ | ||
| 85 | |||
| 86 | static inline struct cb710_slot *cb710_pdev_to_slot( | ||
| 87 | struct platform_device *pdev) | ||
| 88 | { | ||
| 89 | return container_of(pdev, struct cb710_slot, pdev); | ||
| 90 | } | ||
| 91 | |||
| 92 | static inline struct cb710_chip *cb710_slot_to_chip(struct cb710_slot *slot) | ||
| 93 | { | ||
| 94 | return dev_get_drvdata(slot->pdev.dev.parent); | ||
| 95 | } | ||
| 96 | |||
| 97 | static inline struct device *cb710_slot_dev(struct cb710_slot *slot) | ||
| 98 | { | ||
| 99 | return &slot->pdev.dev; | ||
| 100 | } | ||
| 101 | |||
| 102 | static inline struct device *cb710_chip_dev(struct cb710_chip *chip) | ||
| 103 | { | ||
| 104 | return &chip->pdev->dev; | ||
| 105 | } | ||
| 106 | |||
| 107 | /* debugging aids */ | ||
| 108 | |||
| 109 | #ifdef CONFIG_CB710_DEBUG | ||
| 110 | void cb710_dump_regs(struct cb710_chip *chip, unsigned dump); | ||
| 111 | #else | ||
| 112 | #define cb710_dump_regs(c, d) do {} while (0) | ||
| 113 | #endif | ||
| 114 | |||
| 115 | #define CB710_DUMP_REGS_MMC 0x0F | ||
| 116 | #define CB710_DUMP_REGS_MS 0x30 | ||
| 117 | #define CB710_DUMP_REGS_SM 0xC0 | ||
| 118 | #define CB710_DUMP_REGS_ALL 0xFF | ||
| 119 | #define CB710_DUMP_REGS_MASK 0xFF | ||
| 120 | |||
| 121 | #define CB710_DUMP_ACCESS_8 0x100 | ||
| 122 | #define CB710_DUMP_ACCESS_16 0x200 | ||
| 123 | #define CB710_DUMP_ACCESS_32 0x400 | ||
| 124 | #define CB710_DUMP_ACCESS_ALL 0x700 | ||
| 125 | #define CB710_DUMP_ACCESS_MASK 0x700 | ||
| 126 | |||
| 127 | #endif /* LINUX_CB710_DRIVER_H */ | ||
| 128 | /* | ||
| 129 | * cb710/sgbuf2.h | ||
| 130 | * | ||
| 131 | * Copyright by Michał Mirosław, 2008-2009 | ||
| 132 | * | ||
| 133 | * This program is free software; you can redistribute it and/or modify | ||
| 134 | * it under the terms of the GNU General Public License version 2 as | ||
| 135 | * published by the Free Software Foundation. | ||
| 136 | */ | ||
| 137 | #ifndef LINUX_CB710_SG_H | ||
| 138 | #define LINUX_CB710_SG_H | ||
| 139 | |||
| 140 | #include <linux/highmem.h> | ||
| 141 | #include <linux/scatterlist.h> | ||
| 142 | |||
| 143 | /** | ||
| 144 | * cb710_sg_miter_stop_writing - stop mapping iteration after writing | ||
| 145 | * @miter: sg mapping iter to be stopped | ||
| 146 | * | ||
| 147 | * Description: | ||
| 148 | * Stops mapping iterator @miter. @miter should have been started | ||
| 149 | * started using sg_miter_start(). A stopped iteration can be | ||
| 150 | * resumed by calling sg_miter_next() on it. This is useful when | ||
| 151 | * resources (kmap) need to be released during iteration. | ||
| 152 | * | ||
| 153 | * This is a convenience wrapper that will be optimized out for arches | ||
| 154 | * that don't need flush_kernel_dcache_page(). | ||
| 155 | * | ||
| 156 | * Context: | ||
| 157 | * IRQ disabled if the SG_MITER_ATOMIC is set. Don't care otherwise. | ||
| 158 | */ | ||
| 159 | static inline void cb710_sg_miter_stop_writing(struct sg_mapping_iter *miter) | ||
| 160 | { | ||
| 161 | if (miter->page) | ||
| 162 | flush_kernel_dcache_page(miter->page); | ||
| 163 | sg_miter_stop(miter); | ||
| 164 | } | ||
| 165 | |||
| 166 | /* | ||
| 167 | * 32-bit PIO mapping sg iterator | ||
| 168 | * | ||
| 169 | * Hides scatterlist access issues - fragment boundaries, alignment, page | ||
| 170 | * mapping - for drivers using 32-bit-word-at-a-time-PIO (ie. PCI devices | ||
| 171 | * without DMA support). | ||
| 172 | * | ||
| 173 | * Best-case reading (transfer from device): | ||
| 174 | * sg_miter_start(); | ||
| 175 | * cb710_sg_dwiter_write_from_io(); | ||
| 176 | * cb710_sg_miter_stop_writing(); | ||
| 177 | * | ||
| 178 | * Best-case writing (transfer to device): | ||
| 179 | * sg_miter_start(); | ||
| 180 | * cb710_sg_dwiter_read_to_io(); | ||
| 181 | * sg_miter_stop(); | ||
| 182 | */ | ||
| 183 | |||
| 184 | uint32_t cb710_sg_dwiter_read_next_block(struct sg_mapping_iter *miter); | ||
| 185 | void cb710_sg_dwiter_write_next_block(struct sg_mapping_iter *miter, uint32_t data); | ||
| 186 | |||
| 187 | /** | ||
| 188 | * cb710_sg_dwiter_write_from_io - transfer data to mapped buffer from 32-bit IO port | ||
| 189 | * @miter: sg mapping iter | ||
| 190 | * @port: PIO port - IO or MMIO address | ||
| 191 | * @count: number of 32-bit words to transfer | ||
| 192 | * | ||
| 193 | * Description: | ||
| 194 | * Reads @count 32-bit words from register @port and stores it in | ||
| 195 | * buffer iterated by @miter. Data that would overflow the buffer | ||
| 196 | * is silently ignored. Iterator is advanced by 4*@count bytes | ||
| 197 | * or to the buffer's end whichever is closer. | ||
| 198 | * | ||
| 199 | * Context: | ||
| 200 | * IRQ disabled if the SG_MITER_ATOMIC is set. Don't care otherwise. | ||
| 201 | */ | ||
| 202 | static inline void cb710_sg_dwiter_write_from_io(struct sg_mapping_iter *miter, | ||
| 203 | void __iomem *port, size_t count) | ||
| 204 | { | ||
| 205 | while (count-- > 0) | ||
| 206 | cb710_sg_dwiter_write_next_block(miter, ioread32(port)); | ||
| 207 | } | ||
| 208 | |||
| 209 | /** | ||
| 210 | * cb710_sg_dwiter_read_to_io - transfer data to 32-bit IO port from mapped buffer | ||
| 211 | * @miter: sg mapping iter | ||
| 212 | * @port: PIO port - IO or MMIO address | ||
| 213 | * @count: number of 32-bit words to transfer | ||
| 214 | * | ||
| 215 | * Description: | ||
| 216 | * Writes @count 32-bit words to register @port from buffer iterated | ||
| 217 | * through @miter. If buffer ends before @count words are written | ||
| 218 | * missing data is replaced by zeroes. @miter is advanced by 4*@count | ||
| 219 | * bytes or to the buffer's end whichever is closer. | ||
| 220 | * | ||
| 221 | * Context: | ||
| 222 | * IRQ disabled if the SG_MITER_ATOMIC is set. Don't care otherwise. | ||
| 223 | */ | ||
| 224 | static inline void cb710_sg_dwiter_read_to_io(struct sg_mapping_iter *miter, | ||
| 225 | void __iomem *port, size_t count) | ||
| 226 | { | ||
| 227 | while (count-- > 0) | ||
| 228 | iowrite32(cb710_sg_dwiter_read_next_block(miter), port); | ||
| 229 | } | ||
| 230 | |||
| 231 | #endif /* LINUX_CB710_SG_H */ | ||
diff --git a/include/linux/cdev.h b/include/linux/cdev.h index fb4591977b03..f389e319a454 100644 --- a/include/linux/cdev.h +++ b/include/linux/cdev.h | |||
| @@ -28,6 +28,8 @@ int cdev_add(struct cdev *, dev_t, unsigned); | |||
| 28 | 28 | ||
| 29 | void cdev_del(struct cdev *); | 29 | void cdev_del(struct cdev *); |
| 30 | 30 | ||
| 31 | int cdev_index(struct inode *inode); | ||
| 32 | |||
| 31 | void cd_forget(struct inode *); | 33 | void cd_forget(struct inode *); |
| 32 | 34 | ||
| 33 | extern struct backing_dev_info directly_mappable_cdev_bdi; | 35 | extern struct backing_dev_info directly_mappable_cdev_bdi; |
diff --git a/include/linux/clk.h b/include/linux/clk.h index 1db9bbf444a3..1d37f42ac294 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h | |||
| @@ -142,4 +142,17 @@ struct clk *clk_get_parent(struct clk *clk); | |||
| 142 | */ | 142 | */ |
| 143 | struct clk *clk_get_sys(const char *dev_id, const char *con_id); | 143 | struct clk *clk_get_sys(const char *dev_id, const char *con_id); |
| 144 | 144 | ||
| 145 | /** | ||
| 146 | * clk_add_alias - add a new clock alias | ||
| 147 | * @alias: name for clock alias | ||
| 148 | * @alias_dev_name: device name | ||
| 149 | * @id: platform specific clock name | ||
| 150 | * @dev: device | ||
| 151 | * | ||
| 152 | * Allows using generic clock names for drivers by adding a new alias. | ||
| 153 | * Assumes clkdev, see clkdev.h for more info. | ||
| 154 | */ | ||
| 155 | int clk_add_alias(const char *alias, const char *alias_dev_name, char *id, | ||
| 156 | struct device *dev); | ||
| 157 | |||
| 145 | #endif | 158 | #endif |
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 3a1dbba4d3ae..20a100fe2b4f 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h | |||
| @@ -143,3 +143,12 @@ extern void clockevents_notify(unsigned long reason, void *arg); | |||
| 143 | #endif | 143 | #endif |
| 144 | 144 | ||
| 145 | #endif | 145 | #endif |
| 146 | |||
| 147 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | ||
| 148 | extern ktime_t clockevents_get_next_event(int cpu); | ||
| 149 | #else | ||
| 150 | static inline ktime_t clockevents_get_next_event(int cpu) | ||
| 151 | { | ||
| 152 | return (ktime_t) { .tv64 = KTIME_MAX }; | ||
| 153 | } | ||
| 154 | #endif | ||
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 37bcb50a4d7c..04fb5135b4e1 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
| @@ -261,6 +261,11 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); | |||
| 261 | # define __section(S) __attribute__ ((__section__(#S))) | 261 | # define __section(S) __attribute__ ((__section__(#S))) |
| 262 | #endif | 262 | #endif |
| 263 | 263 | ||
| 264 | /* Are two types/vars the same type (ignoring qualifiers)? */ | ||
| 265 | #ifndef __same_type | ||
| 266 | # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) | ||
| 267 | #endif | ||
| 268 | |||
| 264 | /* | 269 | /* |
| 265 | * Prevent the compiler from merging or refetching accesses. The compiler | 270 | * Prevent the compiler from merging or refetching accesses. The compiler |
| 266 | * is also forbidden from reordering successive instances of ACCESS_ONCE(), | 271 | * is also forbidden from reordering successive instances of ACCESS_ONCE(), |
diff --git a/include/linux/cramfs_fs.h b/include/linux/cramfs_fs.h index 3be4e5a27d82..6fc2bed368b8 100644 --- a/include/linux/cramfs_fs.h +++ b/include/linux/cramfs_fs.h | |||
| @@ -2,9 +2,8 @@ | |||
| 2 | #define __CRAMFS_H | 2 | #define __CRAMFS_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/magic.h> | ||
| 5 | 6 | ||
| 6 | #define CRAMFS_MAGIC 0x28cd3d45 /* some random number */ | ||
| 7 | #define CRAMFS_MAGIC_WEND 0x453dcd28 /* magic number with the wrong endianess */ | ||
| 8 | #define CRAMFS_SIGNATURE "Compressed ROMFS" | 7 | #define CRAMFS_SIGNATURE "Compressed ROMFS" |
| 9 | 8 | ||
| 10 | /* | 9 | /* |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 15156364d196..30b93b2a01a4 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
| @@ -180,10 +180,12 @@ d_iput: no no no yes | |||
| 180 | #define DCACHE_REFERENCED 0x0008 /* Recently used, don't discard. */ | 180 | #define DCACHE_REFERENCED 0x0008 /* Recently used, don't discard. */ |
| 181 | #define DCACHE_UNHASHED 0x0010 | 181 | #define DCACHE_UNHASHED 0x0010 |
| 182 | 182 | ||
| 183 | #define DCACHE_INOTIFY_PARENT_WATCHED 0x0020 /* Parent inode is watched */ | 183 | #define DCACHE_INOTIFY_PARENT_WATCHED 0x0020 /* Parent inode is watched by inotify */ |
| 184 | 184 | ||
| 185 | #define DCACHE_COOKIE 0x0040 /* For use by dcookie subsystem */ | 185 | #define DCACHE_COOKIE 0x0040 /* For use by dcookie subsystem */ |
| 186 | 186 | ||
| 187 | #define DCACHE_FSNOTIFY_PARENT_WATCHED 0x0080 /* Parent inode is watched by some fsnotify listener */ | ||
| 188 | |||
| 187 | extern spinlock_t dcache_lock; | 189 | extern spinlock_t dcache_lock; |
| 188 | extern seqlock_t rename_lock; | 190 | extern seqlock_t rename_lock; |
| 189 | 191 | ||
| @@ -351,6 +353,11 @@ static inline int d_unhashed(struct dentry *dentry) | |||
| 351 | return (dentry->d_flags & DCACHE_UNHASHED); | 353 | return (dentry->d_flags & DCACHE_UNHASHED); |
| 352 | } | 354 | } |
| 353 | 355 | ||
| 356 | static inline int d_unlinked(struct dentry *dentry) | ||
| 357 | { | ||
| 358 | return d_unhashed(dentry) && !IS_ROOT(dentry); | ||
| 359 | } | ||
| 360 | |||
| 354 | static inline struct dentry *dget_parent(struct dentry *dentry) | 361 | static inline struct dentry *dget_parent(struct dentry *dentry) |
| 355 | { | 362 | { |
| 356 | struct dentry *ret; | 363 | struct dentry *ret; |
| @@ -368,7 +375,7 @@ static inline int d_mountpoint(struct dentry *dentry) | |||
| 368 | return dentry->d_mounted; | 375 | return dentry->d_mounted; |
| 369 | } | 376 | } |
| 370 | 377 | ||
| 371 | extern struct vfsmount *lookup_mnt(struct vfsmount *, struct dentry *); | 378 | extern struct vfsmount *lookup_mnt(struct path *); |
| 372 | extern struct dentry *lookup_create(struct nameidata *nd, int is_dir); | 379 | extern struct dentry *lookup_create(struct nameidata *nd, int is_dir); |
| 373 | 380 | ||
| 374 | extern int sysctl_vfs_cache_pressure; | 381 | extern int sysctl_vfs_cache_pressure; |
diff --git a/include/linux/device.h b/include/linux/device.h index 5d5c197bad45..a4a7b10aaa48 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -62,8 +62,6 @@ struct bus_type { | |||
| 62 | void (*shutdown)(struct device *dev); | 62 | void (*shutdown)(struct device *dev); |
| 63 | 63 | ||
| 64 | int (*suspend)(struct device *dev, pm_message_t state); | 64 | int (*suspend)(struct device *dev, pm_message_t state); |
| 65 | int (*suspend_late)(struct device *dev, pm_message_t state); | ||
| 66 | int (*resume_early)(struct device *dev); | ||
| 67 | int (*resume)(struct device *dev); | 65 | int (*resume)(struct device *dev); |
| 68 | 66 | ||
| 69 | struct dev_pm_ops *pm; | 67 | struct dev_pm_ops *pm; |
| @@ -291,9 +289,6 @@ struct device_type { | |||
| 291 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); | 289 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); |
| 292 | void (*release)(struct device *dev); | 290 | void (*release)(struct device *dev); |
| 293 | 291 | ||
| 294 | int (*suspend)(struct device *dev, pm_message_t state); | ||
| 295 | int (*resume)(struct device *dev); | ||
| 296 | |||
| 297 | struct dev_pm_ops *pm; | 292 | struct dev_pm_ops *pm; |
| 298 | }; | 293 | }; |
| 299 | 294 | ||
diff --git a/include/linux/dlm.h b/include/linux/dlm.h index b9cd38603fd8..0b3518c42356 100644 --- a/include/linux/dlm.h +++ b/include/linux/dlm.h | |||
| @@ -81,8 +81,8 @@ struct dlm_lksb { | |||
| 81 | * the cluster, the calling node joins it. | 81 | * the cluster, the calling node joins it. |
| 82 | */ | 82 | */ |
| 83 | 83 | ||
| 84 | int dlm_new_lockspace(char *name, int namelen, dlm_lockspace_t **lockspace, | 84 | int dlm_new_lockspace(const char *name, int namelen, |
| 85 | uint32_t flags, int lvblen); | 85 | dlm_lockspace_t **lockspace, uint32_t flags, int lvblen); |
| 86 | 86 | ||
| 87 | /* | 87 | /* |
| 88 | * dlm_release_lockspace | 88 | * dlm_release_lockspace |
diff --git a/include/linux/dnotify.h b/include/linux/dnotify.h index 102a902b4396..ecc06286226d 100644 --- a/include/linux/dnotify.h +++ b/include/linux/dnotify.h | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | struct dnotify_struct { | 11 | struct dnotify_struct { |
| 12 | struct dnotify_struct * dn_next; | 12 | struct dnotify_struct * dn_next; |
| 13 | unsigned long dn_mask; | 13 | __u32 dn_mask; |
| 14 | int dn_fd; | 14 | int dn_fd; |
| 15 | struct file * dn_filp; | 15 | struct file * dn_filp; |
| 16 | fl_owner_t dn_owner; | 16 | fl_owner_t dn_owner; |
| @@ -21,23 +21,18 @@ struct dnotify_struct { | |||
| 21 | 21 | ||
| 22 | #ifdef CONFIG_DNOTIFY | 22 | #ifdef CONFIG_DNOTIFY |
| 23 | 23 | ||
| 24 | extern void __inode_dir_notify(struct inode *, unsigned long); | 24 | #define DNOTIFY_ALL_EVENTS (FS_DELETE | FS_DELETE_CHILD |\ |
| 25 | FS_MODIFY | FS_MODIFY_CHILD |\ | ||
| 26 | FS_ACCESS | FS_ACCESS_CHILD |\ | ||
| 27 | FS_ATTRIB | FS_ATTRIB_CHILD |\ | ||
| 28 | FS_CREATE | FS_DN_RENAME |\ | ||
| 29 | FS_MOVED_FROM | FS_MOVED_TO) | ||
| 30 | |||
| 25 | extern void dnotify_flush(struct file *, fl_owner_t); | 31 | extern void dnotify_flush(struct file *, fl_owner_t); |
| 26 | extern int fcntl_dirnotify(int, struct file *, unsigned long); | 32 | extern int fcntl_dirnotify(int, struct file *, unsigned long); |
| 27 | extern void dnotify_parent(struct dentry *, unsigned long); | ||
| 28 | |||
| 29 | static inline void inode_dir_notify(struct inode *inode, unsigned long event) | ||
| 30 | { | ||
| 31 | if (inode->i_dnotify_mask & (event)) | ||
| 32 | __inode_dir_notify(inode, event); | ||
| 33 | } | ||
| 34 | 33 | ||
| 35 | #else | 34 | #else |
| 36 | 35 | ||
| 37 | static inline void __inode_dir_notify(struct inode *inode, unsigned long event) | ||
| 38 | { | ||
| 39 | } | ||
| 40 | |||
| 41 | static inline void dnotify_flush(struct file *filp, fl_owner_t id) | 36 | static inline void dnotify_flush(struct file *filp, fl_owner_t id) |
| 42 | { | 37 | { |
| 43 | } | 38 | } |
| @@ -47,14 +42,6 @@ static inline int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg) | |||
| 47 | return -EINVAL; | 42 | return -EINVAL; |
| 48 | } | 43 | } |
| 49 | 44 | ||
| 50 | static inline void dnotify_parent(struct dentry *dentry, unsigned long event) | ||
| 51 | { | ||
| 52 | } | ||
| 53 | |||
| 54 | static inline void inode_dir_notify(struct inode *inode, unsigned long event) | ||
| 55 | { | ||
| 56 | } | ||
| 57 | |||
| 58 | #endif /* CONFIG_DNOTIFY */ | 45 | #endif /* CONFIG_DNOTIFY */ |
| 59 | 46 | ||
| 60 | #endif /* __KERNEL __ */ | 47 | #endif /* __KERNEL __ */ |
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index a1f17abba7dc..3d7a6687d247 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h | |||
| @@ -182,6 +182,33 @@ static inline unsigned compare_ether_addr_64bits(const u8 addr1[6+2], | |||
| 182 | return compare_ether_addr(addr1, addr2); | 182 | return compare_ether_addr(addr1, addr2); |
| 183 | #endif | 183 | #endif |
| 184 | } | 184 | } |
| 185 | |||
| 186 | /** | ||
| 187 | * is_etherdev_addr - Tell if given Ethernet address belongs to the device. | ||
| 188 | * @dev: Pointer to a device structure | ||
| 189 | * @addr: Pointer to a six-byte array containing the Ethernet address | ||
| 190 | * | ||
| 191 | * Compare passed address with all addresses of the device. Return true if the | ||
| 192 | * address if one of the device addresses. | ||
| 193 | * | ||
| 194 | * Note that this function calls compare_ether_addr_64bits() so take care of | ||
| 195 | * the right padding. | ||
| 196 | */ | ||
| 197 | static inline bool is_etherdev_addr(const struct net_device *dev, | ||
| 198 | const u8 addr[6 + 2]) | ||
| 199 | { | ||
| 200 | struct netdev_hw_addr *ha; | ||
| 201 | int res = 1; | ||
| 202 | |||
| 203 | rcu_read_lock(); | ||
| 204 | for_each_dev_addr(dev, ha) { | ||
| 205 | res = compare_ether_addr_64bits(addr, ha->addr); | ||
| 206 | if (!res) | ||
| 207 | break; | ||
| 208 | } | ||
| 209 | rcu_read_unlock(); | ||
| 210 | return !res; | ||
| 211 | } | ||
| 185 | #endif /* __KERNEL__ */ | 212 | #endif /* __KERNEL__ */ |
| 186 | 213 | ||
| 187 | /** | 214 | /** |
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 131b127b70f8..9b660bd2e2b3 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
| @@ -26,11 +26,14 @@ struct ethtool_cmd { | |||
| 26 | __u8 phy_address; | 26 | __u8 phy_address; |
| 27 | __u8 transceiver; /* Which transceiver to use */ | 27 | __u8 transceiver; /* Which transceiver to use */ |
| 28 | __u8 autoneg; /* Enable or disable autonegotiation */ | 28 | __u8 autoneg; /* Enable or disable autonegotiation */ |
| 29 | __u8 mdio_support; | ||
| 29 | __u32 maxtxpkt; /* Tx pkts before generating tx int */ | 30 | __u32 maxtxpkt; /* Tx pkts before generating tx int */ |
| 30 | __u32 maxrxpkt; /* Rx pkts before generating rx int */ | 31 | __u32 maxrxpkt; /* Rx pkts before generating rx int */ |
| 31 | __u16 speed_hi; | 32 | __u16 speed_hi; |
| 32 | __u16 reserved2; | 33 | __u8 eth_tp_mdix; |
| 33 | __u32 reserved[3]; | 34 | __u8 reserved2; |
| 35 | __u32 lp_advertising; /* Features the link partner advertises */ | ||
| 36 | __u32 reserved[2]; | ||
| 34 | }; | 37 | }; |
| 35 | 38 | ||
| 36 | static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep, | 39 | static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep, |
| @@ -563,6 +566,11 @@ struct ethtool_ops { | |||
| 563 | #define SUPPORTED_Pause (1 << 13) | 566 | #define SUPPORTED_Pause (1 << 13) |
| 564 | #define SUPPORTED_Asym_Pause (1 << 14) | 567 | #define SUPPORTED_Asym_Pause (1 << 14) |
| 565 | #define SUPPORTED_2500baseX_Full (1 << 15) | 568 | #define SUPPORTED_2500baseX_Full (1 << 15) |
| 569 | #define SUPPORTED_Backplane (1 << 16) | ||
| 570 | #define SUPPORTED_1000baseKX_Full (1 << 17) | ||
| 571 | #define SUPPORTED_10000baseKX4_Full (1 << 18) | ||
| 572 | #define SUPPORTED_10000baseKR_Full (1 << 19) | ||
| 573 | #define SUPPORTED_10000baseR_FEC (1 << 20) | ||
| 566 | 574 | ||
| 567 | /* Indicates what features are advertised by the interface. */ | 575 | /* Indicates what features are advertised by the interface. */ |
| 568 | #define ADVERTISED_10baseT_Half (1 << 0) | 576 | #define ADVERTISED_10baseT_Half (1 << 0) |
| @@ -581,6 +589,11 @@ struct ethtool_ops { | |||
| 581 | #define ADVERTISED_Pause (1 << 13) | 589 | #define ADVERTISED_Pause (1 << 13) |
| 582 | #define ADVERTISED_Asym_Pause (1 << 14) | 590 | #define ADVERTISED_Asym_Pause (1 << 14) |
| 583 | #define ADVERTISED_2500baseX_Full (1 << 15) | 591 | #define ADVERTISED_2500baseX_Full (1 << 15) |
| 592 | #define ADVERTISED_Backplane (1 << 16) | ||
| 593 | #define ADVERTISED_1000baseKX_Full (1 << 17) | ||
| 594 | #define ADVERTISED_10000baseKX4_Full (1 << 18) | ||
| 595 | #define ADVERTISED_10000baseKR_Full (1 << 19) | ||
| 596 | #define ADVERTISED_10000baseR_FEC (1 << 20) | ||
| 584 | 597 | ||
| 585 | /* The following are all involved in forcing a particular link | 598 | /* The following are all involved in forcing a particular link |
| 586 | * mode for the device for setting things. When getting the | 599 | * mode for the device for setting things. When getting the |
| @@ -605,6 +618,7 @@ struct ethtool_ops { | |||
| 605 | #define PORT_MII 0x02 | 618 | #define PORT_MII 0x02 |
| 606 | #define PORT_FIBRE 0x03 | 619 | #define PORT_FIBRE 0x03 |
| 607 | #define PORT_BNC 0x04 | 620 | #define PORT_BNC 0x04 |
| 621 | #define PORT_OTHER 0xff | ||
| 608 | 622 | ||
| 609 | /* Which transceiver to use. */ | 623 | /* Which transceiver to use. */ |
| 610 | #define XCVR_INTERNAL 0x00 | 624 | #define XCVR_INTERNAL 0x00 |
| @@ -619,6 +633,11 @@ struct ethtool_ops { | |||
| 619 | #define AUTONEG_DISABLE 0x00 | 633 | #define AUTONEG_DISABLE 0x00 |
| 620 | #define AUTONEG_ENABLE 0x01 | 634 | #define AUTONEG_ENABLE 0x01 |
| 621 | 635 | ||
| 636 | /* Mode MDI or MDI-X */ | ||
| 637 | #define ETH_TP_MDI_INVALID 0x00 | ||
| 638 | #define ETH_TP_MDI 0x01 | ||
| 639 | #define ETH_TP_MDI_X 0x02 | ||
| 640 | |||
| 622 | /* Wake-On-Lan options. */ | 641 | /* Wake-On-Lan options. */ |
| 623 | #define WAKE_PHY (1 << 0) | 642 | #define WAKE_PHY (1 << 0) |
| 624 | #define WAKE_UCAST (1 << 1) | 643 | #define WAKE_UCAST (1 << 1) |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 83d6b4397245..ede84fa7da5d 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -729,8 +729,8 @@ struct inode { | |||
| 729 | struct timespec i_atime; | 729 | struct timespec i_atime; |
| 730 | struct timespec i_mtime; | 730 | struct timespec i_mtime; |
| 731 | struct timespec i_ctime; | 731 | struct timespec i_ctime; |
| 732 | unsigned int i_blkbits; | ||
| 733 | blkcnt_t i_blocks; | 732 | blkcnt_t i_blocks; |
| 733 | unsigned int i_blkbits; | ||
| 734 | unsigned short i_bytes; | 734 | unsigned short i_bytes; |
| 735 | umode_t i_mode; | 735 | umode_t i_mode; |
| 736 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | 736 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ |
| @@ -751,13 +751,12 @@ struct inode { | |||
| 751 | struct block_device *i_bdev; | 751 | struct block_device *i_bdev; |
| 752 | struct cdev *i_cdev; | 752 | struct cdev *i_cdev; |
| 753 | }; | 753 | }; |
| 754 | int i_cindex; | ||
| 755 | 754 | ||
| 756 | __u32 i_generation; | 755 | __u32 i_generation; |
| 757 | 756 | ||
| 758 | #ifdef CONFIG_DNOTIFY | 757 | #ifdef CONFIG_FSNOTIFY |
| 759 | unsigned long i_dnotify_mask; /* Directory notify events */ | 758 | __u32 i_fsnotify_mask; /* all events this inode cares about */ |
| 760 | struct dnotify_struct *i_dnotify; /* for directory notifications */ | 759 | struct hlist_head i_fsnotify_mark_entries; /* fsnotify mark entries */ |
| 761 | #endif | 760 | #endif |
| 762 | 761 | ||
| 763 | #ifdef CONFIG_INOTIFY | 762 | #ifdef CONFIG_INOTIFY |
| @@ -1321,7 +1320,7 @@ struct super_block { | |||
| 1321 | struct rw_semaphore s_umount; | 1320 | struct rw_semaphore s_umount; |
| 1322 | struct mutex s_lock; | 1321 | struct mutex s_lock; |
| 1323 | int s_count; | 1322 | int s_count; |
| 1324 | int s_need_sync_fs; | 1323 | int s_need_sync; |
| 1325 | atomic_t s_active; | 1324 | atomic_t s_active; |
| 1326 | #ifdef CONFIG_SECURITY | 1325 | #ifdef CONFIG_SECURITY |
| 1327 | void *s_security; | 1326 | void *s_security; |
| @@ -1372,11 +1371,6 @@ struct super_block { | |||
| 1372 | * generic_show_options() | 1371 | * generic_show_options() |
| 1373 | */ | 1372 | */ |
| 1374 | char *s_options; | 1373 | char *s_options; |
| 1375 | |||
| 1376 | /* | ||
| 1377 | * storage for asynchronous operations | ||
| 1378 | */ | ||
| 1379 | struct list_head s_async_list; | ||
| 1380 | }; | 1374 | }; |
| 1381 | 1375 | ||
| 1382 | extern struct timespec current_fs_time(struct super_block *sb); | 1376 | extern struct timespec current_fs_time(struct super_block *sb); |
| @@ -1800,7 +1794,7 @@ extern struct vfsmount *kern_mount_data(struct file_system_type *, void *data); | |||
| 1800 | extern int may_umount_tree(struct vfsmount *); | 1794 | extern int may_umount_tree(struct vfsmount *); |
| 1801 | extern int may_umount(struct vfsmount *); | 1795 | extern int may_umount(struct vfsmount *); |
| 1802 | extern long do_mount(char *, char *, char *, unsigned long, void *); | 1796 | extern long do_mount(char *, char *, char *, unsigned long, void *); |
| 1803 | extern struct vfsmount *collect_mounts(struct vfsmount *, struct dentry *); | 1797 | extern struct vfsmount *collect_mounts(struct path *); |
| 1804 | extern void drop_collected_mounts(struct vfsmount *); | 1798 | extern void drop_collected_mounts(struct vfsmount *); |
| 1805 | 1799 | ||
| 1806 | extern int vfs_statfs(struct dentry *, struct kstatfs *); | 1800 | extern int vfs_statfs(struct dentry *, struct kstatfs *); |
| @@ -1947,8 +1941,6 @@ extern struct super_block *freeze_bdev(struct block_device *); | |||
| 1947 | extern void emergency_thaw_all(void); | 1941 | extern void emergency_thaw_all(void); |
| 1948 | extern int thaw_bdev(struct block_device *bdev, struct super_block *sb); | 1942 | extern int thaw_bdev(struct block_device *bdev, struct super_block *sb); |
| 1949 | extern int fsync_bdev(struct block_device *); | 1943 | extern int fsync_bdev(struct block_device *); |
| 1950 | extern int fsync_super(struct super_block *); | ||
| 1951 | extern int fsync_no_super(struct block_device *); | ||
| 1952 | #else | 1944 | #else |
| 1953 | static inline void bd_forget(struct inode *inode) {} | 1945 | static inline void bd_forget(struct inode *inode) {} |
| 1954 | static inline int sync_blockdev(struct block_device *bdev) { return 0; } | 1946 | static inline int sync_blockdev(struct block_device *bdev) { return 0; } |
| @@ -1964,6 +1956,7 @@ static inline int thaw_bdev(struct block_device *bdev, struct super_block *sb) | |||
| 1964 | return 0; | 1956 | return 0; |
| 1965 | } | 1957 | } |
| 1966 | #endif | 1958 | #endif |
| 1959 | extern int sync_filesystem(struct super_block *); | ||
| 1967 | extern const struct file_operations def_blk_fops; | 1960 | extern const struct file_operations def_blk_fops; |
| 1968 | extern const struct file_operations def_chr_fops; | 1961 | extern const struct file_operations def_chr_fops; |
| 1969 | extern const struct file_operations bad_sock_fops; | 1962 | extern const struct file_operations bad_sock_fops; |
| @@ -2082,12 +2075,8 @@ extern int filemap_fdatawrite_range(struct address_space *mapping, | |||
| 2082 | 2075 | ||
| 2083 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); | 2076 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); |
| 2084 | extern void sync_supers(void); | 2077 | extern void sync_supers(void); |
| 2085 | extern void sync_filesystems(int wait); | ||
| 2086 | extern void __fsync_super(struct super_block *sb); | ||
| 2087 | extern void emergency_sync(void); | 2078 | extern void emergency_sync(void); |
| 2088 | extern void emergency_remount(void); | 2079 | extern void emergency_remount(void); |
| 2089 | extern int do_remount_sb(struct super_block *sb, int flags, | ||
| 2090 | void *data, int force); | ||
| 2091 | #ifdef CONFIG_BLOCK | 2080 | #ifdef CONFIG_BLOCK |
| 2092 | extern sector_t bmap(struct inode *, sector_t); | 2081 | extern sector_t bmap(struct inode *, sector_t); |
| 2093 | #endif | 2082 | #endif |
| @@ -2356,6 +2345,8 @@ extern void simple_release_fs(struct vfsmount **mount, int *count); | |||
| 2356 | extern ssize_t simple_read_from_buffer(void __user *to, size_t count, | 2345 | extern ssize_t simple_read_from_buffer(void __user *to, size_t count, |
| 2357 | loff_t *ppos, const void *from, size_t available); | 2346 | loff_t *ppos, const void *from, size_t available); |
| 2358 | 2347 | ||
| 2348 | extern int simple_fsync(struct file *, struct dentry *, int); | ||
| 2349 | |||
| 2359 | #ifdef CONFIG_MIGRATION | 2350 | #ifdef CONFIG_MIGRATION |
| 2360 | extern int buffer_migrate_page(struct address_space *, | 2351 | extern int buffer_migrate_page(struct address_space *, |
| 2361 | struct page *, struct page *); | 2352 | struct page *, struct page *); |
diff --git a/include/linux/fs_enet_pd.h b/include/linux/fs_enet_pd.h index 8300cab30f9a..51b793466ff3 100644 --- a/include/linux/fs_enet_pd.h +++ b/include/linux/fs_enet_pd.h | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #define FS_ENET_PD_H | 17 | #define FS_ENET_PD_H |
| 18 | 18 | ||
| 19 | #include <linux/string.h> | 19 | #include <linux/string.h> |
| 20 | #include <linux/of_mdio.h> | ||
| 20 | #include <asm/types.h> | 21 | #include <asm/types.h> |
| 21 | 22 | ||
| 22 | #define FS_ENET_NAME "fs_enet" | 23 | #define FS_ENET_NAME "fs_enet" |
| @@ -130,10 +131,7 @@ struct fs_platform_info { | |||
| 130 | 131 | ||
| 131 | u32 device_flags; | 132 | u32 device_flags; |
| 132 | 133 | ||
| 133 | int phy_addr; /* the phy address (-1 no phy) */ | 134 | struct device_node *phy_node; |
| 134 | char bus_id[16]; | ||
| 135 | int phy_irq; /* the phy irq (if it exists) */ | ||
| 136 | |||
| 137 | const struct fs_mii_bus_info *bus_info; | 135 | const struct fs_mii_bus_info *bus_info; |
| 138 | 136 | ||
| 139 | int rx_ring, tx_ring; /* number of buffers on rx */ | 137 | int rx_ring, tx_ring; /* number of buffers on rx */ |
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index 00fbd5b245c9..936f9aa8bb97 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | #include <linux/dnotify.h> | 14 | #include <linux/dnotify.h> |
| 15 | #include <linux/inotify.h> | 15 | #include <linux/inotify.h> |
| 16 | #include <linux/fsnotify_backend.h> | ||
| 16 | #include <linux/audit.h> | 17 | #include <linux/audit.h> |
| 17 | 18 | ||
| 18 | /* | 19 | /* |
| @@ -22,19 +23,45 @@ | |||
| 22 | static inline void fsnotify_d_instantiate(struct dentry *entry, | 23 | static inline void fsnotify_d_instantiate(struct dentry *entry, |
| 23 | struct inode *inode) | 24 | struct inode *inode) |
| 24 | { | 25 | { |
| 26 | __fsnotify_d_instantiate(entry, inode); | ||
| 27 | |||
| 25 | inotify_d_instantiate(entry, inode); | 28 | inotify_d_instantiate(entry, inode); |
| 26 | } | 29 | } |
| 27 | 30 | ||
| 31 | /* Notify this dentry's parent about a child's events. */ | ||
| 32 | static inline void fsnotify_parent(struct dentry *dentry, __u32 mask) | ||
| 33 | { | ||
| 34 | __fsnotify_parent(dentry, mask); | ||
| 35 | |||
| 36 | inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name); | ||
| 37 | } | ||
| 38 | |||
| 28 | /* | 39 | /* |
| 29 | * fsnotify_d_move - entry has been moved | 40 | * fsnotify_d_move - entry has been moved |
| 30 | * Called with dcache_lock and entry->d_lock held. | 41 | * Called with dcache_lock and entry->d_lock held. |
| 31 | */ | 42 | */ |
| 32 | static inline void fsnotify_d_move(struct dentry *entry) | 43 | static inline void fsnotify_d_move(struct dentry *entry) |
| 33 | { | 44 | { |
| 45 | /* | ||
| 46 | * On move we need to update entry->d_flags to indicate if the new parent | ||
| 47 | * cares about events from this entry. | ||
| 48 | */ | ||
| 49 | __fsnotify_update_dcache_flags(entry); | ||
| 50 | |||
| 34 | inotify_d_move(entry); | 51 | inotify_d_move(entry); |
| 35 | } | 52 | } |
| 36 | 53 | ||
| 37 | /* | 54 | /* |
| 55 | * fsnotify_link_count - inode's link count changed | ||
| 56 | */ | ||
| 57 | static inline void fsnotify_link_count(struct inode *inode) | ||
| 58 | { | ||
| 59 | inotify_inode_queue_event(inode, IN_ATTRIB, 0, NULL, NULL); | ||
| 60 | |||
| 61 | fsnotify(inode, FS_ATTRIB, inode, FSNOTIFY_EVENT_INODE, NULL, 0); | ||
| 62 | } | ||
| 63 | |||
| 64 | /* | ||
| 38 | * fsnotify_move - file old_name at old_dir was moved to new_name at new_dir | 65 | * fsnotify_move - file old_name at old_dir was moved to new_name at new_dir |
| 39 | */ | 66 | */ |
| 40 | static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, | 67 | static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, |
| @@ -42,42 +69,62 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, | |||
| 42 | int isdir, struct inode *target, struct dentry *moved) | 69 | int isdir, struct inode *target, struct dentry *moved) |
| 43 | { | 70 | { |
| 44 | struct inode *source = moved->d_inode; | 71 | struct inode *source = moved->d_inode; |
| 45 | u32 cookie = inotify_get_cookie(); | 72 | u32 in_cookie = inotify_get_cookie(); |
| 73 | u32 fs_cookie = fsnotify_get_cookie(); | ||
| 74 | __u32 old_dir_mask = (FS_EVENT_ON_CHILD | FS_MOVED_FROM); | ||
| 75 | __u32 new_dir_mask = (FS_EVENT_ON_CHILD | FS_MOVED_TO); | ||
| 46 | 76 | ||
| 47 | if (old_dir == new_dir) | 77 | if (old_dir == new_dir) |
| 48 | inode_dir_notify(old_dir, DN_RENAME); | 78 | old_dir_mask |= FS_DN_RENAME; |
| 49 | else { | ||
| 50 | inode_dir_notify(old_dir, DN_DELETE); | ||
| 51 | inode_dir_notify(new_dir, DN_CREATE); | ||
| 52 | } | ||
| 53 | 79 | ||
| 54 | if (isdir) | 80 | if (isdir) { |
| 55 | isdir = IN_ISDIR; | 81 | isdir = IN_ISDIR; |
| 56 | inotify_inode_queue_event(old_dir, IN_MOVED_FROM|isdir,cookie,old_name, | 82 | old_dir_mask |= FS_IN_ISDIR; |
| 83 | new_dir_mask |= FS_IN_ISDIR; | ||
| 84 | } | ||
| 85 | |||
| 86 | inotify_inode_queue_event(old_dir, IN_MOVED_FROM|isdir, in_cookie, old_name, | ||
| 57 | source); | 87 | source); |
| 58 | inotify_inode_queue_event(new_dir, IN_MOVED_TO|isdir, cookie, new_name, | 88 | inotify_inode_queue_event(new_dir, IN_MOVED_TO|isdir, in_cookie, new_name, |
| 59 | source); | 89 | source); |
| 60 | 90 | ||
| 91 | fsnotify(old_dir, old_dir_mask, old_dir, FSNOTIFY_EVENT_INODE, old_name, fs_cookie); | ||
| 92 | fsnotify(new_dir, new_dir_mask, new_dir, FSNOTIFY_EVENT_INODE, new_name, fs_cookie); | ||
| 93 | |||
| 61 | if (target) { | 94 | if (target) { |
| 62 | inotify_inode_queue_event(target, IN_DELETE_SELF, 0, NULL, NULL); | 95 | inotify_inode_queue_event(target, IN_DELETE_SELF, 0, NULL, NULL); |
| 63 | inotify_inode_is_dead(target); | 96 | inotify_inode_is_dead(target); |
| 97 | |||
| 98 | /* this is really a link_count change not a removal */ | ||
| 99 | fsnotify_link_count(target); | ||
| 64 | } | 100 | } |
| 65 | 101 | ||
| 66 | if (source) { | 102 | if (source) { |
| 67 | inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL, NULL); | 103 | inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL, NULL); |
| 104 | fsnotify(source, FS_MOVE_SELF, moved->d_inode, FSNOTIFY_EVENT_INODE, NULL, 0); | ||
| 68 | } | 105 | } |
| 69 | audit_inode_child(new_name, moved, new_dir); | 106 | audit_inode_child(new_name, moved, new_dir); |
| 70 | } | 107 | } |
| 71 | 108 | ||
| 72 | /* | 109 | /* |
| 110 | * fsnotify_inode_delete - and inode is being evicted from cache, clean up is needed | ||
| 111 | */ | ||
| 112 | static inline void fsnotify_inode_delete(struct inode *inode) | ||
| 113 | { | ||
| 114 | __fsnotify_inode_delete(inode); | ||
| 115 | } | ||
| 116 | |||
| 117 | /* | ||
| 73 | * fsnotify_nameremove - a filename was removed from a directory | 118 | * fsnotify_nameremove - a filename was removed from a directory |
| 74 | */ | 119 | */ |
| 75 | static inline void fsnotify_nameremove(struct dentry *dentry, int isdir) | 120 | static inline void fsnotify_nameremove(struct dentry *dentry, int isdir) |
| 76 | { | 121 | { |
| 122 | __u32 mask = FS_DELETE; | ||
| 123 | |||
| 77 | if (isdir) | 124 | if (isdir) |
| 78 | isdir = IN_ISDIR; | 125 | mask |= FS_IN_ISDIR; |
| 79 | dnotify_parent(dentry, DN_DELETE); | 126 | |
| 80 | inotify_dentry_parent_queue_event(dentry, IN_DELETE|isdir, 0, dentry->d_name.name); | 127 | fsnotify_parent(dentry, mask); |
| 81 | } | 128 | } |
| 82 | 129 | ||
| 83 | /* | 130 | /* |
| @@ -87,14 +134,9 @@ static inline void fsnotify_inoderemove(struct inode *inode) | |||
| 87 | { | 134 | { |
| 88 | inotify_inode_queue_event(inode, IN_DELETE_SELF, 0, NULL, NULL); | 135 | inotify_inode_queue_event(inode, IN_DELETE_SELF, 0, NULL, NULL); |
| 89 | inotify_inode_is_dead(inode); | 136 | inotify_inode_is_dead(inode); |
| 90 | } | ||
| 91 | 137 | ||
| 92 | /* | 138 | fsnotify(inode, FS_DELETE_SELF, inode, FSNOTIFY_EVENT_INODE, NULL, 0); |
| 93 | * fsnotify_link_count - inode's link count changed | 139 | __fsnotify_inode_delete(inode); |
| 94 | */ | ||
| 95 | static inline void fsnotify_link_count(struct inode *inode) | ||
| 96 | { | ||
| 97 | inotify_inode_queue_event(inode, IN_ATTRIB, 0, NULL, NULL); | ||
| 98 | } | 140 | } |
| 99 | 141 | ||
| 100 | /* | 142 | /* |
| @@ -102,10 +144,11 @@ static inline void fsnotify_link_count(struct inode *inode) | |||
| 102 | */ | 144 | */ |
| 103 | static inline void fsnotify_create(struct inode *inode, struct dentry *dentry) | 145 | static inline void fsnotify_create(struct inode *inode, struct dentry *dentry) |
| 104 | { | 146 | { |
| 105 | inode_dir_notify(inode, DN_CREATE); | ||
| 106 | inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name, | 147 | inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name, |
| 107 | dentry->d_inode); | 148 | dentry->d_inode); |
| 108 | audit_inode_child(dentry->d_name.name, dentry, inode); | 149 | audit_inode_child(dentry->d_name.name, dentry, inode); |
| 150 | |||
| 151 | fsnotify(inode, FS_CREATE, dentry->d_inode, FSNOTIFY_EVENT_INODE, dentry->d_name.name, 0); | ||
| 109 | } | 152 | } |
| 110 | 153 | ||
| 111 | /* | 154 | /* |
| @@ -115,11 +158,12 @@ static inline void fsnotify_create(struct inode *inode, struct dentry *dentry) | |||
| 115 | */ | 158 | */ |
| 116 | static inline void fsnotify_link(struct inode *dir, struct inode *inode, struct dentry *new_dentry) | 159 | static inline void fsnotify_link(struct inode *dir, struct inode *inode, struct dentry *new_dentry) |
| 117 | { | 160 | { |
| 118 | inode_dir_notify(dir, DN_CREATE); | ||
| 119 | inotify_inode_queue_event(dir, IN_CREATE, 0, new_dentry->d_name.name, | 161 | inotify_inode_queue_event(dir, IN_CREATE, 0, new_dentry->d_name.name, |
| 120 | inode); | 162 | inode); |
| 121 | fsnotify_link_count(inode); | 163 | fsnotify_link_count(inode); |
| 122 | audit_inode_child(new_dentry->d_name.name, new_dentry, dir); | 164 | audit_inode_child(new_dentry->d_name.name, new_dentry, dir); |
| 165 | |||
| 166 | fsnotify(dir, FS_CREATE, inode, FSNOTIFY_EVENT_INODE, new_dentry->d_name.name, 0); | ||
| 123 | } | 167 | } |
| 124 | 168 | ||
| 125 | /* | 169 | /* |
| @@ -127,10 +171,13 @@ static inline void fsnotify_link(struct inode *dir, struct inode *inode, struct | |||
| 127 | */ | 171 | */ |
| 128 | static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry) | 172 | static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry) |
| 129 | { | 173 | { |
| 130 | inode_dir_notify(inode, DN_CREATE); | 174 | __u32 mask = (FS_CREATE | FS_IN_ISDIR); |
| 131 | inotify_inode_queue_event(inode, IN_CREATE | IN_ISDIR, 0, | 175 | struct inode *d_inode = dentry->d_inode; |
| 132 | dentry->d_name.name, dentry->d_inode); | 176 | |
| 177 | inotify_inode_queue_event(inode, mask, 0, dentry->d_name.name, d_inode); | ||
| 133 | audit_inode_child(dentry->d_name.name, dentry, inode); | 178 | audit_inode_child(dentry->d_name.name, dentry, inode); |
| 179 | |||
| 180 | fsnotify(inode, mask, d_inode, FSNOTIFY_EVENT_INODE, dentry->d_name.name, 0); | ||
| 134 | } | 181 | } |
| 135 | 182 | ||
| 136 | /* | 183 | /* |
| @@ -139,14 +186,15 @@ static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry) | |||
| 139 | static inline void fsnotify_access(struct dentry *dentry) | 186 | static inline void fsnotify_access(struct dentry *dentry) |
| 140 | { | 187 | { |
| 141 | struct inode *inode = dentry->d_inode; | 188 | struct inode *inode = dentry->d_inode; |
| 142 | u32 mask = IN_ACCESS; | 189 | __u32 mask = FS_ACCESS; |
| 143 | 190 | ||
| 144 | if (S_ISDIR(inode->i_mode)) | 191 | if (S_ISDIR(inode->i_mode)) |
| 145 | mask |= IN_ISDIR; | 192 | mask |= FS_IN_ISDIR; |
| 146 | 193 | ||
| 147 | dnotify_parent(dentry, DN_ACCESS); | ||
| 148 | inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name); | ||
| 149 | inotify_inode_queue_event(inode, mask, 0, NULL, NULL); | 194 | inotify_inode_queue_event(inode, mask, 0, NULL, NULL); |
| 195 | |||
| 196 | fsnotify_parent(dentry, mask); | ||
| 197 | fsnotify(inode, mask, inode, FSNOTIFY_EVENT_INODE, NULL, 0); | ||
| 150 | } | 198 | } |
| 151 | 199 | ||
| 152 | /* | 200 | /* |
| @@ -155,14 +203,15 @@ static inline void fsnotify_access(struct dentry *dentry) | |||
| 155 | static inline void fsnotify_modify(struct dentry *dentry) | 203 | static inline void fsnotify_modify(struct dentry *dentry) |
| 156 | { | 204 | { |
| 157 | struct inode *inode = dentry->d_inode; | 205 | struct inode *inode = dentry->d_inode; |
| 158 | u32 mask = IN_MODIFY; | 206 | __u32 mask = FS_MODIFY; |
| 159 | 207 | ||
| 160 | if (S_ISDIR(inode->i_mode)) | 208 | if (S_ISDIR(inode->i_mode)) |
| 161 | mask |= IN_ISDIR; | 209 | mask |= FS_IN_ISDIR; |
| 162 | 210 | ||
| 163 | dnotify_parent(dentry, DN_MODIFY); | ||
| 164 | inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name); | ||
| 165 | inotify_inode_queue_event(inode, mask, 0, NULL, NULL); | 211 | inotify_inode_queue_event(inode, mask, 0, NULL, NULL); |
| 212 | |||
| 213 | fsnotify_parent(dentry, mask); | ||
| 214 | fsnotify(inode, mask, inode, FSNOTIFY_EVENT_INODE, NULL, 0); | ||
| 166 | } | 215 | } |
| 167 | 216 | ||
| 168 | /* | 217 | /* |
| @@ -171,13 +220,15 @@ static inline void fsnotify_modify(struct dentry *dentry) | |||
| 171 | static inline void fsnotify_open(struct dentry *dentry) | 220 | static inline void fsnotify_open(struct dentry *dentry) |
| 172 | { | 221 | { |
| 173 | struct inode *inode = dentry->d_inode; | 222 | struct inode *inode = dentry->d_inode; |
| 174 | u32 mask = IN_OPEN; | 223 | __u32 mask = FS_OPEN; |
| 175 | 224 | ||
| 176 | if (S_ISDIR(inode->i_mode)) | 225 | if (S_ISDIR(inode->i_mode)) |
| 177 | mask |= IN_ISDIR; | 226 | mask |= FS_IN_ISDIR; |
| 178 | 227 | ||
| 179 | inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name); | ||
| 180 | inotify_inode_queue_event(inode, mask, 0, NULL, NULL); | 228 | inotify_inode_queue_event(inode, mask, 0, NULL, NULL); |
| 229 | |||
| 230 | fsnotify_parent(dentry, mask); | ||
| 231 | fsnotify(inode, mask, inode, FSNOTIFY_EVENT_INODE, NULL, 0); | ||
| 181 | } | 232 | } |
| 182 | 233 | ||
| 183 | /* | 234 | /* |
| @@ -187,15 +238,16 @@ static inline void fsnotify_close(struct file *file) | |||
| 187 | { | 238 | { |
| 188 | struct dentry *dentry = file->f_path.dentry; | 239 | struct dentry *dentry = file->f_path.dentry; |
| 189 | struct inode *inode = dentry->d_inode; | 240 | struct inode *inode = dentry->d_inode; |
| 190 | const char *name = dentry->d_name.name; | ||
| 191 | fmode_t mode = file->f_mode; | 241 | fmode_t mode = file->f_mode; |
| 192 | u32 mask = (mode & FMODE_WRITE) ? IN_CLOSE_WRITE : IN_CLOSE_NOWRITE; | 242 | __u32 mask = (mode & FMODE_WRITE) ? FS_CLOSE_WRITE : FS_CLOSE_NOWRITE; |
| 193 | 243 | ||
| 194 | if (S_ISDIR(inode->i_mode)) | 244 | if (S_ISDIR(inode->i_mode)) |
| 195 | mask |= IN_ISDIR; | 245 | mask |= FS_IN_ISDIR; |
| 196 | 246 | ||
| 197 | inotify_dentry_parent_queue_event(dentry, mask, 0, name); | ||
| 198 | inotify_inode_queue_event(inode, mask, 0, NULL, NULL); | 247 | inotify_inode_queue_event(inode, mask, 0, NULL, NULL); |
| 248 | |||
| 249 | fsnotify_parent(dentry, mask); | ||
| 250 | fsnotify(inode, mask, file, FSNOTIFY_EVENT_FILE, NULL, 0); | ||
| 199 | } | 251 | } |
| 200 | 252 | ||
| 201 | /* | 253 | /* |
| @@ -204,13 +256,15 @@ static inline void fsnotify_close(struct file *file) | |||
| 204 | static inline void fsnotify_xattr(struct dentry *dentry) | 256 | static inline void fsnotify_xattr(struct dentry *dentry) |
| 205 | { | 257 | { |
| 206 | struct inode *inode = dentry->d_inode; | 258 | struct inode *inode = dentry->d_inode; |
| 207 | u32 mask = IN_ATTRIB; | 259 | __u32 mask = FS_ATTRIB; |
| 208 | 260 | ||
| 209 | if (S_ISDIR(inode->i_mode)) | 261 | if (S_ISDIR(inode->i_mode)) |
| 210 | mask |= IN_ISDIR; | 262 | mask |= FS_IN_ISDIR; |
| 211 | 263 | ||
| 212 | inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name); | ||
| 213 | inotify_inode_queue_event(inode, mask, 0, NULL, NULL); | 264 | inotify_inode_queue_event(inode, mask, 0, NULL, NULL); |
| 265 | |||
| 266 | fsnotify_parent(dentry, mask); | ||
| 267 | fsnotify(inode, mask, inode, FSNOTIFY_EVENT_INODE, NULL, 0); | ||
| 214 | } | 268 | } |
| 215 | 269 | ||
| 216 | /* | 270 | /* |
| @@ -220,50 +274,37 @@ static inline void fsnotify_xattr(struct dentry *dentry) | |||
| 220 | static inline void fsnotify_change(struct dentry *dentry, unsigned int ia_valid) | 274 | static inline void fsnotify_change(struct dentry *dentry, unsigned int ia_valid) |
| 221 | { | 275 | { |
| 222 | struct inode *inode = dentry->d_inode; | 276 | struct inode *inode = dentry->d_inode; |
| 223 | int dn_mask = 0; | 277 | __u32 mask = 0; |
| 224 | u32 in_mask = 0; | 278 | |
| 279 | if (ia_valid & ATTR_UID) | ||
| 280 | mask |= FS_ATTRIB; | ||
| 281 | if (ia_valid & ATTR_GID) | ||
| 282 | mask |= FS_ATTRIB; | ||
| 283 | if (ia_valid & ATTR_SIZE) | ||
| 284 | mask |= FS_MODIFY; | ||
| 225 | 285 | ||
| 226 | if (ia_valid & ATTR_UID) { | ||
| 227 | in_mask |= IN_ATTRIB; | ||
| 228 | dn_mask |= DN_ATTRIB; | ||
| 229 | } | ||
| 230 | if (ia_valid & ATTR_GID) { | ||
| 231 | in_mask |= IN_ATTRIB; | ||
| 232 | dn_mask |= DN_ATTRIB; | ||
| 233 | } | ||
| 234 | if (ia_valid & ATTR_SIZE) { | ||
| 235 | in_mask |= IN_MODIFY; | ||
| 236 | dn_mask |= DN_MODIFY; | ||
| 237 | } | ||
| 238 | /* both times implies a utime(s) call */ | 286 | /* both times implies a utime(s) call */ |
| 239 | if ((ia_valid & (ATTR_ATIME | ATTR_MTIME)) == (ATTR_ATIME | ATTR_MTIME)) | 287 | if ((ia_valid & (ATTR_ATIME | ATTR_MTIME)) == (ATTR_ATIME | ATTR_MTIME)) |
| 240 | { | 288 | mask |= FS_ATTRIB; |
| 241 | in_mask |= IN_ATTRIB; | 289 | else if (ia_valid & ATTR_ATIME) |
| 242 | dn_mask |= DN_ATTRIB; | 290 | mask |= FS_ACCESS; |
| 243 | } else if (ia_valid & ATTR_ATIME) { | 291 | else if (ia_valid & ATTR_MTIME) |
| 244 | in_mask |= IN_ACCESS; | 292 | mask |= FS_MODIFY; |
| 245 | dn_mask |= DN_ACCESS; | 293 | |
| 246 | } else if (ia_valid & ATTR_MTIME) { | 294 | if (ia_valid & ATTR_MODE) |
| 247 | in_mask |= IN_MODIFY; | 295 | mask |= FS_ATTRIB; |
| 248 | dn_mask |= DN_MODIFY; | ||
| 249 | } | ||
| 250 | if (ia_valid & ATTR_MODE) { | ||
| 251 | in_mask |= IN_ATTRIB; | ||
| 252 | dn_mask |= DN_ATTRIB; | ||
| 253 | } | ||
| 254 | 296 | ||
| 255 | if (dn_mask) | 297 | if (mask) { |
| 256 | dnotify_parent(dentry, dn_mask); | ||
| 257 | if (in_mask) { | ||
| 258 | if (S_ISDIR(inode->i_mode)) | 298 | if (S_ISDIR(inode->i_mode)) |
| 259 | in_mask |= IN_ISDIR; | 299 | mask |= FS_IN_ISDIR; |
| 260 | inotify_inode_queue_event(inode, in_mask, 0, NULL, NULL); | 300 | inotify_inode_queue_event(inode, mask, 0, NULL, NULL); |
| 261 | inotify_dentry_parent_queue_event(dentry, in_mask, 0, | 301 | |
| 262 | dentry->d_name.name); | 302 | fsnotify_parent(dentry, mask); |
| 303 | fsnotify(inode, mask, inode, FSNOTIFY_EVENT_INODE, NULL, 0); | ||
| 263 | } | 304 | } |
| 264 | } | 305 | } |
| 265 | 306 | ||
| 266 | #ifdef CONFIG_INOTIFY /* inotify helpers */ | 307 | #if defined(CONFIG_INOTIFY) || defined(CONFIG_FSNOTIFY) /* notify helpers */ |
| 267 | 308 | ||
| 268 | /* | 309 | /* |
| 269 | * fsnotify_oldname_init - save off the old filename before we change it | 310 | * fsnotify_oldname_init - save off the old filename before we change it |
| @@ -281,7 +322,7 @@ static inline void fsnotify_oldname_free(const char *old_name) | |||
| 281 | kfree(old_name); | 322 | kfree(old_name); |
| 282 | } | 323 | } |
| 283 | 324 | ||
| 284 | #else /* CONFIG_INOTIFY */ | 325 | #else /* CONFIG_INOTIFY || CONFIG_FSNOTIFY */ |
| 285 | 326 | ||
| 286 | static inline const char *fsnotify_oldname_init(const char *name) | 327 | static inline const char *fsnotify_oldname_init(const char *name) |
| 287 | { | 328 | { |
diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h new file mode 100644 index 000000000000..44848aa830dc --- /dev/null +++ b/include/linux/fsnotify_backend.h | |||
| @@ -0,0 +1,387 @@ | |||
| 1 | /* | ||
| 2 | * Filesystem access notification for Linux | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Red Hat, Inc., Eric Paris <eparis@redhat.com> | ||
| 5 | */ | ||
| 6 | |||
| 7 | #ifndef __LINUX_FSNOTIFY_BACKEND_H | ||
| 8 | #define __LINUX_FSNOTIFY_BACKEND_H | ||
| 9 | |||
| 10 | #ifdef __KERNEL__ | ||
| 11 | |||
| 12 | #include <linux/idr.h> /* inotify uses this */ | ||
| 13 | #include <linux/fs.h> /* struct inode */ | ||
| 14 | #include <linux/list.h> | ||
| 15 | #include <linux/path.h> /* struct path */ | ||
| 16 | #include <linux/spinlock.h> | ||
| 17 | #include <linux/types.h> | ||
| 18 | |||
| 19 | #include <asm/atomic.h> | ||
| 20 | |||
| 21 | /* | ||
| 22 | * IN_* from inotfy.h lines up EXACTLY with FS_*, this is so we can easily | ||
| 23 | * convert between them. dnotify only needs conversion at watch creation | ||
| 24 | * so no perf loss there. fanotify isn't defined yet, so it can use the | ||
| 25 | * wholes if it needs more events. | ||
| 26 | */ | ||
| 27 | #define FS_ACCESS 0x00000001 /* File was accessed */ | ||
| 28 | #define FS_MODIFY 0x00000002 /* File was modified */ | ||
| 29 | #define FS_ATTRIB 0x00000004 /* Metadata changed */ | ||
| 30 | #define FS_CLOSE_WRITE 0x00000008 /* Writtable file was closed */ | ||
| 31 | #define FS_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed */ | ||
| 32 | #define FS_OPEN 0x00000020 /* File was opened */ | ||
| 33 | #define FS_MOVED_FROM 0x00000040 /* File was moved from X */ | ||
| 34 | #define FS_MOVED_TO 0x00000080 /* File was moved to Y */ | ||
| 35 | #define FS_CREATE 0x00000100 /* Subfile was created */ | ||
| 36 | #define FS_DELETE 0x00000200 /* Subfile was deleted */ | ||
| 37 | #define FS_DELETE_SELF 0x00000400 /* Self was deleted */ | ||
| 38 | #define FS_MOVE_SELF 0x00000800 /* Self was moved */ | ||
| 39 | |||
| 40 | #define FS_UNMOUNT 0x00002000 /* inode on umount fs */ | ||
| 41 | #define FS_Q_OVERFLOW 0x00004000 /* Event queued overflowed */ | ||
| 42 | #define FS_IN_IGNORED 0x00008000 /* last inotify event here */ | ||
| 43 | |||
| 44 | #define FS_IN_ISDIR 0x40000000 /* event occurred against dir */ | ||
| 45 | #define FS_IN_ONESHOT 0x80000000 /* only send event once */ | ||
| 46 | |||
| 47 | #define FS_DN_RENAME 0x10000000 /* file renamed */ | ||
| 48 | #define FS_DN_MULTISHOT 0x20000000 /* dnotify multishot */ | ||
| 49 | |||
| 50 | /* This inode cares about things that happen to its children. Always set for | ||
| 51 | * dnotify and inotify. */ | ||
| 52 | #define FS_EVENT_ON_CHILD 0x08000000 | ||
| 53 | |||
| 54 | /* This is a list of all events that may get sent to a parernt based on fs event | ||
| 55 | * happening to inodes inside that directory */ | ||
| 56 | #define FS_EVENTS_POSS_ON_CHILD (FS_ACCESS | FS_MODIFY | FS_ATTRIB |\ | ||
| 57 | FS_CLOSE_WRITE | FS_CLOSE_NOWRITE | FS_OPEN |\ | ||
| 58 | FS_MOVED_FROM | FS_MOVED_TO | FS_CREATE |\ | ||
| 59 | FS_DELETE) | ||
| 60 | |||
| 61 | /* listeners that hard code group numbers near the top */ | ||
| 62 | #define DNOTIFY_GROUP_NUM UINT_MAX | ||
| 63 | #define INOTIFY_GROUP_NUM (DNOTIFY_GROUP_NUM-1) | ||
| 64 | |||
| 65 | struct fsnotify_group; | ||
| 66 | struct fsnotify_event; | ||
| 67 | struct fsnotify_mark_entry; | ||
| 68 | struct fsnotify_event_private_data; | ||
| 69 | |||
| 70 | /* | ||
| 71 | * Each group much define these ops. The fsnotify infrastructure will call | ||
| 72 | * these operations for each relevant group. | ||
| 73 | * | ||
| 74 | * should_send_event - given a group, inode, and mask this function determines | ||
| 75 | * if the group is interested in this event. | ||
| 76 | * handle_event - main call for a group to handle an fs event | ||
| 77 | * free_group_priv - called when a group refcnt hits 0 to clean up the private union | ||
| 78 | * freeing-mark - this means that a mark has been flagged to die when everything | ||
| 79 | * finishes using it. The function is supplied with what must be a | ||
| 80 | * valid group and inode to use to clean up. | ||
| 81 | */ | ||
| 82 | struct fsnotify_ops { | ||
| 83 | bool (*should_send_event)(struct fsnotify_group *group, struct inode *inode, __u32 mask); | ||
| 84 | int (*handle_event)(struct fsnotify_group *group, struct fsnotify_event *event); | ||
| 85 | void (*free_group_priv)(struct fsnotify_group *group); | ||
| 86 | void (*freeing_mark)(struct fsnotify_mark_entry *entry, struct fsnotify_group *group); | ||
| 87 | void (*free_event_priv)(struct fsnotify_event_private_data *priv); | ||
| 88 | }; | ||
| 89 | |||
| 90 | /* | ||
| 91 | * A group is a "thing" that wants to receive notification about filesystem | ||
| 92 | * events. The mask holds the subset of event types this group cares about. | ||
| 93 | * refcnt on a group is up to the implementor and at any moment if it goes 0 | ||
| 94 | * everything will be cleaned up. | ||
| 95 | */ | ||
| 96 | struct fsnotify_group { | ||
| 97 | /* | ||
| 98 | * global list of all groups receiving events from fsnotify. | ||
| 99 | * anchored by fsnotify_groups and protected by either fsnotify_grp_mutex | ||
| 100 | * or fsnotify_grp_srcu depending on write vs read. | ||
| 101 | */ | ||
| 102 | struct list_head group_list; | ||
| 103 | |||
| 104 | /* | ||
| 105 | * Defines all of the event types in which this group is interested. | ||
| 106 | * This mask is a bitwise OR of the FS_* events from above. Each time | ||
| 107 | * this mask changes for a group (if it changes) the correct functions | ||
| 108 | * must be called to update the global structures which indicate global | ||
| 109 | * interest in event types. | ||
| 110 | */ | ||
| 111 | __u32 mask; | ||
| 112 | |||
| 113 | /* | ||
| 114 | * How the refcnt is used is up to each group. When the refcnt hits 0 | ||
| 115 | * fsnotify will clean up all of the resources associated with this group. | ||
| 116 | * As an example, the dnotify group will always have a refcnt=1 and that | ||
| 117 | * will never change. Inotify, on the other hand, has a group per | ||
| 118 | * inotify_init() and the refcnt will hit 0 only when that fd has been | ||
| 119 | * closed. | ||
| 120 | */ | ||
| 121 | atomic_t refcnt; /* things with interest in this group */ | ||
| 122 | unsigned int group_num; /* simply prevents accidental group collision */ | ||
| 123 | |||
| 124 | const struct fsnotify_ops *ops; /* how this group handles things */ | ||
| 125 | |||
| 126 | /* needed to send notification to userspace */ | ||
| 127 | struct mutex notification_mutex; /* protect the notification_list */ | ||
| 128 | struct list_head notification_list; /* list of event_holder this group needs to send to userspace */ | ||
| 129 | wait_queue_head_t notification_waitq; /* read() on the notification file blocks on this waitq */ | ||
| 130 | unsigned int q_len; /* events on the queue */ | ||
| 131 | unsigned int max_events; /* maximum events allowed on the list */ | ||
| 132 | |||
| 133 | /* stores all fastapth entries assoc with this group so they can be cleaned on unregister */ | ||
| 134 | spinlock_t mark_lock; /* protect mark_entries list */ | ||
| 135 | atomic_t num_marks; /* 1 for each mark entry and 1 for not being | ||
| 136 | * past the point of no return when freeing | ||
| 137 | * a group */ | ||
| 138 | struct list_head mark_entries; /* all inode mark entries for this group */ | ||
| 139 | |||
| 140 | /* prevents double list_del of group_list. protected by global fsnotify_grp_mutex */ | ||
| 141 | bool on_group_list; | ||
| 142 | |||
| 143 | /* groups can define private fields here or use the void *private */ | ||
| 144 | union { | ||
| 145 | void *private; | ||
| 146 | #ifdef CONFIG_INOTIFY_USER | ||
| 147 | struct inotify_group_private_data { | ||
| 148 | spinlock_t idr_lock; | ||
| 149 | struct idr idr; | ||
| 150 | u32 last_wd; | ||
| 151 | struct fasync_struct *fa; /* async notification */ | ||
| 152 | struct user_struct *user; | ||
| 153 | } inotify_data; | ||
| 154 | #endif | ||
| 155 | }; | ||
| 156 | }; | ||
| 157 | |||
| 158 | /* | ||
| 159 | * A single event can be queued in multiple group->notification_lists. | ||
| 160 | * | ||
| 161 | * each group->notification_list will point to an event_holder which in turns points | ||
| 162 | * to the actual event that needs to be sent to userspace. | ||
| 163 | * | ||
| 164 | * Seemed cheaper to create a refcnt'd event and a small holder for every group | ||
| 165 | * than create a different event for every group | ||
| 166 | * | ||
| 167 | */ | ||
| 168 | struct fsnotify_event_holder { | ||
| 169 | struct fsnotify_event *event; | ||
| 170 | struct list_head event_list; | ||
| 171 | }; | ||
| 172 | |||
| 173 | /* | ||
| 174 | * Inotify needs to tack data onto an event. This struct lets us later find the | ||
| 175 | * correct private data of the correct group. | ||
| 176 | */ | ||
| 177 | struct fsnotify_event_private_data { | ||
| 178 | struct fsnotify_group *group; | ||
| 179 | struct list_head event_list; | ||
| 180 | }; | ||
| 181 | |||
| 182 | /* | ||
| 183 | * all of the information about the original object we want to now send to | ||
| 184 | * a group. If you want to carry more info from the accessing task to the | ||
| 185 | * listener this structure is where you need to be adding fields. | ||
| 186 | */ | ||
| 187 | struct fsnotify_event { | ||
| 188 | /* | ||
| 189 | * If we create an event we are also likely going to need a holder | ||
| 190 | * to link to a group. So embed one holder in the event. Means only | ||
| 191 | * one allocation for the common case where we only have one group | ||
| 192 | */ | ||
| 193 | struct fsnotify_event_holder holder; | ||
| 194 | spinlock_t lock; /* protection for the associated event_holder and private_list */ | ||
| 195 | /* to_tell may ONLY be dereferenced during handle_event(). */ | ||
| 196 | struct inode *to_tell; /* either the inode the event happened to or its parent */ | ||
| 197 | /* | ||
| 198 | * depending on the event type we should have either a path or inode | ||
| 199 | * We hold a reference on path, but NOT on inode. Since we have the ref on | ||
| 200 | * the path, it may be dereferenced at any point during this object's | ||
| 201 | * lifetime. That reference is dropped when this object's refcnt hits | ||
| 202 | * 0. If this event contains an inode instead of a path, the inode may | ||
| 203 | * ONLY be used during handle_event(). | ||
| 204 | */ | ||
| 205 | union { | ||
| 206 | struct path path; | ||
| 207 | struct inode *inode; | ||
| 208 | }; | ||
| 209 | /* when calling fsnotify tell it if the data is a path or inode */ | ||
| 210 | #define FSNOTIFY_EVENT_NONE 0 | ||
| 211 | #define FSNOTIFY_EVENT_PATH 1 | ||
| 212 | #define FSNOTIFY_EVENT_INODE 2 | ||
| 213 | #define FSNOTIFY_EVENT_FILE 3 | ||
| 214 | int data_type; /* which of the above union we have */ | ||
| 215 | atomic_t refcnt; /* how many groups still are using/need to send this event */ | ||
| 216 | __u32 mask; /* the type of access, bitwise OR for FS_* event types */ | ||
| 217 | |||
| 218 | u32 sync_cookie; /* used to corrolate events, namely inotify mv events */ | ||
| 219 | char *file_name; | ||
| 220 | size_t name_len; | ||
| 221 | |||
| 222 | struct list_head private_data_list; /* groups can store private data here */ | ||
| 223 | }; | ||
| 224 | |||
| 225 | /* | ||
| 226 | * a mark is simply an entry attached to an in core inode which allows an | ||
| 227 | * fsnotify listener to indicate they are either no longer interested in events | ||
| 228 | * of a type matching mask or only interested in those events. | ||
| 229 | * | ||
| 230 | * these are flushed when an inode is evicted from core and may be flushed | ||
| 231 | * when the inode is modified (as seen by fsnotify_access). Some fsnotify users | ||
| 232 | * (such as dnotify) will flush these when the open fd is closed and not at | ||
| 233 | * inode eviction or modification. | ||
| 234 | */ | ||
| 235 | struct fsnotify_mark_entry { | ||
| 236 | __u32 mask; /* mask this mark entry is for */ | ||
| 237 | /* we hold ref for each i_list and g_list. also one ref for each 'thing' | ||
| 238 | * in kernel that found and may be using this mark. */ | ||
| 239 | atomic_t refcnt; /* active things looking at this mark */ | ||
| 240 | struct inode *inode; /* inode this entry is associated with */ | ||
| 241 | struct fsnotify_group *group; /* group this mark entry is for */ | ||
| 242 | struct hlist_node i_list; /* list of mark_entries by inode->i_fsnotify_mark_entries */ | ||
| 243 | struct list_head g_list; /* list of mark_entries by group->i_fsnotify_mark_entries */ | ||
| 244 | spinlock_t lock; /* protect group, inode, and killme */ | ||
| 245 | struct list_head free_i_list; /* tmp list used when freeing this mark */ | ||
| 246 | struct list_head free_g_list; /* tmp list used when freeing this mark */ | ||
| 247 | void (*free_mark)(struct fsnotify_mark_entry *entry); /* called on final put+free */ | ||
| 248 | }; | ||
| 249 | |||
| 250 | #ifdef CONFIG_FSNOTIFY | ||
| 251 | |||
| 252 | /* called from the vfs helpers */ | ||
| 253 | |||
| 254 | /* main fsnotify call to send events */ | ||
| 255 | extern void fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, | ||
| 256 | const char *name, u32 cookie); | ||
| 257 | extern void __fsnotify_parent(struct dentry *dentry, __u32 mask); | ||
| 258 | extern void __fsnotify_inode_delete(struct inode *inode); | ||
| 259 | extern u32 fsnotify_get_cookie(void); | ||
| 260 | |||
| 261 | static inline int fsnotify_inode_watches_children(struct inode *inode) | ||
| 262 | { | ||
| 263 | /* FS_EVENT_ON_CHILD is set if the inode may care */ | ||
| 264 | if (!(inode->i_fsnotify_mask & FS_EVENT_ON_CHILD)) | ||
| 265 | return 0; | ||
| 266 | /* this inode might care about child events, does it care about the | ||
| 267 | * specific set of events that can happen on a child? */ | ||
| 268 | return inode->i_fsnotify_mask & FS_EVENTS_POSS_ON_CHILD; | ||
| 269 | } | ||
| 270 | |||
| 271 | /* | ||
| 272 | * Update the dentry with a flag indicating the interest of its parent to receive | ||
| 273 | * filesystem events when those events happens to this dentry->d_inode. | ||
| 274 | */ | ||
| 275 | static inline void __fsnotify_update_dcache_flags(struct dentry *dentry) | ||
| 276 | { | ||
| 277 | struct dentry *parent; | ||
| 278 | |||
| 279 | assert_spin_locked(&dcache_lock); | ||
| 280 | assert_spin_locked(&dentry->d_lock); | ||
| 281 | |||
| 282 | parent = dentry->d_parent; | ||
| 283 | if (fsnotify_inode_watches_children(parent->d_inode)) | ||
| 284 | dentry->d_flags |= DCACHE_FSNOTIFY_PARENT_WATCHED; | ||
| 285 | else | ||
| 286 | dentry->d_flags &= ~DCACHE_FSNOTIFY_PARENT_WATCHED; | ||
| 287 | } | ||
| 288 | |||
| 289 | /* | ||
| 290 | * fsnotify_d_instantiate - instantiate a dentry for inode | ||
| 291 | * Called with dcache_lock held. | ||
| 292 | */ | ||
| 293 | static inline void __fsnotify_d_instantiate(struct dentry *dentry, struct inode *inode) | ||
| 294 | { | ||
| 295 | if (!inode) | ||
| 296 | return; | ||
| 297 | |||
| 298 | assert_spin_locked(&dcache_lock); | ||
| 299 | |||
| 300 | spin_lock(&dentry->d_lock); | ||
| 301 | __fsnotify_update_dcache_flags(dentry); | ||
| 302 | spin_unlock(&dentry->d_lock); | ||
| 303 | } | ||
| 304 | |||
| 305 | /* called from fsnotify listeners, such as fanotify or dnotify */ | ||
| 306 | |||
| 307 | /* must call when a group changes its ->mask */ | ||
| 308 | extern void fsnotify_recalc_global_mask(void); | ||
| 309 | /* get a reference to an existing or create a new group */ | ||
| 310 | extern struct fsnotify_group *fsnotify_obtain_group(unsigned int group_num, | ||
| 311 | __u32 mask, | ||
| 312 | const struct fsnotify_ops *ops); | ||
| 313 | /* run all marks associated with this group and update group->mask */ | ||
| 314 | extern void fsnotify_recalc_group_mask(struct fsnotify_group *group); | ||
| 315 | /* drop reference on a group from fsnotify_obtain_group */ | ||
| 316 | extern void fsnotify_put_group(struct fsnotify_group *group); | ||
| 317 | |||
| 318 | /* take a reference to an event */ | ||
| 319 | extern void fsnotify_get_event(struct fsnotify_event *event); | ||
| 320 | extern void fsnotify_put_event(struct fsnotify_event *event); | ||
| 321 | /* find private data previously attached to an event and unlink it */ | ||
| 322 | extern struct fsnotify_event_private_data *fsnotify_remove_priv_from_event(struct fsnotify_group *group, | ||
| 323 | struct fsnotify_event *event); | ||
| 324 | |||
| 325 | /* attach the event to the group notification queue */ | ||
| 326 | extern int fsnotify_add_notify_event(struct fsnotify_group *group, struct fsnotify_event *event, | ||
| 327 | struct fsnotify_event_private_data *priv); | ||
| 328 | /* true if the group notification queue is empty */ | ||
| 329 | extern bool fsnotify_notify_queue_is_empty(struct fsnotify_group *group); | ||
| 330 | /* return, but do not dequeue the first event on the notification queue */ | ||
| 331 | extern struct fsnotify_event *fsnotify_peek_notify_event(struct fsnotify_group *group); | ||
| 332 | /* return AND dequeue the first event on the notification queue */ | ||
| 333 | extern struct fsnotify_event *fsnotify_remove_notify_event(struct fsnotify_group *group); | ||
| 334 | |||
| 335 | /* functions used to manipulate the marks attached to inodes */ | ||
| 336 | |||
| 337 | /* run all marks associated with an inode and update inode->i_fsnotify_mask */ | ||
| 338 | extern void fsnotify_recalc_inode_mask(struct inode *inode); | ||
| 339 | extern void fsnotify_init_mark(struct fsnotify_mark_entry *entry, void (*free_mark)(struct fsnotify_mark_entry *entry)); | ||
| 340 | /* find (and take a reference) to a mark associated with group and inode */ | ||
| 341 | extern struct fsnotify_mark_entry *fsnotify_find_mark_entry(struct fsnotify_group *group, struct inode *inode); | ||
| 342 | /* attach the mark to both the group and the inode */ | ||
| 343 | extern int fsnotify_add_mark(struct fsnotify_mark_entry *entry, struct fsnotify_group *group, struct inode *inode); | ||
| 344 | /* given a mark, flag it to be freed when all references are dropped */ | ||
| 345 | extern void fsnotify_destroy_mark_by_entry(struct fsnotify_mark_entry *entry); | ||
| 346 | /* run all the marks in a group, and flag them to be freed */ | ||
| 347 | extern void fsnotify_clear_marks_by_group(struct fsnotify_group *group); | ||
| 348 | extern void fsnotify_get_mark(struct fsnotify_mark_entry *entry); | ||
| 349 | extern void fsnotify_put_mark(struct fsnotify_mark_entry *entry); | ||
| 350 | extern void fsnotify_unmount_inodes(struct list_head *list); | ||
| 351 | |||
| 352 | /* put here because inotify does some weird stuff when destroying watches */ | ||
| 353 | extern struct fsnotify_event *fsnotify_create_event(struct inode *to_tell, __u32 mask, | ||
| 354 | void *data, int data_is, const char *name, | ||
| 355 | u32 cookie); | ||
| 356 | |||
| 357 | #else | ||
| 358 | |||
| 359 | static inline void fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, | ||
| 360 | const char *name, u32 cookie) | ||
| 361 | {} | ||
| 362 | |||
| 363 | static inline void __fsnotify_parent(struct dentry *dentry, __u32 mask) | ||
| 364 | {} | ||
| 365 | |||
| 366 | static inline void __fsnotify_inode_delete(struct inode *inode) | ||
| 367 | {} | ||
| 368 | |||
| 369 | static inline void __fsnotify_update_dcache_flags(struct dentry *dentry) | ||
| 370 | {} | ||
| 371 | |||
| 372 | static inline void __fsnotify_d_instantiate(struct dentry *dentry, struct inode *inode) | ||
| 373 | {} | ||
| 374 | |||
| 375 | static inline u32 fsnotify_get_cookie(void) | ||
| 376 | { | ||
| 377 | return 0; | ||
| 378 | } | ||
| 379 | |||
| 380 | static inline void fsnotify_unmount_inodes(struct list_head *list) | ||
| 381 | {} | ||
| 382 | |||
| 383 | #endif /* CONFIG_FSNOTIFY */ | ||
| 384 | |||
| 385 | #endif /* __KERNEL __ */ | ||
| 386 | |||
| 387 | #endif /* __LINUX_FSNOTIFY_BACKEND_H */ | ||
diff --git a/include/linux/fuse.h b/include/linux/fuse.h index 162e5defe683..d41ed593f79f 100644 --- a/include/linux/fuse.h +++ b/include/linux/fuse.h | |||
| @@ -121,6 +121,13 @@ struct fuse_file_lock { | |||
| 121 | #define FUSE_BIG_WRITES (1 << 5) | 121 | #define FUSE_BIG_WRITES (1 << 5) |
| 122 | 122 | ||
| 123 | /** | 123 | /** |
| 124 | * CUSE INIT request/reply flags | ||
| 125 | * | ||
| 126 | * CUSE_UNRESTRICTED_IOCTL: use unrestricted ioctl | ||
| 127 | */ | ||
| 128 | #define CUSE_UNRESTRICTED_IOCTL (1 << 0) | ||
| 129 | |||
| 130 | /** | ||
| 124 | * Release flags | 131 | * Release flags |
| 125 | */ | 132 | */ |
| 126 | #define FUSE_RELEASE_FLUSH (1 << 0) | 133 | #define FUSE_RELEASE_FLUSH (1 << 0) |
| @@ -210,6 +217,9 @@ enum fuse_opcode { | |||
| 210 | FUSE_DESTROY = 38, | 217 | FUSE_DESTROY = 38, |
| 211 | FUSE_IOCTL = 39, | 218 | FUSE_IOCTL = 39, |
| 212 | FUSE_POLL = 40, | 219 | FUSE_POLL = 40, |
| 220 | |||
| 221 | /* CUSE specific operations */ | ||
| 222 | CUSE_INIT = 4096, | ||
| 213 | }; | 223 | }; |
| 214 | 224 | ||
| 215 | enum fuse_notify_code { | 225 | enum fuse_notify_code { |
| @@ -401,6 +411,27 @@ struct fuse_init_out { | |||
| 401 | __u32 max_write; | 411 | __u32 max_write; |
| 402 | }; | 412 | }; |
| 403 | 413 | ||
| 414 | #define CUSE_INIT_INFO_MAX 4096 | ||
| 415 | |||
| 416 | struct cuse_init_in { | ||
| 417 | __u32 major; | ||
| 418 | __u32 minor; | ||
| 419 | __u32 unused; | ||
| 420 | __u32 flags; | ||
| 421 | }; | ||
| 422 | |||
| 423 | struct cuse_init_out { | ||
| 424 | __u32 major; | ||
| 425 | __u32 minor; | ||
| 426 | __u32 unused; | ||
| 427 | __u32 flags; | ||
| 428 | __u32 max_read; | ||
| 429 | __u32 max_write; | ||
| 430 | __u32 dev_major; /* chardev major */ | ||
| 431 | __u32 dev_minor; /* chardev minor */ | ||
| 432 | __u32 spare[10]; | ||
| 433 | }; | ||
| 434 | |||
| 404 | struct fuse_interrupt_in { | 435 | struct fuse_interrupt_in { |
| 405 | __u64 unique; | 436 | __u64 unique; |
| 406 | }; | 437 | }; |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 149fda264c86..7cbd38d363a2 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
| @@ -114,6 +114,7 @@ struct hd_struct { | |||
| 114 | #define GENHD_FL_UP 16 | 114 | #define GENHD_FL_UP 16 |
| 115 | #define GENHD_FL_SUPPRESS_PARTITION_INFO 32 | 115 | #define GENHD_FL_SUPPRESS_PARTITION_INFO 32 |
| 116 | #define GENHD_FL_EXT_DEVT 64 /* allow extended devt */ | 116 | #define GENHD_FL_EXT_DEVT 64 /* allow extended devt */ |
| 117 | #define GENHD_FL_NATIVE_CAPACITY 128 | ||
| 117 | 118 | ||
| 118 | #define BLK_SCSI_MAX_CMDS (256) | 119 | #define BLK_SCSI_MAX_CMDS (256) |
| 119 | #define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8)) | 120 | #define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8)) |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 0bbc15f54536..3760e7c5de02 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
| @@ -85,6 +85,9 @@ struct vm_area_struct; | |||
| 85 | __GFP_NOWARN|__GFP_REPEAT|__GFP_NOFAIL|\ | 85 | __GFP_NOWARN|__GFP_REPEAT|__GFP_NOFAIL|\ |
| 86 | __GFP_NORETRY|__GFP_NOMEMALLOC) | 86 | __GFP_NORETRY|__GFP_NOMEMALLOC) |
| 87 | 87 | ||
| 88 | /* Control slab gfp mask during early boot */ | ||
| 89 | #define SLAB_GFP_BOOT_MASK __GFP_BITS_MASK & ~(__GFP_WAIT|__GFP_IO|__GFP_FS) | ||
| 90 | |||
| 88 | /* Control allocation constraints */ | 91 | /* Control allocation constraints */ |
| 89 | #define GFP_CONSTRAINT_MASK (__GFP_HARDWALL|__GFP_THISNODE) | 92 | #define GFP_CONSTRAINT_MASK (__GFP_HARDWALL|__GFP_THISNODE) |
| 90 | 93 | ||
diff --git a/include/linux/hid.h b/include/linux/hid.h index a72876e43589..53489fd4d700 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
| @@ -238,6 +238,42 @@ struct hid_item { | |||
| 238 | #define HID_GD_RIGHT 0x00010092 | 238 | #define HID_GD_RIGHT 0x00010092 |
| 239 | #define HID_GD_LEFT 0x00010093 | 239 | #define HID_GD_LEFT 0x00010093 |
| 240 | 240 | ||
| 241 | #define HID_DG_DIGITIZER 0x000d0001 | ||
| 242 | #define HID_DG_PEN 0x000d0002 | ||
| 243 | #define HID_DG_LIGHTPEN 0x000d0003 | ||
| 244 | #define HID_DG_TOUCHSCREEN 0x000d0004 | ||
| 245 | #define HID_DG_TOUCHPAD 0x000d0005 | ||
| 246 | #define HID_DG_STYLUS 0x000d0020 | ||
| 247 | #define HID_DG_PUCK 0x000d0021 | ||
| 248 | #define HID_DG_FINGER 0x000d0022 | ||
| 249 | #define HID_DG_TIPPRESSURE 0x000d0030 | ||
| 250 | #define HID_DG_BARRELPRESSURE 0x000d0031 | ||
| 251 | #define HID_DG_INRANGE 0x000d0032 | ||
| 252 | #define HID_DG_TOUCH 0x000d0033 | ||
| 253 | #define HID_DG_UNTOUCH 0x000d0034 | ||
| 254 | #define HID_DG_TAP 0x000d0035 | ||
| 255 | #define HID_DG_TABLETFUNCTIONKEY 0x000d0039 | ||
| 256 | #define HID_DG_PROGRAMCHANGEKEY 0x000d003a | ||
| 257 | #define HID_DG_INVERT 0x000d003c | ||
| 258 | #define HID_DG_TIPSWITCH 0x000d0042 | ||
| 259 | #define HID_DG_TIPSWITCH2 0x000d0043 | ||
| 260 | #define HID_DG_BARRELSWITCH 0x000d0044 | ||
| 261 | #define HID_DG_ERASER 0x000d0045 | ||
| 262 | #define HID_DG_TABLETPICK 0x000d0046 | ||
| 263 | /* | ||
| 264 | * as of May 20, 2009 the usages below are not yet in the official USB spec | ||
| 265 | * but are being pushed by Microsft as described in their paper "Digitizer | ||
| 266 | * Drivers for Windows Touch and Pen-Based Computers" | ||
| 267 | */ | ||
| 268 | #define HID_DG_CONFIDENCE 0x000d0047 | ||
| 269 | #define HID_DG_WIDTH 0x000d0048 | ||
| 270 | #define HID_DG_HEIGHT 0x000d0049 | ||
| 271 | #define HID_DG_CONTACTID 0x000d0051 | ||
| 272 | #define HID_DG_INPUTMODE 0x000d0052 | ||
| 273 | #define HID_DG_DEVICEINDEX 0x000d0053 | ||
| 274 | #define HID_DG_CONTACTCOUNT 0x000d0054 | ||
| 275 | #define HID_DG_CONTACTMAX 0x000d0055 | ||
| 276 | |||
| 241 | /* | 277 | /* |
| 242 | * HID report types --- Ouch! HID spec says 1 2 3! | 278 | * HID report types --- Ouch! HID spec says 1 2 3! |
| 243 | */ | 279 | */ |
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 0d2f7c8a33d6..7400900de94a 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
| @@ -30,8 +30,11 @@ struct hrtimer_cpu_base; | |||
| 30 | * Mode arguments of xxx_hrtimer functions: | 30 | * Mode arguments of xxx_hrtimer functions: |
| 31 | */ | 31 | */ |
| 32 | enum hrtimer_mode { | 32 | enum hrtimer_mode { |
| 33 | HRTIMER_MODE_ABS, /* Time value is absolute */ | 33 | HRTIMER_MODE_ABS = 0x0, /* Time value is absolute */ |
| 34 | HRTIMER_MODE_REL, /* Time value is relative to now */ | 34 | HRTIMER_MODE_REL = 0x1, /* Time value is relative to now */ |
| 35 | HRTIMER_MODE_PINNED = 0x02, /* Timer is bound to CPU */ | ||
| 36 | HRTIMER_MODE_ABS_PINNED = 0x02, | ||
| 37 | HRTIMER_MODE_REL_PINNED = 0x03, | ||
| 35 | }; | 38 | }; |
| 36 | 39 | ||
| 37 | /* | 40 | /* |
diff --git a/include/linux/i2c-ocores.h b/include/linux/i2c-ocores.h index 8ed591b0887e..4d5e57ff6614 100644 --- a/include/linux/i2c-ocores.h +++ b/include/linux/i2c-ocores.h | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | struct ocores_i2c_platform_data { | 14 | struct ocores_i2c_platform_data { |
| 15 | u32 regstep; /* distance between registers */ | 15 | u32 regstep; /* distance between registers */ |
| 16 | u32 clock_khz; /* input clock in kHz */ | 16 | u32 clock_khz; /* input clock in kHz */ |
| 17 | u8 num_devices; /* number of devices in the devices list */ | ||
| 18 | struct i2c_board_info const *devices; /* devices connected to the bus */ | ||
| 17 | }; | 19 | }; |
| 18 | 20 | ||
| 19 | #endif /* _LINUX_I2C_OCORES_H */ | 21 | #endif /* _LINUX_I2C_OCORES_H */ |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 867cb68d8461..a6c6a2fad7c8 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -178,7 +178,7 @@ typedef u8 hwif_chipset_t; | |||
| 178 | /* | 178 | /* |
| 179 | * Structure to hold all information about the location of this port | 179 | * Structure to hold all information about the location of this port |
| 180 | */ | 180 | */ |
| 181 | typedef struct hw_regs_s { | 181 | struct ide_hw { |
| 182 | union { | 182 | union { |
| 183 | struct ide_io_ports io_ports; | 183 | struct ide_io_ports io_ports; |
| 184 | unsigned long io_ports_array[IDE_NR_PORTS]; | 184 | unsigned long io_ports_array[IDE_NR_PORTS]; |
| @@ -186,12 +186,11 @@ typedef struct hw_regs_s { | |||
| 186 | 186 | ||
| 187 | int irq; /* our irq number */ | 187 | int irq; /* our irq number */ |
| 188 | ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ | 188 | ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ |
| 189 | hwif_chipset_t chipset; | ||
| 190 | struct device *dev, *parent; | 189 | struct device *dev, *parent; |
| 191 | unsigned long config; | 190 | unsigned long config; |
| 192 | } hw_regs_t; | 191 | }; |
| 193 | 192 | ||
| 194 | static inline void ide_std_init_ports(hw_regs_t *hw, | 193 | static inline void ide_std_init_ports(struct ide_hw *hw, |
| 195 | unsigned long io_addr, | 194 | unsigned long io_addr, |
| 196 | unsigned long ctl_addr) | 195 | unsigned long ctl_addr) |
| 197 | { | 196 | { |
| @@ -218,21 +217,12 @@ static inline void ide_std_init_ports(hw_regs_t *hw, | |||
| 218 | 217 | ||
| 219 | /* | 218 | /* |
| 220 | * Special Driver Flags | 219 | * Special Driver Flags |
| 221 | * | ||
| 222 | * set_geometry : respecify drive geometry | ||
| 223 | * recalibrate : seek to cyl 0 | ||
| 224 | * set_multmode : set multmode count | ||
| 225 | * reserved : unused | ||
| 226 | */ | 220 | */ |
| 227 | typedef union { | 221 | enum { |
| 228 | unsigned all : 8; | 222 | IDE_SFLAG_SET_GEOMETRY = (1 << 0), |
| 229 | struct { | 223 | IDE_SFLAG_RECALIBRATE = (1 << 1), |
| 230 | unsigned set_geometry : 1; | 224 | IDE_SFLAG_SET_MULTMODE = (1 << 2), |
| 231 | unsigned recalibrate : 1; | 225 | }; |
| 232 | unsigned set_multmode : 1; | ||
| 233 | unsigned reserved : 5; | ||
| 234 | } b; | ||
| 235 | } special_t; | ||
| 236 | 226 | ||
| 237 | /* | 227 | /* |
| 238 | * Status returned from various ide_ functions | 228 | * Status returned from various ide_ functions |
| @@ -391,6 +381,7 @@ struct ide_drive_s; | |||
| 391 | struct ide_disk_ops { | 381 | struct ide_disk_ops { |
| 392 | int (*check)(struct ide_drive_s *, const char *); | 382 | int (*check)(struct ide_drive_s *, const char *); |
| 393 | int (*get_capacity)(struct ide_drive_s *); | 383 | int (*get_capacity)(struct ide_drive_s *); |
| 384 | u64 (*set_capacity)(struct ide_drive_s *, u64); | ||
| 394 | void (*setup)(struct ide_drive_s *); | 385 | void (*setup)(struct ide_drive_s *); |
| 395 | void (*flush)(struct ide_drive_s *); | 386 | void (*flush)(struct ide_drive_s *); |
| 396 | int (*init_media)(struct ide_drive_s *, struct gendisk *); | 387 | int (*init_media)(struct ide_drive_s *, struct gendisk *); |
| @@ -468,6 +459,8 @@ enum { | |||
| 468 | IDE_DFLAG_NICE1 = (1 << 5), | 459 | IDE_DFLAG_NICE1 = (1 << 5), |
| 469 | /* device is physically present */ | 460 | /* device is physically present */ |
| 470 | IDE_DFLAG_PRESENT = (1 << 6), | 461 | IDE_DFLAG_PRESENT = (1 << 6), |
| 462 | /* disable Host Protected Area */ | ||
| 463 | IDE_DFLAG_NOHPA = (1 << 7), | ||
| 471 | /* id read from device (synthetic if not set) */ | 464 | /* id read from device (synthetic if not set) */ |
| 472 | IDE_DFLAG_ID_READ = (1 << 8), | 465 | IDE_DFLAG_ID_READ = (1 << 8), |
| 473 | IDE_DFLAG_NOPROBE = (1 << 9), | 466 | IDE_DFLAG_NOPROBE = (1 << 9), |
| @@ -506,6 +499,7 @@ enum { | |||
| 506 | /* write protect */ | 499 | /* write protect */ |
| 507 | IDE_DFLAG_WP = (1 << 29), | 500 | IDE_DFLAG_WP = (1 << 29), |
| 508 | IDE_DFLAG_FORMAT_IN_PROGRESS = (1 << 30), | 501 | IDE_DFLAG_FORMAT_IN_PROGRESS = (1 << 30), |
| 502 | IDE_DFLAG_NIEN_QUIRK = (1 << 31), | ||
| 509 | }; | 503 | }; |
| 510 | 504 | ||
| 511 | struct ide_drive_s { | 505 | struct ide_drive_s { |
| @@ -530,14 +524,13 @@ struct ide_drive_s { | |||
| 530 | unsigned long sleep; /* sleep until this time */ | 524 | unsigned long sleep; /* sleep until this time */ |
| 531 | unsigned long timeout; /* max time to wait for irq */ | 525 | unsigned long timeout; /* max time to wait for irq */ |
| 532 | 526 | ||
| 533 | special_t special; /* special action flags */ | 527 | u8 special_flags; /* special action flags */ |
| 534 | 528 | ||
| 535 | u8 select; /* basic drive/head select reg value */ | 529 | u8 select; /* basic drive/head select reg value */ |
| 536 | u8 retry_pio; /* retrying dma capable host in pio */ | 530 | u8 retry_pio; /* retrying dma capable host in pio */ |
| 537 | u8 waiting_for_dma; /* dma currently in progress */ | 531 | u8 waiting_for_dma; /* dma currently in progress */ |
| 538 | u8 dma; /* atapi dma flag */ | 532 | u8 dma; /* atapi dma flag */ |
| 539 | 533 | ||
| 540 | u8 quirk_list; /* considered quirky, set for a specific host */ | ||
| 541 | u8 init_speed; /* transfer rate set at boot */ | 534 | u8 init_speed; /* transfer rate set at boot */ |
| 542 | u8 current_speed; /* current transfer rate set */ | 535 | u8 current_speed; /* current transfer rate set */ |
| 543 | u8 desired_speed; /* desired transfer rate set */ | 536 | u8 desired_speed; /* desired transfer rate set */ |
| @@ -562,8 +555,7 @@ struct ide_drive_s { | |||
| 562 | unsigned int drive_data; /* used by set_pio_mode/dev_select() */ | 555 | unsigned int drive_data; /* used by set_pio_mode/dev_select() */ |
| 563 | unsigned int failures; /* current failure count */ | 556 | unsigned int failures; /* current failure count */ |
| 564 | unsigned int max_failures; /* maximum allowed failure count */ | 557 | unsigned int max_failures; /* maximum allowed failure count */ |
| 565 | u64 probed_capacity;/* initial reported media capacity (ide-cd only currently) */ | 558 | u64 probed_capacity;/* initial/native media capacity */ |
| 566 | |||
| 567 | u64 capacity64; /* total number of sectors */ | 559 | u64 capacity64; /* total number of sectors */ |
| 568 | 560 | ||
| 569 | int lun; /* logical unit */ | 561 | int lun; /* logical unit */ |
| @@ -1222,7 +1214,7 @@ static inline int ide_pci_is_in_compatibility_mode(struct pci_dev *dev) | |||
| 1222 | } | 1214 | } |
| 1223 | 1215 | ||
| 1224 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, | 1216 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, |
| 1225 | hw_regs_t *, hw_regs_t **); | 1217 | struct ide_hw *, struct ide_hw **); |
| 1226 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); | 1218 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); |
| 1227 | 1219 | ||
| 1228 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI | 1220 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI |
| @@ -1461,16 +1453,18 @@ static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} | |||
| 1461 | void ide_register_region(struct gendisk *); | 1453 | void ide_register_region(struct gendisk *); |
| 1462 | void ide_unregister_region(struct gendisk *); | 1454 | void ide_unregister_region(struct gendisk *); |
| 1463 | 1455 | ||
| 1456 | void ide_check_nien_quirk_list(ide_drive_t *); | ||
| 1464 | void ide_undecoded_slave(ide_drive_t *); | 1457 | void ide_undecoded_slave(ide_drive_t *); |
| 1465 | 1458 | ||
| 1466 | void ide_port_apply_params(ide_hwif_t *); | 1459 | void ide_port_apply_params(ide_hwif_t *); |
| 1467 | int ide_sysfs_register_port(ide_hwif_t *); | 1460 | int ide_sysfs_register_port(ide_hwif_t *); |
| 1468 | 1461 | ||
| 1469 | struct ide_host *ide_host_alloc(const struct ide_port_info *, hw_regs_t **); | 1462 | struct ide_host *ide_host_alloc(const struct ide_port_info *, struct ide_hw **, |
| 1463 | unsigned int); | ||
| 1470 | void ide_host_free(struct ide_host *); | 1464 | void ide_host_free(struct ide_host *); |
| 1471 | int ide_host_register(struct ide_host *, const struct ide_port_info *, | 1465 | int ide_host_register(struct ide_host *, const struct ide_port_info *, |
| 1472 | hw_regs_t **); | 1466 | struct ide_hw **); |
| 1473 | int ide_host_add(const struct ide_port_info *, hw_regs_t **, | 1467 | int ide_host_add(const struct ide_port_info *, struct ide_hw **, unsigned int, |
| 1474 | struct ide_host **); | 1468 | struct ide_host **); |
| 1475 | void ide_host_remove(struct ide_host *); | 1469 | void ide_host_remove(struct ide_host *); |
| 1476 | int ide_legacy_device_add(const struct ide_port_info *, unsigned long); | 1470 | int ide_legacy_device_add(const struct ide_port_info *, unsigned long); |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 4b501b48ce86..a9173d5434d1 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
| @@ -493,6 +493,7 @@ struct ieee80211s_hdr { | |||
| 493 | /* Mesh flags */ | 493 | /* Mesh flags */ |
| 494 | #define MESH_FLAGS_AE_A4 0x1 | 494 | #define MESH_FLAGS_AE_A4 0x1 |
| 495 | #define MESH_FLAGS_AE_A5_A6 0x2 | 495 | #define MESH_FLAGS_AE_A5_A6 0x2 |
| 496 | #define MESH_FLAGS_AE 0x3 | ||
| 496 | #define MESH_FLAGS_PS_DEEP 0x4 | 497 | #define MESH_FLAGS_PS_DEEP 0x4 |
| 497 | 498 | ||
| 498 | /** | 499 | /** |
| @@ -540,10 +541,10 @@ struct ieee80211_tim_ie { | |||
| 540 | u8 dtim_period; | 541 | u8 dtim_period; |
| 541 | u8 bitmap_ctrl; | 542 | u8 bitmap_ctrl; |
| 542 | /* variable size: 1 - 251 bytes */ | 543 | /* variable size: 1 - 251 bytes */ |
| 543 | u8 virtual_map[0]; | 544 | u8 virtual_map[1]; |
| 544 | } __attribute__ ((packed)); | 545 | } __attribute__ ((packed)); |
| 545 | 546 | ||
| 546 | #define WLAN_SA_QUERY_TR_ID_LEN 16 | 547 | #define WLAN_SA_QUERY_TR_ID_LEN 2 |
| 547 | 548 | ||
| 548 | struct ieee80211_mgmt { | 549 | struct ieee80211_mgmt { |
| 549 | __le16 frame_control; | 550 | __le16 frame_control; |
| @@ -1068,8 +1069,12 @@ enum ieee80211_category { | |||
| 1068 | WLAN_CATEGORY_DLS = 2, | 1069 | WLAN_CATEGORY_DLS = 2, |
| 1069 | WLAN_CATEGORY_BACK = 3, | 1070 | WLAN_CATEGORY_BACK = 3, |
| 1070 | WLAN_CATEGORY_PUBLIC = 4, | 1071 | WLAN_CATEGORY_PUBLIC = 4, |
| 1072 | WLAN_CATEGORY_HT = 7, | ||
| 1071 | WLAN_CATEGORY_SA_QUERY = 8, | 1073 | WLAN_CATEGORY_SA_QUERY = 8, |
| 1074 | WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9, | ||
| 1072 | WLAN_CATEGORY_WMM = 17, | 1075 | WLAN_CATEGORY_WMM = 17, |
| 1076 | WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126, | ||
| 1077 | WLAN_CATEGORY_VENDOR_SPECIFIC = 127, | ||
| 1073 | }; | 1078 | }; |
| 1074 | 1079 | ||
| 1075 | /* SPECTRUM_MGMT action code */ | 1080 | /* SPECTRUM_MGMT action code */ |
| @@ -1081,6 +1086,15 @@ enum ieee80211_spectrum_mgmt_actioncode { | |||
| 1081 | WLAN_ACTION_SPCT_CHL_SWITCH = 4, | 1086 | WLAN_ACTION_SPCT_CHL_SWITCH = 4, |
| 1082 | }; | 1087 | }; |
| 1083 | 1088 | ||
| 1089 | /* Security key length */ | ||
| 1090 | enum ieee80211_key_len { | ||
| 1091 | WLAN_KEY_LEN_WEP40 = 5, | ||
| 1092 | WLAN_KEY_LEN_WEP104 = 13, | ||
| 1093 | WLAN_KEY_LEN_CCMP = 16, | ||
| 1094 | WLAN_KEY_LEN_TKIP = 32, | ||
| 1095 | WLAN_KEY_LEN_AES_CMAC = 16, | ||
| 1096 | }; | ||
| 1097 | |||
| 1084 | /* | 1098 | /* |
| 1085 | * IEEE 802.11-2007 7.3.2.9 Country information element | 1099 | * IEEE 802.11-2007 7.3.2.9 Country information element |
| 1086 | * | 1100 | * |
| @@ -1261,7 +1275,9 @@ static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr) | |||
| 1261 | if (ieee80211_has_protected(hdr->frame_control)) | 1275 | if (ieee80211_has_protected(hdr->frame_control)) |
| 1262 | return true; | 1276 | return true; |
| 1263 | category = ((u8 *) hdr) + 24; | 1277 | category = ((u8 *) hdr) + 24; |
| 1264 | return *category != WLAN_CATEGORY_PUBLIC; | 1278 | return *category != WLAN_CATEGORY_PUBLIC && |
| 1279 | *category != WLAN_CATEGORY_HT && | ||
| 1280 | *category != WLAN_CATEGORY_VENDOR_SPECIFIC; | ||
| 1265 | } | 1281 | } |
| 1266 | 1282 | ||
| 1267 | return false; | 1283 | return false; |
| @@ -1383,4 +1399,43 @@ static inline int ieee80211_freq_to_ofdm_chan(int s_freq, int freq) | |||
| 1383 | return -1; | 1399 | return -1; |
| 1384 | } | 1400 | } |
| 1385 | 1401 | ||
| 1402 | /** | ||
| 1403 | * ieee80211_tu_to_usec - convert time units (TU) to microseconds | ||
| 1404 | * @tu: the TUs | ||
| 1405 | */ | ||
| 1406 | static inline unsigned long ieee80211_tu_to_usec(unsigned long tu) | ||
| 1407 | { | ||
| 1408 | return 1024 * tu; | ||
| 1409 | } | ||
| 1410 | |||
| 1411 | /** | ||
| 1412 | * ieee80211_check_tim - check if AID bit is set in TIM | ||
| 1413 | * @tim: the TIM IE | ||
| 1414 | * @tim_len: length of the TIM IE | ||
| 1415 | * @aid: the AID to look for | ||
| 1416 | */ | ||
| 1417 | static inline bool ieee80211_check_tim(struct ieee80211_tim_ie *tim, | ||
| 1418 | u8 tim_len, u16 aid) | ||
| 1419 | { | ||
| 1420 | u8 mask; | ||
| 1421 | u8 index, indexn1, indexn2; | ||
| 1422 | |||
| 1423 | if (unlikely(!tim || tim_len < sizeof(*tim))) | ||
| 1424 | return false; | ||
| 1425 | |||
| 1426 | aid &= 0x3fff; | ||
| 1427 | index = aid / 8; | ||
| 1428 | mask = 1 << (aid & 7); | ||
| 1429 | |||
| 1430 | indexn1 = tim->bitmap_ctrl & 0xfe; | ||
| 1431 | indexn2 = tim_len + indexn1 - 4; | ||
| 1432 | |||
| 1433 | if (index < indexn1 || index > indexn2) | ||
| 1434 | return false; | ||
| 1435 | |||
| 1436 | index -= indexn1; | ||
| 1437 | |||
| 1438 | return !!(tim->virtual_map[index] & mask); | ||
| 1439 | } | ||
| 1440 | |||
| 1386 | #endif /* LINUX_IEEE80211_H */ | 1441 | #endif /* LINUX_IEEE80211_H */ |
diff --git a/include/linux/if.h b/include/linux/if.h index 1108f3e099e3..b9a6229f3be7 100644 --- a/include/linux/if.h +++ b/include/linux/if.h | |||
| @@ -67,6 +67,9 @@ | |||
| 67 | #define IFF_ISATAP 0x80 /* ISATAP interface (RFC4214) */ | 67 | #define IFF_ISATAP 0x80 /* ISATAP interface (RFC4214) */ |
| 68 | #define IFF_MASTER_ARPMON 0x100 /* bonding master, ARP mon in use */ | 68 | #define IFF_MASTER_ARPMON 0x100 /* bonding master, ARP mon in use */ |
| 69 | #define IFF_WAN_HDLC 0x200 /* WAN HDLC device */ | 69 | #define IFF_WAN_HDLC 0x200 /* WAN HDLC device */ |
| 70 | #define IFF_XMIT_DST_RELEASE 0x400 /* dev_hard_start_xmit() is allowed to | ||
| 71 | * release skb->dst | ||
| 72 | */ | ||
| 70 | 73 | ||
| 71 | #define IF_GET_IFACE 0x0001 /* for querying only */ | 74 | #define IF_GET_IFACE 0x0001 /* for querying only */ |
| 72 | #define IF_GET_PROTO 0x0002 | 75 | #define IF_GET_PROTO 0x0002 |
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index 5ff89809a581..b554300ef8bf 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
| @@ -86,6 +86,8 @@ | |||
| 86 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ | 86 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ |
| 87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ | 87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ |
| 88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ | 88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ |
| 89 | #define ARPHRD_IEEE802154 804 | ||
| 90 | #define ARPHRD_IEEE802154_PHY 805 | ||
| 89 | 91 | ||
| 90 | #define ARPHRD_PHONET 820 /* PhoNet media type */ | 92 | #define ARPHRD_PHONET 820 /* PhoNet media type */ |
| 91 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ | 93 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ |
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index cfe4fe1b7132..ae3a1871413d 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h | |||
| @@ -79,6 +79,7 @@ | |||
| 79 | #define ETH_P_AOE 0x88A2 /* ATA over Ethernet */ | 79 | #define ETH_P_AOE 0x88A2 /* ATA over Ethernet */ |
| 80 | #define ETH_P_TIPC 0x88CA /* TIPC */ | 80 | #define ETH_P_TIPC 0x88CA /* TIPC */ |
| 81 | #define ETH_P_FCOE 0x8906 /* Fibre Channel over Ethernet */ | 81 | #define ETH_P_FCOE 0x8906 /* Fibre Channel over Ethernet */ |
| 82 | #define ETH_P_FIP 0x8914 /* FCoE Initialization Protocol */ | ||
| 82 | #define ETH_P_EDSA 0xDADA /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ | 83 | #define ETH_P_EDSA 0xDADA /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 83 | 84 | ||
| 84 | /* | 85 | /* |
| @@ -106,6 +107,7 @@ | |||
| 106 | #define ETH_P_DSA 0x001B /* Distributed Switch Arch. */ | 107 | #define ETH_P_DSA 0x001B /* Distributed Switch Arch. */ |
| 107 | #define ETH_P_TRAILER 0x001C /* Trailer switch tagging */ | 108 | #define ETH_P_TRAILER 0x001C /* Trailer switch tagging */ |
| 108 | #define ETH_P_PHONET 0x00F5 /* Nokia Phonet frames */ | 109 | #define ETH_P_PHONET 0x00F5 /* Nokia Phonet frames */ |
| 110 | #define ETH_P_IEEE802154 0x00F6 /* IEEE802.15.4 frame */ | ||
| 109 | 111 | ||
| 110 | /* | 112 | /* |
| 111 | * This is an Ethernet frame header. | 113 | * This is an Ethernet frame header. |
diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h index 18db0668065a..dea7d6b7cf98 100644 --- a/include/linux/if_packet.h +++ b/include/linux/if_packet.h | |||
| @@ -46,6 +46,8 @@ struct sockaddr_ll | |||
| 46 | #define PACKET_VERSION 10 | 46 | #define PACKET_VERSION 10 |
| 47 | #define PACKET_HDRLEN 11 | 47 | #define PACKET_HDRLEN 11 |
| 48 | #define PACKET_RESERVE 12 | 48 | #define PACKET_RESERVE 12 |
| 49 | #define PACKET_TX_RING 13 | ||
| 50 | #define PACKET_LOSS 14 | ||
| 49 | 51 | ||
| 50 | struct tpacket_stats | 52 | struct tpacket_stats |
| 51 | { | 53 | { |
| @@ -63,14 +65,22 @@ struct tpacket_auxdata | |||
| 63 | __u16 tp_vlan_tci; | 65 | __u16 tp_vlan_tci; |
| 64 | }; | 66 | }; |
| 65 | 67 | ||
| 68 | /* Rx ring - header status */ | ||
| 69 | #define TP_STATUS_KERNEL 0x0 | ||
| 70 | #define TP_STATUS_USER 0x1 | ||
| 71 | #define TP_STATUS_COPY 0x2 | ||
| 72 | #define TP_STATUS_LOSING 0x4 | ||
| 73 | #define TP_STATUS_CSUMNOTREADY 0x8 | ||
| 74 | |||
| 75 | /* Tx ring - header status */ | ||
| 76 | #define TP_STATUS_AVAILABLE 0x0 | ||
| 77 | #define TP_STATUS_SEND_REQUEST 0x1 | ||
| 78 | #define TP_STATUS_SENDING 0x2 | ||
| 79 | #define TP_STATUS_WRONG_FORMAT 0x4 | ||
| 80 | |||
| 66 | struct tpacket_hdr | 81 | struct tpacket_hdr |
| 67 | { | 82 | { |
| 68 | unsigned long tp_status; | 83 | unsigned long tp_status; |
| 69 | #define TP_STATUS_KERNEL 0 | ||
| 70 | #define TP_STATUS_USER 1 | ||
| 71 | #define TP_STATUS_COPY 2 | ||
| 72 | #define TP_STATUS_LOSING 4 | ||
| 73 | #define TP_STATUS_CSUMNOTREADY 8 | ||
| 74 | unsigned int tp_len; | 84 | unsigned int tp_len; |
| 75 | unsigned int tp_snaplen; | 85 | unsigned int tp_snaplen; |
| 76 | unsigned short tp_mac; | 86 | unsigned short tp_mac; |
| @@ -135,5 +145,6 @@ struct packet_mreq | |||
| 135 | #define PACKET_MR_MULTICAST 0 | 145 | #define PACKET_MR_MULTICAST 0 |
| 136 | #define PACKET_MR_PROMISC 1 | 146 | #define PACKET_MR_PROMISC 1 |
| 137 | #define PACKET_MR_ALLMULTI 2 | 147 | #define PACKET_MR_ALLMULTI 2 |
| 148 | #define PACKET_MR_UNICAST 3 | ||
| 138 | 149 | ||
| 139 | #endif | 150 | #endif |
diff --git a/include/linux/if_tun.h b/include/linux/if_tun.h index 049d6c9428db..915ba5789f0e 100644 --- a/include/linux/if_tun.h +++ b/include/linux/if_tun.h | |||
| @@ -55,6 +55,7 @@ | |||
| 55 | #define IFF_NO_PI 0x1000 | 55 | #define IFF_NO_PI 0x1000 |
| 56 | #define IFF_ONE_QUEUE 0x2000 | 56 | #define IFF_ONE_QUEUE 0x2000 |
| 57 | #define IFF_VNET_HDR 0x4000 | 57 | #define IFF_VNET_HDR 0x4000 |
| 58 | #define IFF_TUN_EXCL 0x8000 | ||
| 58 | 59 | ||
| 59 | /* Features for GSO (TUNSETOFFLOAD). */ | 60 | /* Features for GSO (TUNSETOFFLOAD). */ |
| 60 | #define TUN_F_CSUM 0x01 /* You can hand me unchecksummed packets. */ | 61 | #define TUN_F_CSUM 0x01 /* You can hand me unchecksummed packets. */ |
diff --git a/include/linux/if_tunnel.h b/include/linux/if_tunnel.h index 5a9aae4adb44..5eb9b0f857e0 100644 --- a/include/linux/if_tunnel.h +++ b/include/linux/if_tunnel.h | |||
| @@ -44,7 +44,7 @@ struct ip_tunnel_prl { | |||
| 44 | __u16 flags; | 44 | __u16 flags; |
| 45 | __u16 __reserved; | 45 | __u16 __reserved; |
| 46 | __u32 datalen; | 46 | __u32 datalen; |
| 47 | __u32 __reserved2; | 47 | __u32 rs_delay; |
| 48 | /* data follows */ | 48 | /* data follows */ |
| 49 | }; | 49 | }; |
| 50 | 50 | ||
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index e1ff5b14310e..7ff9af1d0f05 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
| @@ -118,8 +118,7 @@ extern int vlan_hwaccel_do_receive(struct sk_buff *skb); | |||
| 118 | extern int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, | 118 | extern int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, |
| 119 | unsigned int vlan_tci, struct sk_buff *skb); | 119 | unsigned int vlan_tci, struct sk_buff *skb); |
| 120 | extern int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, | 120 | extern int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, |
| 121 | unsigned int vlan_tci, | 121 | unsigned int vlan_tci); |
| 122 | struct napi_gro_fraginfo *info); | ||
| 123 | 122 | ||
| 124 | #else | 123 | #else |
| 125 | static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) | 124 | static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) |
| @@ -154,8 +153,7 @@ static inline int vlan_gro_receive(struct napi_struct *napi, | |||
| 154 | } | 153 | } |
| 155 | 154 | ||
| 156 | static inline int vlan_gro_frags(struct napi_struct *napi, | 155 | static inline int vlan_gro_frags(struct napi_struct *napi, |
| 157 | struct vlan_group *grp, unsigned int vlan_tci, | 156 | struct vlan_group *grp, unsigned int vlan_tci) |
| 158 | struct napi_gro_fraginfo *info) | ||
| 159 | { | 157 | { |
| 160 | return NET_RX_DROP; | 158 | return NET_RX_DROP; |
| 161 | } | 159 | } |
diff --git a/include/linux/in.h b/include/linux/in.h index d60122a3a088..cf196da04ec9 100644 --- a/include/linux/in.h +++ b/include/linux/in.h | |||
| @@ -107,6 +107,7 @@ struct in_addr { | |||
| 107 | #define MCAST_JOIN_SOURCE_GROUP 46 | 107 | #define MCAST_JOIN_SOURCE_GROUP 46 |
| 108 | #define MCAST_LEAVE_SOURCE_GROUP 47 | 108 | #define MCAST_LEAVE_SOURCE_GROUP 47 |
| 109 | #define MCAST_MSFILTER 48 | 109 | #define MCAST_MSFILTER 48 |
| 110 | #define IP_MULTICAST_ALL 49 | ||
| 110 | 111 | ||
| 111 | #define MCAST_EXCLUDE 0 | 112 | #define MCAST_EXCLUDE 0 |
| 112 | #define MCAST_INCLUDE 1 | 113 | #define MCAST_INCLUDE 1 |
diff --git a/include/linux/init.h b/include/linux/init.h index 0e06c176f185..b2189803f19a 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
| @@ -2,8 +2,6 @@ | |||
| 2 | #define _LINUX_INIT_H | 2 | #define _LINUX_INIT_H |
| 3 | 3 | ||
| 4 | #include <linux/compiler.h> | 4 | #include <linux/compiler.h> |
| 5 | #include <linux/section-names.h> | ||
| 6 | #include <linux/stringify.h> | ||
| 7 | 5 | ||
| 8 | /* These macros are used to mark some functions or | 6 | /* These macros are used to mark some functions or |
| 9 | * initialized data (doesn't apply to uninitialized data) | 7 | * initialized data (doesn't apply to uninitialized data) |
| @@ -101,7 +99,7 @@ | |||
| 101 | #define __memexitconst __section(.memexit.rodata) | 99 | #define __memexitconst __section(.memexit.rodata) |
| 102 | 100 | ||
| 103 | /* For assembly routines */ | 101 | /* For assembly routines */ |
| 104 | #define __HEAD .section __stringify(HEAD_TEXT_SECTION),"ax" | 102 | #define __HEAD .section ".head.text","ax" |
| 105 | #define __INIT .section ".init.text","ax" | 103 | #define __INIT .section ".init.text","ax" |
| 106 | #define __FINIT .previous | 104 | #define __FINIT .previous |
| 107 | 105 | ||
| @@ -225,7 +223,8 @@ struct obs_kernel_param { | |||
| 225 | * obs_kernel_param "array" too far apart in .init.setup. | 223 | * obs_kernel_param "array" too far apart in .init.setup. |
| 226 | */ | 224 | */ |
| 227 | #define __setup_param(str, unique_id, fn, early) \ | 225 | #define __setup_param(str, unique_id, fn, early) \ |
| 228 | static char __setup_str_##unique_id[] __initdata __aligned(1) = str; \ | 226 | static const char __setup_str_##unique_id[] __initconst \ |
| 227 | __aligned(1) = str; \ | ||
| 229 | static struct obs_kernel_param __setup_##unique_id \ | 228 | static struct obs_kernel_param __setup_##unique_id \ |
| 230 | __used __section(.init.setup) \ | 229 | __used __section(.init.setup) \ |
| 231 | __attribute__((aligned((sizeof(long))))) \ | 230 | __attribute__((aligned((sizeof(long))))) \ |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index ff374ceface0..c41e812e9d5e 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -183,6 +183,7 @@ extern void disable_irq(unsigned int irq); | |||
| 183 | extern void enable_irq(unsigned int irq); | 183 | extern void enable_irq(unsigned int irq); |
| 184 | 184 | ||
| 185 | /* The following three functions are for the core kernel use only. */ | 185 | /* The following three functions are for the core kernel use only. */ |
| 186 | #ifdef CONFIG_GENERIC_HARDIRQS | ||
| 186 | extern void suspend_device_irqs(void); | 187 | extern void suspend_device_irqs(void); |
| 187 | extern void resume_device_irqs(void); | 188 | extern void resume_device_irqs(void); |
| 188 | #ifdef CONFIG_PM_SLEEP | 189 | #ifdef CONFIG_PM_SLEEP |
| @@ -190,6 +191,11 @@ extern int check_wakeup_irqs(void); | |||
| 190 | #else | 191 | #else |
| 191 | static inline int check_wakeup_irqs(void) { return 0; } | 192 | static inline int check_wakeup_irqs(void) { return 0; } |
| 192 | #endif | 193 | #endif |
| 194 | #else | ||
| 195 | static inline void suspend_device_irqs(void) { }; | ||
| 196 | static inline void resume_device_irqs(void) { }; | ||
| 197 | static inline int check_wakeup_irqs(void) { return 0; } | ||
| 198 | #endif | ||
| 193 | 199 | ||
| 194 | #if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_HARDIRQS) | 200 | #if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_HARDIRQS) |
| 195 | 201 | ||
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index 476d9464ac82..c662efa68289 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
| @@ -169,6 +169,12 @@ struct ipv6_devconf { | |||
| 169 | __s32 accept_dad; | 169 | __s32 accept_dad; |
| 170 | void *sysctl; | 170 | void *sysctl; |
| 171 | }; | 171 | }; |
| 172 | |||
| 173 | struct ipv6_params { | ||
| 174 | __s32 disable_ipv6; | ||
| 175 | __s32 autoconf; | ||
| 176 | }; | ||
| 177 | extern struct ipv6_params ipv6_defaults; | ||
| 172 | #endif | 178 | #endif |
| 173 | 179 | ||
| 174 | /* index values for the variables in ipv6_devconf */ | 180 | /* index values for the variables in ipv6_devconf */ |
diff --git a/include/linux/isdn/capilli.h b/include/linux/isdn/capilli.h index 35e9b0fd014b..7acb87a44872 100644 --- a/include/linux/isdn/capilli.h +++ b/include/linux/isdn/capilli.h | |||
| @@ -79,7 +79,7 @@ int attach_capi_ctr(struct capi_ctr *); | |||
| 79 | int detach_capi_ctr(struct capi_ctr *); | 79 | int detach_capi_ctr(struct capi_ctr *); |
| 80 | 80 | ||
| 81 | void capi_ctr_ready(struct capi_ctr * card); | 81 | void capi_ctr_ready(struct capi_ctr * card); |
| 82 | void capi_ctr_reseted(struct capi_ctr * card); | 82 | void capi_ctr_down(struct capi_ctr * card); |
| 83 | void capi_ctr_suspend_output(struct capi_ctr * card); | 83 | void capi_ctr_suspend_output(struct capi_ctr * card); |
| 84 | void capi_ctr_resume_output(struct capi_ctr * card); | 84 | void capi_ctr_resume_output(struct capi_ctr * card); |
| 85 | void capi_ctr_handle_message(struct capi_ctr * card, u16 appl, struct sk_buff *skb); | 85 | void capi_ctr_handle_message(struct capi_ctr * card, u16 appl, struct sk_buff *skb); |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 883cd44ff765..1b2e1747df1a 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -97,12 +97,14 @@ extern const char linux_proc_banner[]; | |||
| 97 | #define KERN_INFO "<6>" /* informational */ | 97 | #define KERN_INFO "<6>" /* informational */ |
| 98 | #define KERN_DEBUG "<7>" /* debug-level messages */ | 98 | #define KERN_DEBUG "<7>" /* debug-level messages */ |
| 99 | 99 | ||
| 100 | /* Use the default kernel loglevel */ | ||
| 101 | #define KERN_DEFAULT "<d>" | ||
| 100 | /* | 102 | /* |
| 101 | * Annotation for a "continued" line of log printout (only done after a | 103 | * Annotation for a "continued" line of log printout (only done after a |
| 102 | * line that had no enclosing \n). Only to be used by core/arch code | 104 | * line that had no enclosing \n). Only to be used by core/arch code |
| 103 | * during early bootup (a continued line is not SMP-safe otherwise). | 105 | * during early bootup (a continued line is not SMP-safe otherwise). |
| 104 | */ | 106 | */ |
| 105 | #define KERN_CONT "" | 107 | #define KERN_CONT "<c>" |
| 106 | 108 | ||
| 107 | extern int console_printk[]; | 109 | extern int console_printk[]; |
| 108 | 110 | ||
diff --git a/include/linux/keyboard.h b/include/linux/keyboard.h index a3c984d780f0..33a63f62d57f 100644 --- a/include/linux/keyboard.h +++ b/include/linux/keyboard.h | |||
| @@ -56,6 +56,7 @@ extern int unregister_keyboard_notifier(struct notifier_block *nb); | |||
| 56 | #define KT_ASCII 9 | 56 | #define KT_ASCII 9 |
| 57 | #define KT_LOCK 10 | 57 | #define KT_LOCK 10 |
| 58 | #define KT_SLOCK 12 | 58 | #define KT_SLOCK 12 |
| 59 | #define KT_DEAD2 13 | ||
| 59 | #define KT_BRL 14 | 60 | #define KT_BRL 14 |
| 60 | 61 | ||
| 61 | #define K(t,v) (((t)<<8)|(v)) | 62 | #define K(t,v) (((t)<<8)|(v)) |
diff --git a/include/linux/lguest.h b/include/linux/lguest.h index 175e63f4a8c0..7bc1440fc473 100644 --- a/include/linux/lguest.h +++ b/include/linux/lguest.h | |||
| @@ -30,6 +30,10 @@ struct lguest_data | |||
| 30 | /* Wallclock time set by the Host. */ | 30 | /* Wallclock time set by the Host. */ |
| 31 | struct timespec time; | 31 | struct timespec time; |
| 32 | 32 | ||
| 33 | /* Interrupt pending set by the Host. The Guest should do a hypercall | ||
| 34 | * if it re-enables interrupts and sees this set (to X86_EFLAGS_IF). */ | ||
| 35 | int irq_pending; | ||
| 36 | |||
| 33 | /* Async hypercall ring. Instead of directly making hypercalls, we can | 37 | /* Async hypercall ring. Instead of directly making hypercalls, we can |
| 34 | * place them in here for processing the next time the Host wants. | 38 | * place them in here for processing the next time the Host wants. |
| 35 | * This batching can be quite efficient. */ | 39 | * This batching can be quite efficient. */ |
diff --git a/include/linux/lguest_launcher.h b/include/linux/lguest_launcher.h index a53407a4165c..bfefbdf7498a 100644 --- a/include/linux/lguest_launcher.h +++ b/include/linux/lguest_launcher.h | |||
| @@ -57,7 +57,8 @@ enum lguest_req | |||
| 57 | LHREQ_INITIALIZE, /* + base, pfnlimit, start */ | 57 | LHREQ_INITIALIZE, /* + base, pfnlimit, start */ |
| 58 | LHREQ_GETDMA, /* No longer used */ | 58 | LHREQ_GETDMA, /* No longer used */ |
| 59 | LHREQ_IRQ, /* + irq */ | 59 | LHREQ_IRQ, /* + irq */ |
| 60 | LHREQ_BREAK, /* + on/off flag (on blocks until someone does off) */ | 60 | LHREQ_BREAK, /* No longer used */ |
| 61 | LHREQ_EVENTFD, /* + address, fd. */ | ||
| 61 | }; | 62 | }; |
| 62 | 63 | ||
| 63 | /* The alignment to use between consumer and producer parts of vring. | 64 | /* The alignment to use between consumer and producer parts of vring. |
diff --git a/include/linux/list_nulls.h b/include/linux/list_nulls.h index 93150ecf3ea4..5d10ae364b5e 100644 --- a/include/linux/list_nulls.h +++ b/include/linux/list_nulls.h | |||
| @@ -56,6 +56,18 @@ static inline int hlist_nulls_empty(const struct hlist_nulls_head *h) | |||
| 56 | return is_a_nulls(h->first); | 56 | return is_a_nulls(h->first); |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | static inline void hlist_nulls_add_head(struct hlist_nulls_node *n, | ||
| 60 | struct hlist_nulls_head *h) | ||
| 61 | { | ||
| 62 | struct hlist_nulls_node *first = h->first; | ||
| 63 | |||
| 64 | n->next = first; | ||
| 65 | n->pprev = &h->first; | ||
| 66 | h->first = n; | ||
| 67 | if (!is_a_nulls(first)) | ||
| 68 | first->pprev = &n->next; | ||
| 69 | } | ||
| 70 | |||
| 59 | static inline void __hlist_nulls_del(struct hlist_nulls_node *n) | 71 | static inline void __hlist_nulls_del(struct hlist_nulls_node *n) |
| 60 | { | 72 | { |
| 61 | struct hlist_nulls_node *next = n->next; | 73 | struct hlist_nulls_node *next = n->next; |
| @@ -65,6 +77,12 @@ static inline void __hlist_nulls_del(struct hlist_nulls_node *n) | |||
| 65 | next->pprev = pprev; | 77 | next->pprev = pprev; |
| 66 | } | 78 | } |
| 67 | 79 | ||
| 80 | static inline void hlist_nulls_del(struct hlist_nulls_node *n) | ||
| 81 | { | ||
| 82 | __hlist_nulls_del(n); | ||
| 83 | n->pprev = LIST_POISON2; | ||
| 84 | } | ||
| 85 | |||
| 68 | /** | 86 | /** |
| 69 | * hlist_nulls_for_each_entry - iterate over list of given type | 87 | * hlist_nulls_for_each_entry - iterate over list of given type |
| 70 | * @tpos: the type * to use as a loop cursor. | 88 | * @tpos: the type * to use as a loop cursor. |
diff --git a/include/linux/mISDNdsp.h b/include/linux/mISDNdsp.h index 6b71d2dce508..41d1eeb9b3bd 100644 --- a/include/linux/mISDNdsp.h +++ b/include/linux/mISDNdsp.h | |||
| @@ -12,7 +12,8 @@ struct mISDN_dsp_element { | |||
| 12 | void *(*new)(const char *arg); | 12 | void *(*new)(const char *arg); |
| 13 | void (*free)(void *p); | 13 | void (*free)(void *p); |
| 14 | void (*process_tx)(void *p, unsigned char *data, int len); | 14 | void (*process_tx)(void *p, unsigned char *data, int len); |
| 15 | void (*process_rx)(void *p, unsigned char *data, int len); | 15 | void (*process_rx)(void *p, unsigned char *data, int len, |
| 16 | unsigned int txlen); | ||
| 16 | int num_args; | 17 | int num_args; |
| 17 | struct mISDN_dsp_element_arg | 18 | struct mISDN_dsp_element_arg |
| 18 | *args; | 19 | *args; |
| @@ -24,6 +25,7 @@ extern void mISDN_dsp_element_unregister(struct mISDN_dsp_element *elem); | |||
| 24 | struct dsp_features { | 25 | struct dsp_features { |
| 25 | int hfc_id; /* unique id to identify the chip (or -1) */ | 26 | int hfc_id; /* unique id to identify the chip (or -1) */ |
| 26 | int hfc_dtmf; /* set if HFCmulti card supports dtmf */ | 27 | int hfc_dtmf; /* set if HFCmulti card supports dtmf */ |
| 28 | int hfc_conf; /* set if HFCmulti card supports conferences */ | ||
| 27 | int hfc_loops; /* set if card supports tone loops */ | 29 | int hfc_loops; /* set if card supports tone loops */ |
| 28 | int hfc_echocanhw; /* set if card supports echocancelation*/ | 30 | int hfc_echocanhw; /* set if card supports echocancelation*/ |
| 29 | int pcm_id; /* unique id to identify the pcm bus (or -1) */ | 31 | int pcm_id; /* unique id to identify the pcm bus (or -1) */ |
diff --git a/include/linux/mISDNhw.h b/include/linux/mISDNhw.h index 97ffdc1d3442..7f9831da847f 100644 --- a/include/linux/mISDNhw.h +++ b/include/linux/mISDNhw.h | |||
| @@ -89,11 +89,6 @@ struct dchannel { | |||
| 89 | void (*phfunc) (struct dchannel *); | 89 | void (*phfunc) (struct dchannel *); |
| 90 | u_int state; | 90 | u_int state; |
| 91 | void *l1; | 91 | void *l1; |
| 92 | /* HW access */ | ||
| 93 | u_char (*read_reg) (void *, u_char); | ||
| 94 | void (*write_reg) (void *, u_char, u_char); | ||
| 95 | void (*read_fifo) (void *, u_char *, int); | ||
| 96 | void (*write_fifo) (void *, u_char *, int); | ||
| 97 | void *hw; | 92 | void *hw; |
| 98 | int slot; /* multiport card channel slot */ | 93 | int slot; /* multiport card channel slot */ |
| 99 | struct timer_list timer; | 94 | struct timer_list timer; |
| @@ -151,11 +146,6 @@ struct bchannel { | |||
| 151 | u_long Flags; | 146 | u_long Flags; |
| 152 | struct work_struct workq; | 147 | struct work_struct workq; |
| 153 | u_int state; | 148 | u_int state; |
| 154 | /* HW access */ | ||
| 155 | u_char (*read_reg) (void *, u_char); | ||
| 156 | void (*write_reg) (void *, u_char, u_char); | ||
| 157 | void (*read_fifo) (void *, u_char *, int); | ||
| 158 | void (*write_fifo) (void *, u_char *, int); | ||
| 159 | void *hw; | 149 | void *hw; |
| 160 | int slot; /* multiport card channel slot */ | 150 | int slot; /* multiport card channel slot */ |
| 161 | struct timer_list timer; | 151 | struct timer_list timer; |
| @@ -185,7 +175,7 @@ extern int dchannel_senddata(struct dchannel *, struct sk_buff *); | |||
| 185 | extern int bchannel_senddata(struct bchannel *, struct sk_buff *); | 175 | extern int bchannel_senddata(struct bchannel *, struct sk_buff *); |
| 186 | extern void recv_Dchannel(struct dchannel *); | 176 | extern void recv_Dchannel(struct dchannel *); |
| 187 | extern void recv_Echannel(struct dchannel *, struct dchannel *); | 177 | extern void recv_Echannel(struct dchannel *, struct dchannel *); |
| 188 | extern void recv_Bchannel(struct bchannel *); | 178 | extern void recv_Bchannel(struct bchannel *, unsigned int id); |
| 189 | extern void recv_Dchannel_skb(struct dchannel *, struct sk_buff *); | 179 | extern void recv_Dchannel_skb(struct dchannel *, struct sk_buff *); |
| 190 | extern void recv_Bchannel_skb(struct bchannel *, struct sk_buff *); | 180 | extern void recv_Bchannel_skb(struct bchannel *, struct sk_buff *); |
| 191 | extern void confirm_Bsend(struct bchannel *bch); | 181 | extern void confirm_Bsend(struct bchannel *bch); |
diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h index 5da3d95b27f1..45100b39a7cf 100644 --- a/include/linux/mISDNif.h +++ b/include/linux/mISDNif.h | |||
| @@ -229,6 +229,7 @@ | |||
| 229 | #define OPTION_L2_PTP 2 | 229 | #define OPTION_L2_PTP 2 |
| 230 | #define OPTION_L2_FIXEDTEI 3 | 230 | #define OPTION_L2_FIXEDTEI 3 |
| 231 | #define OPTION_L2_CLEANUP 4 | 231 | #define OPTION_L2_CLEANUP 4 |
| 232 | #define OPTION_L1_HOLD 5 | ||
| 232 | 233 | ||
| 233 | /* should be in sync with linux/kobject.h:KOBJ_NAME_LEN */ | 234 | /* should be in sync with linux/kobject.h:KOBJ_NAME_LEN */ |
| 234 | #define MISDN_MAX_IDLEN 20 | 235 | #define MISDN_MAX_IDLEN 20 |
| @@ -291,19 +292,19 @@ struct mISDN_devrename { | |||
| 291 | 292 | ||
| 292 | /* MPH_INFORMATION_REQ payload */ | 293 | /* MPH_INFORMATION_REQ payload */ |
| 293 | struct ph_info_ch { | 294 | struct ph_info_ch { |
| 294 | __u32 protocol; | 295 | __u32 protocol; |
| 295 | __u64 Flags; | 296 | __u64 Flags; |
| 296 | }; | 297 | }; |
| 297 | 298 | ||
| 298 | struct ph_info_dch { | 299 | struct ph_info_dch { |
| 299 | struct ph_info_ch ch; | 300 | struct ph_info_ch ch; |
| 300 | __u16 state; | 301 | __u16 state; |
| 301 | __u16 num_bch; | 302 | __u16 num_bch; |
| 302 | }; | 303 | }; |
| 303 | 304 | ||
| 304 | struct ph_info { | 305 | struct ph_info { |
| 305 | struct ph_info_dch dch; | 306 | struct ph_info_dch dch; |
| 306 | struct ph_info_ch bch[]; | 307 | struct ph_info_ch bch[]; |
| 307 | }; | 308 | }; |
| 308 | 309 | ||
| 309 | /* timer device ioctl */ | 310 | /* timer device ioctl */ |
| @@ -317,6 +318,7 @@ struct ph_info { | |||
| 317 | #define IMCTRLREQ _IOR('I', 69, int) | 318 | #define IMCTRLREQ _IOR('I', 69, int) |
| 318 | #define IMCLEAR_L2 _IOR('I', 70, int) | 319 | #define IMCLEAR_L2 _IOR('I', 70, int) |
| 319 | #define IMSETDEVNAME _IOR('I', 71, struct mISDN_devrename) | 320 | #define IMSETDEVNAME _IOR('I', 71, struct mISDN_devrename) |
| 321 | #define IMHOLD_L1 _IOR('I', 72, int) | ||
| 320 | 322 | ||
| 321 | static inline int | 323 | static inline int |
| 322 | test_channelmap(u_int nr, u_char *map) | 324 | test_channelmap(u_int nr, u_char *map) |
| @@ -362,7 +364,8 @@ clear_channelmap(u_int nr, u_char *map) | |||
| 362 | #define MISDN_CTRL_HFC_RECEIVE_ON 0x4006 | 364 | #define MISDN_CTRL_HFC_RECEIVE_ON 0x4006 |
| 363 | #define MISDN_CTRL_HFC_ECHOCAN_ON 0x4007 | 365 | #define MISDN_CTRL_HFC_ECHOCAN_ON 0x4007 |
| 364 | #define MISDN_CTRL_HFC_ECHOCAN_OFF 0x4008 | 366 | #define MISDN_CTRL_HFC_ECHOCAN_OFF 0x4008 |
| 365 | 367 | #define MISDN_CTRL_HFC_WD_INIT 0x4009 | |
| 368 | #define MISDN_CTRL_HFC_WD_RESET 0x400A | ||
| 366 | 369 | ||
| 367 | /* socket options */ | 370 | /* socket options */ |
| 368 | #define MISDN_TIME_STAMP 0x0001 | 371 | #define MISDN_TIME_STAMP 0x0001 |
diff --git a/include/linux/magic.h b/include/linux/magic.h index 927138cf3050..1923327b9869 100644 --- a/include/linux/magic.h +++ b/include/linux/magic.h | |||
| @@ -6,6 +6,8 @@ | |||
| 6 | #define AFS_SUPER_MAGIC 0x5346414F | 6 | #define AFS_SUPER_MAGIC 0x5346414F |
| 7 | #define AUTOFS_SUPER_MAGIC 0x0187 | 7 | #define AUTOFS_SUPER_MAGIC 0x0187 |
| 8 | #define CODA_SUPER_MAGIC 0x73757245 | 8 | #define CODA_SUPER_MAGIC 0x73757245 |
| 9 | #define CRAMFS_MAGIC 0x28cd3d45 /* some random number */ | ||
| 10 | #define CRAMFS_MAGIC_WEND 0x453dcd28 /* magic number with the wrong endianess */ | ||
| 9 | #define DEBUGFS_MAGIC 0x64626720 | 11 | #define DEBUGFS_MAGIC 0x64626720 |
| 10 | #define SYSFS_MAGIC 0x62656572 | 12 | #define SYSFS_MAGIC 0x62656572 |
| 11 | #define SECURITYFS_MAGIC 0x73636673 | 13 | #define SECURITYFS_MAGIC 0x73636673 |
diff --git a/include/linux/mdio.h b/include/linux/mdio.h new file mode 100644 index 000000000000..cfdf1df2875e --- /dev/null +++ b/include/linux/mdio.h | |||
| @@ -0,0 +1,356 @@ | |||
| 1 | /* | ||
| 2 | * linux/mdio.h: definitions for MDIO (clause 45) transceivers | ||
| 3 | * Copyright 2006-2009 Solarflare Communications Inc. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 as published | ||
| 7 | * by the Free Software Foundation, incorporated herein by reference. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef __LINUX_MDIO_H__ | ||
| 11 | #define __LINUX_MDIO_H__ | ||
| 12 | |||
| 13 | #include <linux/mii.h> | ||
| 14 | |||
| 15 | /* MDIO Manageable Devices (MMDs). */ | ||
| 16 | #define MDIO_MMD_PMAPMD 1 /* Physical Medium Attachment/ | ||
| 17 | * Physical Medium Dependent */ | ||
| 18 | #define MDIO_MMD_WIS 2 /* WAN Interface Sublayer */ | ||
| 19 | #define MDIO_MMD_PCS 3 /* Physical Coding Sublayer */ | ||
| 20 | #define MDIO_MMD_PHYXS 4 /* PHY Extender Sublayer */ | ||
| 21 | #define MDIO_MMD_DTEXS 5 /* DTE Extender Sublayer */ | ||
| 22 | #define MDIO_MMD_TC 6 /* Transmission Convergence */ | ||
| 23 | #define MDIO_MMD_AN 7 /* Auto-Negotiation */ | ||
| 24 | #define MDIO_MMD_C22EXT 29 /* Clause 22 extension */ | ||
| 25 | #define MDIO_MMD_VEND1 30 /* Vendor specific 1 */ | ||
| 26 | #define MDIO_MMD_VEND2 31 /* Vendor specific 2 */ | ||
| 27 | |||
| 28 | /* Generic MDIO registers. */ | ||
| 29 | #define MDIO_CTRL1 MII_BMCR | ||
| 30 | #define MDIO_STAT1 MII_BMSR | ||
| 31 | #define MDIO_DEVID1 MII_PHYSID1 | ||
| 32 | #define MDIO_DEVID2 MII_PHYSID2 | ||
| 33 | #define MDIO_SPEED 4 /* Speed ability */ | ||
| 34 | #define MDIO_DEVS1 5 /* Devices in package */ | ||
| 35 | #define MDIO_DEVS2 6 | ||
| 36 | #define MDIO_CTRL2 7 /* 10G control 2 */ | ||
| 37 | #define MDIO_STAT2 8 /* 10G status 2 */ | ||
| 38 | #define MDIO_PMA_TXDIS 9 /* 10G PMA/PMD transmit disable */ | ||
| 39 | #define MDIO_PMA_RXDET 10 /* 10G PMA/PMD receive signal detect */ | ||
| 40 | #define MDIO_PMA_EXTABLE 11 /* 10G PMA/PMD extended ability */ | ||
| 41 | #define MDIO_PKGID1 14 /* Package identifier */ | ||
| 42 | #define MDIO_PKGID2 15 | ||
| 43 | #define MDIO_AN_ADVERTISE 16 /* AN advertising (base page) */ | ||
| 44 | #define MDIO_AN_LPA 19 /* AN LP abilities (base page) */ | ||
| 45 | #define MDIO_PHYXS_LNSTAT 24 /* PHY XGXS lane state */ | ||
| 46 | |||
| 47 | /* Media-dependent registers. */ | ||
| 48 | #define MDIO_PMA_10GBT_SWAPPOL 130 /* 10GBASE-T pair swap & polarity */ | ||
| 49 | #define MDIO_PMA_10GBT_TXPWR 131 /* 10GBASE-T TX power control */ | ||
| 50 | #define MDIO_PMA_10GBT_SNR 133 /* 10GBASE-T SNR margin, lane A. | ||
| 51 | * Lanes B-D are numbered 134-136. */ | ||
| 52 | #define MDIO_PMA_10GBR_FECABLE 170 /* 10GBASE-R FEC ability */ | ||
| 53 | #define MDIO_PCS_10GBX_STAT1 24 /* 10GBASE-X PCS status 1 */ | ||
| 54 | #define MDIO_PCS_10GBRT_STAT1 32 /* 10GBASE-R/-T PCS status 1 */ | ||
| 55 | #define MDIO_PCS_10GBRT_STAT2 33 /* 10GBASE-R/-T PCS status 2 */ | ||
| 56 | #define MDIO_AN_10GBT_CTRL 32 /* 10GBASE-T auto-negotiation control */ | ||
| 57 | #define MDIO_AN_10GBT_STAT 33 /* 10GBASE-T auto-negotiation status */ | ||
| 58 | |||
| 59 | /* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */ | ||
| 60 | #define MDIO_PMA_LASI_RXCTRL 0x9000 /* RX_ALARM control */ | ||
| 61 | #define MDIO_PMA_LASI_TXCTRL 0x9001 /* TX_ALARM control */ | ||
| 62 | #define MDIO_PMA_LASI_CTRL 0x9002 /* LASI control */ | ||
| 63 | #define MDIO_PMA_LASI_RXSTAT 0x9003 /* RX_ALARM status */ | ||
| 64 | #define MDIO_PMA_LASI_TXSTAT 0x9004 /* TX_ALARM status */ | ||
| 65 | #define MDIO_PMA_LASI_STAT 0x9005 /* LASI status */ | ||
| 66 | |||
| 67 | /* Control register 1. */ | ||
| 68 | /* Enable extended speed selection */ | ||
| 69 | #define MDIO_CTRL1_SPEEDSELEXT (BMCR_SPEED1000 | BMCR_SPEED100) | ||
| 70 | /* All speed selection bits */ | ||
| 71 | #define MDIO_CTRL1_SPEEDSEL (MDIO_CTRL1_SPEEDSELEXT | 0x003c) | ||
| 72 | #define MDIO_CTRL1_FULLDPLX BMCR_FULLDPLX | ||
| 73 | #define MDIO_CTRL1_LPOWER BMCR_PDOWN | ||
| 74 | #define MDIO_CTRL1_RESET BMCR_RESET | ||
| 75 | #define MDIO_PMA_CTRL1_LOOPBACK 0x0001 | ||
| 76 | #define MDIO_PMA_CTRL1_SPEED1000 BMCR_SPEED1000 | ||
| 77 | #define MDIO_PMA_CTRL1_SPEED100 BMCR_SPEED100 | ||
| 78 | #define MDIO_PCS_CTRL1_LOOPBACK BMCR_LOOPBACK | ||
| 79 | #define MDIO_PHYXS_CTRL1_LOOPBACK BMCR_LOOPBACK | ||
| 80 | #define MDIO_AN_CTRL1_RESTART BMCR_ANRESTART | ||
| 81 | #define MDIO_AN_CTRL1_ENABLE BMCR_ANENABLE | ||
| 82 | #define MDIO_AN_CTRL1_XNP 0x2000 /* Enable extended next page */ | ||
| 83 | |||
| 84 | /* 10 Gb/s */ | ||
| 85 | #define MDIO_CTRL1_SPEED10G (MDIO_CTRL1_SPEEDSELEXT | 0x00) | ||
| 86 | /* 10PASS-TS/2BASE-TL */ | ||
| 87 | #define MDIO_CTRL1_SPEED10P2B (MDIO_CTRL1_SPEEDSELEXT | 0x04) | ||
| 88 | |||
| 89 | /* Status register 1. */ | ||
| 90 | #define MDIO_STAT1_LPOWERABLE 0x0002 /* Low-power ability */ | ||
| 91 | #define MDIO_STAT1_LSTATUS BMSR_LSTATUS | ||
| 92 | #define MDIO_STAT1_FAULT 0x0080 /* Fault */ | ||
| 93 | #define MDIO_AN_STAT1_LPABLE 0x0001 /* Link partner AN ability */ | ||
| 94 | #define MDIO_AN_STAT1_ABLE BMSR_ANEGCAPABLE | ||
| 95 | #define MDIO_AN_STAT1_RFAULT BMSR_RFAULT | ||
| 96 | #define MDIO_AN_STAT1_COMPLETE BMSR_ANEGCOMPLETE | ||
| 97 | #define MDIO_AN_STAT1_PAGE 0x0040 /* Page received */ | ||
| 98 | #define MDIO_AN_STAT1_XNP 0x0080 /* Extended next page status */ | ||
| 99 | |||
| 100 | /* Speed register. */ | ||
| 101 | #define MDIO_SPEED_10G 0x0001 /* 10G capable */ | ||
| 102 | #define MDIO_PMA_SPEED_2B 0x0002 /* 2BASE-TL capable */ | ||
| 103 | #define MDIO_PMA_SPEED_10P 0x0004 /* 10PASS-TS capable */ | ||
| 104 | #define MDIO_PMA_SPEED_1000 0x0010 /* 1000M capable */ | ||
| 105 | #define MDIO_PMA_SPEED_100 0x0020 /* 100M capable */ | ||
| 106 | #define MDIO_PMA_SPEED_10 0x0040 /* 10M capable */ | ||
| 107 | #define MDIO_PCS_SPEED_10P2B 0x0002 /* 10PASS-TS/2BASE-TL capable */ | ||
| 108 | |||
| 109 | /* Device present registers. */ | ||
| 110 | #define MDIO_DEVS_PRESENT(devad) (1 << (devad)) | ||
| 111 | #define MDIO_DEVS_PMAPMD MDIO_DEVS_PRESENT(MDIO_MMD_PMAPMD) | ||
| 112 | #define MDIO_DEVS_WIS MDIO_DEVS_PRESENT(MDIO_MMD_WIS) | ||
| 113 | #define MDIO_DEVS_PCS MDIO_DEVS_PRESENT(MDIO_MMD_PCS) | ||
| 114 | #define MDIO_DEVS_PHYXS MDIO_DEVS_PRESENT(MDIO_MMD_PHYXS) | ||
| 115 | #define MDIO_DEVS_DTEXS MDIO_DEVS_PRESENT(MDIO_MMD_DTEXS) | ||
| 116 | #define MDIO_DEVS_TC MDIO_DEVS_PRESENT(MDIO_MMD_TC) | ||
| 117 | #define MDIO_DEVS_AN MDIO_DEVS_PRESENT(MDIO_MMD_AN) | ||
| 118 | #define MDIO_DEVS_C22EXT MDIO_DEVS_PRESENT(MDIO_MMD_C22EXT) | ||
| 119 | |||
| 120 | /* Control register 2. */ | ||
| 121 | #define MDIO_PMA_CTRL2_TYPE 0x000f /* PMA/PMD type selection */ | ||
| 122 | #define MDIO_PMA_CTRL2_10GBCX4 0x0000 /* 10GBASE-CX4 type */ | ||
| 123 | #define MDIO_PMA_CTRL2_10GBEW 0x0001 /* 10GBASE-EW type */ | ||
| 124 | #define MDIO_PMA_CTRL2_10GBLW 0x0002 /* 10GBASE-LW type */ | ||
| 125 | #define MDIO_PMA_CTRL2_10GBSW 0x0003 /* 10GBASE-SW type */ | ||
| 126 | #define MDIO_PMA_CTRL2_10GBLX4 0x0004 /* 10GBASE-LX4 type */ | ||
| 127 | #define MDIO_PMA_CTRL2_10GBER 0x0005 /* 10GBASE-ER type */ | ||
| 128 | #define MDIO_PMA_CTRL2_10GBLR 0x0006 /* 10GBASE-LR type */ | ||
| 129 | #define MDIO_PMA_CTRL2_10GBSR 0x0007 /* 10GBASE-SR type */ | ||
| 130 | #define MDIO_PMA_CTRL2_10GBLRM 0x0008 /* 10GBASE-LRM type */ | ||
| 131 | #define MDIO_PMA_CTRL2_10GBT 0x0009 /* 10GBASE-T type */ | ||
| 132 | #define MDIO_PMA_CTRL2_10GBKX4 0x000a /* 10GBASE-KX4 type */ | ||
| 133 | #define MDIO_PMA_CTRL2_10GBKR 0x000b /* 10GBASE-KR type */ | ||
| 134 | #define MDIO_PMA_CTRL2_1000BT 0x000c /* 1000BASE-T type */ | ||
| 135 | #define MDIO_PMA_CTRL2_1000BKX 0x000d /* 1000BASE-KX type */ | ||
| 136 | #define MDIO_PMA_CTRL2_100BTX 0x000e /* 100BASE-TX type */ | ||
| 137 | #define MDIO_PMA_CTRL2_10BT 0x000f /* 10BASE-T type */ | ||
| 138 | #define MDIO_PCS_CTRL2_TYPE 0x0003 /* PCS type selection */ | ||
| 139 | #define MDIO_PCS_CTRL2_10GBR 0x0000 /* 10GBASE-R type */ | ||
| 140 | #define MDIO_PCS_CTRL2_10GBX 0x0001 /* 10GBASE-X type */ | ||
| 141 | #define MDIO_PCS_CTRL2_10GBW 0x0002 /* 10GBASE-W type */ | ||
| 142 | #define MDIO_PCS_CTRL2_10GBT 0x0003 /* 10GBASE-T type */ | ||
| 143 | |||
| 144 | /* Status register 2. */ | ||
| 145 | #define MDIO_STAT2_RXFAULT 0x0400 /* Receive fault */ | ||
| 146 | #define MDIO_STAT2_TXFAULT 0x0800 /* Transmit fault */ | ||
| 147 | #define MDIO_STAT2_DEVPRST 0xc000 /* Device present */ | ||
| 148 | #define MDIO_STAT2_DEVPRST_VAL 0x8000 /* Device present value */ | ||
| 149 | #define MDIO_PMA_STAT2_LBABLE 0x0001 /* PMA loopback ability */ | ||
| 150 | #define MDIO_PMA_STAT2_10GBEW 0x0002 /* 10GBASE-EW ability */ | ||
| 151 | #define MDIO_PMA_STAT2_10GBLW 0x0004 /* 10GBASE-LW ability */ | ||
| 152 | #define MDIO_PMA_STAT2_10GBSW 0x0008 /* 10GBASE-SW ability */ | ||
| 153 | #define MDIO_PMA_STAT2_10GBLX4 0x0010 /* 10GBASE-LX4 ability */ | ||
| 154 | #define MDIO_PMA_STAT2_10GBER 0x0020 /* 10GBASE-ER ability */ | ||
| 155 | #define MDIO_PMA_STAT2_10GBLR 0x0040 /* 10GBASE-LR ability */ | ||
| 156 | #define MDIO_PMA_STAT2_10GBSR 0x0080 /* 10GBASE-SR ability */ | ||
| 157 | #define MDIO_PMD_STAT2_TXDISAB 0x0100 /* PMD TX disable ability */ | ||
| 158 | #define MDIO_PMA_STAT2_EXTABLE 0x0200 /* Extended abilities */ | ||
| 159 | #define MDIO_PMA_STAT2_RXFLTABLE 0x1000 /* Receive fault ability */ | ||
| 160 | #define MDIO_PMA_STAT2_TXFLTABLE 0x2000 /* Transmit fault ability */ | ||
| 161 | #define MDIO_PCS_STAT2_10GBR 0x0001 /* 10GBASE-R capable */ | ||
| 162 | #define MDIO_PCS_STAT2_10GBX 0x0002 /* 10GBASE-X capable */ | ||
| 163 | #define MDIO_PCS_STAT2_10GBW 0x0004 /* 10GBASE-W capable */ | ||
| 164 | #define MDIO_PCS_STAT2_RXFLTABLE 0x1000 /* Receive fault ability */ | ||
| 165 | #define MDIO_PCS_STAT2_TXFLTABLE 0x2000 /* Transmit fault ability */ | ||
| 166 | |||
| 167 | /* Transmit disable register. */ | ||
| 168 | #define MDIO_PMD_TXDIS_GLOBAL 0x0001 /* Global PMD TX disable */ | ||
| 169 | #define MDIO_PMD_TXDIS_0 0x0002 /* PMD TX disable 0 */ | ||
| 170 | #define MDIO_PMD_TXDIS_1 0x0004 /* PMD TX disable 1 */ | ||
| 171 | #define MDIO_PMD_TXDIS_2 0x0008 /* PMD TX disable 2 */ | ||
| 172 | #define MDIO_PMD_TXDIS_3 0x0010 /* PMD TX disable 3 */ | ||
| 173 | |||
| 174 | /* Receive signal detect register. */ | ||
| 175 | #define MDIO_PMD_RXDET_GLOBAL 0x0001 /* Global PMD RX signal detect */ | ||
| 176 | #define MDIO_PMD_RXDET_0 0x0002 /* PMD RX signal detect 0 */ | ||
| 177 | #define MDIO_PMD_RXDET_1 0x0004 /* PMD RX signal detect 1 */ | ||
| 178 | #define MDIO_PMD_RXDET_2 0x0008 /* PMD RX signal detect 2 */ | ||
| 179 | #define MDIO_PMD_RXDET_3 0x0010 /* PMD RX signal detect 3 */ | ||
| 180 | |||
| 181 | /* Extended abilities register. */ | ||
| 182 | #define MDIO_PMA_EXTABLE_10GCX4 0x0001 /* 10GBASE-CX4 ability */ | ||
| 183 | #define MDIO_PMA_EXTABLE_10GBLRM 0x0002 /* 10GBASE-LRM ability */ | ||
| 184 | #define MDIO_PMA_EXTABLE_10GBT 0x0004 /* 10GBASE-T ability */ | ||
| 185 | #define MDIO_PMA_EXTABLE_10GBKX4 0x0008 /* 10GBASE-KX4 ability */ | ||
| 186 | #define MDIO_PMA_EXTABLE_10GBKR 0x0010 /* 10GBASE-KR ability */ | ||
| 187 | #define MDIO_PMA_EXTABLE_1000BT 0x0020 /* 1000BASE-T ability */ | ||
| 188 | #define MDIO_PMA_EXTABLE_1000BKX 0x0040 /* 1000BASE-KX ability */ | ||
| 189 | #define MDIO_PMA_EXTABLE_100BTX 0x0080 /* 100BASE-TX ability */ | ||
| 190 | #define MDIO_PMA_EXTABLE_10BT 0x0100 /* 10BASE-T ability */ | ||
| 191 | |||
| 192 | /* PHY XGXS lane state register. */ | ||
| 193 | #define MDIO_PHYXS_LNSTAT_SYNC0 0x0001 | ||
| 194 | #define MDIO_PHYXS_LNSTAT_SYNC1 0x0002 | ||
| 195 | #define MDIO_PHYXS_LNSTAT_SYNC2 0x0004 | ||
| 196 | #define MDIO_PHYXS_LNSTAT_SYNC3 0x0008 | ||
| 197 | #define MDIO_PHYXS_LNSTAT_ALIGN 0x1000 | ||
| 198 | |||
| 199 | /* PMA 10GBASE-T pair swap & polarity */ | ||
| 200 | #define MDIO_PMA_10GBT_SWAPPOL_ABNX 0x0001 /* Pair A/B uncrossed */ | ||
| 201 | #define MDIO_PMA_10GBT_SWAPPOL_CDNX 0x0002 /* Pair C/D uncrossed */ | ||
| 202 | #define MDIO_PMA_10GBT_SWAPPOL_AREV 0x0100 /* Pair A polarity reversed */ | ||
| 203 | #define MDIO_PMA_10GBT_SWAPPOL_BREV 0x0200 /* Pair B polarity reversed */ | ||
| 204 | #define MDIO_PMA_10GBT_SWAPPOL_CREV 0x0400 /* Pair C polarity reversed */ | ||
| 205 | #define MDIO_PMA_10GBT_SWAPPOL_DREV 0x0800 /* Pair D polarity reversed */ | ||
| 206 | |||
| 207 | /* PMA 10GBASE-T TX power register. */ | ||
| 208 | #define MDIO_PMA_10GBT_TXPWR_SHORT 0x0001 /* Short-reach mode */ | ||
| 209 | |||
| 210 | /* PMA 10GBASE-T SNR registers. */ | ||
| 211 | /* Value is SNR margin in dB, clamped to range [-127, 127], plus 0x8000. */ | ||
| 212 | #define MDIO_PMA_10GBT_SNR_BIAS 0x8000 | ||
| 213 | #define MDIO_PMA_10GBT_SNR_MAX 127 | ||
| 214 | |||
| 215 | /* PMA 10GBASE-R FEC ability register. */ | ||
| 216 | #define MDIO_PMA_10GBR_FECABLE_ABLE 0x0001 /* FEC ability */ | ||
| 217 | #define MDIO_PMA_10GBR_FECABLE_ERRABLE 0x0002 /* FEC error indic. ability */ | ||
| 218 | |||
| 219 | /* PCS 10GBASE-R/-T status register 1. */ | ||
| 220 | #define MDIO_PCS_10GBRT_STAT1_BLKLK 0x0001 /* Block lock attained */ | ||
| 221 | |||
| 222 | /* PCS 10GBASE-R/-T status register 2. */ | ||
| 223 | #define MDIO_PCS_10GBRT_STAT2_ERR 0x00ff | ||
| 224 | #define MDIO_PCS_10GBRT_STAT2_BER 0x3f00 | ||
| 225 | |||
| 226 | /* AN 10GBASE-T control register. */ | ||
| 227 | #define MDIO_AN_10GBT_CTRL_ADV10G 0x1000 /* Advertise 10GBASE-T */ | ||
| 228 | |||
| 229 | /* AN 10GBASE-T status register. */ | ||
| 230 | #define MDIO_AN_10GBT_STAT_LPTRR 0x0200 /* LP training reset req. */ | ||
| 231 | #define MDIO_AN_10GBT_STAT_LPLTABLE 0x0400 /* LP loop timing ability */ | ||
| 232 | #define MDIO_AN_10GBT_STAT_LP10G 0x0800 /* LP is 10GBT capable */ | ||
| 233 | #define MDIO_AN_10GBT_STAT_REMOK 0x1000 /* Remote OK */ | ||
| 234 | #define MDIO_AN_10GBT_STAT_LOCOK 0x2000 /* Local OK */ | ||
| 235 | #define MDIO_AN_10GBT_STAT_MS 0x4000 /* Master/slave config */ | ||
| 236 | #define MDIO_AN_10GBT_STAT_MSFLT 0x8000 /* Master/slave config fault */ | ||
| 237 | |||
| 238 | /* LASI RX_ALARM control/status registers. */ | ||
| 239 | #define MDIO_PMA_LASI_RX_PHYXSLFLT 0x0001 /* PHY XS RX local fault */ | ||
| 240 | #define MDIO_PMA_LASI_RX_PCSLFLT 0x0008 /* PCS RX local fault */ | ||
| 241 | #define MDIO_PMA_LASI_RX_PMALFLT 0x0010 /* PMA/PMD RX local fault */ | ||
| 242 | #define MDIO_PMA_LASI_RX_OPTICPOWERFLT 0x0020 /* RX optical power fault */ | ||
| 243 | #define MDIO_PMA_LASI_RX_WISLFLT 0x0200 /* WIS local fault */ | ||
| 244 | |||
| 245 | /* LASI TX_ALARM control/status registers. */ | ||
| 246 | #define MDIO_PMA_LASI_TX_PHYXSLFLT 0x0001 /* PHY XS TX local fault */ | ||
| 247 | #define MDIO_PMA_LASI_TX_PCSLFLT 0x0008 /* PCS TX local fault */ | ||
| 248 | #define MDIO_PMA_LASI_TX_PMALFLT 0x0010 /* PMA/PMD TX local fault */ | ||
| 249 | #define MDIO_PMA_LASI_TX_LASERPOWERFLT 0x0080 /* Laser output power fault */ | ||
| 250 | #define MDIO_PMA_LASI_TX_LASERTEMPFLT 0x0100 /* Laser temperature fault */ | ||
| 251 | #define MDIO_PMA_LASI_TX_LASERBICURRFLT 0x0200 /* Laser bias current fault */ | ||
| 252 | |||
| 253 | /* LASI control/status registers. */ | ||
| 254 | #define MDIO_PMA_LASI_LSALARM 0x0001 /* LS_ALARM enable/status */ | ||
| 255 | #define MDIO_PMA_LASI_TXALARM 0x0002 /* TX_ALARM enable/status */ | ||
| 256 | #define MDIO_PMA_LASI_RXALARM 0x0004 /* RX_ALARM enable/status */ | ||
| 257 | |||
| 258 | /* Mapping between MDIO PRTAD/DEVAD and mii_ioctl_data::phy_id */ | ||
| 259 | |||
| 260 | #define MDIO_PHY_ID_C45 0x8000 | ||
| 261 | #define MDIO_PHY_ID_PRTAD 0x03e0 | ||
| 262 | #define MDIO_PHY_ID_DEVAD 0x001f | ||
| 263 | #define MDIO_PHY_ID_C45_MASK \ | ||
| 264 | (MDIO_PHY_ID_C45 | MDIO_PHY_ID_PRTAD | MDIO_PHY_ID_DEVAD) | ||
| 265 | |||
| 266 | static inline __u16 mdio_phy_id_c45(int prtad, int devad) | ||
| 267 | { | ||
| 268 | return MDIO_PHY_ID_C45 | (prtad << 5) | devad; | ||
| 269 | } | ||
| 270 | |||
| 271 | static inline bool mdio_phy_id_is_c45(int phy_id) | ||
| 272 | { | ||
| 273 | return (phy_id & MDIO_PHY_ID_C45) && !(phy_id & ~MDIO_PHY_ID_C45_MASK); | ||
| 274 | } | ||
| 275 | |||
| 276 | static inline __u16 mdio_phy_id_prtad(int phy_id) | ||
| 277 | { | ||
| 278 | return (phy_id & MDIO_PHY_ID_PRTAD) >> 5; | ||
| 279 | } | ||
| 280 | |||
| 281 | static inline __u16 mdio_phy_id_devad(int phy_id) | ||
| 282 | { | ||
| 283 | return phy_id & MDIO_PHY_ID_DEVAD; | ||
| 284 | } | ||
| 285 | |||
| 286 | #define MDIO_SUPPORTS_C22 1 | ||
| 287 | #define MDIO_SUPPORTS_C45 2 | ||
| 288 | |||
| 289 | #ifdef __KERNEL__ | ||
| 290 | |||
| 291 | /** | ||
| 292 | * struct mdio_if_info - Ethernet controller MDIO interface | ||
| 293 | * @prtad: PRTAD of the PHY (%MDIO_PRTAD_NONE if not present/unknown) | ||
| 294 | * @mmds: Mask of MMDs expected to be present in the PHY. This must be | ||
| 295 | * non-zero unless @prtad = %MDIO_PRTAD_NONE. | ||
| 296 | * @mode_support: MDIO modes supported. If %MDIO_SUPPORTS_C22 is set then | ||
| 297 | * MII register access will be passed through with @devad = | ||
| 298 | * %MDIO_DEVAD_NONE. If %MDIO_EMULATE_C22 is set then access to | ||
| 299 | * commonly used clause 22 registers will be translated into | ||
| 300 | * clause 45 registers. | ||
| 301 | * @dev: Net device structure | ||
| 302 | * @mdio_read: Register read function; returns value or negative error code | ||
| 303 | * @mdio_write: Register write function; returns 0 or negative error code | ||
| 304 | */ | ||
| 305 | struct mdio_if_info { | ||
| 306 | int prtad; | ||
| 307 | u32 __bitwise mmds; | ||
| 308 | unsigned mode_support; | ||
| 309 | |||
| 310 | struct net_device *dev; | ||
| 311 | int (*mdio_read)(struct net_device *dev, int prtad, int devad, | ||
| 312 | u16 addr); | ||
| 313 | int (*mdio_write)(struct net_device *dev, int prtad, int devad, | ||
| 314 | u16 addr, u16 val); | ||
| 315 | }; | ||
| 316 | |||
| 317 | #define MDIO_PRTAD_NONE (-1) | ||
| 318 | #define MDIO_DEVAD_NONE (-1) | ||
| 319 | #define MDIO_EMULATE_C22 4 | ||
| 320 | |||
| 321 | struct ethtool_cmd; | ||
| 322 | struct ethtool_pauseparam; | ||
| 323 | extern int mdio45_probe(struct mdio_if_info *mdio, int prtad); | ||
| 324 | extern int mdio_set_flag(const struct mdio_if_info *mdio, | ||
| 325 | int prtad, int devad, u16 addr, int mask, | ||
| 326 | bool sense); | ||
| 327 | extern int mdio45_links_ok(const struct mdio_if_info *mdio, u32 mmds); | ||
| 328 | extern int mdio45_nway_restart(const struct mdio_if_info *mdio); | ||
| 329 | extern void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio, | ||
| 330 | struct ethtool_cmd *ecmd, | ||
| 331 | u32 npage_adv, u32 npage_lpa); | ||
| 332 | extern void | ||
| 333 | mdio45_ethtool_spauseparam_an(const struct mdio_if_info *mdio, | ||
| 334 | const struct ethtool_pauseparam *ecmd); | ||
| 335 | |||
| 336 | /** | ||
| 337 | * mdio45_ethtool_gset - get settings for ETHTOOL_GSET | ||
| 338 | * @mdio: MDIO interface | ||
| 339 | * @ecmd: Ethtool request structure | ||
| 340 | * | ||
| 341 | * Since the CSRs for auto-negotiation using next pages are not fully | ||
| 342 | * standardised, this function does not attempt to decode them. Use | ||
| 343 | * mdio45_ethtool_gset_npage() to specify advertisement bits from next | ||
| 344 | * pages. | ||
| 345 | */ | ||
| 346 | static inline void mdio45_ethtool_gset(const struct mdio_if_info *mdio, | ||
| 347 | struct ethtool_cmd *ecmd) | ||
| 348 | { | ||
| 349 | mdio45_ethtool_gset_npage(mdio, ecmd, 0, 0); | ||
| 350 | } | ||
| 351 | |||
| 352 | extern int mdio_mii_ioctl(const struct mdio_if_info *mdio, | ||
| 353 | struct mii_ioctl_data *mii_data, int cmd); | ||
| 354 | |||
| 355 | #endif /* __KERNEL__ */ | ||
| 356 | #endif /* __LINUX_MDIO_H__ */ | ||
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h index 516d955ab8a1..c377118884e6 100644 --- a/include/linux/mfd/tmio.h +++ b/include/linux/mfd/tmio.h | |||
| @@ -19,6 +19,13 @@ | |||
| 19 | } while (0) | 19 | } while (0) |
| 20 | 20 | ||
| 21 | /* | 21 | /* |
| 22 | * data for the MMC controller | ||
| 23 | */ | ||
| 24 | struct tmio_mmc_data { | ||
| 25 | unsigned int hclk; | ||
| 26 | }; | ||
| 27 | |||
| 28 | /* | ||
| 22 | * data for the NAND controller | 29 | * data for the NAND controller |
| 23 | */ | 30 | */ |
| 24 | struct tmio_nand_data { | 31 | struct tmio_nand_data { |
diff --git a/include/linux/mg_disk.h b/include/linux/mg_disk.h new file mode 100644 index 000000000000..e11f4d9f1c2e --- /dev/null +++ b/include/linux/mg_disk.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mg_disk.c | ||
| 3 | * | ||
| 4 | * Private data for mflash platform driver | ||
| 5 | * | ||
| 6 | * (c) 2008 mGine Co.,LTD | ||
| 7 | * (c) 2008 unsik Kim <donari75@gmail.com> | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License version 2 as | ||
| 11 | * published by the Free Software Foundation. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __MG_DISK_H__ | ||
| 15 | #define __MG_DISK_H__ | ||
| 16 | |||
| 17 | /* name for platform device */ | ||
| 18 | #define MG_DEV_NAME "mg_disk" | ||
| 19 | |||
| 20 | /* names of GPIO resource */ | ||
| 21 | #define MG_RST_PIN "mg_rst" | ||
| 22 | /* except MG_BOOT_DEV, reset-out pin should be assigned */ | ||
| 23 | #define MG_RSTOUT_PIN "mg_rstout" | ||
| 24 | |||
| 25 | /* device attribution */ | ||
| 26 | /* use mflash as boot device */ | ||
| 27 | #define MG_BOOT_DEV (1 << 0) | ||
| 28 | /* use mflash as storage device */ | ||
| 29 | #define MG_STORAGE_DEV (1 << 1) | ||
| 30 | /* same as MG_STORAGE_DEV, but bootloader already done reset sequence */ | ||
| 31 | #define MG_STORAGE_DEV_SKIP_RST (1 << 2) | ||
| 32 | |||
| 33 | /* private driver data */ | ||
| 34 | struct mg_drv_data { | ||
| 35 | /* disk resource */ | ||
| 36 | u32 use_polling; | ||
| 37 | |||
| 38 | /* device attribution */ | ||
| 39 | u32 dev_attr; | ||
| 40 | |||
| 41 | /* internally used */ | ||
| 42 | void *host; | ||
| 43 | }; | ||
| 44 | |||
| 45 | #endif | ||
diff --git a/include/linux/mii.h b/include/linux/mii.h index ad748588faf1..359fba880274 100644 --- a/include/linux/mii.h +++ b/include/linux/mii.h | |||
| @@ -240,6 +240,22 @@ static inline unsigned int mii_duplex (unsigned int duplex_lock, | |||
| 240 | } | 240 | } |
| 241 | 241 | ||
| 242 | /** | 242 | /** |
| 243 | * mii_advertise_flowctrl - get flow control advertisement flags | ||
| 244 | * @cap: Flow control capabilities (FLOW_CTRL_RX, FLOW_CTRL_TX or both) | ||
| 245 | */ | ||
| 246 | static inline u16 mii_advertise_flowctrl(int cap) | ||
| 247 | { | ||
| 248 | u16 adv = 0; | ||
| 249 | |||
| 250 | if (cap & FLOW_CTRL_RX) | ||
| 251 | adv = ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; | ||
| 252 | if (cap & FLOW_CTRL_TX) | ||
| 253 | adv ^= ADVERTISE_PAUSE_ASYM; | ||
| 254 | |||
| 255 | return adv; | ||
| 256 | } | ||
| 257 | |||
| 258 | /** | ||
| 243 | * mii_resolve_flowctrl_fdx | 259 | * mii_resolve_flowctrl_fdx |
| 244 | * @lcladv: value of MII ADVERTISE register | 260 | * @lcladv: value of MII ADVERTISE register |
| 245 | * @rmtadv: value of MII LPA register | 261 | * @rmtadv: value of MII LPA register |
| @@ -250,18 +266,12 @@ static inline u8 mii_resolve_flowctrl_fdx(u16 lcladv, u16 rmtadv) | |||
| 250 | { | 266 | { |
| 251 | u8 cap = 0; | 267 | u8 cap = 0; |
| 252 | 268 | ||
| 253 | if (lcladv & ADVERTISE_PAUSE_CAP) { | 269 | if (lcladv & rmtadv & ADVERTISE_PAUSE_CAP) { |
| 254 | if (lcladv & ADVERTISE_PAUSE_ASYM) { | 270 | cap = FLOW_CTRL_TX | FLOW_CTRL_RX; |
| 255 | if (rmtadv & LPA_PAUSE_CAP) | 271 | } else if (lcladv & rmtadv & ADVERTISE_PAUSE_ASYM) { |
| 256 | cap = FLOW_CTRL_TX | FLOW_CTRL_RX; | 272 | if (lcladv & ADVERTISE_PAUSE_CAP) |
| 257 | else if (rmtadv & LPA_PAUSE_ASYM) | 273 | cap = FLOW_CTRL_RX; |
| 258 | cap = FLOW_CTRL_RX; | 274 | else if (rmtadv & ADVERTISE_PAUSE_CAP) |
| 259 | } else { | ||
| 260 | if (rmtadv & LPA_PAUSE_CAP) | ||
| 261 | cap = FLOW_CTRL_TX | FLOW_CTRL_RX; | ||
| 262 | } | ||
| 263 | } else if (lcladv & ADVERTISE_PAUSE_ASYM) { | ||
| 264 | if ((rmtadv & LPA_PAUSE_CAP) && (rmtadv & LPA_PAUSE_ASYM)) | ||
| 265 | cap = FLOW_CTRL_TX; | 275 | cap = FLOW_CTRL_TX; |
| 266 | } | 276 | } |
| 267 | 277 | ||
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index 3aff8a6a389e..ce7cc6c7bcbb 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
| @@ -210,6 +210,7 @@ struct mlx4_caps { | |||
| 210 | int num_comp_vectors; | 210 | int num_comp_vectors; |
| 211 | int num_mpts; | 211 | int num_mpts; |
| 212 | int num_mtt_segs; | 212 | int num_mtt_segs; |
| 213 | int mtts_per_seg; | ||
| 213 | int fmr_reserved_mtts; | 214 | int fmr_reserved_mtts; |
| 214 | int reserved_mtts; | 215 | int reserved_mtts; |
| 215 | int reserved_mrws; | 216 | int reserved_mrws; |
diff --git a/include/linux/mlx4/qp.h b/include/linux/mlx4/qp.h index bf8f11982dae..9f29d86e5dc9 100644 --- a/include/linux/mlx4/qp.h +++ b/include/linux/mlx4/qp.h | |||
| @@ -165,6 +165,7 @@ enum { | |||
| 165 | MLX4_WQE_CTRL_IP_CSUM = 1 << 4, | 165 | MLX4_WQE_CTRL_IP_CSUM = 1 << 4, |
| 166 | MLX4_WQE_CTRL_TCP_UDP_CSUM = 1 << 5, | 166 | MLX4_WQE_CTRL_TCP_UDP_CSUM = 1 << 5, |
| 167 | MLX4_WQE_CTRL_INS_VLAN = 1 << 6, | 167 | MLX4_WQE_CTRL_INS_VLAN = 1 << 6, |
| 168 | MLX4_WQE_CTRL_STRONG_ORDER = 1 << 7, | ||
| 168 | }; | 169 | }; |
| 169 | 170 | ||
| 170 | struct mlx4_wqe_ctrl_seg { | 171 | struct mlx4_wqe_ctrl_seg { |
diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h index ea1bf5ba092f..c7211ab6dd4b 100644 --- a/include/linux/mmc/sdio_ids.h +++ b/include/linux/mmc/sdio_ids.h | |||
| @@ -25,5 +25,7 @@ | |||
| 25 | 25 | ||
| 26 | #define SDIO_VENDOR_ID_MARVELL 0x02df | 26 | #define SDIO_VENDOR_ID_MARVELL 0x02df |
| 27 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 | 27 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 |
| 28 | #define SDIO_DEVICE_ID_MARVELL_8688WLAN 0x9104 | ||
| 29 | #define SDIO_DEVICE_ID_MARVELL_8688BT 0x9105 | ||
| 28 | 30 | ||
| 29 | #endif | 31 | #endif |
diff --git a/include/linux/module.h b/include/linux/module.h index a8f2c0aa4c32..a7bc6e7b43a7 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
| @@ -77,6 +77,7 @@ search_extable(const struct exception_table_entry *first, | |||
| 77 | void sort_extable(struct exception_table_entry *start, | 77 | void sort_extable(struct exception_table_entry *start, |
| 78 | struct exception_table_entry *finish); | 78 | struct exception_table_entry *finish); |
| 79 | void sort_main_extable(void); | 79 | void sort_main_extable(void); |
| 80 | void trim_init_extable(struct module *m); | ||
| 80 | 81 | ||
| 81 | #ifdef MODULE | 82 | #ifdef MODULE |
| 82 | #define MODULE_GENERIC_TABLE(gtype,name) \ | 83 | #define MODULE_GENERIC_TABLE(gtype,name) \ |
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index a4f0b931846c..6547c3cdbc4c 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h | |||
| @@ -36,9 +36,14 @@ typedef int (*param_set_fn)(const char *val, struct kernel_param *kp); | |||
| 36 | /* Returns length written or -errno. Buffer is 4k (ie. be short!) */ | 36 | /* Returns length written or -errno. Buffer is 4k (ie. be short!) */ |
| 37 | typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp); | 37 | typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp); |
| 38 | 38 | ||
| 39 | /* Flag bits for kernel_param.flags */ | ||
| 40 | #define KPARAM_KMALLOCED 1 | ||
| 41 | #define KPARAM_ISBOOL 2 | ||
| 42 | |||
| 39 | struct kernel_param { | 43 | struct kernel_param { |
| 40 | const char *name; | 44 | const char *name; |
| 41 | unsigned int perm; | 45 | u16 perm; |
| 46 | u16 flags; | ||
| 42 | param_set_fn set; | 47 | param_set_fn set; |
| 43 | param_get_fn get; | 48 | param_get_fn get; |
| 44 | union { | 49 | union { |
| @@ -79,7 +84,7 @@ struct kparam_array | |||
| 79 | parameters. perm sets the visibility in sysfs: 000 means it's | 84 | parameters. perm sets the visibility in sysfs: 000 means it's |
| 80 | not there, read bits mean it's readable, write bits mean it's | 85 | not there, read bits mean it's readable, write bits mean it's |
| 81 | writable. */ | 86 | writable. */ |
| 82 | #define __module_param_call(prefix, name, set, get, arg, perm) \ | 87 | #define __module_param_call(prefix, name, set, get, arg, isbool, perm) \ |
| 83 | /* Default value instead of permissions? */ \ | 88 | /* Default value instead of permissions? */ \ |
| 84 | static int __param_perm_check_##name __attribute__((unused)) = \ | 89 | static int __param_perm_check_##name __attribute__((unused)) = \ |
| 85 | BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)) \ | 90 | BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)) \ |
| @@ -88,10 +93,13 @@ struct kparam_array | |||
| 88 | static struct kernel_param __moduleparam_const __param_##name \ | 93 | static struct kernel_param __moduleparam_const __param_##name \ |
| 89 | __used \ | 94 | __used \ |
| 90 | __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \ | 95 | __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \ |
| 91 | = { __param_str_##name, perm, set, get, { arg } } | 96 | = { __param_str_##name, perm, isbool ? KPARAM_ISBOOL : 0, \ |
| 97 | set, get, { arg } } | ||
| 92 | 98 | ||
| 93 | #define module_param_call(name, set, get, arg, perm) \ | 99 | #define module_param_call(name, set, get, arg, perm) \ |
| 94 | __module_param_call(MODULE_PARAM_PREFIX, name, set, get, arg, perm) | 100 | __module_param_call(MODULE_PARAM_PREFIX, \ |
| 101 | name, set, get, arg, \ | ||
| 102 | __same_type(*(arg), bool), perm) | ||
| 95 | 103 | ||
| 96 | /* Helper functions: type is byte, short, ushort, int, uint, long, | 104 | /* Helper functions: type is byte, short, ushort, int, uint, long, |
| 97 | ulong, charp, bool or invbool, or XXX if you define param_get_XXX, | 105 | ulong, charp, bool or invbool, or XXX if you define param_get_XXX, |
| @@ -120,15 +128,16 @@ struct kparam_array | |||
| 120 | #define core_param(name, var, type, perm) \ | 128 | #define core_param(name, var, type, perm) \ |
| 121 | param_check_##type(name, &(var)); \ | 129 | param_check_##type(name, &(var)); \ |
| 122 | __module_param_call("", name, param_set_##type, param_get_##type, \ | 130 | __module_param_call("", name, param_set_##type, param_get_##type, \ |
| 123 | &var, perm) | 131 | &var, __same_type(var, bool), perm) |
| 124 | #endif /* !MODULE */ | 132 | #endif /* !MODULE */ |
| 125 | 133 | ||
| 126 | /* Actually copy string: maxlen param is usually sizeof(string). */ | 134 | /* Actually copy string: maxlen param is usually sizeof(string). */ |
| 127 | #define module_param_string(name, string, len, perm) \ | 135 | #define module_param_string(name, string, len, perm) \ |
| 128 | static const struct kparam_string __param_string_##name \ | 136 | static const struct kparam_string __param_string_##name \ |
| 129 | = { len, string }; \ | 137 | = { len, string }; \ |
| 130 | module_param_call(name, param_set_copystring, param_get_string, \ | 138 | __module_param_call(MODULE_PARAM_PREFIX, name, \ |
| 131 | .str = &__param_string_##name, perm); \ | 139 | param_set_copystring, param_get_string, \ |
| 140 | .str = &__param_string_##name, 0, perm); \ | ||
| 132 | __MODULE_PARM_TYPE(name, "string") | 141 | __MODULE_PARM_TYPE(name, "string") |
| 133 | 142 | ||
| 134 | /* Called on module insert or kernel boot */ | 143 | /* Called on module insert or kernel boot */ |
| @@ -186,21 +195,30 @@ extern int param_set_charp(const char *val, struct kernel_param *kp); | |||
| 186 | extern int param_get_charp(char *buffer, struct kernel_param *kp); | 195 | extern int param_get_charp(char *buffer, struct kernel_param *kp); |
| 187 | #define param_check_charp(name, p) __param_check(name, p, char *) | 196 | #define param_check_charp(name, p) __param_check(name, p, char *) |
| 188 | 197 | ||
| 198 | /* For historical reasons "bool" parameters can be (unsigned) "int". */ | ||
| 189 | extern int param_set_bool(const char *val, struct kernel_param *kp); | 199 | extern int param_set_bool(const char *val, struct kernel_param *kp); |
| 190 | extern int param_get_bool(char *buffer, struct kernel_param *kp); | 200 | extern int param_get_bool(char *buffer, struct kernel_param *kp); |
| 191 | #define param_check_bool(name, p) __param_check(name, p, int) | 201 | #define param_check_bool(name, p) \ |
| 202 | static inline void __check_##name(void) \ | ||
| 203 | { \ | ||
| 204 | BUILD_BUG_ON(!__same_type(*(p), bool) && \ | ||
| 205 | !__same_type(*(p), unsigned int) && \ | ||
| 206 | !__same_type(*(p), int)); \ | ||
| 207 | } | ||
| 192 | 208 | ||
| 193 | extern int param_set_invbool(const char *val, struct kernel_param *kp); | 209 | extern int param_set_invbool(const char *val, struct kernel_param *kp); |
| 194 | extern int param_get_invbool(char *buffer, struct kernel_param *kp); | 210 | extern int param_get_invbool(char *buffer, struct kernel_param *kp); |
| 195 | #define param_check_invbool(name, p) __param_check(name, p, int) | 211 | #define param_check_invbool(name, p) __param_check(name, p, bool) |
| 196 | 212 | ||
| 197 | /* Comma-separated array: *nump is set to number they actually specified. */ | 213 | /* Comma-separated array: *nump is set to number they actually specified. */ |
| 198 | #define module_param_array_named(name, array, type, nump, perm) \ | 214 | #define module_param_array_named(name, array, type, nump, perm) \ |
| 199 | static const struct kparam_array __param_arr_##name \ | 215 | static const struct kparam_array __param_arr_##name \ |
| 200 | = { ARRAY_SIZE(array), nump, param_set_##type, param_get_##type,\ | 216 | = { ARRAY_SIZE(array), nump, param_set_##type, param_get_##type,\ |
| 201 | sizeof(array[0]), array }; \ | 217 | sizeof(array[0]), array }; \ |
| 202 | module_param_call(name, param_array_set, param_array_get, \ | 218 | __module_param_call(MODULE_PARAM_PREFIX, name, \ |
| 203 | .arr = &__param_arr_##name, perm); \ | 219 | param_array_set, param_array_get, \ |
| 220 | .arr = &__param_arr_##name, \ | ||
| 221 | __same_type(array[0], bool), perm); \ | ||
| 204 | __MODULE_PARM_TYPE(name, "array of " #type) | 222 | __MODULE_PARM_TYPE(name, "array of " #type) |
| 205 | 223 | ||
| 206 | #define module_param_array(name, type, nump, perm) \ | 224 | #define module_param_array(name, type, nump, perm) \ |
diff --git a/include/linux/mount.h b/include/linux/mount.h index 51f55f903aff..5d5275364867 100644 --- a/include/linux/mount.h +++ b/include/linux/mount.h | |||
| @@ -30,7 +30,7 @@ struct mnt_namespace; | |||
| 30 | #define MNT_STRICTATIME 0x80 | 30 | #define MNT_STRICTATIME 0x80 |
| 31 | 31 | ||
| 32 | #define MNT_SHRINKABLE 0x100 | 32 | #define MNT_SHRINKABLE 0x100 |
| 33 | #define MNT_IMBALANCED_WRITE_COUNT 0x200 /* just for debugging */ | 33 | #define MNT_WRITE_HOLD 0x200 |
| 34 | 34 | ||
| 35 | #define MNT_SHARED 0x1000 /* if the vfsmount is a shared mount */ | 35 | #define MNT_SHARED 0x1000 /* if the vfsmount is a shared mount */ |
| 36 | #define MNT_UNBINDABLE 0x2000 /* if the vfsmount is a unbindable mount */ | 36 | #define MNT_UNBINDABLE 0x2000 /* if the vfsmount is a unbindable mount */ |
| @@ -65,13 +65,22 @@ struct vfsmount { | |||
| 65 | int mnt_expiry_mark; /* true if marked for expiry */ | 65 | int mnt_expiry_mark; /* true if marked for expiry */ |
| 66 | int mnt_pinned; | 66 | int mnt_pinned; |
| 67 | int mnt_ghosts; | 67 | int mnt_ghosts; |
| 68 | /* | 68 | #ifdef CONFIG_SMP |
| 69 | * This value is not stable unless all of the mnt_writers[] spinlocks | 69 | int *mnt_writers; |
| 70 | * are held, and all mnt_writer[]s on this mount have 0 as their ->count | 70 | #else |
| 71 | */ | 71 | int mnt_writers; |
| 72 | atomic_t __mnt_writers; | 72 | #endif |
| 73 | }; | 73 | }; |
| 74 | 74 | ||
| 75 | static inline int *get_mnt_writers_ptr(struct vfsmount *mnt) | ||
| 76 | { | ||
| 77 | #ifdef CONFIG_SMP | ||
| 78 | return mnt->mnt_writers; | ||
| 79 | #else | ||
| 80 | return &mnt->mnt_writers; | ||
| 81 | #endif | ||
| 82 | } | ||
| 83 | |||
| 75 | static inline struct vfsmount *mntget(struct vfsmount *mnt) | 84 | static inline struct vfsmount *mntget(struct vfsmount *mnt) |
| 76 | { | 85 | { |
| 77 | if (mnt) | 86 | if (mnt) |
| @@ -79,7 +88,11 @@ static inline struct vfsmount *mntget(struct vfsmount *mnt) | |||
| 79 | return mnt; | 88 | return mnt; |
| 80 | } | 89 | } |
| 81 | 90 | ||
| 91 | struct file; /* forward dec */ | ||
| 92 | |||
| 82 | extern int mnt_want_write(struct vfsmount *mnt); | 93 | extern int mnt_want_write(struct vfsmount *mnt); |
| 94 | extern int mnt_want_write_file(struct file *file); | ||
| 95 | extern int mnt_clone_write(struct vfsmount *mnt); | ||
| 83 | extern void mnt_drop_write(struct vfsmount *mnt); | 96 | extern void mnt_drop_write(struct vfsmount *mnt); |
| 84 | extern void mntput_no_expire(struct vfsmount *mnt); | 97 | extern void mntput_no_expire(struct vfsmount *mnt); |
| 85 | extern void mnt_pin(struct vfsmount *mnt); | 98 | extern void mnt_pin(struct vfsmount *mnt); |
diff --git a/include/linux/namei.h b/include/linux/namei.h index 518098fe63af..d870ae2faedc 100644 --- a/include/linux/namei.h +++ b/include/linux/namei.h | |||
| @@ -18,6 +18,7 @@ enum { MAX_NESTED_LINKS = 8 }; | |||
| 18 | struct nameidata { | 18 | struct nameidata { |
| 19 | struct path path; | 19 | struct path path; |
| 20 | struct qstr last; | 20 | struct qstr last; |
| 21 | struct path root; | ||
| 21 | unsigned int flags; | 22 | unsigned int flags; |
| 22 | int last_type; | 23 | int last_type; |
| 23 | unsigned depth; | 24 | unsigned depth; |
| @@ -77,8 +78,8 @@ extern void release_open_intent(struct nameidata *); | |||
| 77 | extern struct dentry *lookup_one_len(const char *, struct dentry *, int); | 78 | extern struct dentry *lookup_one_len(const char *, struct dentry *, int); |
| 78 | extern struct dentry *lookup_one_noperm(const char *, struct dentry *); | 79 | extern struct dentry *lookup_one_noperm(const char *, struct dentry *); |
| 79 | 80 | ||
| 80 | extern int follow_down(struct vfsmount **, struct dentry **); | 81 | extern int follow_down(struct path *); |
| 81 | extern int follow_up(struct vfsmount **, struct dentry **); | 82 | extern int follow_up(struct path *); |
| 82 | 83 | ||
| 83 | extern struct dentry *lock_rename(struct dentry *, struct dentry *); | 84 | extern struct dentry *lock_rename(struct dentry *, struct dentry *); |
| 84 | extern void unlock_rename(struct dentry *, struct dentry *); | 85 | extern void unlock_rename(struct dentry *, struct dentry *); |
diff --git a/include/linux/net_dropmon.h b/include/linux/net_dropmon.h index 0e2e100c44a2..3ceb0cc1bc78 100644 --- a/include/linux/net_dropmon.h +++ b/include/linux/net_dropmon.h | |||
| @@ -3,12 +3,20 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/netlink.h> | 5 | #include <linux/netlink.h> |
| 6 | #include <linux/types.h> | ||
| 6 | 7 | ||
| 7 | struct net_dm_drop_point { | 8 | struct net_dm_drop_point { |
| 8 | __u8 pc[8]; | 9 | __u8 pc[8]; |
| 9 | __u32 count; | 10 | __u32 count; |
| 10 | }; | 11 | }; |
| 11 | 12 | ||
| 13 | #define is_drop_point_hw(x) do {\ | ||
| 14 | int ____i, ____j;\ | ||
| 15 | for (____i = 0; ____i < 8; i ____i++)\ | ||
| 16 | ____j |= x[____i];\ | ||
| 17 | ____j;\ | ||
| 18 | } while (0) | ||
| 19 | |||
| 12 | #define NET_DM_CFG_VERSION 0 | 20 | #define NET_DM_CFG_VERSION 0 |
| 13 | #define NET_DM_CFG_ALERT_COUNT 1 | 21 | #define NET_DM_CFG_ALERT_COUNT 1 |
| 14 | #define NET_DM_CFG_ALERT_DELAY 2 | 22 | #define NET_DM_CFG_ALERT_DELAY 2 |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 5a96a1a406e9..9ea8d6dfe540 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -39,9 +39,11 @@ | |||
| 39 | 39 | ||
| 40 | #include <linux/device.h> | 40 | #include <linux/device.h> |
| 41 | #include <linux/percpu.h> | 41 | #include <linux/percpu.h> |
| 42 | #include <linux/rculist.h> | ||
| 42 | #include <linux/dmaengine.h> | 43 | #include <linux/dmaengine.h> |
| 43 | #include <linux/workqueue.h> | 44 | #include <linux/workqueue.h> |
| 44 | 45 | ||
| 46 | #include <linux/ethtool.h> | ||
| 45 | #include <net/net_namespace.h> | 47 | #include <net/net_namespace.h> |
| 46 | #include <net/dsa.h> | 48 | #include <net/dsa.h> |
| 47 | #ifdef CONFIG_DCB | 49 | #ifdef CONFIG_DCB |
| @@ -49,7 +51,6 @@ | |||
| 49 | #endif | 51 | #endif |
| 50 | 52 | ||
| 51 | struct vlan_group; | 53 | struct vlan_group; |
| 52 | struct ethtool_ops; | ||
| 53 | struct netpoll_info; | 54 | struct netpoll_info; |
| 54 | /* 802.11 specific */ | 55 | /* 802.11 specific */ |
| 55 | struct wireless_dev; | 56 | struct wireless_dev; |
| @@ -210,6 +211,19 @@ struct dev_addr_list | |||
| 210 | #define dmi_users da_users | 211 | #define dmi_users da_users |
| 211 | #define dmi_gusers da_gusers | 212 | #define dmi_gusers da_gusers |
| 212 | 213 | ||
| 214 | struct netdev_hw_addr { | ||
| 215 | struct list_head list; | ||
| 216 | unsigned char addr[MAX_ADDR_LEN]; | ||
| 217 | unsigned char type; | ||
| 218 | #define NETDEV_HW_ADDR_T_LAN 1 | ||
| 219 | #define NETDEV_HW_ADDR_T_SAN 2 | ||
| 220 | #define NETDEV_HW_ADDR_T_SLAVE 3 | ||
| 221 | #define NETDEV_HW_ADDR_T_UNICAST 4 | ||
| 222 | int refcount; | ||
| 223 | bool synced; | ||
| 224 | struct rcu_head rcu_head; | ||
| 225 | }; | ||
| 226 | |||
| 213 | struct hh_cache | 227 | struct hh_cache |
| 214 | { | 228 | { |
| 215 | struct hh_cache *hh_next; /* Next entry */ | 229 | struct hh_cache *hh_next; /* Next entry */ |
| @@ -447,12 +461,25 @@ enum netdev_queue_state_t | |||
| 447 | }; | 461 | }; |
| 448 | 462 | ||
| 449 | struct netdev_queue { | 463 | struct netdev_queue { |
| 464 | /* | ||
| 465 | * read mostly part | ||
| 466 | */ | ||
| 450 | struct net_device *dev; | 467 | struct net_device *dev; |
| 451 | struct Qdisc *qdisc; | 468 | struct Qdisc *qdisc; |
| 452 | unsigned long state; | 469 | unsigned long state; |
| 453 | spinlock_t _xmit_lock; | ||
| 454 | int xmit_lock_owner; | ||
| 455 | struct Qdisc *qdisc_sleeping; | 470 | struct Qdisc *qdisc_sleeping; |
| 471 | /* | ||
| 472 | * write mostly part | ||
| 473 | */ | ||
| 474 | spinlock_t _xmit_lock ____cacheline_aligned_in_smp; | ||
| 475 | int xmit_lock_owner; | ||
| 476 | /* | ||
| 477 | * please use this field instead of dev->trans_start | ||
| 478 | */ | ||
| 479 | unsigned long trans_start; | ||
| 480 | unsigned long tx_bytes; | ||
| 481 | unsigned long tx_packets; | ||
| 482 | unsigned long tx_dropped; | ||
| 456 | } ____cacheline_aligned_in_smp; | 483 | } ____cacheline_aligned_in_smp; |
| 457 | 484 | ||
| 458 | 485 | ||
| @@ -670,7 +697,9 @@ struct net_device | |||
| 670 | #define NETIF_F_GRO 16384 /* Generic receive offload */ | 697 | #define NETIF_F_GRO 16384 /* Generic receive offload */ |
| 671 | #define NETIF_F_LRO 32768 /* large receive offload */ | 698 | #define NETIF_F_LRO 32768 /* large receive offload */ |
| 672 | 699 | ||
| 700 | /* the GSO_MASK reserves bits 16 through 23 */ | ||
| 673 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ | 701 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ |
| 702 | #define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ | ||
| 674 | 703 | ||
| 675 | /* Segmentation offload features */ | 704 | /* Segmentation offload features */ |
| 676 | #define NETIF_F_GSO_SHIFT 16 | 705 | #define NETIF_F_GSO_SHIFT 16 |
| @@ -747,10 +776,11 @@ struct net_device | |||
| 747 | unsigned char addr_len; /* hardware address length */ | 776 | unsigned char addr_len; /* hardware address length */ |
| 748 | unsigned short dev_id; /* for shared network cards */ | 777 | unsigned short dev_id; /* for shared network cards */ |
| 749 | 778 | ||
| 750 | spinlock_t addr_list_lock; | 779 | struct list_head uc_list; /* Secondary unicast mac |
| 751 | struct dev_addr_list *uc_list; /* Secondary unicast mac addresses */ | 780 | addresses */ |
| 752 | int uc_count; /* Number of installed ucasts */ | 781 | int uc_count; /* Number of installed ucasts */ |
| 753 | int uc_promisc; | 782 | int uc_promisc; |
| 783 | spinlock_t addr_list_lock; | ||
| 754 | struct dev_addr_list *mc_list; /* Multicast mac addresses */ | 784 | struct dev_addr_list *mc_list; /* Multicast mac addresses */ |
| 755 | int mc_count; /* Number of installed mcasts */ | 785 | int mc_count; /* Number of installed mcasts */ |
| 756 | unsigned int promiscuity; | 786 | unsigned int promiscuity; |
| @@ -776,8 +806,11 @@ struct net_device | |||
| 776 | */ | 806 | */ |
| 777 | unsigned long last_rx; /* Time of last Rx */ | 807 | unsigned long last_rx; /* Time of last Rx */ |
| 778 | /* Interface address info used in eth_type_trans() */ | 808 | /* Interface address info used in eth_type_trans() */ |
| 779 | unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast | 809 | unsigned char *dev_addr; /* hw address, (before bcast |
| 780 | because most packets are unicast) */ | 810 | because most packets are |
| 811 | unicast) */ | ||
| 812 | |||
| 813 | struct list_head dev_addr_list; /* list of device hw addresses */ | ||
| 781 | 814 | ||
| 782 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ | 815 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ |
| 783 | 816 | ||
| @@ -797,6 +830,11 @@ struct net_device | |||
| 797 | * One part is mostly used on xmit path (device) | 830 | * One part is mostly used on xmit path (device) |
| 798 | */ | 831 | */ |
| 799 | /* These may be needed for future network-power-down code. */ | 832 | /* These may be needed for future network-power-down code. */ |
| 833 | |||
| 834 | /* | ||
| 835 | * trans_start here is expensive for high speed devices on SMP, | ||
| 836 | * please use netdev_queue->trans_start instead. | ||
| 837 | */ | ||
| 800 | unsigned long trans_start; /* Time (in jiffies) of last Tx */ | 838 | unsigned long trans_start; /* Time (in jiffies) of last Tx */ |
| 801 | 839 | ||
| 802 | int watchdog_timeo; /* used by dev_watchdog() */ | 840 | int watchdog_timeo; /* used by dev_watchdog() */ |
| @@ -867,49 +905,10 @@ struct net_device | |||
| 867 | /* max exchange id for FCoE LRO by ddp */ | 905 | /* max exchange id for FCoE LRO by ddp */ |
| 868 | unsigned int fcoe_ddp_xid; | 906 | unsigned int fcoe_ddp_xid; |
| 869 | #endif | 907 | #endif |
| 870 | |||
| 871 | #ifdef CONFIG_COMPAT_NET_DEV_OPS | ||
| 872 | struct { | ||
| 873 | int (*init)(struct net_device *dev); | ||
| 874 | void (*uninit)(struct net_device *dev); | ||
| 875 | int (*open)(struct net_device *dev); | ||
| 876 | int (*stop)(struct net_device *dev); | ||
| 877 | int (*hard_start_xmit) (struct sk_buff *skb, | ||
| 878 | struct net_device *dev); | ||
| 879 | u16 (*select_queue)(struct net_device *dev, | ||
| 880 | struct sk_buff *skb); | ||
| 881 | void (*change_rx_flags)(struct net_device *dev, | ||
| 882 | int flags); | ||
| 883 | void (*set_rx_mode)(struct net_device *dev); | ||
| 884 | void (*set_multicast_list)(struct net_device *dev); | ||
| 885 | int (*set_mac_address)(struct net_device *dev, | ||
| 886 | void *addr); | ||
| 887 | int (*validate_addr)(struct net_device *dev); | ||
| 888 | int (*do_ioctl)(struct net_device *dev, | ||
| 889 | struct ifreq *ifr, int cmd); | ||
| 890 | int (*set_config)(struct net_device *dev, | ||
| 891 | struct ifmap *map); | ||
| 892 | int (*change_mtu)(struct net_device *dev, int new_mtu); | ||
| 893 | int (*neigh_setup)(struct net_device *dev, | ||
| 894 | struct neigh_parms *); | ||
| 895 | void (*tx_timeout) (struct net_device *dev); | ||
| 896 | struct net_device_stats* (*get_stats)(struct net_device *dev); | ||
| 897 | void (*vlan_rx_register)(struct net_device *dev, | ||
| 898 | struct vlan_group *grp); | ||
| 899 | void (*vlan_rx_add_vid)(struct net_device *dev, | ||
| 900 | unsigned short vid); | ||
| 901 | void (*vlan_rx_kill_vid)(struct net_device *dev, | ||
| 902 | unsigned short vid); | ||
| 903 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 904 | void (*poll_controller)(struct net_device *dev); | ||
| 905 | #endif | ||
| 906 | }; | ||
| 907 | #endif | ||
| 908 | }; | 908 | }; |
| 909 | #define to_net_dev(d) container_of(d, struct net_device, dev) | 909 | #define to_net_dev(d) container_of(d, struct net_device, dev) |
| 910 | 910 | ||
| 911 | #define NETDEV_ALIGN 32 | 911 | #define NETDEV_ALIGN 32 |
| 912 | #define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1) | ||
| 913 | 912 | ||
| 914 | static inline | 913 | static inline |
| 915 | struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, | 914 | struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, |
| @@ -980,9 +979,7 @@ static inline bool netdev_uses_trailer_tags(struct net_device *dev) | |||
| 980 | */ | 979 | */ |
| 981 | static inline void *netdev_priv(const struct net_device *dev) | 980 | static inline void *netdev_priv(const struct net_device *dev) |
| 982 | { | 981 | { |
| 983 | return (char *)dev + ((sizeof(struct net_device) | 982 | return (char *)dev + ALIGN(sizeof(struct net_device), NETDEV_ALIGN); |
| 984 | + NETDEV_ALIGN_CONST) | ||
| 985 | & ~NETDEV_ALIGN_CONST); | ||
| 986 | } | 983 | } |
| 987 | 984 | ||
| 988 | /* Set the sysfs physical device reference for the network logical device | 985 | /* Set the sysfs physical device reference for the network logical device |
| @@ -1012,6 +1009,12 @@ void netif_napi_add(struct net_device *dev, struct napi_struct *napi, | |||
| 1012 | void netif_napi_del(struct napi_struct *napi); | 1009 | void netif_napi_del(struct napi_struct *napi); |
| 1013 | 1010 | ||
| 1014 | struct napi_gro_cb { | 1011 | struct napi_gro_cb { |
| 1012 | /* Virtual address of skb_shinfo(skb)->frags[0].page + offset. */ | ||
| 1013 | void *frag0; | ||
| 1014 | |||
| 1015 | /* Length of frag0. */ | ||
| 1016 | unsigned int frag0_len; | ||
| 1017 | |||
| 1015 | /* This indicates where we are processing relative to skb->data. */ | 1018 | /* This indicates where we are processing relative to skb->data. */ |
| 1016 | int data_offset; | 1019 | int data_offset; |
| 1017 | 1020 | ||
| @@ -1047,14 +1050,6 @@ struct packet_type { | |||
| 1047 | struct list_head list; | 1050 | struct list_head list; |
| 1048 | }; | 1051 | }; |
| 1049 | 1052 | ||
| 1050 | struct napi_gro_fraginfo { | ||
| 1051 | skb_frag_t frags[MAX_SKB_FRAGS]; | ||
| 1052 | unsigned int nr_frags; | ||
| 1053 | unsigned int ip_summed; | ||
| 1054 | unsigned int len; | ||
| 1055 | __wsum csum; | ||
| 1056 | }; | ||
| 1057 | |||
| 1058 | #include <linux/interrupt.h> | 1053 | #include <linux/interrupt.h> |
| 1059 | #include <linux/notifier.h> | 1054 | #include <linux/notifier.h> |
| 1060 | 1055 | ||
| @@ -1119,9 +1114,9 @@ extern int dev_restart(struct net_device *dev); | |||
| 1119 | #ifdef CONFIG_NETPOLL_TRAP | 1114 | #ifdef CONFIG_NETPOLL_TRAP |
| 1120 | extern int netpoll_trap(void); | 1115 | extern int netpoll_trap(void); |
| 1121 | #endif | 1116 | #endif |
| 1122 | extern void *skb_gro_header(struct sk_buff *skb, unsigned int hlen); | ||
| 1123 | extern int skb_gro_receive(struct sk_buff **head, | 1117 | extern int skb_gro_receive(struct sk_buff **head, |
| 1124 | struct sk_buff *skb); | 1118 | struct sk_buff *skb); |
| 1119 | extern void skb_gro_reset_offset(struct sk_buff *skb); | ||
| 1125 | 1120 | ||
| 1126 | static inline unsigned int skb_gro_offset(const struct sk_buff *skb) | 1121 | static inline unsigned int skb_gro_offset(const struct sk_buff *skb) |
| 1127 | { | 1122 | { |
| @@ -1138,16 +1133,34 @@ static inline void skb_gro_pull(struct sk_buff *skb, unsigned int len) | |||
| 1138 | NAPI_GRO_CB(skb)->data_offset += len; | 1133 | NAPI_GRO_CB(skb)->data_offset += len; |
| 1139 | } | 1134 | } |
| 1140 | 1135 | ||
| 1141 | static inline void skb_gro_reset_offset(struct sk_buff *skb) | 1136 | static inline void *skb_gro_header_fast(struct sk_buff *skb, |
| 1137 | unsigned int offset) | ||
| 1142 | { | 1138 | { |
| 1143 | NAPI_GRO_CB(skb)->data_offset = 0; | 1139 | return NAPI_GRO_CB(skb)->frag0 + offset; |
| 1140 | } | ||
| 1141 | |||
| 1142 | static inline int skb_gro_header_hard(struct sk_buff *skb, unsigned int hlen) | ||
| 1143 | { | ||
| 1144 | return NAPI_GRO_CB(skb)->frag0_len < hlen; | ||
| 1145 | } | ||
| 1146 | |||
| 1147 | static inline void *skb_gro_header_slow(struct sk_buff *skb, unsigned int hlen, | ||
| 1148 | unsigned int offset) | ||
| 1149 | { | ||
| 1150 | NAPI_GRO_CB(skb)->frag0 = NULL; | ||
| 1151 | NAPI_GRO_CB(skb)->frag0_len = 0; | ||
| 1152 | return pskb_may_pull(skb, hlen) ? skb->data + offset : NULL; | ||
| 1144 | } | 1153 | } |
| 1145 | 1154 | ||
| 1146 | static inline void *skb_gro_mac_header(struct sk_buff *skb) | 1155 | static inline void *skb_gro_mac_header(struct sk_buff *skb) |
| 1147 | { | 1156 | { |
| 1148 | return skb_mac_header(skb) < skb->data ? skb_mac_header(skb) : | 1157 | return NAPI_GRO_CB(skb)->frag0 ?: skb_mac_header(skb); |
| 1149 | page_address(skb_shinfo(skb)->frags[0].page) + | 1158 | } |
| 1150 | skb_shinfo(skb)->frags[0].page_offset; | 1159 | |
| 1160 | static inline void *skb_gro_network_header(struct sk_buff *skb) | ||
| 1161 | { | ||
| 1162 | return (NAPI_GRO_CB(skb)->frag0 ?: skb->data) + | ||
| 1163 | skb_network_offset(skb); | ||
| 1151 | } | 1164 | } |
| 1152 | 1165 | ||
| 1153 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, | 1166 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, |
| @@ -1442,12 +1455,18 @@ extern int napi_gro_receive(struct napi_struct *napi, | |||
| 1442 | struct sk_buff *skb); | 1455 | struct sk_buff *skb); |
| 1443 | extern void napi_reuse_skb(struct napi_struct *napi, | 1456 | extern void napi_reuse_skb(struct napi_struct *napi, |
| 1444 | struct sk_buff *skb); | 1457 | struct sk_buff *skb); |
| 1445 | extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi, | 1458 | extern struct sk_buff * napi_get_frags(struct napi_struct *napi); |
| 1446 | struct napi_gro_fraginfo *info); | ||
| 1447 | extern int napi_frags_finish(struct napi_struct *napi, | 1459 | extern int napi_frags_finish(struct napi_struct *napi, |
| 1448 | struct sk_buff *skb, int ret); | 1460 | struct sk_buff *skb, int ret); |
| 1449 | extern int napi_gro_frags(struct napi_struct *napi, | 1461 | extern struct sk_buff * napi_frags_skb(struct napi_struct *napi); |
| 1450 | struct napi_gro_fraginfo *info); | 1462 | extern int napi_gro_frags(struct napi_struct *napi); |
| 1463 | |||
| 1464 | static inline void napi_free_frags(struct napi_struct *napi) | ||
| 1465 | { | ||
| 1466 | kfree_skb(napi->skb); | ||
| 1467 | napi->skb = NULL; | ||
| 1468 | } | ||
| 1469 | |||
| 1451 | extern void netif_nit_deliver(struct sk_buff *skb); | 1470 | extern void netif_nit_deliver(struct sk_buff *skb); |
| 1452 | extern int dev_valid_name(const char *name); | 1471 | extern int dev_valid_name(const char *name); |
| 1453 | extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *); | 1472 | extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *); |
| @@ -1514,6 +1533,8 @@ static inline int netif_carrier_ok(const struct net_device *dev) | |||
| 1514 | return !test_bit(__LINK_STATE_NOCARRIER, &dev->state); | 1533 | return !test_bit(__LINK_STATE_NOCARRIER, &dev->state); |
| 1515 | } | 1534 | } |
| 1516 | 1535 | ||
| 1536 | extern unsigned long dev_trans_start(struct net_device *dev); | ||
| 1537 | |||
| 1517 | extern void __netdev_watchdog_up(struct net_device *dev); | 1538 | extern void __netdev_watchdog_up(struct net_device *dev); |
| 1518 | 1539 | ||
| 1519 | extern void netif_carrier_on(struct net_device *dev); | 1540 | extern void netif_carrier_on(struct net_device *dev); |
| @@ -1671,6 +1692,12 @@ static inline void __netif_tx_unlock_bh(struct netdev_queue *txq) | |||
| 1671 | spin_unlock_bh(&txq->_xmit_lock); | 1692 | spin_unlock_bh(&txq->_xmit_lock); |
| 1672 | } | 1693 | } |
| 1673 | 1694 | ||
| 1695 | static inline void txq_trans_update(struct netdev_queue *txq) | ||
| 1696 | { | ||
| 1697 | if (txq->xmit_lock_owner != -1) | ||
| 1698 | txq->trans_start = jiffies; | ||
| 1699 | } | ||
| 1700 | |||
| 1674 | /** | 1701 | /** |
| 1675 | * netif_tx_lock - grab network device transmit lock | 1702 | * netif_tx_lock - grab network device transmit lock |
| 1676 | * @dev: network device | 1703 | * @dev: network device |
| @@ -1778,6 +1805,13 @@ static inline void netif_addr_unlock_bh(struct net_device *dev) | |||
| 1778 | spin_unlock_bh(&dev->addr_list_lock); | 1805 | spin_unlock_bh(&dev->addr_list_lock); |
| 1779 | } | 1806 | } |
| 1780 | 1807 | ||
| 1808 | /* | ||
| 1809 | * dev_addr_list walker. Should be used only for read access. Call with | ||
| 1810 | * rcu_read_lock held. | ||
| 1811 | */ | ||
| 1812 | #define for_each_dev_addr(dev, ha) \ | ||
| 1813 | list_for_each_entry_rcu(ha, &dev->dev_addr_list, list) | ||
| 1814 | |||
| 1781 | /* These functions live elsewhere (drivers/net/net_init.c, but related) */ | 1815 | /* These functions live elsewhere (drivers/net/net_init.c, but related) */ |
| 1782 | 1816 | ||
| 1783 | extern void ether_setup(struct net_device *dev); | 1817 | extern void ether_setup(struct net_device *dev); |
| @@ -1790,11 +1824,24 @@ extern struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name, | |||
| 1790 | alloc_netdev_mq(sizeof_priv, name, setup, 1) | 1824 | alloc_netdev_mq(sizeof_priv, name, setup, 1) |
| 1791 | extern int register_netdev(struct net_device *dev); | 1825 | extern int register_netdev(struct net_device *dev); |
| 1792 | extern void unregister_netdev(struct net_device *dev); | 1826 | extern void unregister_netdev(struct net_device *dev); |
| 1827 | |||
| 1828 | /* Functions used for device addresses handling */ | ||
| 1829 | extern int dev_addr_add(struct net_device *dev, unsigned char *addr, | ||
| 1830 | unsigned char addr_type); | ||
| 1831 | extern int dev_addr_del(struct net_device *dev, unsigned char *addr, | ||
| 1832 | unsigned char addr_type); | ||
| 1833 | extern int dev_addr_add_multiple(struct net_device *to_dev, | ||
| 1834 | struct net_device *from_dev, | ||
| 1835 | unsigned char addr_type); | ||
| 1836 | extern int dev_addr_del_multiple(struct net_device *to_dev, | ||
| 1837 | struct net_device *from_dev, | ||
| 1838 | unsigned char addr_type); | ||
| 1839 | |||
| 1793 | /* Functions used for secondary unicast and multicast support */ | 1840 | /* Functions used for secondary unicast and multicast support */ |
| 1794 | extern void dev_set_rx_mode(struct net_device *dev); | 1841 | extern void dev_set_rx_mode(struct net_device *dev); |
| 1795 | extern void __dev_set_rx_mode(struct net_device *dev); | 1842 | extern void __dev_set_rx_mode(struct net_device *dev); |
| 1796 | extern int dev_unicast_delete(struct net_device *dev, void *addr, int alen); | 1843 | extern int dev_unicast_delete(struct net_device *dev, void *addr); |
| 1797 | extern int dev_unicast_add(struct net_device *dev, void *addr, int alen); | 1844 | extern int dev_unicast_add(struct net_device *dev, void *addr); |
| 1798 | extern int dev_unicast_sync(struct net_device *to, struct net_device *from); | 1845 | extern int dev_unicast_sync(struct net_device *to, struct net_device *from); |
| 1799 | extern void dev_unicast_unsync(struct net_device *to, struct net_device *from); | 1846 | extern void dev_unicast_unsync(struct net_device *to, struct net_device *from); |
| 1800 | extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); | 1847 | extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); |
| @@ -1856,15 +1903,14 @@ static inline int net_gso_ok(int features, int gso_type) | |||
| 1856 | 1903 | ||
| 1857 | static inline int skb_gso_ok(struct sk_buff *skb, int features) | 1904 | static inline int skb_gso_ok(struct sk_buff *skb, int features) |
| 1858 | { | 1905 | { |
| 1859 | return net_gso_ok(features, skb_shinfo(skb)->gso_type); | 1906 | return net_gso_ok(features, skb_shinfo(skb)->gso_type) && |
| 1907 | (!skb_has_frags(skb) || (features & NETIF_F_FRAGLIST)); | ||
| 1860 | } | 1908 | } |
| 1861 | 1909 | ||
| 1862 | static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) | 1910 | static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) |
| 1863 | { | 1911 | { |
| 1864 | return skb_is_gso(skb) && | 1912 | return skb_is_gso(skb) && |
| 1865 | (!skb_gso_ok(skb, dev->features) || | 1913 | (!skb_gso_ok(skb, dev->features) || |
| 1866 | (skb_shinfo(skb)->frag_list && | ||
| 1867 | !(dev->features & NETIF_F_FRAGLIST)) || | ||
| 1868 | unlikely(skb->ip_summed != CHECKSUM_PARTIAL)); | 1914 | unlikely(skb->ip_summed != CHECKSUM_PARTIAL)); |
| 1869 | } | 1915 | } |
| 1870 | 1916 | ||
| @@ -1874,6 +1920,16 @@ static inline void netif_set_gso_max_size(struct net_device *dev, | |||
| 1874 | dev->gso_max_size = size; | 1920 | dev->gso_max_size = size; |
| 1875 | } | 1921 | } |
| 1876 | 1922 | ||
| 1923 | static inline void skb_bond_set_mac_by_master(struct sk_buff *skb, | ||
| 1924 | struct net_device *master) | ||
| 1925 | { | ||
| 1926 | if (skb->pkt_type == PACKET_HOST) { | ||
| 1927 | u16 *dest = (u16 *) eth_hdr(skb)->h_dest; | ||
| 1928 | |||
| 1929 | memcpy(dest, master->dev_addr, ETH_ALEN); | ||
| 1930 | } | ||
| 1931 | } | ||
| 1932 | |||
| 1877 | /* On bonding slaves other than the currently active slave, suppress | 1933 | /* On bonding slaves other than the currently active slave, suppress |
| 1878 | * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and | 1934 | * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and |
| 1879 | * ARP on active-backup slaves with arp_validate enabled. | 1935 | * ARP on active-backup slaves with arp_validate enabled. |
| @@ -1887,6 +1943,14 @@ static inline int skb_bond_should_drop(struct sk_buff *skb) | |||
| 1887 | if (master->priv_flags & IFF_MASTER_ARPMON) | 1943 | if (master->priv_flags & IFF_MASTER_ARPMON) |
| 1888 | dev->last_rx = jiffies; | 1944 | dev->last_rx = jiffies; |
| 1889 | 1945 | ||
| 1946 | if ((master->priv_flags & IFF_MASTER_ALB) && master->br_port) { | ||
| 1947 | /* Do address unmangle. The local destination address | ||
| 1948 | * will be always the one master has. Provides the right | ||
| 1949 | * functionality in a bridge. | ||
| 1950 | */ | ||
| 1951 | skb_bond_set_mac_by_master(skb, master); | ||
| 1952 | } | ||
| 1953 | |||
| 1890 | if (dev->priv_flags & IFF_SLAVE_INACTIVE) { | 1954 | if (dev->priv_flags & IFF_SLAVE_INACTIVE) { |
| 1891 | if ((dev->priv_flags & IFF_SLAVE_NEEDARP) && | 1955 | if ((dev->priv_flags & IFF_SLAVE_NEEDARP) && |
| 1892 | skb->protocol == __cpu_to_be16(ETH_P_ARP)) | 1956 | skb->protocol == __cpu_to_be16(ETH_P_ARP)) |
| @@ -1908,6 +1972,28 @@ static inline int skb_bond_should_drop(struct sk_buff *skb) | |||
| 1908 | } | 1972 | } |
| 1909 | 1973 | ||
| 1910 | extern struct pernet_operations __net_initdata loopback_net_ops; | 1974 | extern struct pernet_operations __net_initdata loopback_net_ops; |
| 1975 | |||
| 1976 | static inline int dev_ethtool_get_settings(struct net_device *dev, | ||
| 1977 | struct ethtool_cmd *cmd) | ||
| 1978 | { | ||
| 1979 | if (!dev->ethtool_ops || !dev->ethtool_ops->get_settings) | ||
| 1980 | return -EOPNOTSUPP; | ||
| 1981 | return dev->ethtool_ops->get_settings(dev, cmd); | ||
| 1982 | } | ||
| 1983 | |||
| 1984 | static inline u32 dev_ethtool_get_rx_csum(struct net_device *dev) | ||
| 1985 | { | ||
| 1986 | if (!dev->ethtool_ops || !dev->ethtool_ops->get_rx_csum) | ||
| 1987 | return 0; | ||
| 1988 | return dev->ethtool_ops->get_rx_csum(dev); | ||
| 1989 | } | ||
| 1990 | |||
| 1991 | static inline u32 dev_ethtool_get_flags(struct net_device *dev) | ||
| 1992 | { | ||
| 1993 | if (!dev->ethtool_ops || !dev->ethtool_ops->get_flags) | ||
| 1994 | return 0; | ||
| 1995 | return dev->ethtool_ops->get_flags(dev); | ||
| 1996 | } | ||
| 1911 | #endif /* __KERNEL__ */ | 1997 | #endif /* __KERNEL__ */ |
| 1912 | 1998 | ||
| 1913 | #endif /* _LINUX_DEV_H */ | 1999 | #endif /* _LINUX_NETDEVICE_H */ |
diff --git a/include/linux/netfilter/Kbuild b/include/linux/netfilter/Kbuild index af9d2fb97212..2aea50399c0b 100644 --- a/include/linux/netfilter/Kbuild +++ b/include/linux/netfilter/Kbuild | |||
| @@ -33,6 +33,7 @@ header-y += xt_limit.h | |||
| 33 | header-y += xt_mac.h | 33 | header-y += xt_mac.h |
| 34 | header-y += xt_mark.h | 34 | header-y += xt_mark.h |
| 35 | header-y += xt_multiport.h | 35 | header-y += xt_multiport.h |
| 36 | header-y += xt_osf.h | ||
| 36 | header-y += xt_owner.h | 37 | header-y += xt_owner.h |
| 37 | header-y += xt_pkttype.h | 38 | header-y += xt_pkttype.h |
| 38 | header-y += xt_quota.h | 39 | header-y += xt_quota.h |
diff --git a/include/linux/netfilter/nf_conntrack_common.h b/include/linux/netfilter/nf_conntrack_common.h index 885cbe282260..a8248ee422b7 100644 --- a/include/linux/netfilter/nf_conntrack_common.h +++ b/include/linux/netfilter/nf_conntrack_common.h | |||
| @@ -75,75 +75,6 @@ enum ip_conntrack_status { | |||
| 75 | IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT), | 75 | IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT), |
| 76 | }; | 76 | }; |
| 77 | 77 | ||
| 78 | /* Connection tracking event bits */ | ||
| 79 | enum ip_conntrack_events | ||
| 80 | { | ||
| 81 | /* New conntrack */ | ||
| 82 | IPCT_NEW_BIT = 0, | ||
| 83 | IPCT_NEW = (1 << IPCT_NEW_BIT), | ||
| 84 | |||
| 85 | /* Expected connection */ | ||
| 86 | IPCT_RELATED_BIT = 1, | ||
| 87 | IPCT_RELATED = (1 << IPCT_RELATED_BIT), | ||
| 88 | |||
| 89 | /* Destroyed conntrack */ | ||
| 90 | IPCT_DESTROY_BIT = 2, | ||
| 91 | IPCT_DESTROY = (1 << IPCT_DESTROY_BIT), | ||
| 92 | |||
| 93 | /* Timer has been refreshed */ | ||
| 94 | IPCT_REFRESH_BIT = 3, | ||
| 95 | IPCT_REFRESH = (1 << IPCT_REFRESH_BIT), | ||
| 96 | |||
| 97 | /* Status has changed */ | ||
| 98 | IPCT_STATUS_BIT = 4, | ||
| 99 | IPCT_STATUS = (1 << IPCT_STATUS_BIT), | ||
| 100 | |||
| 101 | /* Update of protocol info */ | ||
| 102 | IPCT_PROTOINFO_BIT = 5, | ||
| 103 | IPCT_PROTOINFO = (1 << IPCT_PROTOINFO_BIT), | ||
| 104 | |||
| 105 | /* Volatile protocol info */ | ||
| 106 | IPCT_PROTOINFO_VOLATILE_BIT = 6, | ||
| 107 | IPCT_PROTOINFO_VOLATILE = (1 << IPCT_PROTOINFO_VOLATILE_BIT), | ||
| 108 | |||
| 109 | /* New helper for conntrack */ | ||
| 110 | IPCT_HELPER_BIT = 7, | ||
| 111 | IPCT_HELPER = (1 << IPCT_HELPER_BIT), | ||
| 112 | |||
| 113 | /* Update of helper info */ | ||
| 114 | IPCT_HELPINFO_BIT = 8, | ||
| 115 | IPCT_HELPINFO = (1 << IPCT_HELPINFO_BIT), | ||
| 116 | |||
| 117 | /* Volatile helper info */ | ||
| 118 | IPCT_HELPINFO_VOLATILE_BIT = 9, | ||
| 119 | IPCT_HELPINFO_VOLATILE = (1 << IPCT_HELPINFO_VOLATILE_BIT), | ||
| 120 | |||
| 121 | /* NAT info */ | ||
| 122 | IPCT_NATINFO_BIT = 10, | ||
| 123 | IPCT_NATINFO = (1 << IPCT_NATINFO_BIT), | ||
| 124 | |||
| 125 | /* Counter highest bit has been set, unused */ | ||
| 126 | IPCT_COUNTER_FILLING_BIT = 11, | ||
| 127 | IPCT_COUNTER_FILLING = (1 << IPCT_COUNTER_FILLING_BIT), | ||
| 128 | |||
| 129 | /* Mark is set */ | ||
| 130 | IPCT_MARK_BIT = 12, | ||
| 131 | IPCT_MARK = (1 << IPCT_MARK_BIT), | ||
| 132 | |||
| 133 | /* NAT sequence adjustment */ | ||
| 134 | IPCT_NATSEQADJ_BIT = 13, | ||
| 135 | IPCT_NATSEQADJ = (1 << IPCT_NATSEQADJ_BIT), | ||
| 136 | |||
| 137 | /* Secmark is set */ | ||
| 138 | IPCT_SECMARK_BIT = 14, | ||
| 139 | IPCT_SECMARK = (1 << IPCT_SECMARK_BIT), | ||
| 140 | }; | ||
| 141 | |||
| 142 | enum ip_conntrack_expect_events { | ||
| 143 | IPEXP_NEW_BIT = 0, | ||
| 144 | IPEXP_NEW = (1 << IPEXP_NEW_BIT), | ||
| 145 | }; | ||
| 146 | |||
| 147 | #ifdef __KERNEL__ | 78 | #ifdef __KERNEL__ |
| 148 | struct ip_conntrack_stat | 79 | struct ip_conntrack_stat |
| 149 | { | 80 | { |
diff --git a/include/linux/netfilter/nf_conntrack_tcp.h b/include/linux/netfilter/nf_conntrack_tcp.h index b2f384d42611..4352feed2377 100644 --- a/include/linux/netfilter/nf_conntrack_tcp.h +++ b/include/linux/netfilter/nf_conntrack_tcp.h | |||
| @@ -15,7 +15,8 @@ enum tcp_conntrack { | |||
| 15 | TCP_CONNTRACK_LAST_ACK, | 15 | TCP_CONNTRACK_LAST_ACK, |
| 16 | TCP_CONNTRACK_TIME_WAIT, | 16 | TCP_CONNTRACK_TIME_WAIT, |
| 17 | TCP_CONNTRACK_CLOSE, | 17 | TCP_CONNTRACK_CLOSE, |
| 18 | TCP_CONNTRACK_LISTEN, | 18 | TCP_CONNTRACK_LISTEN, /* obsolete */ |
| 19 | #define TCP_CONNTRACK_SYN_SENT2 TCP_CONNTRACK_LISTEN | ||
| 19 | TCP_CONNTRACK_MAX, | 20 | TCP_CONNTRACK_MAX, |
| 20 | TCP_CONNTRACK_IGNORE | 21 | TCP_CONNTRACK_IGNORE |
| 21 | }; | 22 | }; |
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h index c600083cbdf5..bff4d5741d98 100644 --- a/include/linux/netfilter/nfnetlink.h +++ b/include/linux/netfilter/nfnetlink.h | |||
| @@ -46,7 +46,8 @@ struct nfgenmsg { | |||
| 46 | #define NFNL_SUBSYS_CTNETLINK_EXP 2 | 46 | #define NFNL_SUBSYS_CTNETLINK_EXP 2 |
| 47 | #define NFNL_SUBSYS_QUEUE 3 | 47 | #define NFNL_SUBSYS_QUEUE 3 |
| 48 | #define NFNL_SUBSYS_ULOG 4 | 48 | #define NFNL_SUBSYS_ULOG 4 |
| 49 | #define NFNL_SUBSYS_COUNT 5 | 49 | #define NFNL_SUBSYS_OSF 5 |
| 50 | #define NFNL_SUBSYS_COUNT 6 | ||
| 50 | 51 | ||
| 51 | #ifdef __KERNEL__ | 52 | #ifdef __KERNEL__ |
| 52 | 53 | ||
| @@ -75,7 +76,7 @@ extern int nfnetlink_subsys_unregister(const struct nfnetlink_subsystem *n); | |||
| 75 | 76 | ||
| 76 | extern int nfnetlink_has_listeners(unsigned int group); | 77 | extern int nfnetlink_has_listeners(unsigned int group); |
| 77 | extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, | 78 | extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, |
| 78 | int echo); | 79 | int echo, gfp_t flags); |
| 79 | extern void nfnetlink_set_err(u32 pid, u32 group, int error); | 80 | extern void nfnetlink_set_err(u32 pid, u32 group, int error); |
| 80 | extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags); | 81 | extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags); |
| 81 | 82 | ||
diff --git a/include/linux/netfilter/nfnetlink_conntrack.h b/include/linux/netfilter/nfnetlink_conntrack.h index 1a865e48b8eb..ed4ef8d0b11b 100644 --- a/include/linux/netfilter/nfnetlink_conntrack.h +++ b/include/linux/netfilter/nfnetlink_conntrack.h | |||
| @@ -101,6 +101,7 @@ enum ctattr_protoinfo_dccp { | |||
| 101 | CTA_PROTOINFO_DCCP_UNSPEC, | 101 | CTA_PROTOINFO_DCCP_UNSPEC, |
| 102 | CTA_PROTOINFO_DCCP_STATE, | 102 | CTA_PROTOINFO_DCCP_STATE, |
| 103 | CTA_PROTOINFO_DCCP_ROLE, | 103 | CTA_PROTOINFO_DCCP_ROLE, |
| 104 | CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ, | ||
| 104 | __CTA_PROTOINFO_DCCP_MAX, | 105 | __CTA_PROTOINFO_DCCP_MAX, |
| 105 | }; | 106 | }; |
| 106 | #define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1) | 107 | #define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1) |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index c9efe039dc57..1030b7593898 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
| @@ -184,9 +184,10 @@ struct xt_counters_info | |||
| 184 | * @matchinfo: per-match data | 184 | * @matchinfo: per-match data |
| 185 | * @fragoff: packet is a fragment, this is the data offset | 185 | * @fragoff: packet is a fragment, this is the data offset |
| 186 | * @thoff: position of transport header relative to skb->data | 186 | * @thoff: position of transport header relative to skb->data |
| 187 | * @hotdrop: drop packet if we had inspection problems | 187 | * @hook: hook number given packet came from |
| 188 | * @family: Actual NFPROTO_* through which the function is invoked | 188 | * @family: Actual NFPROTO_* through which the function is invoked |
| 189 | * (helpful when match->family == NFPROTO_UNSPEC) | 189 | * (helpful when match->family == NFPROTO_UNSPEC) |
| 190 | * @hotdrop: drop packet if we had inspection problems | ||
| 190 | */ | 191 | */ |
| 191 | struct xt_match_param { | 192 | struct xt_match_param { |
| 192 | const struct net_device *in, *out; | 193 | const struct net_device *in, *out; |
| @@ -194,8 +195,9 @@ struct xt_match_param { | |||
| 194 | const void *matchinfo; | 195 | const void *matchinfo; |
| 195 | int fragoff; | 196 | int fragoff; |
| 196 | unsigned int thoff; | 197 | unsigned int thoff; |
| 197 | bool *hotdrop; | 198 | unsigned int hooknum; |
| 198 | u_int8_t family; | 199 | u_int8_t family; |
| 200 | bool *hotdrop; | ||
| 199 | }; | 201 | }; |
| 200 | 202 | ||
| 201 | /** | 203 | /** |
diff --git a/include/linux/netfilter/xt_NFQUEUE.h b/include/linux/netfilter/xt_NFQUEUE.h index 982a89f78272..2584f4a777de 100644 --- a/include/linux/netfilter/xt_NFQUEUE.h +++ b/include/linux/netfilter/xt_NFQUEUE.h | |||
| @@ -15,4 +15,9 @@ struct xt_NFQ_info { | |||
| 15 | __u16 queuenum; | 15 | __u16 queuenum; |
| 16 | }; | 16 | }; |
| 17 | 17 | ||
| 18 | struct xt_NFQ_info_v1 { | ||
| 19 | __u16 queuenum; | ||
| 20 | __u16 queues_total; | ||
| 21 | }; | ||
| 22 | |||
| 18 | #endif /* _XT_NFQ_TARGET_H */ | 23 | #endif /* _XT_NFQ_TARGET_H */ |
diff --git a/include/linux/netfilter/xt_osf.h b/include/linux/netfilter/xt_osf.h new file mode 100644 index 000000000000..fd2272e0959a --- /dev/null +++ b/include/linux/netfilter/xt_osf.h | |||
| @@ -0,0 +1,133 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2003+ Evgeniy Polyakov <johnpol@2ka.mxt.ru> | ||
| 3 | * | ||
| 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 of the License, or | ||
| 8 | * (at your option) any later version. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License | ||
| 16 | * along with this program; if not, write to the Free Software | ||
| 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef _XT_OSF_H | ||
| 21 | #define _XT_OSF_H | ||
| 22 | |||
| 23 | #define MAXGENRELEN 32 | ||
| 24 | |||
| 25 | #define XT_OSF_GENRE (1<<0) | ||
| 26 | #define XT_OSF_TTL (1<<1) | ||
| 27 | #define XT_OSF_LOG (1<<2) | ||
| 28 | #define XT_OSF_INVERT (1<<3) | ||
| 29 | |||
| 30 | #define XT_OSF_LOGLEVEL_ALL 0 /* log all matched fingerprints */ | ||
| 31 | #define XT_OSF_LOGLEVEL_FIRST 1 /* log only the first matced fingerprint */ | ||
| 32 | #define XT_OSF_LOGLEVEL_ALL_KNOWN 2 /* do not log unknown packets */ | ||
| 33 | |||
| 34 | #define XT_OSF_TTL_TRUE 0 /* True ip and fingerprint TTL comparison */ | ||
| 35 | #define XT_OSF_TTL_LESS 1 /* Check if ip TTL is less than fingerprint one */ | ||
| 36 | #define XT_OSF_TTL_NOCHECK 2 /* Do not compare ip and fingerprint TTL at all */ | ||
| 37 | |||
| 38 | struct xt_osf_info { | ||
| 39 | char genre[MAXGENRELEN]; | ||
| 40 | __u32 len; | ||
| 41 | __u32 flags; | ||
| 42 | __u32 loglevel; | ||
| 43 | __u32 ttl; | ||
| 44 | }; | ||
| 45 | |||
| 46 | /* | ||
| 47 | * Wildcard MSS (kind of). | ||
| 48 | * It is used to implement a state machine for the different wildcard values | ||
| 49 | * of the MSS and window sizes. | ||
| 50 | */ | ||
| 51 | struct xt_osf_wc { | ||
| 52 | __u32 wc; | ||
| 53 | __u32 val; | ||
| 54 | }; | ||
| 55 | |||
| 56 | /* | ||
| 57 | * This struct represents IANA options | ||
| 58 | * http://www.iana.org/assignments/tcp-parameters | ||
| 59 | */ | ||
| 60 | struct xt_osf_opt { | ||
| 61 | __u16 kind, length; | ||
| 62 | struct xt_osf_wc wc; | ||
| 63 | }; | ||
| 64 | |||
| 65 | struct xt_osf_user_finger { | ||
| 66 | struct xt_osf_wc wss; | ||
| 67 | |||
| 68 | __u8 ttl, df; | ||
| 69 | __u16 ss, mss; | ||
| 70 | __u16 opt_num; | ||
| 71 | |||
| 72 | char genre[MAXGENRELEN]; | ||
| 73 | char version[MAXGENRELEN]; | ||
| 74 | char subtype[MAXGENRELEN]; | ||
| 75 | |||
| 76 | /* MAX_IPOPTLEN is maximum if all options are NOPs or EOLs */ | ||
| 77 | struct xt_osf_opt opt[MAX_IPOPTLEN]; | ||
| 78 | }; | ||
| 79 | |||
| 80 | struct xt_osf_nlmsg { | ||
| 81 | struct xt_osf_user_finger f; | ||
| 82 | struct iphdr ip; | ||
| 83 | struct tcphdr tcp; | ||
| 84 | }; | ||
| 85 | |||
| 86 | /* Defines for IANA option kinds */ | ||
| 87 | |||
| 88 | enum iana_options { | ||
| 89 | OSFOPT_EOL = 0, /* End of options */ | ||
| 90 | OSFOPT_NOP, /* NOP */ | ||
| 91 | OSFOPT_MSS, /* Maximum segment size */ | ||
| 92 | OSFOPT_WSO, /* Window scale option */ | ||
| 93 | OSFOPT_SACKP, /* SACK permitted */ | ||
| 94 | OSFOPT_SACK, /* SACK */ | ||
| 95 | OSFOPT_ECHO, | ||
| 96 | OSFOPT_ECHOREPLY, | ||
| 97 | OSFOPT_TS, /* Timestamp option */ | ||
| 98 | OSFOPT_POCP, /* Partial Order Connection Permitted */ | ||
| 99 | OSFOPT_POSP, /* Partial Order Service Profile */ | ||
| 100 | |||
| 101 | /* Others are not used in the current OSF */ | ||
| 102 | OSFOPT_EMPTY = 255, | ||
| 103 | }; | ||
| 104 | |||
| 105 | /* | ||
| 106 | * Initial window size option state machine: multiple of mss, mtu or | ||
| 107 | * plain numeric value. Can also be made as plain numeric value which | ||
| 108 | * is not a multiple of specified value. | ||
| 109 | */ | ||
| 110 | enum xt_osf_window_size_options { | ||
| 111 | OSF_WSS_PLAIN = 0, | ||
| 112 | OSF_WSS_MSS, | ||
| 113 | OSF_WSS_MTU, | ||
| 114 | OSF_WSS_MODULO, | ||
| 115 | OSF_WSS_MAX, | ||
| 116 | }; | ||
| 117 | |||
| 118 | /* | ||
| 119 | * Add/remove fingerprint from the kernel. | ||
| 120 | */ | ||
| 121 | enum xt_osf_msg_types { | ||
| 122 | OSF_MSG_ADD, | ||
| 123 | OSF_MSG_REMOVE, | ||
| 124 | OSF_MSG_MAX, | ||
| 125 | }; | ||
| 126 | |||
| 127 | enum xt_osf_attr_type { | ||
| 128 | OSF_ATTR_UNSPEC, | ||
| 129 | OSF_ATTR_FINGER, | ||
| 130 | OSF_ATTR_MAX, | ||
| 131 | }; | ||
| 132 | |||
| 133 | #endif /* _XT_OSF_H */ | ||
diff --git a/include/linux/netfilter/xt_socket.h b/include/linux/netfilter/xt_socket.h new file mode 100644 index 000000000000..6f475b8ff34b --- /dev/null +++ b/include/linux/netfilter/xt_socket.h | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | #ifndef _XT_SOCKET_H | ||
| 2 | #define _XT_SOCKET_H | ||
| 3 | |||
| 4 | enum { | ||
| 5 | XT_SOCKET_TRANSPARENT = 1 << 0, | ||
| 6 | }; | ||
| 7 | |||
| 8 | struct xt_socket_mtinfo1 { | ||
| 9 | __u8 flags; | ||
| 10 | }; | ||
| 11 | |||
| 12 | #endif /* _XT_SOCKET_H */ | ||
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h index bcd0201589f8..a6d9ef2bb34a 100644 --- a/include/linux/nfsd/export.h +++ b/include/linux/nfsd/export.h | |||
| @@ -125,11 +125,9 @@ void nfsd_export_flush(void); | |||
| 125 | void exp_readlock(void); | 125 | void exp_readlock(void); |
| 126 | void exp_readunlock(void); | 126 | void exp_readunlock(void); |
| 127 | struct svc_export * rqst_exp_get_by_name(struct svc_rqst *, | 127 | struct svc_export * rqst_exp_get_by_name(struct svc_rqst *, |
| 128 | struct vfsmount *, | 128 | struct path *); |
| 129 | struct dentry *); | ||
| 130 | struct svc_export * rqst_exp_parent(struct svc_rqst *, | 129 | struct svc_export * rqst_exp_parent(struct svc_rqst *, |
| 131 | struct vfsmount *mnt, | 130 | struct path *); |
| 132 | struct dentry *dentry); | ||
| 133 | int exp_rootfh(struct auth_domain *, | 131 | int exp_rootfh(struct auth_domain *, |
| 134 | char *path, struct knfsd_fh *, int maxsize); | 132 | char *path, struct knfsd_fh *, int maxsize); |
| 135 | __be32 exp_pseudoroot(struct svc_rqst *, struct svc_fh *); | 133 | __be32 exp_pseudoroot(struct svc_rqst *, struct svc_fh *); |
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index cbe8ce3bf486..dbea93b694e5 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * Copyright 2008 Michael Wu <flamingice@sourmilk.net> | 7 | * Copyright 2008 Michael Wu <flamingice@sourmilk.net> |
| 8 | * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com> | 8 | * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com> |
| 9 | * Copyright 2008 Michael Buesch <mb@bu3sch.de> | 9 | * Copyright 2008 Michael Buesch <mb@bu3sch.de> |
| 10 | * Copyright 2008 Luis R. Rodriguez <lrodriguez@atheros.com> | 10 | * Copyright 2008, 2009 Luis R. Rodriguez <lrodriguez@atheros.com> |
| 11 | * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com> | 11 | * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com> |
| 12 | * Copyright 2008 Colin McCabe <colin@cozybit.com> | 12 | * Copyright 2008 Colin McCabe <colin@cozybit.com> |
| 13 | * | 13 | * |
| @@ -25,6 +25,8 @@ | |||
| 25 | * | 25 | * |
| 26 | */ | 26 | */ |
| 27 | 27 | ||
| 28 | #include <linux/types.h> | ||
| 29 | |||
| 28 | /** | 30 | /** |
| 29 | * DOC: Station handling | 31 | * DOC: Station handling |
| 30 | * | 32 | * |
| @@ -46,8 +48,10 @@ | |||
| 46 | * to get a list of all present wiphys. | 48 | * to get a list of all present wiphys. |
| 47 | * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or | 49 | * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or |
| 48 | * %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME, | 50 | * %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME, |
| 49 | * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, and/or | 51 | * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, |
| 50 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE. | 52 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE, %NL80211_ATTR_WIPHY_RETRY_SHORT, |
| 53 | * %NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD, | ||
| 54 | * and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD. | ||
| 51 | * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request | 55 | * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request |
| 52 | * or rename notification. Has attributes %NL80211_ATTR_WIPHY and | 56 | * or rename notification. Has attributes %NL80211_ATTR_WIPHY and |
| 53 | * %NL80211_ATTR_WIPHY_NAME. | 57 | * %NL80211_ATTR_WIPHY_NAME. |
| @@ -75,8 +79,8 @@ | |||
| 75 | * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT, | 79 | * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT, |
| 76 | * %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD. | 80 | * %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD. |
| 77 | * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA, | 81 | * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA, |
| 78 | * %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC and %NL80211_ATTR_KEY_CIPHER | 82 | * %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC, %NL80211_ATTR_KEY_CIPHER, |
| 79 | * attributes. | 83 | * and %NL80211_ATTR_KEY_SEQ attributes. |
| 80 | * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX | 84 | * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX |
| 81 | * or %NL80211_ATTR_MAC. | 85 | * or %NL80211_ATTR_MAC. |
| 82 | * | 86 | * |
| @@ -166,6 +170,22 @@ | |||
| 166 | * set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is | 170 | * set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is |
| 167 | * %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on | 171 | * %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on |
| 168 | * to (%NL80211_ATTR_REG_ALPHA2). | 172 | * to (%NL80211_ATTR_REG_ALPHA2). |
| 173 | * @NL80211_CMD_REG_BEACON_HINT: indicates to userspace that an AP beacon | ||
| 174 | * has been found while world roaming thus enabling active scan or | ||
| 175 | * any mode of operation that initiates TX (beacons) on a channel | ||
| 176 | * where we would not have been able to do either before. As an example | ||
| 177 | * if you are world roaming (regulatory domain set to world or if your | ||
| 178 | * driver is using a custom world roaming regulatory domain) and while | ||
| 179 | * doing a passive scan on the 5 GHz band you find an AP there (if not | ||
| 180 | * on a DFS channel) you will now be able to actively scan for that AP | ||
| 181 | * or use AP mode on your card on that same channel. Note that this will | ||
| 182 | * never be used for channels 1-11 on the 2 GHz band as they are always | ||
| 183 | * enabled world wide. This beacon hint is only sent if your device had | ||
| 184 | * either disabled active scanning or beaconing on a channel. We send to | ||
| 185 | * userspace the wiphy on which we removed a restriction from | ||
| 186 | * (%NL80211_ATTR_WIPHY) and the channel on which this occurred | ||
| 187 | * before (%NL80211_ATTR_FREQ_BEFORE) and after (%NL80211_ATTR_FREQ_AFTER) | ||
| 188 | * the beacon hint was processed. | ||
| 169 | * | 189 | * |
| 170 | * @NL80211_CMD_AUTHENTICATE: authentication request and notification. | 190 | * @NL80211_CMD_AUTHENTICATE: authentication request and notification. |
| 171 | * This command is used both as a command (request to authenticate) and | 191 | * This command is used both as a command (request to authenticate) and |
| @@ -185,8 +205,12 @@ | |||
| 185 | * frame, i.e., it was for the local STA and was received in correct | 205 | * frame, i.e., it was for the local STA and was received in correct |
| 186 | * state. This is similar to MLME-AUTHENTICATE.confirm primitive in the | 206 | * state. This is similar to MLME-AUTHENTICATE.confirm primitive in the |
| 187 | * MLME SAP interface (kernel providing MLME, userspace SME). The | 207 | * MLME SAP interface (kernel providing MLME, userspace SME). The |
| 188 | * included NL80211_ATTR_FRAME attribute contains the management frame | 208 | * included %NL80211_ATTR_FRAME attribute contains the management frame |
| 189 | * (including both the header and frame body, but not FCS). | 209 | * (including both the header and frame body, but not FCS). This event is |
| 210 | * also used to indicate if the authentication attempt timed out. In that | ||
| 211 | * case the %NL80211_ATTR_FRAME attribute is replaced with a | ||
| 212 | * %NL80211_ATTR_TIMED_OUT flag (and %NL80211_ATTR_MAC to indicate which | ||
| 213 | * pending authentication timed out). | ||
| 190 | * @NL80211_CMD_ASSOCIATE: association request and notification; like | 214 | * @NL80211_CMD_ASSOCIATE: association request and notification; like |
| 191 | * NL80211_CMD_AUTHENTICATE but for Association and Reassociation | 215 | * NL80211_CMD_AUTHENTICATE but for Association and Reassociation |
| 192 | * (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request, | 216 | * (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request, |
| @@ -199,6 +223,25 @@ | |||
| 199 | * NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to | 223 | * NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to |
| 200 | * MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives). | 224 | * MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives). |
| 201 | * | 225 | * |
| 226 | * @NL80211_CMD_MICHAEL_MIC_FAILURE: notification of a locally detected Michael | ||
| 227 | * MIC (part of TKIP) failure; sent on the "mlme" multicast group; the | ||
| 228 | * event includes %NL80211_ATTR_MAC to describe the source MAC address of | ||
| 229 | * the frame with invalid MIC, %NL80211_ATTR_KEY_TYPE to show the key | ||
| 230 | * type, %NL80211_ATTR_KEY_IDX to indicate the key identifier, and | ||
| 231 | * %NL80211_ATTR_KEY_SEQ to indicate the TSC value of the frame; this | ||
| 232 | * event matches with MLME-MICHAELMICFAILURE.indication() primitive | ||
| 233 | * | ||
| 234 | * @NL80211_CMD_JOIN_IBSS: Join a new IBSS -- given at least an SSID and a | ||
| 235 | * FREQ attribute (for the initial frequency if no peer can be found) | ||
| 236 | * and optionally a MAC (as BSSID) and FREQ_FIXED attribute if those | ||
| 237 | * should be fixed rather than automatically determined. Can only be | ||
| 238 | * executed on a network interface that is UP, and fixed BSSID/FREQ | ||
| 239 | * may be rejected. Another optional parameter is the beacon interval, | ||
| 240 | * given in the %NL80211_ATTR_BEACON_INTERVAL attribute, which if not | ||
| 241 | * given defaults to 100 TU (102.4ms). | ||
| 242 | * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is | ||
| 243 | * determined by the network interface. | ||
| 244 | * | ||
| 202 | * @NL80211_CMD_MAX: highest used command number | 245 | * @NL80211_CMD_MAX: highest used command number |
| 203 | * @__NL80211_CMD_AFTER_LAST: internal use | 246 | * @__NL80211_CMD_AFTER_LAST: internal use |
| 204 | */ | 247 | */ |
| @@ -260,6 +303,13 @@ enum nl80211_commands { | |||
| 260 | NL80211_CMD_DEAUTHENTICATE, | 303 | NL80211_CMD_DEAUTHENTICATE, |
| 261 | NL80211_CMD_DISASSOCIATE, | 304 | NL80211_CMD_DISASSOCIATE, |
| 262 | 305 | ||
| 306 | NL80211_CMD_MICHAEL_MIC_FAILURE, | ||
| 307 | |||
| 308 | NL80211_CMD_REG_BEACON_HINT, | ||
| 309 | |||
| 310 | NL80211_CMD_JOIN_IBSS, | ||
| 311 | NL80211_CMD_LEAVE_IBSS, | ||
| 312 | |||
| 263 | /* add new commands above here */ | 313 | /* add new commands above here */ |
| 264 | 314 | ||
| 265 | /* used to define NL80211_CMD_MAX below */ | 315 | /* used to define NL80211_CMD_MAX below */ |
| @@ -278,6 +328,7 @@ enum nl80211_commands { | |||
| 278 | #define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE | 328 | #define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE |
| 279 | #define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE | 329 | #define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE |
| 280 | #define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE | 330 | #define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE |
| 331 | #define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT | ||
| 281 | 332 | ||
| 282 | /** | 333 | /** |
| 283 | * enum nl80211_attrs - nl80211 netlink attributes | 334 | * enum nl80211_attrs - nl80211 netlink attributes |
| @@ -296,6 +347,18 @@ enum nl80211_commands { | |||
| 296 | * NL80211_CHAN_HT20 = HT20 only | 347 | * NL80211_CHAN_HT20 = HT20 only |
| 297 | * NL80211_CHAN_HT40MINUS = secondary channel is below the primary channel | 348 | * NL80211_CHAN_HT40MINUS = secondary channel is below the primary channel |
| 298 | * NL80211_CHAN_HT40PLUS = secondary channel is above the primary channel | 349 | * NL80211_CHAN_HT40PLUS = secondary channel is above the primary channel |
| 350 | * @NL80211_ATTR_WIPHY_RETRY_SHORT: TX retry limit for frames whose length is | ||
| 351 | * less than or equal to the RTS threshold; allowed range: 1..255; | ||
| 352 | * dot11ShortRetryLimit; u8 | ||
| 353 | * @NL80211_ATTR_WIPHY_RETRY_LONG: TX retry limit for frames whose length is | ||
| 354 | * greater than the RTS threshold; allowed range: 1..255; | ||
| 355 | * dot11ShortLongLimit; u8 | ||
| 356 | * @NL80211_ATTR_WIPHY_FRAG_THRESHOLD: fragmentation threshold, i.e., maximum | ||
| 357 | * length in octets for frames; allowed range: 256..8000, disable | ||
| 358 | * fragmentation with (u32)-1; dot11FragmentationThreshold; u32 | ||
| 359 | * @NL80211_ATTR_WIPHY_RTS_THRESHOLD: RTS threshold (TX frames with length | ||
| 360 | * larger than or equal to this use RTS/CTS handshake); allowed range: | ||
| 361 | * 0..65536, disable with (u32)-1; dot11RTSThreshold; u32 | ||
| 299 | * | 362 | * |
| 300 | * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on | 363 | * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on |
| 301 | * @NL80211_ATTR_IFNAME: network interface name | 364 | * @NL80211_ATTR_IFNAME: network interface name |
| @@ -319,7 +382,7 @@ enum nl80211_commands { | |||
| 319 | * | 382 | * |
| 320 | * @NL80211_ATTR_STA_AID: Association ID for the station (u16) | 383 | * @NL80211_ATTR_STA_AID: Association ID for the station (u16) |
| 321 | * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of | 384 | * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of |
| 322 | * &enum nl80211_sta_flags. | 385 | * &enum nl80211_sta_flags (deprecated, use %NL80211_ATTR_STA_FLAGS2) |
| 323 | * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by | 386 | * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by |
| 324 | * IEEE 802.11 7.3.1.6 (u16). | 387 | * IEEE 802.11 7.3.1.6 (u16). |
| 325 | * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported | 388 | * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported |
| @@ -380,6 +443,8 @@ enum nl80211_commands { | |||
| 380 | * | 443 | * |
| 381 | * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with | 444 | * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with |
| 382 | * a single scan request, a wiphy attribute. | 445 | * a single scan request, a wiphy attribute. |
| 446 | * @NL80211_ATTR_MAX_SCAN_IE_LEN: maximum length of information elements | ||
| 447 | * that can be added to a scan request | ||
| 383 | * | 448 | * |
| 384 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) | 449 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) |
| 385 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive | 450 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive |
| @@ -408,6 +473,44 @@ enum nl80211_commands { | |||
| 408 | * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and | 473 | * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and |
| 409 | * %NL80211_CMD_DISASSOCIATE, u16 | 474 | * %NL80211_CMD_DISASSOCIATE, u16 |
| 410 | * | 475 | * |
| 476 | * @NL80211_ATTR_KEY_TYPE: Key Type, see &enum nl80211_key_type, represented as | ||
| 477 | * a u32 | ||
| 478 | * | ||
| 479 | * @NL80211_ATTR_FREQ_BEFORE: A channel which has suffered a regulatory change | ||
| 480 | * due to considerations from a beacon hint. This attribute reflects | ||
| 481 | * the state of the channel _before_ the beacon hint processing. This | ||
| 482 | * attributes consists of a nested attribute containing | ||
| 483 | * NL80211_FREQUENCY_ATTR_* | ||
| 484 | * @NL80211_ATTR_FREQ_AFTER: A channel which has suffered a regulatory change | ||
| 485 | * due to considerations from a beacon hint. This attribute reflects | ||
| 486 | * the state of the channel _after_ the beacon hint processing. This | ||
| 487 | * attributes consists of a nested attribute containing | ||
| 488 | * NL80211_FREQUENCY_ATTR_* | ||
| 489 | * | ||
| 490 | * @NL80211_ATTR_CIPHER_SUITES: a set of u32 values indicating the supported | ||
| 491 | * cipher suites | ||
| 492 | * | ||
| 493 | * @NL80211_ATTR_FREQ_FIXED: a flag indicating the IBSS should not try to look | ||
| 494 | * for other networks on different channels | ||
| 495 | * | ||
| 496 | * @NL80211_ATTR_TIMED_OUT: a flag indicating than an operation timed out; this | ||
| 497 | * is used, e.g., with %NL80211_CMD_AUTHENTICATE event | ||
| 498 | * | ||
| 499 | * @NL80211_ATTR_USE_MFP: Whether management frame protection (IEEE 802.11w) is | ||
| 500 | * used for the association (&enum nl80211_mfp, represented as a u32); | ||
| 501 | * this attribute can be used | ||
| 502 | * with %NL80211_CMD_ASSOCIATE request | ||
| 503 | * | ||
| 504 | * @NL80211_ATTR_STA_FLAGS2: Attribute containing a | ||
| 505 | * &struct nl80211_sta_flag_update. | ||
| 506 | * | ||
| 507 | * @NL80211_ATTR_CONTROL_PORT: A flag indicating whether user space controls | ||
| 508 | * IEEE 802.1X port, i.e., sets/clears %NL80211_STA_FLAG_AUTHORIZED, in | ||
| 509 | * station mode. If the flag is included in %NL80211_CMD_ASSOCIATE | ||
| 510 | * request, the driver will assume that the port is unauthorized until | ||
| 511 | * authorized by user space. Otherwise, port is marked authorized by | ||
| 512 | * default in station mode. | ||
| 513 | * | ||
| 411 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 514 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
| 412 | * @__NL80211_ATTR_AFTER_LAST: internal use | 515 | * @__NL80211_ATTR_AFTER_LAST: internal use |
| 413 | */ | 516 | */ |
| @@ -492,6 +595,30 @@ enum nl80211_attrs { | |||
| 492 | NL80211_ATTR_AUTH_TYPE, | 595 | NL80211_ATTR_AUTH_TYPE, |
| 493 | NL80211_ATTR_REASON_CODE, | 596 | NL80211_ATTR_REASON_CODE, |
| 494 | 597 | ||
| 598 | NL80211_ATTR_KEY_TYPE, | ||
| 599 | |||
| 600 | NL80211_ATTR_MAX_SCAN_IE_LEN, | ||
| 601 | NL80211_ATTR_CIPHER_SUITES, | ||
| 602 | |||
| 603 | NL80211_ATTR_FREQ_BEFORE, | ||
| 604 | NL80211_ATTR_FREQ_AFTER, | ||
| 605 | |||
| 606 | NL80211_ATTR_FREQ_FIXED, | ||
| 607 | |||
| 608 | |||
| 609 | NL80211_ATTR_WIPHY_RETRY_SHORT, | ||
| 610 | NL80211_ATTR_WIPHY_RETRY_LONG, | ||
| 611 | NL80211_ATTR_WIPHY_FRAG_THRESHOLD, | ||
| 612 | NL80211_ATTR_WIPHY_RTS_THRESHOLD, | ||
| 613 | |||
| 614 | NL80211_ATTR_TIMED_OUT, | ||
| 615 | |||
| 616 | NL80211_ATTR_USE_MFP, | ||
| 617 | |||
| 618 | NL80211_ATTR_STA_FLAGS2, | ||
| 619 | |||
| 620 | NL80211_ATTR_CONTROL_PORT, | ||
| 621 | |||
| 495 | /* add attributes here, update the policy in nl80211.c */ | 622 | /* add attributes here, update the policy in nl80211.c */ |
| 496 | 623 | ||
| 497 | __NL80211_ATTR_AFTER_LAST, | 624 | __NL80211_ATTR_AFTER_LAST, |
| @@ -581,6 +708,18 @@ enum nl80211_sta_flags { | |||
| 581 | }; | 708 | }; |
| 582 | 709 | ||
| 583 | /** | 710 | /** |
| 711 | * struct nl80211_sta_flag_update - station flags mask/set | ||
| 712 | * @mask: mask of station flags to set | ||
| 713 | * @set: which values to set them to | ||
| 714 | * | ||
| 715 | * Both mask and set contain bits as per &enum nl80211_sta_flags. | ||
| 716 | */ | ||
| 717 | struct nl80211_sta_flag_update { | ||
| 718 | __u32 mask; | ||
| 719 | __u32 set; | ||
| 720 | } __attribute__((packed)); | ||
| 721 | |||
| 722 | /** | ||
| 584 | * enum nl80211_rate_info - bitrate information | 723 | * enum nl80211_rate_info - bitrate information |
| 585 | * | 724 | * |
| 586 | * These attribute types are used with %NL80211_STA_INFO_TXRATE | 725 | * These attribute types are used with %NL80211_STA_INFO_TXRATE |
| @@ -1062,4 +1201,27 @@ enum nl80211_auth_type { | |||
| 1062 | NL80211_AUTHTYPE_FT, | 1201 | NL80211_AUTHTYPE_FT, |
| 1063 | NL80211_AUTHTYPE_NETWORK_EAP, | 1202 | NL80211_AUTHTYPE_NETWORK_EAP, |
| 1064 | }; | 1203 | }; |
| 1204 | |||
| 1205 | /** | ||
| 1206 | * enum nl80211_key_type - Key Type | ||
| 1207 | * @NL80211_KEYTYPE_GROUP: Group (broadcast/multicast) key | ||
| 1208 | * @NL80211_KEYTYPE_PAIRWISE: Pairwise (unicast/individual) key | ||
| 1209 | * @NL80211_KEYTYPE_PEERKEY: PeerKey (DLS) | ||
| 1210 | */ | ||
| 1211 | enum nl80211_key_type { | ||
| 1212 | NL80211_KEYTYPE_GROUP, | ||
| 1213 | NL80211_KEYTYPE_PAIRWISE, | ||
| 1214 | NL80211_KEYTYPE_PEERKEY, | ||
| 1215 | }; | ||
| 1216 | |||
| 1217 | /** | ||
| 1218 | * enum nl80211_mfp - Management frame protection state | ||
| 1219 | * @NL80211_MFP_NO: Management frame protection not used | ||
| 1220 | * @NL80211_MFP_REQUIRED: Management frame protection required | ||
| 1221 | */ | ||
| 1222 | enum nl80211_mfp { | ||
| 1223 | NL80211_MFP_NO, | ||
| 1224 | NL80211_MFP_REQUIRED, | ||
| 1225 | }; | ||
| 1226 | |||
| 1065 | #endif /* __LINUX_NL80211_H */ | 1227 | #endif /* __LINUX_NL80211_H */ |
diff --git a/include/linux/nl802154.h b/include/linux/nl802154.h new file mode 100644 index 000000000000..2cda00ccfcca --- /dev/null +++ b/include/linux/nl802154.h | |||
| @@ -0,0 +1,119 @@ | |||
| 1 | /* | ||
| 2 | * nl802154.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2007, 2008, 2009 Siemens AG | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 | ||
| 8 | * as published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License along | ||
| 16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 18 | * | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef NL802154_H | ||
| 22 | #define NL802154_H | ||
| 23 | |||
| 24 | #define IEEE802154_NL_NAME "802.15.4 MAC" | ||
| 25 | #define IEEE802154_MCAST_COORD_NAME "coordinator" | ||
| 26 | #define IEEE802154_MCAST_BEACON_NAME "beacon" | ||
| 27 | |||
| 28 | enum { | ||
| 29 | __IEEE802154_ATTR_INVALID, | ||
| 30 | |||
| 31 | IEEE802154_ATTR_DEV_NAME, | ||
| 32 | IEEE802154_ATTR_DEV_INDEX, | ||
| 33 | |||
| 34 | IEEE802154_ATTR_STATUS, | ||
| 35 | |||
| 36 | IEEE802154_ATTR_SHORT_ADDR, | ||
| 37 | IEEE802154_ATTR_HW_ADDR, | ||
| 38 | IEEE802154_ATTR_PAN_ID, | ||
| 39 | |||
| 40 | IEEE802154_ATTR_CHANNEL, | ||
| 41 | |||
| 42 | IEEE802154_ATTR_COORD_SHORT_ADDR, | ||
| 43 | IEEE802154_ATTR_COORD_HW_ADDR, | ||
| 44 | IEEE802154_ATTR_COORD_PAN_ID, | ||
| 45 | |||
| 46 | IEEE802154_ATTR_SRC_SHORT_ADDR, | ||
| 47 | IEEE802154_ATTR_SRC_HW_ADDR, | ||
| 48 | IEEE802154_ATTR_SRC_PAN_ID, | ||
| 49 | |||
| 50 | IEEE802154_ATTR_DEST_SHORT_ADDR, | ||
| 51 | IEEE802154_ATTR_DEST_HW_ADDR, | ||
| 52 | IEEE802154_ATTR_DEST_PAN_ID, | ||
| 53 | |||
| 54 | IEEE802154_ATTR_CAPABILITY, | ||
| 55 | IEEE802154_ATTR_REASON, | ||
| 56 | IEEE802154_ATTR_SCAN_TYPE, | ||
| 57 | IEEE802154_ATTR_CHANNELS, | ||
| 58 | IEEE802154_ATTR_DURATION, | ||
| 59 | IEEE802154_ATTR_ED_LIST, | ||
| 60 | IEEE802154_ATTR_BCN_ORD, | ||
| 61 | IEEE802154_ATTR_SF_ORD, | ||
| 62 | IEEE802154_ATTR_PAN_COORD, | ||
| 63 | IEEE802154_ATTR_BAT_EXT, | ||
| 64 | IEEE802154_ATTR_COORD_REALIGN, | ||
| 65 | IEEE802154_ATTR_SEC, | ||
| 66 | |||
| 67 | __IEEE802154_ATTR_MAX, | ||
| 68 | }; | ||
| 69 | |||
| 70 | #define IEEE802154_ATTR_MAX (__IEEE802154_ATTR_MAX - 1) | ||
| 71 | |||
| 72 | extern struct nla_policy ieee802154_policy[]; | ||
| 73 | |||
| 74 | /* commands */ | ||
| 75 | /* REQ should be responded with CONF | ||
| 76 | * and INDIC with RESP | ||
| 77 | */ | ||
| 78 | enum { | ||
| 79 | __IEEE802154_COMMAND_INVALID, | ||
| 80 | |||
| 81 | IEEE802154_ASSOCIATE_REQ, | ||
| 82 | IEEE802154_ASSOCIATE_CONF, | ||
| 83 | IEEE802154_DISASSOCIATE_REQ, | ||
| 84 | IEEE802154_DISASSOCIATE_CONF, | ||
| 85 | IEEE802154_GET_REQ, | ||
| 86 | IEEE802154_GET_CONF, | ||
| 87 | IEEE802154_RESET_REQ, | ||
| 88 | IEEE802154_RESET_CONF, | ||
| 89 | IEEE802154_SCAN_REQ, | ||
| 90 | IEEE802154_SCAN_CONF, | ||
| 91 | IEEE802154_SET_REQ, | ||
| 92 | IEEE802154_SET_CONF, | ||
| 93 | IEEE802154_START_REQ, | ||
| 94 | IEEE802154_START_CONF, | ||
| 95 | IEEE802154_SYNC_REQ, | ||
| 96 | IEEE802154_POLL_REQ, | ||
| 97 | IEEE802154_POLL_CONF, | ||
| 98 | |||
| 99 | IEEE802154_ASSOCIATE_INDIC, | ||
| 100 | IEEE802154_ASSOCIATE_RESP, | ||
| 101 | IEEE802154_DISASSOCIATE_INDIC, | ||
| 102 | IEEE802154_BEACON_NOTIFY_INDIC, | ||
| 103 | IEEE802154_ORPHAN_INDIC, | ||
| 104 | IEEE802154_ORPHAN_RESP, | ||
| 105 | IEEE802154_COMM_STATUS_INDIC, | ||
| 106 | IEEE802154_SYNC_LOSS_INDIC, | ||
| 107 | |||
| 108 | IEEE802154_GTS_REQ, /* Not supported yet */ | ||
| 109 | IEEE802154_GTS_INDIC, /* Not supported yet */ | ||
| 110 | IEEE802154_GTS_CONF, /* Not supported yet */ | ||
| 111 | IEEE802154_RX_ENABLE_REQ, /* Not supported yet */ | ||
| 112 | IEEE802154_RX_ENABLE_CONF, /* Not supported yet */ | ||
| 113 | |||
| 114 | __IEEE802154_CMD_MAX, | ||
| 115 | }; | ||
| 116 | |||
| 117 | #define IEEE802154_CMD_MAX (__IEEE802154_CMD_MAX - 1) | ||
| 118 | |||
| 119 | #endif | ||
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index b86fa2ffca0c..81bc252dc8ac 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
| @@ -198,6 +198,7 @@ static inline int notifier_to_errno(int ret) | |||
| 198 | #define NETDEV_CHANGENAME 0x000A | 198 | #define NETDEV_CHANGENAME 0x000A |
| 199 | #define NETDEV_FEAT_CHANGE 0x000B | 199 | #define NETDEV_FEAT_CHANGE 0x000B |
| 200 | #define NETDEV_BONDING_FAILOVER 0x000C | 200 | #define NETDEV_BONDING_FAILOVER 0x000C |
| 201 | #define NETDEV_PRE_UP 0x000D | ||
| 201 | 202 | ||
| 202 | #define SYS_DOWN 0x0001 /* Notify of system down */ | 203 | #define SYS_DOWN 0x0001 /* Notify of system down */ |
| 203 | #define SYS_RESTART SYS_DOWN | 204 | #define SYS_RESTART SYS_DOWN |
diff --git a/include/linux/of.h b/include/linux/of.h index 6a7efa242f5e..7be2d1043c16 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -77,6 +77,9 @@ extern int of_n_size_cells(struct device_node *np); | |||
| 77 | extern const struct of_device_id *of_match_node( | 77 | extern const struct of_device_id *of_match_node( |
| 78 | const struct of_device_id *matches, const struct device_node *node); | 78 | const struct of_device_id *matches, const struct device_node *node); |
| 79 | extern int of_modalias_node(struct device_node *node, char *modalias, int len); | 79 | extern int of_modalias_node(struct device_node *node, char *modalias, int len); |
| 80 | extern struct device_node *of_parse_phandle(struct device_node *np, | ||
| 81 | const char *phandle_name, | ||
| 82 | int index); | ||
| 80 | extern int of_parse_phandles_with_args(struct device_node *np, | 83 | extern int of_parse_phandles_with_args(struct device_node *np, |
| 81 | const char *list_name, const char *cells_name, int index, | 84 | const char *list_name, const char *cells_name, int index, |
| 82 | struct device_node **out_node, const void **out_args); | 85 | struct device_node **out_node, const void **out_args); |
diff --git a/include/linux/of_mdio.h b/include/linux/of_mdio.h new file mode 100644 index 000000000000..c9663c690303 --- /dev/null +++ b/include/linux/of_mdio.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | /* | ||
| 2 | * OF helpers for the MDIO (Ethernet PHY) API | ||
| 3 | * | ||
| 4 | * Copyright (c) 2009 Secret Lab Technologies, Ltd. | ||
| 5 | * | ||
| 6 | * This file is released under the GPLv2 | ||
| 7 | */ | ||
| 8 | |||
| 9 | #ifndef __LINUX_OF_MDIO_H | ||
| 10 | #define __LINUX_OF_MDIO_H | ||
| 11 | |||
| 12 | #include <linux/phy.h> | ||
| 13 | #include <linux/of.h> | ||
| 14 | |||
| 15 | extern int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np); | ||
| 16 | extern struct phy_device *of_phy_find_device(struct device_node *phy_np); | ||
| 17 | extern struct phy_device *of_phy_connect(struct net_device *dev, | ||
| 18 | struct device_node *phy_np, | ||
| 19 | void (*hndlr)(struct net_device *), | ||
| 20 | u32 flags, phy_interface_t iface); | ||
| 21 | |||
| 22 | #endif /* __LINUX_OF_MDIO_H */ | ||
diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h index 7339c7bf7331..13f126c89ae8 100644 --- a/include/linux/page_cgroup.h +++ b/include/linux/page_cgroup.h | |||
| @@ -18,7 +18,19 @@ struct page_cgroup { | |||
| 18 | }; | 18 | }; |
| 19 | 19 | ||
| 20 | void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat); | 20 | void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat); |
| 21 | void __init page_cgroup_init(void); | 21 | |
| 22 | #ifdef CONFIG_SPARSEMEM | ||
| 23 | static inline void __init page_cgroup_init_flatmem(void) | ||
| 24 | { | ||
| 25 | } | ||
| 26 | extern void __init page_cgroup_init(void); | ||
| 27 | #else | ||
| 28 | void __init page_cgroup_init_flatmem(void); | ||
| 29 | static inline void __init page_cgroup_init(void) | ||
| 30 | { | ||
| 31 | } | ||
| 32 | #endif | ||
| 33 | |||
| 22 | struct page_cgroup *lookup_page_cgroup(struct page *page); | 34 | struct page_cgroup *lookup_page_cgroup(struct page *page); |
| 23 | 35 | ||
| 24 | enum { | 36 | enum { |
| @@ -87,6 +99,10 @@ static inline void page_cgroup_init(void) | |||
| 87 | { | 99 | { |
| 88 | } | 100 | } |
| 89 | 101 | ||
| 102 | static inline void __init page_cgroup_init_flatmem(void) | ||
| 103 | { | ||
| 104 | } | ||
| 105 | |||
| 90 | #endif | 106 | #endif |
| 91 | 107 | ||
| 92 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP | 108 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index d7d1c41a0b17..aa01d38c9971 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -1005,6 +1005,7 @@ | |||
| 1005 | #define PCI_DEVICE_ID_PLX_PCI200SYN 0x3196 | 1005 | #define PCI_DEVICE_ID_PLX_PCI200SYN 0x3196 |
| 1006 | #define PCI_DEVICE_ID_PLX_9030 0x9030 | 1006 | #define PCI_DEVICE_ID_PLX_9030 0x9030 |
| 1007 | #define PCI_DEVICE_ID_PLX_9050 0x9050 | 1007 | #define PCI_DEVICE_ID_PLX_9050 0x9050 |
| 1008 | #define PCI_DEVICE_ID_PLX_9056 0x9056 | ||
| 1008 | #define PCI_DEVICE_ID_PLX_9080 0x9080 | 1009 | #define PCI_DEVICE_ID_PLX_9080 0x9080 |
| 1009 | #define PCI_DEVICE_ID_PLX_GTEK_SERIAL2 0xa001 | 1010 | #define PCI_DEVICE_ID_PLX_GTEK_SERIAL2 0xa001 |
| 1010 | 1011 | ||
| @@ -1066,8 +1067,6 @@ | |||
| 1066 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SMBUS 0x0034 | 1067 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SMBUS 0x0034 |
| 1067 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE 0x0035 | 1068 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE 0x0035 |
| 1068 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036 | 1069 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036 |
| 1069 | #define PCI_DEVICE_ID_NVIDIA_NVENET_10 0x0037 | ||
| 1070 | #define PCI_DEVICE_ID_NVIDIA_NVENET_11 0x0038 | ||
| 1071 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2 0x003e | 1070 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2 0x003e |
| 1072 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800_ULTRA 0x0040 | 1071 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800_ULTRA 0x0040 |
| 1073 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800 0x0041 | 1072 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800 0x0041 |
| @@ -1078,21 +1077,16 @@ | |||
| 1078 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE 0x0053 | 1077 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE 0x0053 |
| 1079 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA 0x0054 | 1078 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA 0x0054 |
| 1080 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2 0x0055 | 1079 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2 0x0055 |
| 1081 | #define PCI_DEVICE_ID_NVIDIA_NVENET_8 0x0056 | ||
| 1082 | #define PCI_DEVICE_ID_NVIDIA_NVENET_9 0x0057 | ||
| 1083 | #define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO 0x0059 | 1080 | #define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO 0x0059 |
| 1084 | #define PCI_DEVICE_ID_NVIDIA_CK804_PCIE 0x005d | 1081 | #define PCI_DEVICE_ID_NVIDIA_CK804_PCIE 0x005d |
| 1085 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_SMBUS 0x0064 | 1082 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_SMBUS 0x0064 |
| 1086 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE 0x0065 | 1083 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE 0x0065 |
| 1087 | #define PCI_DEVICE_ID_NVIDIA_NVENET_2 0x0066 | ||
| 1088 | #define PCI_DEVICE_ID_NVIDIA_MCP2_MODEM 0x0069 | 1084 | #define PCI_DEVICE_ID_NVIDIA_MCP2_MODEM 0x0069 |
| 1089 | #define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO 0x006a | 1085 | #define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO 0x006a |
| 1090 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SMBUS 0x0084 | 1086 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SMBUS 0x0084 |
| 1091 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE 0x0085 | 1087 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE 0x0085 |
| 1092 | #define PCI_DEVICE_ID_NVIDIA_NVENET_4 0x0086 | ||
| 1093 | #define PCI_DEVICE_ID_NVIDIA_MCP2S_MODEM 0x0089 | 1088 | #define PCI_DEVICE_ID_NVIDIA_MCP2S_MODEM 0x0089 |
| 1094 | #define PCI_DEVICE_ID_NVIDIA_CK8_AUDIO 0x008a | 1089 | #define PCI_DEVICE_ID_NVIDIA_CK8_AUDIO 0x008a |
| 1095 | #define PCI_DEVICE_ID_NVIDIA_NVENET_5 0x008c | ||
| 1096 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA 0x008e | 1090 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA 0x008e |
| 1097 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GT 0x0090 | 1091 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GT 0x0090 |
| 1098 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GTX 0x0091 | 1092 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GTX 0x0091 |
| @@ -1108,15 +1102,12 @@ | |||
| 1108 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3 0x00d1 | 1102 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3 0x00d1 |
| 1109 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_SMBUS 0x00d4 | 1103 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_SMBUS 0x00d4 |
| 1110 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE 0x00d5 | 1104 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE 0x00d5 |
| 1111 | #define PCI_DEVICE_ID_NVIDIA_NVENET_3 0x00d6 | ||
| 1112 | #define PCI_DEVICE_ID_NVIDIA_MCP3_MODEM 0x00d9 | 1105 | #define PCI_DEVICE_ID_NVIDIA_MCP3_MODEM 0x00d9 |
| 1113 | #define PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO 0x00da | 1106 | #define PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO 0x00da |
| 1114 | #define PCI_DEVICE_ID_NVIDIA_NVENET_7 0x00df | ||
| 1115 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S 0x00e1 | 1107 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S 0x00e1 |
| 1116 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA 0x00e3 | 1108 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA 0x00e3 |
| 1117 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SMBUS 0x00e4 | 1109 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SMBUS 0x00e4 |
| 1118 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE 0x00e5 | 1110 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE 0x00e5 |
| 1119 | #define PCI_DEVICE_ID_NVIDIA_NVENET_6 0x00e6 | ||
| 1120 | #define PCI_DEVICE_ID_NVIDIA_CK8S_AUDIO 0x00ea | 1111 | #define PCI_DEVICE_ID_NVIDIA_CK8S_AUDIO 0x00ea |
| 1121 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2 0x00ee | 1112 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2 0x00ee |
| 1122 | #define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6800_ALT1 0x00f0 | 1113 | #define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6800_ALT1 0x00f0 |
| @@ -1176,7 +1167,6 @@ | |||
| 1176 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS 0x01b4 | 1167 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS 0x01b4 |
| 1177 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_IDE 0x01bc | 1168 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_IDE 0x01bc |
| 1178 | #define PCI_DEVICE_ID_NVIDIA_MCP1_MODEM 0x01c1 | 1169 | #define PCI_DEVICE_ID_NVIDIA_MCP1_MODEM 0x01c1 |
| 1179 | #define PCI_DEVICE_ID_NVIDIA_NVENET_1 0x01c3 | ||
| 1180 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2 0x01e0 | 1170 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2 0x01e0 |
| 1181 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3 0x0200 | 1171 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3 0x0200 |
| 1182 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3_1 0x0201 | 1172 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3_1 0x0201 |
| @@ -1199,8 +1189,6 @@ | |||
| 1199 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE 0x036E | 1189 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE 0x036E |
| 1200 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA 0x037E | 1190 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA 0x037E |
| 1201 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2 0x037F | 1191 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2 0x037F |
| 1202 | #define PCI_DEVICE_ID_NVIDIA_NVENET_12 0x0268 | ||
| 1203 | #define PCI_DEVICE_ID_NVIDIA_NVENET_13 0x0269 | ||
| 1204 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800 0x0280 | 1192 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800 0x0280 |
| 1205 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800_8X 0x0281 | 1193 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800_8X 0x0281 |
| 1206 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800SE 0x0282 | 1194 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800SE 0x0282 |
| @@ -1247,46 +1235,21 @@ | |||
| 1247 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700_2 0x0348 | 1235 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700_2 0x0348 |
| 1248 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO1000 0x034C | 1236 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO1000 0x034C |
| 1249 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1100 0x034E | 1237 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1100 0x034E |
| 1250 | #define PCI_DEVICE_ID_NVIDIA_NVENET_14 0x0372 | ||
| 1251 | #define PCI_DEVICE_ID_NVIDIA_NVENET_15 0x0373 | 1238 | #define PCI_DEVICE_ID_NVIDIA_NVENET_15 0x0373 |
| 1252 | #define PCI_DEVICE_ID_NVIDIA_NVENET_16 0x03E5 | ||
| 1253 | #define PCI_DEVICE_ID_NVIDIA_NVENET_17 0x03E6 | ||
| 1254 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA 0x03E7 | 1239 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA 0x03E7 |
| 1255 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SMBUS 0x03EB | 1240 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SMBUS 0x03EB |
| 1256 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE 0x03EC | 1241 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE 0x03EC |
| 1257 | #define PCI_DEVICE_ID_NVIDIA_NVENET_18 0x03EE | ||
| 1258 | #define PCI_DEVICE_ID_NVIDIA_NVENET_19 0x03EF | ||
| 1259 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 | 1242 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 |
| 1260 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 | 1243 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 |
| 1261 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_SMBUS 0x0446 | 1244 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_SMBUS 0x0446 |
| 1262 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448 | 1245 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448 |
| 1263 | #define PCI_DEVICE_ID_NVIDIA_NVENET_20 0x0450 | ||
| 1264 | #define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 | ||
| 1265 | #define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452 | ||
| 1266 | #define PCI_DEVICE_ID_NVIDIA_NVENET_23 0x0453 | ||
| 1267 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_SMBUS 0x0542 | 1246 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_SMBUS 0x0542 |
| 1268 | #define PCI_DEVICE_ID_NVIDIA_NVENET_24 0x054C | ||
| 1269 | #define PCI_DEVICE_ID_NVIDIA_NVENET_25 0x054D | ||
| 1270 | #define PCI_DEVICE_ID_NVIDIA_NVENET_26 0x054E | ||
| 1271 | #define PCI_DEVICE_ID_NVIDIA_NVENET_27 0x054F | ||
| 1272 | #define PCI_DEVICE_ID_NVIDIA_NVENET_28 0x07DC | ||
| 1273 | #define PCI_DEVICE_ID_NVIDIA_NVENET_29 0x07DD | ||
| 1274 | #define PCI_DEVICE_ID_NVIDIA_NVENET_30 0x07DE | ||
| 1275 | #define PCI_DEVICE_ID_NVIDIA_NVENET_31 0x07DF | ||
| 1276 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560 | 1247 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560 |
| 1277 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE 0x056C | 1248 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE 0x056C |
| 1278 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP78S_SMBUS 0x0752 | 1249 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP78S_SMBUS 0x0752 |
| 1279 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759 | 1250 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759 |
| 1280 | #define PCI_DEVICE_ID_NVIDIA_NVENET_32 0x0760 | ||
| 1281 | #define PCI_DEVICE_ID_NVIDIA_NVENET_33 0x0761 | ||
| 1282 | #define PCI_DEVICE_ID_NVIDIA_NVENET_34 0x0762 | ||
| 1283 | #define PCI_DEVICE_ID_NVIDIA_NVENET_35 0x0763 | ||
| 1284 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS 0x07D8 | 1251 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS 0x07D8 |
| 1285 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS 0x0AA2 | 1252 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS 0x0AA2 |
| 1286 | #define PCI_DEVICE_ID_NVIDIA_NVENET_36 0x0AB0 | ||
| 1287 | #define PCI_DEVICE_ID_NVIDIA_NVENET_37 0x0AB1 | ||
| 1288 | #define PCI_DEVICE_ID_NVIDIA_NVENET_38 0x0AB2 | ||
| 1289 | #define PCI_DEVICE_ID_NVIDIA_NVENET_39 0x0AB3 | ||
| 1290 | 1253 | ||
| 1291 | #define PCI_VENDOR_ID_IMS 0x10e0 | 1254 | #define PCI_VENDOR_ID_IMS 0x10e0 |
| 1292 | #define PCI_DEVICE_ID_IMS_TT128 0x9128 | 1255 | #define PCI_DEVICE_ID_IMS_TT128 0x9128 |
| @@ -1314,6 +1277,13 @@ | |||
| 1314 | 1277 | ||
| 1315 | #define PCI_VENDOR_ID_CREATIVE 0x1102 /* duplicate: ECTIVA */ | 1278 | #define PCI_VENDOR_ID_CREATIVE 0x1102 /* duplicate: ECTIVA */ |
| 1316 | #define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002 | 1279 | #define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002 |
| 1280 | #define PCI_DEVICE_ID_CREATIVE_20K1 0x0005 | ||
| 1281 | #define PCI_DEVICE_ID_CREATIVE_20K2 0x000b | ||
| 1282 | #define PCI_SUBDEVICE_ID_CREATIVE_SB0760 0x0024 | ||
| 1283 | #define PCI_SUBDEVICE_ID_CREATIVE_SB08801 0x0041 | ||
| 1284 | #define PCI_SUBDEVICE_ID_CREATIVE_SB08802 0x0042 | ||
| 1285 | #define PCI_SUBDEVICE_ID_CREATIVE_SB08803 0x0043 | ||
| 1286 | #define PCI_SUBDEVICE_ID_CREATIVE_HENDRIX 0x6000 | ||
| 1317 | 1287 | ||
| 1318 | #define PCI_VENDOR_ID_ECTIVA 0x1102 /* duplicate: CREATIVE */ | 1288 | #define PCI_VENDOR_ID_ECTIVA 0x1102 /* duplicate: CREATIVE */ |
| 1319 | #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938 | 1289 | #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938 |
| @@ -1847,6 +1817,10 @@ | |||
| 1847 | #define PCI_SUBDEVICE_ID_HYPERCOPE_METRO 0x0107 | 1817 | #define PCI_SUBDEVICE_ID_HYPERCOPE_METRO 0x0107 |
| 1848 | #define PCI_SUBDEVICE_ID_HYPERCOPE_CHAMP2 0x0108 | 1818 | #define PCI_SUBDEVICE_ID_HYPERCOPE_CHAMP2 0x0108 |
| 1849 | 1819 | ||
| 1820 | #define PCI_VENDOR_ID_DIGIGRAM 0x1369 | ||
| 1821 | #define PCI_SUBDEVICE_ID_DIGIGRAM_LX6464ES_SERIAL_SUBSYSTEM 0xc001 | ||
| 1822 | #define PCI_SUBDEVICE_ID_DIGIGRAM_LX6464ES_CAE_SERIAL_SUBSYSTEM 0xc002 | ||
| 1823 | |||
| 1850 | #define PCI_VENDOR_ID_KAWASAKI 0x136b | 1824 | #define PCI_VENDOR_ID_KAWASAKI 0x136b |
| 1851 | #define PCI_DEVICE_ID_MCHIP_KL5A72002 0xff01 | 1825 | #define PCI_DEVICE_ID_MCHIP_KL5A72002 0xff01 |
| 1852 | 1826 | ||
| @@ -1914,6 +1888,8 @@ | |||
| 1914 | #define PCI_SUBDEVICE_ID_CCD_SWYX4S 0xB540 | 1888 | #define PCI_SUBDEVICE_ID_CCD_SWYX4S 0xB540 |
| 1915 | #define PCI_SUBDEVICE_ID_CCD_JH4S20 0xB550 | 1889 | #define PCI_SUBDEVICE_ID_CCD_JH4S20 0xB550 |
| 1916 | #define PCI_SUBDEVICE_ID_CCD_IOB8ST_1 0xB552 | 1890 | #define PCI_SUBDEVICE_ID_CCD_IOB8ST_1 0xB552 |
| 1891 | #define PCI_SUBDEVICE_ID_CCD_JHSE1 0xB553 | ||
| 1892 | #define PCI_SUBDEVICE_ID_CCD_JH8S 0xB55B | ||
| 1917 | #define PCI_SUBDEVICE_ID_CCD_BN4S 0xB560 | 1893 | #define PCI_SUBDEVICE_ID_CCD_BN4S 0xB560 |
| 1918 | #define PCI_SUBDEVICE_ID_CCD_BN8S 0xB562 | 1894 | #define PCI_SUBDEVICE_ID_CCD_BN8S 0xB562 |
| 1919 | #define PCI_SUBDEVICE_ID_CCD_BNE1 0xB563 | 1895 | #define PCI_SUBDEVICE_ID_CCD_BNE1 0xB563 |
| @@ -2115,6 +2091,7 @@ | |||
| 2115 | #define PCI_VENDOR_ID_MAINPINE 0x1522 | 2091 | #define PCI_VENDOR_ID_MAINPINE 0x1522 |
| 2116 | #define PCI_DEVICE_ID_MAINPINE_PBRIDGE 0x0100 | 2092 | #define PCI_DEVICE_ID_MAINPINE_PBRIDGE 0x0100 |
| 2117 | #define PCI_VENDOR_ID_ENE 0x1524 | 2093 | #define PCI_VENDOR_ID_ENE 0x1524 |
| 2094 | #define PCI_DEVICE_ID_ENE_CB710_FLASH 0x0510 | ||
| 2118 | #define PCI_DEVICE_ID_ENE_CB712_SD 0x0550 | 2095 | #define PCI_DEVICE_ID_ENE_CB712_SD 0x0550 |
| 2119 | #define PCI_DEVICE_ID_ENE_CB712_SD_2 0x0551 | 2096 | #define PCI_DEVICE_ID_ENE_CB712_SD_2 0x0551 |
| 2120 | #define PCI_DEVICE_ID_ENE_CB714_SD 0x0750 | 2097 | #define PCI_DEVICE_ID_ENE_CB714_SD 0x0750 |
| @@ -2276,6 +2253,8 @@ | |||
| 2276 | #define PCI_DEVICE_ID_MPC8547E 0x0018 | 2253 | #define PCI_DEVICE_ID_MPC8547E 0x0018 |
| 2277 | #define PCI_DEVICE_ID_MPC8545E 0x0019 | 2254 | #define PCI_DEVICE_ID_MPC8545E 0x0019 |
| 2278 | #define PCI_DEVICE_ID_MPC8545 0x001a | 2255 | #define PCI_DEVICE_ID_MPC8545 0x001a |
| 2256 | #define PCI_DEVICE_ID_MPC8569E 0x0061 | ||
| 2257 | #define PCI_DEVICE_ID_MPC8569 0x0060 | ||
| 2279 | #define PCI_DEVICE_ID_MPC8568E 0x0020 | 2258 | #define PCI_DEVICE_ID_MPC8568E 0x0020 |
| 2280 | #define PCI_DEVICE_ID_MPC8568 0x0021 | 2259 | #define PCI_DEVICE_ID_MPC8568 0x0021 |
| 2281 | #define PCI_DEVICE_ID_MPC8567E 0x0022 | 2260 | #define PCI_DEVICE_ID_MPC8567E 0x0022 |
| @@ -2288,6 +2267,8 @@ | |||
| 2288 | #define PCI_DEVICE_ID_MPC8572 0x0041 | 2267 | #define PCI_DEVICE_ID_MPC8572 0x0041 |
| 2289 | #define PCI_DEVICE_ID_MPC8536E 0x0050 | 2268 | #define PCI_DEVICE_ID_MPC8536E 0x0050 |
| 2290 | #define PCI_DEVICE_ID_MPC8536 0x0051 | 2269 | #define PCI_DEVICE_ID_MPC8536 0x0051 |
| 2270 | #define PCI_DEVICE_ID_P2020E 0x0070 | ||
| 2271 | #define PCI_DEVICE_ID_P2020 0x0071 | ||
| 2291 | #define PCI_DEVICE_ID_MPC8641 0x7010 | 2272 | #define PCI_DEVICE_ID_MPC8641 0x7010 |
| 2292 | #define PCI_DEVICE_ID_MPC8641D 0x7011 | 2273 | #define PCI_DEVICE_ID_MPC8641D 0x7011 |
| 2293 | #define PCI_DEVICE_ID_MPC8610 0x7018 | 2274 | #define PCI_DEVICE_ID_MPC8610 0x7018 |
| @@ -2315,6 +2296,8 @@ | |||
| 2315 | 2296 | ||
| 2316 | #define PCI_VENDOR_ID_QMI 0x1a32 | 2297 | #define PCI_VENDOR_ID_QMI 0x1a32 |
| 2317 | 2298 | ||
| 2299 | #define PCI_VENDOR_ID_AZWAVE 0x1a3b | ||
| 2300 | |||
| 2318 | #define PCI_VENDOR_ID_TEKRAM 0x1de1 | 2301 | #define PCI_VENDOR_ID_TEKRAM 0x1de1 |
| 2319 | #define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 | 2302 | #define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 |
| 2320 | 2303 | ||
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h index 6e133954e2e4..1b3118a1023a 100644 --- a/include/linux/perf_counter.h +++ b/include/linux/perf_counter.h | |||
| @@ -120,6 +120,8 @@ enum perf_counter_sample_format { | |||
| 120 | PERF_SAMPLE_ID = 1U << 6, | 120 | PERF_SAMPLE_ID = 1U << 6, |
| 121 | PERF_SAMPLE_CPU = 1U << 7, | 121 | PERF_SAMPLE_CPU = 1U << 7, |
| 122 | PERF_SAMPLE_PERIOD = 1U << 8, | 122 | PERF_SAMPLE_PERIOD = 1U << 8, |
| 123 | |||
| 124 | PERF_SAMPLE_MAX = 1U << 9, /* non-ABI */ | ||
| 123 | }; | 125 | }; |
| 124 | 126 | ||
| 125 | /* | 127 | /* |
| @@ -131,17 +133,26 @@ enum perf_counter_read_format { | |||
| 131 | PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0, | 133 | PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0, |
| 132 | PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1, | 134 | PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1, |
| 133 | PERF_FORMAT_ID = 1U << 2, | 135 | PERF_FORMAT_ID = 1U << 2, |
| 136 | |||
| 137 | PERF_FORMAT_MAX = 1U << 3, /* non-ABI */ | ||
| 134 | }; | 138 | }; |
| 135 | 139 | ||
| 140 | #define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */ | ||
| 141 | |||
| 136 | /* | 142 | /* |
| 137 | * Hardware event to monitor via a performance monitoring counter: | 143 | * Hardware event to monitor via a performance monitoring counter: |
| 138 | */ | 144 | */ |
| 139 | struct perf_counter_attr { | 145 | struct perf_counter_attr { |
| 146 | |||
| 140 | /* | 147 | /* |
| 141 | * Major type: hardware/software/tracepoint/etc. | 148 | * Major type: hardware/software/tracepoint/etc. |
| 142 | */ | 149 | */ |
| 143 | __u32 type; | 150 | __u32 type; |
| 144 | __u32 __reserved_1; | 151 | |
| 152 | /* | ||
| 153 | * Size of the attr structure, for fwd/bwd compat. | ||
| 154 | */ | ||
| 155 | __u32 size; | ||
| 145 | 156 | ||
| 146 | /* | 157 | /* |
| 147 | * Type specific configuration information. | 158 | * Type specific configuration information. |
| @@ -168,12 +179,12 @@ struct perf_counter_attr { | |||
| 168 | comm : 1, /* include comm data */ | 179 | comm : 1, /* include comm data */ |
| 169 | freq : 1, /* use freq, not period */ | 180 | freq : 1, /* use freq, not period */ |
| 170 | 181 | ||
| 171 | __reserved_2 : 53; | 182 | __reserved_1 : 53; |
| 172 | 183 | ||
| 173 | __u32 wakeup_events; /* wakeup every n events */ | 184 | __u32 wakeup_events; /* wakeup every n events */ |
| 174 | __u32 __reserved_3; | 185 | __u32 __reserved_2; |
| 175 | 186 | ||
| 176 | __u64 __reserved_4; | 187 | __u64 __reserved_3; |
| 177 | }; | 188 | }; |
| 178 | 189 | ||
| 179 | /* | 190 | /* |
| @@ -621,7 +632,8 @@ extern int perf_counter_overflow(struct perf_counter *counter, int nmi, | |||
| 621 | static inline int is_software_counter(struct perf_counter *counter) | 632 | static inline int is_software_counter(struct perf_counter *counter) |
| 622 | { | 633 | { |
| 623 | return (counter->attr.type != PERF_TYPE_RAW) && | 634 | return (counter->attr.type != PERF_TYPE_RAW) && |
| 624 | (counter->attr.type != PERF_TYPE_HARDWARE); | 635 | (counter->attr.type != PERF_TYPE_HARDWARE) && |
| 636 | (counter->attr.type != PERF_TYPE_HW_CACHE); | ||
| 625 | } | 637 | } |
| 626 | 638 | ||
| 627 | extern void perf_swcounter_event(u32, u64, int, struct pt_regs *, u64); | 639 | extern void perf_swcounter_event(u32, u64, int, struct pt_regs *, u64); |
diff --git a/include/linux/phy.h b/include/linux/phy.h index 97e40cb6b588..b1368b8f6572 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
| @@ -79,7 +79,7 @@ typedef enum { | |||
| 79 | * Need to be a little smaller than phydev->dev.bus_id to leave room | 79 | * Need to be a little smaller than phydev->dev.bus_id to leave room |
| 80 | * for the ":%02x" | 80 | * for the ":%02x" |
| 81 | */ | 81 | */ |
| 82 | #define MII_BUS_ID_SIZE (BUS_ID_SIZE - 3) | 82 | #define MII_BUS_ID_SIZE (20 - 3) |
| 83 | 83 | ||
| 84 | /* | 84 | /* |
| 85 | * The Bus class for PHYs. Devices which provide access to | 85 | * The Bus class for PHYs. Devices which provide access to |
| @@ -407,7 +407,7 @@ struct phy_driver { | |||
| 407 | /* A Structure for boards to register fixups with the PHY Lib */ | 407 | /* A Structure for boards to register fixups with the PHY Lib */ |
| 408 | struct phy_fixup { | 408 | struct phy_fixup { |
| 409 | struct list_head list; | 409 | struct list_head list; |
| 410 | char bus_id[BUS_ID_SIZE]; | 410 | char bus_id[20]; |
| 411 | u32 phy_uid; | 411 | u32 phy_uid; |
| 412 | u32 phy_uid_mask; | 412 | u32 phy_uid_mask; |
| 413 | int (*run)(struct phy_device *phydev); | 413 | int (*run)(struct phy_device *phydev); |
| @@ -444,10 +444,16 @@ static inline int phy_write(struct phy_device *phydev, u16 regnum, u16 val) | |||
| 444 | 444 | ||
| 445 | int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id); | 445 | int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id); |
| 446 | struct phy_device* get_phy_device(struct mii_bus *bus, int addr); | 446 | struct phy_device* get_phy_device(struct mii_bus *bus, int addr); |
| 447 | int phy_device_register(struct phy_device *phy); | ||
| 447 | int phy_clear_interrupt(struct phy_device *phydev); | 448 | int phy_clear_interrupt(struct phy_device *phydev); |
| 448 | int phy_config_interrupt(struct phy_device *phydev, u32 interrupts); | 449 | int phy_config_interrupt(struct phy_device *phydev, u32 interrupts); |
| 450 | int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, | ||
| 451 | u32 flags, phy_interface_t interface); | ||
| 449 | struct phy_device * phy_attach(struct net_device *dev, | 452 | struct phy_device * phy_attach(struct net_device *dev, |
| 450 | const char *bus_id, u32 flags, phy_interface_t interface); | 453 | const char *bus_id, u32 flags, phy_interface_t interface); |
| 454 | int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, | ||
| 455 | void (*handler)(struct net_device *), u32 flags, | ||
| 456 | phy_interface_t interface); | ||
| 451 | struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, | 457 | struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, |
| 452 | void (*handler)(struct net_device *), u32 flags, | 458 | void (*handler)(struct net_device *), u32 flags, |
| 453 | phy_interface_t interface); | 459 | phy_interface_t interface); |
diff --git a/include/linux/pm.h b/include/linux/pm.h index 1d4e2d289821..b3f74764a586 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
| @@ -382,14 +382,13 @@ struct dev_pm_info { | |||
| 382 | #ifdef CONFIG_PM_SLEEP | 382 | #ifdef CONFIG_PM_SLEEP |
| 383 | extern void device_pm_lock(void); | 383 | extern void device_pm_lock(void); |
| 384 | extern int sysdev_resume(void); | 384 | extern int sysdev_resume(void); |
| 385 | extern void device_power_up(pm_message_t state); | 385 | extern void dpm_resume_noirq(pm_message_t state); |
| 386 | extern void device_resume(pm_message_t state); | 386 | extern void dpm_resume_end(pm_message_t state); |
| 387 | 387 | ||
| 388 | extern void device_pm_unlock(void); | 388 | extern void device_pm_unlock(void); |
| 389 | extern int sysdev_suspend(pm_message_t state); | 389 | extern int sysdev_suspend(pm_message_t state); |
| 390 | extern int device_power_down(pm_message_t state); | 390 | extern int dpm_suspend_noirq(pm_message_t state); |
| 391 | extern int device_suspend(pm_message_t state); | 391 | extern int dpm_suspend_start(pm_message_t state); |
| 392 | extern int device_prepare_suspend(pm_message_t state); | ||
| 393 | 392 | ||
| 394 | extern void __suspend_report_result(const char *function, void *fn, int ret); | 393 | extern void __suspend_report_result(const char *function, void *fn, int ret); |
| 395 | 394 | ||
| @@ -403,7 +402,7 @@ extern void __suspend_report_result(const char *function, void *fn, int ret); | |||
| 403 | #define device_pm_lock() do {} while (0) | 402 | #define device_pm_lock() do {} while (0) |
| 404 | #define device_pm_unlock() do {} while (0) | 403 | #define device_pm_unlock() do {} while (0) |
| 405 | 404 | ||
| 406 | static inline int device_suspend(pm_message_t state) | 405 | static inline int dpm_suspend_start(pm_message_t state) |
| 407 | { | 406 | { |
| 408 | return 0; | 407 | return 0; |
| 409 | } | 408 | } |
diff --git a/include/linux/pnp.h b/include/linux/pnp.h index ca3c88773028..b063c7328ba5 100644 --- a/include/linux/pnp.h +++ b/include/linux/pnp.h | |||
| @@ -446,6 +446,7 @@ int pnp_start_dev(struct pnp_dev *dev); | |||
| 446 | int pnp_stop_dev(struct pnp_dev *dev); | 446 | int pnp_stop_dev(struct pnp_dev *dev); |
| 447 | int pnp_activate_dev(struct pnp_dev *dev); | 447 | int pnp_activate_dev(struct pnp_dev *dev); |
| 448 | int pnp_disable_dev(struct pnp_dev *dev); | 448 | int pnp_disable_dev(struct pnp_dev *dev); |
| 449 | int pnp_range_reserved(resource_size_t start, resource_size_t end); | ||
| 449 | 450 | ||
| 450 | /* protocol helpers */ | 451 | /* protocol helpers */ |
| 451 | int pnp_is_active(struct pnp_dev *dev); | 452 | int pnp_is_active(struct pnp_dev *dev); |
| @@ -476,6 +477,7 @@ static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; } | |||
| 476 | static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; } | 477 | static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; } |
| 477 | static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; } | 478 | static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; } |
| 478 | static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; } | 479 | static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; } |
| 480 | static inline int pnp_range_reserved(resource_size_t start, resource_size_t end) { return 0;} | ||
| 479 | 481 | ||
| 480 | /* protocol helpers */ | 482 | /* protocol helpers */ |
| 481 | static inline int pnp_is_active(struct pnp_dev *dev) { return 0; } | 483 | static inline int pnp_is_active(struct pnp_dev *dev) { return 0; } |
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index fbfa3d44d33d..e6e77d31c418 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h | |||
| @@ -93,20 +93,9 @@ struct vmcore { | |||
| 93 | 93 | ||
| 94 | #ifdef CONFIG_PROC_FS | 94 | #ifdef CONFIG_PROC_FS |
| 95 | 95 | ||
| 96 | extern spinlock_t proc_subdir_lock; | ||
| 97 | |||
| 98 | extern void proc_root_init(void); | 96 | extern void proc_root_init(void); |
| 99 | 97 | ||
| 100 | void proc_flush_task(struct task_struct *task); | 98 | void proc_flush_task(struct task_struct *task); |
| 101 | struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, struct nameidata *); | ||
| 102 | int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir); | ||
| 103 | unsigned long task_vsize(struct mm_struct *); | ||
| 104 | int task_statm(struct mm_struct *, int *, int *, int *, int *); | ||
| 105 | void task_mem(struct seq_file *, struct mm_struct *); | ||
| 106 | void clear_refs_smap(struct mm_struct *mm); | ||
| 107 | |||
| 108 | struct proc_dir_entry *de_get(struct proc_dir_entry *de); | ||
| 109 | void de_put(struct proc_dir_entry *de); | ||
| 110 | 99 | ||
| 111 | extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, | 100 | extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, |
| 112 | struct proc_dir_entry *parent); | 101 | struct proc_dir_entry *parent); |
| @@ -116,20 +105,7 @@ struct proc_dir_entry *proc_create_data(const char *name, mode_t mode, | |||
| 116 | void *data); | 105 | void *data); |
| 117 | extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent); | 106 | extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent); |
| 118 | 107 | ||
| 119 | extern struct vfsmount *proc_mnt; | ||
| 120 | struct pid_namespace; | 108 | struct pid_namespace; |
| 121 | extern int proc_fill_super(struct super_block *); | ||
| 122 | extern struct inode *proc_get_inode(struct super_block *, unsigned int, struct proc_dir_entry *); | ||
| 123 | |||
| 124 | /* | ||
| 125 | * These are generic /proc routines that use the internal | ||
| 126 | * "struct proc_dir_entry" tree to traverse the filesystem. | ||
| 127 | * | ||
| 128 | * The /proc root directory has extended versions to take care | ||
| 129 | * of the /proc/<pid> subdirectories. | ||
| 130 | */ | ||
| 131 | extern int proc_readdir(struct file *, void *, filldir_t); | ||
| 132 | extern struct dentry *proc_lookup(struct inode *, struct dentry *, struct nameidata *); | ||
| 133 | 109 | ||
| 134 | extern int pid_ns_prepare_proc(struct pid_namespace *ns); | 110 | extern int pid_ns_prepare_proc(struct pid_namespace *ns); |
| 135 | extern void pid_ns_release_proc(struct pid_namespace *ns); | 111 | extern void pid_ns_release_proc(struct pid_namespace *ns); |
diff --git a/include/linux/qnx4_fs.h b/include/linux/qnx4_fs.h index 787d19ea9f46..8b9aee1a9ce3 100644 --- a/include/linux/qnx4_fs.h +++ b/include/linux/qnx4_fs.h | |||
| @@ -85,65 +85,4 @@ struct qnx4_super_block { | |||
| 85 | struct qnx4_inode_entry AltBoot; | 85 | struct qnx4_inode_entry AltBoot; |
| 86 | }; | 86 | }; |
| 87 | 87 | ||
| 88 | #ifdef __KERNEL__ | ||
| 89 | |||
| 90 | #define QNX4_DEBUG 0 | ||
| 91 | |||
| 92 | #if QNX4_DEBUG | ||
| 93 | #define QNX4DEBUG(X) printk X | ||
| 94 | #else | ||
| 95 | #define QNX4DEBUG(X) (void) 0 | ||
| 96 | #endif | ||
| 97 | |||
| 98 | struct qnx4_sb_info { | ||
| 99 | struct buffer_head *sb_buf; /* superblock buffer */ | ||
| 100 | struct qnx4_super_block *sb; /* our superblock */ | ||
| 101 | unsigned int Version; /* may be useful */ | ||
| 102 | struct qnx4_inode_entry *BitMap; /* useful */ | ||
| 103 | }; | ||
| 104 | |||
| 105 | struct qnx4_inode_info { | ||
| 106 | struct qnx4_inode_entry raw; | ||
| 107 | loff_t mmu_private; | ||
| 108 | struct inode vfs_inode; | ||
| 109 | }; | ||
| 110 | |||
| 111 | extern struct inode *qnx4_iget(struct super_block *, unsigned long); | ||
| 112 | extern struct dentry *qnx4_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd); | ||
| 113 | extern unsigned long qnx4_count_free_blocks(struct super_block *sb); | ||
| 114 | extern unsigned long qnx4_block_map(struct inode *inode, long iblock); | ||
| 115 | |||
| 116 | extern struct buffer_head *qnx4_bread(struct inode *, int, int); | ||
| 117 | |||
| 118 | extern const struct inode_operations qnx4_file_inode_operations; | ||
| 119 | extern const struct inode_operations qnx4_dir_inode_operations; | ||
| 120 | extern const struct file_operations qnx4_file_operations; | ||
| 121 | extern const struct file_operations qnx4_dir_operations; | ||
| 122 | extern int qnx4_is_free(struct super_block *sb, long block); | ||
| 123 | extern int qnx4_set_bitmap(struct super_block *sb, long block, int busy); | ||
| 124 | extern int qnx4_create(struct inode *inode, struct dentry *dentry, int mode, struct nameidata *nd); | ||
| 125 | extern void qnx4_truncate(struct inode *inode); | ||
| 126 | extern void qnx4_free_inode(struct inode *inode); | ||
| 127 | extern int qnx4_unlink(struct inode *dir, struct dentry *dentry); | ||
| 128 | extern int qnx4_rmdir(struct inode *dir, struct dentry *dentry); | ||
| 129 | extern int qnx4_sync_file(struct file *file, struct dentry *dentry, int); | ||
| 130 | extern int qnx4_sync_inode(struct inode *inode); | ||
| 131 | |||
| 132 | static inline struct qnx4_sb_info *qnx4_sb(struct super_block *sb) | ||
| 133 | { | ||
| 134 | return sb->s_fs_info; | ||
| 135 | } | ||
| 136 | |||
| 137 | static inline struct qnx4_inode_info *qnx4_i(struct inode *inode) | ||
| 138 | { | ||
| 139 | return container_of(inode, struct qnx4_inode_info, vfs_inode); | ||
| 140 | } | ||
| 141 | |||
| 142 | static inline struct qnx4_inode_entry *qnx4_raw_inode(struct inode *inode) | ||
| 143 | { | ||
| 144 | return &qnx4_i(inode)->raw; | ||
| 145 | } | ||
| 146 | |||
| 147 | #endif /* __KERNEL__ */ | ||
| 148 | |||
| 149 | #endif | 88 | #endif |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 36353d95c8db..7bc457593684 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
| @@ -20,7 +20,12 @@ static inline struct quota_info *sb_dqopt(struct super_block *sb) | |||
| 20 | /* | 20 | /* |
| 21 | * declaration of quota_function calls in kernel. | 21 | * declaration of quota_function calls in kernel. |
| 22 | */ | 22 | */ |
| 23 | void sync_dquots(struct super_block *sb, int type); | 23 | void sync_quota_sb(struct super_block *sb, int type); |
| 24 | static inline void writeout_quota_sb(struct super_block *sb, int type) | ||
| 25 | { | ||
| 26 | if (sb->s_qcop->quota_sync) | ||
| 27 | sb->s_qcop->quota_sync(sb, type); | ||
| 28 | } | ||
| 24 | 29 | ||
| 25 | int dquot_initialize(struct inode *inode, int type); | 30 | int dquot_initialize(struct inode *inode, int type); |
| 26 | int dquot_drop(struct inode *inode); | 31 | int dquot_drop(struct inode *inode); |
| @@ -253,12 +258,7 @@ static inline void vfs_dq_free_inode(struct inode *inode) | |||
| 253 | inode->i_sb->dq_op->free_inode(inode, 1); | 258 | inode->i_sb->dq_op->free_inode(inode, 1); |
| 254 | } | 259 | } |
| 255 | 260 | ||
| 256 | /* The following two functions cannot be called inside a transaction */ | 261 | /* Cannot be called inside a transaction */ |
| 257 | static inline void vfs_dq_sync(struct super_block *sb) | ||
| 258 | { | ||
| 259 | sync_dquots(sb, -1); | ||
| 260 | } | ||
| 261 | |||
| 262 | static inline int vfs_dq_off(struct super_block *sb, int remount) | 262 | static inline int vfs_dq_off(struct super_block *sb, int remount) |
| 263 | { | 263 | { |
| 264 | int ret = -ENOSYS; | 264 | int ret = -ENOSYS; |
| @@ -334,7 +334,11 @@ static inline void vfs_dq_free_inode(struct inode *inode) | |||
| 334 | { | 334 | { |
| 335 | } | 335 | } |
| 336 | 336 | ||
| 337 | static inline void vfs_dq_sync(struct super_block *sb) | 337 | static inline void sync_quota_sb(struct super_block *sb, int type) |
| 338 | { | ||
| 339 | } | ||
| 340 | |||
| 341 | static inline void writeout_quota_sb(struct super_block *sb, int type) | ||
| 338 | { | 342 | { |
| 339 | } | 343 | } |
| 340 | 344 | ||
diff --git a/include/linux/regulator/lp3971.h b/include/linux/regulator/lp3971.h new file mode 100644 index 000000000000..61401649fe7d --- /dev/null +++ b/include/linux/regulator/lp3971.h | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | /* | ||
| 2 | * National Semiconductors LP3971 PMIC chip client interface | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Samsung Electronics | ||
| 5 | * Author: Marek Szyprowski <m.szyprowski@samsung.com> | ||
| 6 | * | ||
| 7 | * Based on wm8400.h | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License as published by | ||
| 11 | * the Free Software Foundation; either version 2 of the License, or | ||
| 12 | * (at your option) any later version. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 22 | */ | ||
| 23 | |||
| 24 | #ifndef __LINUX_REGULATOR_LP3971_H | ||
| 25 | #define __LINUX_REGULATOR_LP3971_H | ||
| 26 | |||
| 27 | #include <linux/regulator/machine.h> | ||
| 28 | |||
| 29 | #define LP3971_LDO1 0 | ||
| 30 | #define LP3971_LDO2 1 | ||
| 31 | #define LP3971_LDO3 2 | ||
| 32 | #define LP3971_LDO4 3 | ||
| 33 | #define LP3971_LDO5 4 | ||
| 34 | |||
| 35 | #define LP3971_DCDC1 5 | ||
| 36 | #define LP3971_DCDC2 6 | ||
| 37 | #define LP3971_DCDC3 7 | ||
| 38 | |||
| 39 | #define LP3971_NUM_REGULATORS 8 | ||
| 40 | |||
| 41 | struct lp3971_regulator_subdev { | ||
| 42 | int id; | ||
| 43 | struct regulator_init_data *initdata; | ||
| 44 | }; | ||
| 45 | |||
| 46 | struct lp3971_platform_data { | ||
| 47 | int num_regulators; | ||
| 48 | struct lp3971_regulator_subdev *regulators; | ||
| 49 | }; | ||
| 50 | |||
| 51 | #endif | ||
diff --git a/include/linux/regulator/max1586.h b/include/linux/regulator/max1586.h new file mode 100644 index 000000000000..44563192bf16 --- /dev/null +++ b/include/linux/regulator/max1586.h | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | /* | ||
| 2 | * max1586.h -- Voltage regulation for the Maxim 1586 | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Robert Jarzmik | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef REGULATOR_MAX1586 | ||
| 22 | #define REGULATOR_MAX1586 | ||
| 23 | |||
| 24 | #include <linux/regulator/machine.h> | ||
| 25 | |||
| 26 | #define MAX1586_V3 0 | ||
| 27 | #define MAX1586_V6 1 | ||
| 28 | |||
| 29 | /* precalculated values for v3_gain */ | ||
| 30 | #define MAX1586_GAIN_NO_R24 1000000 /* 700000 .. 1475000 mV */ | ||
| 31 | #define MAX1586_GAIN_R24_3k32 1051098 /* 735768 .. 1550369 mV */ | ||
| 32 | #define MAX1586_GAIN_R24_5k11 1078648 /* 755053 .. 1591005 mV */ | ||
| 33 | #define MAX1586_GAIN_R24_7k5 1115432 /* 780802 .. 1645262 mV */ | ||
| 34 | |||
| 35 | /** | ||
| 36 | * max1586_subdev_data - regulator data | ||
| 37 | * @id: regulator Id (either MAX1586_V3 or MAX1586_V6) | ||
| 38 | * @name: regulator cute name (example for V3: "vcc_core") | ||
| 39 | * @platform_data: regulator init data (contraints, supplies, ...) | ||
| 40 | */ | ||
| 41 | struct max1586_subdev_data { | ||
| 42 | int id; | ||
| 43 | char *name; | ||
| 44 | struct regulator_init_data *platform_data; | ||
| 45 | }; | ||
| 46 | |||
| 47 | /** | ||
| 48 | * max1586_platform_data - platform data for max1586 | ||
| 49 | * @num_subdevs: number of regultors used (may be 1 or 2) | ||
| 50 | * @subdevs: regulator used | ||
| 51 | * At most, there will be a regulator for V3 and one for V6 voltages. | ||
| 52 | * @v3_gain: gain on the V3 voltage output multiplied by 1e6. | ||
| 53 | * This can be calculated as ((1 + R24/R25 + R24/185.5kOhm) * 1e6) | ||
| 54 | * for an external resistor configuration as described in the | ||
| 55 | * data sheet (R25=100kOhm). | ||
| 56 | */ | ||
| 57 | struct max1586_platform_data { | ||
| 58 | int num_subdevs; | ||
| 59 | struct max1586_subdev_data *subdevs; | ||
| 60 | int v3_gain; | ||
| 61 | }; | ||
| 62 | |||
| 63 | #endif | ||
diff --git a/include/linux/regulator/userspace-consumer.h b/include/linux/regulator/userspace-consumer.h new file mode 100644 index 000000000000..b4554ce9d4bb --- /dev/null +++ b/include/linux/regulator/userspace-consumer.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | #ifndef __REGULATOR_PLATFORM_CONSUMER_H_ | ||
| 2 | #define __REGULATOR_PLATFORM_CONSUMER_H_ | ||
| 3 | |||
| 4 | struct regulator_consumer_supply; | ||
| 5 | |||
| 6 | /** | ||
| 7 | * struct regulator_userspace_consumer_data - line consumer | ||
| 8 | * initialisation data. | ||
| 9 | * | ||
| 10 | * @name: Name for the consumer line | ||
| 11 | * @num_supplies: Number of supplies feeding the line | ||
| 12 | * @supplies: Supplies configuration. | ||
| 13 | * @init_on: Set if the regulators supplying the line should be | ||
| 14 | * enabled during initialisation | ||
| 15 | */ | ||
| 16 | struct regulator_userspace_consumer_data { | ||
| 17 | const char *name; | ||
| 18 | |||
| 19 | int num_supplies; | ||
| 20 | struct regulator_bulk_data *supplies; | ||
| 21 | |||
| 22 | bool init_on; | ||
| 23 | }; | ||
| 24 | |||
| 25 | #endif /* __REGULATOR_PLATFORM_CONSUMER_H_ */ | ||
diff --git a/include/linux/reiserfs_fs_sb.h b/include/linux/reiserfs_fs_sb.h index 6473650c28f1..dab68bbed675 100644 --- a/include/linux/reiserfs_fs_sb.h +++ b/include/linux/reiserfs_fs_sb.h | |||
| @@ -453,6 +453,7 @@ enum reiserfs_mount_options { | |||
| 453 | REISERFS_ATTRS, | 453 | REISERFS_ATTRS, |
| 454 | REISERFS_XATTRS_USER, | 454 | REISERFS_XATTRS_USER, |
| 455 | REISERFS_POSIXACL, | 455 | REISERFS_POSIXACL, |
| 456 | REISERFS_EXPOSE_PRIVROOT, | ||
| 456 | REISERFS_BARRIER_NONE, | 457 | REISERFS_BARRIER_NONE, |
| 457 | REISERFS_BARRIER_FLUSH, | 458 | REISERFS_BARRIER_FLUSH, |
| 458 | 459 | ||
| @@ -490,6 +491,7 @@ enum reiserfs_mount_options { | |||
| 490 | #define reiserfs_data_writeback(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK)) | 491 | #define reiserfs_data_writeback(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK)) |
| 491 | #define reiserfs_xattrs_user(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_XATTRS_USER)) | 492 | #define reiserfs_xattrs_user(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_XATTRS_USER)) |
| 492 | #define reiserfs_posixacl(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_POSIXACL)) | 493 | #define reiserfs_posixacl(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_POSIXACL)) |
| 494 | #define reiserfs_expose_privroot(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_EXPOSE_PRIVROOT)) | ||
| 493 | #define reiserfs_xattrs_optional(s) (reiserfs_xattrs_user(s) || reiserfs_posixacl(s)) | 495 | #define reiserfs_xattrs_optional(s) (reiserfs_xattrs_user(s) || reiserfs_posixacl(s)) |
| 494 | #define reiserfs_barrier_none(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_NONE)) | 496 | #define reiserfs_barrier_none(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_NONE)) |
| 495 | #define reiserfs_barrier_flush(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_FLUSH)) | 497 | #define reiserfs_barrier_flush(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_FLUSH)) |
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h index 164332cbb77c..16e39c7a67fc 100644 --- a/include/linux/rfkill.h +++ b/include/linux/rfkill.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | /* | 4 | /* |
| 5 | * Copyright (C) 2006 - 2007 Ivo van Doorn | 5 | * Copyright (C) 2006 - 2007 Ivo van Doorn |
| 6 | * Copyright (C) 2007 Dmitry Torokhov | 6 | * Copyright (C) 2007 Dmitry Torokhov |
| 7 | * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> | ||
| 7 | * | 8 | * |
| 8 | * This program is free software; you can redistribute it and/or modify | 9 | * 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 | 10 | * it under the terms of the GNU General Public License as published by |
| @@ -22,131 +23,331 @@ | |||
| 22 | */ | 23 | */ |
| 23 | 24 | ||
| 24 | #include <linux/types.h> | 25 | #include <linux/types.h> |
| 25 | #include <linux/kernel.h> | 26 | |
| 26 | #include <linux/list.h> | 27 | /* define userspace visible states */ |
| 27 | #include <linux/mutex.h> | 28 | #define RFKILL_STATE_SOFT_BLOCKED 0 |
| 28 | #include <linux/device.h> | 29 | #define RFKILL_STATE_UNBLOCKED 1 |
| 29 | #include <linux/leds.h> | 30 | #define RFKILL_STATE_HARD_BLOCKED 2 |
| 30 | 31 | ||
| 31 | /** | 32 | /** |
| 32 | * enum rfkill_type - type of rfkill switch. | 33 | * enum rfkill_type - type of rfkill switch. |
| 33 | * RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. | 34 | * |
| 34 | * RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. | 35 | * @RFKILL_TYPE_ALL: toggles all switches (userspace only) |
| 35 | * RFKILL_TYPE_UWB: switch is on a ultra wideband device. | 36 | * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. |
| 36 | * RFKILL_TYPE_WIMAX: switch is on a WiMAX device. | 37 | * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. |
| 37 | * RFKILL_TYPE_WWAN: switch is on a wireless WAN device. | 38 | * @RFKILL_TYPE_UWB: switch is on a ultra wideband device. |
| 39 | * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device. | ||
| 40 | * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device. | ||
| 41 | * @NUM_RFKILL_TYPES: number of defined rfkill types | ||
| 38 | */ | 42 | */ |
| 39 | enum rfkill_type { | 43 | enum rfkill_type { |
| 40 | RFKILL_TYPE_WLAN , | 44 | RFKILL_TYPE_ALL = 0, |
| 45 | RFKILL_TYPE_WLAN, | ||
| 41 | RFKILL_TYPE_BLUETOOTH, | 46 | RFKILL_TYPE_BLUETOOTH, |
| 42 | RFKILL_TYPE_UWB, | 47 | RFKILL_TYPE_UWB, |
| 43 | RFKILL_TYPE_WIMAX, | 48 | RFKILL_TYPE_WIMAX, |
| 44 | RFKILL_TYPE_WWAN, | 49 | RFKILL_TYPE_WWAN, |
| 45 | RFKILL_TYPE_MAX, | 50 | NUM_RFKILL_TYPES, |
| 46 | }; | 51 | }; |
| 47 | 52 | ||
| 48 | enum rfkill_state { | 53 | /** |
| 49 | RFKILL_STATE_SOFT_BLOCKED = 0, /* Radio output blocked */ | 54 | * enum rfkill_operation - operation types |
| 50 | RFKILL_STATE_UNBLOCKED = 1, /* Radio output allowed */ | 55 | * @RFKILL_OP_ADD: a device was added |
| 51 | RFKILL_STATE_HARD_BLOCKED = 2, /* Output blocked, non-overrideable */ | 56 | * @RFKILL_OP_DEL: a device was removed |
| 52 | RFKILL_STATE_MAX, /* marker for last valid state */ | 57 | * @RFKILL_OP_CHANGE: a device's state changed -- userspace changes one device |
| 58 | * @RFKILL_OP_CHANGE_ALL: userspace changes all devices (of a type, or all) | ||
| 59 | */ | ||
| 60 | enum rfkill_operation { | ||
| 61 | RFKILL_OP_ADD = 0, | ||
| 62 | RFKILL_OP_DEL, | ||
| 63 | RFKILL_OP_CHANGE, | ||
| 64 | RFKILL_OP_CHANGE_ALL, | ||
| 53 | }; | 65 | }; |
| 54 | 66 | ||
| 55 | /* | 67 | /** |
| 56 | * These are DEPRECATED, drivers using them should be verified to | 68 | * struct rfkill_event - events for userspace on /dev/rfkill |
| 57 | * comply with the rfkill usage guidelines in Documentation/rfkill.txt | 69 | * @idx: index of dev rfkill |
| 58 | * and then converted to use the new names for rfkill_state | 70 | * @type: type of the rfkill struct |
| 59 | */ | 71 | * @op: operation code |
| 60 | #define RFKILL_STATE_OFF RFKILL_STATE_SOFT_BLOCKED | 72 | * @hard: hard state (0/1) |
| 61 | #define RFKILL_STATE_ON RFKILL_STATE_UNBLOCKED | 73 | * @soft: soft state (0/1) |
| 62 | 74 | * | |
| 63 | /** | 75 | * Structure used for userspace communication on /dev/rfkill, |
| 64 | * struct rfkill - rfkill control structure. | 76 | * used for events from the kernel and control to the kernel. |
| 65 | * @name: Name of the switch. | 77 | */ |
| 66 | * @type: Radio type which the button controls, the value stored | 78 | struct rfkill_event { |
| 67 | * here should be a value from enum rfkill_type. | 79 | __u32 idx; |
| 68 | * @state: State of the switch, "UNBLOCKED" means radio can operate. | 80 | __u8 type; |
| 69 | * @user_claim_unsupported: Whether the hardware supports exclusive | 81 | __u8 op; |
| 70 | * RF-kill control by userspace. Set this before registering. | 82 | __u8 soft, hard; |
| 71 | * @user_claim: Set when the switch is controlled exlusively by userspace. | 83 | } __packed; |
| 72 | * @mutex: Guards switch state transitions. It serializes callbacks | ||
| 73 | * and also protects the state. | ||
| 74 | * @data: Pointer to the RF button drivers private data which will be | ||
| 75 | * passed along when toggling radio state. | ||
| 76 | * @toggle_radio(): Mandatory handler to control state of the radio. | ||
| 77 | * only RFKILL_STATE_SOFT_BLOCKED and RFKILL_STATE_UNBLOCKED are | ||
| 78 | * valid parameters. | ||
| 79 | * @get_state(): handler to read current radio state from hardware, | ||
| 80 | * may be called from atomic context, should return 0 on success. | ||
| 81 | * Either this handler OR judicious use of rfkill_force_state() is | ||
| 82 | * MANDATORY for any driver capable of RFKILL_STATE_HARD_BLOCKED. | ||
| 83 | * @led_trigger: A LED trigger for this button's LED. | ||
| 84 | * @dev: Device structure integrating the switch into device tree. | ||
| 85 | * @node: Used to place switch into list of all switches known to the | ||
| 86 | * the system. | ||
| 87 | * | ||
| 88 | * This structure represents a RF switch located on a network device. | ||
| 89 | */ | ||
| 90 | struct rfkill { | ||
| 91 | const char *name; | ||
| 92 | enum rfkill_type type; | ||
| 93 | |||
| 94 | bool user_claim_unsupported; | ||
| 95 | bool user_claim; | ||
| 96 | |||
| 97 | /* the mutex serializes callbacks and also protects | ||
| 98 | * the state */ | ||
| 99 | struct mutex mutex; | ||
| 100 | enum rfkill_state state; | ||
| 101 | void *data; | ||
| 102 | int (*toggle_radio)(void *data, enum rfkill_state state); | ||
| 103 | int (*get_state)(void *data, enum rfkill_state *state); | ||
| 104 | 84 | ||
| 105 | #ifdef CONFIG_RFKILL_LEDS | 85 | /* ioctl for turning off rfkill-input (if present) */ |
| 106 | struct led_trigger led_trigger; | 86 | #define RFKILL_IOC_MAGIC 'R' |
| 107 | #endif | 87 | #define RFKILL_IOC_NOINPUT 1 |
| 88 | #define RFKILL_IOCTL_NOINPUT _IO(RFKILL_IOC_MAGIC, RFKILL_IOC_NOINPUT) | ||
| 89 | |||
| 90 | /* and that's all userspace gets */ | ||
| 91 | #ifdef __KERNEL__ | ||
| 92 | /* don't allow anyone to use these in the kernel */ | ||
| 93 | enum rfkill_user_states { | ||
| 94 | RFKILL_USER_STATE_SOFT_BLOCKED = RFKILL_STATE_SOFT_BLOCKED, | ||
| 95 | RFKILL_USER_STATE_UNBLOCKED = RFKILL_STATE_UNBLOCKED, | ||
| 96 | RFKILL_USER_STATE_HARD_BLOCKED = RFKILL_STATE_HARD_BLOCKED, | ||
| 97 | }; | ||
| 98 | #undef RFKILL_STATE_SOFT_BLOCKED | ||
| 99 | #undef RFKILL_STATE_UNBLOCKED | ||
| 100 | #undef RFKILL_STATE_HARD_BLOCKED | ||
| 101 | |||
| 102 | #include <linux/types.h> | ||
| 103 | #include <linux/kernel.h> | ||
| 104 | #include <linux/list.h> | ||
| 105 | #include <linux/mutex.h> | ||
| 106 | #include <linux/device.h> | ||
| 107 | #include <linux/leds.h> | ||
| 108 | #include <linux/err.h> | ||
| 109 | |||
| 110 | /* this is opaque */ | ||
| 111 | struct rfkill; | ||
| 108 | 112 | ||
| 109 | struct device dev; | 113 | /** |
| 110 | struct list_head node; | 114 | * struct rfkill_ops - rfkill driver methods |
| 111 | enum rfkill_state state_for_resume; | 115 | * |
| 116 | * @poll: poll the rfkill block state(s) -- only assign this method | ||
| 117 | * when you need polling. When called, simply call one of the | ||
| 118 | * rfkill_set{,_hw,_sw}_state family of functions. If the hw | ||
| 119 | * is getting unblocked you need to take into account the return | ||
| 120 | * value of those functions to make sure the software block is | ||
| 121 | * properly used. | ||
| 122 | * @query: query the rfkill block state(s) and call exactly one of the | ||
| 123 | * rfkill_set{,_hw,_sw}_state family of functions. Assign this | ||
| 124 | * method if input events can cause hardware state changes to make | ||
| 125 | * the rfkill core query your driver before setting a requested | ||
| 126 | * block. | ||
| 127 | * @set_block: turn the transmitter on (blocked == false) or off | ||
| 128 | * (blocked == true) -- ignore and return 0 when hard blocked. | ||
| 129 | * This callback must be assigned. | ||
| 130 | */ | ||
| 131 | struct rfkill_ops { | ||
| 132 | void (*poll)(struct rfkill *rfkill, void *data); | ||
| 133 | void (*query)(struct rfkill *rfkill, void *data); | ||
| 134 | int (*set_block)(void *data, bool blocked); | ||
| 112 | }; | 135 | }; |
| 113 | #define to_rfkill(d) container_of(d, struct rfkill, dev) | ||
| 114 | 136 | ||
| 115 | struct rfkill * __must_check rfkill_allocate(struct device *parent, | 137 | #if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE) |
| 116 | enum rfkill_type type); | 138 | /** |
| 117 | void rfkill_free(struct rfkill *rfkill); | 139 | * rfkill_alloc - allocate rfkill structure |
| 140 | * @name: name of the struct -- the string is not copied internally | ||
| 141 | * @parent: device that has rf switch on it | ||
| 142 | * @type: type of the switch (RFKILL_TYPE_*) | ||
| 143 | * @ops: rfkill methods | ||
| 144 | * @ops_data: data passed to each method | ||
| 145 | * | ||
| 146 | * This function should be called by the transmitter driver to allocate an | ||
| 147 | * rfkill structure. Returns %NULL on failure. | ||
| 148 | */ | ||
| 149 | struct rfkill * __must_check rfkill_alloc(const char *name, | ||
| 150 | struct device *parent, | ||
| 151 | const enum rfkill_type type, | ||
| 152 | const struct rfkill_ops *ops, | ||
| 153 | void *ops_data); | ||
| 154 | |||
| 155 | /** | ||
| 156 | * rfkill_register - Register a rfkill structure. | ||
| 157 | * @rfkill: rfkill structure to be registered | ||
| 158 | * | ||
| 159 | * This function should be called by the transmitter driver to register | ||
| 160 | * the rfkill structure. Before calling this function the driver needs | ||
| 161 | * to be ready to service method calls from rfkill. | ||
| 162 | * | ||
| 163 | * If the software blocked state is not set before registration, | ||
| 164 | * set_block will be called to initialize it to a default value. | ||
| 165 | * | ||
| 166 | * If the hardware blocked state is not set before registration, | ||
| 167 | * it is assumed to be unblocked. | ||
| 168 | */ | ||
| 118 | int __must_check rfkill_register(struct rfkill *rfkill); | 169 | int __must_check rfkill_register(struct rfkill *rfkill); |
| 170 | |||
| 171 | /** | ||
| 172 | * rfkill_pause_polling(struct rfkill *rfkill) | ||
| 173 | * | ||
| 174 | * Pause polling -- say transmitter is off for other reasons. | ||
| 175 | * NOTE: not necessary for suspend/resume -- in that case the | ||
| 176 | * core stops polling anyway | ||
| 177 | */ | ||
| 178 | void rfkill_pause_polling(struct rfkill *rfkill); | ||
| 179 | |||
| 180 | /** | ||
| 181 | * rfkill_resume_polling(struct rfkill *rfkill) | ||
| 182 | * | ||
| 183 | * Pause polling -- say transmitter is off for other reasons. | ||
| 184 | * NOTE: not necessary for suspend/resume -- in that case the | ||
| 185 | * core stops polling anyway | ||
| 186 | */ | ||
| 187 | void rfkill_resume_polling(struct rfkill *rfkill); | ||
| 188 | |||
| 189 | |||
| 190 | /** | ||
| 191 | * rfkill_unregister - Unregister a rfkill structure. | ||
| 192 | * @rfkill: rfkill structure to be unregistered | ||
| 193 | * | ||
| 194 | * This function should be called by the network driver during device | ||
| 195 | * teardown to destroy rfkill structure. Until it returns, the driver | ||
| 196 | * needs to be able to service method calls. | ||
| 197 | */ | ||
| 119 | void rfkill_unregister(struct rfkill *rfkill); | 198 | void rfkill_unregister(struct rfkill *rfkill); |
| 120 | 199 | ||
| 121 | int rfkill_force_state(struct rfkill *rfkill, enum rfkill_state state); | 200 | /** |
| 122 | int rfkill_set_default(enum rfkill_type type, enum rfkill_state state); | 201 | * rfkill_destroy - free rfkill structure |
| 202 | * @rfkill: rfkill structure to be destroyed | ||
| 203 | * | ||
| 204 | * Destroys the rfkill structure. | ||
| 205 | */ | ||
| 206 | void rfkill_destroy(struct rfkill *rfkill); | ||
| 207 | |||
| 208 | /** | ||
| 209 | * rfkill_set_hw_state - Set the internal rfkill hardware block state | ||
| 210 | * @rfkill: pointer to the rfkill class to modify. | ||
| 211 | * @state: the current hardware block state to set | ||
| 212 | * | ||
| 213 | * rfkill drivers that get events when the hard-blocked state changes | ||
| 214 | * use this function to notify the rfkill core (and through that also | ||
| 215 | * userspace) of the current state. They should also use this after | ||
| 216 | * resume if the state could have changed. | ||
| 217 | * | ||
| 218 | * You need not (but may) call this function if poll_state is assigned. | ||
| 219 | * | ||
| 220 | * This function can be called in any context, even from within rfkill | ||
| 221 | * callbacks. | ||
| 222 | * | ||
| 223 | * The function returns the combined block state (true if transmitter | ||
| 224 | * should be blocked) so that drivers need not keep track of the soft | ||
| 225 | * block state -- which they might not be able to. | ||
| 226 | */ | ||
| 227 | bool __must_check rfkill_set_hw_state(struct rfkill *rfkill, bool blocked); | ||
| 228 | |||
| 229 | /** | ||
| 230 | * rfkill_set_sw_state - Set the internal rfkill software block state | ||
| 231 | * @rfkill: pointer to the rfkill class to modify. | ||
| 232 | * @state: the current software block state to set | ||
| 233 | * | ||
| 234 | * rfkill drivers that get events when the soft-blocked state changes | ||
| 235 | * (yes, some platforms directly act on input but allow changing again) | ||
| 236 | * use this function to notify the rfkill core (and through that also | ||
| 237 | * userspace) of the current state. It is not necessary to notify on | ||
| 238 | * resume; since hibernation can always change the soft-blocked state, | ||
| 239 | * the rfkill core will unconditionally restore the previous state. | ||
| 240 | * | ||
| 241 | * This function can be called in any context, even from within rfkill | ||
| 242 | * callbacks. | ||
| 243 | * | ||
| 244 | * The function returns the combined block state (true if transmitter | ||
| 245 | * should be blocked). | ||
| 246 | */ | ||
| 247 | bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked); | ||
| 248 | |||
| 249 | /** | ||
| 250 | * rfkill_set_states - Set the internal rfkill block states | ||
| 251 | * @rfkill: pointer to the rfkill class to modify. | ||
| 252 | * @sw: the current software block state to set | ||
| 253 | * @hw: the current hardware block state to set | ||
| 254 | * | ||
| 255 | * This function can be called in any context, even from within rfkill | ||
| 256 | * callbacks. | ||
| 257 | */ | ||
| 258 | void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw); | ||
| 123 | 259 | ||
| 124 | /** | 260 | /** |
| 125 | * rfkill_state_complement - return complementar state | 261 | * rfkill_blocked - query rfkill block |
| 126 | * @state: state to return the complement of | ||
| 127 | * | 262 | * |
| 128 | * Returns RFKILL_STATE_SOFT_BLOCKED if @state is RFKILL_STATE_UNBLOCKED, | 263 | * @rfkill: rfkill struct to query |
| 129 | * returns RFKILL_STATE_UNBLOCKED otherwise. | ||
| 130 | */ | 264 | */ |
| 131 | static inline enum rfkill_state rfkill_state_complement(enum rfkill_state state) | 265 | bool rfkill_blocked(struct rfkill *rfkill); |
| 266 | #else /* !RFKILL */ | ||
| 267 | static inline struct rfkill * __must_check | ||
| 268 | rfkill_alloc(const char *name, | ||
| 269 | struct device *parent, | ||
| 270 | const enum rfkill_type type, | ||
| 271 | const struct rfkill_ops *ops, | ||
| 272 | void *ops_data) | ||
| 273 | { | ||
| 274 | return ERR_PTR(-ENODEV); | ||
| 275 | } | ||
| 276 | |||
| 277 | static inline int __must_check rfkill_register(struct rfkill *rfkill) | ||
| 278 | { | ||
| 279 | if (rfkill == ERR_PTR(-ENODEV)) | ||
| 280 | return 0; | ||
| 281 | return -EINVAL; | ||
| 282 | } | ||
| 283 | |||
| 284 | static inline void rfkill_pause_polling(struct rfkill *rfkill) | ||
| 285 | { | ||
| 286 | } | ||
| 287 | |||
| 288 | static inline void rfkill_resume_polling(struct rfkill *rfkill) | ||
| 289 | { | ||
| 290 | } | ||
| 291 | |||
| 292 | static inline void rfkill_unregister(struct rfkill *rfkill) | ||
| 293 | { | ||
| 294 | } | ||
| 295 | |||
| 296 | static inline void rfkill_destroy(struct rfkill *rfkill) | ||
| 297 | { | ||
| 298 | } | ||
| 299 | |||
| 300 | static inline bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked) | ||
| 301 | { | ||
| 302 | return blocked; | ||
| 303 | } | ||
| 304 | |||
| 305 | static inline bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked) | ||
| 132 | { | 306 | { |
| 133 | return (state == RFKILL_STATE_UNBLOCKED) ? | 307 | return blocked; |
| 134 | RFKILL_STATE_SOFT_BLOCKED : RFKILL_STATE_UNBLOCKED; | ||
| 135 | } | 308 | } |
| 136 | 309 | ||
| 310 | static inline void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw) | ||
| 311 | { | ||
| 312 | } | ||
| 313 | |||
| 314 | static inline bool rfkill_blocked(struct rfkill *rfkill) | ||
| 315 | { | ||
| 316 | return false; | ||
| 317 | } | ||
| 318 | #endif /* RFKILL || RFKILL_MODULE */ | ||
| 319 | |||
| 320 | |||
| 321 | #ifdef CONFIG_RFKILL_LEDS | ||
| 137 | /** | 322 | /** |
| 138 | * rfkill_get_led_name - Get the LED trigger name for the button's LED. | 323 | * rfkill_get_led_trigger_name - Get the LED trigger name for the button's LED. |
| 139 | * This function might return a NULL pointer if registering of the | 324 | * This function might return a NULL pointer if registering of the |
| 140 | * LED trigger failed. | 325 | * LED trigger failed. Use this as "default_trigger" for the LED. |
| 141 | * Use this as "default_trigger" for the LED. | ||
| 142 | */ | 326 | */ |
| 143 | static inline char *rfkill_get_led_name(struct rfkill *rfkill) | 327 | const char *rfkill_get_led_trigger_name(struct rfkill *rfkill); |
| 144 | { | 328 | |
| 145 | #ifdef CONFIG_RFKILL_LEDS | 329 | /** |
| 146 | return (char *)(rfkill->led_trigger.name); | 330 | * rfkill_set_led_trigger_name -- set the LED trigger name |
| 331 | * @rfkill: rfkill struct | ||
| 332 | * @name: LED trigger name | ||
| 333 | * | ||
| 334 | * This function sets the LED trigger name of the radio LED | ||
| 335 | * trigger that rfkill creates. It is optional, but if called | ||
| 336 | * must be called before rfkill_register() to be effective. | ||
| 337 | */ | ||
| 338 | void rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name); | ||
| 147 | #else | 339 | #else |
| 340 | static inline const char *rfkill_get_led_trigger_name(struct rfkill *rfkill) | ||
| 341 | { | ||
| 148 | return NULL; | 342 | return NULL; |
| 149 | #endif | ||
| 150 | } | 343 | } |
| 151 | 344 | ||
| 345 | static inline void | ||
| 346 | rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name) | ||
| 347 | { | ||
| 348 | } | ||
| 349 | #endif | ||
| 350 | |||
| 351 | #endif /* __KERNEL__ */ | ||
| 352 | |||
| 152 | #endif /* RFKILL_H */ | 353 | #endif /* RFKILL_H */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 4896fdfec913..c900aa530070 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -261,6 +261,7 @@ extern void task_rq_unlock_wait(struct task_struct *p); | |||
| 261 | extern cpumask_var_t nohz_cpu_mask; | 261 | extern cpumask_var_t nohz_cpu_mask; |
| 262 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ) | 262 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ) |
| 263 | extern int select_nohz_load_balancer(int cpu); | 263 | extern int select_nohz_load_balancer(int cpu); |
| 264 | extern int get_nohz_load_balancer(void); | ||
| 264 | #else | 265 | #else |
| 265 | static inline int select_nohz_load_balancer(int cpu) | 266 | static inline int select_nohz_load_balancer(int cpu) |
| 266 | { | 267 | { |
| @@ -1796,11 +1797,23 @@ extern unsigned int sysctl_sched_child_runs_first; | |||
| 1796 | extern unsigned int sysctl_sched_features; | 1797 | extern unsigned int sysctl_sched_features; |
| 1797 | extern unsigned int sysctl_sched_migration_cost; | 1798 | extern unsigned int sysctl_sched_migration_cost; |
| 1798 | extern unsigned int sysctl_sched_nr_migrate; | 1799 | extern unsigned int sysctl_sched_nr_migrate; |
| 1800 | extern unsigned int sysctl_timer_migration; | ||
| 1799 | 1801 | ||
| 1800 | int sched_nr_latency_handler(struct ctl_table *table, int write, | 1802 | int sched_nr_latency_handler(struct ctl_table *table, int write, |
| 1801 | struct file *file, void __user *buffer, size_t *length, | 1803 | struct file *file, void __user *buffer, size_t *length, |
| 1802 | loff_t *ppos); | 1804 | loff_t *ppos); |
| 1803 | #endif | 1805 | #endif |
| 1806 | #ifdef CONFIG_SCHED_DEBUG | ||
| 1807 | static inline unsigned int get_sysctl_timer_migration(void) | ||
| 1808 | { | ||
| 1809 | return sysctl_timer_migration; | ||
| 1810 | } | ||
| 1811 | #else | ||
| 1812 | static inline unsigned int get_sysctl_timer_migration(void) | ||
| 1813 | { | ||
| 1814 | return 1; | ||
| 1815 | } | ||
| 1816 | #endif | ||
| 1804 | extern unsigned int sysctl_sched_rt_period; | 1817 | extern unsigned int sysctl_sched_rt_period; |
| 1805 | extern int sysctl_sched_rt_runtime; | 1818 | extern int sysctl_sched_rt_runtime; |
| 1806 | 1819 | ||
| @@ -2212,6 +2225,12 @@ static inline int test_tsk_need_resched(struct task_struct *tsk) | |||
| 2212 | return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); | 2225 | return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); |
| 2213 | } | 2226 | } |
| 2214 | 2227 | ||
| 2228 | static inline int restart_syscall(void) | ||
| 2229 | { | ||
| 2230 | set_tsk_thread_flag(current, TIF_SIGPENDING); | ||
| 2231 | return -ERESTARTNOINTR; | ||
| 2232 | } | ||
| 2233 | |||
| 2215 | static inline int signal_pending(struct task_struct *p) | 2234 | static inline int signal_pending(struct task_struct *p) |
| 2216 | { | 2235 | { |
| 2217 | return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING)); | 2236 | return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING)); |
diff --git a/include/linux/sctp.h b/include/linux/sctp.h index c2731bfe04d8..b464b9d3d242 100644 --- a/include/linux/sctp.h +++ b/include/linux/sctp.h | |||
| @@ -487,17 +487,17 @@ typedef enum { | |||
| 487 | * | 487 | * |
| 488 | * Value Cause Code | 488 | * Value Cause Code |
| 489 | * --------- ---------------- | 489 | * --------- ---------------- |
| 490 | * 0x0100 Request to Delete Last Remaining IP Address. | 490 | * 0x00A0 Request to Delete Last Remaining IP Address. |
| 491 | * 0x0101 Operation Refused Due to Resource Shortage. | 491 | * 0x00A1 Operation Refused Due to Resource Shortage. |
| 492 | * 0x0102 Request to Delete Source IP Address. | 492 | * 0x00A2 Request to Delete Source IP Address. |
| 493 | * 0x0103 Association Aborted due to illegal ASCONF-ACK | 493 | * 0x00A3 Association Aborted due to illegal ASCONF-ACK |
| 494 | * 0x0104 Request refused - no authorization. | 494 | * 0x00A4 Request refused - no authorization. |
| 495 | */ | 495 | */ |
| 496 | SCTP_ERROR_DEL_LAST_IP = cpu_to_be16(0x0100), | 496 | SCTP_ERROR_DEL_LAST_IP = cpu_to_be16(0x00A0), |
| 497 | SCTP_ERROR_RSRC_LOW = cpu_to_be16(0x0101), | 497 | SCTP_ERROR_RSRC_LOW = cpu_to_be16(0x00A1), |
| 498 | SCTP_ERROR_DEL_SRC_IP = cpu_to_be16(0x0102), | 498 | SCTP_ERROR_DEL_SRC_IP = cpu_to_be16(0x00A2), |
| 499 | SCTP_ERROR_ASCONF_ACK = cpu_to_be16(0x0103), | 499 | SCTP_ERROR_ASCONF_ACK = cpu_to_be16(0x00A3), |
| 500 | SCTP_ERROR_REQ_REFUSED = cpu_to_be16(0x0104), | 500 | SCTP_ERROR_REQ_REFUSED = cpu_to_be16(0x00A4), |
| 501 | 501 | ||
| 502 | /* AUTH Section 4. New Error Cause | 502 | /* AUTH Section 4. New Error Cause |
| 503 | * | 503 | * |
diff --git a/include/linux/section-names.h b/include/linux/section-names.h deleted file mode 100644 index c956f4eb2adf..000000000000 --- a/include/linux/section-names.h +++ /dev/null | |||
| @@ -1,6 +0,0 @@ | |||
| 1 | #ifndef __LINUX_SECTION_NAMES_H | ||
| 2 | #define __LINUX_SECTION_NAMES_H | ||
| 3 | |||
| 4 | #define HEAD_TEXT_SECTION .head.text | ||
| 5 | |||
| 6 | #endif /* !__LINUX_SECTION_NAMES_H */ | ||
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 5fd389162f01..fa51293f2708 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -189,20 +189,23 @@ struct skb_shared_info { | |||
| 189 | atomic_t dataref; | 189 | atomic_t dataref; |
| 190 | unsigned short nr_frags; | 190 | unsigned short nr_frags; |
| 191 | unsigned short gso_size; | 191 | unsigned short gso_size; |
| 192 | #ifdef CONFIG_HAS_DMA | ||
| 193 | dma_addr_t dma_head; | ||
| 194 | #endif | ||
| 192 | /* Warning: this field is not always filled in (UFO)! */ | 195 | /* Warning: this field is not always filled in (UFO)! */ |
| 193 | unsigned short gso_segs; | 196 | unsigned short gso_segs; |
| 194 | unsigned short gso_type; | 197 | unsigned short gso_type; |
| 195 | __be32 ip6_frag_id; | 198 | __be32 ip6_frag_id; |
| 196 | union skb_shared_tx tx_flags; | 199 | union skb_shared_tx tx_flags; |
| 197 | #ifdef CONFIG_HAS_DMA | ||
| 198 | unsigned int num_dma_maps; | ||
| 199 | #endif | ||
| 200 | struct sk_buff *frag_list; | 200 | struct sk_buff *frag_list; |
| 201 | struct skb_shared_hwtstamps hwtstamps; | 201 | struct skb_shared_hwtstamps hwtstamps; |
| 202 | skb_frag_t frags[MAX_SKB_FRAGS]; | 202 | skb_frag_t frags[MAX_SKB_FRAGS]; |
| 203 | #ifdef CONFIG_HAS_DMA | 203 | #ifdef CONFIG_HAS_DMA |
| 204 | dma_addr_t dma_maps[MAX_SKB_FRAGS + 1]; | 204 | dma_addr_t dma_maps[MAX_SKB_FRAGS]; |
| 205 | #endif | 205 | #endif |
| 206 | /* Intermediate layers must ensure that destructor_arg | ||
| 207 | * remains valid until skb destructor */ | ||
| 208 | void * destructor_arg; | ||
| 206 | }; | 209 | }; |
| 207 | 210 | ||
| 208 | /* We divide dataref into two halves. The higher 16 bits hold references | 211 | /* We divide dataref into two halves. The higher 16 bits hold references |
| @@ -301,9 +304,6 @@ typedef unsigned char *sk_buff_data_t; | |||
| 301 | * @tc_verd: traffic control verdict | 304 | * @tc_verd: traffic control verdict |
| 302 | * @ndisc_nodetype: router type (from link layer) | 305 | * @ndisc_nodetype: router type (from link layer) |
| 303 | * @do_not_encrypt: set to prevent encryption of this frame | 306 | * @do_not_encrypt: set to prevent encryption of this frame |
| 304 | * @requeue: set to indicate that the wireless core should attempt | ||
| 305 | * a software retry on this frame if we failed to | ||
| 306 | * receive an ACK for it | ||
| 307 | * @dma_cookie: a cookie to one of several possible DMA operations | 307 | * @dma_cookie: a cookie to one of several possible DMA operations |
| 308 | * done by skb DMA functions | 308 | * done by skb DMA functions |
| 309 | * @secmark: security marking | 309 | * @secmark: security marking |
| @@ -319,10 +319,7 @@ struct sk_buff { | |||
| 319 | ktime_t tstamp; | 319 | ktime_t tstamp; |
| 320 | struct net_device *dev; | 320 | struct net_device *dev; |
| 321 | 321 | ||
| 322 | union { | 322 | unsigned long _skb_dst; |
| 323 | struct dst_entry *dst; | ||
| 324 | struct rtable *rtable; | ||
| 325 | }; | ||
| 326 | #ifdef CONFIG_XFRM | 323 | #ifdef CONFIG_XFRM |
| 327 | struct sec_path *sp; | 324 | struct sec_path *sp; |
| 328 | #endif | 325 | #endif |
| @@ -380,7 +377,6 @@ struct sk_buff { | |||
| 380 | #endif | 377 | #endif |
| 381 | #if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE) | 378 | #if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE) |
| 382 | __u8 do_not_encrypt:1; | 379 | __u8 do_not_encrypt:1; |
| 383 | __u8 requeue:1; | ||
| 384 | #endif | 380 | #endif |
| 385 | /* 0/13/14 bit hole */ | 381 | /* 0/13/14 bit hole */ |
| 386 | 382 | ||
| @@ -423,6 +419,21 @@ extern void skb_dma_unmap(struct device *dev, struct sk_buff *skb, | |||
| 423 | enum dma_data_direction dir); | 419 | enum dma_data_direction dir); |
| 424 | #endif | 420 | #endif |
| 425 | 421 | ||
| 422 | static inline struct dst_entry *skb_dst(const struct sk_buff *skb) | ||
| 423 | { | ||
| 424 | return (struct dst_entry *)skb->_skb_dst; | ||
| 425 | } | ||
| 426 | |||
| 427 | static inline void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst) | ||
| 428 | { | ||
| 429 | skb->_skb_dst = (unsigned long)dst; | ||
| 430 | } | ||
| 431 | |||
| 432 | static inline struct rtable *skb_rtable(const struct sk_buff *skb) | ||
| 433 | { | ||
| 434 | return (struct rtable *)skb_dst(skb); | ||
| 435 | } | ||
| 436 | |||
| 426 | extern void kfree_skb(struct sk_buff *skb); | 437 | extern void kfree_skb(struct sk_buff *skb); |
| 427 | extern void consume_skb(struct sk_buff *skb); | 438 | extern void consume_skb(struct sk_buff *skb); |
| 428 | extern void __kfree_skb(struct sk_buff *skb); | 439 | extern void __kfree_skb(struct sk_buff *skb); |
| @@ -1062,7 +1073,7 @@ extern void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page, | |||
| 1062 | int off, int size); | 1073 | int off, int size); |
| 1063 | 1074 | ||
| 1064 | #define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags) | 1075 | #define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags) |
| 1065 | #define SKB_FRAG_ASSERT(skb) BUG_ON(skb_shinfo(skb)->frag_list) | 1076 | #define SKB_FRAG_ASSERT(skb) BUG_ON(skb_has_frags(skb)) |
| 1066 | #define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb)) | 1077 | #define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb)) |
| 1067 | 1078 | ||
| 1068 | #ifdef NET_SKBUFF_DATA_USES_OFFSET | 1079 | #ifdef NET_SKBUFF_DATA_USES_OFFSET |
| @@ -1701,6 +1712,25 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len) | |||
| 1701 | skb = skb->prev) | 1712 | skb = skb->prev) |
| 1702 | 1713 | ||
| 1703 | 1714 | ||
| 1715 | static inline bool skb_has_frags(const struct sk_buff *skb) | ||
| 1716 | { | ||
| 1717 | return skb_shinfo(skb)->frag_list != NULL; | ||
| 1718 | } | ||
| 1719 | |||
| 1720 | static inline void skb_frag_list_init(struct sk_buff *skb) | ||
| 1721 | { | ||
| 1722 | skb_shinfo(skb)->frag_list = NULL; | ||
| 1723 | } | ||
| 1724 | |||
| 1725 | static inline void skb_frag_add_head(struct sk_buff *skb, struct sk_buff *frag) | ||
| 1726 | { | ||
| 1727 | frag->next = skb_shinfo(skb)->frag_list; | ||
| 1728 | skb_shinfo(skb)->frag_list = frag; | ||
| 1729 | } | ||
| 1730 | |||
| 1731 | #define skb_walk_frags(skb, iter) \ | ||
| 1732 | for (iter = skb_shinfo(skb)->frag_list; iter; iter = iter->next) | ||
| 1733 | |||
| 1704 | extern struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags, | 1734 | extern struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags, |
| 1705 | int *peeked, int *err); | 1735 | int *peeked, int *err); |
| 1706 | extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, | 1736 | extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, |
| @@ -1715,8 +1745,14 @@ extern int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, | |||
| 1715 | struct iovec *iov); | 1745 | struct iovec *iov); |
| 1716 | extern int skb_copy_datagram_from_iovec(struct sk_buff *skb, | 1746 | extern int skb_copy_datagram_from_iovec(struct sk_buff *skb, |
| 1717 | int offset, | 1747 | int offset, |
| 1718 | struct iovec *from, | 1748 | const struct iovec *from, |
| 1749 | int from_offset, | ||
| 1719 | int len); | 1750 | int len); |
| 1751 | extern int skb_copy_datagram_const_iovec(const struct sk_buff *from, | ||
| 1752 | int offset, | ||
| 1753 | const struct iovec *to, | ||
| 1754 | int to_offset, | ||
| 1755 | int size); | ||
| 1720 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); | 1756 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); |
| 1721 | extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, | 1757 | extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, |
| 1722 | unsigned int flags); | 1758 | unsigned int flags); |
diff --git a/include/linux/slab.h b/include/linux/slab.h index 48803064cedf..219b8fb4651d 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
| @@ -319,4 +319,6 @@ static inline void *kzalloc_node(size_t size, gfp_t flags, int node) | |||
| 319 | return kmalloc_node(size, flags | __GFP_ZERO, node); | 319 | return kmalloc_node(size, flags | __GFP_ZERO, node); |
| 320 | } | 320 | } |
| 321 | 321 | ||
| 322 | void __init kmem_cache_init_late(void); | ||
| 323 | |||
| 322 | #endif /* _LINUX_SLAB_H */ | 324 | #endif /* _LINUX_SLAB_H */ |
diff --git a/include/linux/slob_def.h b/include/linux/slob_def.h index 0ec00b39d006..bb5368df4be8 100644 --- a/include/linux/slob_def.h +++ b/include/linux/slob_def.h | |||
| @@ -34,4 +34,9 @@ static __always_inline void *__kmalloc(size_t size, gfp_t flags) | |||
| 34 | return kmalloc(size, flags); | 34 | return kmalloc(size, flags); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | static inline void kmem_cache_init_late(void) | ||
| 38 | { | ||
| 39 | /* Nothing to do */ | ||
| 40 | } | ||
| 41 | |||
| 37 | #endif /* __LINUX_SLOB_DEF_H */ | 42 | #endif /* __LINUX_SLOB_DEF_H */ |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index be5d40c43bd2..4dcbc2c71491 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
| @@ -302,4 +302,6 @@ static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) | |||
| 302 | } | 302 | } |
| 303 | #endif | 303 | #endif |
| 304 | 304 | ||
| 305 | void __init kmem_cache_init_late(void); | ||
| 306 | |||
| 305 | #endif /* _LINUX_SLUB_DEF_H */ | 307 | #endif /* _LINUX_SLUB_DEF_H */ |
diff --git a/include/linux/smsc911x.h b/include/linux/smsc911x.h index b32725075d71..5241e4fb4eca 100644 --- a/include/linux/smsc911x.h +++ b/include/linux/smsc911x.h | |||
| @@ -47,4 +47,14 @@ struct smsc911x_platform_config { | |||
| 47 | #define SMSC911X_FORCE_EXTERNAL_PHY (BIT(3)) | 47 | #define SMSC911X_FORCE_EXTERNAL_PHY (BIT(3)) |
| 48 | #define SMSC911X_SAVE_MAC_ADDRESS (BIT(4)) | 48 | #define SMSC911X_SAVE_MAC_ADDRESS (BIT(4)) |
| 49 | 49 | ||
| 50 | /* | ||
| 51 | * SMSC911X_SWAP_FIFO: | ||
| 52 | * Enables software byte swap for fifo data. Should only be used as a | ||
| 53 | * "last resort" in the case of big endian mode on boards with incorrectly | ||
| 54 | * routed data bus to older devices such as LAN9118. Newer devices such as | ||
| 55 | * LAN9221 can handle this in hardware, there are registers to control | ||
| 56 | * this swapping but the driver doesn't currently use them. | ||
| 57 | */ | ||
| 58 | #define SMSC911X_SWAP_FIFO (BIT(5)) | ||
| 59 | |||
| 50 | #endif /* __LINUX_SMSC911X_H__ */ | 60 | #endif /* __LINUX_SMSC911X_H__ */ |
diff --git a/include/linux/snmp.h b/include/linux/snmp.h index aee3f1e1d1ce..0f953fe40413 100644 --- a/include/linux/snmp.h +++ b/include/linux/snmp.h | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | enum | 18 | enum |
| 19 | { | 19 | { |
| 20 | IPSTATS_MIB_NUM = 0, | 20 | IPSTATS_MIB_NUM = 0, |
| 21 | IPSTATS_MIB_INRECEIVES, /* InReceives */ | 21 | IPSTATS_MIB_INPKTS, /* InReceives */ |
| 22 | IPSTATS_MIB_INHDRERRORS, /* InHdrErrors */ | 22 | IPSTATS_MIB_INHDRERRORS, /* InHdrErrors */ |
| 23 | IPSTATS_MIB_INTOOBIGERRORS, /* InTooBigErrors */ | 23 | IPSTATS_MIB_INTOOBIGERRORS, /* InTooBigErrors */ |
| 24 | IPSTATS_MIB_INNOROUTES, /* InNoRoutes */ | 24 | IPSTATS_MIB_INNOROUTES, /* InNoRoutes */ |
| @@ -28,7 +28,7 @@ enum | |||
| 28 | IPSTATS_MIB_INDISCARDS, /* InDiscards */ | 28 | IPSTATS_MIB_INDISCARDS, /* InDiscards */ |
| 29 | IPSTATS_MIB_INDELIVERS, /* InDelivers */ | 29 | IPSTATS_MIB_INDELIVERS, /* InDelivers */ |
| 30 | IPSTATS_MIB_OUTFORWDATAGRAMS, /* OutForwDatagrams */ | 30 | IPSTATS_MIB_OUTFORWDATAGRAMS, /* OutForwDatagrams */ |
| 31 | IPSTATS_MIB_OUTREQUESTS, /* OutRequests */ | 31 | IPSTATS_MIB_OUTPKTS, /* OutRequests */ |
| 32 | IPSTATS_MIB_OUTDISCARDS, /* OutDiscards */ | 32 | IPSTATS_MIB_OUTDISCARDS, /* OutDiscards */ |
| 33 | IPSTATS_MIB_OUTNOROUTES, /* OutNoRoutes */ | 33 | IPSTATS_MIB_OUTNOROUTES, /* OutNoRoutes */ |
| 34 | IPSTATS_MIB_REASMTIMEOUT, /* ReasmTimeout */ | 34 | IPSTATS_MIB_REASMTIMEOUT, /* ReasmTimeout */ |
| @@ -42,6 +42,12 @@ enum | |||
| 42 | IPSTATS_MIB_OUTMCASTPKTS, /* OutMcastPkts */ | 42 | IPSTATS_MIB_OUTMCASTPKTS, /* OutMcastPkts */ |
| 43 | IPSTATS_MIB_INBCASTPKTS, /* InBcastPkts */ | 43 | IPSTATS_MIB_INBCASTPKTS, /* InBcastPkts */ |
| 44 | IPSTATS_MIB_OUTBCASTPKTS, /* OutBcastPkts */ | 44 | IPSTATS_MIB_OUTBCASTPKTS, /* OutBcastPkts */ |
| 45 | IPSTATS_MIB_INOCTETS, /* InOctets */ | ||
| 46 | IPSTATS_MIB_OUTOCTETS, /* OutOctets */ | ||
| 47 | IPSTATS_MIB_INMCASTOCTETS, /* InMcastOctets */ | ||
| 48 | IPSTATS_MIB_OUTMCASTOCTETS, /* OutMcastOctets */ | ||
| 49 | IPSTATS_MIB_INBCASTOCTETS, /* InBcastOctets */ | ||
| 50 | IPSTATS_MIB_OUTBCASTOCTETS, /* OutBcastOctets */ | ||
| 45 | __IPSTATS_MIB_MAX | 51 | __IPSTATS_MIB_MAX |
| 46 | }; | 52 | }; |
| 47 | 53 | ||
diff --git a/include/linux/socket.h b/include/linux/socket.h index 421afb4d29b0..3b461dffe244 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
| @@ -194,7 +194,8 @@ struct ucred { | |||
| 194 | #define AF_RXRPC 33 /* RxRPC sockets */ | 194 | #define AF_RXRPC 33 /* RxRPC sockets */ |
| 195 | #define AF_ISDN 34 /* mISDN sockets */ | 195 | #define AF_ISDN 34 /* mISDN sockets */ |
| 196 | #define AF_PHONET 35 /* Phonet sockets */ | 196 | #define AF_PHONET 35 /* Phonet sockets */ |
| 197 | #define AF_MAX 36 /* For now.. */ | 197 | #define AF_IEEE802154 36 /* IEEE802154 sockets */ |
| 198 | #define AF_MAX 37 /* For now.. */ | ||
| 198 | 199 | ||
| 199 | /* Protocol families, same as address families. */ | 200 | /* Protocol families, same as address families. */ |
| 200 | #define PF_UNSPEC AF_UNSPEC | 201 | #define PF_UNSPEC AF_UNSPEC |
| @@ -233,6 +234,7 @@ struct ucred { | |||
| 233 | #define PF_RXRPC AF_RXRPC | 234 | #define PF_RXRPC AF_RXRPC |
| 234 | #define PF_ISDN AF_ISDN | 235 | #define PF_ISDN AF_ISDN |
| 235 | #define PF_PHONET AF_PHONET | 236 | #define PF_PHONET AF_PHONET |
| 237 | #define PF_IEEE802154 AF_IEEE802154 | ||
| 236 | #define PF_MAX AF_MAX | 238 | #define PF_MAX AF_MAX |
| 237 | 239 | ||
| 238 | /* Maximum queue length specifiable by listen. */ | 240 | /* Maximum queue length specifiable by listen. */ |
| @@ -303,14 +305,15 @@ struct ucred { | |||
| 303 | #define SOL_BLUETOOTH 274 | 305 | #define SOL_BLUETOOTH 274 |
| 304 | #define SOL_PNPIPE 275 | 306 | #define SOL_PNPIPE 275 |
| 305 | #define SOL_RDS 276 | 307 | #define SOL_RDS 276 |
| 308 | #define SOL_IUCV 277 | ||
| 306 | 309 | ||
| 307 | /* IPX options */ | 310 | /* IPX options */ |
| 308 | #define IPX_TYPE 1 | 311 | #define IPX_TYPE 1 |
| 309 | 312 | ||
| 310 | #ifdef __KERNEL__ | 313 | #ifdef __KERNEL__ |
| 311 | extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); | 314 | extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); |
| 312 | extern int memcpy_fromiovecend(unsigned char *kdata, struct iovec *iov, | 315 | extern int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov, |
| 313 | int offset, int len); | 316 | int offset, int len); |
| 314 | extern int csum_partial_copy_fromiovecend(unsigned char *kdata, | 317 | extern int csum_partial_copy_fromiovecend(unsigned char *kdata, |
| 315 | struct iovec *iov, | 318 | struct iovec *iov, |
| 316 | int offset, | 319 | int offset, |
| @@ -318,6 +321,8 @@ extern int csum_partial_copy_fromiovecend(unsigned char *kdata, | |||
| 318 | 321 | ||
| 319 | extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode); | 322 | extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode); |
| 320 | extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); | 323 | extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); |
| 324 | extern int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata, | ||
| 325 | int offset, int len); | ||
| 321 | extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uaddr, int __user *ulen); | 326 | extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uaddr, int __user *ulen); |
| 322 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); | 327 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); |
| 323 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); | 328 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); |
diff --git a/include/linux/spi/libertas_spi.h b/include/linux/spi/libertas_spi.h index 79506f5f9e67..1b5d5384fcd3 100644 --- a/include/linux/spi/libertas_spi.h +++ b/include/linux/spi/libertas_spi.h | |||
| @@ -22,9 +22,6 @@ struct libertas_spi_platform_data { | |||
| 22 | * speed, you may want to use 0 here. */ | 22 | * speed, you may want to use 0 here. */ |
| 23 | u16 use_dummy_writes; | 23 | u16 use_dummy_writes; |
| 24 | 24 | ||
| 25 | /* GPIO number to use as chip select */ | ||
| 26 | u16 gpio_cs; | ||
| 27 | |||
| 28 | /* Board specific setup/teardown */ | 25 | /* Board specific setup/teardown */ |
| 29 | int (*setup)(struct spi_device *spi); | 26 | int (*setup)(struct spi_device *spi); |
| 30 | int (*teardown)(struct spi_device *spi); | 27 | int (*teardown)(struct spi_device *spi); |
diff --git a/include/linux/spi/wl12xx.h b/include/linux/spi/wl12xx.h new file mode 100644 index 000000000000..11430cab2aad --- /dev/null +++ b/include/linux/spi/wl12xx.h | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | /* | ||
| 2 | * This file is part of wl12xx | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Nokia Corporation | ||
| 5 | * | ||
| 6 | * Contact: Kalle Valo <kalle.valo@nokia.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or | ||
| 9 | * modify it under the terms of the GNU General Public License | ||
| 10 | * version 2 as published by the Free Software Foundation. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, but | ||
| 13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 15 | * General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
| 20 | * 02110-1301 USA | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | |||
| 24 | #ifndef _LINUX_SPI_WL12XX_H | ||
| 25 | #define _LINUX_SPI_WL12XX_H | ||
| 26 | |||
| 27 | struct wl12xx_platform_data { | ||
| 28 | void (*set_power)(bool enable); | ||
| 29 | }; | ||
| 30 | |||
| 31 | #endif | ||
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index 795032edfc46..cd15df6c63cd 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
| @@ -245,11 +245,6 @@ extern unsigned long get_safe_page(gfp_t gfp_mask); | |||
| 245 | 245 | ||
| 246 | extern void hibernation_set_ops(struct platform_hibernation_ops *ops); | 246 | extern void hibernation_set_ops(struct platform_hibernation_ops *ops); |
| 247 | extern int hibernate(void); | 247 | extern int hibernate(void); |
| 248 | extern int hibernate_nvs_register(unsigned long start, unsigned long size); | ||
| 249 | extern int hibernate_nvs_alloc(void); | ||
| 250 | extern void hibernate_nvs_free(void); | ||
| 251 | extern void hibernate_nvs_save(void); | ||
| 252 | extern void hibernate_nvs_restore(void); | ||
| 253 | extern bool system_entering_hibernation(void); | 248 | extern bool system_entering_hibernation(void); |
| 254 | #else /* CONFIG_HIBERNATION */ | 249 | #else /* CONFIG_HIBERNATION */ |
| 255 | static inline int swsusp_page_is_forbidden(struct page *p) { return 0; } | 250 | static inline int swsusp_page_is_forbidden(struct page *p) { return 0; } |
| @@ -258,6 +253,16 @@ static inline void swsusp_unset_page_free(struct page *p) {} | |||
| 258 | 253 | ||
| 259 | static inline void hibernation_set_ops(struct platform_hibernation_ops *ops) {} | 254 | static inline void hibernation_set_ops(struct platform_hibernation_ops *ops) {} |
| 260 | static inline int hibernate(void) { return -ENOSYS; } | 255 | static inline int hibernate(void) { return -ENOSYS; } |
| 256 | static inline bool system_entering_hibernation(void) { return false; } | ||
| 257 | #endif /* CONFIG_HIBERNATION */ | ||
| 258 | |||
| 259 | #ifdef CONFIG_HIBERNATION_NVS | ||
| 260 | extern int hibernate_nvs_register(unsigned long start, unsigned long size); | ||
| 261 | extern int hibernate_nvs_alloc(void); | ||
| 262 | extern void hibernate_nvs_free(void); | ||
| 263 | extern void hibernate_nvs_save(void); | ||
| 264 | extern void hibernate_nvs_restore(void); | ||
| 265 | #else /* CONFIG_HIBERNATION_NVS */ | ||
| 261 | static inline int hibernate_nvs_register(unsigned long a, unsigned long b) | 266 | static inline int hibernate_nvs_register(unsigned long a, unsigned long b) |
| 262 | { | 267 | { |
| 263 | return 0; | 268 | return 0; |
| @@ -266,8 +271,7 @@ static inline int hibernate_nvs_alloc(void) { return 0; } | |||
| 266 | static inline void hibernate_nvs_free(void) {} | 271 | static inline void hibernate_nvs_free(void) {} |
| 267 | static inline void hibernate_nvs_save(void) {} | 272 | static inline void hibernate_nvs_save(void) {} |
| 268 | static inline void hibernate_nvs_restore(void) {} | 273 | static inline void hibernate_nvs_restore(void) {} |
| 269 | static inline bool system_entering_hibernation(void) { return false; } | 274 | #endif /* CONFIG_HIBERNATION_NVS */ |
| 270 | #endif /* CONFIG_HIBERNATION */ | ||
| 271 | 275 | ||
| 272 | #ifdef CONFIG_PM_SLEEP | 276 | #ifdef CONFIG_PM_SLEEP |
| 273 | void save_processor_state(void); | 277 | void save_processor_state(void); |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index c6c84ad8bd71..418d90f5effe 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -758,6 +758,6 @@ int kernel_execve(const char *filename, char *const argv[], char *const envp[]); | |||
| 758 | 758 | ||
| 759 | 759 | ||
| 760 | asmlinkage long sys_perf_counter_open( | 760 | asmlinkage long sys_perf_counter_open( |
| 761 | const struct perf_counter_attr __user *attr_uptr, | 761 | struct perf_counter_attr __user *attr_uptr, |
| 762 | pid_t pid, int cpu, int group_fd, unsigned long flags); | 762 | pid_t pid, int cpu, int group_fd, unsigned long flags); |
| 763 | #endif | 763 | #endif |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 9d5078bd23a3..8afac76cd748 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
| @@ -377,7 +377,7 @@ struct tcp_sock { | |||
| 377 | unsigned int keepalive_time; /* time before keep alive takes place */ | 377 | unsigned int keepalive_time; /* time before keep alive takes place */ |
| 378 | unsigned int keepalive_intvl; /* time interval between keep alive probes */ | 378 | unsigned int keepalive_intvl; /* time interval between keep alive probes */ |
| 379 | 379 | ||
| 380 | unsigned long last_synq_overflow; | 380 | int linger2; |
| 381 | 381 | ||
| 382 | /* Receiver side RTT estimation */ | 382 | /* Receiver side RTT estimation */ |
| 383 | struct { | 383 | struct { |
| @@ -406,8 +406,6 @@ struct tcp_sock { | |||
| 406 | /* TCP MD5 Signagure Option information */ | 406 | /* TCP MD5 Signagure Option information */ |
| 407 | struct tcp_md5sig_info *md5sig_info; | 407 | struct tcp_md5sig_info *md5sig_info; |
| 408 | #endif | 408 | #endif |
| 409 | |||
| 410 | int linger2; | ||
| 411 | }; | 409 | }; |
| 412 | 410 | ||
| 413 | static inline struct tcp_sock *tcp_sk(const struct sock *sk) | 411 | static inline struct tcp_sock *tcp_sk(const struct sock *sk) |
diff --git a/include/linux/tick.h b/include/linux/tick.h index 469b82d88b3b..0482229c07db 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h | |||
| @@ -97,10 +97,12 @@ extern void tick_clock_notify(void); | |||
| 97 | extern int tick_check_oneshot_change(int allow_nohz); | 97 | extern int tick_check_oneshot_change(int allow_nohz); |
| 98 | extern struct tick_sched *tick_get_tick_sched(int cpu); | 98 | extern struct tick_sched *tick_get_tick_sched(int cpu); |
| 99 | extern void tick_check_idle(int cpu); | 99 | extern void tick_check_idle(int cpu); |
| 100 | extern int tick_oneshot_mode_active(void); | ||
| 100 | # else | 101 | # else |
| 101 | static inline void tick_clock_notify(void) { } | 102 | static inline void tick_clock_notify(void) { } |
| 102 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } | 103 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } |
| 103 | static inline void tick_check_idle(int cpu) { } | 104 | static inline void tick_check_idle(int cpu) { } |
| 105 | static inline int tick_oneshot_mode_active(void) { return 0; } | ||
| 104 | # endif | 106 | # endif |
| 105 | 107 | ||
| 106 | #else /* CONFIG_GENERIC_CLOCKEVENTS */ | 108 | #else /* CONFIG_GENERIC_CLOCKEVENTS */ |
| @@ -109,6 +111,7 @@ static inline void tick_cancel_sched_timer(int cpu) { } | |||
| 109 | static inline void tick_clock_notify(void) { } | 111 | static inline void tick_clock_notify(void) { } |
| 110 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } | 112 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } |
| 111 | static inline void tick_check_idle(int cpu) { } | 113 | static inline void tick_check_idle(int cpu) { } |
| 114 | static inline int tick_oneshot_mode_active(void) { return 0; } | ||
| 112 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ | 115 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ |
| 113 | 116 | ||
| 114 | # ifdef CONFIG_NO_HZ | 117 | # ifdef CONFIG_NO_HZ |
diff --git a/include/linux/timer.h b/include/linux/timer.h index 6cdb6f3331f1..ccf882eed8f8 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h | |||
| @@ -163,7 +163,10 @@ extern void add_timer_on(struct timer_list *timer, int cpu); | |||
| 163 | extern int del_timer(struct timer_list * timer); | 163 | extern int del_timer(struct timer_list * timer); |
| 164 | extern int mod_timer(struct timer_list *timer, unsigned long expires); | 164 | extern int mod_timer(struct timer_list *timer, unsigned long expires); |
| 165 | extern int mod_timer_pending(struct timer_list *timer, unsigned long expires); | 165 | extern int mod_timer_pending(struct timer_list *timer, unsigned long expires); |
| 166 | extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires); | ||
| 166 | 167 | ||
| 168 | #define TIMER_NOT_PINNED 0 | ||
| 169 | #define TIMER_PINNED 1 | ||
| 167 | /* | 170 | /* |
| 168 | * The jiffies value which is added to now, when there is no timer | 171 | * The jiffies value which is added to now, when there is no timer |
| 169 | * in the timer wheel: | 172 | * in the timer wheel: |
diff --git a/include/linux/timex.h b/include/linux/timex.h index aa3475fcff64..9910e3bd5b31 100644 --- a/include/linux/timex.h +++ b/include/linux/timex.h | |||
| @@ -170,17 +170,37 @@ struct timex { | |||
| 170 | #include <asm/timex.h> | 170 | #include <asm/timex.h> |
| 171 | 171 | ||
| 172 | /* | 172 | /* |
| 173 | * SHIFT_KG and SHIFT_KF establish the damping of the PLL and are chosen | 173 | * SHIFT_PLL is used as a dampening factor to define how much we |
| 174 | * for a slightly underdamped convergence characteristic. SHIFT_KH | 174 | * adjust the frequency correction for a given offset in PLL mode. |
| 175 | * establishes the damping of the FLL and is chosen by wisdom and black | 175 | * It also used in dampening the offset correction, to define how |
| 176 | * art. | 176 | * much of the current value in time_offset we correct for each |
| 177 | * second. Changing this value changes the stiffness of the ntp | ||
| 178 | * adjustment code. A lower value makes it more flexible, reducing | ||
| 179 | * NTP convergence time. A higher value makes it stiffer, increasing | ||
| 180 | * convergence time, but making the clock more stable. | ||
| 177 | * | 181 | * |
| 178 | * MAXTC establishes the maximum time constant of the PLL. With the | 182 | * In David Mills' nanokernel reference implementation SHIFT_PLL is 4. |
| 179 | * SHIFT_KG and SHIFT_KF values given and a time constant range from | 183 | * However this seems to increase convergence time much too long. |
| 180 | * zero to MAXTC, the PLL will converge in 15 minutes to 16 hours, | 184 | * |
| 181 | * respectively. | 185 | * https://lists.ntp.org/pipermail/hackers/2008-January/003487.html |
| 186 | * | ||
| 187 | * In the above mailing list discussion, it seems the value of 4 | ||
| 188 | * was appropriate for other Unix systems with HZ=100, and that | ||
| 189 | * SHIFT_PLL should be decreased as HZ increases. However, Linux's | ||
| 190 | * clock steering implementation is HZ independent. | ||
| 191 | * | ||
| 192 | * Through experimentation, a SHIFT_PLL value of 2 was found to allow | ||
| 193 | * for fast convergence (very similar to the NTPv3 code used prior to | ||
| 194 | * v2.6.19), with good clock stability. | ||
| 195 | * | ||
| 196 | * | ||
| 197 | * SHIFT_FLL is used as a dampening factor to define how much we | ||
| 198 | * adjust the frequency correction for a given offset in FLL mode. | ||
| 199 | * In David Mills' nanokernel reference implementation SHIFT_FLL is 2. | ||
| 200 | * | ||
| 201 | * MAXTC establishes the maximum time constant of the PLL. | ||
| 182 | */ | 202 | */ |
| 183 | #define SHIFT_PLL 4 /* PLL frequency factor (shift) */ | 203 | #define SHIFT_PLL 2 /* PLL frequency factor (shift) */ |
| 184 | #define SHIFT_FLL 2 /* FLL frequency factor (shift) */ | 204 | #define SHIFT_FLL 2 /* FLL frequency factor (shift) */ |
| 185 | #define MAXTC 10 /* maximum time constant (shift) */ | 205 | #define MAXTC 10 /* maximum time constant (shift) */ |
| 186 | 206 | ||
| @@ -192,10 +212,10 @@ struct timex { | |||
| 192 | #define SHIFT_USEC 16 /* frequency offset scale (shift) */ | 212 | #define SHIFT_USEC 16 /* frequency offset scale (shift) */ |
| 193 | #define PPM_SCALE ((s64)NSEC_PER_USEC << (NTP_SCALE_SHIFT - SHIFT_USEC)) | 213 | #define PPM_SCALE ((s64)NSEC_PER_USEC << (NTP_SCALE_SHIFT - SHIFT_USEC)) |
| 194 | #define PPM_SCALE_INV_SHIFT 19 | 214 | #define PPM_SCALE_INV_SHIFT 19 |
| 195 | #define PPM_SCALE_INV ((1ll << (PPM_SCALE_INV_SHIFT + NTP_SCALE_SHIFT)) / \ | 215 | #define PPM_SCALE_INV ((1LL << (PPM_SCALE_INV_SHIFT + NTP_SCALE_SHIFT)) / \ |
| 196 | PPM_SCALE + 1) | 216 | PPM_SCALE + 1) |
| 197 | 217 | ||
| 198 | #define MAXPHASE 500000000l /* max phase error (ns) */ | 218 | #define MAXPHASE 500000000L /* max phase error (ns) */ |
| 199 | #define MAXFREQ 500000 /* max frequency error (ns/s) */ | 219 | #define MAXFREQ 500000 /* max frequency error (ns/s) */ |
| 200 | #define MAXFREQ_SCALED ((s64)MAXFREQ << NTP_SCALE_SHIFT) | 220 | #define MAXFREQ_SCALED ((s64)MAXFREQ << NTP_SCALE_SHIFT) |
| 201 | #define MINSEC 256 /* min interval between updates (s) */ | 221 | #define MINSEC 256 /* min interval between updates (s) */ |
diff --git a/include/linux/ultrasound.h b/include/linux/ultrasound.h index 6b7703e75cec..71339dc531c5 100644 --- a/include/linux/ultrasound.h +++ b/include/linux/ultrasound.h | |||
| @@ -34,7 +34,7 @@ | |||
| 34 | * _GUS_VOICEOFF - Stops voice (no parameters) | 34 | * _GUS_VOICEOFF - Stops voice (no parameters) |
| 35 | * _GUS_VOICEFADE - Stops the voice smoothly. | 35 | * _GUS_VOICEFADE - Stops the voice smoothly. |
| 36 | * _GUS_VOICEMODE - Alters the voice mode, don't start or stop voice (P1=voice mode) | 36 | * _GUS_VOICEMODE - Alters the voice mode, don't start or stop voice (P1=voice mode) |
| 37 | * _GUS_VOICEBALA - Sets voice balence (P1, 0=left, 7=middle and 15=right, default 7) | 37 | * _GUS_VOICEBALA - Sets voice balance (P1, 0=left, 7=middle and 15=right, default 7) |
| 38 | * _GUS_VOICEFREQ - Sets voice (sample) playback frequency (P1=Hz) | 38 | * _GUS_VOICEFREQ - Sets voice (sample) playback frequency (P1=Hz) |
| 39 | * _GUS_VOICEVOL - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off) | 39 | * _GUS_VOICEVOL - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off) |
| 40 | * _GUS_VOICEVOL2 - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off) | 40 | * _GUS_VOICEVOL2 - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off) |
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index 36fabb95c7d3..5d44059f6d63 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
| @@ -183,6 +183,7 @@ extern void usbnet_tx_timeout (struct net_device *net); | |||
| 183 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); | 183 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); |
| 184 | 184 | ||
| 185 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); | 185 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); |
| 186 | extern int usbnet_get_ethernet_addr(struct usbnet *, int); | ||
| 186 | extern void usbnet_defer_kevent (struct usbnet *, int); | 187 | extern void usbnet_defer_kevent (struct usbnet *, int); |
| 187 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); | 188 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); |
| 188 | extern void usbnet_unlink_rx_urbs(struct usbnet *); | 189 | extern void usbnet_unlink_rx_urbs(struct usbnet *); |
diff --git a/include/linux/virtio.h b/include/linux/virtio.h index 06005fa9e982..4fca4f5440ba 100644 --- a/include/linux/virtio.h +++ b/include/linux/virtio.h | |||
| @@ -10,14 +10,17 @@ | |||
| 10 | 10 | ||
| 11 | /** | 11 | /** |
| 12 | * virtqueue - a queue to register buffers for sending or receiving. | 12 | * virtqueue - a queue to register buffers for sending or receiving. |
| 13 | * @list: the chain of virtqueues for this device | ||
| 13 | * @callback: the function to call when buffers are consumed (can be NULL). | 14 | * @callback: the function to call when buffers are consumed (can be NULL). |
| 15 | * @name: the name of this virtqueue (mainly for debugging) | ||
| 14 | * @vdev: the virtio device this queue was created for. | 16 | * @vdev: the virtio device this queue was created for. |
| 15 | * @vq_ops: the operations for this virtqueue (see below). | 17 | * @vq_ops: the operations for this virtqueue (see below). |
| 16 | * @priv: a pointer for the virtqueue implementation to use. | 18 | * @priv: a pointer for the virtqueue implementation to use. |
| 17 | */ | 19 | */ |
| 18 | struct virtqueue | 20 | struct virtqueue { |
| 19 | { | 21 | struct list_head list; |
| 20 | void (*callback)(struct virtqueue *vq); | 22 | void (*callback)(struct virtqueue *vq); |
| 23 | const char *name; | ||
| 21 | struct virtio_device *vdev; | 24 | struct virtio_device *vdev; |
| 22 | struct virtqueue_ops *vq_ops; | 25 | struct virtqueue_ops *vq_ops; |
| 23 | void *priv; | 26 | void *priv; |
| @@ -76,15 +79,16 @@ struct virtqueue_ops { | |||
| 76 | * @dev: underlying device. | 79 | * @dev: underlying device. |
| 77 | * @id: the device type identification (used to match it with a driver). | 80 | * @id: the device type identification (used to match it with a driver). |
| 78 | * @config: the configuration ops for this device. | 81 | * @config: the configuration ops for this device. |
| 82 | * @vqs: the list of virtqueues for this device. | ||
| 79 | * @features: the features supported by both driver and device. | 83 | * @features: the features supported by both driver and device. |
| 80 | * @priv: private pointer for the driver's use. | 84 | * @priv: private pointer for the driver's use. |
| 81 | */ | 85 | */ |
| 82 | struct virtio_device | 86 | struct virtio_device { |
| 83 | { | ||
| 84 | int index; | 87 | int index; |
| 85 | struct device dev; | 88 | struct device dev; |
| 86 | struct virtio_device_id id; | 89 | struct virtio_device_id id; |
| 87 | struct virtio_config_ops *config; | 90 | struct virtio_config_ops *config; |
| 91 | struct list_head vqs; | ||
| 88 | /* Note that this is a Linux set_bit-style bitmap. */ | 92 | /* Note that this is a Linux set_bit-style bitmap. */ |
| 89 | unsigned long features[1]; | 93 | unsigned long features[1]; |
| 90 | void *priv; | 94 | void *priv; |
| @@ -99,8 +103,7 @@ void unregister_virtio_device(struct virtio_device *dev); | |||
| 99 | * @id_table: the ids serviced by this driver. | 103 | * @id_table: the ids serviced by this driver. |
| 100 | * @feature_table: an array of feature numbers supported by this device. | 104 | * @feature_table: an array of feature numbers supported by this device. |
| 101 | * @feature_table_size: number of entries in the feature table array. | 105 | * @feature_table_size: number of entries in the feature table array. |
| 102 | * @probe: the function to call when a device is found. Returns a token for | 106 | * @probe: the function to call when a device is found. Returns 0 or -errno. |
| 103 | * remove, or PTR_ERR(). | ||
| 104 | * @remove: the function when a device is removed. | 107 | * @remove: the function when a device is removed. |
| 105 | * @config_changed: optional function to call when the device configuration | 108 | * @config_changed: optional function to call when the device configuration |
| 106 | * changes; may be called in interrupt context. | 109 | * changes; may be called in interrupt context. |
diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index bf8ec283b232..99f514575f6a 100644 --- a/include/linux/virtio_config.h +++ b/include/linux/virtio_config.h | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #define VIRTIO_F_NOTIFY_ON_EMPTY 24 | 29 | #define VIRTIO_F_NOTIFY_ON_EMPTY 24 |
| 30 | 30 | ||
| 31 | #ifdef __KERNEL__ | 31 | #ifdef __KERNEL__ |
| 32 | #include <linux/err.h> | ||
| 32 | #include <linux/virtio.h> | 33 | #include <linux/virtio.h> |
| 33 | 34 | ||
| 34 | /** | 35 | /** |
| @@ -49,15 +50,26 @@ | |||
| 49 | * @set_status: write the status byte | 50 | * @set_status: write the status byte |
| 50 | * vdev: the virtio_device | 51 | * vdev: the virtio_device |
| 51 | * status: the new status byte | 52 | * status: the new status byte |
| 53 | * @request_vqs: request the specified number of virtqueues | ||
| 54 | * vdev: the virtio_device | ||
| 55 | * max_vqs: the max number of virtqueues we want | ||
| 56 | * If supplied, must call before any virtqueues are instantiated. | ||
| 57 | * To modify the max number of virtqueues after request_vqs has been | ||
| 58 | * called, call free_vqs and then request_vqs with a new value. | ||
| 59 | * @free_vqs: cleanup resources allocated by request_vqs | ||
| 60 | * vdev: the virtio_device | ||
| 61 | * If supplied, must call after all virtqueues have been deleted. | ||
| 52 | * @reset: reset the device | 62 | * @reset: reset the device |
| 53 | * vdev: the virtio device | 63 | * vdev: the virtio device |
| 54 | * After this, status and feature negotiation must be done again | 64 | * After this, status and feature negotiation must be done again |
| 55 | * @find_vq: find a virtqueue and instantiate it. | 65 | * @find_vqs: find virtqueues and instantiate them. |
| 56 | * vdev: the virtio_device | 66 | * vdev: the virtio_device |
| 57 | * index: the 0-based virtqueue number in case there's more than one. | 67 | * nvqs: the number of virtqueues to find |
| 58 | * callback: the virqtueue callback | 68 | * vqs: on success, includes new virtqueues |
| 59 | * Returns the new virtqueue or ERR_PTR() (eg. -ENOENT). | 69 | * callbacks: array of callbacks, for each virtqueue |
| 60 | * @del_vq: free a virtqueue found by find_vq(). | 70 | * names: array of virtqueue names (mainly for debugging) |
| 71 | * Returns 0 on success or error status | ||
| 72 | * @del_vqs: free virtqueues found by find_vqs(). | ||
| 61 | * @get_features: get the array of feature bits for this device. | 73 | * @get_features: get the array of feature bits for this device. |
| 62 | * vdev: the virtio_device | 74 | * vdev: the virtio_device |
| 63 | * Returns the first 32 feature bits (all we currently need). | 75 | * Returns the first 32 feature bits (all we currently need). |
| @@ -66,6 +78,7 @@ | |||
| 66 | * This gives the final feature bits for the device: it can change | 78 | * This gives the final feature bits for the device: it can change |
| 67 | * the dev->feature bits if it wants. | 79 | * the dev->feature bits if it wants. |
| 68 | */ | 80 | */ |
| 81 | typedef void vq_callback_t(struct virtqueue *); | ||
| 69 | struct virtio_config_ops | 82 | struct virtio_config_ops |
| 70 | { | 83 | { |
| 71 | void (*get)(struct virtio_device *vdev, unsigned offset, | 84 | void (*get)(struct virtio_device *vdev, unsigned offset, |
| @@ -75,10 +88,11 @@ struct virtio_config_ops | |||
| 75 | u8 (*get_status)(struct virtio_device *vdev); | 88 | u8 (*get_status)(struct virtio_device *vdev); |
| 76 | void (*set_status)(struct virtio_device *vdev, u8 status); | 89 | void (*set_status)(struct virtio_device *vdev, u8 status); |
| 77 | void (*reset)(struct virtio_device *vdev); | 90 | void (*reset)(struct virtio_device *vdev); |
| 78 | struct virtqueue *(*find_vq)(struct virtio_device *vdev, | 91 | int (*find_vqs)(struct virtio_device *, unsigned nvqs, |
| 79 | unsigned index, | 92 | struct virtqueue *vqs[], |
| 80 | void (*callback)(struct virtqueue *)); | 93 | vq_callback_t *callbacks[], |
| 81 | void (*del_vq)(struct virtqueue *vq); | 94 | const char *names[]); |
| 95 | void (*del_vqs)(struct virtio_device *); | ||
| 82 | u32 (*get_features)(struct virtio_device *vdev); | 96 | u32 (*get_features)(struct virtio_device *vdev); |
| 83 | void (*finalize_features)(struct virtio_device *vdev); | 97 | void (*finalize_features)(struct virtio_device *vdev); |
| 84 | }; | 98 | }; |
| @@ -99,7 +113,9 @@ static inline bool virtio_has_feature(const struct virtio_device *vdev, | |||
| 99 | if (__builtin_constant_p(fbit)) | 113 | if (__builtin_constant_p(fbit)) |
| 100 | BUILD_BUG_ON(fbit >= 32); | 114 | BUILD_BUG_ON(fbit >= 32); |
| 101 | 115 | ||
| 102 | virtio_check_driver_offered_feature(vdev, fbit); | 116 | if (fbit < VIRTIO_TRANSPORT_F_START) |
| 117 | virtio_check_driver_offered_feature(vdev, fbit); | ||
| 118 | |||
| 103 | return test_bit(fbit, vdev->features); | 119 | return test_bit(fbit, vdev->features); |
| 104 | } | 120 | } |
| 105 | 121 | ||
| @@ -126,5 +142,18 @@ static inline int virtio_config_buf(struct virtio_device *vdev, | |||
| 126 | vdev->config->get(vdev, offset, buf, len); | 142 | vdev->config->get(vdev, offset, buf, len); |
| 127 | return 0; | 143 | return 0; |
| 128 | } | 144 | } |
| 145 | |||
| 146 | static inline | ||
| 147 | struct virtqueue *virtio_find_single_vq(struct virtio_device *vdev, | ||
| 148 | vq_callback_t *c, const char *n) | ||
| 149 | { | ||
| 150 | vq_callback_t *callbacks[] = { c }; | ||
| 151 | const char *names[] = { n }; | ||
| 152 | struct virtqueue *vq; | ||
| 153 | int err = vdev->config->find_vqs(vdev, 1, &vq, callbacks, names); | ||
| 154 | if (err < 0) | ||
| 155 | return ERR_PTR(err); | ||
| 156 | return vq; | ||
| 157 | } | ||
| 129 | #endif /* __KERNEL__ */ | 158 | #endif /* __KERNEL__ */ |
| 130 | #endif /* _LINUX_VIRTIO_CONFIG_H */ | 159 | #endif /* _LINUX_VIRTIO_CONFIG_H */ |
diff --git a/include/linux/virtio_pci.h b/include/linux/virtio_pci.h index cd0fd5d181a6..9a3d7c48c622 100644 --- a/include/linux/virtio_pci.h +++ b/include/linux/virtio_pci.h | |||
| @@ -47,9 +47,17 @@ | |||
| 47 | /* The bit of the ISR which indicates a device configuration change. */ | 47 | /* The bit of the ISR which indicates a device configuration change. */ |
| 48 | #define VIRTIO_PCI_ISR_CONFIG 0x2 | 48 | #define VIRTIO_PCI_ISR_CONFIG 0x2 |
| 49 | 49 | ||
| 50 | /* MSI-X registers: only enabled if MSI-X is enabled. */ | ||
| 51 | /* A 16-bit vector for configuration changes. */ | ||
| 52 | #define VIRTIO_MSI_CONFIG_VECTOR 20 | ||
| 53 | /* A 16-bit vector for selected queue notifications. */ | ||
| 54 | #define VIRTIO_MSI_QUEUE_VECTOR 22 | ||
| 55 | /* Vector value used to disable MSI for queue */ | ||
| 56 | #define VIRTIO_MSI_NO_VECTOR 0xffff | ||
| 57 | |||
| 50 | /* The remaining space is defined by each driver as the per-driver | 58 | /* The remaining space is defined by each driver as the per-driver |
| 51 | * configuration space */ | 59 | * configuration space */ |
| 52 | #define VIRTIO_PCI_CONFIG 20 | 60 | #define VIRTIO_PCI_CONFIG(dev) ((dev)->msix_enabled ? 24 : 20) |
| 53 | 61 | ||
| 54 | /* Virtio ABI version, this must match exactly */ | 62 | /* Virtio ABI version, this must match exactly */ |
| 55 | #define VIRTIO_PCI_ABI_VERSION 0 | 63 | #define VIRTIO_PCI_ABI_VERSION 0 |
diff --git a/include/linux/virtio_ring.h b/include/linux/virtio_ring.h index 71e03722fb59..693e0ec5afa6 100644 --- a/include/linux/virtio_ring.h +++ b/include/linux/virtio_ring.h | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | #define VRING_DESC_F_NEXT 1 | 14 | #define VRING_DESC_F_NEXT 1 |
| 15 | /* This marks a buffer as write-only (otherwise read-only). */ | 15 | /* This marks a buffer as write-only (otherwise read-only). */ |
| 16 | #define VRING_DESC_F_WRITE 2 | 16 | #define VRING_DESC_F_WRITE 2 |
| 17 | /* This means the buffer contains a list of buffer descriptors. */ | ||
| 18 | #define VRING_DESC_F_INDIRECT 4 | ||
| 17 | 19 | ||
| 18 | /* The Host uses this in used->flags to advise the Guest: don't kick me when | 20 | /* The Host uses this in used->flags to advise the Guest: don't kick me when |
| 19 | * you add a buffer. It's unreliable, so it's simply an optimization. Guest | 21 | * you add a buffer. It's unreliable, so it's simply an optimization. Guest |
| @@ -24,6 +26,9 @@ | |||
| 24 | * optimization. */ | 26 | * optimization. */ |
| 25 | #define VRING_AVAIL_F_NO_INTERRUPT 1 | 27 | #define VRING_AVAIL_F_NO_INTERRUPT 1 |
| 26 | 28 | ||
| 29 | /* We support indirect buffer descriptors */ | ||
| 30 | #define VIRTIO_RING_F_INDIRECT_DESC 28 | ||
| 31 | |||
| 27 | /* Virtio ring descriptors: 16 bytes. These can chain together via "next". */ | 32 | /* Virtio ring descriptors: 16 bytes. These can chain together via "next". */ |
| 28 | struct vring_desc | 33 | struct vring_desc |
| 29 | { | 34 | { |
| @@ -119,7 +124,8 @@ struct virtqueue *vring_new_virtqueue(unsigned int num, | |||
| 119 | struct virtio_device *vdev, | 124 | struct virtio_device *vdev, |
| 120 | void *pages, | 125 | void *pages, |
| 121 | void (*notify)(struct virtqueue *vq), | 126 | void (*notify)(struct virtqueue *vq), |
| 122 | void (*callback)(struct virtqueue *vq)); | 127 | void (*callback)(struct virtqueue *vq), |
| 128 | const char *name); | ||
| 123 | void vring_del_virtqueue(struct virtqueue *vq); | 129 | void vring_del_virtqueue(struct virtqueue *vq); |
| 124 | /* Filter out transport-specific feature bits. */ | 130 | /* Filter out transport-specific feature bits. */ |
| 125 | void vring_transport_features(struct virtio_device *vdev); | 131 | void vring_transport_features(struct virtio_device *vdev); |
diff --git a/include/linux/wimax.h b/include/linux/wimax.h index c89de7f4e5b9..4fdcc5635518 100644 --- a/include/linux/wimax.h +++ b/include/linux/wimax.h | |||
| @@ -59,7 +59,7 @@ enum { | |||
| 59 | * M - Major: change if removing or modifying an existing call. | 59 | * M - Major: change if removing or modifying an existing call. |
| 60 | * m - minor: change when adding a new call | 60 | * m - minor: change when adding a new call |
| 61 | */ | 61 | */ |
| 62 | WIMAX_GNL_VERSION = 00, | 62 | WIMAX_GNL_VERSION = 01, |
| 63 | /* Generic NetLink attributes */ | 63 | /* Generic NetLink attributes */ |
| 64 | WIMAX_GNL_ATTR_INVALID = 0x00, | 64 | WIMAX_GNL_ATTR_INVALID = 0x00, |
| 65 | WIMAX_GNL_ATTR_MAX = 10, | 65 | WIMAX_GNL_ATTR_MAX = 10, |
| @@ -78,6 +78,7 @@ enum { | |||
| 78 | WIMAX_GNL_OP_RFKILL, /* Run wimax_rfkill() */ | 78 | WIMAX_GNL_OP_RFKILL, /* Run wimax_rfkill() */ |
| 79 | WIMAX_GNL_OP_RESET, /* Run wimax_rfkill() */ | 79 | WIMAX_GNL_OP_RESET, /* Run wimax_rfkill() */ |
| 80 | WIMAX_GNL_RE_STATE_CHANGE, /* Report: status change */ | 80 | WIMAX_GNL_RE_STATE_CHANGE, /* Report: status change */ |
| 81 | WIMAX_GNL_OP_STATE_GET, /* Request for current state */ | ||
| 81 | }; | 82 | }; |
| 82 | 83 | ||
| 83 | 84 | ||
| @@ -113,6 +114,10 @@ enum { | |||
| 113 | WIMAX_GNL_RESET_IFIDX = 1, | 114 | WIMAX_GNL_RESET_IFIDX = 1, |
| 114 | }; | 115 | }; |
| 115 | 116 | ||
| 117 | /* Atributes for wimax_state_get() */ | ||
| 118 | enum { | ||
| 119 | WIMAX_GNL_STGET_IFIDX = 1, | ||
| 120 | }; | ||
| 116 | 121 | ||
| 117 | /* | 122 | /* |
| 118 | * Attributes for the Report State Change | 123 | * Attributes for the Report State Change |
diff --git a/include/linux/wimax/i2400m.h b/include/linux/wimax/i2400m.h index d5148a7889a6..433693ef2bb0 100644 --- a/include/linux/wimax/i2400m.h +++ b/include/linux/wimax/i2400m.h | |||
| @@ -266,7 +266,7 @@ enum i2400m_ro_type { | |||
| 266 | 266 | ||
| 267 | /* Misc constants */ | 267 | /* Misc constants */ |
| 268 | enum { | 268 | enum { |
| 269 | I2400M_PL_PAD = 16, /* Payload data size alignment */ | 269 | I2400M_PL_ALIGN = 16, /* Payload data size alignment */ |
| 270 | I2400M_PL_SIZE_MAX = 0x3EFF, | 270 | I2400M_PL_SIZE_MAX = 0x3EFF, |
| 271 | I2400M_MAX_PLS_IN_MSG = 60, | 271 | I2400M_MAX_PLS_IN_MSG = 60, |
| 272 | /* protocol barkers: sync sequences; for notifications they | 272 | /* protocol barkers: sync sequences; for notifications they |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 93445477f86a..3224820c8514 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
| @@ -79,7 +79,6 @@ struct writeback_control { | |||
| 79 | void writeback_inodes(struct writeback_control *wbc); | 79 | void writeback_inodes(struct writeback_control *wbc); |
| 80 | int inode_wait(void *); | 80 | int inode_wait(void *); |
| 81 | void sync_inodes_sb(struct super_block *, int wait); | 81 | void sync_inodes_sb(struct super_block *, int wait); |
| 82 | void sync_inodes(int wait); | ||
| 83 | 82 | ||
| 84 | /* writeback.h requires fs.h; it, too, is not included from here. */ | 83 | /* writeback.h requires fs.h; it, too, is not included from here. */ |
| 85 | static inline void wait_on_inode(struct inode *inode) | 84 | static inline void wait_on_inode(struct inode *inode) |
