diff options
author | Dave Airlie <airlied@redhat.com> | 2010-03-01 01:22:38 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-03-01 01:22:38 -0500 |
commit | 1c62233508ef7104f8a78e571fdf5c72d0dc0200 (patch) | |
tree | 31e19cbff5c1080d3015d20b24dd43ee95f4ed8c /include | |
parent | 6d9c13513661c1991bf5f4e6e1363c721292d819 (diff) | |
parent | 6a9ee8af344e3bd7dbd61e67037096cdf7f83289 (diff) |
Merge branch 'gpu-switcher' of /ssd/git//linux-2.6 into drm-next-stage
* 'gpu-switcher' of /ssd/git//linux-2.6:
vga_switcheroo: initial implementation (v15)
fb: for framebuffer handover don't exit the loop early.
Conflicts:
drivers/gpu/drm/i915/i915_dma.c
drivers/gpu/drm/radeon/Makefile
drivers/gpu/drm/radeon/radeon.h
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/fb.h | 2 | ||||
-rw-r--r-- | include/linux/vga_switcheroo.h | 58 |
2 files changed, 60 insertions, 0 deletions
diff --git a/include/linux/fb.h b/include/linux/fb.h index 369767bd873e..c10163b4c40e 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
@@ -543,6 +543,8 @@ struct fb_cursor_user { | |||
543 | #define FB_EVENT_GET_REQ 0x0D | 543 | #define FB_EVENT_GET_REQ 0x0D |
544 | /* Unbind from the console if possible */ | 544 | /* Unbind from the console if possible */ |
545 | #define FB_EVENT_FB_UNBIND 0x0E | 545 | #define FB_EVENT_FB_UNBIND 0x0E |
546 | /* CONSOLE-SPECIFIC: remap all consoles to new fb - for vga switcheroo */ | ||
547 | #define FB_EVENT_REMAP_ALL_CONSOLE 0x0F | ||
546 | 548 | ||
547 | struct fb_event { | 549 | struct fb_event { |
548 | struct fb_info *info; | 550 | struct fb_info *info; |
diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h new file mode 100644 index 000000000000..4b58ab1e8612 --- /dev/null +++ b/include/linux/vga_switcheroo.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2010 Red Hat Inc. | ||
3 | * Author : Dave Airlie <airlied@redhat.com> | ||
4 | * | ||
5 | * Licensed under GPLv2 | ||
6 | * | ||
7 | * vga_switcheroo.h - Support for laptop with dual GPU using one set of outputs | ||
8 | */ | ||
9 | |||
10 | #include <acpi/acpi.h> | ||
11 | #include <linux/fb.h> | ||
12 | |||
13 | enum vga_switcheroo_state { | ||
14 | VGA_SWITCHEROO_OFF, | ||
15 | VGA_SWITCHEROO_ON, | ||
16 | }; | ||
17 | |||
18 | enum vga_switcheroo_client_id { | ||
19 | VGA_SWITCHEROO_IGD, | ||
20 | VGA_SWITCHEROO_DIS, | ||
21 | VGA_SWITCHEROO_MAX_CLIENTS, | ||
22 | }; | ||
23 | |||
24 | struct vga_switcheroo_handler { | ||
25 | int (*switchto)(enum vga_switcheroo_client_id id); | ||
26 | int (*power_state)(enum vga_switcheroo_client_id id, | ||
27 | enum vga_switcheroo_state state); | ||
28 | int (*init)(void); | ||
29 | int (*get_client_id)(struct pci_dev *pdev); | ||
30 | }; | ||
31 | |||
32 | |||
33 | #if defined(CONFIG_VGA_SWITCHEROO) | ||
34 | void vga_switcheroo_unregister_client(struct pci_dev *dev); | ||
35 | int vga_switcheroo_register_client(struct pci_dev *dev, | ||
36 | void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state), | ||
37 | bool (*can_switch)(struct pci_dev *dev)); | ||
38 | |||
39 | void vga_switcheroo_client_fb_set(struct pci_dev *dev, | ||
40 | struct fb_info *info); | ||
41 | |||
42 | int vga_switcheroo_register_handler(struct vga_switcheroo_handler *handler); | ||
43 | void vga_switcheroo_unregister_handler(void); | ||
44 | |||
45 | int vga_switcheroo_process_delayed_switch(void); | ||
46 | |||
47 | #else | ||
48 | |||
49 | static inline void vga_switcheroo_unregister_client(struct pci_dev *dev) {} | ||
50 | static inline int vga_switcheroo_register_client(struct pci_dev *dev, | ||
51 | void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state), | ||
52 | bool (*can_switch)(struct pci_dev *dev)) { return 0; } | ||
53 | static inline void vga_switcheroo_client_fb_set(struct pci_dev *dev, struct fb_info *info) {} | ||
54 | static inline int vga_switcheroo_register_handler(struct vga_switcheroo_handler *handler) { return 0; } | ||
55 | static inline void vga_switcheroo_unregister_handler(void) {} | ||
56 | static inline int vga_switcheroo_process_delayed_switch(void) { return 0; } | ||
57 | |||
58 | #endif | ||