diff options
Diffstat (limited to 'include/linux')
61 files changed, 1942 insertions, 398 deletions
diff --git a/include/linux/ahci_platform.h b/include/linux/ahci_platform.h new file mode 100644 index 000000000000..f7dd576dd5a4 --- /dev/null +++ b/include/linux/ahci_platform.h | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * AHCI SATA platform driver | ||
3 | * | ||
4 | * Copyright 2004-2005 Red Hat, Inc. | ||
5 | * Jeff Garzik <jgarzik@pobox.com> | ||
6 | * Copyright 2010 MontaVista Software, LLC. | ||
7 | * Anton Vorontsov <avorontsov@ru.mvista.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 as published by | ||
11 | * the Free Software Foundation; either version 2, or (at your option) | ||
12 | * any later version. | ||
13 | */ | ||
14 | |||
15 | #ifndef _AHCI_PLATFORM_H | ||
16 | #define _AHCI_PLATFORM_H | ||
17 | |||
18 | struct device; | ||
19 | struct ata_port_info; | ||
20 | |||
21 | struct ahci_platform_data { | ||
22 | int (*init)(struct device *dev); | ||
23 | void (*exit)(struct device *dev); | ||
24 | const struct ata_port_info *ata_port_info; | ||
25 | unsigned int force_port_map; | ||
26 | unsigned int mask_port_map; | ||
27 | }; | ||
28 | |||
29 | #endif /* _AHCI_PLATFORM_H */ | ||
diff --git a/include/linux/amba/mmci.h b/include/linux/amba/mmci.h index 6b4241748dda..7e466fe72025 100644 --- a/include/linux/amba/mmci.h +++ b/include/linux/amba/mmci.h | |||
@@ -6,8 +6,29 @@ | |||
6 | 6 | ||
7 | #include <linux/mmc/host.h> | 7 | #include <linux/mmc/host.h> |
8 | 8 | ||
9 | /** | ||
10 | * struct mmci_platform_data - platform configuration for the MMCI | ||
11 | * (also known as PL180) block. | ||
12 | * @f_max: the maximum operational frequency for this host in this | ||
13 | * platform configuration. When this is specified it takes precedence | ||
14 | * over the module parameter for the same frequency. | ||
15 | * @ocr_mask: available voltages on the 4 pins from the block, this | ||
16 | * is ignored if a regulator is used, see the MMC_VDD_* masks in | ||
17 | * mmc/host.h | ||
18 | * @translate_vdd: a callback function to translate a MMC_VDD_* | ||
19 | * mask into a value to be binary or:ed and written into the | ||
20 | * MMCIPWR register of the block | ||
21 | * @status: if no GPIO read function was given to the block in | ||
22 | * gpio_wp (below) this function will be called to determine | ||
23 | * whether a card is present in the MMC slot or not | ||
24 | * @gpio_wp: read this GPIO pin to see if the card is write protected | ||
25 | * @gpio_cd: read this GPIO pin to detect card insertion | ||
26 | * @capabilities: the capabilities of the block as implemented in | ||
27 | * this platform, signify anything MMC_CAP_* from mmc/host.h | ||
28 | */ | ||
9 | struct mmci_platform_data { | 29 | struct mmci_platform_data { |
10 | unsigned int ocr_mask; /* available voltages */ | 30 | unsigned int f_max; |
31 | unsigned int ocr_mask; | ||
11 | u32 (*translate_vdd)(struct device *, unsigned int); | 32 | u32 (*translate_vdd)(struct device *, unsigned int); |
12 | unsigned int (*status)(struct device *); | 33 | unsigned int (*status)(struct device *); |
13 | int gpio_wp; | 34 | int gpio_wp; |
diff --git a/include/linux/ata.h b/include/linux/ata.h index 700c5b9b3583..fe6e681a9d74 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
@@ -467,7 +467,7 @@ enum ata_ioctls { | |||
467 | 467 | ||
468 | /* core structures */ | 468 | /* core structures */ |
469 | 469 | ||
470 | struct ata_prd { | 470 | struct ata_bmdma_prd { |
471 | __le32 addr; | 471 | __le32 addr; |
472 | __le32 flags_len; | 472 | __le32 flags_len; |
473 | }; | 473 | }; |
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 4bca8b60cdf7..5ea3c60c160c 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
@@ -273,7 +273,6 @@ static inline s64 clocksource_cyc2ns(cycle_t cycles, u32 mult, u32 shift) | |||
273 | } | 273 | } |
274 | 274 | ||
275 | 275 | ||
276 | /* used to install a new clocksource */ | ||
277 | extern int clocksource_register(struct clocksource*); | 276 | extern int clocksource_register(struct clocksource*); |
278 | extern void clocksource_unregister(struct clocksource*); | 277 | extern void clocksource_unregister(struct clocksource*); |
279 | extern void clocksource_touch_watchdog(void); | 278 | extern void clocksource_touch_watchdog(void); |
@@ -287,6 +286,24 @@ extern void clocksource_mark_unstable(struct clocksource *cs); | |||
287 | extern void | 286 | extern void |
288 | clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); | 287 | clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); |
289 | 288 | ||
289 | /* | ||
290 | * Don't call __clocksource_register_scale directly, use | ||
291 | * clocksource_register_hz/khz | ||
292 | */ | ||
293 | extern int | ||
294 | __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq); | ||
295 | |||
296 | static inline int clocksource_register_hz(struct clocksource *cs, u32 hz) | ||
297 | { | ||
298 | return __clocksource_register_scale(cs, 1, hz); | ||
299 | } | ||
300 | |||
301 | static inline int clocksource_register_khz(struct clocksource *cs, u32 khz) | ||
302 | { | ||
303 | return __clocksource_register_scale(cs, 1000, khz); | ||
304 | } | ||
305 | |||
306 | |||
290 | static inline void | 307 | static inline void |
291 | clocksource_calc_mult_shift(struct clocksource *cs, u32 freq, u32 minsec) | 308 | clocksource_calc_mult_shift(struct clocksource *cs, u32 freq, u32 minsec) |
292 | { | 309 | { |
diff --git a/include/linux/device.h b/include/linux/device.h index 182192892d45..241b96bcd7ad 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -451,6 +451,10 @@ struct device { | |||
451 | 451 | ||
452 | static inline const char *dev_name(const struct device *dev) | 452 | static inline const char *dev_name(const struct device *dev) |
453 | { | 453 | { |
454 | /* Use the init name until the kobject becomes available */ | ||
455 | if (dev->init_name) | ||
456 | return dev->init_name; | ||
457 | |||
454 | return kobject_name(&dev->kobj); | 458 | return kobject_name(&dev->kobj); |
455 | } | 459 | } |
456 | 460 | ||
diff --git a/include/linux/elf.h b/include/linux/elf.h index 597858418051..4d608014753a 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h | |||
@@ -394,6 +394,7 @@ typedef struct elf64_shdr { | |||
394 | #define NT_S390_TODPREG 0x303 /* s390 TOD programmable register */ | 394 | #define NT_S390_TODPREG 0x303 /* s390 TOD programmable register */ |
395 | #define NT_S390_CTRS 0x304 /* s390 control registers */ | 395 | #define NT_S390_CTRS 0x304 /* s390 control registers */ |
396 | #define NT_S390_PREFIX 0x305 /* s390 prefix register */ | 396 | #define NT_S390_PREFIX 0x305 /* s390 prefix register */ |
397 | #define NT_S390_LAST_BREAK 0x306 /* s390 breaking event address */ | ||
397 | 398 | ||
398 | 399 | ||
399 | /* Note header in a PT_NOTE section */ | 400 | /* Note header in a PT_NOTE section */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index ca3df8c55f8f..4079ef99900f 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -2362,6 +2362,8 @@ extern void simple_release_fs(struct vfsmount **mount, int *count); | |||
2362 | 2362 | ||
2363 | extern ssize_t simple_read_from_buffer(void __user *to, size_t count, | 2363 | extern ssize_t simple_read_from_buffer(void __user *to, size_t count, |
2364 | loff_t *ppos, const void *from, size_t available); | 2364 | loff_t *ppos, const void *from, size_t available); |
2365 | extern ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos, | ||
2366 | const void __user *from, size_t count); | ||
2365 | 2367 | ||
2366 | extern int simple_fsync(struct file *, struct dentry *, int); | 2368 | extern int simple_fsync(struct file *, struct dentry *, int); |
2367 | 2369 | ||
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 5d86fb2309d2..fd0c1b857d3d 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
@@ -422,6 +422,8 @@ extern void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, | |||
422 | 422 | ||
423 | extern int schedule_hrtimeout_range(ktime_t *expires, unsigned long delta, | 423 | extern int schedule_hrtimeout_range(ktime_t *expires, unsigned long delta, |
424 | const enum hrtimer_mode mode); | 424 | const enum hrtimer_mode mode); |
425 | extern int schedule_hrtimeout_range_clock(ktime_t *expires, | ||
426 | unsigned long delta, const enum hrtimer_mode mode, int clock); | ||
425 | extern int schedule_hrtimeout(ktime_t *expires, const enum hrtimer_mode mode); | 427 | extern int schedule_hrtimeout(ktime_t *expires, const enum hrtimer_mode mode); |
426 | 428 | ||
427 | /* Soft interrupt function to run the hrtimer queues: */ | 429 | /* Soft interrupt function to run the hrtimer queues: */ |
diff --git a/include/linux/i2c-omap.h b/include/linux/i2c-omap.h new file mode 100644 index 000000000000..78ebf507ce56 --- /dev/null +++ b/include/linux/i2c-omap.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef __I2C_OMAP_H__ | ||
2 | #define __I2C_OMAP_H__ | ||
3 | |||
4 | struct omap_i2c_bus_platform_data { | ||
5 | u32 clkrate; | ||
6 | void (*set_mpu_wkup_lat)(struct device *dev, long set); | ||
7 | }; | ||
8 | |||
9 | #endif | ||
diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h index fb6784e86d5f..6de90bfc6acd 100644 --- a/include/linux/i2c/twl.h +++ b/include/linux/i2c/twl.h | |||
@@ -496,7 +496,7 @@ struct twl4030_madc_platform_data { | |||
496 | int irq_line; | 496 | int irq_line; |
497 | }; | 497 | }; |
498 | 498 | ||
499 | /* Boards have uniqe mappings of {row, col} --> keycode. | 499 | /* Boards have unique mappings of {row, col} --> keycode. |
500 | * Column and row are 8 bits each, but range only from 0..7. | 500 | * Column and row are 8 bits each, but range only from 0..7. |
501 | * a PERSISTENT_KEY is "always on" and never reported. | 501 | * a PERSISTENT_KEY is "always on" and never reported. |
502 | */ | 502 | */ |
@@ -569,9 +569,9 @@ struct twl4030_codec_data { | |||
569 | struct twl4030_codec_audio_data *audio; | 569 | struct twl4030_codec_audio_data *audio; |
570 | struct twl4030_codec_vibra_data *vibra; | 570 | struct twl4030_codec_vibra_data *vibra; |
571 | 571 | ||
572 | /* twl6030 */ | 572 | /* twl6040 */ |
573 | int audpwron_gpio; /* audio power-on gpio */ | 573 | int audpwron_gpio; /* audio power-on gpio */ |
574 | int naudint_irq; /* audio interrupt */ | 574 | int naudint_irq; /* audio interrupt */ |
575 | }; | 575 | }; |
576 | 576 | ||
577 | struct twl4030_platform_data { | 577 | struct twl4030_platform_data { |
@@ -664,15 +664,15 @@ static inline int twl4030charger_usb_en(int enable) { return 0; } | |||
664 | #define TWL4030_REG_VUSB3V1 19 | 664 | #define TWL4030_REG_VUSB3V1 19 |
665 | 665 | ||
666 | /* TWL6030 SMPS/LDO's */ | 666 | /* TWL6030 SMPS/LDO's */ |
667 | /* EXTERNAL dc-to-dc buck convertor contollable via SR */ | 667 | /* EXTERNAL dc-to-dc buck convertor controllable via SR */ |
668 | #define TWL6030_REG_VDD1 30 | 668 | #define TWL6030_REG_VDD1 30 |
669 | #define TWL6030_REG_VDD2 31 | 669 | #define TWL6030_REG_VDD2 31 |
670 | #define TWL6030_REG_VDD3 32 | 670 | #define TWL6030_REG_VDD3 32 |
671 | 671 | ||
672 | /* Non SR compliant dc-to-dc buck convertors */ | 672 | /* Non SR compliant dc-to-dc buck convertors */ |
673 | #define TWL6030_REG_VMEM 33 | 673 | #define TWL6030_REG_VMEM 33 |
674 | #define TWL6030_REG_V2V1 34 | 674 | #define TWL6030_REG_V2V1 34 |
675 | #define TWL6030_REG_V1V29 35 | 675 | #define TWL6030_REG_V1V29 35 |
676 | #define TWL6030_REG_V1V8 36 | 676 | #define TWL6030_REG_V1V8 36 |
677 | 677 | ||
678 | /* EXTERNAL LDOs */ | 678 | /* EXTERNAL LDOs */ |
diff --git a/include/linux/input.h b/include/linux/input.h index 7ed2251b33f1..83524e4f3290 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
@@ -806,6 +806,7 @@ struct input_absinfo { | |||
806 | #define BUS_HOST 0x19 | 806 | #define BUS_HOST 0x19 |
807 | #define BUS_GSC 0x1A | 807 | #define BUS_GSC 0x1A |
808 | #define BUS_ATARI 0x1B | 808 | #define BUS_ATARI 0x1B |
809 | #define BUS_SPI 0x1C | ||
809 | 810 | ||
810 | /* | 811 | /* |
811 | * MT_TOOL types | 812 | * MT_TOOL types |
diff --git a/include/linux/input/ad714x.h b/include/linux/input/ad714x.h new file mode 100644 index 000000000000..0cbe5e81482e --- /dev/null +++ b/include/linux/input/ad714x.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * include/linux/input/ad714x.h | ||
3 | * | ||
4 | * AD714x is very flexible, it can be used as buttons, scrollwheel, | ||
5 | * slider, touchpad at the same time. That depends on the boards. | ||
6 | * The platform_data for the device's "struct device" holds this | ||
7 | * information. | ||
8 | * | ||
9 | * Copyright 2009 Analog Devices Inc. | ||
10 | * | ||
11 | * Licensed under the GPL-2 or later. | ||
12 | */ | ||
13 | |||
14 | #ifndef __LINUX_INPUT_AD714X_H__ | ||
15 | #define __LINUX_INPUT_AD714X_H__ | ||
16 | |||
17 | #define STAGE_NUM 12 | ||
18 | #define STAGE_CFGREG_NUM 8 | ||
19 | #define SYS_CFGREG_NUM 8 | ||
20 | |||
21 | /* board information which need be initialized in arch/mach... */ | ||
22 | struct ad714x_slider_plat { | ||
23 | int start_stage; | ||
24 | int end_stage; | ||
25 | int max_coord; | ||
26 | }; | ||
27 | |||
28 | struct ad714x_wheel_plat { | ||
29 | int start_stage; | ||
30 | int end_stage; | ||
31 | int max_coord; | ||
32 | }; | ||
33 | |||
34 | struct ad714x_touchpad_plat { | ||
35 | int x_start_stage; | ||
36 | int x_end_stage; | ||
37 | int x_max_coord; | ||
38 | |||
39 | int y_start_stage; | ||
40 | int y_end_stage; | ||
41 | int y_max_coord; | ||
42 | }; | ||
43 | |||
44 | struct ad714x_button_plat { | ||
45 | int keycode; | ||
46 | unsigned short l_mask; | ||
47 | unsigned short h_mask; | ||
48 | }; | ||
49 | |||
50 | struct ad714x_platform_data { | ||
51 | int slider_num; | ||
52 | int wheel_num; | ||
53 | int touchpad_num; | ||
54 | int button_num; | ||
55 | struct ad714x_slider_plat *slider; | ||
56 | struct ad714x_wheel_plat *wheel; | ||
57 | struct ad714x_touchpad_plat *touchpad; | ||
58 | struct ad714x_button_plat *button; | ||
59 | unsigned short stage_cfg_reg[STAGE_NUM][STAGE_CFGREG_NUM]; | ||
60 | unsigned short sys_cfg_reg[SYS_CFGREG_NUM]; | ||
61 | }; | ||
62 | |||
63 | #endif | ||
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 75f3f00ac1e5..5137db3317f9 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -39,7 +39,8 @@ | |||
39 | * These flags used only by the kernel as part of the | 39 | * These flags used only by the kernel as part of the |
40 | * irq handling routines. | 40 | * irq handling routines. |
41 | * | 41 | * |
42 | * IRQF_DISABLED - keep irqs disabled when calling the action handler | 42 | * IRQF_DISABLED - keep irqs disabled when calling the action handler. |
43 | * DEPRECATED. This flag is a NOOP and scheduled to be removed | ||
43 | * IRQF_SAMPLE_RANDOM - irq is used to feed the random generator | 44 | * IRQF_SAMPLE_RANDOM - irq is used to feed the random generator |
44 | * IRQF_SHARED - allow sharing the irq among several devices | 45 | * IRQF_SHARED - allow sharing the irq among several devices |
45 | * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur | 46 | * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur |
@@ -77,6 +78,18 @@ enum { | |||
77 | IRQTF_AFFINITY, | 78 | IRQTF_AFFINITY, |
78 | }; | 79 | }; |
79 | 80 | ||
81 | /** | ||
82 | * These values can be returned by request_any_context_irq() and | ||
83 | * describe the context the interrupt will be run in. | ||
84 | * | ||
85 | * IRQC_IS_HARDIRQ - interrupt runs in hardirq context | ||
86 | * IRQC_IS_NESTED - interrupt runs in a nested threaded context | ||
87 | */ | ||
88 | enum { | ||
89 | IRQC_IS_HARDIRQ = 0, | ||
90 | IRQC_IS_NESTED, | ||
91 | }; | ||
92 | |||
80 | typedef irqreturn_t (*irq_handler_t)(int, void *); | 93 | typedef irqreturn_t (*irq_handler_t)(int, void *); |
81 | 94 | ||
82 | /** | 95 | /** |
@@ -120,6 +133,10 @@ request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, | |||
120 | return request_threaded_irq(irq, handler, NULL, flags, name, dev); | 133 | return request_threaded_irq(irq, handler, NULL, flags, name, dev); |
121 | } | 134 | } |
122 | 135 | ||
136 | extern int __must_check | ||
137 | request_any_context_irq(unsigned int irq, irq_handler_t handler, | ||
138 | unsigned long flags, const char *name, void *dev_id); | ||
139 | |||
123 | extern void exit_irq_thread(void); | 140 | extern void exit_irq_thread(void); |
124 | #else | 141 | #else |
125 | 142 | ||
@@ -141,6 +158,13 @@ request_threaded_irq(unsigned int irq, irq_handler_t handler, | |||
141 | return request_irq(irq, handler, flags, name, dev); | 158 | return request_irq(irq, handler, flags, name, dev); |
142 | } | 159 | } |
143 | 160 | ||
161 | static inline int __must_check | ||
162 | request_any_context_irq(unsigned int irq, irq_handler_t handler, | ||
163 | unsigned long flags, const char *name, void *dev_id) | ||
164 | { | ||
165 | return request_irq(irq, handler, flags, name, dev_id); | ||
166 | } | ||
167 | |||
144 | static inline void exit_irq_thread(void) { } | 168 | static inline void exit_irq_thread(void) { } |
145 | #endif | 169 | #endif |
146 | 170 | ||
@@ -209,6 +233,7 @@ extern int irq_set_affinity(unsigned int irq, const struct cpumask *cpumask); | |||
209 | extern int irq_can_set_affinity(unsigned int irq); | 233 | extern int irq_can_set_affinity(unsigned int irq); |
210 | extern int irq_select_affinity(unsigned int irq); | 234 | extern int irq_select_affinity(unsigned int irq); |
211 | 235 | ||
236 | extern int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m); | ||
212 | #else /* CONFIG_SMP */ | 237 | #else /* CONFIG_SMP */ |
213 | 238 | ||
214 | static inline int irq_set_affinity(unsigned int irq, const struct cpumask *m) | 239 | static inline int irq_set_affinity(unsigned int irq, const struct cpumask *m) |
@@ -223,6 +248,11 @@ static inline int irq_can_set_affinity(unsigned int irq) | |||
223 | 248 | ||
224 | static inline int irq_select_affinity(unsigned int irq) { return 0; } | 249 | static inline int irq_select_affinity(unsigned int irq) { return 0; } |
225 | 250 | ||
251 | static inline int irq_set_affinity_hint(unsigned int irq, | ||
252 | const struct cpumask *m) | ||
253 | { | ||
254 | return -EINVAL; | ||
255 | } | ||
226 | #endif /* CONFIG_SMP && CONFIG_GENERIC_HARDIRQS */ | 256 | #endif /* CONFIG_SMP && CONFIG_GENERIC_HARDIRQS */ |
227 | 257 | ||
228 | #ifdef CONFIG_GENERIC_HARDIRQS | 258 | #ifdef CONFIG_GENERIC_HARDIRQS |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 707ab122e2e6..c03243ad84b4 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -195,6 +195,7 @@ struct irq_desc { | |||
195 | raw_spinlock_t lock; | 195 | raw_spinlock_t lock; |
196 | #ifdef CONFIG_SMP | 196 | #ifdef CONFIG_SMP |
197 | cpumask_var_t affinity; | 197 | cpumask_var_t affinity; |
198 | const struct cpumask *affinity_hint; | ||
198 | unsigned int node; | 199 | unsigned int node; |
199 | #ifdef CONFIG_GENERIC_PENDING_IRQ | 200 | #ifdef CONFIG_GENERIC_PENDING_IRQ |
200 | cpumask_var_t pending_mask; | 201 | cpumask_var_t pending_mask; |
diff --git a/include/linux/kfifo.h b/include/linux/kfifo.h index e117b1aee69c..9fad0527344f 100644 --- a/include/linux/kfifo.h +++ b/include/linux/kfifo.h | |||
@@ -201,7 +201,7 @@ static inline __must_check unsigned int kfifo_avail(struct kfifo *fifo) | |||
201 | * @n: the length of the data to be added. | 201 | * @n: the length of the data to be added. |
202 | * @lock: pointer to the spinlock to use for locking. | 202 | * @lock: pointer to the spinlock to use for locking. |
203 | * | 203 | * |
204 | * This function copies at most @len bytes from the @from buffer into | 204 | * This function copies at most @n bytes from the @from buffer into |
205 | * the FIFO depending on the free space, and returns the number of | 205 | * the FIFO depending on the free space, and returns the number of |
206 | * bytes copied. | 206 | * bytes copied. |
207 | */ | 207 | */ |
@@ -227,7 +227,7 @@ static inline unsigned int kfifo_in_locked(struct kfifo *fifo, | |||
227 | * @n: the size of the destination buffer. | 227 | * @n: the size of the destination buffer. |
228 | * @lock: pointer to the spinlock to use for locking. | 228 | * @lock: pointer to the spinlock to use for locking. |
229 | * | 229 | * |
230 | * This function copies at most @len bytes from the FIFO into the | 230 | * This function copies at most @n bytes from the FIFO into the |
231 | * @to buffer and returns the number of copied bytes. | 231 | * @to buffer and returns the number of copied bytes. |
232 | */ | 232 | */ |
233 | static inline __must_check unsigned int kfifo_out_locked(struct kfifo *fifo, | 233 | static inline __must_check unsigned int kfifo_out_locked(struct kfifo *fifo, |
diff --git a/include/linux/kobj_map.h b/include/linux/kobj_map.h index 73717ed9ea79..18ca75ffcc5a 100644 --- a/include/linux/kobj_map.h +++ b/include/linux/kobj_map.h | |||
@@ -1,3 +1,10 @@ | |||
1 | /* | ||
2 | * kobj_map.h | ||
3 | */ | ||
4 | |||
5 | #ifndef _KOBJ_MAP_H_ | ||
6 | #define _KOBJ_MAP_H_ | ||
7 | |||
1 | #include <linux/mutex.h> | 8 | #include <linux/mutex.h> |
2 | 9 | ||
3 | typedef struct kobject *kobj_probe_t(dev_t, int *, void *); | 10 | typedef struct kobject *kobj_probe_t(dev_t, int *, void *); |
@@ -8,3 +15,5 @@ int kobj_map(struct kobj_map *, dev_t, unsigned long, struct module *, | |||
8 | void kobj_unmap(struct kobj_map *, dev_t, unsigned long); | 15 | void kobj_unmap(struct kobj_map *, dev_t, unsigned long); |
9 | struct kobject *kobj_lookup(struct kobj_map *, dev_t, int *); | 16 | struct kobject *kobj_lookup(struct kobj_map *, dev_t, int *); |
10 | struct kobj_map *kobj_map_init(kobj_probe_t *, struct mutex *); | 17 | struct kobj_map *kobj_map_init(kobj_probe_t *, struct mutex *); |
18 | |||
19 | #endif /* _KOBJ_MAP_H_ */ | ||
diff --git a/include/linux/kref.h b/include/linux/kref.h index b0cb0ebad9e6..baf4b9e4b194 100644 --- a/include/linux/kref.h +++ b/include/linux/kref.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * kref.c - library routines for handling generic reference counted objects | 2 | * kref.h - library routines for handling generic reference counted objects |
3 | * | 3 | * |
4 | * Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com> | 4 | * Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com> |
5 | * Copyright (C) 2004 IBM Corp. | 5 | * Copyright (C) 2004 IBM Corp. |
diff --git a/include/linux/ktime.h b/include/linux/ktime.h index ce5983225be4..e1ceaa9b36bb 100644 --- a/include/linux/ktime.h +++ b/include/linux/ktime.h | |||
@@ -130,7 +130,7 @@ static inline ktime_t timeval_to_ktime(struct timeval tv) | |||
130 | /* Convert ktime_t to nanoseconds - NOP in the scalar storage format: */ | 130 | /* Convert ktime_t to nanoseconds - NOP in the scalar storage format: */ |
131 | #define ktime_to_ns(kt) ((kt).tv64) | 131 | #define ktime_to_ns(kt) ((kt).tv64) |
132 | 132 | ||
133 | #else | 133 | #else /* !((BITS_PER_LONG == 64) || defined(CONFIG_KTIME_SCALAR)) */ |
134 | 134 | ||
135 | /* | 135 | /* |
136 | * Helper macros/inlines to get the ktime_t math right in the timespec | 136 | * Helper macros/inlines to get the ktime_t math right in the timespec |
@@ -275,7 +275,7 @@ static inline s64 ktime_to_ns(const ktime_t kt) | |||
275 | return (s64) kt.tv.sec * NSEC_PER_SEC + kt.tv.nsec; | 275 | return (s64) kt.tv.sec * NSEC_PER_SEC + kt.tv.nsec; |
276 | } | 276 | } |
277 | 277 | ||
278 | #endif | 278 | #endif /* !((BITS_PER_LONG == 64) || defined(CONFIG_KTIME_SCALAR)) */ |
279 | 279 | ||
280 | /** | 280 | /** |
281 | * ktime_equal - Compares two ktime_t variables to see if they are equal | 281 | * ktime_equal - Compares two ktime_t variables to see if they are equal |
@@ -295,6 +295,12 @@ static inline s64 ktime_to_us(const ktime_t kt) | |||
295 | return (s64) tv.tv_sec * USEC_PER_SEC + tv.tv_usec; | 295 | return (s64) tv.tv_sec * USEC_PER_SEC + tv.tv_usec; |
296 | } | 296 | } |
297 | 297 | ||
298 | static inline s64 ktime_to_ms(const ktime_t kt) | ||
299 | { | ||
300 | struct timeval tv = ktime_to_timeval(kt); | ||
301 | return (s64) tv.tv_sec * MSEC_PER_SEC + tv.tv_usec / USEC_PER_MSEC; | ||
302 | } | ||
303 | |||
298 | static inline s64 ktime_us_delta(const ktime_t later, const ktime_t earlier) | 304 | static inline s64 ktime_us_delta(const ktime_t later, const ktime_t earlier) |
299 | { | 305 | { |
300 | return ktime_to_us(ktime_sub(later, earlier)); | 306 | return ktime_to_us(ktime_sub(later, earlier)); |
diff --git a/include/linux/libata.h b/include/linux/libata.h index b2f2003b92e5..ee84e7e12039 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -202,12 +202,6 @@ enum { | |||
202 | ATA_FLAG_SW_ACTIVITY = (1 << 22), /* driver supports sw activity | 202 | ATA_FLAG_SW_ACTIVITY = (1 << 22), /* driver supports sw activity |
203 | * led */ | 203 | * led */ |
204 | 204 | ||
205 | /* The following flag belongs to ap->pflags but is kept in | ||
206 | * ap->flags because it's referenced in many LLDs and will be | ||
207 | * removed in not-too-distant future. | ||
208 | */ | ||
209 | ATA_FLAG_DISABLED = (1 << 23), /* port is disabled, ignore it */ | ||
210 | |||
211 | /* bits 24:31 of ap->flags are reserved for LLD specific flags */ | 205 | /* bits 24:31 of ap->flags are reserved for LLD specific flags */ |
212 | 206 | ||
213 | 207 | ||
@@ -256,12 +250,13 @@ enum { | |||
256 | ATA_TMOUT_INTERNAL_QUICK = 5000, | 250 | ATA_TMOUT_INTERNAL_QUICK = 5000, |
257 | ATA_TMOUT_MAX_PARK = 30000, | 251 | ATA_TMOUT_MAX_PARK = 30000, |
258 | 252 | ||
259 | /* FIXME: GoVault needs 2s but we can't afford that without | 253 | /* |
260 | * parallel probing. 800ms is enough for iVDR disk | 254 | * GoVault needs 2s and iVDR disk HHD424020F7SV00 800ms. 2s |
261 | * HHD424020F7SV00. Increase to 2secs when parallel probing | 255 | * is too much without parallel probing. Use 2s if parallel |
262 | * is in place. | 256 | * probing is available, 800ms otherwise. |
263 | */ | 257 | */ |
264 | ATA_TMOUT_FF_WAIT = 800, | 258 | ATA_TMOUT_FF_WAIT_LONG = 2000, |
259 | ATA_TMOUT_FF_WAIT = 800, | ||
265 | 260 | ||
266 | /* Spec mandates to wait for ">= 2ms" before checking status | 261 | /* Spec mandates to wait for ">= 2ms" before checking status |
267 | * after reset. We wait 150ms, because that was the magic | 262 | * after reset. We wait 150ms, because that was the magic |
@@ -721,15 +716,15 @@ struct ata_port { | |||
721 | unsigned int print_id; /* user visible unique port ID */ | 716 | unsigned int print_id; /* user visible unique port ID */ |
722 | unsigned int port_no; /* 0 based port no. inside the host */ | 717 | unsigned int port_no; /* 0 based port no. inside the host */ |
723 | 718 | ||
724 | struct ata_prd *prd; /* our SG list */ | ||
725 | dma_addr_t prd_dma; /* and its DMA mapping */ | ||
726 | |||
727 | #ifdef CONFIG_ATA_SFF | 719 | #ifdef CONFIG_ATA_SFF |
728 | struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */ | 720 | struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */ |
729 | #endif /* CONFIG_ATA_SFF */ | ||
730 | |||
731 | u8 ctl; /* cache of ATA control register */ | 721 | u8 ctl; /* cache of ATA control register */ |
732 | u8 last_ctl; /* Cache last written value */ | 722 | u8 last_ctl; /* Cache last written value */ |
723 | struct delayed_work sff_pio_task; | ||
724 | struct ata_bmdma_prd *bmdma_prd; /* BMDMA SG list */ | ||
725 | dma_addr_t bmdma_prd_dma; /* and its DMA mapping */ | ||
726 | #endif /* CONFIG_ATA_SFF */ | ||
727 | |||
733 | unsigned int pio_mask; | 728 | unsigned int pio_mask; |
734 | unsigned int mwdma_mask; | 729 | unsigned int mwdma_mask; |
735 | unsigned int udma_mask; | 730 | unsigned int udma_mask; |
@@ -751,8 +746,6 @@ struct ata_port { | |||
751 | struct ata_host *host; | 746 | struct ata_host *host; |
752 | struct device *dev; | 747 | struct device *dev; |
753 | 748 | ||
754 | void *port_task_data; | ||
755 | struct delayed_work port_task; | ||
756 | struct delayed_work hotplug_task; | 749 | struct delayed_work hotplug_task; |
757 | struct work_struct scsi_rescan_task; | 750 | struct work_struct scsi_rescan_task; |
758 | 751 | ||
@@ -849,6 +842,7 @@ struct ata_port_operations { | |||
849 | * SFF / taskfile oriented ops | 842 | * SFF / taskfile oriented ops |
850 | */ | 843 | */ |
851 | void (*sff_dev_select)(struct ata_port *ap, unsigned int device); | 844 | void (*sff_dev_select)(struct ata_port *ap, unsigned int device); |
845 | void (*sff_set_devctl)(struct ata_port *ap, u8 ctl); | ||
852 | u8 (*sff_check_status)(struct ata_port *ap); | 846 | u8 (*sff_check_status)(struct ata_port *ap); |
853 | u8 (*sff_check_altstatus)(struct ata_port *ap); | 847 | u8 (*sff_check_altstatus)(struct ata_port *ap); |
854 | void (*sff_tf_load)(struct ata_port *ap, const struct ata_taskfile *tf); | 848 | void (*sff_tf_load)(struct ata_port *ap, const struct ata_taskfile *tf); |
@@ -857,16 +851,15 @@ struct ata_port_operations { | |||
857 | const struct ata_taskfile *tf); | 851 | const struct ata_taskfile *tf); |
858 | unsigned int (*sff_data_xfer)(struct ata_device *dev, | 852 | unsigned int (*sff_data_xfer)(struct ata_device *dev, |
859 | unsigned char *buf, unsigned int buflen, int rw); | 853 | unsigned char *buf, unsigned int buflen, int rw); |
860 | u8 (*sff_irq_on)(struct ata_port *); | 854 | void (*sff_irq_on)(struct ata_port *); |
861 | bool (*sff_irq_check)(struct ata_port *); | 855 | bool (*sff_irq_check)(struct ata_port *); |
862 | void (*sff_irq_clear)(struct ata_port *); | 856 | void (*sff_irq_clear)(struct ata_port *); |
857 | void (*sff_drain_fifo)(struct ata_queued_cmd *qc); | ||
863 | 858 | ||
864 | void (*bmdma_setup)(struct ata_queued_cmd *qc); | 859 | void (*bmdma_setup)(struct ata_queued_cmd *qc); |
865 | void (*bmdma_start)(struct ata_queued_cmd *qc); | 860 | void (*bmdma_start)(struct ata_queued_cmd *qc); |
866 | void (*bmdma_stop)(struct ata_queued_cmd *qc); | 861 | void (*bmdma_stop)(struct ata_queued_cmd *qc); |
867 | u8 (*bmdma_status)(struct ata_port *ap); | 862 | u8 (*bmdma_status)(struct ata_port *ap); |
868 | |||
869 | void (*drain_fifo)(struct ata_queued_cmd *qc); | ||
870 | #endif /* CONFIG_ATA_SFF */ | 863 | #endif /* CONFIG_ATA_SFF */ |
871 | 864 | ||
872 | ssize_t (*em_show)(struct ata_port *ap, char *buf); | 865 | ssize_t (*em_show)(struct ata_port *ap, char *buf); |
@@ -935,7 +928,6 @@ static inline int ata_port_is_dummy(struct ata_port *ap) | |||
935 | return ap->ops == &ata_dummy_port_ops; | 928 | return ap->ops == &ata_dummy_port_ops; |
936 | } | 929 | } |
937 | 930 | ||
938 | extern void ata_port_probe(struct ata_port *); | ||
939 | extern int sata_set_spd(struct ata_link *link); | 931 | extern int sata_set_spd(struct ata_link *link); |
940 | extern int ata_std_prereset(struct ata_link *link, unsigned long deadline); | 932 | extern int ata_std_prereset(struct ata_link *link, unsigned long deadline); |
941 | extern int ata_wait_after_reset(struct ata_link *link, unsigned long deadline, | 933 | extern int ata_wait_after_reset(struct ata_link *link, unsigned long deadline, |
@@ -950,7 +942,6 @@ extern int sata_link_hardreset(struct ata_link *link, | |||
950 | extern int sata_std_hardreset(struct ata_link *link, unsigned int *class, | 942 | extern int sata_std_hardreset(struct ata_link *link, unsigned int *class, |
951 | unsigned long deadline); | 943 | unsigned long deadline); |
952 | extern void ata_std_postreset(struct ata_link *link, unsigned int *classes); | 944 | extern void ata_std_postreset(struct ata_link *link, unsigned int *classes); |
953 | extern void ata_port_disable(struct ata_port *); | ||
954 | 945 | ||
955 | extern struct ata_host *ata_host_alloc(struct device *dev, int max_ports); | 946 | extern struct ata_host *ata_host_alloc(struct device *dev, int max_ports); |
956 | extern struct ata_host *ata_host_alloc_pinfo(struct device *dev, | 947 | extern struct ata_host *ata_host_alloc_pinfo(struct device *dev, |
@@ -1006,7 +997,6 @@ extern unsigned long ata_xfer_mode2mask(u8 xfer_mode); | |||
1006 | extern int ata_xfer_mode2shift(unsigned long xfer_mode); | 997 | extern int ata_xfer_mode2shift(unsigned long xfer_mode); |
1007 | extern const char *ata_mode_string(unsigned long xfer_mask); | 998 | extern const char *ata_mode_string(unsigned long xfer_mask); |
1008 | extern unsigned long ata_id_xfermask(const u16 *id); | 999 | extern unsigned long ata_id_xfermask(const u16 *id); |
1009 | extern int ata_port_start(struct ata_port *ap); | ||
1010 | extern int ata_std_qc_defer(struct ata_queued_cmd *qc); | 1000 | extern int ata_std_qc_defer(struct ata_queued_cmd *qc); |
1011 | extern void ata_noop_qc_prep(struct ata_queued_cmd *qc); | 1001 | extern void ata_noop_qc_prep(struct ata_queued_cmd *qc); |
1012 | extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, | 1002 | extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, |
@@ -1039,9 +1029,6 @@ extern int ata_cable_sata(struct ata_port *ap); | |||
1039 | extern int ata_cable_ignore(struct ata_port *ap); | 1029 | extern int ata_cable_ignore(struct ata_port *ap); |
1040 | extern int ata_cable_unknown(struct ata_port *ap); | 1030 | extern int ata_cable_unknown(struct ata_port *ap); |
1041 | 1031 | ||
1042 | extern void ata_pio_queue_task(struct ata_port *ap, void *data, | ||
1043 | unsigned long delay); | ||
1044 | |||
1045 | /* Timing helpers */ | 1032 | /* Timing helpers */ |
1046 | extern unsigned int ata_pio_need_iordy(const struct ata_device *); | 1033 | extern unsigned int ata_pio_need_iordy(const struct ata_device *); |
1047 | extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode); | 1034 | extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode); |
@@ -1443,7 +1430,11 @@ static inline void ata_tf_init(struct ata_device *dev, struct ata_taskfile *tf) | |||
1443 | { | 1430 | { |
1444 | memset(tf, 0, sizeof(*tf)); | 1431 | memset(tf, 0, sizeof(*tf)); |
1445 | 1432 | ||
1433 | #ifdef CONFIG_ATA_SFF | ||
1446 | tf->ctl = dev->link->ap->ctl; | 1434 | tf->ctl = dev->link->ap->ctl; |
1435 | #else | ||
1436 | tf->ctl = ATA_DEVCTL_OBS; | ||
1437 | #endif | ||
1447 | if (dev->devno == 0) | 1438 | if (dev->devno == 0) |
1448 | tf->device = ATA_DEVICE_OBS; | 1439 | tf->device = ATA_DEVICE_OBS; |
1449 | else | 1440 | else |
@@ -1578,8 +1569,6 @@ extern const struct ata_port_operations ata_bmdma32_port_ops; | |||
1578 | .sg_tablesize = LIBATA_MAX_PRD, \ | 1569 | .sg_tablesize = LIBATA_MAX_PRD, \ |
1579 | .dma_boundary = ATA_DMA_BOUNDARY | 1570 | .dma_boundary = ATA_DMA_BOUNDARY |
1580 | 1571 | ||
1581 | extern void ata_sff_qc_prep(struct ata_queued_cmd *qc); | ||
1582 | extern void ata_sff_dumb_qc_prep(struct ata_queued_cmd *qc); | ||
1583 | extern void ata_sff_dev_select(struct ata_port *ap, unsigned int device); | 1572 | extern void ata_sff_dev_select(struct ata_port *ap, unsigned int device); |
1584 | extern u8 ata_sff_check_status(struct ata_port *ap); | 1573 | extern u8 ata_sff_check_status(struct ata_port *ap); |
1585 | extern void ata_sff_pause(struct ata_port *ap); | 1574 | extern void ata_sff_pause(struct ata_port *ap); |
@@ -1597,10 +1586,11 @@ extern unsigned int ata_sff_data_xfer32(struct ata_device *dev, | |||
1597 | unsigned char *buf, unsigned int buflen, int rw); | 1586 | unsigned char *buf, unsigned int buflen, int rw); |
1598 | extern unsigned int ata_sff_data_xfer_noirq(struct ata_device *dev, | 1587 | extern unsigned int ata_sff_data_xfer_noirq(struct ata_device *dev, |
1599 | unsigned char *buf, unsigned int buflen, int rw); | 1588 | unsigned char *buf, unsigned int buflen, int rw); |
1600 | extern u8 ata_sff_irq_on(struct ata_port *ap); | 1589 | extern void ata_sff_irq_on(struct ata_port *ap); |
1601 | extern void ata_sff_irq_clear(struct ata_port *ap); | 1590 | extern void ata_sff_irq_clear(struct ata_port *ap); |
1602 | extern int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, | 1591 | extern int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, |
1603 | u8 status, int in_wq); | 1592 | u8 status, int in_wq); |
1593 | extern void ata_sff_queue_pio_task(struct ata_port *ap, unsigned long delay); | ||
1604 | extern unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc); | 1594 | extern unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc); |
1605 | extern bool ata_sff_qc_fill_rtf(struct ata_queued_cmd *qc); | 1595 | extern bool ata_sff_qc_fill_rtf(struct ata_queued_cmd *qc); |
1606 | extern unsigned int ata_sff_host_intr(struct ata_port *ap, | 1596 | extern unsigned int ata_sff_host_intr(struct ata_port *ap, |
@@ -1621,21 +1611,8 @@ extern int sata_sff_hardreset(struct ata_link *link, unsigned int *class, | |||
1621 | extern void ata_sff_postreset(struct ata_link *link, unsigned int *classes); | 1611 | extern void ata_sff_postreset(struct ata_link *link, unsigned int *classes); |
1622 | extern void ata_sff_drain_fifo(struct ata_queued_cmd *qc); | 1612 | extern void ata_sff_drain_fifo(struct ata_queued_cmd *qc); |
1623 | extern void ata_sff_error_handler(struct ata_port *ap); | 1613 | extern void ata_sff_error_handler(struct ata_port *ap); |
1624 | extern void ata_sff_post_internal_cmd(struct ata_queued_cmd *qc); | ||
1625 | extern int ata_sff_port_start(struct ata_port *ap); | ||
1626 | extern int ata_sff_port_start32(struct ata_port *ap); | ||
1627 | extern void ata_sff_std_ports(struct ata_ioports *ioaddr); | 1614 | extern void ata_sff_std_ports(struct ata_ioports *ioaddr); |
1628 | extern unsigned long ata_bmdma_mode_filter(struct ata_device *dev, | ||
1629 | unsigned long xfer_mask); | ||
1630 | extern void ata_bmdma_setup(struct ata_queued_cmd *qc); | ||
1631 | extern void ata_bmdma_start(struct ata_queued_cmd *qc); | ||
1632 | extern void ata_bmdma_stop(struct ata_queued_cmd *qc); | ||
1633 | extern u8 ata_bmdma_status(struct ata_port *ap); | ||
1634 | extern void ata_bus_reset(struct ata_port *ap); | ||
1635 | |||
1636 | #ifdef CONFIG_PCI | 1615 | #ifdef CONFIG_PCI |
1637 | extern int ata_pci_bmdma_clear_simplex(struct pci_dev *pdev); | ||
1638 | extern int ata_pci_bmdma_init(struct ata_host *host); | ||
1639 | extern int ata_pci_sff_init_host(struct ata_host *host); | 1616 | extern int ata_pci_sff_init_host(struct ata_host *host); |
1640 | extern int ata_pci_sff_prepare_host(struct pci_dev *pdev, | 1617 | extern int ata_pci_sff_prepare_host(struct pci_dev *pdev, |
1641 | const struct ata_port_info * const * ppi, | 1618 | const struct ata_port_info * const * ppi, |
@@ -1648,6 +1625,23 @@ extern int ata_pci_sff_init_one(struct pci_dev *pdev, | |||
1648 | struct scsi_host_template *sht, void *host_priv, int hflags); | 1625 | struct scsi_host_template *sht, void *host_priv, int hflags); |
1649 | #endif /* CONFIG_PCI */ | 1626 | #endif /* CONFIG_PCI */ |
1650 | 1627 | ||
1628 | extern void ata_bmdma_qc_prep(struct ata_queued_cmd *qc); | ||
1629 | extern unsigned int ata_bmdma_qc_issue(struct ata_queued_cmd *qc); | ||
1630 | extern void ata_bmdma_dumb_qc_prep(struct ata_queued_cmd *qc); | ||
1631 | extern void ata_bmdma_error_handler(struct ata_port *ap); | ||
1632 | extern void ata_bmdma_post_internal_cmd(struct ata_queued_cmd *qc); | ||
1633 | extern void ata_bmdma_setup(struct ata_queued_cmd *qc); | ||
1634 | extern void ata_bmdma_start(struct ata_queued_cmd *qc); | ||
1635 | extern void ata_bmdma_stop(struct ata_queued_cmd *qc); | ||
1636 | extern u8 ata_bmdma_status(struct ata_port *ap); | ||
1637 | extern int ata_bmdma_port_start(struct ata_port *ap); | ||
1638 | extern int ata_bmdma_port_start32(struct ata_port *ap); | ||
1639 | |||
1640 | #ifdef CONFIG_PCI | ||
1641 | extern int ata_pci_bmdma_clear_simplex(struct pci_dev *pdev); | ||
1642 | extern void ata_pci_bmdma_init(struct ata_host *host); | ||
1643 | #endif /* CONFIG_PCI */ | ||
1644 | |||
1651 | /** | 1645 | /** |
1652 | * ata_sff_busy_wait - Wait for a port status register | 1646 | * ata_sff_busy_wait - Wait for a port status register |
1653 | * @ap: Port to wait for. | 1647 | * @ap: Port to wait for. |
diff --git a/include/linux/lsm_audit.h b/include/linux/lsm_audit.h index f78f83d7663f..6907251d5200 100644 --- a/include/linux/lsm_audit.h +++ b/include/linux/lsm_audit.h | |||
@@ -33,7 +33,7 @@ struct common_audit_data { | |||
33 | #define LSM_AUDIT_DATA_IPC 4 | 33 | #define LSM_AUDIT_DATA_IPC 4 |
34 | #define LSM_AUDIT_DATA_TASK 5 | 34 | #define LSM_AUDIT_DATA_TASK 5 |
35 | #define LSM_AUDIT_DATA_KEY 6 | 35 | #define LSM_AUDIT_DATA_KEY 6 |
36 | #define LSM_AUDIT_NO_AUDIT 7 | 36 | #define LSM_AUDIT_DATA_NONE 7 |
37 | #define LSM_AUDIT_DATA_KMOD 8 | 37 | #define LSM_AUDIT_DATA_KMOD 8 |
38 | struct task_struct *tsk; | 38 | struct task_struct *tsk; |
39 | union { | 39 | union { |
diff --git a/include/linux/meye.h b/include/linux/meye.h index 12010ace1f04..0dd49954f746 100644 --- a/include/linux/meye.h +++ b/include/linux/meye.h | |||
@@ -44,17 +44,17 @@ struct meye_params { | |||
44 | }; | 44 | }; |
45 | 45 | ||
46 | /* query the extended parameters */ | 46 | /* query the extended parameters */ |
47 | #define MEYEIOC_G_PARAMS _IOR ('v', BASE_VIDIOCPRIVATE+0, struct meye_params) | 47 | #define MEYEIOC_G_PARAMS _IOR ('v', BASE_VIDIOC_PRIVATE+0, struct meye_params) |
48 | /* set the extended parameters */ | 48 | /* set the extended parameters */ |
49 | #define MEYEIOC_S_PARAMS _IOW ('v', BASE_VIDIOCPRIVATE+1, struct meye_params) | 49 | #define MEYEIOC_S_PARAMS _IOW ('v', BASE_VIDIOC_PRIVATE+1, struct meye_params) |
50 | /* queue a buffer for mjpeg capture */ | 50 | /* queue a buffer for mjpeg capture */ |
51 | #define MEYEIOC_QBUF_CAPT _IOW ('v', BASE_VIDIOCPRIVATE+2, int) | 51 | #define MEYEIOC_QBUF_CAPT _IOW ('v', BASE_VIDIOC_PRIVATE+2, int) |
52 | /* sync a previously queued mjpeg buffer */ | 52 | /* sync a previously queued mjpeg buffer */ |
53 | #define MEYEIOC_SYNC _IOWR('v', BASE_VIDIOCPRIVATE+3, int) | 53 | #define MEYEIOC_SYNC _IOWR('v', BASE_VIDIOC_PRIVATE+3, int) |
54 | /* get a still uncompressed snapshot */ | 54 | /* get a still uncompressed snapshot */ |
55 | #define MEYEIOC_STILLCAPT _IO ('v', BASE_VIDIOCPRIVATE+4) | 55 | #define MEYEIOC_STILLCAPT _IO ('v', BASE_VIDIOC_PRIVATE+4) |
56 | /* get a jpeg compressed snapshot */ | 56 | /* get a jpeg compressed snapshot */ |
57 | #define MEYEIOC_STILLJCAPT _IOR ('v', BASE_VIDIOCPRIVATE+5, int) | 57 | #define MEYEIOC_STILLJCAPT _IOR ('v', BASE_VIDIOC_PRIVATE+5, int) |
58 | 58 | ||
59 | /* V4L2 private controls */ | 59 | /* V4L2 private controls */ |
60 | #define V4L2_CID_AGC V4L2_CID_PRIVATE_BASE | 60 | #define V4L2_CID_AGC V4L2_CID_PRIVATE_BASE |
diff --git a/include/linux/mfd/davinci_voicecodec.h b/include/linux/mfd/davinci_voicecodec.h new file mode 100644 index 000000000000..0ab61320ffa8 --- /dev/null +++ b/include/linux/mfd/davinci_voicecodec.h | |||
@@ -0,0 +1,126 @@ | |||
1 | /* | ||
2 | * DaVinci Voice Codec Core Interface for TI platforms | ||
3 | * | ||
4 | * Copyright (C) 2010 Texas Instruments, Inc | ||
5 | * | ||
6 | * Author: Miguel Aguilar <miguel.aguilar@ridgerun.com> | ||
7 | * | ||
8 | * 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 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | |||
23 | #ifndef __LINUX_MFD_DAVINCI_VOICECODEC_H_ | ||
24 | #define __LINUX_MFD_DAVINIC_VOICECODEC_H_ | ||
25 | |||
26 | #include <linux/kernel.h> | ||
27 | #include <linux/platform_device.h> | ||
28 | #include <linux/mfd/core.h> | ||
29 | |||
30 | #include <mach/edma.h> | ||
31 | |||
32 | /* | ||
33 | * Register values. | ||
34 | */ | ||
35 | #define DAVINCI_VC_PID 0x00 | ||
36 | #define DAVINCI_VC_CTRL 0x04 | ||
37 | #define DAVINCI_VC_INTEN 0x08 | ||
38 | #define DAVINCI_VC_INTSTATUS 0x0c | ||
39 | #define DAVINCI_VC_INTCLR 0x10 | ||
40 | #define DAVINCI_VC_EMUL_CTRL 0x14 | ||
41 | #define DAVINCI_VC_RFIFO 0x20 | ||
42 | #define DAVINCI_VC_WFIFO 0x24 | ||
43 | #define DAVINCI_VC_FIFOSTAT 0x28 | ||
44 | #define DAVINCI_VC_TST_CTRL 0x2C | ||
45 | #define DAVINCI_VC_REG05 0x94 | ||
46 | #define DAVINCI_VC_REG09 0xA4 | ||
47 | #define DAVINCI_VC_REG12 0xB0 | ||
48 | |||
49 | /* DAVINCI_VC_CTRL bit fields */ | ||
50 | #define DAVINCI_VC_CTRL_MASK 0x5500 | ||
51 | #define DAVINCI_VC_CTRL_RSTADC BIT(0) | ||
52 | #define DAVINCI_VC_CTRL_RSTDAC BIT(1) | ||
53 | #define DAVINCI_VC_CTRL_RD_BITS_8 BIT(4) | ||
54 | #define DAVINCI_VC_CTRL_RD_UNSIGNED BIT(5) | ||
55 | #define DAVINCI_VC_CTRL_WD_BITS_8 BIT(6) | ||
56 | #define DAVINCI_VC_CTRL_WD_UNSIGNED BIT(7) | ||
57 | #define DAVINCI_VC_CTRL_RFIFOEN BIT(8) | ||
58 | #define DAVINCI_VC_CTRL_RFIFOCL BIT(9) | ||
59 | #define DAVINCI_VC_CTRL_RFIFOMD_WORD_1 BIT(10) | ||
60 | #define DAVINCI_VC_CTRL_WFIFOEN BIT(12) | ||
61 | #define DAVINCI_VC_CTRL_WFIFOCL BIT(13) | ||
62 | #define DAVINCI_VC_CTRL_WFIFOMD_WORD_1 BIT(14) | ||
63 | |||
64 | /* DAVINCI_VC_INT bit fields */ | ||
65 | #define DAVINCI_VC_INT_MASK 0x3F | ||
66 | #define DAVINCI_VC_INT_RDRDY_MASK BIT(0) | ||
67 | #define DAVINCI_VC_INT_RERROVF_MASK BIT(1) | ||
68 | #define DAVINCI_VC_INT_RERRUDR_MASK BIT(2) | ||
69 | #define DAVINCI_VC_INT_WDREQ_MASK BIT(3) | ||
70 | #define DAVINCI_VC_INT_WERROVF_MASKBIT BIT(4) | ||
71 | #define DAVINCI_VC_INT_WERRUDR_MASK BIT(5) | ||
72 | |||
73 | /* DAVINCI_VC_REG05 bit fields */ | ||
74 | #define DAVINCI_VC_REG05_PGA_GAIN 0x07 | ||
75 | |||
76 | /* DAVINCI_VC_REG09 bit fields */ | ||
77 | #define DAVINCI_VC_REG09_MUTE 0x40 | ||
78 | #define DAVINCI_VC_REG09_DIG_ATTEN 0x3F | ||
79 | |||
80 | /* DAVINCI_VC_REG12 bit fields */ | ||
81 | #define DAVINCI_VC_REG12_POWER_ALL_ON 0xFD | ||
82 | #define DAVINCI_VC_REG12_POWER_ALL_OFF 0x00 | ||
83 | |||
84 | #define DAVINCI_VC_CELLS 2 | ||
85 | |||
86 | enum davinci_vc_cells { | ||
87 | DAVINCI_VC_VCIF_CELL, | ||
88 | DAVINCI_VC_CQ93VC_CELL, | ||
89 | }; | ||
90 | |||
91 | struct davinci_vcif { | ||
92 | struct platform_device *pdev; | ||
93 | u32 dma_tx_channel; | ||
94 | u32 dma_rx_channel; | ||
95 | dma_addr_t dma_tx_addr; | ||
96 | dma_addr_t dma_rx_addr; | ||
97 | }; | ||
98 | |||
99 | struct cq93vc { | ||
100 | struct platform_device *pdev; | ||
101 | struct snd_soc_codec *codec; | ||
102 | u32 sysclk; | ||
103 | }; | ||
104 | |||
105 | struct davinci_vc; | ||
106 | |||
107 | struct davinci_vc { | ||
108 | /* Device data */ | ||
109 | struct device *dev; | ||
110 | struct platform_device *pdev; | ||
111 | struct clk *clk; | ||
112 | |||
113 | /* Memory resources */ | ||
114 | void __iomem *base; | ||
115 | resource_size_t pbase; | ||
116 | size_t base_size; | ||
117 | |||
118 | /* MFD cells */ | ||
119 | struct mfd_cell cells[DAVINCI_VC_CELLS]; | ||
120 | |||
121 | /* Client devices */ | ||
122 | struct davinci_vcif davinci_vcif; | ||
123 | struct cq93vc cq93vc; | ||
124 | }; | ||
125 | |||
126 | #endif | ||
diff --git a/include/linux/mfd/wm8350/audio.h b/include/linux/mfd/wm8350/audio.h index d899dc0223ba..a95141eafce3 100644 --- a/include/linux/mfd/wm8350/audio.h +++ b/include/linux/mfd/wm8350/audio.h | |||
@@ -492,6 +492,8 @@ | |||
492 | */ | 492 | */ |
493 | #define WM8350_JACK_L_LVL 0x0800 | 493 | #define WM8350_JACK_L_LVL 0x0800 |
494 | #define WM8350_JACK_R_LVL 0x0400 | 494 | #define WM8350_JACK_R_LVL 0x0400 |
495 | #define WM8350_JACK_MICSCD_LVL 0x0200 | ||
496 | #define WM8350_JACK_MICSD_LVL 0x0100 | ||
495 | 497 | ||
496 | /* | 498 | /* |
497 | * WM8350 Platform setup | 499 | * WM8350 Platform setup |
diff --git a/include/linux/mfd/wm8994/core.h b/include/linux/mfd/wm8994/core.h index b06ff2846748..de79baee4925 100644 --- a/include/linux/mfd/wm8994/core.h +++ b/include/linux/mfd/wm8994/core.h | |||
@@ -15,14 +15,38 @@ | |||
15 | #ifndef __MFD_WM8994_CORE_H__ | 15 | #ifndef __MFD_WM8994_CORE_H__ |
16 | #define __MFD_WM8994_CORE_H__ | 16 | #define __MFD_WM8994_CORE_H__ |
17 | 17 | ||
18 | #include <linux/interrupt.h> | ||
19 | |||
18 | struct regulator_dev; | 20 | struct regulator_dev; |
19 | struct regulator_bulk_data; | 21 | struct regulator_bulk_data; |
20 | 22 | ||
21 | #define WM8994_NUM_GPIO_REGS 11 | 23 | #define WM8994_NUM_GPIO_REGS 11 |
22 | #define WM8994_NUM_LDO_REGS 2 | 24 | #define WM8994_NUM_LDO_REGS 2 |
25 | #define WM8994_NUM_IRQ_REGS 2 | ||
26 | |||
27 | #define WM8994_IRQ_TEMP_SHUT 0 | ||
28 | #define WM8994_IRQ_MIC1_DET 1 | ||
29 | #define WM8994_IRQ_MIC1_SHRT 2 | ||
30 | #define WM8994_IRQ_MIC2_DET 3 | ||
31 | #define WM8994_IRQ_MIC2_SHRT 4 | ||
32 | #define WM8994_IRQ_FLL1_LOCK 5 | ||
33 | #define WM8994_IRQ_FLL2_LOCK 6 | ||
34 | #define WM8994_IRQ_SRC1_LOCK 7 | ||
35 | #define WM8994_IRQ_SRC2_LOCK 8 | ||
36 | #define WM8994_IRQ_AIF1DRC1_SIG_DET 9 | ||
37 | #define WM8994_IRQ_AIF1DRC2_SIG_DET 10 | ||
38 | #define WM8994_IRQ_AIF2DRC_SIG_DET 11 | ||
39 | #define WM8994_IRQ_FIFOS_ERR 12 | ||
40 | #define WM8994_IRQ_WSEQ_DONE 13 | ||
41 | #define WM8994_IRQ_DCS_DONE 14 | ||
42 | #define WM8994_IRQ_TEMP_WARN 15 | ||
43 | |||
44 | /* GPIOs in the chip are numbered from 1-11 */ | ||
45 | #define WM8994_IRQ_GPIO(x) (x + WM8994_IRQ_TEMP_WARN) | ||
23 | 46 | ||
24 | struct wm8994 { | 47 | struct wm8994 { |
25 | struct mutex io_lock; | 48 | struct mutex io_lock; |
49 | struct mutex irq_lock; | ||
26 | 50 | ||
27 | struct device *dev; | 51 | struct device *dev; |
28 | int (*read_dev)(struct wm8994 *wm8994, unsigned short reg, | 52 | int (*read_dev)(struct wm8994 *wm8994, unsigned short reg, |
@@ -33,6 +57,11 @@ struct wm8994 { | |||
33 | void *control_data; | 57 | void *control_data; |
34 | 58 | ||
35 | int gpio_base; | 59 | int gpio_base; |
60 | int irq_base; | ||
61 | |||
62 | int irq; | ||
63 | u16 irq_masks_cur[WM8994_NUM_IRQ_REGS]; | ||
64 | u16 irq_masks_cache[WM8994_NUM_IRQ_REGS]; | ||
36 | 65 | ||
37 | /* Used over suspend/resume */ | 66 | /* Used over suspend/resume */ |
38 | u16 ldo_regs[WM8994_NUM_LDO_REGS]; | 67 | u16 ldo_regs[WM8994_NUM_LDO_REGS]; |
@@ -51,4 +80,26 @@ int wm8994_set_bits(struct wm8994 *wm8994, unsigned short reg, | |||
51 | int wm8994_bulk_read(struct wm8994 *wm8994, unsigned short reg, | 80 | int wm8994_bulk_read(struct wm8994 *wm8994, unsigned short reg, |
52 | int count, u16 *buf); | 81 | int count, u16 *buf); |
53 | 82 | ||
83 | |||
84 | /* Helper to save on boilerplate */ | ||
85 | static inline int wm8994_request_irq(struct wm8994 *wm8994, int irq, | ||
86 | irq_handler_t handler, const char *name, | ||
87 | void *data) | ||
88 | { | ||
89 | if (!wm8994->irq_base) | ||
90 | return -EINVAL; | ||
91 | return request_threaded_irq(wm8994->irq_base + irq, NULL, handler, | ||
92 | IRQF_TRIGGER_RISING, name, | ||
93 | data); | ||
94 | } | ||
95 | static inline void wm8994_free_irq(struct wm8994 *wm8994, int irq, void *data) | ||
96 | { | ||
97 | if (!wm8994->irq_base) | ||
98 | return; | ||
99 | free_irq(wm8994->irq_base + irq, data); | ||
100 | } | ||
101 | |||
102 | int wm8994_irq_init(struct wm8994 *wm8994); | ||
103 | void wm8994_irq_exit(struct wm8994 *wm8994); | ||
104 | |||
54 | #endif | 105 | #endif |
diff --git a/include/linux/mfd/wm8994/pdata.h b/include/linux/mfd/wm8994/pdata.h index 70d6a8687dc5..5c51f367c061 100644 --- a/include/linux/mfd/wm8994/pdata.h +++ b/include/linux/mfd/wm8994/pdata.h | |||
@@ -70,6 +70,7 @@ struct wm8994_pdata { | |||
70 | 70 | ||
71 | struct wm8994_ldo_pdata ldo[WM8994_NUM_LDO]; | 71 | struct wm8994_ldo_pdata ldo[WM8994_NUM_LDO]; |
72 | 72 | ||
73 | int irq_base; /** Base IRQ number for WM8994, required for IRQs */ | ||
73 | 74 | ||
74 | int num_drc_cfgs; | 75 | int num_drc_cfgs; |
75 | struct wm8994_drc_cfg *drc_cfgs; | 76 | struct wm8994_drc_cfg *drc_cfgs; |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index e92d1bfdb330..7a7f9c1e679a 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
@@ -123,8 +123,8 @@ enum { | |||
123 | MLX4_OPCODE_RDMA_READ = 0x10, | 123 | MLX4_OPCODE_RDMA_READ = 0x10, |
124 | MLX4_OPCODE_ATOMIC_CS = 0x11, | 124 | MLX4_OPCODE_ATOMIC_CS = 0x11, |
125 | MLX4_OPCODE_ATOMIC_FA = 0x12, | 125 | MLX4_OPCODE_ATOMIC_FA = 0x12, |
126 | MLX4_OPCODE_ATOMIC_MASK_CS = 0x14, | 126 | MLX4_OPCODE_MASKED_ATOMIC_CS = 0x14, |
127 | MLX4_OPCODE_ATOMIC_MASK_FA = 0x15, | 127 | MLX4_OPCODE_MASKED_ATOMIC_FA = 0x15, |
128 | MLX4_OPCODE_BIND_MW = 0x18, | 128 | MLX4_OPCODE_BIND_MW = 0x18, |
129 | MLX4_OPCODE_FMR = 0x19, | 129 | MLX4_OPCODE_FMR = 0x19, |
130 | MLX4_OPCODE_LOCAL_INVAL = 0x1b, | 130 | MLX4_OPCODE_LOCAL_INVAL = 0x1b, |
diff --git a/include/linux/mlx4/qp.h b/include/linux/mlx4/qp.h index 9f29d86e5dc9..7abe64326f72 100644 --- a/include/linux/mlx4/qp.h +++ b/include/linux/mlx4/qp.h | |||
@@ -285,6 +285,13 @@ struct mlx4_wqe_atomic_seg { | |||
285 | __be64 compare; | 285 | __be64 compare; |
286 | }; | 286 | }; |
287 | 287 | ||
288 | struct mlx4_wqe_masked_atomic_seg { | ||
289 | __be64 swap_add; | ||
290 | __be64 compare; | ||
291 | __be64 swap_add_mask; | ||
292 | __be64 compare_mask; | ||
293 | }; | ||
294 | |||
288 | struct mlx4_wqe_data_seg { | 295 | struct mlx4_wqe_data_seg { |
289 | __be32 byte_count; | 296 | __be32 byte_count; |
290 | __be32 lkey; | 297 | __be32 lkey; |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index c3487a6bdf99..a1bff6518166 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/if_link.h> | 31 | #include <linux/if_link.h> |
32 | 32 | ||
33 | #ifdef __KERNEL__ | 33 | #ifdef __KERNEL__ |
34 | #include <linux/pm_qos_params.h> | ||
34 | #include <linux/timer.h> | 35 | #include <linux/timer.h> |
35 | #include <linux/delay.h> | 36 | #include <linux/delay.h> |
36 | #include <linux/mm.h> | 37 | #include <linux/mm.h> |
@@ -777,6 +778,9 @@ struct net_device { | |||
777 | * the interface. | 778 | * the interface. |
778 | */ | 779 | */ |
779 | char name[IFNAMSIZ]; | 780 | char name[IFNAMSIZ]; |
781 | |||
782 | struct pm_qos_request_list *pm_qos_req; | ||
783 | |||
780 | /* device name hash chain */ | 784 | /* device name hash chain */ |
781 | struct hlist_node name_hlist; | 785 | struct hlist_node name_hlist; |
782 | /* snmp alias */ | 786 | /* snmp alias */ |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 07ce4609fe50..77c2ae53431c 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -356,6 +356,20 @@ extern struct nfs_open_context *nfs_find_open_context(struct inode *inode, struc | |||
356 | extern u64 nfs_compat_user_ino64(u64 fileid); | 356 | extern u64 nfs_compat_user_ino64(u64 fileid); |
357 | extern void nfs_fattr_init(struct nfs_fattr *fattr); | 357 | extern void nfs_fattr_init(struct nfs_fattr *fattr); |
358 | 358 | ||
359 | extern struct nfs_fattr *nfs_alloc_fattr(void); | ||
360 | |||
361 | static inline void nfs_free_fattr(const struct nfs_fattr *fattr) | ||
362 | { | ||
363 | kfree(fattr); | ||
364 | } | ||
365 | |||
366 | extern struct nfs_fh *nfs_alloc_fhandle(void); | ||
367 | |||
368 | static inline void nfs_free_fhandle(const struct nfs_fh *fh) | ||
369 | { | ||
370 | kfree(fh); | ||
371 | } | ||
372 | |||
359 | /* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */ | 373 | /* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */ |
360 | extern __be32 root_nfs_parse_addr(char *name); /*__init*/ | 374 | extern __be32 root_nfs_parse_addr(char *name); /*__init*/ |
361 | extern unsigned long nfs_inc_attr_generation_counter(void); | 375 | extern unsigned long nfs_inc_attr_generation_counter(void); |
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index e82957acea56..d6e10a4c06e5 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h | |||
@@ -44,7 +44,6 @@ struct nfs_client { | |||
44 | 44 | ||
45 | #ifdef CONFIG_NFS_V4 | 45 | #ifdef CONFIG_NFS_V4 |
46 | u64 cl_clientid; /* constant */ | 46 | u64 cl_clientid; /* constant */ |
47 | nfs4_verifier cl_confirm; | ||
48 | unsigned long cl_state; | 47 | unsigned long cl_state; |
49 | 48 | ||
50 | struct rb_root cl_openowner_id; | 49 | struct rb_root cl_openowner_id; |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 89b28812ec24..51914d7d6cc4 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -386,8 +386,8 @@ struct nfs_removeargs { | |||
386 | 386 | ||
387 | struct nfs_removeres { | 387 | struct nfs_removeres { |
388 | const struct nfs_server *server; | 388 | const struct nfs_server *server; |
389 | struct nfs_fattr *dir_attr; | ||
389 | struct nfs4_change_info cinfo; | 390 | struct nfs4_change_info cinfo; |
390 | struct nfs_fattr dir_attr; | ||
391 | struct nfs4_sequence_res seq_res; | 391 | struct nfs4_sequence_res seq_res; |
392 | }; | 392 | }; |
393 | 393 | ||
@@ -824,6 +824,11 @@ struct nfs4_setclientid { | |||
824 | u32 sc_cb_ident; | 824 | u32 sc_cb_ident; |
825 | }; | 825 | }; |
826 | 826 | ||
827 | struct nfs4_setclientid_res { | ||
828 | u64 clientid; | ||
829 | nfs4_verifier confirm; | ||
830 | }; | ||
831 | |||
827 | struct nfs4_statfs_arg { | 832 | struct nfs4_statfs_arg { |
828 | const struct nfs_fh * fh; | 833 | const struct nfs_fh * fh; |
829 | const u32 * bitmask; | 834 | const u32 * bitmask; |
diff --git a/include/linux/nfsd/nfsfh.h b/include/linux/nfsd/nfsfh.h index 65e333afaee4..80d55bbc5365 100644 --- a/include/linux/nfsd/nfsfh.h +++ b/include/linux/nfsd/nfsfh.h | |||
@@ -40,12 +40,12 @@ struct nfs_fhbase_old { | |||
40 | * This is the new flexible, extensible style NFSv2/v3 file handle. | 40 | * This is the new flexible, extensible style NFSv2/v3 file handle. |
41 | * by Neil Brown <neilb@cse.unsw.edu.au> - March 2000 | 41 | * by Neil Brown <neilb@cse.unsw.edu.au> - March 2000 |
42 | * | 42 | * |
43 | * The file handle is seens as a list of 4byte words. | 43 | * The file handle starts with a sequence of four-byte words. |
44 | * The first word contains a version number (1) and four descriptor bytes | 44 | * The first word contains a version number (1) and three descriptor bytes |
45 | * that tell how the remaining 3 variable length fields should be handled. | 45 | * that tell how the remaining 3 variable length fields should be handled. |
46 | * These three bytes are auth_type, fsid_type and fileid_type. | 46 | * These three bytes are auth_type, fsid_type and fileid_type. |
47 | * | 47 | * |
48 | * All 4byte values are in host-byte-order. | 48 | * All four-byte values are in host-byte-order. |
49 | * | 49 | * |
50 | * The auth_type field specifies how the filehandle can be authenticated | 50 | * The auth_type field specifies how the filehandle can be authenticated |
51 | * This might allow a file to be confirmed to be in a writable part of a | 51 | * This might allow a file to be confirmed to be in a writable part of a |
diff --git a/include/linux/pm_qos_params.h b/include/linux/pm_qos_params.h index d74f75ed1e47..8ba440e5eb7f 100644 --- a/include/linux/pm_qos_params.h +++ b/include/linux/pm_qos_params.h | |||
@@ -14,12 +14,14 @@ | |||
14 | #define PM_QOS_NUM_CLASSES 4 | 14 | #define PM_QOS_NUM_CLASSES 4 |
15 | #define PM_QOS_DEFAULT_VALUE -1 | 15 | #define PM_QOS_DEFAULT_VALUE -1 |
16 | 16 | ||
17 | int pm_qos_add_requirement(int qos, char *name, s32 value); | 17 | struct pm_qos_request_list; |
18 | int pm_qos_update_requirement(int qos, char *name, s32 new_value); | ||
19 | void pm_qos_remove_requirement(int qos, char *name); | ||
20 | 18 | ||
21 | int pm_qos_requirement(int qos); | 19 | struct pm_qos_request_list *pm_qos_add_request(int pm_qos_class, s32 value); |
20 | void pm_qos_update_request(struct pm_qos_request_list *pm_qos_req, | ||
21 | s32 new_value); | ||
22 | void pm_qos_remove_request(struct pm_qos_request_list *pm_qos_req); | ||
22 | 23 | ||
23 | int pm_qos_add_notifier(int qos, struct notifier_block *notifier); | 24 | int pm_qos_request(int pm_qos_class); |
24 | int pm_qos_remove_notifier(int qos, struct notifier_block *notifier); | 25 | int pm_qos_add_notifier(int pm_qos_class, struct notifier_block *notifier); |
26 | int pm_qos_remove_notifier(int pm_qos_class, struct notifier_block *notifier); | ||
25 | 27 | ||
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h index b776db737244..6e81888c6222 100644 --- a/include/linux/pm_runtime.h +++ b/include/linux/pm_runtime.h | |||
@@ -30,6 +30,9 @@ extern void pm_runtime_enable(struct device *dev); | |||
30 | extern void __pm_runtime_disable(struct device *dev, bool check_resume); | 30 | extern void __pm_runtime_disable(struct device *dev, bool check_resume); |
31 | extern void pm_runtime_allow(struct device *dev); | 31 | extern void pm_runtime_allow(struct device *dev); |
32 | extern void pm_runtime_forbid(struct device *dev); | 32 | extern void pm_runtime_forbid(struct device *dev); |
33 | extern int pm_generic_runtime_idle(struct device *dev); | ||
34 | extern int pm_generic_runtime_suspend(struct device *dev); | ||
35 | extern int pm_generic_runtime_resume(struct device *dev); | ||
33 | 36 | ||
34 | static inline bool pm_children_suspended(struct device *dev) | 37 | static inline bool pm_children_suspended(struct device *dev) |
35 | { | 38 | { |
@@ -96,6 +99,10 @@ static inline bool device_run_wake(struct device *dev) { return false; } | |||
96 | static inline void device_set_run_wake(struct device *dev, bool enable) {} | 99 | static inline void device_set_run_wake(struct device *dev, bool enable) {} |
97 | static inline bool pm_runtime_suspended(struct device *dev) { return false; } | 100 | static inline bool pm_runtime_suspended(struct device *dev) { return false; } |
98 | 101 | ||
102 | static inline int pm_generic_runtime_idle(struct device *dev) { return 0; } | ||
103 | static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; } | ||
104 | static inline int pm_generic_runtime_resume(struct device *dev) { return 0; } | ||
105 | |||
99 | #endif /* !CONFIG_PM_RUNTIME */ | 106 | #endif /* !CONFIG_PM_RUNTIME */ |
100 | 107 | ||
101 | static inline int pm_runtime_get(struct device *dev) | 108 | static inline int pm_runtime_get(struct device *dev) |
diff --git a/include/linux/pm_wakeup.h b/include/linux/pm_wakeup.h index 0aae7776185e..22d64c18056c 100644 --- a/include/linux/pm_wakeup.h +++ b/include/linux/pm_wakeup.h | |||
@@ -25,32 +25,34 @@ | |||
25 | # error "please don't include this file directly" | 25 | # error "please don't include this file directly" |
26 | #endif | 26 | #endif |
27 | 27 | ||
28 | #include <linux/types.h> | ||
29 | |||
28 | #ifdef CONFIG_PM | 30 | #ifdef CONFIG_PM |
29 | 31 | ||
30 | /* changes to device_may_wakeup take effect on the next pm state change. | 32 | /* changes to device_may_wakeup take effect on the next pm state change. |
31 | * by default, devices should wakeup if they can. | 33 | * by default, devices should wakeup if they can. |
32 | */ | 34 | */ |
33 | static inline void device_init_wakeup(struct device *dev, int val) | 35 | static inline void device_init_wakeup(struct device *dev, bool val) |
34 | { | 36 | { |
35 | dev->power.can_wakeup = dev->power.should_wakeup = !!val; | 37 | dev->power.can_wakeup = dev->power.should_wakeup = val; |
36 | } | 38 | } |
37 | 39 | ||
38 | static inline void device_set_wakeup_capable(struct device *dev, int val) | 40 | static inline void device_set_wakeup_capable(struct device *dev, bool capable) |
39 | { | 41 | { |
40 | dev->power.can_wakeup = !!val; | 42 | dev->power.can_wakeup = capable; |
41 | } | 43 | } |
42 | 44 | ||
43 | static inline int device_can_wakeup(struct device *dev) | 45 | static inline bool device_can_wakeup(struct device *dev) |
44 | { | 46 | { |
45 | return dev->power.can_wakeup; | 47 | return dev->power.can_wakeup; |
46 | } | 48 | } |
47 | 49 | ||
48 | static inline void device_set_wakeup_enable(struct device *dev, int val) | 50 | static inline void device_set_wakeup_enable(struct device *dev, bool enable) |
49 | { | 51 | { |
50 | dev->power.should_wakeup = !!val; | 52 | dev->power.should_wakeup = enable; |
51 | } | 53 | } |
52 | 54 | ||
53 | static inline int device_may_wakeup(struct device *dev) | 55 | static inline bool device_may_wakeup(struct device *dev) |
54 | { | 56 | { |
55 | return dev->power.can_wakeup && dev->power.should_wakeup; | 57 | return dev->power.can_wakeup && dev->power.should_wakeup; |
56 | } | 58 | } |
@@ -58,20 +60,28 @@ static inline int device_may_wakeup(struct device *dev) | |||
58 | #else /* !CONFIG_PM */ | 60 | #else /* !CONFIG_PM */ |
59 | 61 | ||
60 | /* For some reason the next two routines work even without CONFIG_PM */ | 62 | /* For some reason the next two routines work even without CONFIG_PM */ |
61 | static inline void device_init_wakeup(struct device *dev, int val) | 63 | static inline void device_init_wakeup(struct device *dev, bool val) |
62 | { | 64 | { |
63 | dev->power.can_wakeup = !!val; | 65 | dev->power.can_wakeup = val; |
64 | } | 66 | } |
65 | 67 | ||
66 | static inline void device_set_wakeup_capable(struct device *dev, int val) { } | 68 | static inline void device_set_wakeup_capable(struct device *dev, bool capable) |
69 | { | ||
70 | } | ||
67 | 71 | ||
68 | static inline int device_can_wakeup(struct device *dev) | 72 | static inline bool device_can_wakeup(struct device *dev) |
69 | { | 73 | { |
70 | return dev->power.can_wakeup; | 74 | return dev->power.can_wakeup; |
71 | } | 75 | } |
72 | 76 | ||
73 | #define device_set_wakeup_enable(dev, val) do {} while (0) | 77 | static inline void device_set_wakeup_enable(struct device *dev, bool enable) |
74 | #define device_may_wakeup(dev) 0 | 78 | { |
79 | } | ||
80 | |||
81 | static inline bool device_may_wakeup(struct device *dev) | ||
82 | { | ||
83 | return false; | ||
84 | } | ||
75 | 85 | ||
76 | #endif /* !CONFIG_PM */ | 86 | #endif /* !CONFIG_PM */ |
77 | 87 | ||
diff --git a/include/linux/rtc-v3020.h b/include/linux/rtc-v3020.h index 8ba646e610d9..e55d82cebf80 100644 --- a/include/linux/rtc-v3020.h +++ b/include/linux/rtc-v3020.h | |||
@@ -15,7 +15,7 @@ | |||
15 | struct v3020_platform_data { | 15 | struct v3020_platform_data { |
16 | int leftshift; /* (1<<(leftshift)) & readl() */ | 16 | int leftshift; /* (1<<(leftshift)) & readl() */ |
17 | 17 | ||
18 | int use_gpio:1; | 18 | unsigned int use_gpio:1; |
19 | unsigned int gpio_cs; | 19 | unsigned int gpio_cs; |
20 | unsigned int gpio_wr; | 20 | unsigned int gpio_wr; |
21 | unsigned int gpio_rd; | 21 | unsigned int gpio_rd; |
diff --git a/include/linux/security.h b/include/linux/security.h index 3158dd982d27..0c8819170463 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -267,49 +267,16 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
267 | * @orig the original mount data copied from userspace. | 267 | * @orig the original mount data copied from userspace. |
268 | * @copy copied data which will be passed to the security module. | 268 | * @copy copied data which will be passed to the security module. |
269 | * Returns 0 if the copy was successful. | 269 | * Returns 0 if the copy was successful. |
270 | * @sb_check_sb: | ||
271 | * Check permission before the device with superblock @mnt->sb is mounted | ||
272 | * on the mount point named by @nd. | ||
273 | * @mnt contains the vfsmount for device being mounted. | ||
274 | * @path contains the path for the mount point. | ||
275 | * Return 0 if permission is granted. | ||
276 | * @sb_umount: | 270 | * @sb_umount: |
277 | * Check permission before the @mnt file system is unmounted. | 271 | * Check permission before the @mnt file system is unmounted. |
278 | * @mnt contains the mounted file system. | 272 | * @mnt contains the mounted file system. |
279 | * @flags contains the unmount flags, e.g. MNT_FORCE. | 273 | * @flags contains the unmount flags, e.g. MNT_FORCE. |
280 | * Return 0 if permission is granted. | 274 | * Return 0 if permission is granted. |
281 | * @sb_umount_close: | ||
282 | * Close any files in the @mnt mounted filesystem that are held open by | ||
283 | * the security module. This hook is called during an umount operation | ||
284 | * prior to checking whether the filesystem is still busy. | ||
285 | * @mnt contains the mounted filesystem. | ||
286 | * @sb_umount_busy: | ||
287 | * Handle a failed umount of the @mnt mounted filesystem, e.g. re-opening | ||
288 | * any files that were closed by umount_close. This hook is called during | ||
289 | * an umount operation if the umount fails after a call to the | ||
290 | * umount_close hook. | ||
291 | * @mnt contains the mounted filesystem. | ||
292 | * @sb_post_remount: | ||
293 | * Update the security module's state when a filesystem is remounted. | ||
294 | * This hook is only called if the remount was successful. | ||
295 | * @mnt contains the mounted file system. | ||
296 | * @flags contains the new filesystem flags. | ||
297 | * @data contains the filesystem-specific data. | ||
298 | * @sb_post_addmount: | ||
299 | * Update the security module's state when a filesystem is mounted. | ||
300 | * This hook is called any time a mount is successfully grafetd to | ||
301 | * the tree. | ||
302 | * @mnt contains the mounted filesystem. | ||
303 | * @mountpoint contains the path for the mount point. | ||
304 | * @sb_pivotroot: | 275 | * @sb_pivotroot: |
305 | * Check permission before pivoting the root filesystem. | 276 | * Check permission before pivoting the root filesystem. |
306 | * @old_path contains the path for the new location of the current root (put_old). | 277 | * @old_path contains the path for the new location of the current root (put_old). |
307 | * @new_path contains the path for the new root (new_root). | 278 | * @new_path contains the path for the new root (new_root). |
308 | * Return 0 if permission is granted. | 279 | * Return 0 if permission is granted. |
309 | * @sb_post_pivotroot: | ||
310 | * Update module state after a successful pivot. | ||
311 | * @old_path contains the path for the old root. | ||
312 | * @new_path contains the path for the new root. | ||
313 | * @sb_set_mnt_opts: | 280 | * @sb_set_mnt_opts: |
314 | * Set the security relevant mount options used for a superblock | 281 | * Set the security relevant mount options used for a superblock |
315 | * @sb the superblock to set security mount options for | 282 | * @sb the superblock to set security mount options for |
@@ -511,12 +478,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
511 | * @mnt is the vfsmount where the dentry was looked up | 478 | * @mnt is the vfsmount where the dentry was looked up |
512 | * @dentry contains the dentry structure for the file. | 479 | * @dentry contains the dentry structure for the file. |
513 | * Return 0 if permission is granted. | 480 | * Return 0 if permission is granted. |
514 | * @inode_delete: | ||
515 | * @inode contains the inode structure for deleted inode. | ||
516 | * This hook is called when a deleted inode is released (i.e. an inode | ||
517 | * with no hard links has its use count drop to zero). A security module | ||
518 | * can use this hook to release any persistent label associated with the | ||
519 | * inode. | ||
520 | * @inode_setxattr: | 481 | * @inode_setxattr: |
521 | * Check permission before setting the extended attributes | 482 | * Check permission before setting the extended attributes |
522 | * @value identified by @name for @dentry. | 483 | * @value identified by @name for @dentry. |
@@ -691,10 +652,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
691 | * @old points to the original credentials. | 652 | * @old points to the original credentials. |
692 | * @gfp indicates the atomicity of any memory allocations. | 653 | * @gfp indicates the atomicity of any memory allocations. |
693 | * Prepare a new set of credentials by copying the data from the old set. | 654 | * Prepare a new set of credentials by copying the data from the old set. |
694 | * @cred_commit: | ||
695 | * @new points to the new credentials. | ||
696 | * @old points to the original credentials. | ||
697 | * Install a new set of credentials. | ||
698 | * @cred_transfer: | 655 | * @cred_transfer: |
699 | * @new points to the new credentials. | 656 | * @new points to the new credentials. |
700 | * @old points to the original credentials. | 657 | * @old points to the original credentials. |
@@ -717,18 +674,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
717 | * userspace to load a kernel module with the given name. | 674 | * userspace to load a kernel module with the given name. |
718 | * @kmod_name name of the module requested by the kernel | 675 | * @kmod_name name of the module requested by the kernel |
719 | * Return 0 if successful. | 676 | * Return 0 if successful. |
720 | * @task_setuid: | ||
721 | * Check permission before setting one or more of the user identity | ||
722 | * attributes of the current process. The @flags parameter indicates | ||
723 | * which of the set*uid system calls invoked this hook and how to | ||
724 | * interpret the @id0, @id1, and @id2 parameters. See the LSM_SETID | ||
725 | * definitions at the beginning of this file for the @flags values and | ||
726 | * their meanings. | ||
727 | * @id0 contains a uid. | ||
728 | * @id1 contains a uid. | ||
729 | * @id2 contains a uid. | ||
730 | * @flags contains one of the LSM_SETID_* values. | ||
731 | * Return 0 if permission is granted. | ||
732 | * @task_fix_setuid: | 677 | * @task_fix_setuid: |
733 | * Update the module's state after setting one or more of the user | 678 | * Update the module's state after setting one or more of the user |
734 | * identity attributes of the current process. The @flags parameter | 679 | * identity attributes of the current process. The @flags parameter |
@@ -738,18 +683,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
738 | * @old is the set of credentials that are being replaces | 683 | * @old is the set of credentials that are being replaces |
739 | * @flags contains one of the LSM_SETID_* values. | 684 | * @flags contains one of the LSM_SETID_* values. |
740 | * Return 0 on success. | 685 | * Return 0 on success. |
741 | * @task_setgid: | ||
742 | * Check permission before setting one or more of the group identity | ||
743 | * attributes of the current process. The @flags parameter indicates | ||
744 | * which of the set*gid system calls invoked this hook and how to | ||
745 | * interpret the @id0, @id1, and @id2 parameters. See the LSM_SETID | ||
746 | * definitions at the beginning of this file for the @flags values and | ||
747 | * their meanings. | ||
748 | * @id0 contains a gid. | ||
749 | * @id1 contains a gid. | ||
750 | * @id2 contains a gid. | ||
751 | * @flags contains one of the LSM_SETID_* values. | ||
752 | * Return 0 if permission is granted. | ||
753 | * @task_setpgid: | 686 | * @task_setpgid: |
754 | * Check permission before setting the process group identifier of the | 687 | * Check permission before setting the process group identifier of the |
755 | * process @p to @pgid. | 688 | * process @p to @pgid. |
@@ -771,11 +704,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
771 | * @p contains the task_struct for the process and place is into @secid. | 704 | * @p contains the task_struct for the process and place is into @secid. |
772 | * In case of failure, @secid will be set to zero. | 705 | * In case of failure, @secid will be set to zero. |
773 | * | 706 | * |
774 | * @task_setgroups: | ||
775 | * Check permission before setting the supplementary group set of the | ||
776 | * current process. | ||
777 | * @group_info contains the new group information. | ||
778 | * Return 0 if permission is granted. | ||
779 | * @task_setnice: | 707 | * @task_setnice: |
780 | * Check permission before setting the nice value of @p to @nice. | 708 | * Check permission before setting the nice value of @p to @nice. |
781 | * @p contains the task_struct of process. | 709 | * @p contains the task_struct of process. |
@@ -1139,13 +1067,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1139 | * Return the length of the string (including terminating NUL) or -ve if | 1067 | * Return the length of the string (including terminating NUL) or -ve if |
1140 | * an error. | 1068 | * an error. |
1141 | * May also return 0 (and a NULL buffer pointer) if there is no label. | 1069 | * May also return 0 (and a NULL buffer pointer) if there is no label. |
1142 | * @key_session_to_parent: | ||
1143 | * Forcibly assign the session keyring from a process to its parent | ||
1144 | * process. | ||
1145 | * @cred: Pointer to process's credentials | ||
1146 | * @parent_cred: Pointer to parent process's credentials | ||
1147 | * @keyring: Proposed new session keyring | ||
1148 | * Return 0 if permission is granted, -ve error otherwise. | ||
1149 | * | 1070 | * |
1150 | * Security hooks affecting all System V IPC operations. | 1071 | * Security hooks affecting all System V IPC operations. |
1151 | * | 1072 | * |
@@ -1333,13 +1254,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1333 | * @cap contains the capability <include/linux/capability.h>. | 1254 | * @cap contains the capability <include/linux/capability.h>. |
1334 | * @audit: Whether to write an audit message or not | 1255 | * @audit: Whether to write an audit message or not |
1335 | * Return 0 if the capability is granted for @tsk. | 1256 | * Return 0 if the capability is granted for @tsk. |
1336 | * @acct: | ||
1337 | * Check permission before enabling or disabling process accounting. If | ||
1338 | * accounting is being enabled, then @file refers to the open file used to | ||
1339 | * store accounting records. If accounting is being disabled, then @file | ||
1340 | * is NULL. | ||
1341 | * @file contains the file structure for the accounting file (may be NULL). | ||
1342 | * Return 0 if permission is granted. | ||
1343 | * @sysctl: | 1257 | * @sysctl: |
1344 | * Check permission before accessing the @table sysctl variable in the | 1258 | * Check permission before accessing the @table sysctl variable in the |
1345 | * manner specified by @op. | 1259 | * manner specified by @op. |
@@ -1462,7 +1376,6 @@ struct security_operations { | |||
1462 | const kernel_cap_t *permitted); | 1376 | const kernel_cap_t *permitted); |
1463 | int (*capable) (struct task_struct *tsk, const struct cred *cred, | 1377 | int (*capable) (struct task_struct *tsk, const struct cred *cred, |
1464 | int cap, int audit); | 1378 | int cap, int audit); |
1465 | int (*acct) (struct file *file); | ||
1466 | int (*sysctl) (struct ctl_table *table, int op); | 1379 | int (*sysctl) (struct ctl_table *table, int op); |
1467 | int (*quotactl) (int cmds, int type, int id, struct super_block *sb); | 1380 | int (*quotactl) (int cmds, int type, int id, struct super_block *sb); |
1468 | int (*quota_on) (struct dentry *dentry); | 1381 | int (*quota_on) (struct dentry *dentry); |
@@ -1484,18 +1397,9 @@ struct security_operations { | |||
1484 | int (*sb_statfs) (struct dentry *dentry); | 1397 | int (*sb_statfs) (struct dentry *dentry); |
1485 | int (*sb_mount) (char *dev_name, struct path *path, | 1398 | int (*sb_mount) (char *dev_name, struct path *path, |
1486 | char *type, unsigned long flags, void *data); | 1399 | char *type, unsigned long flags, void *data); |
1487 | int (*sb_check_sb) (struct vfsmount *mnt, struct path *path); | ||
1488 | int (*sb_umount) (struct vfsmount *mnt, int flags); | 1400 | int (*sb_umount) (struct vfsmount *mnt, int flags); |
1489 | void (*sb_umount_close) (struct vfsmount *mnt); | ||
1490 | void (*sb_umount_busy) (struct vfsmount *mnt); | ||
1491 | void (*sb_post_remount) (struct vfsmount *mnt, | ||
1492 | unsigned long flags, void *data); | ||
1493 | void (*sb_post_addmount) (struct vfsmount *mnt, | ||
1494 | struct path *mountpoint); | ||
1495 | int (*sb_pivotroot) (struct path *old_path, | 1401 | int (*sb_pivotroot) (struct path *old_path, |
1496 | struct path *new_path); | 1402 | struct path *new_path); |
1497 | void (*sb_post_pivotroot) (struct path *old_path, | ||
1498 | struct path *new_path); | ||
1499 | int (*sb_set_mnt_opts) (struct super_block *sb, | 1403 | int (*sb_set_mnt_opts) (struct super_block *sb, |
1500 | struct security_mnt_opts *opts); | 1404 | struct security_mnt_opts *opts); |
1501 | void (*sb_clone_mnt_opts) (const struct super_block *oldsb, | 1405 | void (*sb_clone_mnt_opts) (const struct super_block *oldsb, |
@@ -1544,7 +1448,6 @@ struct security_operations { | |||
1544 | int (*inode_permission) (struct inode *inode, int mask); | 1448 | int (*inode_permission) (struct inode *inode, int mask); |
1545 | int (*inode_setattr) (struct dentry *dentry, struct iattr *attr); | 1449 | int (*inode_setattr) (struct dentry *dentry, struct iattr *attr); |
1546 | int (*inode_getattr) (struct vfsmount *mnt, struct dentry *dentry); | 1450 | int (*inode_getattr) (struct vfsmount *mnt, struct dentry *dentry); |
1547 | void (*inode_delete) (struct inode *inode); | ||
1548 | int (*inode_setxattr) (struct dentry *dentry, const char *name, | 1451 | int (*inode_setxattr) (struct dentry *dentry, const char *name, |
1549 | const void *value, size_t size, int flags); | 1452 | const void *value, size_t size, int flags); |
1550 | void (*inode_post_setxattr) (struct dentry *dentry, const char *name, | 1453 | void (*inode_post_setxattr) (struct dentry *dentry, const char *name, |
@@ -1585,20 +1488,16 @@ struct security_operations { | |||
1585 | void (*cred_free) (struct cred *cred); | 1488 | void (*cred_free) (struct cred *cred); |
1586 | int (*cred_prepare)(struct cred *new, const struct cred *old, | 1489 | int (*cred_prepare)(struct cred *new, const struct cred *old, |
1587 | gfp_t gfp); | 1490 | gfp_t gfp); |
1588 | void (*cred_commit)(struct cred *new, const struct cred *old); | ||
1589 | void (*cred_transfer)(struct cred *new, const struct cred *old); | 1491 | void (*cred_transfer)(struct cred *new, const struct cred *old); |
1590 | int (*kernel_act_as)(struct cred *new, u32 secid); | 1492 | int (*kernel_act_as)(struct cred *new, u32 secid); |
1591 | int (*kernel_create_files_as)(struct cred *new, struct inode *inode); | 1493 | int (*kernel_create_files_as)(struct cred *new, struct inode *inode); |
1592 | int (*kernel_module_request)(char *kmod_name); | 1494 | int (*kernel_module_request)(char *kmod_name); |
1593 | int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags); | ||
1594 | int (*task_fix_setuid) (struct cred *new, const struct cred *old, | 1495 | int (*task_fix_setuid) (struct cred *new, const struct cred *old, |
1595 | int flags); | 1496 | int flags); |
1596 | int (*task_setgid) (gid_t id0, gid_t id1, gid_t id2, int flags); | ||
1597 | int (*task_setpgid) (struct task_struct *p, pid_t pgid); | 1497 | int (*task_setpgid) (struct task_struct *p, pid_t pgid); |
1598 | int (*task_getpgid) (struct task_struct *p); | 1498 | int (*task_getpgid) (struct task_struct *p); |
1599 | int (*task_getsid) (struct task_struct *p); | 1499 | int (*task_getsid) (struct task_struct *p); |
1600 | void (*task_getsecid) (struct task_struct *p, u32 *secid); | 1500 | void (*task_getsecid) (struct task_struct *p, u32 *secid); |
1601 | int (*task_setgroups) (struct group_info *group_info); | ||
1602 | int (*task_setnice) (struct task_struct *p, int nice); | 1501 | int (*task_setnice) (struct task_struct *p, int nice); |
1603 | int (*task_setioprio) (struct task_struct *p, int ioprio); | 1502 | int (*task_setioprio) (struct task_struct *p, int ioprio); |
1604 | int (*task_getioprio) (struct task_struct *p); | 1503 | int (*task_getioprio) (struct task_struct *p); |
@@ -1728,9 +1627,6 @@ struct security_operations { | |||
1728 | const struct cred *cred, | 1627 | const struct cred *cred, |
1729 | key_perm_t perm); | 1628 | key_perm_t perm); |
1730 | int (*key_getsecurity)(struct key *key, char **_buffer); | 1629 | int (*key_getsecurity)(struct key *key, char **_buffer); |
1731 | int (*key_session_to_parent)(const struct cred *cred, | ||
1732 | const struct cred *parent_cred, | ||
1733 | struct key *key); | ||
1734 | #endif /* CONFIG_KEYS */ | 1630 | #endif /* CONFIG_KEYS */ |
1735 | 1631 | ||
1736 | #ifdef CONFIG_AUDIT | 1632 | #ifdef CONFIG_AUDIT |
@@ -1761,7 +1657,6 @@ int security_capset(struct cred *new, const struct cred *old, | |||
1761 | int security_capable(int cap); | 1657 | int security_capable(int cap); |
1762 | int security_real_capable(struct task_struct *tsk, int cap); | 1658 | int security_real_capable(struct task_struct *tsk, int cap); |
1763 | int security_real_capable_noaudit(struct task_struct *tsk, int cap); | 1659 | int security_real_capable_noaudit(struct task_struct *tsk, int cap); |
1764 | int security_acct(struct file *file); | ||
1765 | int security_sysctl(struct ctl_table *table, int op); | 1660 | int security_sysctl(struct ctl_table *table, int op); |
1766 | int security_quotactl(int cmds, int type, int id, struct super_block *sb); | 1661 | int security_quotactl(int cmds, int type, int id, struct super_block *sb); |
1767 | int security_quota_on(struct dentry *dentry); | 1662 | int security_quota_on(struct dentry *dentry); |
@@ -1783,14 +1678,8 @@ int security_sb_show_options(struct seq_file *m, struct super_block *sb); | |||
1783 | int security_sb_statfs(struct dentry *dentry); | 1678 | int security_sb_statfs(struct dentry *dentry); |
1784 | int security_sb_mount(char *dev_name, struct path *path, | 1679 | int security_sb_mount(char *dev_name, struct path *path, |
1785 | char *type, unsigned long flags, void *data); | 1680 | char *type, unsigned long flags, void *data); |
1786 | int security_sb_check_sb(struct vfsmount *mnt, struct path *path); | ||
1787 | int security_sb_umount(struct vfsmount *mnt, int flags); | 1681 | int security_sb_umount(struct vfsmount *mnt, int flags); |
1788 | void security_sb_umount_close(struct vfsmount *mnt); | ||
1789 | void security_sb_umount_busy(struct vfsmount *mnt); | ||
1790 | void security_sb_post_remount(struct vfsmount *mnt, unsigned long flags, void *data); | ||
1791 | void security_sb_post_addmount(struct vfsmount *mnt, struct path *mountpoint); | ||
1792 | int security_sb_pivotroot(struct path *old_path, struct path *new_path); | 1682 | int security_sb_pivotroot(struct path *old_path, struct path *new_path); |
1793 | void security_sb_post_pivotroot(struct path *old_path, struct path *new_path); | ||
1794 | int security_sb_set_mnt_opts(struct super_block *sb, struct security_mnt_opts *opts); | 1683 | int security_sb_set_mnt_opts(struct super_block *sb, struct security_mnt_opts *opts); |
1795 | void security_sb_clone_mnt_opts(const struct super_block *oldsb, | 1684 | void security_sb_clone_mnt_opts(const struct super_block *oldsb, |
1796 | struct super_block *newsb); | 1685 | struct super_block *newsb); |
@@ -1816,7 +1705,6 @@ int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd); | |||
1816 | int security_inode_permission(struct inode *inode, int mask); | 1705 | int security_inode_permission(struct inode *inode, int mask); |
1817 | int security_inode_setattr(struct dentry *dentry, struct iattr *attr); | 1706 | int security_inode_setattr(struct dentry *dentry, struct iattr *attr); |
1818 | int security_inode_getattr(struct vfsmount *mnt, struct dentry *dentry); | 1707 | int security_inode_getattr(struct vfsmount *mnt, struct dentry *dentry); |
1819 | void security_inode_delete(struct inode *inode); | ||
1820 | int security_inode_setxattr(struct dentry *dentry, const char *name, | 1708 | int security_inode_setxattr(struct dentry *dentry, const char *name, |
1821 | const void *value, size_t size, int flags); | 1709 | const void *value, size_t size, int flags); |
1822 | void security_inode_post_setxattr(struct dentry *dentry, const char *name, | 1710 | void security_inode_post_setxattr(struct dentry *dentry, const char *name, |
@@ -1850,20 +1738,16 @@ int security_task_create(unsigned long clone_flags); | |||
1850 | int security_cred_alloc_blank(struct cred *cred, gfp_t gfp); | 1738 | int security_cred_alloc_blank(struct cred *cred, gfp_t gfp); |
1851 | void security_cred_free(struct cred *cred); | 1739 | void security_cred_free(struct cred *cred); |
1852 | int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp); | 1740 | int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp); |
1853 | void security_commit_creds(struct cred *new, const struct cred *old); | ||
1854 | void security_transfer_creds(struct cred *new, const struct cred *old); | 1741 | void security_transfer_creds(struct cred *new, const struct cred *old); |
1855 | int security_kernel_act_as(struct cred *new, u32 secid); | 1742 | int security_kernel_act_as(struct cred *new, u32 secid); |
1856 | int security_kernel_create_files_as(struct cred *new, struct inode *inode); | 1743 | int security_kernel_create_files_as(struct cred *new, struct inode *inode); |
1857 | int security_kernel_module_request(char *kmod_name); | 1744 | int security_kernel_module_request(char *kmod_name); |
1858 | int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags); | ||
1859 | int security_task_fix_setuid(struct cred *new, const struct cred *old, | 1745 | int security_task_fix_setuid(struct cred *new, const struct cred *old, |
1860 | int flags); | 1746 | int flags); |
1861 | int security_task_setgid(gid_t id0, gid_t id1, gid_t id2, int flags); | ||
1862 | int security_task_setpgid(struct task_struct *p, pid_t pgid); | 1747 | int security_task_setpgid(struct task_struct *p, pid_t pgid); |
1863 | int security_task_getpgid(struct task_struct *p); | 1748 | int security_task_getpgid(struct task_struct *p); |
1864 | int security_task_getsid(struct task_struct *p); | 1749 | int security_task_getsid(struct task_struct *p); |
1865 | void security_task_getsecid(struct task_struct *p, u32 *secid); | 1750 | void security_task_getsecid(struct task_struct *p, u32 *secid); |
1866 | int security_task_setgroups(struct group_info *group_info); | ||
1867 | int security_task_setnice(struct task_struct *p, int nice); | 1751 | int security_task_setnice(struct task_struct *p, int nice); |
1868 | int security_task_setioprio(struct task_struct *p, int ioprio); | 1752 | int security_task_setioprio(struct task_struct *p, int ioprio); |
1869 | int security_task_getioprio(struct task_struct *p); | 1753 | int security_task_getioprio(struct task_struct *p); |
@@ -1990,11 +1874,6 @@ int security_real_capable_noaudit(struct task_struct *tsk, int cap) | |||
1990 | return ret; | 1874 | return ret; |
1991 | } | 1875 | } |
1992 | 1876 | ||
1993 | static inline int security_acct(struct file *file) | ||
1994 | { | ||
1995 | return 0; | ||
1996 | } | ||
1997 | |||
1998 | static inline int security_sysctl(struct ctl_table *table, int op) | 1877 | static inline int security_sysctl(struct ctl_table *table, int op) |
1999 | { | 1878 | { |
2000 | return 0; | 1879 | return 0; |
@@ -2099,41 +1978,17 @@ static inline int security_sb_mount(char *dev_name, struct path *path, | |||
2099 | return 0; | 1978 | return 0; |
2100 | } | 1979 | } |
2101 | 1980 | ||
2102 | static inline int security_sb_check_sb(struct vfsmount *mnt, | ||
2103 | struct path *path) | ||
2104 | { | ||
2105 | return 0; | ||
2106 | } | ||
2107 | |||
2108 | static inline int security_sb_umount(struct vfsmount *mnt, int flags) | 1981 | static inline int security_sb_umount(struct vfsmount *mnt, int flags) |
2109 | { | 1982 | { |
2110 | return 0; | 1983 | return 0; |
2111 | } | 1984 | } |
2112 | 1985 | ||
2113 | static inline void security_sb_umount_close(struct vfsmount *mnt) | ||
2114 | { } | ||
2115 | |||
2116 | static inline void security_sb_umount_busy(struct vfsmount *mnt) | ||
2117 | { } | ||
2118 | |||
2119 | static inline void security_sb_post_remount(struct vfsmount *mnt, | ||
2120 | unsigned long flags, void *data) | ||
2121 | { } | ||
2122 | |||
2123 | static inline void security_sb_post_addmount(struct vfsmount *mnt, | ||
2124 | struct path *mountpoint) | ||
2125 | { } | ||
2126 | |||
2127 | static inline int security_sb_pivotroot(struct path *old_path, | 1986 | static inline int security_sb_pivotroot(struct path *old_path, |
2128 | struct path *new_path) | 1987 | struct path *new_path) |
2129 | { | 1988 | { |
2130 | return 0; | 1989 | return 0; |
2131 | } | 1990 | } |
2132 | 1991 | ||
2133 | static inline void security_sb_post_pivotroot(struct path *old_path, | ||
2134 | struct path *new_path) | ||
2135 | { } | ||
2136 | |||
2137 | static inline int security_sb_set_mnt_opts(struct super_block *sb, | 1992 | static inline int security_sb_set_mnt_opts(struct super_block *sb, |
2138 | struct security_mnt_opts *opts) | 1993 | struct security_mnt_opts *opts) |
2139 | { | 1994 | { |
@@ -2249,9 +2104,6 @@ static inline int security_inode_getattr(struct vfsmount *mnt, | |||
2249 | return 0; | 2104 | return 0; |
2250 | } | 2105 | } |
2251 | 2106 | ||
2252 | static inline void security_inode_delete(struct inode *inode) | ||
2253 | { } | ||
2254 | |||
2255 | static inline int security_inode_setxattr(struct dentry *dentry, | 2107 | static inline int security_inode_setxattr(struct dentry *dentry, |
2256 | const char *name, const void *value, size_t size, int flags) | 2108 | const char *name, const void *value, size_t size, int flags) |
2257 | { | 2109 | { |
@@ -2398,11 +2250,6 @@ static inline int security_prepare_creds(struct cred *new, | |||
2398 | return 0; | 2250 | return 0; |
2399 | } | 2251 | } |
2400 | 2252 | ||
2401 | static inline void security_commit_creds(struct cred *new, | ||
2402 | const struct cred *old) | ||
2403 | { | ||
2404 | } | ||
2405 | |||
2406 | static inline void security_transfer_creds(struct cred *new, | 2253 | static inline void security_transfer_creds(struct cred *new, |
2407 | const struct cred *old) | 2254 | const struct cred *old) |
2408 | { | 2255 | { |
@@ -2424,12 +2271,6 @@ static inline int security_kernel_module_request(char *kmod_name) | |||
2424 | return 0; | 2271 | return 0; |
2425 | } | 2272 | } |
2426 | 2273 | ||
2427 | static inline int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, | ||
2428 | int flags) | ||
2429 | { | ||
2430 | return 0; | ||
2431 | } | ||
2432 | |||
2433 | static inline int security_task_fix_setuid(struct cred *new, | 2274 | static inline int security_task_fix_setuid(struct cred *new, |
2434 | const struct cred *old, | 2275 | const struct cred *old, |
2435 | int flags) | 2276 | int flags) |
@@ -2437,12 +2278,6 @@ static inline int security_task_fix_setuid(struct cred *new, | |||
2437 | return cap_task_fix_setuid(new, old, flags); | 2278 | return cap_task_fix_setuid(new, old, flags); |
2438 | } | 2279 | } |
2439 | 2280 | ||
2440 | static inline int security_task_setgid(gid_t id0, gid_t id1, gid_t id2, | ||
2441 | int flags) | ||
2442 | { | ||
2443 | return 0; | ||
2444 | } | ||
2445 | |||
2446 | static inline int security_task_setpgid(struct task_struct *p, pid_t pgid) | 2281 | static inline int security_task_setpgid(struct task_struct *p, pid_t pgid) |
2447 | { | 2282 | { |
2448 | return 0; | 2283 | return 0; |
@@ -2463,11 +2298,6 @@ static inline void security_task_getsecid(struct task_struct *p, u32 *secid) | |||
2463 | *secid = 0; | 2298 | *secid = 0; |
2464 | } | 2299 | } |
2465 | 2300 | ||
2466 | static inline int security_task_setgroups(struct group_info *group_info) | ||
2467 | { | ||
2468 | return 0; | ||
2469 | } | ||
2470 | |||
2471 | static inline int security_task_setnice(struct task_struct *p, int nice) | 2301 | static inline int security_task_setnice(struct task_struct *p, int nice) |
2472 | { | 2302 | { |
2473 | return cap_task_setnice(p, nice); | 2303 | return cap_task_setnice(p, nice); |
@@ -3064,9 +2894,6 @@ void security_key_free(struct key *key); | |||
3064 | int security_key_permission(key_ref_t key_ref, | 2894 | int security_key_permission(key_ref_t key_ref, |
3065 | const struct cred *cred, key_perm_t perm); | 2895 | const struct cred *cred, key_perm_t perm); |
3066 | int security_key_getsecurity(struct key *key, char **_buffer); | 2896 | int security_key_getsecurity(struct key *key, char **_buffer); |
3067 | int security_key_session_to_parent(const struct cred *cred, | ||
3068 | const struct cred *parent_cred, | ||
3069 | struct key *key); | ||
3070 | 2897 | ||
3071 | #else | 2898 | #else |
3072 | 2899 | ||
@@ -3094,13 +2921,6 @@ static inline int security_key_getsecurity(struct key *key, char **_buffer) | |||
3094 | return 0; | 2921 | return 0; |
3095 | } | 2922 | } |
3096 | 2923 | ||
3097 | static inline int security_key_session_to_parent(const struct cred *cred, | ||
3098 | const struct cred *parent_cred, | ||
3099 | struct key *key) | ||
3100 | { | ||
3101 | return 0; | ||
3102 | } | ||
3103 | |||
3104 | #endif | 2924 | #endif |
3105 | #endif /* CONFIG_KEYS */ | 2925 | #endif /* CONFIG_KEYS */ |
3106 | 2926 | ||
diff --git a/include/linux/serial_sci.h b/include/linux/serial_sci.h index 193d4bfe42ff..f5364a1de68b 100644 --- a/include/linux/serial_sci.h +++ b/include/linux/serial_sci.h | |||
@@ -33,8 +33,8 @@ struct plat_sci_port { | |||
33 | char *clk; /* clock string */ | 33 | char *clk; /* clock string */ |
34 | struct device *dma_dev; | 34 | struct device *dma_dev; |
35 | #ifdef CONFIG_SERIAL_SH_SCI_DMA | 35 | #ifdef CONFIG_SERIAL_SH_SCI_DMA |
36 | enum sh_dmae_slave_chan_id dma_slave_tx; | 36 | unsigned int dma_slave_tx; |
37 | enum sh_dmae_slave_chan_id dma_slave_rx; | 37 | unsigned int dma_slave_rx; |
38 | #endif | 38 | #endif |
39 | }; | 39 | }; |
40 | 40 | ||
diff --git a/include/linux/serio.h b/include/linux/serio.h index 64b473066b9a..b5552568178d 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
@@ -196,5 +196,6 @@ static inline void serio_continue_rx(struct serio *serio) | |||
196 | #define SERIO_TOUCHIT213 0x38 | 196 | #define SERIO_TOUCHIT213 0x38 |
197 | #define SERIO_W8001 0x39 | 197 | #define SERIO_W8001 0x39 |
198 | #define SERIO_DYNAPRO 0x3a | 198 | #define SERIO_DYNAPRO 0x3a |
199 | #define SERIO_HAMPSHIRE 0x3b | ||
199 | 200 | ||
200 | #endif | 201 | #endif |
diff --git a/include/linux/sh_clk.h b/include/linux/sh_clk.h new file mode 100644 index 000000000000..1636d1e2a5f1 --- /dev/null +++ b/include/linux/sh_clk.h | |||
@@ -0,0 +1,150 @@ | |||
1 | #ifndef __SH_CLOCK_H | ||
2 | #define __SH_CLOCK_H | ||
3 | |||
4 | #include <linux/list.h> | ||
5 | #include <linux/seq_file.h> | ||
6 | #include <linux/cpufreq.h> | ||
7 | #include <linux/clk.h> | ||
8 | #include <linux/err.h> | ||
9 | |||
10 | struct clk; | ||
11 | |||
12 | struct clk_ops { | ||
13 | void (*init)(struct clk *clk); | ||
14 | int (*enable)(struct clk *clk); | ||
15 | void (*disable)(struct clk *clk); | ||
16 | unsigned long (*recalc)(struct clk *clk); | ||
17 | int (*set_rate)(struct clk *clk, unsigned long rate, int algo_id); | ||
18 | int (*set_parent)(struct clk *clk, struct clk *parent); | ||
19 | long (*round_rate)(struct clk *clk, unsigned long rate); | ||
20 | }; | ||
21 | |||
22 | struct clk { | ||
23 | struct list_head node; | ||
24 | const char *name; | ||
25 | int id; | ||
26 | |||
27 | struct clk *parent; | ||
28 | struct clk_ops *ops; | ||
29 | |||
30 | struct list_head children; | ||
31 | struct list_head sibling; /* node for children */ | ||
32 | |||
33 | int usecount; | ||
34 | |||
35 | unsigned long rate; | ||
36 | unsigned long flags; | ||
37 | |||
38 | void __iomem *enable_reg; | ||
39 | unsigned int enable_bit; | ||
40 | |||
41 | unsigned long arch_flags; | ||
42 | void *priv; | ||
43 | struct dentry *dentry; | ||
44 | struct cpufreq_frequency_table *freq_table; | ||
45 | }; | ||
46 | |||
47 | #define CLK_ENABLE_ON_INIT (1 << 0) | ||
48 | |||
49 | /* drivers/sh/clk.c */ | ||
50 | unsigned long followparent_recalc(struct clk *); | ||
51 | void recalculate_root_clocks(void); | ||
52 | void propagate_rate(struct clk *); | ||
53 | int clk_reparent(struct clk *child, struct clk *parent); | ||
54 | int clk_register(struct clk *); | ||
55 | void clk_unregister(struct clk *); | ||
56 | void clk_enable_init_clocks(void); | ||
57 | |||
58 | /** | ||
59 | * clk_set_rate_ex - set the clock rate for a clock source, with additional parameter | ||
60 | * @clk: clock source | ||
61 | * @rate: desired clock rate in Hz | ||
62 | * @algo_id: algorithm id to be passed down to ops->set_rate | ||
63 | * | ||
64 | * Returns success (0) or negative errno. | ||
65 | */ | ||
66 | int clk_set_rate_ex(struct clk *clk, unsigned long rate, int algo_id); | ||
67 | |||
68 | enum clk_sh_algo_id { | ||
69 | NO_CHANGE = 0, | ||
70 | |||
71 | IUS_N1_N1, | ||
72 | IUS_322, | ||
73 | IUS_522, | ||
74 | IUS_N11, | ||
75 | |||
76 | SB_N1, | ||
77 | |||
78 | SB3_N1, | ||
79 | SB3_32, | ||
80 | SB3_43, | ||
81 | SB3_54, | ||
82 | |||
83 | BP_N1, | ||
84 | |||
85 | IP_N1, | ||
86 | }; | ||
87 | |||
88 | struct clk_div_mult_table { | ||
89 | unsigned int *divisors; | ||
90 | unsigned int nr_divisors; | ||
91 | unsigned int *multipliers; | ||
92 | unsigned int nr_multipliers; | ||
93 | }; | ||
94 | |||
95 | struct cpufreq_frequency_table; | ||
96 | void clk_rate_table_build(struct clk *clk, | ||
97 | struct cpufreq_frequency_table *freq_table, | ||
98 | int nr_freqs, | ||
99 | struct clk_div_mult_table *src_table, | ||
100 | unsigned long *bitmap); | ||
101 | |||
102 | long clk_rate_table_round(struct clk *clk, | ||
103 | struct cpufreq_frequency_table *freq_table, | ||
104 | unsigned long rate); | ||
105 | |||
106 | int clk_rate_table_find(struct clk *clk, | ||
107 | struct cpufreq_frequency_table *freq_table, | ||
108 | unsigned long rate); | ||
109 | |||
110 | #define SH_CLK_MSTP32(_parent, _enable_reg, _enable_bit, _flags) \ | ||
111 | { \ | ||
112 | .parent = _parent, \ | ||
113 | .enable_reg = (void __iomem *)_enable_reg, \ | ||
114 | .enable_bit = _enable_bit, \ | ||
115 | .flags = _flags, \ | ||
116 | } | ||
117 | |||
118 | int sh_clk_mstp32_register(struct clk *clks, int nr); | ||
119 | |||
120 | #define SH_CLK_DIV4(_parent, _reg, _shift, _div_bitmap, _flags) \ | ||
121 | { \ | ||
122 | .parent = _parent, \ | ||
123 | .enable_reg = (void __iomem *)_reg, \ | ||
124 | .enable_bit = _shift, \ | ||
125 | .arch_flags = _div_bitmap, \ | ||
126 | .flags = _flags, \ | ||
127 | } | ||
128 | |||
129 | struct clk_div4_table { | ||
130 | struct clk_div_mult_table *div_mult_table; | ||
131 | void (*kick)(struct clk *clk); | ||
132 | }; | ||
133 | |||
134 | int sh_clk_div4_register(struct clk *clks, int nr, | ||
135 | struct clk_div4_table *table); | ||
136 | int sh_clk_div4_enable_register(struct clk *clks, int nr, | ||
137 | struct clk_div4_table *table); | ||
138 | int sh_clk_div4_reparent_register(struct clk *clks, int nr, | ||
139 | struct clk_div4_table *table); | ||
140 | |||
141 | #define SH_CLK_DIV6(_parent, _reg, _flags) \ | ||
142 | { \ | ||
143 | .parent = _parent, \ | ||
144 | .enable_reg = (void __iomem *)_reg, \ | ||
145 | .flags = _flags, \ | ||
146 | } | ||
147 | |||
148 | int sh_clk_div6_register(struct clk *clks, int nr); | ||
149 | |||
150 | #endif /* __SH_CLOCK_H */ | ||
diff --git a/include/linux/sh_dma.h b/include/linux/sh_dma.h new file mode 100644 index 000000000000..b08cd4efa15c --- /dev/null +++ b/include/linux/sh_dma.h | |||
@@ -0,0 +1,102 @@ | |||
1 | /* | ||
2 | * Header for the new SH dmaengine driver | ||
3 | * | ||
4 | * Copyright (C) 2010 Guennadi Liakhovetski <g.liakhovetski@gmx.de> | ||
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 SH_DMA_H | ||
11 | #define SH_DMA_H | ||
12 | |||
13 | #include <linux/list.h> | ||
14 | #include <linux/dmaengine.h> | ||
15 | |||
16 | /* Used by slave DMA clients to request DMA to/from a specific peripheral */ | ||
17 | struct sh_dmae_slave { | ||
18 | unsigned int slave_id; /* Set by the platform */ | ||
19 | struct device *dma_dev; /* Set by the platform */ | ||
20 | const struct sh_dmae_slave_config *config; /* Set by the driver */ | ||
21 | }; | ||
22 | |||
23 | struct sh_dmae_regs { | ||
24 | u32 sar; /* SAR / source address */ | ||
25 | u32 dar; /* DAR / destination address */ | ||
26 | u32 tcr; /* TCR / transfer count */ | ||
27 | }; | ||
28 | |||
29 | struct sh_desc { | ||
30 | struct sh_dmae_regs hw; | ||
31 | struct list_head node; | ||
32 | struct dma_async_tx_descriptor async_tx; | ||
33 | enum dma_data_direction direction; | ||
34 | dma_cookie_t cookie; | ||
35 | size_t partial; | ||
36 | int chunks; | ||
37 | int mark; | ||
38 | }; | ||
39 | |||
40 | struct sh_dmae_slave_config { | ||
41 | unsigned int slave_id; | ||
42 | dma_addr_t addr; | ||
43 | u32 chcr; | ||
44 | char mid_rid; | ||
45 | }; | ||
46 | |||
47 | struct sh_dmae_channel { | ||
48 | unsigned int offset; | ||
49 | unsigned int dmars; | ||
50 | unsigned int dmars_bit; | ||
51 | }; | ||
52 | |||
53 | struct sh_dmae_pdata { | ||
54 | const struct sh_dmae_slave_config *slave; | ||
55 | int slave_num; | ||
56 | const struct sh_dmae_channel *channel; | ||
57 | int channel_num; | ||
58 | unsigned int ts_low_shift; | ||
59 | unsigned int ts_low_mask; | ||
60 | unsigned int ts_high_shift; | ||
61 | unsigned int ts_high_mask; | ||
62 | const unsigned int *ts_shift; | ||
63 | int ts_shift_num; | ||
64 | u16 dmaor_init; | ||
65 | }; | ||
66 | |||
67 | /* DMA register */ | ||
68 | #define SAR 0x00 | ||
69 | #define DAR 0x04 | ||
70 | #define TCR 0x08 | ||
71 | #define CHCR 0x0C | ||
72 | #define DMAOR 0x40 | ||
73 | |||
74 | /* DMAOR definitions */ | ||
75 | #define DMAOR_AE 0x00000004 | ||
76 | #define DMAOR_NMIF 0x00000002 | ||
77 | #define DMAOR_DME 0x00000001 | ||
78 | |||
79 | /* Definitions for the SuperH DMAC */ | ||
80 | #define REQ_L 0x00000000 | ||
81 | #define REQ_E 0x00080000 | ||
82 | #define RACK_H 0x00000000 | ||
83 | #define RACK_L 0x00040000 | ||
84 | #define ACK_R 0x00000000 | ||
85 | #define ACK_W 0x00020000 | ||
86 | #define ACK_H 0x00000000 | ||
87 | #define ACK_L 0x00010000 | ||
88 | #define DM_INC 0x00004000 | ||
89 | #define DM_DEC 0x00008000 | ||
90 | #define DM_FIX 0x0000c000 | ||
91 | #define SM_INC 0x00001000 | ||
92 | #define SM_DEC 0x00002000 | ||
93 | #define SM_FIX 0x00003000 | ||
94 | #define RS_IN 0x00000200 | ||
95 | #define RS_OUT 0x00000300 | ||
96 | #define TS_BLK 0x00000040 | ||
97 | #define TM_BUR 0x00000020 | ||
98 | #define CHCR_DE 0x00000001 | ||
99 | #define CHCR_TE 0x00000002 | ||
100 | #define CHCR_IE 0x00000004 | ||
101 | |||
102 | #endif | ||
diff --git a/include/linux/sh_intc.h b/include/linux/sh_intc.h index 51d288d8ac88..0d6cd38e673d 100644 --- a/include/linux/sh_intc.h +++ b/include/linux/sh_intc.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __SH_INTC_H | 1 | #ifndef __SH_INTC_H |
2 | #define __SH_INTC_H | 2 | #define __SH_INTC_H |
3 | 3 | ||
4 | #include <linux/ioport.h> | ||
5 | |||
4 | typedef unsigned char intc_enum; | 6 | typedef unsigned char intc_enum; |
5 | 7 | ||
6 | struct intc_vect { | 8 | struct intc_vect { |
@@ -21,6 +23,9 @@ struct intc_group { | |||
21 | struct intc_mask_reg { | 23 | struct intc_mask_reg { |
22 | unsigned long set_reg, clr_reg, reg_width; | 24 | unsigned long set_reg, clr_reg, reg_width; |
23 | intc_enum enum_ids[32]; | 25 | intc_enum enum_ids[32]; |
26 | #ifdef CONFIG_INTC_BALANCING | ||
27 | unsigned long dist_reg; | ||
28 | #endif | ||
24 | #ifdef CONFIG_SMP | 29 | #ifdef CONFIG_SMP |
25 | unsigned long smp; | 30 | unsigned long smp; |
26 | #endif | 31 | #endif |
@@ -39,8 +44,14 @@ struct intc_sense_reg { | |||
39 | intc_enum enum_ids[16]; | 44 | intc_enum enum_ids[16]; |
40 | }; | 45 | }; |
41 | 46 | ||
47 | #ifdef CONFIG_INTC_BALANCING | ||
48 | #define INTC_SMP_BALANCING(reg) .dist_reg = (reg) | ||
49 | #else | ||
50 | #define INTC_SMP_BALANCING(reg) | ||
51 | #endif | ||
52 | |||
42 | #ifdef CONFIG_SMP | 53 | #ifdef CONFIG_SMP |
43 | #define INTC_SMP(stride, nr) .smp = (stride) | ((nr) << 8) | 54 | #define INTC_SMP(stride, nr) .smp = (stride) | ((nr) << 8) |
44 | #else | 55 | #else |
45 | #define INTC_SMP(stride, nr) | 56 | #define INTC_SMP(stride, nr) |
46 | #endif | 57 | #endif |
@@ -71,6 +82,8 @@ struct intc_hw_desc { | |||
71 | 82 | ||
72 | struct intc_desc { | 83 | struct intc_desc { |
73 | char *name; | 84 | char *name; |
85 | struct resource *resource; | ||
86 | unsigned int num_resources; | ||
74 | intc_enum force_enable; | 87 | intc_enum force_enable; |
75 | intc_enum force_disable; | 88 | intc_enum force_disable; |
76 | struct intc_hw_desc hw; | 89 | struct intc_hw_desc hw; |
@@ -92,9 +105,18 @@ struct intc_desc symbol __initdata = { \ | |||
92 | prio_regs, sense_regs, ack_regs), \ | 105 | prio_regs, sense_regs, ack_regs), \ |
93 | } | 106 | } |
94 | 107 | ||
95 | void __init register_intc_controller(struct intc_desc *desc); | 108 | int __init register_intc_controller(struct intc_desc *desc); |
96 | int intc_set_priority(unsigned int irq, unsigned int prio); | 109 | int intc_set_priority(unsigned int irq, unsigned int prio); |
97 | 110 | ||
111 | #ifdef CONFIG_INTC_USERIMASK | ||
112 | int register_intc_userimask(unsigned long addr); | ||
113 | #else | ||
114 | static inline int register_intc_userimask(unsigned long addr) | ||
115 | { | ||
116 | return 0; | ||
117 | } | ||
118 | #endif | ||
119 | |||
98 | int reserve_irq_vector(unsigned int irq); | 120 | int reserve_irq_vector(unsigned int irq); |
99 | void reserve_irq_legacy(void); | 121 | void reserve_irq_legacy(void); |
100 | 122 | ||
diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index 996df4dac7d4..87d7ec0bf779 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h | |||
@@ -54,6 +54,7 @@ struct rpc_cred { | |||
54 | #define RPCAUTH_CRED_NEW 0 | 54 | #define RPCAUTH_CRED_NEW 0 |
55 | #define RPCAUTH_CRED_UPTODATE 1 | 55 | #define RPCAUTH_CRED_UPTODATE 1 |
56 | #define RPCAUTH_CRED_HASHED 2 | 56 | #define RPCAUTH_CRED_HASHED 2 |
57 | #define RPCAUTH_CRED_NEGATIVE 3 | ||
57 | 58 | ||
58 | #define RPCAUTH_CRED_MAGIC 0x0f4aa4f0 | 59 | #define RPCAUTH_CRED_MAGIC 0x0f4aa4f0 |
59 | 60 | ||
diff --git a/include/linux/sunrpc/auth_gss.h b/include/linux/sunrpc/auth_gss.h index d48d4e605f74..671538d25bc1 100644 --- a/include/linux/sunrpc/auth_gss.h +++ b/include/linux/sunrpc/auth_gss.h | |||
@@ -82,6 +82,7 @@ struct gss_cred { | |||
82 | enum rpc_gss_svc gc_service; | 82 | enum rpc_gss_svc gc_service; |
83 | struct gss_cl_ctx *gc_ctx; | 83 | struct gss_cl_ctx *gc_ctx; |
84 | struct gss_upcall_msg *gc_upcall; | 84 | struct gss_upcall_msg *gc_upcall; |
85 | unsigned long gc_upcall_timestamp; | ||
85 | unsigned char gc_machine_cred : 1; | 86 | unsigned char gc_machine_cred : 1; |
86 | }; | 87 | }; |
87 | 88 | ||
diff --git a/include/linux/sunrpc/gss_api.h b/include/linux/sunrpc/gss_api.h index 03f33330ece2..5d8048beb051 100644 --- a/include/linux/sunrpc/gss_api.h +++ b/include/linux/sunrpc/gss_api.h | |||
@@ -35,7 +35,8 @@ int gss_import_sec_context( | |||
35 | const void* input_token, | 35 | const void* input_token, |
36 | size_t bufsize, | 36 | size_t bufsize, |
37 | struct gss_api_mech *mech, | 37 | struct gss_api_mech *mech, |
38 | struct gss_ctx **ctx_id); | 38 | struct gss_ctx **ctx_id, |
39 | gfp_t gfp_mask); | ||
39 | u32 gss_get_mic( | 40 | u32 gss_get_mic( |
40 | struct gss_ctx *ctx_id, | 41 | struct gss_ctx *ctx_id, |
41 | struct xdr_buf *message, | 42 | struct xdr_buf *message, |
@@ -80,6 +81,8 @@ struct gss_api_mech { | |||
80 | /* pseudoflavors supported by this mechanism: */ | 81 | /* pseudoflavors supported by this mechanism: */ |
81 | int gm_pf_num; | 82 | int gm_pf_num; |
82 | struct pf_desc * gm_pfs; | 83 | struct pf_desc * gm_pfs; |
84 | /* Should the following be a callback operation instead? */ | ||
85 | const char *gm_upcall_enctypes; | ||
83 | }; | 86 | }; |
84 | 87 | ||
85 | /* and must provide the following operations: */ | 88 | /* and must provide the following operations: */ |
@@ -87,7 +90,8 @@ struct gss_api_ops { | |||
87 | int (*gss_import_sec_context)( | 90 | int (*gss_import_sec_context)( |
88 | const void *input_token, | 91 | const void *input_token, |
89 | size_t bufsize, | 92 | size_t bufsize, |
90 | struct gss_ctx *ctx_id); | 93 | struct gss_ctx *ctx_id, |
94 | gfp_t gfp_mask); | ||
91 | u32 (*gss_get_mic)( | 95 | u32 (*gss_get_mic)( |
92 | struct gss_ctx *ctx_id, | 96 | struct gss_ctx *ctx_id, |
93 | struct xdr_buf *message, | 97 | struct xdr_buf *message, |
diff --git a/include/linux/sunrpc/gss_krb5.h b/include/linux/sunrpc/gss_krb5.h index e7bbdba474d5..5af2931cf58d 100644 --- a/include/linux/sunrpc/gss_krb5.h +++ b/include/linux/sunrpc/gss_krb5.h | |||
@@ -4,7 +4,7 @@ | |||
4 | * Adapted from MIT Kerberos 5-1.2.1 lib/include/krb5.h, | 4 | * Adapted from MIT Kerberos 5-1.2.1 lib/include/krb5.h, |
5 | * lib/gssapi/krb5/gssapiP_krb5.h, and others | 5 | * lib/gssapi/krb5/gssapiP_krb5.h, and others |
6 | * | 6 | * |
7 | * Copyright (c) 2000 The Regents of the University of Michigan. | 7 | * Copyright (c) 2000-2008 The Regents of the University of Michigan. |
8 | * All rights reserved. | 8 | * All rights reserved. |
9 | * | 9 | * |
10 | * Andy Adamson <andros@umich.edu> | 10 | * Andy Adamson <andros@umich.edu> |
@@ -36,17 +36,86 @@ | |||
36 | * | 36 | * |
37 | */ | 37 | */ |
38 | 38 | ||
39 | #include <linux/crypto.h> | ||
39 | #include <linux/sunrpc/auth_gss.h> | 40 | #include <linux/sunrpc/auth_gss.h> |
40 | #include <linux/sunrpc/gss_err.h> | 41 | #include <linux/sunrpc/gss_err.h> |
41 | #include <linux/sunrpc/gss_asn1.h> | 42 | #include <linux/sunrpc/gss_asn1.h> |
42 | 43 | ||
44 | /* Length of constant used in key derivation */ | ||
45 | #define GSS_KRB5_K5CLENGTH (5) | ||
46 | |||
47 | /* Maximum key length (in bytes) for the supported crypto algorithms*/ | ||
48 | #define GSS_KRB5_MAX_KEYLEN (32) | ||
49 | |||
50 | /* Maximum checksum function output for the supported crypto algorithms */ | ||
51 | #define GSS_KRB5_MAX_CKSUM_LEN (20) | ||
52 | |||
53 | /* Maximum blocksize for the supported crypto algorithms */ | ||
54 | #define GSS_KRB5_MAX_BLOCKSIZE (16) | ||
55 | |||
56 | struct krb5_ctx; | ||
57 | |||
58 | struct gss_krb5_enctype { | ||
59 | const u32 etype; /* encryption (key) type */ | ||
60 | const u32 ctype; /* checksum type */ | ||
61 | const char *name; /* "friendly" name */ | ||
62 | const char *encrypt_name; /* crypto encrypt name */ | ||
63 | const char *cksum_name; /* crypto checksum name */ | ||
64 | const u16 signalg; /* signing algorithm */ | ||
65 | const u16 sealalg; /* sealing algorithm */ | ||
66 | const u32 blocksize; /* encryption blocksize */ | ||
67 | const u32 conflen; /* confounder length | ||
68 | (normally the same as | ||
69 | the blocksize) */ | ||
70 | const u32 cksumlength; /* checksum length */ | ||
71 | const u32 keyed_cksum; /* is it a keyed cksum? */ | ||
72 | const u32 keybytes; /* raw key len, in bytes */ | ||
73 | const u32 keylength; /* final key len, in bytes */ | ||
74 | u32 (*encrypt) (struct crypto_blkcipher *tfm, | ||
75 | void *iv, void *in, void *out, | ||
76 | int length); /* encryption function */ | ||
77 | u32 (*decrypt) (struct crypto_blkcipher *tfm, | ||
78 | void *iv, void *in, void *out, | ||
79 | int length); /* decryption function */ | ||
80 | u32 (*mk_key) (const struct gss_krb5_enctype *gk5e, | ||
81 | struct xdr_netobj *in, | ||
82 | struct xdr_netobj *out); /* complete key generation */ | ||
83 | u32 (*encrypt_v2) (struct krb5_ctx *kctx, u32 offset, | ||
84 | struct xdr_buf *buf, int ec, | ||
85 | struct page **pages); /* v2 encryption function */ | ||
86 | u32 (*decrypt_v2) (struct krb5_ctx *kctx, u32 offset, | ||
87 | struct xdr_buf *buf, u32 *headskip, | ||
88 | u32 *tailskip); /* v2 decryption function */ | ||
89 | }; | ||
90 | |||
91 | /* krb5_ctx flags definitions */ | ||
92 | #define KRB5_CTX_FLAG_INITIATOR 0x00000001 | ||
93 | #define KRB5_CTX_FLAG_CFX 0x00000002 | ||
94 | #define KRB5_CTX_FLAG_ACCEPTOR_SUBKEY 0x00000004 | ||
95 | |||
43 | struct krb5_ctx { | 96 | struct krb5_ctx { |
44 | int initiate; /* 1 = initiating, 0 = accepting */ | 97 | int initiate; /* 1 = initiating, 0 = accepting */ |
98 | u32 enctype; | ||
99 | u32 flags; | ||
100 | const struct gss_krb5_enctype *gk5e; /* enctype-specific info */ | ||
45 | struct crypto_blkcipher *enc; | 101 | struct crypto_blkcipher *enc; |
46 | struct crypto_blkcipher *seq; | 102 | struct crypto_blkcipher *seq; |
103 | struct crypto_blkcipher *acceptor_enc; | ||
104 | struct crypto_blkcipher *initiator_enc; | ||
105 | struct crypto_blkcipher *acceptor_enc_aux; | ||
106 | struct crypto_blkcipher *initiator_enc_aux; | ||
107 | u8 Ksess[GSS_KRB5_MAX_KEYLEN]; /* session key */ | ||
108 | u8 cksum[GSS_KRB5_MAX_KEYLEN]; | ||
47 | s32 endtime; | 109 | s32 endtime; |
48 | u32 seq_send; | 110 | u32 seq_send; |
111 | u64 seq_send64; | ||
49 | struct xdr_netobj mech_used; | 112 | struct xdr_netobj mech_used; |
113 | u8 initiator_sign[GSS_KRB5_MAX_KEYLEN]; | ||
114 | u8 acceptor_sign[GSS_KRB5_MAX_KEYLEN]; | ||
115 | u8 initiator_seal[GSS_KRB5_MAX_KEYLEN]; | ||
116 | u8 acceptor_seal[GSS_KRB5_MAX_KEYLEN]; | ||
117 | u8 initiator_integ[GSS_KRB5_MAX_KEYLEN]; | ||
118 | u8 acceptor_integ[GSS_KRB5_MAX_KEYLEN]; | ||
50 | }; | 119 | }; |
51 | 120 | ||
52 | extern spinlock_t krb5_seq_lock; | 121 | extern spinlock_t krb5_seq_lock; |
@@ -57,6 +126,18 @@ extern spinlock_t krb5_seq_lock; | |||
57 | #define KG_TOK_MIC_MSG 0x0101 | 126 | #define KG_TOK_MIC_MSG 0x0101 |
58 | #define KG_TOK_WRAP_MSG 0x0201 | 127 | #define KG_TOK_WRAP_MSG 0x0201 |
59 | 128 | ||
129 | #define KG2_TOK_INITIAL 0x0101 | ||
130 | #define KG2_TOK_RESPONSE 0x0202 | ||
131 | #define KG2_TOK_MIC 0x0404 | ||
132 | #define KG2_TOK_WRAP 0x0504 | ||
133 | |||
134 | #define KG2_TOKEN_FLAG_SENTBYACCEPTOR 0x01 | ||
135 | #define KG2_TOKEN_FLAG_SEALED 0x02 | ||
136 | #define KG2_TOKEN_FLAG_ACCEPTORSUBKEY 0x04 | ||
137 | |||
138 | #define KG2_RESP_FLAG_ERROR 0x0001 | ||
139 | #define KG2_RESP_FLAG_DELEG_OK 0x0002 | ||
140 | |||
60 | enum sgn_alg { | 141 | enum sgn_alg { |
61 | SGN_ALG_DES_MAC_MD5 = 0x0000, | 142 | SGN_ALG_DES_MAC_MD5 = 0x0000, |
62 | SGN_ALG_MD2_5 = 0x0001, | 143 | SGN_ALG_MD2_5 = 0x0001, |
@@ -81,6 +162,9 @@ enum seal_alg { | |||
81 | #define CKSUMTYPE_RSA_MD5_DES 0x0008 | 162 | #define CKSUMTYPE_RSA_MD5_DES 0x0008 |
82 | #define CKSUMTYPE_NIST_SHA 0x0009 | 163 | #define CKSUMTYPE_NIST_SHA 0x0009 |
83 | #define CKSUMTYPE_HMAC_SHA1_DES3 0x000c | 164 | #define CKSUMTYPE_HMAC_SHA1_DES3 0x000c |
165 | #define CKSUMTYPE_HMAC_SHA1_96_AES128 0x000f | ||
166 | #define CKSUMTYPE_HMAC_SHA1_96_AES256 0x0010 | ||
167 | #define CKSUMTYPE_HMAC_MD5_ARCFOUR -138 /* Microsoft md5 hmac cksumtype */ | ||
84 | 168 | ||
85 | /* from gssapi_err_krb5.h */ | 169 | /* from gssapi_err_krb5.h */ |
86 | #define KG_CCACHE_NOMATCH (39756032L) | 170 | #define KG_CCACHE_NOMATCH (39756032L) |
@@ -111,11 +195,56 @@ enum seal_alg { | |||
111 | #define ENCTYPE_DES3_CBC_RAW 0x0006 /* DES-3 cbc mode raw */ | 195 | #define ENCTYPE_DES3_CBC_RAW 0x0006 /* DES-3 cbc mode raw */ |
112 | #define ENCTYPE_DES_HMAC_SHA1 0x0008 | 196 | #define ENCTYPE_DES_HMAC_SHA1 0x0008 |
113 | #define ENCTYPE_DES3_CBC_SHA1 0x0010 | 197 | #define ENCTYPE_DES3_CBC_SHA1 0x0010 |
198 | #define ENCTYPE_AES128_CTS_HMAC_SHA1_96 0x0011 | ||
199 | #define ENCTYPE_AES256_CTS_HMAC_SHA1_96 0x0012 | ||
200 | #define ENCTYPE_ARCFOUR_HMAC 0x0017 | ||
201 | #define ENCTYPE_ARCFOUR_HMAC_EXP 0x0018 | ||
114 | #define ENCTYPE_UNKNOWN 0x01ff | 202 | #define ENCTYPE_UNKNOWN 0x01ff |
115 | 203 | ||
116 | s32 | 204 | /* |
117 | make_checksum(char *, char *header, int hdrlen, struct xdr_buf *body, | 205 | * Constants used for key derivation |
118 | int body_offset, struct xdr_netobj *cksum); | 206 | */ |
207 | /* for 3DES */ | ||
208 | #define KG_USAGE_SEAL (22) | ||
209 | #define KG_USAGE_SIGN (23) | ||
210 | #define KG_USAGE_SEQ (24) | ||
211 | |||
212 | /* from rfc3961 */ | ||
213 | #define KEY_USAGE_SEED_CHECKSUM (0x99) | ||
214 | #define KEY_USAGE_SEED_ENCRYPTION (0xAA) | ||
215 | #define KEY_USAGE_SEED_INTEGRITY (0x55) | ||
216 | |||
217 | /* from rfc4121 */ | ||
218 | #define KG_USAGE_ACCEPTOR_SEAL (22) | ||
219 | #define KG_USAGE_ACCEPTOR_SIGN (23) | ||
220 | #define KG_USAGE_INITIATOR_SEAL (24) | ||
221 | #define KG_USAGE_INITIATOR_SIGN (25) | ||
222 | |||
223 | /* | ||
224 | * This compile-time check verifies that we will not exceed the | ||
225 | * slack space allotted by the client and server auth_gss code | ||
226 | * before they call gss_wrap(). | ||
227 | */ | ||
228 | #define GSS_KRB5_MAX_SLACK_NEEDED \ | ||
229 | (GSS_KRB5_TOK_HDR_LEN /* gss token header */ \ | ||
230 | + GSS_KRB5_MAX_CKSUM_LEN /* gss token checksum */ \ | ||
231 | + GSS_KRB5_MAX_BLOCKSIZE /* confounder */ \ | ||
232 | + GSS_KRB5_MAX_BLOCKSIZE /* possible padding */ \ | ||
233 | + GSS_KRB5_TOK_HDR_LEN /* encrypted hdr in v2 token */\ | ||
234 | + GSS_KRB5_MAX_CKSUM_LEN /* encryption hmac */ \ | ||
235 | + 4 + 4 /* RPC verifier */ \ | ||
236 | + GSS_KRB5_TOK_HDR_LEN \ | ||
237 | + GSS_KRB5_MAX_CKSUM_LEN) | ||
238 | |||
239 | u32 | ||
240 | make_checksum(struct krb5_ctx *kctx, char *header, int hdrlen, | ||
241 | struct xdr_buf *body, int body_offset, u8 *cksumkey, | ||
242 | unsigned int usage, struct xdr_netobj *cksumout); | ||
243 | |||
244 | u32 | ||
245 | make_checksum_v2(struct krb5_ctx *, char *header, int hdrlen, | ||
246 | struct xdr_buf *body, int body_offset, u8 *key, | ||
247 | unsigned int usage, struct xdr_netobj *cksum); | ||
119 | 248 | ||
120 | u32 gss_get_mic_kerberos(struct gss_ctx *, struct xdr_buf *, | 249 | u32 gss_get_mic_kerberos(struct gss_ctx *, struct xdr_buf *, |
121 | struct xdr_netobj *); | 250 | struct xdr_netobj *); |
@@ -149,11 +278,54 @@ gss_decrypt_xdr_buf(struct crypto_blkcipher *tfm, struct xdr_buf *inbuf, | |||
149 | int offset); | 278 | int offset); |
150 | 279 | ||
151 | s32 | 280 | s32 |
152 | krb5_make_seq_num(struct crypto_blkcipher *key, | 281 | krb5_make_seq_num(struct krb5_ctx *kctx, |
282 | struct crypto_blkcipher *key, | ||
153 | int direction, | 283 | int direction, |
154 | u32 seqnum, unsigned char *cksum, unsigned char *buf); | 284 | u32 seqnum, unsigned char *cksum, unsigned char *buf); |
155 | 285 | ||
156 | s32 | 286 | s32 |
157 | krb5_get_seq_num(struct crypto_blkcipher *key, | 287 | krb5_get_seq_num(struct krb5_ctx *kctx, |
158 | unsigned char *cksum, | 288 | unsigned char *cksum, |
159 | unsigned char *buf, int *direction, u32 *seqnum); | 289 | unsigned char *buf, int *direction, u32 *seqnum); |
290 | |||
291 | int | ||
292 | xdr_extend_head(struct xdr_buf *buf, unsigned int base, unsigned int shiftlen); | ||
293 | |||
294 | u32 | ||
295 | krb5_derive_key(const struct gss_krb5_enctype *gk5e, | ||
296 | const struct xdr_netobj *inkey, | ||
297 | struct xdr_netobj *outkey, | ||
298 | const struct xdr_netobj *in_constant, | ||
299 | gfp_t gfp_mask); | ||
300 | |||
301 | u32 | ||
302 | gss_krb5_des3_make_key(const struct gss_krb5_enctype *gk5e, | ||
303 | struct xdr_netobj *randombits, | ||
304 | struct xdr_netobj *key); | ||
305 | |||
306 | u32 | ||
307 | gss_krb5_aes_make_key(const struct gss_krb5_enctype *gk5e, | ||
308 | struct xdr_netobj *randombits, | ||
309 | struct xdr_netobj *key); | ||
310 | |||
311 | u32 | ||
312 | gss_krb5_aes_encrypt(struct krb5_ctx *kctx, u32 offset, | ||
313 | struct xdr_buf *buf, int ec, | ||
314 | struct page **pages); | ||
315 | |||
316 | u32 | ||
317 | gss_krb5_aes_decrypt(struct krb5_ctx *kctx, u32 offset, | ||
318 | struct xdr_buf *buf, u32 *plainoffset, | ||
319 | u32 *plainlen); | ||
320 | |||
321 | int | ||
322 | krb5_rc4_setup_seq_key(struct krb5_ctx *kctx, | ||
323 | struct crypto_blkcipher *cipher, | ||
324 | unsigned char *cksum); | ||
325 | |||
326 | int | ||
327 | krb5_rc4_setup_enc_key(struct krb5_ctx *kctx, | ||
328 | struct crypto_blkcipher *cipher, | ||
329 | s32 seqnum); | ||
330 | void | ||
331 | gss_krb5_make_confounder(char *p, u32 conflen); | ||
diff --git a/include/linux/sunrpc/metrics.h b/include/linux/sunrpc/metrics.h index 77f78e56c481..b6edbc0ea83d 100644 --- a/include/linux/sunrpc/metrics.h +++ b/include/linux/sunrpc/metrics.h | |||
@@ -26,6 +26,7 @@ | |||
26 | #define _LINUX_SUNRPC_METRICS_H | 26 | #define _LINUX_SUNRPC_METRICS_H |
27 | 27 | ||
28 | #include <linux/seq_file.h> | 28 | #include <linux/seq_file.h> |
29 | #include <linux/ktime.h> | ||
29 | 30 | ||
30 | #define RPC_IOSTATS_VERS "1.0" | 31 | #define RPC_IOSTATS_VERS "1.0" |
31 | 32 | ||
@@ -58,9 +59,9 @@ struct rpc_iostats { | |||
58 | * and the total time the request spent from init to release | 59 | * and the total time the request spent from init to release |
59 | * are measured. | 60 | * are measured. |
60 | */ | 61 | */ |
61 | unsigned long long om_queue, /* jiffies queued for xmit */ | 62 | ktime_t om_queue, /* queued for xmit */ |
62 | om_rtt, /* jiffies for RPC RTT */ | 63 | om_rtt, /* RPC RTT */ |
63 | om_execute; /* jiffies for RPC execution */ | 64 | om_execute; /* RPC execution */ |
64 | } ____cacheline_aligned; | 65 | } ____cacheline_aligned; |
65 | 66 | ||
66 | struct rpc_task; | 67 | struct rpc_task; |
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index 7bc7fd5291ce..7be4f3a6d246 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #define _LINUX_SUNRPC_SCHED_H_ | 10 | #define _LINUX_SUNRPC_SCHED_H_ |
11 | 11 | ||
12 | #include <linux/timer.h> | 12 | #include <linux/timer.h> |
13 | #include <linux/ktime.h> | ||
13 | #include <linux/sunrpc/types.h> | 14 | #include <linux/sunrpc/types.h> |
14 | #include <linux/spinlock.h> | 15 | #include <linux/spinlock.h> |
15 | #include <linux/wait.h> | 16 | #include <linux/wait.h> |
@@ -40,21 +41,15 @@ struct rpc_wait { | |||
40 | * This is the RPC task struct | 41 | * This is the RPC task struct |
41 | */ | 42 | */ |
42 | struct rpc_task { | 43 | struct rpc_task { |
43 | #ifdef RPC_DEBUG | ||
44 | unsigned long tk_magic; /* 0xf00baa */ | ||
45 | #endif | ||
46 | atomic_t tk_count; /* Reference count */ | 44 | atomic_t tk_count; /* Reference count */ |
47 | struct list_head tk_task; /* global list of tasks */ | 45 | struct list_head tk_task; /* global list of tasks */ |
48 | struct rpc_clnt * tk_client; /* RPC client */ | 46 | struct rpc_clnt * tk_client; /* RPC client */ |
49 | struct rpc_rqst * tk_rqstp; /* RPC request */ | 47 | struct rpc_rqst * tk_rqstp; /* RPC request */ |
50 | int tk_status; /* result of last operation */ | ||
51 | 48 | ||
52 | /* | 49 | /* |
53 | * RPC call state | 50 | * RPC call state |
54 | */ | 51 | */ |
55 | struct rpc_message tk_msg; /* RPC call info */ | 52 | struct rpc_message tk_msg; /* RPC call info */ |
56 | __u8 tk_garb_retry; | ||
57 | __u8 tk_cred_retry; | ||
58 | 53 | ||
59 | /* | 54 | /* |
60 | * callback to be executed after waking up | 55 | * callback to be executed after waking up |
@@ -67,7 +62,6 @@ struct rpc_task { | |||
67 | void * tk_calldata; | 62 | void * tk_calldata; |
68 | 63 | ||
69 | unsigned long tk_timeout; /* timeout for rpc_sleep() */ | 64 | unsigned long tk_timeout; /* timeout for rpc_sleep() */ |
70 | unsigned short tk_flags; /* misc flags */ | ||
71 | unsigned long tk_runstate; /* Task run status */ | 65 | unsigned long tk_runstate; /* Task run status */ |
72 | struct workqueue_struct *tk_workqueue; /* Normally rpciod, but could | 66 | struct workqueue_struct *tk_workqueue; /* Normally rpciod, but could |
73 | * be any workqueue | 67 | * be any workqueue |
@@ -78,17 +72,19 @@ struct rpc_task { | |||
78 | struct rpc_wait tk_wait; /* RPC wait */ | 72 | struct rpc_wait tk_wait; /* RPC wait */ |
79 | } u; | 73 | } u; |
80 | 74 | ||
81 | unsigned short tk_timeouts; /* maj timeouts */ | 75 | ktime_t tk_start; /* RPC task init timestamp */ |
82 | size_t tk_bytes_sent; /* total bytes sent */ | ||
83 | unsigned long tk_start; /* RPC task init timestamp */ | ||
84 | long tk_rtt; /* round-trip time (jiffies) */ | ||
85 | 76 | ||
86 | pid_t tk_owner; /* Process id for batching tasks */ | 77 | pid_t tk_owner; /* Process id for batching tasks */ |
87 | unsigned char tk_priority : 2;/* Task priority */ | 78 | int tk_status; /* result of last operation */ |
79 | unsigned short tk_flags; /* misc flags */ | ||
80 | unsigned short tk_timeouts; /* maj timeouts */ | ||
88 | 81 | ||
89 | #ifdef RPC_DEBUG | 82 | #ifdef RPC_DEBUG |
90 | unsigned short tk_pid; /* debugging aid */ | 83 | unsigned short tk_pid; /* debugging aid */ |
91 | #endif | 84 | #endif |
85 | unsigned char tk_priority : 2,/* Task priority */ | ||
86 | tk_garb_retry : 2, | ||
87 | tk_cred_retry : 2; | ||
92 | }; | 88 | }; |
93 | #define tk_xprt tk_client->cl_xprt | 89 | #define tk_xprt tk_client->cl_xprt |
94 | 90 | ||
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index f5cc0898bc53..35cf2e8cd7c6 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h | |||
@@ -1,7 +1,10 @@ | |||
1 | /* | 1 | /* |
2 | * include/linux/sunrpc/xdr.h | 2 | * XDR standard data types and function declarations |
3 | * | 3 | * |
4 | * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de> | 4 | * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de> |
5 | * | ||
6 | * Based on: | ||
7 | * RFC 4506 "XDR: External Data Representation Standard", May 2006 | ||
5 | */ | 8 | */ |
6 | 9 | ||
7 | #ifndef _SUNRPC_XDR_H_ | 10 | #ifndef _SUNRPC_XDR_H_ |
@@ -62,7 +65,6 @@ struct xdr_buf { | |||
62 | 65 | ||
63 | unsigned int buflen, /* Total length of storage buffer */ | 66 | unsigned int buflen, /* Total length of storage buffer */ |
64 | len; /* Length of XDR encoded message */ | 67 | len; /* Length of XDR encoded message */ |
65 | |||
66 | }; | 68 | }; |
67 | 69 | ||
68 | /* | 70 | /* |
@@ -178,7 +180,7 @@ struct xdr_array2_desc { | |||
178 | }; | 180 | }; |
179 | 181 | ||
180 | extern int xdr_decode_array2(struct xdr_buf *buf, unsigned int base, | 182 | extern int xdr_decode_array2(struct xdr_buf *buf, unsigned int base, |
181 | struct xdr_array2_desc *desc); | 183 | struct xdr_array2_desc *desc); |
182 | extern int xdr_encode_array2(struct xdr_buf *buf, unsigned int base, | 184 | extern int xdr_encode_array2(struct xdr_buf *buf, unsigned int base, |
183 | struct xdr_array2_desc *desc); | 185 | struct xdr_array2_desc *desc); |
184 | 186 | ||
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 6f9457a75b8f..b51470302399 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/socket.h> | 13 | #include <linux/socket.h> |
14 | #include <linux/in.h> | 14 | #include <linux/in.h> |
15 | #include <linux/kref.h> | 15 | #include <linux/kref.h> |
16 | #include <linux/ktime.h> | ||
16 | #include <linux/sunrpc/sched.h> | 17 | #include <linux/sunrpc/sched.h> |
17 | #include <linux/sunrpc/xdr.h> | 18 | #include <linux/sunrpc/xdr.h> |
18 | #include <linux/sunrpc/msg_prot.h> | 19 | #include <linux/sunrpc/msg_prot.h> |
@@ -65,8 +66,6 @@ struct rpc_rqst { | |||
65 | struct rpc_task * rq_task; /* RPC task data */ | 66 | struct rpc_task * rq_task; /* RPC task data */ |
66 | __be32 rq_xid; /* request XID */ | 67 | __be32 rq_xid; /* request XID */ |
67 | int rq_cong; /* has incremented xprt->cong */ | 68 | int rq_cong; /* has incremented xprt->cong */ |
68 | int rq_reply_bytes_recvd; /* number of reply */ | ||
69 | /* bytes received */ | ||
70 | u32 rq_seqno; /* gss seq no. used on req. */ | 69 | u32 rq_seqno; /* gss seq no. used on req. */ |
71 | int rq_enc_pages_num; | 70 | int rq_enc_pages_num; |
72 | struct page **rq_enc_pages; /* scratch pages for use by | 71 | struct page **rq_enc_pages; /* scratch pages for use by |
@@ -77,12 +76,16 @@ struct rpc_rqst { | |||
77 | __u32 * rq_buffer; /* XDR encode buffer */ | 76 | __u32 * rq_buffer; /* XDR encode buffer */ |
78 | size_t rq_callsize, | 77 | size_t rq_callsize, |
79 | rq_rcvsize; | 78 | rq_rcvsize; |
79 | size_t rq_xmit_bytes_sent; /* total bytes sent */ | ||
80 | size_t rq_reply_bytes_recvd; /* total reply bytes */ | ||
81 | /* received */ | ||
80 | 82 | ||
81 | struct xdr_buf rq_private_buf; /* The receive buffer | 83 | struct xdr_buf rq_private_buf; /* The receive buffer |
82 | * used in the softirq. | 84 | * used in the softirq. |
83 | */ | 85 | */ |
84 | unsigned long rq_majortimeo; /* major timeout alarm */ | 86 | unsigned long rq_majortimeo; /* major timeout alarm */ |
85 | unsigned long rq_timeout; /* Current timeout value */ | 87 | unsigned long rq_timeout; /* Current timeout value */ |
88 | ktime_t rq_rtt; /* round-trip time */ | ||
86 | unsigned int rq_retries; /* # of retries */ | 89 | unsigned int rq_retries; /* # of retries */ |
87 | unsigned int rq_connect_cookie; | 90 | unsigned int rq_connect_cookie; |
88 | /* A cookie used to track the | 91 | /* A cookie used to track the |
@@ -94,7 +97,7 @@ struct rpc_rqst { | |||
94 | */ | 97 | */ |
95 | u32 rq_bytes_sent; /* Bytes we have sent */ | 98 | u32 rq_bytes_sent; /* Bytes we have sent */ |
96 | 99 | ||
97 | unsigned long rq_xtime; /* when transmitted */ | 100 | ktime_t rq_xtime; /* transmit time stamp */ |
98 | int rq_ntrans; | 101 | int rq_ntrans; |
99 | 102 | ||
100 | #if defined(CONFIG_NFS_V4_1) | 103 | #if defined(CONFIG_NFS_V4_1) |
@@ -174,8 +177,7 @@ struct rpc_xprt { | |||
174 | /* | 177 | /* |
175 | * Connection of transports | 178 | * Connection of transports |
176 | */ | 179 | */ |
177 | unsigned long connect_timeout, | 180 | unsigned long bind_timeout, |
178 | bind_timeout, | ||
179 | reestablish_timeout; | 181 | reestablish_timeout; |
180 | unsigned int connect_cookie; /* A cookie that gets bumped | 182 | unsigned int connect_cookie; /* A cookie that gets bumped |
181 | every time the transport | 183 | every time the transport |
@@ -294,7 +296,6 @@ void xprt_set_retrans_timeout_rtt(struct rpc_task *task); | |||
294 | void xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status); | 296 | void xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status); |
295 | void xprt_wait_for_buffer_space(struct rpc_task *task, rpc_action action); | 297 | void xprt_wait_for_buffer_space(struct rpc_task *task, rpc_action action); |
296 | void xprt_write_space(struct rpc_xprt *xprt); | 298 | void xprt_write_space(struct rpc_xprt *xprt); |
297 | void xprt_update_rtt(struct rpc_task *task); | ||
298 | void xprt_adjust_cwnd(struct rpc_task *task, int result); | 299 | void xprt_adjust_cwnd(struct rpc_task *task, int result); |
299 | struct rpc_rqst * xprt_lookup_rqst(struct rpc_xprt *xprt, __be32 xid); | 300 | struct rpc_rqst * xprt_lookup_rqst(struct rpc_xprt *xprt, __be32 xid); |
300 | void xprt_complete_rqst(struct rpc_task *task, int copied); | 301 | void xprt_complete_rqst(struct rpc_task *task, int copied); |
diff --git a/include/linux/sysrq.h b/include/linux/sysrq.h index 99adcdc0d3ca..4496322e28dd 100644 --- a/include/linux/sysrq.h +++ b/include/linux/sysrq.h | |||
@@ -39,41 +39,34 @@ struct sysrq_key_op { | |||
39 | 39 | ||
40 | #ifdef CONFIG_MAGIC_SYSRQ | 40 | #ifdef CONFIG_MAGIC_SYSRQ |
41 | 41 | ||
42 | extern int sysrq_on(void); | ||
43 | |||
44 | /* | ||
45 | * Do not use this one directly: | ||
46 | */ | ||
47 | extern int __sysrq_enabled; | ||
48 | |||
49 | /* Generic SysRq interface -- you may call it from any device driver, supplying | 42 | /* Generic SysRq interface -- you may call it from any device driver, supplying |
50 | * ASCII code of the key, pointer to registers and kbd/tty structs (if they | 43 | * ASCII code of the key, pointer to registers and kbd/tty structs (if they |
51 | * are available -- else NULL's). | 44 | * are available -- else NULL's). |
52 | */ | 45 | */ |
53 | 46 | ||
54 | void handle_sysrq(int key, struct tty_struct *tty); | 47 | void handle_sysrq(int key, struct tty_struct *tty); |
55 | void __handle_sysrq(int key, struct tty_struct *tty, int check_mask); | ||
56 | int register_sysrq_key(int key, struct sysrq_key_op *op); | 48 | int register_sysrq_key(int key, struct sysrq_key_op *op); |
57 | int unregister_sysrq_key(int key, struct sysrq_key_op *op); | 49 | int unregister_sysrq_key(int key, struct sysrq_key_op *op); |
58 | struct sysrq_key_op *__sysrq_get_key_op(int key); | 50 | struct sysrq_key_op *__sysrq_get_key_op(int key); |
59 | 51 | ||
52 | int sysrq_toggle_support(int enable_mask); | ||
53 | |||
60 | #else | 54 | #else |
61 | 55 | ||
62 | static inline int sysrq_on(void) | 56 | static inline void handle_sysrq(int key, struct tty_struct *tty) |
63 | { | 57 | { |
64 | return 0; | ||
65 | } | 58 | } |
66 | static inline int __reterr(void) | 59 | |
60 | static inline int register_sysrq_key(int key, struct sysrq_key_op *op) | ||
67 | { | 61 | { |
68 | return -EINVAL; | 62 | return -EINVAL; |
69 | } | 63 | } |
70 | static inline void handle_sysrq(int key, struct tty_struct *tty) | 64 | |
65 | static inline int unregister_sysrq_key(int key, struct sysrq_key_op *op) | ||
71 | { | 66 | { |
67 | return -EINVAL; | ||
72 | } | 68 | } |
73 | 69 | ||
74 | #define register_sysrq_key(ig,nore) __reterr() | ||
75 | #define unregister_sysrq_key(ig,nore) __reterr() | ||
76 | |||
77 | #endif | 70 | #endif |
78 | 71 | ||
79 | #endif /* _LINUX_SYSRQ_H */ | 72 | #endif /* _LINUX_SYSRQ_H */ |
diff --git a/include/linux/tca6416_keypad.h b/include/linux/tca6416_keypad.h new file mode 100644 index 000000000000..7bd266f3525c --- /dev/null +++ b/include/linux/tca6416_keypad.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * tca6416 keypad platform support | ||
3 | * | ||
4 | * Copyright (C) 2010 Texas Instruments | ||
5 | * | ||
6 | * Author: Sriramakrishnan <srk@ti.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef _TCA6416_KEYS_H | ||
14 | #define _TCA6416_KEYS_H | ||
15 | |||
16 | #include <linux/types.h> | ||
17 | |||
18 | struct tca6416_button { | ||
19 | /* Configuration parameters */ | ||
20 | int code; /* input event code (KEY_*, SW_*) */ | ||
21 | int active_low; | ||
22 | int type; /* input event type (EV_KEY, EV_SW) */ | ||
23 | }; | ||
24 | |||
25 | struct tca6416_keys_platform_data { | ||
26 | struct tca6416_button *buttons; | ||
27 | int nbuttons; | ||
28 | unsigned int rep:1; /* enable input subsystem auto repeat */ | ||
29 | uint16_t pinmask; | ||
30 | uint16_t invert; | ||
31 | int irq_is_gpio; | ||
32 | int use_polling; /* use polling if Interrupt is not connected*/ | ||
33 | }; | ||
34 | #endif | ||
diff --git a/include/linux/time.h b/include/linux/time.h index 6e026e45a179..ea3559f0b3f2 100644 --- a/include/linux/time.h +++ b/include/linux/time.h | |||
@@ -150,7 +150,6 @@ extern struct timespec timespec_trunc(struct timespec t, unsigned gran); | |||
150 | extern int timekeeping_valid_for_hres(void); | 150 | extern int timekeeping_valid_for_hres(void); |
151 | extern u64 timekeeping_max_deferment(void); | 151 | extern u64 timekeeping_max_deferment(void); |
152 | extern void update_wall_time(void); | 152 | extern void update_wall_time(void); |
153 | extern void update_xtime_cache(u64 nsec); | ||
154 | extern void timekeeping_leap_insert(int leapsecond); | 153 | extern void timekeeping_leap_insert(int leapsecond); |
155 | 154 | ||
156 | struct tms; | 155 | struct tms; |
diff --git a/include/linux/timer.h b/include/linux/timer.h index a2d1eb6cb3f0..ea965b857a50 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h | |||
@@ -10,13 +10,19 @@ | |||
10 | struct tvec_base; | 10 | struct tvec_base; |
11 | 11 | ||
12 | struct timer_list { | 12 | struct timer_list { |
13 | /* | ||
14 | * All fields that change during normal runtime grouped to the | ||
15 | * same cacheline | ||
16 | */ | ||
13 | struct list_head entry; | 17 | struct list_head entry; |
14 | unsigned long expires; | 18 | unsigned long expires; |
19 | struct tvec_base *base; | ||
15 | 20 | ||
16 | void (*function)(unsigned long); | 21 | void (*function)(unsigned long); |
17 | unsigned long data; | 22 | unsigned long data; |
18 | 23 | ||
19 | struct tvec_base *base; | 24 | int slack; |
25 | |||
20 | #ifdef CONFIG_TIMER_STATS | 26 | #ifdef CONFIG_TIMER_STATS |
21 | void *start_site; | 27 | void *start_site; |
22 | char start_comm[16]; | 28 | char start_comm[16]; |
@@ -165,6 +171,8 @@ extern int mod_timer(struct timer_list *timer, unsigned long expires); | |||
165 | extern int mod_timer_pending(struct timer_list *timer, unsigned long expires); | 171 | 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); | 172 | extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires); |
167 | 173 | ||
174 | extern void set_timer_slack(struct timer_list *time, int slack_hz); | ||
175 | |||
168 | #define TIMER_NOT_PINNED 0 | 176 | #define TIMER_NOT_PINNED 0 |
169 | #define TIMER_PINNED 1 | 177 | #define TIMER_PINNED 1 |
170 | /* | 178 | /* |
diff --git a/include/linux/timex.h b/include/linux/timex.h index 7a082b32d8e1..32d852f8cbe4 100644 --- a/include/linux/timex.h +++ b/include/linux/timex.h | |||
@@ -232,13 +232,11 @@ struct timex { | |||
232 | */ | 232 | */ |
233 | extern unsigned long tick_usec; /* USER_HZ period (usec) */ | 233 | extern unsigned long tick_usec; /* USER_HZ period (usec) */ |
234 | extern unsigned long tick_nsec; /* ACTHZ period (nsec) */ | 234 | extern unsigned long tick_nsec; /* ACTHZ period (nsec) */ |
235 | extern int tickadj; /* amount of adjustment per tick */ | ||
236 | 235 | ||
237 | /* | 236 | /* |
238 | * phase-lock loop variables | 237 | * phase-lock loop variables |
239 | */ | 238 | */ |
240 | extern int time_status; /* clock synchronization status bits */ | 239 | extern int time_status; /* clock synchronization status bits */ |
241 | extern long time_adjust; /* The amount of adjtime left */ | ||
242 | 240 | ||
243 | extern void ntp_init(void); | 241 | extern void ntp_init(void); |
244 | extern void ntp_clear(void); | 242 | extern void ntp_clear(void); |
@@ -271,9 +269,6 @@ extern void second_overflow(void); | |||
271 | extern void update_ntp_one_tick(void); | 269 | extern void update_ntp_one_tick(void); |
272 | extern int do_adjtimex(struct timex *); | 270 | extern int do_adjtimex(struct timex *); |
273 | 271 | ||
274 | /* Don't use! Compatibility define for existing users. */ | ||
275 | #define tickadj (500/HZ ? : 1) | ||
276 | |||
277 | int read_current_timer(unsigned long *timer_val); | 272 | int read_current_timer(unsigned long *timer_val); |
278 | 273 | ||
279 | /* The clock frequency of the i8253/i8254 PIT */ | 274 | /* The clock frequency of the i8253/i8254 PIT */ |
diff --git a/include/linux/usb/audio-v2.h b/include/linux/usb/audio-v2.h new file mode 100644 index 000000000000..2389f93a28b5 --- /dev/null +++ b/include/linux/usb/audio-v2.h | |||
@@ -0,0 +1,378 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2010 Daniel Mack <daniel@caiaq.de> | ||
3 | * | ||
4 | * This software is distributed under the terms of the GNU General Public | ||
5 | * License ("GPL") version 2, as published by the Free Software Foundation. | ||
6 | * | ||
7 | * This file holds USB constants and structures defined | ||
8 | * by the USB Device Class Definition for Audio Devices in version 2.0. | ||
9 | * Comments below reference relevant sections of the documents contained | ||
10 | * in http://www.usb.org/developers/devclass_docs/Audio2.0_final.zip | ||
11 | */ | ||
12 | |||
13 | #ifndef __LINUX_USB_AUDIO_V2_H | ||
14 | #define __LINUX_USB_AUDIO_V2_H | ||
15 | |||
16 | #include <linux/types.h> | ||
17 | |||
18 | /* v1.0 and v2.0 of this standard have many things in common. For the rest | ||
19 | * of the definitions, please refer to audio.h */ | ||
20 | |||
21 | /* 4.7.2.1 Clock Source Descriptor */ | ||
22 | |||
23 | struct uac_clock_source_descriptor { | ||
24 | __u8 bLength; | ||
25 | __u8 bDescriptorType; | ||
26 | __u8 bDescriptorSubtype; | ||
27 | __u8 bClockID; | ||
28 | __u8 bmAttributes; | ||
29 | __u8 bmControls; | ||
30 | __u8 bAssocTerminal; | ||
31 | __u8 iClockSource; | ||
32 | } __attribute__((packed)); | ||
33 | |||
34 | /* 4.7.2.2 Clock Source Descriptor */ | ||
35 | |||
36 | struct uac_clock_selector_descriptor { | ||
37 | __u8 bLength; | ||
38 | __u8 bDescriptorType; | ||
39 | __u8 bDescriptorSubtype; | ||
40 | __u8 bClockID; | ||
41 | __u8 bNrInPins; | ||
42 | __u8 bmControls; | ||
43 | __u8 baCSourceID[]; | ||
44 | } __attribute__((packed)); | ||
45 | |||
46 | /* 4.7.2.4 Input terminal descriptor */ | ||
47 | |||
48 | struct uac2_input_terminal_descriptor { | ||
49 | __u8 bLength; | ||
50 | __u8 bDescriptorType; | ||
51 | __u8 bDescriptorSubtype; | ||
52 | __u8 bTerminalID; | ||
53 | __u16 wTerminalType; | ||
54 | __u8 bAssocTerminal; | ||
55 | __u8 bCSourceID; | ||
56 | __u8 bNrChannels; | ||
57 | __u32 bmChannelConfig; | ||
58 | __u8 iChannelNames; | ||
59 | __u16 bmControls; | ||
60 | __u8 iTerminal; | ||
61 | } __attribute__((packed)); | ||
62 | |||
63 | /* 4.7.2.5 Output terminal descriptor */ | ||
64 | |||
65 | struct uac2_output_terminal_descriptor { | ||
66 | __u8 bLength; | ||
67 | __u8 bDescriptorType; | ||
68 | __u8 bDescriptorSubtype; | ||
69 | __u8 bTerminalID; | ||
70 | __u16 wTerminalType; | ||
71 | __u8 bAssocTerminal; | ||
72 | __u8 bSourceID; | ||
73 | __u8 bCSourceID; | ||
74 | __u16 bmControls; | ||
75 | __u8 iTerminal; | ||
76 | } __attribute__((packed)); | ||
77 | |||
78 | |||
79 | |||
80 | /* 4.7.2.8 Feature Unit Descriptor */ | ||
81 | |||
82 | struct uac2_feature_unit_descriptor { | ||
83 | __u8 bLength; | ||
84 | __u8 bDescriptorType; | ||
85 | __u8 bDescriptorSubtype; | ||
86 | __u8 bUnitID; | ||
87 | __u8 bSourceID; | ||
88 | /* bmaControls is actually u32, | ||
89 | * but u8 is needed for the hybrid parser */ | ||
90 | __u8 bmaControls[0]; /* variable length */ | ||
91 | } __attribute__((packed)); | ||
92 | |||
93 | /* 4.9.2 Class-Specific AS Interface Descriptor */ | ||
94 | |||
95 | struct uac_as_header_descriptor_v2 { | ||
96 | __u8 bLength; | ||
97 | __u8 bDescriptorType; | ||
98 | __u8 bDescriptorSubtype; | ||
99 | __u8 bTerminalLink; | ||
100 | __u8 bmControls; | ||
101 | __u8 bFormatType; | ||
102 | __u32 bmFormats; | ||
103 | __u8 bNrChannels; | ||
104 | __u32 bmChannelConfig; | ||
105 | __u8 iChannelNames; | ||
106 | } __attribute__((packed)); | ||
107 | |||
108 | /* 6.1 Interrupt Data Message */ | ||
109 | |||
110 | #define UAC2_INTERRUPT_DATA_MSG_VENDOR (1 << 0) | ||
111 | #define UAC2_INTERRUPT_DATA_MSG_EP (1 << 1) | ||
112 | |||
113 | struct uac2_interrupt_data_msg { | ||
114 | __u8 bInfo; | ||
115 | __u8 bAttribute; | ||
116 | __le16 wValue; | ||
117 | __le16 wIndex; | ||
118 | } __attribute__((packed)); | ||
119 | |||
120 | /* A.7 Audio Function Category Codes */ | ||
121 | #define UAC2_FUNCTION_SUBCLASS_UNDEFINED 0x00 | ||
122 | #define UAC2_FUNCTION_DESKTOP_SPEAKER 0x01 | ||
123 | #define UAC2_FUNCTION_HOME_THEATER 0x02 | ||
124 | #define UAC2_FUNCTION_MICROPHONE 0x03 | ||
125 | #define UAC2_FUNCTION_HEADSET 0x04 | ||
126 | #define UAC2_FUNCTION_TELEPHONE 0x05 | ||
127 | #define UAC2_FUNCTION_CONVERTER 0x06 | ||
128 | #define UAC2_FUNCTION_SOUND_RECORDER 0x07 | ||
129 | #define UAC2_FUNCTION_IO_BOX 0x08 | ||
130 | #define UAC2_FUNCTION_MUSICAL_INSTRUMENT 0x09 | ||
131 | #define UAC2_FUNCTION_PRO_AUDIO 0x0a | ||
132 | #define UAC2_FUNCTION_AUDIO_VIDEO 0x0b | ||
133 | #define UAC2_FUNCTION_CONTROL_PANEL 0x0c | ||
134 | #define UAC2_FUNCTION_OTHER 0xff | ||
135 | |||
136 | /* A.9 Audio Class-Specific AC Interface Descriptor Subtypes */ | ||
137 | /* see audio.h for the rest, which is identical to v1 */ | ||
138 | #define UAC2_EFFECT_UNIT 0x07 | ||
139 | #define UAC2_PROCESSING_UNIT_V2 0x08 | ||
140 | #define UAC2_EXTENSION_UNIT_V2 0x09 | ||
141 | #define UAC2_CLOCK_SOURCE 0x0a | ||
142 | #define UAC2_CLOCK_SELECTOR 0x0b | ||
143 | #define UAC2_CLOCK_MULTIPLIER 0x0c | ||
144 | #define UAC2_SAMPLE_RATE_CONVERTER 0x0d | ||
145 | |||
146 | /* A.10 Audio Class-Specific AS Interface Descriptor Subtypes */ | ||
147 | /* see audio.h for the rest, which is identical to v1 */ | ||
148 | #define UAC2_ENCODER 0x03 | ||
149 | #define UAC2_DECODER 0x04 | ||
150 | |||
151 | /* A.11 Effect Unit Effect Types */ | ||
152 | #define UAC2_EFFECT_UNDEFINED 0x00 | ||
153 | #define UAC2_EFFECT_PARAM_EQ 0x01 | ||
154 | #define UAC2_EFFECT_REVERB 0x02 | ||
155 | #define UAC2_EFFECT_MOD_DELAY 0x03 | ||
156 | #define UAC2_EFFECT_DYN_RANGE_COMP 0x04 | ||
157 | |||
158 | /* A.12 Processing Unit Process Types */ | ||
159 | #define UAC2_PROCESS_UNDEFINED 0x00 | ||
160 | #define UAC2_PROCESS_UP_DOWNMIX 0x01 | ||
161 | #define UAC2_PROCESS_DOLBY_PROLOCIC 0x02 | ||
162 | #define UAC2_PROCESS_STEREO_EXTENDER 0x03 | ||
163 | |||
164 | /* A.14 Audio Class-Specific Request Codes */ | ||
165 | #define UAC2_CS_CUR 0x01 | ||
166 | #define UAC2_CS_RANGE 0x02 | ||
167 | #define UAC2_CS_MEM 0x03 | ||
168 | |||
169 | /* A.15 Encoder Type Codes */ | ||
170 | #define UAC2_ENCODER_UNDEFINED 0x00 | ||
171 | #define UAC2_ENCODER_OTHER 0x01 | ||
172 | #define UAC2_ENCODER_MPEG 0x02 | ||
173 | #define UAC2_ENCODER_AC3 0x03 | ||
174 | #define UAC2_ENCODER_WMA 0x04 | ||
175 | #define UAC2_ENCODER_DTS 0x05 | ||
176 | |||
177 | /* A.16 Decoder Type Codes */ | ||
178 | #define UAC2_DECODER_UNDEFINED 0x00 | ||
179 | #define UAC2_DECODER_OTHER 0x01 | ||
180 | #define UAC2_DECODER_MPEG 0x02 | ||
181 | #define UAC2_DECODER_AC3 0x03 | ||
182 | #define UAC2_DECODER_WMA 0x04 | ||
183 | #define UAC2_DECODER_DTS 0x05 | ||
184 | |||
185 | /* A.17.1 Clock Source Control Selectors */ | ||
186 | #define UAC2_CS_UNDEFINED 0x00 | ||
187 | #define UAC2_CS_CONTROL_SAM_FREQ 0x01 | ||
188 | #define UAC2_CS_CONTROL_CLOCK_VALID 0x02 | ||
189 | |||
190 | /* A.17.2 Clock Selector Control Selectors */ | ||
191 | #define UAC2_CX_UNDEFINED 0x00 | ||
192 | #define UAC2_CX_CLOCK_SELECTOR 0x01 | ||
193 | |||
194 | /* A.17.3 Clock Multiplier Control Selectors */ | ||
195 | #define UAC2_CM_UNDEFINED 0x00 | ||
196 | #define UAC2_CM_NUMERATOR 0x01 | ||
197 | #define UAC2_CM_DENOMINTATOR 0x02 | ||
198 | |||
199 | /* A.17.4 Terminal Control Selectors */ | ||
200 | #define UAC2_TE_UNDEFINED 0x00 | ||
201 | #define UAC2_TE_COPY_PROTECT 0x01 | ||
202 | #define UAC2_TE_CONNECTOR 0x02 | ||
203 | #define UAC2_TE_OVERLOAD 0x03 | ||
204 | #define UAC2_TE_CLUSTER 0x04 | ||
205 | #define UAC2_TE_UNDERFLOW 0x05 | ||
206 | #define UAC2_TE_OVERFLOW 0x06 | ||
207 | #define UAC2_TE_LATENCY 0x07 | ||
208 | |||
209 | /* A.17.5 Mixer Control Selectors */ | ||
210 | #define UAC2_MU_UNDEFINED 0x00 | ||
211 | #define UAC2_MU_MIXER 0x01 | ||
212 | #define UAC2_MU_CLUSTER 0x02 | ||
213 | #define UAC2_MU_UNDERFLOW 0x03 | ||
214 | #define UAC2_MU_OVERFLOW 0x04 | ||
215 | #define UAC2_MU_LATENCY 0x05 | ||
216 | |||
217 | /* A.17.6 Selector Control Selectors */ | ||
218 | #define UAC2_SU_UNDEFINED 0x00 | ||
219 | #define UAC2_SU_SELECTOR 0x01 | ||
220 | #define UAC2_SU_LATENCY 0x02 | ||
221 | |||
222 | /* A.17.7 Feature Unit Control Selectors */ | ||
223 | /* see audio.h for the rest, which is identical to v1 */ | ||
224 | #define UAC2_FU_INPUT_GAIN 0x0b | ||
225 | #define UAC2_FU_INPUT_GAIN_PAD 0x0c | ||
226 | #define UAC2_FU_PHASE_INVERTER 0x0d | ||
227 | #define UAC2_FU_UNDERFLOW 0x0e | ||
228 | #define UAC2_FU_OVERFLOW 0x0f | ||
229 | #define UAC2_FU_LATENCY 0x10 | ||
230 | |||
231 | /* A.17.8.1 Parametric Equalizer Section Effect Unit Control Selectors */ | ||
232 | #define UAC2_PE_UNDEFINED 0x00 | ||
233 | #define UAC2_PE_ENABLE 0x01 | ||
234 | #define UAC2_PE_CENTERFREQ 0x02 | ||
235 | #define UAC2_PE_QFACTOR 0x03 | ||
236 | #define UAC2_PE_GAIN 0x04 | ||
237 | #define UAC2_PE_UNDERFLOW 0x05 | ||
238 | #define UAC2_PE_OVERFLOW 0x06 | ||
239 | #define UAC2_PE_LATENCY 0x07 | ||
240 | |||
241 | /* A.17.8.2 Reverberation Effect Unit Control Selectors */ | ||
242 | #define UAC2_RV_UNDEFINED 0x00 | ||
243 | #define UAC2_RV_ENABLE 0x01 | ||
244 | #define UAC2_RV_TYPE 0x02 | ||
245 | #define UAC2_RV_LEVEL 0x03 | ||
246 | #define UAC2_RV_TIME 0x04 | ||
247 | #define UAC2_RV_FEEDBACK 0x05 | ||
248 | #define UAC2_RV_PREDELAY 0x06 | ||
249 | #define UAC2_RV_DENSITY 0x07 | ||
250 | #define UAC2_RV_HIFREQ_ROLLOFF 0x08 | ||
251 | #define UAC2_RV_UNDERFLOW 0x09 | ||
252 | #define UAC2_RV_OVERFLOW 0x0a | ||
253 | #define UAC2_RV_LATENCY 0x0b | ||
254 | |||
255 | /* A.17.8.3 Modulation Delay Effect Control Selectors */ | ||
256 | #define UAC2_MD_UNDEFINED 0x00 | ||
257 | #define UAC2_MD_ENABLE 0x01 | ||
258 | #define UAC2_MD_BALANCE 0x02 | ||
259 | #define UAC2_MD_RATE 0x03 | ||
260 | #define UAC2_MD_DEPTH 0x04 | ||
261 | #define UAC2_MD_TIME 0x05 | ||
262 | #define UAC2_MD_FEEDBACK 0x06 | ||
263 | #define UAC2_MD_UNDERFLOW 0x07 | ||
264 | #define UAC2_MD_OVERFLOW 0x08 | ||
265 | #define UAC2_MD_LATENCY 0x09 | ||
266 | |||
267 | /* A.17.8.4 Dynamic Range Compressor Effect Unit Control Selectors */ | ||
268 | #define UAC2_DR_UNDEFINED 0x00 | ||
269 | #define UAC2_DR_ENABLE 0x01 | ||
270 | #define UAC2_DR_COMPRESSION_RATE 0x02 | ||
271 | #define UAC2_DR_MAXAMPL 0x03 | ||
272 | #define UAC2_DR_THRESHOLD 0x04 | ||
273 | #define UAC2_DR_ATTACK_TIME 0x05 | ||
274 | #define UAC2_DR_RELEASE_TIME 0x06 | ||
275 | #define UAC2_DR_UNDEFLOW 0x07 | ||
276 | #define UAC2_DR_OVERFLOW 0x08 | ||
277 | #define UAC2_DR_LATENCY 0x09 | ||
278 | |||
279 | /* A.17.9.1 Up/Down-mix Processing Unit Control Selectors */ | ||
280 | #define UAC2_UD_UNDEFINED 0x00 | ||
281 | #define UAC2_UD_ENABLE 0x01 | ||
282 | #define UAC2_UD_MODE_SELECT 0x02 | ||
283 | #define UAC2_UD_CLUSTER 0x03 | ||
284 | #define UAC2_UD_UNDERFLOW 0x04 | ||
285 | #define UAC2_UD_OVERFLOW 0x05 | ||
286 | #define UAC2_UD_LATENCY 0x06 | ||
287 | |||
288 | /* A.17.9.2 Dolby Prologic[tm] Processing Unit Control Selectors */ | ||
289 | #define UAC2_DP_UNDEFINED 0x00 | ||
290 | #define UAC2_DP_ENABLE 0x01 | ||
291 | #define UAC2_DP_MODE_SELECT 0x02 | ||
292 | #define UAC2_DP_CLUSTER 0x03 | ||
293 | #define UAC2_DP_UNDERFFLOW 0x04 | ||
294 | #define UAC2_DP_OVERFLOW 0x05 | ||
295 | #define UAC2_DP_LATENCY 0x06 | ||
296 | |||
297 | /* A.17.9.3 Stereo Expander Processing Unit Control Selectors */ | ||
298 | #define UAC2_ST_EXT_UNDEFINED 0x00 | ||
299 | #define UAC2_ST_EXT_ENABLE 0x01 | ||
300 | #define UAC2_ST_EXT_WIDTH 0x02 | ||
301 | #define UAC2_ST_EXT_UNDEFLOW 0x03 | ||
302 | #define UAC2_ST_EXT_OVERFLOW 0x04 | ||
303 | #define UAC2_ST_EXT_LATENCY 0x05 | ||
304 | |||
305 | /* A.17.10 Extension Unit Control Selectors */ | ||
306 | #define UAC2_XU_UNDEFINED 0x00 | ||
307 | #define UAC2_XU_ENABLE 0x01 | ||
308 | #define UAC2_XU_CLUSTER 0x02 | ||
309 | #define UAC2_XU_UNDERFLOW 0x03 | ||
310 | #define UAC2_XU_OVERFLOW 0x04 | ||
311 | #define UAC2_XU_LATENCY 0x05 | ||
312 | |||
313 | /* A.17.11 AudioStreaming Interface Control Selectors */ | ||
314 | #define UAC2_AS_UNDEFINED 0x00 | ||
315 | #define UAC2_AS_ACT_ALT_SETTING 0x01 | ||
316 | #define UAC2_AS_VAL_ALT_SETTINGS 0x02 | ||
317 | #define UAC2_AS_AUDIO_DATA_FORMAT 0x03 | ||
318 | |||
319 | /* A.17.12 Encoder Control Selectors */ | ||
320 | #define UAC2_EN_UNDEFINED 0x00 | ||
321 | #define UAC2_EN_BIT_RATE 0x01 | ||
322 | #define UAC2_EN_QUALITY 0x02 | ||
323 | #define UAC2_EN_VBR 0x03 | ||
324 | #define UAC2_EN_TYPE 0x04 | ||
325 | #define UAC2_EN_UNDERFLOW 0x05 | ||
326 | #define UAC2_EN_OVERFLOW 0x06 | ||
327 | #define UAC2_EN_ENCODER_ERROR 0x07 | ||
328 | #define UAC2_EN_PARAM1 0x08 | ||
329 | #define UAC2_EN_PARAM2 0x09 | ||
330 | #define UAC2_EN_PARAM3 0x0a | ||
331 | #define UAC2_EN_PARAM4 0x0b | ||
332 | #define UAC2_EN_PARAM5 0x0c | ||
333 | #define UAC2_EN_PARAM6 0x0d | ||
334 | #define UAC2_EN_PARAM7 0x0e | ||
335 | #define UAC2_EN_PARAM8 0x0f | ||
336 | |||
337 | /* A.17.13.1 MPEG Decoder Control Selectors */ | ||
338 | #define UAC2_MPEG_UNDEFINED 0x00 | ||
339 | #define UAC2_MPEG_DUAL_CHANNEL 0x01 | ||
340 | #define UAC2_MPEG_SECOND_STEREO 0x02 | ||
341 | #define UAC2_MPEG_MULTILINGUAL 0x03 | ||
342 | #define UAC2_MPEG_DYN_RANGE 0x04 | ||
343 | #define UAC2_MPEG_SCALING 0x05 | ||
344 | #define UAC2_MPEG_HILO_SCALING 0x06 | ||
345 | #define UAC2_MPEG_UNDERFLOW 0x07 | ||
346 | #define UAC2_MPEG_OVERFLOW 0x08 | ||
347 | #define UAC2_MPEG_DECODER_ERROR 0x09 | ||
348 | |||
349 | /* A17.13.2 AC3 Decoder Control Selectors */ | ||
350 | #define UAC2_AC3_UNDEFINED 0x00 | ||
351 | #define UAC2_AC3_MODE 0x01 | ||
352 | #define UAC2_AC3_DYN_RANGE 0x02 | ||
353 | #define UAC2_AC3_SCALING 0x03 | ||
354 | #define UAC2_AC3_HILO_SCALING 0x04 | ||
355 | #define UAC2_AC3_UNDERFLOW 0x05 | ||
356 | #define UAC2_AC3_OVERFLOW 0x06 | ||
357 | #define UAC2_AC3_DECODER_ERROR 0x07 | ||
358 | |||
359 | /* A17.13.3 WMA Decoder Control Selectors */ | ||
360 | #define UAC2_WMA_UNDEFINED 0x00 | ||
361 | #define UAC2_WMA_UNDERFLOW 0x01 | ||
362 | #define UAC2_WMA_OVERFLOW 0x02 | ||
363 | #define UAC2_WMA_DECODER_ERROR 0x03 | ||
364 | |||
365 | /* A17.13.4 DTS Decoder Control Selectors */ | ||
366 | #define UAC2_DTS_UNDEFINED 0x00 | ||
367 | #define UAC2_DTS_UNDERFLOW 0x01 | ||
368 | #define UAC2_DTS_OVERFLOW 0x02 | ||
369 | #define UAC2_DTS_DECODER_ERROR 0x03 | ||
370 | |||
371 | /* A17.14 Endpoint Control Selectors */ | ||
372 | #define UAC2_EP_CS_UNDEFINED 0x00 | ||
373 | #define UAC2_EP_CS_PITCH 0x01 | ||
374 | #define UAC2_EP_CS_DATA_OVERRUN 0x02 | ||
375 | #define UAC2_EP_CS_DATA_UNDERRUN 0x03 | ||
376 | |||
377 | #endif /* __LINUX_USB_AUDIO_V2_H */ | ||
378 | |||
diff --git a/include/linux/usb/audio.h b/include/linux/usb/audio.h index 4d3e450e2b03..c0ef18dc2da7 100644 --- a/include/linux/usb/audio.h +++ b/include/linux/usb/audio.h | |||
@@ -13,6 +13,9 @@ | |||
13 | * Comments below reference relevant sections of that document: | 13 | * Comments below reference relevant sections of that document: |
14 | * | 14 | * |
15 | * http://www.usb.org/developers/devclass_docs/audio10.pdf | 15 | * http://www.usb.org/developers/devclass_docs/audio10.pdf |
16 | * | ||
17 | * Types and defines in this file are either specific to version 1.0 of | ||
18 | * this standard or common for newer versions. | ||
16 | */ | 19 | */ |
17 | 20 | ||
18 | #ifndef __LINUX_USB_AUDIO_H | 21 | #ifndef __LINUX_USB_AUDIO_H |
@@ -20,14 +23,15 @@ | |||
20 | 23 | ||
21 | #include <linux/types.h> | 24 | #include <linux/types.h> |
22 | 25 | ||
26 | /* bInterfaceProtocol values to denote the version of the standard used */ | ||
27 | #define UAC_VERSION_1 0x00 | ||
28 | #define UAC_VERSION_2 0x20 | ||
29 | |||
23 | /* A.2 Audio Interface Subclass Codes */ | 30 | /* A.2 Audio Interface Subclass Codes */ |
24 | #define USB_SUBCLASS_AUDIOCONTROL 0x01 | 31 | #define USB_SUBCLASS_AUDIOCONTROL 0x01 |
25 | #define USB_SUBCLASS_AUDIOSTREAMING 0x02 | 32 | #define USB_SUBCLASS_AUDIOSTREAMING 0x02 |
26 | #define USB_SUBCLASS_MIDISTREAMING 0x03 | 33 | #define USB_SUBCLASS_MIDISTREAMING 0x03 |
27 | 34 | ||
28 | #define UAC_VERSION_1 0x00 | ||
29 | #define UAC_VERSION_2 0x20 | ||
30 | |||
31 | /* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */ | 35 | /* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */ |
32 | #define UAC_HEADER 0x01 | 36 | #define UAC_HEADER 0x01 |
33 | #define UAC_INPUT_TERMINAL 0x02 | 37 | #define UAC_INPUT_TERMINAL 0x02 |
@@ -38,15 +42,6 @@ | |||
38 | #define UAC_PROCESSING_UNIT_V1 0x07 | 42 | #define UAC_PROCESSING_UNIT_V1 0x07 |
39 | #define UAC_EXTENSION_UNIT_V1 0x08 | 43 | #define UAC_EXTENSION_UNIT_V1 0x08 |
40 | 44 | ||
41 | /* UAC v2.0 types */ | ||
42 | #define UAC_EFFECT_UNIT 0x07 | ||
43 | #define UAC_PROCESSING_UNIT_V2 0x08 | ||
44 | #define UAC_EXTENSION_UNIT_V2 0x09 | ||
45 | #define UAC_CLOCK_SOURCE 0x0a | ||
46 | #define UAC_CLOCK_SELECTOR 0x0b | ||
47 | #define UAC_CLOCK_MULTIPLIER 0x0c | ||
48 | #define UAC_SAMPLE_RATE_CONVERTER 0x0d | ||
49 | |||
50 | /* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */ | 45 | /* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */ |
51 | #define UAC_AS_GENERAL 0x01 | 46 | #define UAC_AS_GENERAL 0x01 |
52 | #define UAC_FORMAT_TYPE 0x02 | 47 | #define UAC_FORMAT_TYPE 0x02 |
@@ -78,10 +73,6 @@ | |||
78 | 73 | ||
79 | #define UAC_GET_STAT 0xff | 74 | #define UAC_GET_STAT 0xff |
80 | 75 | ||
81 | /* Audio class v2.0 handles all the parameter calls differently */ | ||
82 | #define UAC2_CS_CUR 0x01 | ||
83 | #define UAC2_CS_RANGE 0x02 | ||
84 | |||
85 | /* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */ | 76 | /* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */ |
86 | #define UAC_MS_HEADER 0x01 | 77 | #define UAC_MS_HEADER 0x01 |
87 | #define UAC_MIDI_IN_JACK 0x02 | 78 | #define UAC_MIDI_IN_JACK 0x02 |
@@ -190,6 +181,156 @@ struct uac_feature_unit_descriptor_##ch { \ | |||
190 | __u8 iFeature; \ | 181 | __u8 iFeature; \ |
191 | } __attribute__ ((packed)) | 182 | } __attribute__ ((packed)) |
192 | 183 | ||
184 | /* 4.3.2.3 Mixer Unit Descriptor */ | ||
185 | struct uac_mixer_unit_descriptor { | ||
186 | __u8 bLength; | ||
187 | __u8 bDescriptorType; | ||
188 | __u8 bDescriptorSubtype; | ||
189 | __u8 bUnitID; | ||
190 | __u8 bNrInPins; | ||
191 | __u8 baSourceID[]; | ||
192 | } __attribute__ ((packed)); | ||
193 | |||
194 | static inline __u8 uac_mixer_unit_bNrChannels(struct uac_mixer_unit_descriptor *desc) | ||
195 | { | ||
196 | return desc->baSourceID[desc->bNrInPins]; | ||
197 | } | ||
198 | |||
199 | static inline __u32 uac_mixer_unit_wChannelConfig(struct uac_mixer_unit_descriptor *desc, | ||
200 | int protocol) | ||
201 | { | ||
202 | if (protocol == UAC_VERSION_1) | ||
203 | return (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
204 | desc->baSourceID[desc->bNrInPins + 1]; | ||
205 | else | ||
206 | return (desc->baSourceID[desc->bNrInPins + 4] << 24) | | ||
207 | (desc->baSourceID[desc->bNrInPins + 3] << 16) | | ||
208 | (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
209 | (desc->baSourceID[desc->bNrInPins + 1]); | ||
210 | } | ||
211 | |||
212 | static inline __u8 uac_mixer_unit_iChannelNames(struct uac_mixer_unit_descriptor *desc, | ||
213 | int protocol) | ||
214 | { | ||
215 | return (protocol == UAC_VERSION_1) ? | ||
216 | desc->baSourceID[desc->bNrInPins + 3] : | ||
217 | desc->baSourceID[desc->bNrInPins + 5]; | ||
218 | } | ||
219 | |||
220 | static inline __u8 *uac_mixer_unit_bmControls(struct uac_mixer_unit_descriptor *desc, | ||
221 | int protocol) | ||
222 | { | ||
223 | return (protocol == UAC_VERSION_1) ? | ||
224 | &desc->baSourceID[desc->bNrInPins + 4] : | ||
225 | &desc->baSourceID[desc->bNrInPins + 6]; | ||
226 | } | ||
227 | |||
228 | static inline __u8 uac_mixer_unit_iMixer(struct uac_mixer_unit_descriptor *desc) | ||
229 | { | ||
230 | __u8 *raw = (__u8 *) desc; | ||
231 | return raw[desc->bLength - 1]; | ||
232 | } | ||
233 | |||
234 | /* 4.3.2.4 Selector Unit Descriptor */ | ||
235 | struct uac_selector_unit_descriptor { | ||
236 | __u8 bLength; | ||
237 | __u8 bDescriptorType; | ||
238 | __u8 bDescriptorSubtype; | ||
239 | __u8 bUintID; | ||
240 | __u8 bNrInPins; | ||
241 | __u8 baSourceID[]; | ||
242 | } __attribute__ ((packed)); | ||
243 | |||
244 | static inline __u8 uac_selector_unit_iSelector(struct uac_selector_unit_descriptor *desc) | ||
245 | { | ||
246 | __u8 *raw = (__u8 *) desc; | ||
247 | return raw[9 + desc->bLength - 1]; | ||
248 | } | ||
249 | |||
250 | /* 4.3.2.5 Feature Unit Descriptor */ | ||
251 | struct uac_feature_unit_descriptor { | ||
252 | __u8 bLength; | ||
253 | __u8 bDescriptorType; | ||
254 | __u8 bDescriptorSubtype; | ||
255 | __u8 bUnitID; | ||
256 | __u8 bSourceID; | ||
257 | __u8 bControlSize; | ||
258 | __u8 bmaControls[0]; /* variable length */ | ||
259 | } __attribute__((packed)); | ||
260 | |||
261 | static inline __u8 uac_feature_unit_iFeature(struct uac_feature_unit_descriptor *desc) | ||
262 | { | ||
263 | __u8 *raw = (__u8 *) desc; | ||
264 | return raw[desc->bLength - 1]; | ||
265 | } | ||
266 | |||
267 | /* 4.3.2.6 Processing Unit Descriptors */ | ||
268 | struct uac_processing_unit_descriptor { | ||
269 | __u8 bLength; | ||
270 | __u8 bDescriptorType; | ||
271 | __u8 bDescriptorSubtype; | ||
272 | __u8 bUnitID; | ||
273 | __u16 wProcessType; | ||
274 | __u8 bNrInPins; | ||
275 | __u8 baSourceID[]; | ||
276 | } __attribute__ ((packed)); | ||
277 | |||
278 | static inline __u8 uac_processing_unit_bNrChannels(struct uac_processing_unit_descriptor *desc) | ||
279 | { | ||
280 | return desc->baSourceID[desc->bNrInPins]; | ||
281 | } | ||
282 | |||
283 | static inline __u32 uac_processing_unit_wChannelConfig(struct uac_processing_unit_descriptor *desc, | ||
284 | int protocol) | ||
285 | { | ||
286 | if (protocol == UAC_VERSION_1) | ||
287 | return (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
288 | desc->baSourceID[desc->bNrInPins + 1]; | ||
289 | else | ||
290 | return (desc->baSourceID[desc->bNrInPins + 4] << 24) | | ||
291 | (desc->baSourceID[desc->bNrInPins + 3] << 16) | | ||
292 | (desc->baSourceID[desc->bNrInPins + 2] << 8) | | ||
293 | (desc->baSourceID[desc->bNrInPins + 1]); | ||
294 | } | ||
295 | |||
296 | static inline __u8 uac_processing_unit_iChannelNames(struct uac_processing_unit_descriptor *desc, | ||
297 | int protocol) | ||
298 | { | ||
299 | return (protocol == UAC_VERSION_1) ? | ||
300 | desc->baSourceID[desc->bNrInPins + 3] : | ||
301 | desc->baSourceID[desc->bNrInPins + 5]; | ||
302 | } | ||
303 | |||
304 | static inline __u8 uac_processing_unit_bControlSize(struct uac_processing_unit_descriptor *desc, | ||
305 | int protocol) | ||
306 | { | ||
307 | return (protocol == UAC_VERSION_1) ? | ||
308 | desc->baSourceID[desc->bNrInPins + 4] : | ||
309 | desc->baSourceID[desc->bNrInPins + 6]; | ||
310 | } | ||
311 | |||
312 | static inline __u8 *uac_processing_unit_bmControls(struct uac_processing_unit_descriptor *desc, | ||
313 | int protocol) | ||
314 | { | ||
315 | return (protocol == UAC_VERSION_1) ? | ||
316 | &desc->baSourceID[desc->bNrInPins + 5] : | ||
317 | &desc->baSourceID[desc->bNrInPins + 7]; | ||
318 | } | ||
319 | |||
320 | static inline __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_descriptor *desc, | ||
321 | int protocol) | ||
322 | { | ||
323 | __u8 control_size = uac_processing_unit_bControlSize(desc, protocol); | ||
324 | return desc->baSourceID[desc->bNrInPins + control_size]; | ||
325 | } | ||
326 | |||
327 | static inline __u8 *uac_processing_unit_specific(struct uac_processing_unit_descriptor *desc, | ||
328 | int protocol) | ||
329 | { | ||
330 | __u8 control_size = uac_processing_unit_bControlSize(desc, protocol); | ||
331 | return &desc->baSourceID[desc->bNrInPins + control_size + 1]; | ||
332 | } | ||
333 | |||
193 | /* 4.5.2 Class-Specific AS Interface Descriptor */ | 334 | /* 4.5.2 Class-Specific AS Interface Descriptor */ |
194 | struct uac_as_header_descriptor_v1 { | 335 | struct uac_as_header_descriptor_v1 { |
195 | __u8 bLength; /* in bytes: 7 */ | 336 | __u8 bLength; /* in bytes: 7 */ |
@@ -200,19 +341,6 @@ struct uac_as_header_descriptor_v1 { | |||
200 | __le16 wFormatTag; /* The Audio Data Format */ | 341 | __le16 wFormatTag; /* The Audio Data Format */ |
201 | } __attribute__ ((packed)); | 342 | } __attribute__ ((packed)); |
202 | 343 | ||
203 | struct uac_as_header_descriptor_v2 { | ||
204 | __u8 bLength; | ||
205 | __u8 bDescriptorType; | ||
206 | __u8 bDescriptorSubtype; | ||
207 | __u8 bTerminalLink; | ||
208 | __u8 bmControls; | ||
209 | __u8 bFormatType; | ||
210 | __u32 bmFormats; | ||
211 | __u8 bNrChannels; | ||
212 | __u32 bmChannelConfig; | ||
213 | __u8 iChannelNames; | ||
214 | } __attribute__((packed)); | ||
215 | |||
216 | #define UAC_DT_AS_HEADER_SIZE 7 | 344 | #define UAC_DT_AS_HEADER_SIZE 7 |
217 | 345 | ||
218 | /* Formats - A.1.1 Audio Data Format Type I Codes */ | 346 | /* Formats - A.1.1 Audio Data Format Type I Codes */ |
@@ -277,7 +405,6 @@ struct uac_format_type_i_ext_descriptor { | |||
277 | __u8 bSideBandProtocol; | 405 | __u8 bSideBandProtocol; |
278 | } __attribute__((packed)); | 406 | } __attribute__((packed)); |
279 | 407 | ||
280 | |||
281 | /* Formats - Audio Data Format Type I Codes */ | 408 | /* Formats - Audio Data Format Type I Codes */ |
282 | 409 | ||
283 | #define UAC_FORMAT_TYPE_II_MPEG 0x1001 | 410 | #define UAC_FORMAT_TYPE_II_MPEG 0x1001 |
@@ -329,38 +456,15 @@ struct uac_iso_endpoint_descriptor { | |||
329 | __u8 bmAttributes; | 456 | __u8 bmAttributes; |
330 | __u8 bLockDelayUnits; | 457 | __u8 bLockDelayUnits; |
331 | __le16 wLockDelay; | 458 | __le16 wLockDelay; |
332 | }; | 459 | } __attribute__((packed)); |
333 | #define UAC_ISO_ENDPOINT_DESC_SIZE 7 | 460 | #define UAC_ISO_ENDPOINT_DESC_SIZE 7 |
334 | 461 | ||
335 | #define UAC_EP_CS_ATTR_SAMPLE_RATE 0x01 | 462 | #define UAC_EP_CS_ATTR_SAMPLE_RATE 0x01 |
336 | #define UAC_EP_CS_ATTR_PITCH_CONTROL 0x02 | 463 | #define UAC_EP_CS_ATTR_PITCH_CONTROL 0x02 |
337 | #define UAC_EP_CS_ATTR_FILL_MAX 0x80 | 464 | #define UAC_EP_CS_ATTR_FILL_MAX 0x80 |
338 | 465 | ||
339 | /* Audio class v2.0: CLOCK_SOURCE descriptor */ | ||
340 | |||
341 | struct uac_clock_source_descriptor { | ||
342 | __u8 bLength; | ||
343 | __u8 bDescriptorType; | ||
344 | __u8 bDescriptorSubtype; | ||
345 | __u8 bClockID; | ||
346 | __u8 bmAttributes; | ||
347 | __u8 bmControls; | ||
348 | __u8 bAssocTerminal; | ||
349 | __u8 iClockSource; | ||
350 | } __attribute__((packed)); | ||
351 | |||
352 | /* A.10.2 Feature Unit Control Selectors */ | 466 | /* A.10.2 Feature Unit Control Selectors */ |
353 | 467 | ||
354 | struct uac_feature_unit_descriptor { | ||
355 | __u8 bLength; | ||
356 | __u8 bDescriptorType; | ||
357 | __u8 bDescriptorSubtype; | ||
358 | __u8 bUnitID; | ||
359 | __u8 bSourceID; | ||
360 | __u8 bControlSize; | ||
361 | __u8 controls[0]; /* variable length */ | ||
362 | } __attribute__((packed)); | ||
363 | |||
364 | #define UAC_FU_CONTROL_UNDEFINED 0x00 | 468 | #define UAC_FU_CONTROL_UNDEFINED 0x00 |
365 | #define UAC_MUTE_CONTROL 0x01 | 469 | #define UAC_MUTE_CONTROL 0x01 |
366 | #define UAC_VOLUME_CONTROL 0x02 | 470 | #define UAC_VOLUME_CONTROL 0x02 |
@@ -384,6 +488,21 @@ struct uac_feature_unit_descriptor { | |||
384 | #define UAC_FU_BASS_BOOST (1 << (UAC_BASS_BOOST_CONTROL - 1)) | 488 | #define UAC_FU_BASS_BOOST (1 << (UAC_BASS_BOOST_CONTROL - 1)) |
385 | #define UAC_FU_LOUDNESS (1 << (UAC_LOUDNESS_CONTROL - 1)) | 489 | #define UAC_FU_LOUDNESS (1 << (UAC_LOUDNESS_CONTROL - 1)) |
386 | 490 | ||
491 | /* status word format (3.7.1.1) */ | ||
492 | |||
493 | #define UAC1_STATUS_TYPE_ORIG_MASK 0x0f | ||
494 | #define UAC1_STATUS_TYPE_ORIG_AUDIO_CONTROL_IF 0x0 | ||
495 | #define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_IF 0x1 | ||
496 | #define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_EP 0x2 | ||
497 | |||
498 | #define UAC1_STATUS_TYPE_IRQ_PENDING (1 << 7) | ||
499 | #define UAC1_STATUS_TYPE_MEM_CHANGED (1 << 6) | ||
500 | |||
501 | struct uac1_status_word { | ||
502 | __u8 bStatusType; | ||
503 | __u8 bOriginator; | ||
504 | } __attribute__((packed)); | ||
505 | |||
387 | #ifdef __KERNEL__ | 506 | #ifdef __KERNEL__ |
388 | 507 | ||
389 | struct usb_audio_control { | 508 | struct usb_audio_control { |
diff --git a/include/linux/via-core.h b/include/linux/via-core.h new file mode 100644 index 000000000000..7ffb521e1a7a --- /dev/null +++ b/include/linux/via-core.h | |||
@@ -0,0 +1,219 @@ | |||
1 | /* | ||
2 | * Copyright 1998-2009 VIA Technologies, Inc. All Rights Reserved. | ||
3 | * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved. | ||
4 | * Copyright 2009-2010 Jonathan Corbet <corbet@lwn.net> | ||
5 | * Copyright 2010 Florian Tobias Schandinat <FlorianSchandinat@gmx.de> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public | ||
9 | * License as published by the Free Software Foundation; | ||
10 | * either version 2, or (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even | ||
14 | * the implied warranty of MERCHANTABILITY or FITNESS FOR | ||
15 | * A PARTICULAR PURPOSE.See the GNU General Public License | ||
16 | * for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., | ||
21 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
22 | */ | ||
23 | |||
24 | #ifndef __VIA_CORE_H__ | ||
25 | #define __VIA_CORE_H__ | ||
26 | #include <linux/types.h> | ||
27 | #include <linux/io.h> | ||
28 | #include <linux/spinlock.h> | ||
29 | #include <linux/pci.h> | ||
30 | |||
31 | /* | ||
32 | * A description of each known serial I2C/GPIO port. | ||
33 | */ | ||
34 | enum via_port_type { | ||
35 | VIA_PORT_NONE = 0, | ||
36 | VIA_PORT_I2C, | ||
37 | VIA_PORT_GPIO, | ||
38 | }; | ||
39 | |||
40 | enum via_port_mode { | ||
41 | VIA_MODE_OFF = 0, | ||
42 | VIA_MODE_I2C, /* Used as I2C port */ | ||
43 | VIA_MODE_GPIO, /* Two GPIO ports */ | ||
44 | }; | ||
45 | |||
46 | enum viafb_i2c_adap { | ||
47 | VIA_PORT_26 = 0, | ||
48 | VIA_PORT_31, | ||
49 | VIA_PORT_25, | ||
50 | VIA_PORT_2C, | ||
51 | VIA_PORT_3D, | ||
52 | }; | ||
53 | #define VIAFB_NUM_PORTS 5 | ||
54 | |||
55 | struct via_port_cfg { | ||
56 | enum via_port_type type; | ||
57 | enum via_port_mode mode; | ||
58 | u16 io_port; | ||
59 | u8 ioport_index; | ||
60 | }; | ||
61 | |||
62 | /* | ||
63 | * This is the global viafb "device" containing stuff needed by | ||
64 | * all subdevs. | ||
65 | */ | ||
66 | struct viafb_dev { | ||
67 | struct pci_dev *pdev; | ||
68 | int chip_type; | ||
69 | struct via_port_cfg *port_cfg; | ||
70 | /* | ||
71 | * Spinlock for access to device registers. Not yet | ||
72 | * globally used. | ||
73 | */ | ||
74 | spinlock_t reg_lock; | ||
75 | /* | ||
76 | * The framebuffer MMIO region. Little, if anything, touches | ||
77 | * this memory directly, and certainly nothing outside of the | ||
78 | * framebuffer device itself. We *do* have to be able to allocate | ||
79 | * chunks of this memory for other devices, though. | ||
80 | */ | ||
81 | unsigned long fbmem_start; | ||
82 | long fbmem_len; | ||
83 | void __iomem *fbmem; | ||
84 | #if defined(CONFIG_FB_VIA_CAMERA) || defined(CONFIG_FB_VIA_CAMERA_MODULE) | ||
85 | long camera_fbmem_offset; | ||
86 | long camera_fbmem_size; | ||
87 | #endif | ||
88 | /* | ||
89 | * The MMIO region for device registers. | ||
90 | */ | ||
91 | unsigned long engine_start; | ||
92 | unsigned long engine_len; | ||
93 | void __iomem *engine_mmio; | ||
94 | |||
95 | }; | ||
96 | |||
97 | /* | ||
98 | * Interrupt management. | ||
99 | */ | ||
100 | |||
101 | void viafb_irq_enable(u32 mask); | ||
102 | void viafb_irq_disable(u32 mask); | ||
103 | |||
104 | /* | ||
105 | * The global interrupt control register and its bits. | ||
106 | */ | ||
107 | #define VDE_INTERRUPT 0x200 /* Video interrupt flags/masks */ | ||
108 | #define VDE_I_DVISENSE 0x00000001 /* DVI sense int status */ | ||
109 | #define VDE_I_VBLANK 0x00000002 /* Vertical blank status */ | ||
110 | #define VDE_I_MCCFI 0x00000004 /* MCE compl. frame int status */ | ||
111 | #define VDE_I_VSYNC 0x00000008 /* VGA VSYNC int status */ | ||
112 | #define VDE_I_DMA0DDONE 0x00000010 /* DMA 0 descr done */ | ||
113 | #define VDE_I_DMA0TDONE 0x00000020 /* DMA 0 transfer done */ | ||
114 | #define VDE_I_DMA1DDONE 0x00000040 /* DMA 1 descr done */ | ||
115 | #define VDE_I_DMA1TDONE 0x00000080 /* DMA 1 transfer done */ | ||
116 | #define VDE_I_C1AV 0x00000100 /* Cap Eng 1 act vid end */ | ||
117 | #define VDE_I_HQV0 0x00000200 /* First HQV engine */ | ||
118 | #define VDE_I_HQV1 0x00000400 /* Second HQV engine */ | ||
119 | #define VDE_I_HQV1EN 0x00000800 /* Second HQV engine enable */ | ||
120 | #define VDE_I_C0AV 0x00001000 /* Cap Eng 0 act vid end */ | ||
121 | #define VDE_I_C0VBI 0x00002000 /* Cap Eng 0 VBI end */ | ||
122 | #define VDE_I_C1VBI 0x00004000 /* Cap Eng 1 VBI end */ | ||
123 | #define VDE_I_VSYNC2 0x00008000 /* Sec. Disp. VSYNC */ | ||
124 | #define VDE_I_DVISNSEN 0x00010000 /* DVI sense enable */ | ||
125 | #define VDE_I_VSYNC2EN 0x00020000 /* Sec Disp VSYNC enable */ | ||
126 | #define VDE_I_MCCFIEN 0x00040000 /* MC comp frame int mask enable */ | ||
127 | #define VDE_I_VSYNCEN 0x00080000 /* VSYNC enable */ | ||
128 | #define VDE_I_DMA0DDEN 0x00100000 /* DMA 0 descr done enable */ | ||
129 | #define VDE_I_DMA0TDEN 0x00200000 /* DMA 0 trans done enable */ | ||
130 | #define VDE_I_DMA1DDEN 0x00400000 /* DMA 1 descr done enable */ | ||
131 | #define VDE_I_DMA1TDEN 0x00800000 /* DMA 1 trans done enable */ | ||
132 | #define VDE_I_C1AVEN 0x01000000 /* cap 1 act vid end enable */ | ||
133 | #define VDE_I_HQV0EN 0x02000000 /* First hqv engine enable */ | ||
134 | #define VDE_I_C1VBIEN 0x04000000 /* Cap 1 VBI end enable */ | ||
135 | #define VDE_I_LVDSSI 0x08000000 /* LVDS sense interrupt */ | ||
136 | #define VDE_I_C0AVEN 0x10000000 /* Cap 0 act vid end enable */ | ||
137 | #define VDE_I_C0VBIEN 0x20000000 /* Cap 0 VBI end enable */ | ||
138 | #define VDE_I_LVDSSIEN 0x40000000 /* LVDS Sense enable */ | ||
139 | #define VDE_I_ENABLE 0x80000000 /* Global interrupt enable */ | ||
140 | |||
141 | /* | ||
142 | * DMA management. | ||
143 | */ | ||
144 | int viafb_request_dma(void); | ||
145 | void viafb_release_dma(void); | ||
146 | /* void viafb_dma_copy_out(unsigned int offset, dma_addr_t paddr, int len); */ | ||
147 | int viafb_dma_copy_out_sg(unsigned int offset, struct scatterlist *sg, int nsg); | ||
148 | |||
149 | /* | ||
150 | * DMA Controller registers. | ||
151 | */ | ||
152 | #define VDMA_MR0 0xe00 /* Mod reg 0 */ | ||
153 | #define VDMA_MR_CHAIN 0x01 /* Chaining mode */ | ||
154 | #define VDMA_MR_TDIE 0x02 /* Transfer done int enable */ | ||
155 | #define VDMA_CSR0 0xe04 /* Control/status */ | ||
156 | #define VDMA_C_ENABLE 0x01 /* DMA Enable */ | ||
157 | #define VDMA_C_START 0x02 /* Start a transfer */ | ||
158 | #define VDMA_C_ABORT 0x04 /* Abort a transfer */ | ||
159 | #define VDMA_C_DONE 0x08 /* Transfer is done */ | ||
160 | #define VDMA_MARL0 0xe20 /* Mem addr low */ | ||
161 | #define VDMA_MARH0 0xe24 /* Mem addr high */ | ||
162 | #define VDMA_DAR0 0xe28 /* Device address */ | ||
163 | #define VDMA_DQWCR0 0xe2c /* Count (16-byte) */ | ||
164 | #define VDMA_TMR0 0xe30 /* Tile mode reg */ | ||
165 | #define VDMA_DPRL0 0xe34 /* Not sure */ | ||
166 | #define VDMA_DPR_IN 0x08 /* Inbound transfer to FB */ | ||
167 | #define VDMA_DPRH0 0xe38 | ||
168 | #define VDMA_PMR0 (0xe00 + 0x134) /* Pitch mode */ | ||
169 | |||
170 | /* | ||
171 | * Useful stuff that probably belongs somewhere global. | ||
172 | */ | ||
173 | #define VGA_WIDTH 640 | ||
174 | #define VGA_HEIGHT 480 | ||
175 | |||
176 | /* | ||
177 | * Indexed port operations. Note that these are all multi-op | ||
178 | * functions; every invocation will be racy if you're not holding | ||
179 | * reg_lock. | ||
180 | */ | ||
181 | |||
182 | #define VIAStatus 0x3DA /* Non-indexed port */ | ||
183 | #define VIACR 0x3D4 | ||
184 | #define VIASR 0x3C4 | ||
185 | #define VIAGR 0x3CE | ||
186 | #define VIAAR 0x3C0 | ||
187 | |||
188 | static inline u8 via_read_reg(u16 port, u8 index) | ||
189 | { | ||
190 | outb(index, port); | ||
191 | return inb(port + 1); | ||
192 | } | ||
193 | |||
194 | static inline void via_write_reg(u16 port, u8 index, u8 data) | ||
195 | { | ||
196 | outb(index, port); | ||
197 | outb(data, port + 1); | ||
198 | } | ||
199 | |||
200 | static inline void via_write_reg_mask(u16 port, u8 index, u8 data, u8 mask) | ||
201 | { | ||
202 | u8 old; | ||
203 | |||
204 | outb(index, port); | ||
205 | old = inb(port + 1); | ||
206 | outb((data & mask) | (old & ~mask), port + 1); | ||
207 | } | ||
208 | |||
209 | #define VIA_MISC_REG_READ 0x03CC | ||
210 | #define VIA_MISC_REG_WRITE 0x03C2 | ||
211 | |||
212 | static inline void via_write_misc_reg_mask(u8 data, u8 mask) | ||
213 | { | ||
214 | u8 old = inb(VIA_MISC_REG_READ); | ||
215 | outb((data & mask) | (old & ~mask), VIA_MISC_REG_WRITE); | ||
216 | } | ||
217 | |||
218 | |||
219 | #endif /* __VIA_CORE_H__ */ | ||
diff --git a/include/linux/via-gpio.h b/include/linux/via-gpio.h new file mode 100644 index 000000000000..8281aea3dd6d --- /dev/null +++ b/include/linux/via-gpio.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * Support for viafb GPIO ports. | ||
3 | * | ||
4 | * Copyright 2009 Jonathan Corbet <corbet@lwn.net> | ||
5 | * Distributable under version 2 of the GNU General Public License. | ||
6 | */ | ||
7 | |||
8 | #ifndef __VIA_GPIO_H__ | ||
9 | #define __VIA_GPIO_H__ | ||
10 | |||
11 | extern int viafb_gpio_lookup(const char *name); | ||
12 | extern int viafb_gpio_init(void); | ||
13 | extern void viafb_gpio_exit(void); | ||
14 | #endif | ||
diff --git a/include/linux/via_i2c.h b/include/linux/via_i2c.h new file mode 100644 index 000000000000..44532e468c05 --- /dev/null +++ b/include/linux/via_i2c.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * Copyright 1998-2009 VIA Technologies, Inc. All Rights Reserved. | ||
3 | * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved. | ||
4 | |||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public | ||
7 | * License as published by the Free Software Foundation; | ||
8 | * either version 2, or (at your option) any later version. | ||
9 | |||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even | ||
12 | * the implied warranty of MERCHANTABILITY or FITNESS FOR | ||
13 | * A PARTICULAR PURPOSE.See the GNU General Public License | ||
14 | * 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., | ||
19 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
20 | */ | ||
21 | #ifndef __VIA_I2C_H__ | ||
22 | #define __VIA_I2C_H__ | ||
23 | |||
24 | #include <linux/i2c.h> | ||
25 | #include <linux/i2c-algo-bit.h> | ||
26 | |||
27 | struct via_i2c_stuff { | ||
28 | u16 i2c_port; /* GPIO or I2C port */ | ||
29 | u16 is_active; /* Being used as I2C? */ | ||
30 | struct i2c_adapter adapter; | ||
31 | struct i2c_algo_bit_data algo; | ||
32 | }; | ||
33 | |||
34 | |||
35 | int viafb_i2c_readbyte(u8 adap, u8 slave_addr, u8 index, u8 *pdata); | ||
36 | int viafb_i2c_writebyte(u8 adap, u8 slave_addr, u8 index, u8 data); | ||
37 | int viafb_i2c_readbytes(u8 adap, u8 slave_addr, u8 index, u8 *buff, int buff_len); | ||
38 | struct i2c_adapter *viafb_find_i2c_adapter(enum viafb_i2c_adap which); | ||
39 | |||
40 | extern int viafb_i2c_init(void); | ||
41 | extern void viafb_i2c_exit(void); | ||
42 | #endif /* __VIA_I2C_H__ */ | ||
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 3793d168b44d..047f7e6edb86 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
@@ -160,16 +160,6 @@ enum v4l2_buf_type { | |||
160 | V4L2_BUF_TYPE_PRIVATE = 0x80, | 160 | V4L2_BUF_TYPE_PRIVATE = 0x80, |
161 | }; | 161 | }; |
162 | 162 | ||
163 | enum v4l2_ctrl_type { | ||
164 | V4L2_CTRL_TYPE_INTEGER = 1, | ||
165 | V4L2_CTRL_TYPE_BOOLEAN = 2, | ||
166 | V4L2_CTRL_TYPE_MENU = 3, | ||
167 | V4L2_CTRL_TYPE_BUTTON = 4, | ||
168 | V4L2_CTRL_TYPE_INTEGER64 = 5, | ||
169 | V4L2_CTRL_TYPE_CTRL_CLASS = 6, | ||
170 | V4L2_CTRL_TYPE_STRING = 7, | ||
171 | }; | ||
172 | |||
173 | enum v4l2_tuner_type { | 163 | enum v4l2_tuner_type { |
174 | V4L2_TUNER_RADIO = 1, | 164 | V4L2_TUNER_RADIO = 1, |
175 | V4L2_TUNER_ANALOG_TV = 2, | 165 | V4L2_TUNER_ANALOG_TV = 2, |
@@ -294,6 +284,8 @@ struct v4l2_pix_format { | |||
294 | 284 | ||
295 | /* Grey formats */ | 285 | /* Grey formats */ |
296 | #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ | 286 | #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ |
287 | #define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ') /* 4 Greyscale */ | ||
288 | #define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */ | ||
297 | #define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */ | 289 | #define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */ |
298 | #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ | 290 | #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ |
299 | 291 | ||
@@ -369,6 +361,7 @@ struct v4l2_pix_format { | |||
369 | #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ | 361 | #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ |
370 | #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ | 362 | #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ |
371 | #define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */ | 363 | #define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */ |
364 | #define V4L2_PIX_FMT_TM6000 v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */ | ||
372 | 365 | ||
373 | /* | 366 | /* |
374 | * F O R M A T E N U M E R A T I O N | 367 | * F O R M A T E N U M E R A T I O N |
@@ -549,6 +542,8 @@ struct v4l2_buffer { | |||
549 | #define V4L2_BUF_FLAG_KEYFRAME 0x0008 /* Image is a keyframe (I-frame) */ | 542 | #define V4L2_BUF_FLAG_KEYFRAME 0x0008 /* Image is a keyframe (I-frame) */ |
550 | #define V4L2_BUF_FLAG_PFRAME 0x0010 /* Image is a P-frame */ | 543 | #define V4L2_BUF_FLAG_PFRAME 0x0010 /* Image is a P-frame */ |
551 | #define V4L2_BUF_FLAG_BFRAME 0x0020 /* Image is a B-frame */ | 544 | #define V4L2_BUF_FLAG_BFRAME 0x0020 /* Image is a B-frame */ |
545 | /* Buffer is ready, but the data contained within is corrupted. */ | ||
546 | #define V4L2_BUF_FLAG_ERROR 0x0040 | ||
552 | #define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */ | 547 | #define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */ |
553 | #define V4L2_BUF_FLAG_INPUT 0x0200 /* input field is valid */ | 548 | #define V4L2_BUF_FLAG_INPUT 0x0200 /* input field is valid */ |
554 | 549 | ||
@@ -939,6 +934,16 @@ struct v4l2_ext_controls { | |||
939 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) | 934 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) |
940 | #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000) | 935 | #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000) |
941 | 936 | ||
937 | enum v4l2_ctrl_type { | ||
938 | V4L2_CTRL_TYPE_INTEGER = 1, | ||
939 | V4L2_CTRL_TYPE_BOOLEAN = 2, | ||
940 | V4L2_CTRL_TYPE_MENU = 3, | ||
941 | V4L2_CTRL_TYPE_BUTTON = 4, | ||
942 | V4L2_CTRL_TYPE_INTEGER64 = 5, | ||
943 | V4L2_CTRL_TYPE_CTRL_CLASS = 6, | ||
944 | V4L2_CTRL_TYPE_STRING = 7, | ||
945 | }; | ||
946 | |||
942 | /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ | 947 | /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ |
943 | struct v4l2_queryctrl { | 948 | struct v4l2_queryctrl { |
944 | __u32 id; | 949 | __u32 id; |
@@ -1023,14 +1028,24 @@ enum v4l2_colorfx { | |||
1023 | V4L2_COLORFX_NONE = 0, | 1028 | V4L2_COLORFX_NONE = 0, |
1024 | V4L2_COLORFX_BW = 1, | 1029 | V4L2_COLORFX_BW = 1, |
1025 | V4L2_COLORFX_SEPIA = 2, | 1030 | V4L2_COLORFX_SEPIA = 2, |
1031 | V4L2_COLORFX_NEGATIVE = 3, | ||
1032 | V4L2_COLORFX_EMBOSS = 4, | ||
1033 | V4L2_COLORFX_SKETCH = 5, | ||
1034 | V4L2_COLORFX_SKY_BLUE = 6, | ||
1035 | V4L2_COLORFX_GRASS_GREEN = 7, | ||
1036 | V4L2_COLORFX_SKIN_WHITEN = 8, | ||
1037 | V4L2_COLORFX_VIVID = 9, | ||
1026 | }; | 1038 | }; |
1027 | #define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) | 1039 | #define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) |
1028 | #define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) | 1040 | #define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) |
1029 | 1041 | ||
1030 | #define V4L2_CID_ROTATE (V4L2_CID_BASE+34) | 1042 | #define V4L2_CID_ROTATE (V4L2_CID_BASE+34) |
1031 | #define V4L2_CID_BG_COLOR (V4L2_CID_BASE+35) | 1043 | #define V4L2_CID_BG_COLOR (V4L2_CID_BASE+35) |
1044 | |||
1045 | #define V4L2_CID_CHROMA_GAIN (V4L2_CID_BASE+36) | ||
1046 | |||
1032 | /* last CID + 1 */ | 1047 | /* last CID + 1 */ |
1033 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+36) | 1048 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+37) |
1034 | 1049 | ||
1035 | /* MPEG-class control IDs defined by V4L2 */ | 1050 | /* MPEG-class control IDs defined by V4L2 */ |
1036 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) | 1051 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) |
@@ -1276,6 +1291,9 @@ enum v4l2_exposure_auto_type { | |||
1276 | 1291 | ||
1277 | #define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16) | 1292 | #define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16) |
1278 | 1293 | ||
1294 | #define V4L2_CID_IRIS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+17) | ||
1295 | #define V4L2_CID_IRIS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+18) | ||
1296 | |||
1279 | /* FM Modulator class control IDs */ | 1297 | /* FM Modulator class control IDs */ |
1280 | #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) | 1298 | #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) |
1281 | #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) | 1299 | #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) |
@@ -1621,6 +1639,38 @@ struct v4l2_streamparm { | |||
1621 | }; | 1639 | }; |
1622 | 1640 | ||
1623 | /* | 1641 | /* |
1642 | * E V E N T S | ||
1643 | */ | ||
1644 | |||
1645 | #define V4L2_EVENT_ALL 0 | ||
1646 | #define V4L2_EVENT_VSYNC 1 | ||
1647 | #define V4L2_EVENT_EOS 2 | ||
1648 | #define V4L2_EVENT_PRIVATE_START 0x08000000 | ||
1649 | |||
1650 | /* Payload for V4L2_EVENT_VSYNC */ | ||
1651 | struct v4l2_event_vsync { | ||
1652 | /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */ | ||
1653 | __u8 field; | ||
1654 | } __attribute__ ((packed)); | ||
1655 | |||
1656 | struct v4l2_event { | ||
1657 | __u32 type; | ||
1658 | union { | ||
1659 | struct v4l2_event_vsync vsync; | ||
1660 | __u8 data[64]; | ||
1661 | } u; | ||
1662 | __u32 pending; | ||
1663 | __u32 sequence; | ||
1664 | struct timespec timestamp; | ||
1665 | __u32 reserved[9]; | ||
1666 | }; | ||
1667 | |||
1668 | struct v4l2_event_subscription { | ||
1669 | __u32 type; | ||
1670 | __u32 reserved[7]; | ||
1671 | }; | ||
1672 | |||
1673 | /* | ||
1624 | * A D V A N C E D D E B U G G I N G | 1674 | * A D V A N C E D D E B U G G I N G |
1625 | * | 1675 | * |
1626 | * NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS! | 1676 | * NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS! |
@@ -1742,6 +1792,9 @@ struct v4l2_dbg_chip_ident { | |||
1742 | #define VIDIOC_QUERY_DV_PRESET _IOR('V', 86, struct v4l2_dv_preset) | 1792 | #define VIDIOC_QUERY_DV_PRESET _IOR('V', 86, struct v4l2_dv_preset) |
1743 | #define VIDIOC_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings) | 1793 | #define VIDIOC_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings) |
1744 | #define VIDIOC_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings) | 1794 | #define VIDIOC_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings) |
1795 | #define VIDIOC_DQEVENT _IOR('V', 89, struct v4l2_event) | ||
1796 | #define VIDIOC_SUBSCRIBE_EVENT _IOW('V', 90, struct v4l2_event_subscription) | ||
1797 | #define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription) | ||
1745 | 1798 | ||
1746 | /* Reminder: when adding new ioctls please add support for them to | 1799 | /* Reminder: when adding new ioctls please add support for them to |
1747 | drivers/media/video/v4l2-compat-ioctl32.c as well! */ | 1800 | drivers/media/video/v4l2-compat-ioctl32.c as well! */ |