diff options
Diffstat (limited to 'include')
36 files changed, 780 insertions, 181 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 1fa3ffb7c93b..1b3b36068ca5 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -356,7 +356,6 @@ void acpi_remove_dir(struct acpi_device *); | |||
356 | /* | 356 | /* |
357 | * Bind physical devices with ACPI devices | 357 | * Bind physical devices with ACPI devices |
358 | */ | 358 | */ |
359 | #include <linux/device.h> | ||
360 | struct acpi_bus_type { | 359 | struct acpi_bus_type { |
361 | struct list_head list; | 360 | struct list_head list; |
362 | struct bus_type *bus; | 361 | struct bus_type *bus; |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 45b67d9c39c1..c8e64bbadbcf 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
@@ -88,7 +88,37 @@ struct drm_device; | |||
88 | #define DRM_UT_CORE 0x01 | 88 | #define DRM_UT_CORE 0x01 |
89 | #define DRM_UT_DRIVER 0x02 | 89 | #define DRM_UT_DRIVER 0x02 |
90 | #define DRM_UT_KMS 0x04 | 90 | #define DRM_UT_KMS 0x04 |
91 | #define DRM_UT_MODE 0x08 | 91 | /* |
92 | * Three debug levels are defined. | ||
93 | * drm_core, drm_driver, drm_kms | ||
94 | * drm_core level can be used in the generic drm code. For example: | ||
95 | * drm_ioctl, drm_mm, drm_memory | ||
96 | * The macro definiton of DRM_DEBUG is used. | ||
97 | * DRM_DEBUG(fmt, args...) | ||
98 | * The debug info by using the DRM_DEBUG can be obtained by adding | ||
99 | * the boot option of "drm.debug=1". | ||
100 | * | ||
101 | * drm_driver level can be used in the specific drm driver. It is used | ||
102 | * to add the debug info related with the drm driver. For example: | ||
103 | * i915_drv, i915_dma, i915_gem, radeon_drv, | ||
104 | * The macro definition of DRM_DEBUG_DRIVER can be used. | ||
105 | * DRM_DEBUG_DRIVER(fmt, args...) | ||
106 | * The debug info by using the DRM_DEBUG_DRIVER can be obtained by | ||
107 | * adding the boot option of "drm.debug=0x02" | ||
108 | * | ||
109 | * drm_kms level can be used in the KMS code related with specific drm driver. | ||
110 | * It is used to add the debug info related with KMS mode. For example: | ||
111 | * the connector/crtc , | ||
112 | * The macro definition of DRM_DEBUG_KMS can be used. | ||
113 | * DRM_DEBUG_KMS(fmt, args...) | ||
114 | * The debug info by using the DRM_DEBUG_KMS can be obtained by | ||
115 | * adding the boot option of "drm.debug=0x04" | ||
116 | * | ||
117 | * If we add the boot option of "drm.debug=0x06", we can get the debug info by | ||
118 | * using the DRM_DEBUG_KMS and DRM_DEBUG_DRIVER. | ||
119 | * If we add the boot option of "drm.debug=0x05", we can get the debug info by | ||
120 | * using the DRM_DEBUG_KMS and DRM_DEBUG. | ||
121 | */ | ||
92 | 122 | ||
93 | extern void drm_ut_debug_printk(unsigned int request_level, | 123 | extern void drm_ut_debug_printk(unsigned int request_level, |
94 | const char *prefix, | 124 | const char *prefix, |
@@ -174,19 +204,14 @@ extern void drm_ut_debug_printk(unsigned int request_level, | |||
174 | __func__, fmt, ##args); \ | 204 | __func__, fmt, ##args); \ |
175 | } while (0) | 205 | } while (0) |
176 | 206 | ||
177 | #define DRM_DEBUG_DRIVER(prefix, fmt, args...) \ | 207 | #define DRM_DEBUG_DRIVER(fmt, args...) \ |
178 | do { \ | 208 | do { \ |
179 | drm_ut_debug_printk(DRM_UT_DRIVER, prefix, \ | 209 | drm_ut_debug_printk(DRM_UT_DRIVER, DRM_NAME, \ |
180 | __func__, fmt, ##args); \ | 210 | __func__, fmt, ##args); \ |
181 | } while (0) | 211 | } while (0) |
182 | #define DRM_DEBUG_KMS(prefix, fmt, args...) \ | 212 | #define DRM_DEBUG_KMS(fmt, args...) \ |
183 | do { \ | 213 | do { \ |
184 | drm_ut_debug_printk(DRM_UT_KMS, prefix, \ | 214 | drm_ut_debug_printk(DRM_UT_KMS, DRM_NAME, \ |
185 | __func__, fmt, ##args); \ | ||
186 | } while (0) | ||
187 | #define DRM_DEBUG_MODE(prefix, fmt, args...) \ | ||
188 | do { \ | ||
189 | drm_ut_debug_printk(DRM_UT_MODE, prefix, \ | ||
190 | __func__, fmt, ##args); \ | 215 | __func__, fmt, ##args); \ |
191 | } while (0) | 216 | } while (0) |
192 | #define DRM_LOG(fmt, args...) \ | 217 | #define DRM_LOG(fmt, args...) \ |
@@ -210,9 +235,8 @@ extern void drm_ut_debug_printk(unsigned int request_level, | |||
210 | NULL, fmt, ##args); \ | 235 | NULL, fmt, ##args); \ |
211 | } while (0) | 236 | } while (0) |
212 | #else | 237 | #else |
213 | #define DRM_DEBUG_DRIVER(prefix, fmt, args...) do { } while (0) | 238 | #define DRM_DEBUG_DRIVER(fmt, args...) do { } while (0) |
214 | #define DRM_DEBUG_KMS(prefix, fmt, args...) do { } while (0) | 239 | #define DRM_DEBUG_KMS(fmt, args...) do { } while (0) |
215 | #define DRM_DEBUG_MODE(prefix, fmt, args...) do { } while (0) | ||
216 | #define DRM_DEBUG(fmt, arg...) do { } while (0) | 240 | #define DRM_DEBUG(fmt, arg...) do { } while (0) |
217 | #define DRM_LOG(fmt, arg...) do { } while (0) | 241 | #define DRM_LOG(fmt, arg...) do { } while (0) |
218 | #define DRM_LOG_KMS(fmt, args...) do { } while (0) | 242 | #define DRM_LOG_KMS(fmt, args...) do { } while (0) |
@@ -786,6 +810,9 @@ struct drm_driver { | |||
786 | int (*gem_init_object) (struct drm_gem_object *obj); | 810 | int (*gem_init_object) (struct drm_gem_object *obj); |
787 | void (*gem_free_object) (struct drm_gem_object *obj); | 811 | void (*gem_free_object) (struct drm_gem_object *obj); |
788 | 812 | ||
813 | /* vga arb irq handler */ | ||
814 | void (*vgaarb_irq)(struct drm_device *dev, bool state); | ||
815 | |||
789 | /* Driver private ops for this object */ | 816 | /* Driver private ops for this object */ |
790 | struct vm_operations_struct *gem_vm_ops; | 817 | struct vm_operations_struct *gem_vm_ops; |
791 | 818 | ||
@@ -1417,7 +1444,7 @@ drm_gem_object_unreference(struct drm_gem_object *obj) | |||
1417 | 1444 | ||
1418 | int drm_gem_handle_create(struct drm_file *file_priv, | 1445 | int drm_gem_handle_create(struct drm_file *file_priv, |
1419 | struct drm_gem_object *obj, | 1446 | struct drm_gem_object *obj, |
1420 | int *handlep); | 1447 | u32 *handlep); |
1421 | 1448 | ||
1422 | static inline void | 1449 | static inline void |
1423 | drm_gem_object_handle_reference(struct drm_gem_object *obj) | 1450 | drm_gem_object_handle_reference(struct drm_gem_object *obj) |
@@ -1443,7 +1470,7 @@ drm_gem_object_handle_unreference(struct drm_gem_object *obj) | |||
1443 | 1470 | ||
1444 | struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev, | 1471 | struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev, |
1445 | struct drm_file *filp, | 1472 | struct drm_file *filp, |
1446 | int handle); | 1473 | u32 handle); |
1447 | int drm_gem_close_ioctl(struct drm_device *dev, void *data, | 1474 | int drm_gem_close_ioctl(struct drm_device *dev, void *data, |
1448 | struct drm_file *file_priv); | 1475 | struct drm_file *file_priv); |
1449 | int drm_gem_flink_ioctl(struct drm_device *dev, void *data, | 1476 | int drm_gem_flink_ioctl(struct drm_device *dev, void *data, |
diff --git a/include/drm/drm_cache.h b/include/drm/drm_cache.h new file mode 100644 index 000000000000..7bfb063029d8 --- /dev/null +++ b/include/drm/drm_cache.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /************************************************************************** | ||
2 | * | ||
3 | * Copyright 2009 Red Hat Inc. | ||
4 | * All Rights Reserved. | ||
5 | * | ||
6 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
7 | * copy of this software and associated documentation files (the | ||
8 | * "Software"), to deal in the Software without restriction, including | ||
9 | * without limitation the rights to use, copy, modify, merge, publish, | ||
10 | * distribute, sub license, and/or sell copies of the Software, and to | ||
11 | * permit persons to whom the Software is furnished to do so, subject to | ||
12 | * the following conditions: | ||
13 | * | ||
14 | * The above copyright notice and this permission notice (including the | ||
15 | * next paragraph) shall be included in all copies or substantial portions | ||
16 | * of the Software. | ||
17 | * | ||
18 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
19 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
20 | * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL | ||
21 | * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, | ||
22 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
23 | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
24 | * USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
25 | * | ||
26 | * | ||
27 | **************************************************************************/ | ||
28 | /* | ||
29 | * Authors: | ||
30 | * Dave Airlie <airlied@redhat.com> | ||
31 | */ | ||
32 | |||
33 | #ifndef _DRM_CACHE_H_ | ||
34 | #define _DRM_CACHE_H_ | ||
35 | |||
36 | void drm_clflush_pages(struct page *pages[], unsigned long num_pages); | ||
37 | |||
38 | #endif | ||
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 7300fb866767..ae1e9e166959 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
@@ -259,6 +259,8 @@ struct drm_framebuffer { | |||
259 | void *fbdev; | 259 | void *fbdev; |
260 | u32 pseudo_palette[17]; | 260 | u32 pseudo_palette[17]; |
261 | struct list_head filp_head; | 261 | struct list_head filp_head; |
262 | /* if you are using the helper */ | ||
263 | void *helper_private; | ||
262 | }; | 264 | }; |
263 | 265 | ||
264 | struct drm_property_blob { | 266 | struct drm_property_blob { |
@@ -572,6 +574,12 @@ struct drm_mode_config { | |||
572 | struct drm_property *tv_right_margin_property; | 574 | struct drm_property *tv_right_margin_property; |
573 | struct drm_property *tv_top_margin_property; | 575 | struct drm_property *tv_top_margin_property; |
574 | struct drm_property *tv_bottom_margin_property; | 576 | struct drm_property *tv_bottom_margin_property; |
577 | struct drm_property *tv_brightness_property; | ||
578 | struct drm_property *tv_contrast_property; | ||
579 | struct drm_property *tv_flicker_reduction_property; | ||
580 | struct drm_property *tv_overscan_property; | ||
581 | struct drm_property *tv_saturation_property; | ||
582 | struct drm_property *tv_hue_property; | ||
575 | 583 | ||
576 | /* Optional properties */ | 584 | /* Optional properties */ |
577 | struct drm_property *scaling_mode_property; | 585 | struct drm_property *scaling_mode_property; |
@@ -736,4 +744,12 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev, | |||
736 | extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, | 744 | extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, |
737 | void *data, struct drm_file *file_priv); | 745 | void *data, struct drm_file *file_priv); |
738 | extern bool drm_detect_hdmi_monitor(struct edid *edid); | 746 | extern bool drm_detect_hdmi_monitor(struct edid *edid); |
747 | extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, | ||
748 | int hdisplay, int vdisplay, int vrefresh, | ||
749 | bool reduced, bool interlaced); | ||
750 | extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev, | ||
751 | int hdisplay, int vdisplay, int vrefresh, | ||
752 | bool interlaced, int margins); | ||
753 | extern int drm_add_modes_noedid(struct drm_connector *connector, | ||
754 | int hdisplay, int vdisplay); | ||
739 | #endif /* __DRM_CRTC_H__ */ | 755 | #endif /* __DRM_CRTC_H__ */ |
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h index 6769ff6c1bc0..4c8dacaf4f58 100644 --- a/include/drm/drm_crtc_helper.h +++ b/include/drm/drm_crtc_helper.h | |||
@@ -79,6 +79,8 @@ struct drm_encoder_helper_funcs { | |||
79 | /* detect for DAC style encoders */ | 79 | /* detect for DAC style encoders */ |
80 | enum drm_connector_status (*detect)(struct drm_encoder *encoder, | 80 | enum drm_connector_status (*detect)(struct drm_encoder *encoder, |
81 | struct drm_connector *connector); | 81 | struct drm_connector *connector); |
82 | /* disable encoder when not in use - more explicit than dpms off */ | ||
83 | void (*disable)(struct drm_encoder *encoder); | ||
82 | }; | 84 | }; |
83 | 85 | ||
84 | struct drm_connector_helper_funcs { | 86 | struct drm_connector_helper_funcs { |
@@ -98,6 +100,7 @@ extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, | |||
98 | int x, int y, | 100 | int x, int y, |
99 | struct drm_framebuffer *old_fb); | 101 | struct drm_framebuffer *old_fb); |
100 | extern bool drm_helper_crtc_in_use(struct drm_crtc *crtc); | 102 | extern bool drm_helper_crtc_in_use(struct drm_crtc *crtc); |
103 | extern bool drm_helper_encoder_in_use(struct drm_encoder *encoder); | ||
101 | 104 | ||
102 | extern void drm_helper_connector_dpms(struct drm_connector *connector, int mode); | 105 | extern void drm_helper_connector_dpms(struct drm_connector *connector, int mode); |
103 | 106 | ||
diff --git a/include/drm/drm_encoder_slave.h b/include/drm/drm_encoder_slave.h new file mode 100644 index 000000000000..2f65633d28a7 --- /dev/null +++ b/include/drm/drm_encoder_slave.h | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 Francisco Jerez. | ||
3 | * All Rights Reserved. | ||
4 | * | ||
5 | * Permission is hereby granted, free of charge, to any person obtaining | ||
6 | * a copy of this software and associated documentation files (the | ||
7 | * "Software"), to deal in the Software without restriction, including | ||
8 | * without limitation the rights to use, copy, modify, merge, publish, | ||
9 | * distribute, sublicense, and/or sell copies of the Software, and to | ||
10 | * permit persons to whom the Software is furnished to do so, subject to | ||
11 | * the following conditions: | ||
12 | * | ||
13 | * The above copyright notice and this permission notice (including the | ||
14 | * next paragraph) shall be included in all copies or substantial | ||
15 | * portions of the Software. | ||
16 | * | ||
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
18 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
19 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
20 | * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE | ||
21 | * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | ||
22 | * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
23 | * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
24 | * | ||
25 | */ | ||
26 | |||
27 | #ifndef __DRM_ENCODER_SLAVE_H__ | ||
28 | #define __DRM_ENCODER_SLAVE_H__ | ||
29 | |||
30 | #include "drmP.h" | ||
31 | #include "drm_crtc.h" | ||
32 | |||
33 | /** | ||
34 | * struct drm_encoder_slave_funcs - Entry points exposed by a slave encoder driver | ||
35 | * @set_config: Initialize any encoder-specific modesetting parameters. | ||
36 | * The meaning of the @params parameter is implementation | ||
37 | * dependent. It will usually be a structure with DVO port | ||
38 | * data format settings or timings. It's not required for | ||
39 | * the new parameters to take effect until the next mode | ||
40 | * is set. | ||
41 | * | ||
42 | * Most of its members are analogous to the function pointers in | ||
43 | * &drm_encoder_helper_funcs and they can optionally be used to | ||
44 | * initialize the latter. Connector-like methods (e.g. @get_modes and | ||
45 | * @set_property) will typically be wrapped around and only be called | ||
46 | * if the encoder is the currently selected one for the connector. | ||
47 | */ | ||
48 | struct drm_encoder_slave_funcs { | ||
49 | void (*set_config)(struct drm_encoder *encoder, | ||
50 | void *params); | ||
51 | |||
52 | void (*destroy)(struct drm_encoder *encoder); | ||
53 | void (*dpms)(struct drm_encoder *encoder, int mode); | ||
54 | void (*save)(struct drm_encoder *encoder); | ||
55 | void (*restore)(struct drm_encoder *encoder); | ||
56 | bool (*mode_fixup)(struct drm_encoder *encoder, | ||
57 | struct drm_display_mode *mode, | ||
58 | struct drm_display_mode *adjusted_mode); | ||
59 | int (*mode_valid)(struct drm_encoder *encoder, | ||
60 | struct drm_display_mode *mode); | ||
61 | void (*mode_set)(struct drm_encoder *encoder, | ||
62 | struct drm_display_mode *mode, | ||
63 | struct drm_display_mode *adjusted_mode); | ||
64 | |||
65 | enum drm_connector_status (*detect)(struct drm_encoder *encoder, | ||
66 | struct drm_connector *connector); | ||
67 | int (*get_modes)(struct drm_encoder *encoder, | ||
68 | struct drm_connector *connector); | ||
69 | int (*create_resources)(struct drm_encoder *encoder, | ||
70 | struct drm_connector *connector); | ||
71 | int (*set_property)(struct drm_encoder *encoder, | ||
72 | struct drm_connector *connector, | ||
73 | struct drm_property *property, | ||
74 | uint64_t val); | ||
75 | |||
76 | }; | ||
77 | |||
78 | /** | ||
79 | * struct drm_encoder_slave - Slave encoder struct | ||
80 | * @base: DRM encoder object. | ||
81 | * @slave_funcs: Slave encoder callbacks. | ||
82 | * @slave_priv: Slave encoder private data. | ||
83 | * @bus_priv: Bus specific data. | ||
84 | * | ||
85 | * A &drm_encoder_slave has two sets of callbacks, @slave_funcs and the | ||
86 | * ones in @base. The former are never actually called by the common | ||
87 | * CRTC code, it's just a convenience for splitting the encoder | ||
88 | * functions in an upper, GPU-specific layer and a (hopefully) | ||
89 | * GPU-agnostic lower layer: It's the GPU driver responsibility to | ||
90 | * call the slave methods when appropriate. | ||
91 | * | ||
92 | * drm_i2c_encoder_init() provides a way to get an implementation of | ||
93 | * this. | ||
94 | */ | ||
95 | struct drm_encoder_slave { | ||
96 | struct drm_encoder base; | ||
97 | |||
98 | struct drm_encoder_slave_funcs *slave_funcs; | ||
99 | void *slave_priv; | ||
100 | void *bus_priv; | ||
101 | }; | ||
102 | #define to_encoder_slave(x) container_of((x), struct drm_encoder_slave, base) | ||
103 | |||
104 | int drm_i2c_encoder_init(struct drm_device *dev, | ||
105 | struct drm_encoder_slave *encoder, | ||
106 | struct i2c_adapter *adap, | ||
107 | const struct i2c_board_info *info); | ||
108 | |||
109 | |||
110 | /** | ||
111 | * struct drm_i2c_encoder_driver | ||
112 | * | ||
113 | * Describes a device driver for an encoder connected to the GPU | ||
114 | * through an I2C bus. In addition to the entry points in @i2c_driver | ||
115 | * an @encoder_init function should be provided. It will be called to | ||
116 | * give the driver an opportunity to allocate any per-encoder data | ||
117 | * structures and to initialize the @slave_funcs and (optionally) | ||
118 | * @slave_priv members of @encoder. | ||
119 | */ | ||
120 | struct drm_i2c_encoder_driver { | ||
121 | struct i2c_driver i2c_driver; | ||
122 | |||
123 | int (*encoder_init)(struct i2c_client *client, | ||
124 | struct drm_device *dev, | ||
125 | struct drm_encoder_slave *encoder); | ||
126 | |||
127 | }; | ||
128 | #define to_drm_i2c_encoder_driver(x) container_of((x), \ | ||
129 | struct drm_i2c_encoder_driver, \ | ||
130 | i2c_driver) | ||
131 | |||
132 | /** | ||
133 | * drm_i2c_encoder_get_client - Get the I2C client corresponding to an encoder | ||
134 | */ | ||
135 | static inline struct i2c_client *drm_i2c_encoder_get_client(struct drm_encoder *encoder) | ||
136 | { | ||
137 | return (struct i2c_client *)to_encoder_slave(encoder)->bus_priv; | ||
138 | } | ||
139 | |||
140 | /** | ||
141 | * drm_i2c_encoder_register - Register an I2C encoder driver | ||
142 | * @owner: Module containing the driver. | ||
143 | * @driver: Driver to be registered. | ||
144 | */ | ||
145 | static inline int drm_i2c_encoder_register(struct module *owner, | ||
146 | struct drm_i2c_encoder_driver *driver) | ||
147 | { | ||
148 | return i2c_register_driver(owner, &driver->i2c_driver); | ||
149 | } | ||
150 | |||
151 | /** | ||
152 | * drm_i2c_encoder_unregister - Unregister an I2C encoder driver | ||
153 | * @driver: Driver to be unregistered. | ||
154 | */ | ||
155 | static inline void drm_i2c_encoder_unregister(struct drm_i2c_encoder_driver *driver) | ||
156 | { | ||
157 | i2c_del_driver(&driver->i2c_driver); | ||
158 | } | ||
159 | |||
160 | void drm_i2c_encoder_destroy(struct drm_encoder *encoder); | ||
161 | |||
162 | #endif | ||
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h new file mode 100644 index 000000000000..88fffbdfa26f --- /dev/null +++ b/include/drm/drm_fb_helper.h | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2006-2009 Red Hat Inc. | ||
3 | * Copyright (c) 2006-2008 Intel Corporation | ||
4 | * Copyright (c) 2007 Dave Airlie <airlied@linux.ie> | ||
5 | * | ||
6 | * DRM framebuffer helper functions | ||
7 | * | ||
8 | * Permission to use, copy, modify, distribute, and sell this software and its | ||
9 | * documentation for any purpose is hereby granted without fee, provided that | ||
10 | * the above copyright notice appear in all copies and that both that copyright | ||
11 | * notice and this permission notice appear in supporting documentation, and | ||
12 | * that the name of the copyright holders not be used in advertising or | ||
13 | * publicity pertaining to distribution of the software without specific, | ||
14 | * written prior permission. The copyright holders make no representations | ||
15 | * about the suitability of this software for any purpose. It is provided "as | ||
16 | * is" without express or implied warranty. | ||
17 | * | ||
18 | * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, | ||
19 | * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO | ||
20 | * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR | ||
21 | * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, | ||
22 | * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER | ||
23 | * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE | ||
24 | * OF THIS SOFTWARE. | ||
25 | * | ||
26 | * Authors: | ||
27 | * Dave Airlie <airlied@linux.ie> | ||
28 | * Jesse Barnes <jesse.barnes@intel.com> | ||
29 | */ | ||
30 | #ifndef DRM_FB_HELPER_H | ||
31 | #define DRM_FB_HELPER_H | ||
32 | |||
33 | struct drm_fb_helper_crtc { | ||
34 | uint32_t crtc_id; | ||
35 | struct drm_mode_set mode_set; | ||
36 | }; | ||
37 | |||
38 | struct drm_fb_helper_funcs { | ||
39 | void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green, | ||
40 | u16 blue, int regno); | ||
41 | }; | ||
42 | |||
43 | struct drm_fb_helper { | ||
44 | struct drm_framebuffer *fb; | ||
45 | struct drm_device *dev; | ||
46 | struct drm_display_mode *mode; | ||
47 | int crtc_count; | ||
48 | struct drm_fb_helper_crtc *crtc_info; | ||
49 | struct drm_fb_helper_funcs *funcs; | ||
50 | int conn_limit; | ||
51 | struct list_head kernel_fb_list; | ||
52 | }; | ||
53 | |||
54 | int drm_fb_helper_single_fb_probe(struct drm_device *dev, | ||
55 | int (*fb_create)(struct drm_device *dev, | ||
56 | uint32_t fb_width, | ||
57 | uint32_t fb_height, | ||
58 | uint32_t surface_width, | ||
59 | uint32_t surface_height, | ||
60 | struct drm_framebuffer **fb_ptr)); | ||
61 | int drm_fb_helper_init_crtc_count(struct drm_fb_helper *helper, int crtc_count, | ||
62 | int max_conn); | ||
63 | void drm_fb_helper_free(struct drm_fb_helper *helper); | ||
64 | int drm_fb_helper_blank(int blank, struct fb_info *info); | ||
65 | int drm_fb_helper_pan_display(struct fb_var_screeninfo *var, | ||
66 | struct fb_info *info); | ||
67 | int drm_fb_helper_set_par(struct fb_info *info); | ||
68 | int drm_fb_helper_check_var(struct fb_var_screeninfo *var, | ||
69 | struct fb_info *info); | ||
70 | int drm_fb_helper_setcolreg(unsigned regno, | ||
71 | unsigned red, | ||
72 | unsigned green, | ||
73 | unsigned blue, | ||
74 | unsigned transp, | ||
75 | struct fb_info *info); | ||
76 | |||
77 | void drm_fb_helper_restore(void); | ||
78 | void drm_fb_helper_fill_var(struct fb_info *info, struct drm_framebuffer *fb, | ||
79 | uint32_t fb_width, uint32_t fb_height); | ||
80 | void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch); | ||
81 | |||
82 | #endif | ||
diff --git a/include/drm/drm_memory.h b/include/drm/drm_memory.h index 63e425b5ea82..15af9b32ae42 100644 --- a/include/drm/drm_memory.h +++ b/include/drm/drm_memory.h | |||
@@ -44,8 +44,6 @@ | |||
44 | 44 | ||
45 | #if __OS_HAS_AGP | 45 | #if __OS_HAS_AGP |
46 | 46 | ||
47 | #include <linux/vmalloc.h> | ||
48 | |||
49 | #ifdef HAVE_PAGE_AGP | 47 | #ifdef HAVE_PAGE_AGP |
50 | #include <asm/agp.h> | 48 | #include <asm/agp.h> |
51 | #else | 49 | #else |
diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h index f8332073d277..62329f9a42cb 100644 --- a/include/drm/drm_mm.h +++ b/include/drm/drm_mm.h | |||
@@ -37,6 +37,9 @@ | |||
37 | * Generic range manager structs | 37 | * Generic range manager structs |
38 | */ | 38 | */ |
39 | #include <linux/list.h> | 39 | #include <linux/list.h> |
40 | #ifdef CONFIG_DEBUG_FS | ||
41 | #include <linux/seq_file.h> | ||
42 | #endif | ||
40 | 43 | ||
41 | struct drm_mm_node { | 44 | struct drm_mm_node { |
42 | struct list_head fl_entry; | 45 | struct list_head fl_entry; |
@@ -96,4 +99,8 @@ static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block) | |||
96 | return block->mm; | 99 | return block->mm; |
97 | } | 100 | } |
98 | 101 | ||
102 | #ifdef CONFIG_DEBUG_FS | ||
103 | int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm); | ||
104 | #endif | ||
105 | |||
99 | #endif | 106 | #endif |
diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h index ae304cc73c90..1f908416aedb 100644 --- a/include/drm/drm_mode.h +++ b/include/drm/drm_mode.h | |||
@@ -68,10 +68,11 @@ | |||
68 | #define DRM_MODE_DPMS_OFF 3 | 68 | #define DRM_MODE_DPMS_OFF 3 |
69 | 69 | ||
70 | /* Scaling mode options */ | 70 | /* Scaling mode options */ |
71 | #define DRM_MODE_SCALE_NON_GPU 0 | 71 | #define DRM_MODE_SCALE_NONE 0 /* Unmodified timing (display or |
72 | #define DRM_MODE_SCALE_FULLSCREEN 1 | 72 | software can still scale) */ |
73 | #define DRM_MODE_SCALE_NO_SCALE 2 | 73 | #define DRM_MODE_SCALE_FULLSCREEN 1 /* Full screen, ignore aspect */ |
74 | #define DRM_MODE_SCALE_ASPECT 3 | 74 | #define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */ |
75 | #define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */ | ||
75 | 76 | ||
76 | /* Dithering mode options */ | 77 | /* Dithering mode options */ |
77 | #define DRM_MODE_DITHERING_OFF 0 | 78 | #define DRM_MODE_DITHERING_OFF 0 |
@@ -141,6 +142,7 @@ struct drm_mode_get_encoder { | |||
141 | #define DRM_MODE_SUBCONNECTOR_Composite 5 | 142 | #define DRM_MODE_SUBCONNECTOR_Composite 5 |
142 | #define DRM_MODE_SUBCONNECTOR_SVIDEO 6 | 143 | #define DRM_MODE_SUBCONNECTOR_SVIDEO 6 |
143 | #define DRM_MODE_SUBCONNECTOR_Component 8 | 144 | #define DRM_MODE_SUBCONNECTOR_Component 8 |
145 | #define DRM_MODE_SUBCONNECTOR_SCART 9 | ||
144 | 146 | ||
145 | #define DRM_MODE_CONNECTOR_Unknown 0 | 147 | #define DRM_MODE_CONNECTOR_Unknown 0 |
146 | #define DRM_MODE_CONNECTOR_VGA 1 | 148 | #define DRM_MODE_CONNECTOR_VGA 1 |
@@ -155,6 +157,7 @@ struct drm_mode_get_encoder { | |||
155 | #define DRM_MODE_CONNECTOR_DisplayPort 10 | 157 | #define DRM_MODE_CONNECTOR_DisplayPort 10 |
156 | #define DRM_MODE_CONNECTOR_HDMIA 11 | 158 | #define DRM_MODE_CONNECTOR_HDMIA 11 |
157 | #define DRM_MODE_CONNECTOR_HDMIB 12 | 159 | #define DRM_MODE_CONNECTOR_HDMIB 12 |
160 | #define DRM_MODE_CONNECTOR_TV 13 | ||
158 | 161 | ||
159 | struct drm_mode_get_connector { | 162 | struct drm_mode_get_connector { |
160 | 163 | ||
diff --git a/include/drm/drm_sysfs.h b/include/drm/drm_sysfs.h new file mode 100644 index 000000000000..1d8e033fde67 --- /dev/null +++ b/include/drm/drm_sysfs.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef _DRM_SYSFS_H_ | ||
2 | #define _DRM_SYSFS_H_ | ||
3 | |||
4 | /** | ||
5 | * This minimalistic include file is intended for users (read TTM) that | ||
6 | * don't want to include the full drmP.h file. | ||
7 | */ | ||
8 | |||
9 | extern int drm_class_device_register(struct device *dev); | ||
10 | extern void drm_class_device_unregister(struct device *dev); | ||
11 | |||
12 | #endif | ||
diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h index 2ba61e18fc8b..3b9932ab1756 100644 --- a/include/drm/radeon_drm.h +++ b/include/drm/radeon_drm.h | |||
@@ -802,11 +802,12 @@ struct drm_radeon_gem_create { | |||
802 | uint32_t flags; | 802 | uint32_t flags; |
803 | }; | 803 | }; |
804 | 804 | ||
805 | #define RADEON_TILING_MACRO 0x1 | 805 | #define RADEON_TILING_MACRO 0x1 |
806 | #define RADEON_TILING_MICRO 0x2 | 806 | #define RADEON_TILING_MICRO 0x2 |
807 | #define RADEON_TILING_SWAP 0x4 | 807 | #define RADEON_TILING_SWAP_16BIT 0x4 |
808 | #define RADEON_TILING_SURFACE 0x8 /* this object requires a surface | 808 | #define RADEON_TILING_SWAP_32BIT 0x8 |
809 | * when mapped - i.e. front buffer */ | 809 | #define RADEON_TILING_SURFACE 0x10 /* this object requires a surface |
810 | * when mapped - i.e. front buffer */ | ||
810 | 811 | ||
811 | struct drm_radeon_gem_set_tiling { | 812 | struct drm_radeon_gem_set_tiling { |
812 | uint32_t handle; | 813 | uint32_t handle; |
@@ -899,6 +900,7 @@ struct drm_radeon_cs { | |||
899 | #define RADEON_INFO_DEVICE_ID 0x00 | 900 | #define RADEON_INFO_DEVICE_ID 0x00 |
900 | #define RADEON_INFO_NUM_GB_PIPES 0x01 | 901 | #define RADEON_INFO_NUM_GB_PIPES 0x01 |
901 | #define RADEON_INFO_NUM_Z_PIPES 0x02 | 902 | #define RADEON_INFO_NUM_Z_PIPES 0x02 |
903 | #define RADEON_INFO_ACCEL_WORKING 0x03 | ||
902 | 904 | ||
903 | struct drm_radeon_info { | 905 | struct drm_radeon_info { |
904 | uint32_t request; | 906 | uint32_t request; |
diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h index cd22ab4b495c..491146170522 100644 --- a/include/drm/ttm/ttm_bo_api.h +++ b/include/drm/ttm/ttm_bo_api.h | |||
@@ -155,6 +155,7 @@ struct ttm_buffer_object { | |||
155 | * Members constant at init. | 155 | * Members constant at init. |
156 | */ | 156 | */ |
157 | 157 | ||
158 | struct ttm_bo_global *glob; | ||
158 | struct ttm_bo_device *bdev; | 159 | struct ttm_bo_device *bdev; |
159 | unsigned long buffer_start; | 160 | unsigned long buffer_start; |
160 | enum ttm_bo_type type; | 161 | enum ttm_bo_type type; |
@@ -245,14 +246,15 @@ struct ttm_buffer_object { | |||
245 | * premapped region. | 246 | * premapped region. |
246 | */ | 247 | */ |
247 | 248 | ||
249 | #define TTM_BO_MAP_IOMEM_MASK 0x80 | ||
248 | struct ttm_bo_kmap_obj { | 250 | struct ttm_bo_kmap_obj { |
249 | void *virtual; | 251 | void *virtual; |
250 | struct page *page; | 252 | struct page *page; |
251 | enum { | 253 | enum { |
252 | ttm_bo_map_iomap, | 254 | ttm_bo_map_iomap = 1 | TTM_BO_MAP_IOMEM_MASK, |
253 | ttm_bo_map_vmap, | 255 | ttm_bo_map_vmap = 2, |
254 | ttm_bo_map_kmap, | 256 | ttm_bo_map_kmap = 3, |
255 | ttm_bo_map_premapped, | 257 | ttm_bo_map_premapped = 4 | TTM_BO_MAP_IOMEM_MASK, |
256 | } bo_kmap_type; | 258 | } bo_kmap_type; |
257 | }; | 259 | }; |
258 | 260 | ||
@@ -522,8 +524,7 @@ extern int ttm_bo_evict_mm(struct ttm_bo_device *bdev, unsigned mem_type); | |||
522 | static inline void *ttm_kmap_obj_virtual(struct ttm_bo_kmap_obj *map, | 524 | static inline void *ttm_kmap_obj_virtual(struct ttm_bo_kmap_obj *map, |
523 | bool *is_iomem) | 525 | bool *is_iomem) |
524 | { | 526 | { |
525 | *is_iomem = (map->bo_kmap_type == ttm_bo_map_iomap || | 527 | *is_iomem = !!(map->bo_kmap_type & TTM_BO_MAP_IOMEM_MASK); |
526 | map->bo_kmap_type == ttm_bo_map_premapped); | ||
527 | return map->virtual; | 528 | return map->virtual; |
528 | } | 529 | } |
529 | 530 | ||
diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h index a68829db381a..e8cd6d20aed2 100644 --- a/include/drm/ttm/ttm_bo_driver.h +++ b/include/drm/ttm/ttm_bo_driver.h | |||
@@ -32,6 +32,7 @@ | |||
32 | 32 | ||
33 | #include "ttm/ttm_bo_api.h" | 33 | #include "ttm/ttm_bo_api.h" |
34 | #include "ttm/ttm_memory.h" | 34 | #include "ttm/ttm_memory.h" |
35 | #include "ttm/ttm_module.h" | ||
35 | #include "drm_mm.h" | 36 | #include "drm_mm.h" |
36 | #include "linux/workqueue.h" | 37 | #include "linux/workqueue.h" |
37 | #include "linux/fs.h" | 38 | #include "linux/fs.h" |
@@ -161,7 +162,7 @@ struct ttm_tt { | |||
161 | long last_lomem_page; | 162 | long last_lomem_page; |
162 | uint32_t page_flags; | 163 | uint32_t page_flags; |
163 | unsigned long num_pages; | 164 | unsigned long num_pages; |
164 | struct ttm_bo_device *bdev; | 165 | struct ttm_bo_global *glob; |
165 | struct ttm_backend *be; | 166 | struct ttm_backend *be; |
166 | struct task_struct *tsk; | 167 | struct task_struct *tsk; |
167 | unsigned long start; | 168 | unsigned long start; |
@@ -364,24 +365,73 @@ struct ttm_bo_driver { | |||
364 | void (*fault_reserve_notify)(struct ttm_buffer_object *bo); | 365 | void (*fault_reserve_notify)(struct ttm_buffer_object *bo); |
365 | }; | 366 | }; |
366 | 367 | ||
367 | #define TTM_NUM_MEM_TYPES 8 | 368 | /** |
369 | * struct ttm_bo_global_ref - Argument to initialize a struct ttm_bo_global. | ||
370 | */ | ||
371 | |||
372 | struct ttm_bo_global_ref { | ||
373 | struct ttm_global_reference ref; | ||
374 | struct ttm_mem_global *mem_glob; | ||
375 | }; | ||
368 | 376 | ||
369 | #define TTM_BO_PRIV_FLAG_MOVING 0 /* Buffer object is moving and needs | ||
370 | idling before CPU mapping */ | ||
371 | #define TTM_BO_PRIV_FLAG_MAX 1 | ||
372 | /** | 377 | /** |
373 | * struct ttm_bo_device - Buffer object driver device-specific data. | 378 | * struct ttm_bo_global - Buffer object driver global data. |
374 | * | 379 | * |
375 | * @mem_glob: Pointer to a struct ttm_mem_global object for accounting. | 380 | * @mem_glob: Pointer to a struct ttm_mem_global object for accounting. |
376 | * @driver: Pointer to a struct ttm_bo_driver struct setup by the driver. | ||
377 | * @count: Current number of buffer object. | ||
378 | * @pages: Current number of pinned pages. | ||
379 | * @dummy_read_page: Pointer to a dummy page used for mapping requests | 381 | * @dummy_read_page: Pointer to a dummy page used for mapping requests |
380 | * of unpopulated pages. | 382 | * of unpopulated pages. |
381 | * @shrink: A shrink callback object used for buffre object swap. | 383 | * @shrink: A shrink callback object used for buffer object swap. |
382 | * @ttm_bo_extra_size: Extra size (sizeof(struct ttm_buffer_object) excluded) | 384 | * @ttm_bo_extra_size: Extra size (sizeof(struct ttm_buffer_object) excluded) |
383 | * used by a buffer object. This is excluding page arrays and backing pages. | 385 | * used by a buffer object. This is excluding page arrays and backing pages. |
384 | * @ttm_bo_size: This is @ttm_bo_extra_size + sizeof(struct ttm_buffer_object). | 386 | * @ttm_bo_size: This is @ttm_bo_extra_size + sizeof(struct ttm_buffer_object). |
387 | * @device_list_mutex: Mutex protecting the device list. | ||
388 | * This mutex is held while traversing the device list for pm options. | ||
389 | * @lru_lock: Spinlock protecting the bo subsystem lru lists. | ||
390 | * @device_list: List of buffer object devices. | ||
391 | * @swap_lru: Lru list of buffer objects used for swapping. | ||
392 | */ | ||
393 | |||
394 | struct ttm_bo_global { | ||
395 | |||
396 | /** | ||
397 | * Constant after init. | ||
398 | */ | ||
399 | |||
400 | struct kobject kobj; | ||
401 | struct ttm_mem_global *mem_glob; | ||
402 | struct page *dummy_read_page; | ||
403 | struct ttm_mem_shrink shrink; | ||
404 | size_t ttm_bo_extra_size; | ||
405 | size_t ttm_bo_size; | ||
406 | struct mutex device_list_mutex; | ||
407 | spinlock_t lru_lock; | ||
408 | |||
409 | /** | ||
410 | * Protected by device_list_mutex. | ||
411 | */ | ||
412 | struct list_head device_list; | ||
413 | |||
414 | /** | ||
415 | * Protected by the lru_lock. | ||
416 | */ | ||
417 | struct list_head swap_lru; | ||
418 | |||
419 | /** | ||
420 | * Internal protection. | ||
421 | */ | ||
422 | atomic_t bo_count; | ||
423 | }; | ||
424 | |||
425 | |||
426 | #define TTM_NUM_MEM_TYPES 8 | ||
427 | |||
428 | #define TTM_BO_PRIV_FLAG_MOVING 0 /* Buffer object is moving and needs | ||
429 | idling before CPU mapping */ | ||
430 | #define TTM_BO_PRIV_FLAG_MAX 1 | ||
431 | /** | ||
432 | * struct ttm_bo_device - Buffer object driver device-specific data. | ||
433 | * | ||
434 | * @driver: Pointer to a struct ttm_bo_driver struct setup by the driver. | ||
385 | * @man: An array of mem_type_managers. | 435 | * @man: An array of mem_type_managers. |
386 | * @addr_space_mm: Range manager for the device address space. | 436 | * @addr_space_mm: Range manager for the device address space. |
387 | * lru_lock: Spinlock that protects the buffer+device lru lists and | 437 | * lru_lock: Spinlock that protects the buffer+device lru lists and |
@@ -399,32 +449,21 @@ struct ttm_bo_device { | |||
399 | /* | 449 | /* |
400 | * Constant after bo device init / atomic. | 450 | * Constant after bo device init / atomic. |
401 | */ | 451 | */ |
402 | 452 | struct list_head device_list; | |
403 | struct ttm_mem_global *mem_glob; | 453 | struct ttm_bo_global *glob; |
404 | struct ttm_bo_driver *driver; | 454 | struct ttm_bo_driver *driver; |
405 | struct page *dummy_read_page; | ||
406 | struct ttm_mem_shrink shrink; | ||
407 | |||
408 | size_t ttm_bo_extra_size; | ||
409 | size_t ttm_bo_size; | ||
410 | |||
411 | rwlock_t vm_lock; | 455 | rwlock_t vm_lock; |
456 | struct ttm_mem_type_manager man[TTM_NUM_MEM_TYPES]; | ||
412 | /* | 457 | /* |
413 | * Protected by the vm lock. | 458 | * Protected by the vm lock. |
414 | */ | 459 | */ |
415 | struct ttm_mem_type_manager man[TTM_NUM_MEM_TYPES]; | ||
416 | struct rb_root addr_space_rb; | 460 | struct rb_root addr_space_rb; |
417 | struct drm_mm addr_space_mm; | 461 | struct drm_mm addr_space_mm; |
418 | 462 | ||
419 | /* | 463 | /* |
420 | * Might want to change this to one lock per manager. | 464 | * Protected by the global:lru lock. |
421 | */ | ||
422 | spinlock_t lru_lock; | ||
423 | /* | ||
424 | * Protected by the lru lock. | ||
425 | */ | 465 | */ |
426 | struct list_head ddestroy; | 466 | struct list_head ddestroy; |
427 | struct list_head swap_lru; | ||
428 | 467 | ||
429 | /* | 468 | /* |
430 | * Protected by load / firstopen / lastclose /unload sync. | 469 | * Protected by load / firstopen / lastclose /unload sync. |
@@ -640,6 +679,9 @@ extern int ttm_bo_pci_offset(struct ttm_bo_device *bdev, | |||
640 | unsigned long *bus_offset, | 679 | unsigned long *bus_offset, |
641 | unsigned long *bus_size); | 680 | unsigned long *bus_size); |
642 | 681 | ||
682 | extern void ttm_bo_global_release(struct ttm_global_reference *ref); | ||
683 | extern int ttm_bo_global_init(struct ttm_global_reference *ref); | ||
684 | |||
643 | extern int ttm_bo_device_release(struct ttm_bo_device *bdev); | 685 | extern int ttm_bo_device_release(struct ttm_bo_device *bdev); |
644 | 686 | ||
645 | /** | 687 | /** |
@@ -657,7 +699,7 @@ extern int ttm_bo_device_release(struct ttm_bo_device *bdev); | |||
657 | * !0: Failure. | 699 | * !0: Failure. |
658 | */ | 700 | */ |
659 | extern int ttm_bo_device_init(struct ttm_bo_device *bdev, | 701 | extern int ttm_bo_device_init(struct ttm_bo_device *bdev, |
660 | struct ttm_mem_global *mem_glob, | 702 | struct ttm_bo_global *glob, |
661 | struct ttm_bo_driver *driver, | 703 | struct ttm_bo_driver *driver, |
662 | uint64_t file_page_offset, bool need_dma32); | 704 | uint64_t file_page_offset, bool need_dma32); |
663 | 705 | ||
diff --git a/include/drm/ttm/ttm_memory.h b/include/drm/ttm/ttm_memory.h index d8b8f042c4f1..6983a7cf4da4 100644 --- a/include/drm/ttm/ttm_memory.h +++ b/include/drm/ttm/ttm_memory.h | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/spinlock.h> | 32 | #include <linux/spinlock.h> |
33 | #include <linux/wait.h> | 33 | #include <linux/wait.h> |
34 | #include <linux/errno.h> | 34 | #include <linux/errno.h> |
35 | #include <linux/kobject.h> | ||
35 | 36 | ||
36 | /** | 37 | /** |
37 | * struct ttm_mem_shrink - callback to shrink TTM memory usage. | 38 | * struct ttm_mem_shrink - callback to shrink TTM memory usage. |
@@ -60,34 +61,33 @@ struct ttm_mem_shrink { | |||
60 | * @queue: Wait queue for processes suspended waiting for memory. | 61 | * @queue: Wait queue for processes suspended waiting for memory. |
61 | * @lock: Lock to protect the @shrink - and the memory accounting members, | 62 | * @lock: Lock to protect the @shrink - and the memory accounting members, |
62 | * that is, essentially the whole structure with some exceptions. | 63 | * that is, essentially the whole structure with some exceptions. |
63 | * @emer_memory: Lowmem memory limit available for root. | 64 | * @zones: Array of pointers to accounting zones. |
64 | * @max_memory: Lowmem memory limit available for non-root. | 65 | * @num_zones: Number of populated entries in the @zones array. |
65 | * @swap_limit: Lowmem memory limit where the shrink workqueue kicks in. | 66 | * @zone_kernel: Pointer to the kernel zone. |
66 | * @used_memory: Currently used lowmem memory. | 67 | * @zone_highmem: Pointer to the highmem zone if there is one. |
67 | * @used_total_memory: Currently used total (lowmem + highmem) memory. | 68 | * @zone_dma32: Pointer to the dma32 zone if there is one. |
68 | * @total_memory_swap_limit: Total memory limit where the shrink workqueue | ||
69 | * kicks in. | ||
70 | * @max_total_memory: Total memory available to non-root processes. | ||
71 | * @emer_total_memory: Total memory available to root processes. | ||
72 | * | 69 | * |
73 | * Note that this structure is not per device. It should be global for all | 70 | * Note that this structure is not per device. It should be global for all |
74 | * graphics devices. | 71 | * graphics devices. |
75 | */ | 72 | */ |
76 | 73 | ||
74 | #define TTM_MEM_MAX_ZONES 2 | ||
75 | struct ttm_mem_zone; | ||
77 | struct ttm_mem_global { | 76 | struct ttm_mem_global { |
77 | struct kobject kobj; | ||
78 | struct ttm_mem_shrink *shrink; | 78 | struct ttm_mem_shrink *shrink; |
79 | struct workqueue_struct *swap_queue; | 79 | struct workqueue_struct *swap_queue; |
80 | struct work_struct work; | 80 | struct work_struct work; |
81 | wait_queue_head_t queue; | 81 | wait_queue_head_t queue; |
82 | spinlock_t lock; | 82 | spinlock_t lock; |
83 | uint64_t emer_memory; | 83 | struct ttm_mem_zone *zones[TTM_MEM_MAX_ZONES]; |
84 | uint64_t max_memory; | 84 | unsigned int num_zones; |
85 | uint64_t swap_limit; | 85 | struct ttm_mem_zone *zone_kernel; |
86 | uint64_t used_memory; | 86 | #ifdef CONFIG_HIGHMEM |
87 | uint64_t used_total_memory; | 87 | struct ttm_mem_zone *zone_highmem; |
88 | uint64_t total_memory_swap_limit; | 88 | #else |
89 | uint64_t max_total_memory; | 89 | struct ttm_mem_zone *zone_dma32; |
90 | uint64_t emer_total_memory; | 90 | #endif |
91 | }; | 91 | }; |
92 | 92 | ||
93 | /** | 93 | /** |
@@ -146,8 +146,13 @@ static inline void ttm_mem_unregister_shrink(struct ttm_mem_global *glob, | |||
146 | extern int ttm_mem_global_init(struct ttm_mem_global *glob); | 146 | extern int ttm_mem_global_init(struct ttm_mem_global *glob); |
147 | extern void ttm_mem_global_release(struct ttm_mem_global *glob); | 147 | extern void ttm_mem_global_release(struct ttm_mem_global *glob); |
148 | extern int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory, | 148 | extern int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory, |
149 | bool no_wait, bool interruptible, bool himem); | 149 | bool no_wait, bool interruptible); |
150 | extern void ttm_mem_global_free(struct ttm_mem_global *glob, | 150 | extern void ttm_mem_global_free(struct ttm_mem_global *glob, |
151 | uint64_t amount, bool himem); | 151 | uint64_t amount); |
152 | extern int ttm_mem_global_alloc_page(struct ttm_mem_global *glob, | ||
153 | struct page *page, | ||
154 | bool no_wait, bool interruptible); | ||
155 | extern void ttm_mem_global_free_page(struct ttm_mem_global *glob, | ||
156 | struct page *page); | ||
152 | extern size_t ttm_round_pot(size_t size); | 157 | extern size_t ttm_round_pot(size_t size); |
153 | #endif | 158 | #endif |
diff --git a/include/drm/ttm/ttm_module.h b/include/drm/ttm/ttm_module.h index d1d433834e4f..cf416aee19af 100644 --- a/include/drm/ttm/ttm_module.h +++ b/include/drm/ttm/ttm_module.h | |||
@@ -32,6 +32,7 @@ | |||
32 | #define _TTM_MODULE_H_ | 32 | #define _TTM_MODULE_H_ |
33 | 33 | ||
34 | #include <linux/kernel.h> | 34 | #include <linux/kernel.h> |
35 | struct kobject; | ||
35 | 36 | ||
36 | #define TTM_PFX "[TTM] " | 37 | #define TTM_PFX "[TTM] " |
37 | 38 | ||
@@ -54,5 +55,6 @@ extern void ttm_global_init(void); | |||
54 | extern void ttm_global_release(void); | 55 | extern void ttm_global_release(void); |
55 | extern int ttm_global_item_ref(struct ttm_global_reference *ref); | 56 | extern int ttm_global_item_ref(struct ttm_global_reference *ref); |
56 | extern void ttm_global_item_unref(struct ttm_global_reference *ref); | 57 | extern void ttm_global_item_unref(struct ttm_global_reference *ref); |
58 | extern struct kobject *ttm_get_kobj(void); | ||
57 | 59 | ||
58 | #endif /* _TTM_MODULE_H_ */ | 60 | #endif /* _TTM_MODULE_H_ */ |
diff --git a/include/linux/aio.h b/include/linux/aio.h index 47f7d932a01d..aea219d7d8d1 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
@@ -225,8 +225,6 @@ static inline void exit_aio(struct mm_struct *mm) { } | |||
225 | 225 | ||
226 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) | 226 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) |
227 | 227 | ||
228 | #include <linux/aio_abi.h> | ||
229 | |||
230 | static inline struct kiocb *list_kiocb(struct list_head *h) | 228 | static inline struct kiocb *list_kiocb(struct list_head *h) |
231 | { | 229 | { |
232 | return list_entry(h, struct kiocb, ki_list); | 230 | return list_entry(h, struct kiocb, ki_list); |
diff --git a/include/linux/cyclades.h b/include/linux/cyclades.h index 1fbdea4f08eb..a5049eaf782d 100644 --- a/include/linux/cyclades.h +++ b/include/linux/cyclades.h | |||
@@ -499,6 +499,7 @@ struct cyclades_card { | |||
499 | void __iomem *p9050; | 499 | void __iomem *p9050; |
500 | struct RUNTIME_9060 __iomem *p9060; | 500 | struct RUNTIME_9060 __iomem *p9060; |
501 | } ctl_addr; | 501 | } ctl_addr; |
502 | struct BOARD_CTRL __iomem *board_ctrl; /* cyz specific */ | ||
502 | int irq; | 503 | int irq; |
503 | unsigned int num_chips; /* 0 if card absent, -1 if Z/PCI, else Y */ | 504 | unsigned int num_chips; /* 0 if card absent, -1 if Z/PCI, else Y */ |
504 | unsigned int first_line; /* minor number of first channel on card */ | 505 | unsigned int first_line; /* minor number of first channel on card */ |
@@ -541,6 +542,15 @@ struct cyclades_port { | |||
541 | int magic; | 542 | int magic; |
542 | struct tty_port port; | 543 | struct tty_port port; |
543 | struct cyclades_card *card; | 544 | struct cyclades_card *card; |
545 | union { | ||
546 | struct { | ||
547 | void __iomem *base_addr; | ||
548 | } cyy; | ||
549 | struct { | ||
550 | struct CH_CTRL __iomem *ch_ctrl; | ||
551 | struct BUF_CTRL __iomem *buf_ctrl; | ||
552 | } cyz; | ||
553 | } u; | ||
544 | int line; | 554 | int line; |
545 | int flags; /* defined in tty.h */ | 555 | int flags; /* defined in tty.h */ |
546 | int type; /* UART type */ | 556 | int type; /* UART type */ |
@@ -568,7 +578,6 @@ struct cyclades_port { | |||
568 | struct cyclades_idle_stats idle_stats; | 578 | struct cyclades_idle_stats idle_stats; |
569 | struct cyclades_icount icount; | 579 | struct cyclades_icount icount; |
570 | struct completion shutdown_wait; | 580 | struct completion shutdown_wait; |
571 | wait_queue_head_t delta_msr_wait; | ||
572 | int throttle; | 581 | int throttle; |
573 | }; | 582 | }; |
574 | 583 | ||
diff --git a/include/linux/device.h b/include/linux/device.h index 847b763e40e9..aca31bf7d8ed 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -193,7 +193,7 @@ struct class { | |||
193 | struct kobject *dev_kobj; | 193 | struct kobject *dev_kobj; |
194 | 194 | ||
195 | int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); | 195 | int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); |
196 | char *(*nodename)(struct device *dev); | 196 | char *(*devnode)(struct device *dev, mode_t *mode); |
197 | 197 | ||
198 | void (*class_release)(struct class *class); | 198 | void (*class_release)(struct class *class); |
199 | void (*dev_release)(struct device *dev); | 199 | void (*dev_release)(struct device *dev); |
@@ -298,7 +298,7 @@ struct device_type { | |||
298 | const char *name; | 298 | const char *name; |
299 | const struct attribute_group **groups; | 299 | const struct attribute_group **groups; |
300 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); | 300 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); |
301 | char *(*nodename)(struct device *dev); | 301 | char *(*devnode)(struct device *dev, mode_t *mode); |
302 | void (*release)(struct device *dev); | 302 | void (*release)(struct device *dev); |
303 | 303 | ||
304 | const struct dev_pm_ops *pm; | 304 | const struct dev_pm_ops *pm; |
@@ -487,7 +487,8 @@ extern struct device *device_find_child(struct device *dev, void *data, | |||
487 | extern int device_rename(struct device *dev, char *new_name); | 487 | extern int device_rename(struct device *dev, char *new_name); |
488 | extern int device_move(struct device *dev, struct device *new_parent, | 488 | extern int device_move(struct device *dev, struct device *new_parent, |
489 | enum dpm_order dpm_order); | 489 | enum dpm_order dpm_order); |
490 | extern const char *device_get_nodename(struct device *dev, const char **tmp); | 490 | extern const char *device_get_devnode(struct device *dev, |
491 | mode_t *mode, const char **tmp); | ||
491 | extern void *dev_get_drvdata(const struct device *dev); | 492 | extern void *dev_get_drvdata(const struct device *dev); |
492 | extern void dev_set_drvdata(struct device *dev, void *data); | 493 | extern void dev_set_drvdata(struct device *dev, void *data); |
493 | 494 | ||
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index dc3b1328aaeb..3c0924a18daf 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h | |||
@@ -446,7 +446,6 @@ static inline void unpause_graph_tracing(void) { } | |||
446 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | 446 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ |
447 | 447 | ||
448 | #ifdef CONFIG_TRACING | 448 | #ifdef CONFIG_TRACING |
449 | #include <linux/sched.h> | ||
450 | 449 | ||
451 | /* flags for current->trace */ | 450 | /* flags for current->trace */ |
452 | enum { | 451 | enum { |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 44263cb27121..109d179adb93 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
@@ -142,7 +142,7 @@ struct gendisk { | |||
142 | * disks that can't be partitioned. */ | 142 | * disks that can't be partitioned. */ |
143 | 143 | ||
144 | char disk_name[DISK_NAME_LEN]; /* name of major driver */ | 144 | char disk_name[DISK_NAME_LEN]; /* name of major driver */ |
145 | char *(*nodename)(struct gendisk *gd); | 145 | char *(*devnode)(struct gendisk *gd, mode_t *mode); |
146 | /* Array of pointers to partitions indexed by partno. | 146 | /* Array of pointers to partitions indexed by partno. |
147 | * Protected with matching bdev lock but stat and other | 147 | * Protected with matching bdev lock but stat and other |
148 | * non-critical accesses use RCU. Always access through | 148 | * non-critical accesses use RCU. Always access through |
diff --git a/include/linux/hayesesp.h b/include/linux/hayesesp.h index 940aeb51d53f..92b08cfe4a75 100644 --- a/include/linux/hayesesp.h +++ b/include/linux/hayesesp.h | |||
@@ -96,7 +96,6 @@ struct esp_struct { | |||
96 | int xmit_head; | 96 | int xmit_head; |
97 | int xmit_tail; | 97 | int xmit_tail; |
98 | int xmit_cnt; | 98 | int xmit_cnt; |
99 | wait_queue_head_t delta_msr_wait; | ||
100 | wait_queue_head_t break_wait; | 99 | wait_queue_head_t break_wait; |
101 | struct async_icount icount; /* kernel counters for the 4 input interrupts */ | 100 | struct async_icount icount; /* kernel counters for the 4 input interrupts */ |
102 | struct hayes_esp_config config; /* port configuration */ | 101 | struct hayes_esp_config config; /* port configuration */ |
diff --git a/include/linux/kfifo.h b/include/linux/kfifo.h index 29f62e1733ff..ad6bdf5a5970 100644 --- a/include/linux/kfifo.h +++ b/include/linux/kfifo.h | |||
@@ -38,7 +38,7 @@ extern struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, | |||
38 | spinlock_t *lock); | 38 | spinlock_t *lock); |
39 | extern void kfifo_free(struct kfifo *fifo); | 39 | extern void kfifo_free(struct kfifo *fifo); |
40 | extern unsigned int __kfifo_put(struct kfifo *fifo, | 40 | extern unsigned int __kfifo_put(struct kfifo *fifo, |
41 | unsigned char *buffer, unsigned int len); | 41 | const unsigned char *buffer, unsigned int len); |
42 | extern unsigned int __kfifo_get(struct kfifo *fifo, | 42 | extern unsigned int __kfifo_get(struct kfifo *fifo, |
43 | unsigned char *buffer, unsigned int len); | 43 | unsigned char *buffer, unsigned int len); |
44 | 44 | ||
@@ -77,7 +77,7 @@ static inline void kfifo_reset(struct kfifo *fifo) | |||
77 | * bytes copied. | 77 | * bytes copied. |
78 | */ | 78 | */ |
79 | static inline unsigned int kfifo_put(struct kfifo *fifo, | 79 | static inline unsigned int kfifo_put(struct kfifo *fifo, |
80 | unsigned char *buffer, unsigned int len) | 80 | const unsigned char *buffer, unsigned int len) |
81 | { | 81 | { |
82 | unsigned long flags; | 82 | unsigned long flags; |
83 | unsigned int ret; | 83 | unsigned int ret; |
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h index 052117744629..adaf3c15e449 100644 --- a/include/linux/miscdevice.h +++ b/include/linux/miscdevice.h | |||
@@ -41,7 +41,8 @@ struct miscdevice { | |||
41 | struct list_head list; | 41 | struct list_head list; |
42 | struct device *parent; | 42 | struct device *parent; |
43 | struct device *this_device; | 43 | struct device *this_device; |
44 | const char *devnode; | 44 | const char *nodename; |
45 | mode_t mode; | ||
45 | }; | 46 | }; |
46 | 47 | ||
47 | extern int misc_register(struct miscdevice * misc); | 48 | extern int misc_register(struct miscdevice * misc); |
diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h index 13f126c89ae8..ada779f24178 100644 --- a/include/linux/page_cgroup.h +++ b/include/linux/page_cgroup.h | |||
@@ -105,14 +105,14 @@ static inline void __init page_cgroup_init_flatmem(void) | |||
105 | 105 | ||
106 | #endif | 106 | #endif |
107 | 107 | ||
108 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP | ||
109 | #include <linux/swap.h> | 108 | #include <linux/swap.h> |
109 | |||
110 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP | ||
110 | extern unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id); | 111 | extern unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id); |
111 | extern unsigned short lookup_swap_cgroup(swp_entry_t ent); | 112 | extern unsigned short lookup_swap_cgroup(swp_entry_t ent); |
112 | extern int swap_cgroup_swapon(int type, unsigned long max_pages); | 113 | extern int swap_cgroup_swapon(int type, unsigned long max_pages); |
113 | extern void swap_cgroup_swapoff(int type); | 114 | extern void swap_cgroup_swapoff(int type); |
114 | #else | 115 | #else |
115 | #include <linux/swap.h> | ||
116 | 116 | ||
117 | static inline | 117 | static inline |
118 | unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id) | 118 | unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id) |
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h index 972f90d7a32f..bd341007c4fc 100644 --- a/include/linux/perf_counter.h +++ b/include/linux/perf_counter.h | |||
@@ -199,10 +199,14 @@ struct perf_counter_attr { | |||
199 | inherit_stat : 1, /* per task counts */ | 199 | inherit_stat : 1, /* per task counts */ |
200 | enable_on_exec : 1, /* next exec enables */ | 200 | enable_on_exec : 1, /* next exec enables */ |
201 | task : 1, /* trace fork/exit */ | 201 | task : 1, /* trace fork/exit */ |
202 | watermark : 1, /* wakeup_watermark */ | ||
202 | 203 | ||
203 | __reserved_1 : 50; | 204 | __reserved_1 : 49; |
204 | 205 | ||
205 | __u32 wakeup_events; /* wakeup every n events */ | 206 | union { |
207 | __u32 wakeup_events; /* wakeup every n events */ | ||
208 | __u32 wakeup_watermark; /* bytes before wakeup */ | ||
209 | }; | ||
206 | __u32 __reserved_2; | 210 | __u32 __reserved_2; |
207 | 211 | ||
208 | __u64 __reserved_3; | 212 | __u64 __reserved_3; |
@@ -332,6 +336,7 @@ enum perf_event_type { | |||
332 | * struct perf_event_header header; | 336 | * struct perf_event_header header; |
333 | * u32 pid, ppid; | 337 | * u32 pid, ppid; |
334 | * u32 tid, ptid; | 338 | * u32 tid, ptid; |
339 | * u64 time; | ||
335 | * }; | 340 | * }; |
336 | */ | 341 | */ |
337 | PERF_EVENT_EXIT = 4, | 342 | PERF_EVENT_EXIT = 4, |
@@ -352,6 +357,7 @@ enum perf_event_type { | |||
352 | * struct perf_event_header header; | 357 | * struct perf_event_header header; |
353 | * u32 pid, ppid; | 358 | * u32 pid, ppid; |
354 | * u32 tid, ptid; | 359 | * u32 tid, ptid; |
360 | * { u64 time; } && PERF_SAMPLE_TIME | ||
355 | * }; | 361 | * }; |
356 | */ | 362 | */ |
357 | PERF_EVENT_FORK = 7, | 363 | PERF_EVENT_FORK = 7, |
@@ -521,6 +527,8 @@ struct perf_mmap_data { | |||
521 | atomic_t wakeup; /* needs a wakeup */ | 527 | atomic_t wakeup; /* needs a wakeup */ |
522 | atomic_t lost; /* nr records lost */ | 528 | atomic_t lost; /* nr records lost */ |
523 | 529 | ||
530 | long watermark; /* wakeup watermark */ | ||
531 | |||
524 | struct perf_counter_mmap_page *user_page; | 532 | struct perf_counter_mmap_page *user_page; |
525 | void *data_pages[0]; | 533 | void *data_pages[0]; |
526 | }; | 534 | }; |
@@ -685,6 +693,17 @@ struct perf_cpu_context { | |||
685 | int recursion[4]; | 693 | int recursion[4]; |
686 | }; | 694 | }; |
687 | 695 | ||
696 | struct perf_output_handle { | ||
697 | struct perf_counter *counter; | ||
698 | struct perf_mmap_data *data; | ||
699 | unsigned long head; | ||
700 | unsigned long offset; | ||
701 | int nmi; | ||
702 | int sample; | ||
703 | int locked; | ||
704 | unsigned long flags; | ||
705 | }; | ||
706 | |||
688 | #ifdef CONFIG_PERF_COUNTERS | 707 | #ifdef CONFIG_PERF_COUNTERS |
689 | 708 | ||
690 | /* | 709 | /* |
@@ -716,16 +735,38 @@ extern int hw_perf_group_sched_in(struct perf_counter *group_leader, | |||
716 | extern void perf_counter_update_userpage(struct perf_counter *counter); | 735 | extern void perf_counter_update_userpage(struct perf_counter *counter); |
717 | 736 | ||
718 | struct perf_sample_data { | 737 | struct perf_sample_data { |
719 | struct pt_regs *regs; | 738 | u64 type; |
739 | |||
740 | u64 ip; | ||
741 | struct { | ||
742 | u32 pid; | ||
743 | u32 tid; | ||
744 | } tid_entry; | ||
745 | u64 time; | ||
720 | u64 addr; | 746 | u64 addr; |
747 | u64 id; | ||
748 | u64 stream_id; | ||
749 | struct { | ||
750 | u32 cpu; | ||
751 | u32 reserved; | ||
752 | } cpu_entry; | ||
721 | u64 period; | 753 | u64 period; |
754 | struct perf_callchain_entry *callchain; | ||
722 | struct perf_raw_record *raw; | 755 | struct perf_raw_record *raw; |
723 | }; | 756 | }; |
724 | 757 | ||
758 | extern void perf_output_sample(struct perf_output_handle *handle, | ||
759 | struct perf_event_header *header, | ||
760 | struct perf_sample_data *data, | ||
761 | struct perf_counter *counter); | ||
762 | extern void perf_prepare_sample(struct perf_event_header *header, | ||
763 | struct perf_sample_data *data, | ||
764 | struct perf_counter *counter, | ||
765 | struct pt_regs *regs); | ||
766 | |||
725 | extern int perf_counter_overflow(struct perf_counter *counter, int nmi, | 767 | extern int perf_counter_overflow(struct perf_counter *counter, int nmi, |
726 | struct perf_sample_data *data); | 768 | struct perf_sample_data *data, |
727 | extern void perf_counter_output(struct perf_counter *counter, int nmi, | 769 | struct pt_regs *regs); |
728 | struct perf_sample_data *data); | ||
729 | 770 | ||
730 | /* | 771 | /* |
731 | * Return 1 for a software counter, 0 for a hardware counter | 772 | * Return 1 for a software counter, 0 for a hardware counter |
@@ -775,6 +816,12 @@ extern void perf_tpcounter_event(int event_id, u64 addr, u64 count, | |||
775 | #define perf_instruction_pointer(regs) instruction_pointer(regs) | 816 | #define perf_instruction_pointer(regs) instruction_pointer(regs) |
776 | #endif | 817 | #endif |
777 | 818 | ||
819 | extern int perf_output_begin(struct perf_output_handle *handle, | ||
820 | struct perf_counter *counter, unsigned int size, | ||
821 | int nmi, int sample); | ||
822 | extern void perf_output_end(struct perf_output_handle *handle); | ||
823 | extern void perf_output_copy(struct perf_output_handle *handle, | ||
824 | const void *buf, unsigned int len); | ||
778 | #else | 825 | #else |
779 | static inline void | 826 | static inline void |
780 | perf_counter_task_sched_in(struct task_struct *task, int cpu) { } | 827 | perf_counter_task_sched_in(struct task_struct *task, int cpu) { } |
@@ -801,7 +848,28 @@ static inline void perf_counter_mmap(struct vm_area_struct *vma) { } | |||
801 | static inline void perf_counter_comm(struct task_struct *tsk) { } | 848 | static inline void perf_counter_comm(struct task_struct *tsk) { } |
802 | static inline void perf_counter_fork(struct task_struct *tsk) { } | 849 | static inline void perf_counter_fork(struct task_struct *tsk) { } |
803 | static inline void perf_counter_init(void) { } | 850 | static inline void perf_counter_init(void) { } |
851 | |||
852 | static inline int | ||
853 | perf_output_begin(struct perf_output_handle *handle, struct perf_counter *c, | ||
854 | unsigned int size, int nmi, int sample) { } | ||
855 | static inline void perf_output_end(struct perf_output_handle *handle) { } | ||
856 | static inline void | ||
857 | perf_output_copy(struct perf_output_handle *handle, | ||
858 | const void *buf, unsigned int len) { } | ||
859 | static inline void | ||
860 | perf_output_sample(struct perf_output_handle *handle, | ||
861 | struct perf_event_header *header, | ||
862 | struct perf_sample_data *data, | ||
863 | struct perf_counter *counter) { } | ||
864 | static inline void | ||
865 | perf_prepare_sample(struct perf_event_header *header, | ||
866 | struct perf_sample_data *data, | ||
867 | struct perf_counter *counter, | ||
868 | struct pt_regs *regs) { } | ||
804 | #endif | 869 | #endif |
805 | 870 | ||
871 | #define perf_output_put(handle, x) \ | ||
872 | perf_output_copy((handle), &(x), sizeof(x)) | ||
873 | |||
806 | #endif /* __KERNEL__ */ | 874 | #endif /* __KERNEL__ */ |
807 | #endif /* _LINUX_PERF_COUNTER_H */ | 875 | #endif /* _LINUX_PERF_COUNTER_H */ |
diff --git a/include/linux/serial.h b/include/linux/serial.h index e5bb75a63802..c8613c3ff9d3 100644 --- a/include/linux/serial.h +++ b/include/linux/serial.h | |||
@@ -122,6 +122,7 @@ struct serial_uart_config { | |||
122 | 122 | ||
123 | /* Internal flags used only by kernel */ | 123 | /* Internal flags used only by kernel */ |
124 | #define ASYNCB_INITIALIZED 31 /* Serial port was initialized */ | 124 | #define ASYNCB_INITIALIZED 31 /* Serial port was initialized */ |
125 | #define ASYNCB_SUSPENDED 30 /* Serial port is suspended */ | ||
125 | #define ASYNCB_NORMAL_ACTIVE 29 /* Normal device is active */ | 126 | #define ASYNCB_NORMAL_ACTIVE 29 /* Normal device is active */ |
126 | #define ASYNCB_BOOT_AUTOCONF 28 /* Autoconfigure port on bootup */ | 127 | #define ASYNCB_BOOT_AUTOCONF 28 /* Autoconfigure port on bootup */ |
127 | #define ASYNCB_CLOSING 27 /* Serial port is closing */ | 128 | #define ASYNCB_CLOSING 27 /* Serial port is closing */ |
@@ -133,6 +134,7 @@ struct serial_uart_config { | |||
133 | #define ASYNCB_FIRST_KERNEL 22 | 134 | #define ASYNCB_FIRST_KERNEL 22 |
134 | 135 | ||
135 | #define ASYNC_HUP_NOTIFY (1U << ASYNCB_HUP_NOTIFY) | 136 | #define ASYNC_HUP_NOTIFY (1U << ASYNCB_HUP_NOTIFY) |
137 | #define ASYNC_SUSPENDED (1U << ASYNCB_SUSPENDED) | ||
136 | #define ASYNC_FOURPORT (1U << ASYNCB_FOURPORT) | 138 | #define ASYNC_FOURPORT (1U << ASYNCB_FOURPORT) |
137 | #define ASYNC_SAK (1U << ASYNCB_SAK) | 139 | #define ASYNC_SAK (1U << ASYNCB_SAK) |
138 | #define ASYNC_SPLIT_TERMIOS (1U << ASYNCB_SPLIT_TERMIOS) | 140 | #define ASYNC_SPLIT_TERMIOS (1U << ASYNCB_SPLIT_TERMIOS) |
diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h index d4d2a78ad43e..fb46aba11fb5 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h | |||
@@ -22,6 +22,7 @@ struct plat_serial8250_port { | |||
22 | void __iomem *membase; /* ioremap cookie or NULL */ | 22 | void __iomem *membase; /* ioremap cookie or NULL */ |
23 | resource_size_t mapbase; /* resource base */ | 23 | resource_size_t mapbase; /* resource base */ |
24 | unsigned int irq; /* interrupt number */ | 24 | unsigned int irq; /* interrupt number */ |
25 | unsigned long irqflags; /* request_irq flags */ | ||
25 | unsigned int uartclk; /* UART clock rate */ | 26 | unsigned int uartclk; /* UART clock rate */ |
26 | void *private_data; | 27 | void *private_data; |
27 | unsigned char regshift; /* register shift */ | 28 | unsigned char regshift; /* register shift */ |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 23d2fb051f97..d58e460844dd 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
@@ -20,6 +20,8 @@ | |||
20 | #ifndef LINUX_SERIAL_CORE_H | 20 | #ifndef LINUX_SERIAL_CORE_H |
21 | #define LINUX_SERIAL_CORE_H | 21 | #define LINUX_SERIAL_CORE_H |
22 | 22 | ||
23 | #include <linux/serial.h> | ||
24 | |||
23 | /* | 25 | /* |
24 | * The type definitions. These are from Ted Ts'o's serial.h | 26 | * The type definitions. These are from Ted Ts'o's serial.h |
25 | */ | 27 | */ |
@@ -186,7 +188,6 @@ | |||
186 | #include <linux/sysrq.h> | 188 | #include <linux/sysrq.h> |
187 | 189 | ||
188 | struct uart_port; | 190 | struct uart_port; |
189 | struct uart_info; | ||
190 | struct serial_struct; | 191 | struct serial_struct; |
191 | struct device; | 192 | struct device; |
192 | 193 | ||
@@ -265,6 +266,7 @@ struct uart_port { | |||
265 | unsigned int (*serial_in)(struct uart_port *, int); | 266 | unsigned int (*serial_in)(struct uart_port *, int); |
266 | void (*serial_out)(struct uart_port *, int, int); | 267 | void (*serial_out)(struct uart_port *, int, int); |
267 | unsigned int irq; /* irq number */ | 268 | unsigned int irq; /* irq number */ |
269 | unsigned long irqflags; /* irq flags */ | ||
268 | unsigned int uartclk; /* base uart clock */ | 270 | unsigned int uartclk; /* base uart clock */ |
269 | unsigned int fifosize; /* tx fifo size */ | 271 | unsigned int fifosize; /* tx fifo size */ |
270 | unsigned char x_char; /* xon/xoff char */ | 272 | unsigned char x_char; /* xon/xoff char */ |
@@ -283,7 +285,7 @@ struct uart_port { | |||
283 | 285 | ||
284 | unsigned int read_status_mask; /* driver specific */ | 286 | unsigned int read_status_mask; /* driver specific */ |
285 | unsigned int ignore_status_mask; /* driver specific */ | 287 | unsigned int ignore_status_mask; /* driver specific */ |
286 | struct uart_info *info; /* pointer to parent info */ | 288 | struct uart_state *state; /* pointer to parent state */ |
287 | struct uart_icount icount; /* statistics */ | 289 | struct uart_icount icount; /* statistics */ |
288 | 290 | ||
289 | struct console *cons; /* struct console, if any */ | 291 | struct console *cons; /* struct console, if any */ |
@@ -335,52 +337,16 @@ struct uart_port { | |||
335 | }; | 337 | }; |
336 | 338 | ||
337 | /* | 339 | /* |
338 | * This is the state information which is only valid when the port | ||
339 | * is open; it may be cleared the core driver once the device has | ||
340 | * been closed. Either the low level driver or the core can modify | ||
341 | * stuff here. | ||
342 | */ | ||
343 | typedef unsigned int __bitwise__ uif_t; | ||
344 | |||
345 | struct uart_info { | ||
346 | struct tty_port port; | ||
347 | struct circ_buf xmit; | ||
348 | uif_t flags; | ||
349 | |||
350 | /* | ||
351 | * Definitions for info->flags. These are _private_ to serial_core, and | ||
352 | * are specific to this structure. They may be queried by low level drivers. | ||
353 | * | ||
354 | * FIXME: use the ASY_ definitions | ||
355 | */ | ||
356 | #define UIF_CHECK_CD ((__force uif_t) (1 << 25)) | ||
357 | #define UIF_CTS_FLOW ((__force uif_t) (1 << 26)) | ||
358 | #define UIF_NORMAL_ACTIVE ((__force uif_t) (1 << 29)) | ||
359 | #define UIF_INITIALIZED ((__force uif_t) (1 << 31)) | ||
360 | #define UIF_SUSPENDED ((__force uif_t) (1 << 30)) | ||
361 | |||
362 | struct tasklet_struct tlet; | ||
363 | wait_queue_head_t delta_msr_wait; | ||
364 | }; | ||
365 | |||
366 | /* | ||
367 | * This is the state information which is persistent across opens. | 340 | * This is the state information which is persistent across opens. |
368 | * The low level driver must not to touch any elements contained | ||
369 | * within. | ||
370 | */ | 341 | */ |
371 | struct uart_state { | 342 | struct uart_state { |
372 | unsigned int close_delay; /* msec */ | 343 | struct tty_port port; |
373 | unsigned int closing_wait; /* msec */ | ||
374 | |||
375 | #define USF_CLOSING_WAIT_INF (0) | ||
376 | #define USF_CLOSING_WAIT_NONE (~0U) | ||
377 | 344 | ||
378 | int count; | ||
379 | int pm_state; | 345 | int pm_state; |
380 | struct uart_info info; | 346 | struct circ_buf xmit; |
381 | struct uart_port *port; | ||
382 | 347 | ||
383 | struct mutex mutex; | 348 | struct tasklet_struct tlet; |
349 | struct uart_port *uart_port; | ||
384 | }; | 350 | }; |
385 | 351 | ||
386 | #define UART_XMIT_SIZE PAGE_SIZE | 352 | #define UART_XMIT_SIZE PAGE_SIZE |
@@ -461,7 +427,7 @@ int uart_resume_port(struct uart_driver *reg, struct uart_port *port); | |||
461 | 427 | ||
462 | static inline int uart_tx_stopped(struct uart_port *port) | 428 | static inline int uart_tx_stopped(struct uart_port *port) |
463 | { | 429 | { |
464 | struct tty_struct *tty = port->info->port.tty; | 430 | struct tty_struct *tty = port->state->port.tty; |
465 | if(tty->stopped || tty->hw_stopped) | 431 | if(tty->stopped || tty->hw_stopped) |
466 | return 1; | 432 | return 1; |
467 | return 0; | 433 | return 0; |
@@ -476,7 +442,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) | |||
476 | #ifdef SUPPORT_SYSRQ | 442 | #ifdef SUPPORT_SYSRQ |
477 | if (port->sysrq) { | 443 | if (port->sysrq) { |
478 | if (ch && time_before(jiffies, port->sysrq)) { | 444 | if (ch && time_before(jiffies, port->sysrq)) { |
479 | handle_sysrq(ch, port->info->port.tty); | 445 | handle_sysrq(ch, port->state->port.tty); |
480 | port->sysrq = 0; | 446 | port->sysrq = 0; |
481 | return 1; | 447 | return 1; |
482 | } | 448 | } |
@@ -494,7 +460,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) | |||
494 | */ | 460 | */ |
495 | static inline int uart_handle_break(struct uart_port *port) | 461 | static inline int uart_handle_break(struct uart_port *port) |
496 | { | 462 | { |
497 | struct uart_info *info = port->info; | 463 | struct uart_state *state = port->state; |
498 | #ifdef SUPPORT_SYSRQ | 464 | #ifdef SUPPORT_SYSRQ |
499 | if (port->cons && port->cons->index == port->line) { | 465 | if (port->cons && port->cons->index == port->line) { |
500 | if (!port->sysrq) { | 466 | if (!port->sysrq) { |
@@ -505,7 +471,7 @@ static inline int uart_handle_break(struct uart_port *port) | |||
505 | } | 471 | } |
506 | #endif | 472 | #endif |
507 | if (port->flags & UPF_SAK) | 473 | if (port->flags & UPF_SAK) |
508 | do_SAK(info->port.tty); | 474 | do_SAK(state->port.tty); |
509 | return 0; | 475 | return 0; |
510 | } | 476 | } |
511 | 477 | ||
@@ -515,22 +481,23 @@ static inline int uart_handle_break(struct uart_port *port) | |||
515 | * @status: new carrier detect status, nonzero if active | 481 | * @status: new carrier detect status, nonzero if active |
516 | */ | 482 | */ |
517 | static inline void | 483 | static inline void |
518 | uart_handle_dcd_change(struct uart_port *port, unsigned int status) | 484 | uart_handle_dcd_change(struct uart_port *uport, unsigned int status) |
519 | { | 485 | { |
520 | struct uart_info *info = port->info; | 486 | struct uart_state *state = uport->state; |
487 | struct tty_port *port = &state->port; | ||
521 | 488 | ||
522 | port->icount.dcd++; | 489 | uport->icount.dcd++; |
523 | 490 | ||
524 | #ifdef CONFIG_HARD_PPS | 491 | #ifdef CONFIG_HARD_PPS |
525 | if ((port->flags & UPF_HARDPPS_CD) && status) | 492 | if ((uport->flags & UPF_HARDPPS_CD) && status) |
526 | hardpps(); | 493 | hardpps(); |
527 | #endif | 494 | #endif |
528 | 495 | ||
529 | if (info->flags & UIF_CHECK_CD) { | 496 | if (port->flags & ASYNC_CHECK_CD) { |
530 | if (status) | 497 | if (status) |
531 | wake_up_interruptible(&info->port.open_wait); | 498 | wake_up_interruptible(&port->open_wait); |
532 | else if (info->port.tty) | 499 | else if (port->tty) |
533 | tty_hangup(info->port.tty); | 500 | tty_hangup(port->tty); |
534 | } | 501 | } |
535 | } | 502 | } |
536 | 503 | ||
@@ -540,24 +507,24 @@ uart_handle_dcd_change(struct uart_port *port, unsigned int status) | |||
540 | * @status: new clear to send status, nonzero if active | 507 | * @status: new clear to send status, nonzero if active |
541 | */ | 508 | */ |
542 | static inline void | 509 | static inline void |
543 | uart_handle_cts_change(struct uart_port *port, unsigned int status) | 510 | uart_handle_cts_change(struct uart_port *uport, unsigned int status) |
544 | { | 511 | { |
545 | struct uart_info *info = port->info; | 512 | struct tty_port *port = &uport->state->port; |
546 | struct tty_struct *tty = info->port.tty; | 513 | struct tty_struct *tty = port->tty; |
547 | 514 | ||
548 | port->icount.cts++; | 515 | uport->icount.cts++; |
549 | 516 | ||
550 | if (info->flags & UIF_CTS_FLOW) { | 517 | if (port->flags & ASYNC_CTS_FLOW) { |
551 | if (tty->hw_stopped) { | 518 | if (tty->hw_stopped) { |
552 | if (status) { | 519 | if (status) { |
553 | tty->hw_stopped = 0; | 520 | tty->hw_stopped = 0; |
554 | port->ops->start_tx(port); | 521 | uport->ops->start_tx(uport); |
555 | uart_write_wakeup(port); | 522 | uart_write_wakeup(uport); |
556 | } | 523 | } |
557 | } else { | 524 | } else { |
558 | if (!status) { | 525 | if (!status) { |
559 | tty->hw_stopped = 1; | 526 | tty->hw_stopped = 1; |
560 | port->ops->stop_tx(port); | 527 | uport->ops->stop_tx(uport); |
561 | } | 528 | } |
562 | } | 529 | } |
563 | } | 530 | } |
@@ -569,7 +536,7 @@ static inline void | |||
569 | uart_insert_char(struct uart_port *port, unsigned int status, | 536 | uart_insert_char(struct uart_port *port, unsigned int status, |
570 | unsigned int overrun, unsigned int ch, unsigned int flag) | 537 | unsigned int overrun, unsigned int ch, unsigned int flag) |
571 | { | 538 | { |
572 | struct tty_struct *tty = port->info->port.tty; | 539 | struct tty_struct *tty = port->state->port.tty; |
573 | 540 | ||
574 | if ((status & port->ignore_status_mask & ~overrun) == 0) | 541 | if ((status & port->ignore_status_mask & ~overrun) == 0) |
575 | tty_insert_flip_char(tty, ch, flag); | 542 | tty_insert_flip_char(tty, ch, flag); |
diff --git a/include/linux/tty.h b/include/linux/tty.h index a916a318004e..f0f43d08d8b8 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -187,7 +187,12 @@ struct tty_port; | |||
187 | struct tty_port_operations { | 187 | struct tty_port_operations { |
188 | /* Return 1 if the carrier is raised */ | 188 | /* Return 1 if the carrier is raised */ |
189 | int (*carrier_raised)(struct tty_port *port); | 189 | int (*carrier_raised)(struct tty_port *port); |
190 | /* Control the DTR line */ | ||
190 | void (*dtr_rts)(struct tty_port *port, int raise); | 191 | void (*dtr_rts)(struct tty_port *port, int raise); |
192 | /* Called when the last close completes or a hangup finishes | ||
193 | IFF the port was initialized. Do not use to free resources */ | ||
194 | void (*shutdown)(struct tty_port *port); | ||
195 | void (*drop)(struct tty_port *port); | ||
191 | }; | 196 | }; |
192 | 197 | ||
193 | struct tty_port { | 198 | struct tty_port { |
@@ -198,11 +203,12 @@ struct tty_port { | |||
198 | int count; /* Usage count */ | 203 | int count; /* Usage count */ |
199 | wait_queue_head_t open_wait; /* Open waiters */ | 204 | wait_queue_head_t open_wait; /* Open waiters */ |
200 | wait_queue_head_t close_wait; /* Close waiters */ | 205 | wait_queue_head_t close_wait; /* Close waiters */ |
206 | wait_queue_head_t delta_msr_wait; /* Modem status change */ | ||
201 | unsigned long flags; /* TTY flags ASY_*/ | 207 | unsigned long flags; /* TTY flags ASY_*/ |
202 | struct mutex mutex; /* Locking */ | 208 | struct mutex mutex; /* Locking */ |
203 | unsigned char *xmit_buf; /* Optional buffer */ | 209 | unsigned char *xmit_buf; /* Optional buffer */ |
204 | int close_delay; /* Close port delay */ | 210 | unsigned int close_delay; /* Close port delay */ |
205 | int closing_wait; /* Delay for output */ | 211 | unsigned int closing_wait; /* Delay for output */ |
206 | int drain_delay; /* Set to zero if no pure time | 212 | int drain_delay; /* Set to zero if no pure time |
207 | based drain is needed else | 213 | based drain is needed else |
208 | set to size of fifo */ | 214 | set to size of fifo */ |
@@ -459,6 +465,12 @@ extern int tty_port_block_til_ready(struct tty_port *port, | |||
459 | extern int tty_port_close_start(struct tty_port *port, | 465 | extern int tty_port_close_start(struct tty_port *port, |
460 | struct tty_struct *tty, struct file *filp); | 466 | struct tty_struct *tty, struct file *filp); |
461 | extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty); | 467 | extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty); |
468 | extern void tty_port_close(struct tty_port *port, | ||
469 | struct tty_struct *tty, struct file *filp); | ||
470 | extern inline int tty_port_users(struct tty_port *port) | ||
471 | { | ||
472 | return port->count + port->blocked_open; | ||
473 | } | ||
462 | 474 | ||
463 | extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc); | 475 | extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc); |
464 | extern int tty_unregister_ldisc(int disc); | 476 | extern int tty_unregister_ldisc(int disc); |
@@ -524,5 +536,8 @@ extern int pcxe_open(struct tty_struct *tty, struct file *filp); | |||
524 | extern int vt_ioctl(struct tty_struct *tty, struct file *file, | 536 | extern int vt_ioctl(struct tty_struct *tty, struct file *file, |
525 | unsigned int cmd, unsigned long arg); | 537 | unsigned int cmd, unsigned long arg); |
526 | 538 | ||
539 | extern long vt_compat_ioctl(struct tty_struct *tty, struct file * file, | ||
540 | unsigned int cmd, unsigned long arg); | ||
541 | |||
527 | #endif /* __KERNEL__ */ | 542 | #endif /* __KERNEL__ */ |
528 | #endif | 543 | #endif |
diff --git a/include/linux/usb.h b/include/linux/usb.h index b1e3c2fbfe11..a8fe05f224e5 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -922,7 +922,7 @@ extern struct bus_type usb_bus_type; | |||
922 | /** | 922 | /** |
923 | * struct usb_class_driver - identifies a USB driver that wants to use the USB major number | 923 | * struct usb_class_driver - identifies a USB driver that wants to use the USB major number |
924 | * @name: the usb class device name for this driver. Will show up in sysfs. | 924 | * @name: the usb class device name for this driver. Will show up in sysfs. |
925 | * @nodename: Callback to provide a naming hint for a possible | 925 | * @devnode: Callback to provide a naming hint for a possible |
926 | * device node to create. | 926 | * device node to create. |
927 | * @fops: pointer to the struct file_operations of this driver. | 927 | * @fops: pointer to the struct file_operations of this driver. |
928 | * @minor_base: the start of the minor range for this driver. | 928 | * @minor_base: the start of the minor range for this driver. |
@@ -933,7 +933,7 @@ extern struct bus_type usb_bus_type; | |||
933 | */ | 933 | */ |
934 | struct usb_class_driver { | 934 | struct usb_class_driver { |
935 | char *name; | 935 | char *name; |
936 | char *(*nodename)(struct device *dev); | 936 | char *(*devnode)(struct device *dev, mode_t *mode); |
937 | const struct file_operations *fops; | 937 | const struct file_operations *fops; |
938 | int minor_base; | 938 | int minor_base; |
939 | }; | 939 | }; |
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 0ec50ba62139..7b85e327af91 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h | |||
@@ -238,9 +238,8 @@ struct usb_serial_driver { | |||
238 | int (*resume)(struct usb_serial *serial); | 238 | int (*resume)(struct usb_serial *serial); |
239 | 239 | ||
240 | /* serial function calls */ | 240 | /* serial function calls */ |
241 | /* Called by console with tty = NULL and by tty */ | 241 | /* Called by console and by the tty layer */ |
242 | int (*open)(struct tty_struct *tty, | 242 | int (*open)(struct tty_struct *tty, struct usb_serial_port *port); |
243 | struct usb_serial_port *port, struct file *filp); | ||
244 | void (*close)(struct usb_serial_port *port); | 243 | void (*close)(struct usb_serial_port *port); |
245 | int (*write)(struct tty_struct *tty, struct usb_serial_port *port, | 244 | int (*write)(struct tty_struct *tty, struct usb_serial_port *port, |
246 | const unsigned char *buf, int count); | 245 | const unsigned char *buf, int count); |
@@ -261,6 +260,9 @@ struct usb_serial_driver { | |||
261 | be an attached tty at this point */ | 260 | be an attached tty at this point */ |
262 | void (*dtr_rts)(struct usb_serial_port *port, int on); | 261 | void (*dtr_rts)(struct usb_serial_port *port, int on); |
263 | int (*carrier_raised)(struct usb_serial_port *port); | 262 | int (*carrier_raised)(struct usb_serial_port *port); |
263 | /* Called by the usb serial hooks to allow the user to rework the | ||
264 | termios state */ | ||
265 | void (*init_termios)(struct tty_struct *tty); | ||
264 | /* USB events */ | 266 | /* USB events */ |
265 | void (*read_int_callback)(struct urb *urb); | 267 | void (*read_int_callback)(struct urb *urb); |
266 | void (*write_int_callback)(struct urb *urb); | 268 | void (*write_int_callback)(struct urb *urb); |
@@ -300,7 +302,7 @@ static inline void usb_serial_console_disconnect(struct usb_serial *serial) {} | |||
300 | extern struct usb_serial *usb_serial_get_by_index(unsigned int minor); | 302 | extern struct usb_serial *usb_serial_get_by_index(unsigned int minor); |
301 | extern void usb_serial_put(struct usb_serial *serial); | 303 | extern void usb_serial_put(struct usb_serial *serial); |
302 | extern int usb_serial_generic_open(struct tty_struct *tty, | 304 | extern int usb_serial_generic_open(struct tty_struct *tty, |
303 | struct usb_serial_port *port, struct file *filp); | 305 | struct usb_serial_port *port); |
304 | extern int usb_serial_generic_write(struct tty_struct *tty, | 306 | extern int usb_serial_generic_write(struct tty_struct *tty, |
305 | struct usb_serial_port *port, const unsigned char *buf, int count); | 307 | struct usb_serial_port *port, const unsigned char *buf, int count); |
306 | extern void usb_serial_generic_close(struct usb_serial_port *port); | 308 | extern void usb_serial_generic_close(struct usb_serial_port *port); |
diff --git a/include/linux/vt.h b/include/linux/vt.h index 02c1c0288770..7afca0d72139 100644 --- a/include/linux/vt.h +++ b/include/linux/vt.h | |||
@@ -1,17 +1,6 @@ | |||
1 | #ifndef _LINUX_VT_H | 1 | #ifndef _LINUX_VT_H |
2 | #define _LINUX_VT_H | 2 | #define _LINUX_VT_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | ||
5 | struct notifier_block; | ||
6 | |||
7 | struct vt_notifier_param { | ||
8 | struct vc_data *vc; /* VC on which the update happened */ | ||
9 | unsigned int c; /* Printed char */ | ||
10 | }; | ||
11 | |||
12 | extern int register_vt_notifier(struct notifier_block *nb); | ||
13 | extern int unregister_vt_notifier(struct notifier_block *nb); | ||
14 | #endif | ||
15 | 4 | ||
16 | /* | 5 | /* |
17 | * These constants are also useful for user-level apps (e.g., VC | 6 | * These constants are also useful for user-level apps (e.g., VC |
@@ -74,4 +63,25 @@ struct vt_consize { | |||
74 | #define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ | 63 | #define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ |
75 | #define VT_GETHIFONTMASK 0x560D /* return hi font mask */ | 64 | #define VT_GETHIFONTMASK 0x560D /* return hi font mask */ |
76 | 65 | ||
66 | struct vt_event { | ||
67 | unsigned int event; | ||
68 | #define VT_EVENT_SWITCH 0x0001 /* Console switch */ | ||
69 | #define VT_EVENT_BLANK 0x0002 /* Screen blank */ | ||
70 | #define VT_EVENT_UNBLANK 0x0004 /* Screen unblank */ | ||
71 | #define VT_EVENT_RESIZE 0x0008 /* Resize display */ | ||
72 | #define VT_MAX_EVENT 0x000F | ||
73 | unsigned int old; /* Old console */ | ||
74 | unsigned int new; /* New console (if changing) */ | ||
75 | unsigned int pad[4]; /* Padding for expansion */ | ||
76 | }; | ||
77 | |||
78 | #define VT_WAITEVENT 0x560E /* Wait for an event */ | ||
79 | |||
80 | struct vt_setactivate { | ||
81 | unsigned int console; | ||
82 | struct vt_mode mode; | ||
83 | }; | ||
84 | |||
85 | #define VT_SETACTIVATE 0x560F /* Activate and set the mode of a console */ | ||
86 | |||
77 | #endif /* _LINUX_VT_H */ | 87 | #endif /* _LINUX_VT_H */ |
diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h index 2f1113467f70..c0c4e1103a73 100644 --- a/include/linux/vt_kern.h +++ b/include/linux/vt_kern.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/console_struct.h> | 13 | #include <linux/console_struct.h> |
14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
15 | #include <linux/consolemap.h> | 15 | #include <linux/consolemap.h> |
16 | #include <linux/notifier.h> | ||
16 | 17 | ||
17 | /* | 18 | /* |
18 | * Presently, a lot of graphics programs do not restore the contents of | 19 | * Presently, a lot of graphics programs do not restore the contents of |
@@ -91,7 +92,8 @@ int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc); | |||
91 | #endif | 92 | #endif |
92 | 93 | ||
93 | /* vt.c */ | 94 | /* vt.c */ |
94 | int vt_waitactive(int vt); | 95 | void vt_event_post(unsigned int event, unsigned int old, unsigned int new); |
96 | int vt_waitactive(int n); | ||
95 | void change_console(struct vc_data *new_vc); | 97 | void change_console(struct vc_data *new_vc); |
96 | void reset_vc(struct vc_data *vc); | 98 | void reset_vc(struct vc_data *vc); |
97 | extern int unbind_con_driver(const struct consw *csw, int first, int last, | 99 | extern int unbind_con_driver(const struct consw *csw, int first, int last, |
@@ -116,4 +118,16 @@ struct vt_spawn_console { | |||
116 | }; | 118 | }; |
117 | extern struct vt_spawn_console vt_spawn_con; | 119 | extern struct vt_spawn_console vt_spawn_con; |
118 | 120 | ||
121 | extern int vt_move_to_console(unsigned int vt, int alloc); | ||
122 | |||
123 | /* Interfaces for VC notification of character events (for accessibility etc) */ | ||
124 | |||
125 | struct vt_notifier_param { | ||
126 | struct vc_data *vc; /* VC on which the update happened */ | ||
127 | unsigned int c; /* Printed char */ | ||
128 | }; | ||
129 | |||
130 | extern int register_vt_notifier(struct notifier_block *nb); | ||
131 | extern int unregister_vt_notifier(struct notifier_block *nb); | ||
132 | |||
119 | #endif /* _VT_KERN_H */ | 133 | #endif /* _VT_KERN_H */ |
diff --git a/include/trace/events/power.h b/include/trace/events/power.h new file mode 100644 index 000000000000..ea6d579261ad --- /dev/null +++ b/include/trace/events/power.h | |||
@@ -0,0 +1,81 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM power | ||
3 | |||
4 | #if !defined(_TRACE_POWER_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_POWER_H | ||
6 | |||
7 | #include <linux/ktime.h> | ||
8 | #include <linux/tracepoint.h> | ||
9 | |||
10 | #ifndef _TRACE_POWER_ENUM_ | ||
11 | #define _TRACE_POWER_ENUM_ | ||
12 | enum { | ||
13 | POWER_NONE = 0, | ||
14 | POWER_CSTATE = 1, | ||
15 | POWER_PSTATE = 2, | ||
16 | }; | ||
17 | #endif | ||
18 | |||
19 | |||
20 | |||
21 | TRACE_EVENT(power_start, | ||
22 | |||
23 | TP_PROTO(unsigned int type, unsigned int state), | ||
24 | |||
25 | TP_ARGS(type, state), | ||
26 | |||
27 | TP_STRUCT__entry( | ||
28 | __field( u64, type ) | ||
29 | __field( u64, state ) | ||
30 | ), | ||
31 | |||
32 | TP_fast_assign( | ||
33 | __entry->type = type; | ||
34 | __entry->state = state; | ||
35 | ), | ||
36 | |||
37 | TP_printk("type=%lu state=%lu", (unsigned long)__entry->type, (unsigned long)__entry->state) | ||
38 | ); | ||
39 | |||
40 | TRACE_EVENT(power_end, | ||
41 | |||
42 | TP_PROTO(int dummy), | ||
43 | |||
44 | TP_ARGS(dummy), | ||
45 | |||
46 | TP_STRUCT__entry( | ||
47 | __field( u64, dummy ) | ||
48 | ), | ||
49 | |||
50 | TP_fast_assign( | ||
51 | __entry->dummy = 0xffff; | ||
52 | ), | ||
53 | |||
54 | TP_printk("dummy=%lu", (unsigned long)__entry->dummy) | ||
55 | |||
56 | ); | ||
57 | |||
58 | |||
59 | TRACE_EVENT(power_frequency, | ||
60 | |||
61 | TP_PROTO(unsigned int type, unsigned int state), | ||
62 | |||
63 | TP_ARGS(type, state), | ||
64 | |||
65 | TP_STRUCT__entry( | ||
66 | __field( u64, type ) | ||
67 | __field( u64, state ) | ||
68 | ), | ||
69 | |||
70 | TP_fast_assign( | ||
71 | __entry->type = type; | ||
72 | __entry->state = state; | ||
73 | ), | ||
74 | |||
75 | TP_printk("type=%lu state=%lu", (unsigned long)__entry->type, (unsigned long) __entry->state) | ||
76 | ); | ||
77 | |||
78 | #endif /* _TRACE_POWER_H */ | ||
79 | |||
80 | /* This part must be outside protection */ | ||
81 | #include <trace/define_trace.h> | ||
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h index b48f1ad7c946..4069c43f4187 100644 --- a/include/trace/events/sched.h +++ b/include/trace/events/sched.h | |||
@@ -380,6 +380,39 @@ TRACE_EVENT(sched_stat_wait, | |||
380 | ); | 380 | ); |
381 | 381 | ||
382 | /* | 382 | /* |
383 | * Tracepoint for accounting runtime (time the task is executing | ||
384 | * on a CPU). | ||
385 | */ | ||
386 | TRACE_EVENT(sched_stat_runtime, | ||
387 | |||
388 | TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime), | ||
389 | |||
390 | TP_ARGS(tsk, runtime, vruntime), | ||
391 | |||
392 | TP_STRUCT__entry( | ||
393 | __array( char, comm, TASK_COMM_LEN ) | ||
394 | __field( pid_t, pid ) | ||
395 | __field( u64, runtime ) | ||
396 | __field( u64, vruntime ) | ||
397 | ), | ||
398 | |||
399 | TP_fast_assign( | ||
400 | memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN); | ||
401 | __entry->pid = tsk->pid; | ||
402 | __entry->runtime = runtime; | ||
403 | __entry->vruntime = vruntime; | ||
404 | ) | ||
405 | TP_perf_assign( | ||
406 | __perf_count(runtime); | ||
407 | ), | ||
408 | |||
409 | TP_printk("task: %s:%d runtime: %Lu [ns], vruntime: %Lu [ns]", | ||
410 | __entry->comm, __entry->pid, | ||
411 | (unsigned long long)__entry->runtime, | ||
412 | (unsigned long long)__entry->vruntime) | ||
413 | ); | ||
414 | |||
415 | /* | ||
383 | * Tracepoint for accounting sleep time (time the task is not runnable, | 416 | * Tracepoint for accounting sleep time (time the task is not runnable, |
384 | * including iowait, see below). | 417 | * including iowait, see below). |
385 | */ | 418 | */ |