diff options
author | Vegard Nossum <vegard.nossum@gmail.com> | 2009-06-15 09:50:49 -0400 |
---|---|---|
committer | Vegard Nossum <vegard.nossum@gmail.com> | 2009-06-15 09:50:49 -0400 |
commit | 722f2a6c87f34ee0fd0130a8cf45f81e0705594a (patch) | |
tree | 50b054df34d2731eb0ba0cf1a6c27e43e7eed428 /include/linux | |
parent | 7a0aeb14e18ad59394bd9bbc6e57fb345819e748 (diff) | |
parent | 45e3e1935e2857c54783291107d33323b3ef33c8 (diff) |
Merge commit 'linus/master' into HEAD
Conflicts:
MAINTAINERS
Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
Diffstat (limited to 'include/linux')
42 files changed, 811 insertions, 94 deletions
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/blkdev.h b/include/linux/blkdev.h index ebdfde8fe556..0b1a6cae9de1 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -1226,6 +1226,8 @@ struct block_device_operations { | |||
1226 | int (*direct_access) (struct block_device *, sector_t, | 1226 | int (*direct_access) (struct block_device *, sector_t, |
1227 | void **, unsigned long *); | 1227 | void **, unsigned long *); |
1228 | int (*media_changed) (struct gendisk *); | 1228 | int (*media_changed) (struct gendisk *); |
1229 | unsigned long long (*set_capacity) (struct gendisk *, | ||
1230 | unsigned long long); | ||
1229 | int (*revalidate_disk) (struct gendisk *); | 1231 | int (*revalidate_disk) (struct gendisk *); |
1230 | int (*getgeo)(struct block_device *, struct hd_geometry *); | 1232 | int (*getgeo)(struct block_device *, struct hd_geometry *); |
1231 | struct module *owner; | 1233 | struct module *owner; |
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/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/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/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/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 3885e7f75562..80e14b8c2e78 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
@@ -97,6 +97,9 @@ struct vm_area_struct; | |||
97 | __GFP_NOWARN|__GFP_REPEAT|__GFP_NOFAIL|\ | 97 | __GFP_NOWARN|__GFP_REPEAT|__GFP_NOFAIL|\ |
98 | __GFP_NORETRY|__GFP_NOMEMALLOC) | 98 | __GFP_NORETRY|__GFP_NOMEMALLOC) |
99 | 99 | ||
100 | /* Control slab gfp mask during early boot */ | ||
101 | #define SLAB_GFP_BOOT_MASK __GFP_BITS_MASK & ~(__GFP_WAIT|__GFP_IO|__GFP_FS) | ||
102 | |||
100 | /* Control allocation constraints */ | 103 | /* Control allocation constraints */ |
101 | #define GFP_CONSTRAINT_MASK (__GFP_HARDWALL|__GFP_THISNODE) | 104 | #define GFP_CONSTRAINT_MASK (__GFP_HARDWALL|__GFP_THISNODE) |
102 | 105 | ||
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/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/if_ether.h b/include/linux/if_ether.h index cfe4fe1b7132..60e8934d10b5 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 | /* |
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 dd574d51bcaa..2721f07e9354 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/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/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/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/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/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..9f36e1cdbf01 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 | ||
@@ -1314,6 +1315,13 @@ | |||
1314 | 1315 | ||
1315 | #define PCI_VENDOR_ID_CREATIVE 0x1102 /* duplicate: ECTIVA */ | 1316 | #define PCI_VENDOR_ID_CREATIVE 0x1102 /* duplicate: ECTIVA */ |
1316 | #define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002 | 1317 | #define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002 |
1318 | #define PCI_DEVICE_ID_CREATIVE_20K1 0x0005 | ||
1319 | #define PCI_DEVICE_ID_CREATIVE_20K2 0x000b | ||
1320 | #define PCI_SUBDEVICE_ID_CREATIVE_SB0760 0x0024 | ||
1321 | #define PCI_SUBDEVICE_ID_CREATIVE_SB08801 0x0041 | ||
1322 | #define PCI_SUBDEVICE_ID_CREATIVE_SB08802 0x0042 | ||
1323 | #define PCI_SUBDEVICE_ID_CREATIVE_SB08803 0x0043 | ||
1324 | #define PCI_SUBDEVICE_ID_CREATIVE_HENDRIX 0x6000 | ||
1317 | 1325 | ||
1318 | #define PCI_VENDOR_ID_ECTIVA 0x1102 /* duplicate: CREATIVE */ | 1326 | #define PCI_VENDOR_ID_ECTIVA 0x1102 /* duplicate: CREATIVE */ |
1319 | #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938 | 1327 | #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938 |
@@ -1847,6 +1855,10 @@ | |||
1847 | #define PCI_SUBDEVICE_ID_HYPERCOPE_METRO 0x0107 | 1855 | #define PCI_SUBDEVICE_ID_HYPERCOPE_METRO 0x0107 |
1848 | #define PCI_SUBDEVICE_ID_HYPERCOPE_CHAMP2 0x0108 | 1856 | #define PCI_SUBDEVICE_ID_HYPERCOPE_CHAMP2 0x0108 |
1849 | 1857 | ||
1858 | #define PCI_VENDOR_ID_DIGIGRAM 0x1369 | ||
1859 | #define PCI_SUBDEVICE_ID_DIGIGRAM_LX6464ES_SERIAL_SUBSYSTEM 0xc001 | ||
1860 | #define PCI_SUBDEVICE_ID_DIGIGRAM_LX6464ES_CAE_SERIAL_SUBSYSTEM 0xc002 | ||
1861 | |||
1850 | #define PCI_VENDOR_ID_KAWASAKI 0x136b | 1862 | #define PCI_VENDOR_ID_KAWASAKI 0x136b |
1851 | #define PCI_DEVICE_ID_MCHIP_KL5A72002 0xff01 | 1863 | #define PCI_DEVICE_ID_MCHIP_KL5A72002 0xff01 |
1852 | 1864 | ||
@@ -2115,6 +2127,7 @@ | |||
2115 | #define PCI_VENDOR_ID_MAINPINE 0x1522 | 2127 | #define PCI_VENDOR_ID_MAINPINE 0x1522 |
2116 | #define PCI_DEVICE_ID_MAINPINE_PBRIDGE 0x0100 | 2128 | #define PCI_DEVICE_ID_MAINPINE_PBRIDGE 0x0100 |
2117 | #define PCI_VENDOR_ID_ENE 0x1524 | 2129 | #define PCI_VENDOR_ID_ENE 0x1524 |
2130 | #define PCI_DEVICE_ID_ENE_CB710_FLASH 0x0510 | ||
2118 | #define PCI_DEVICE_ID_ENE_CB712_SD 0x0550 | 2131 | #define PCI_DEVICE_ID_ENE_CB712_SD 0x0550 |
2119 | #define PCI_DEVICE_ID_ENE_CB712_SD_2 0x0551 | 2132 | #define PCI_DEVICE_ID_ENE_CB712_SD_2 0x0551 |
2120 | #define PCI_DEVICE_ID_ENE_CB714_SD 0x0750 | 2133 | #define PCI_DEVICE_ID_ENE_CB714_SD 0x0750 |
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/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/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/slab.h b/include/linux/slab.h index e339fcf17cd3..2da8372519f5 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -326,4 +326,6 @@ static inline void *kzalloc_node(size_t size, gfp_t flags, int node) | |||
326 | return kmalloc_node(size, flags | __GFP_ZERO, node); | 326 | return kmalloc_node(size, flags | __GFP_ZERO, node); |
327 | } | 327 | } |
328 | 328 | ||
329 | void __init kmem_cache_init_late(void); | ||
330 | |||
329 | #endif /* _LINUX_SLAB_H */ | 331 | #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/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/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/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); |