diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-22 16:45:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-22 16:45:15 -0400 |
commit | 111ad119d1765b1bbef2629a5f2bd825caeb7e74 (patch) | |
tree | 167ee4a4e6e9276bb7178ddcce85d6860543cfb4 /arch/x86/xen | |
parent | 997271cf5e12c1b38aec0764187094663501c984 (diff) | |
parent | 3a6d28b11a895d08b6b4fc6f16dd9ff995844b45 (diff) |
Merge branch 'stable/drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
* 'stable/drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
xen/pciback: Have 'passthrough' option instead of XEN_PCIDEV_BACKEND_PASS and XEN_PCIDEV_BACKEND_VPCI
xen/pciback: Remove the DEBUG option.
xen/pciback: Drop two backends, squash and cleanup some code.
xen/pciback: Print out the MSI/MSI-X (PIRQ) values
xen/pciback: Don't setup an fake IRQ handler for SR-IOV devices.
xen: rename pciback module to xen-pciback.
xen/pciback: Fine-grain the spinlocks and fix BUG: scheduling while atomic cases.
xen/pciback: Allocate IRQ handler for device that is shared with guest.
xen/pciback: Disable MSI/MSI-X when reseting a device
xen/pciback: guest SR-IOV support for PV guest
xen/pciback: Register the owner (domain) of the PCI device.
xen/pciback: Cleanup the driver based on checkpatch warnings and errors.
xen/pciback: xen pci backend driver.
xen: tmem: self-ballooning and frontswap-selfshrinking
xen: Add module alias to autoload backend drivers
xen: Populate xenbus device attributes
xen: Add __attribute__((format(printf... where appropriate
xen: prepare tmem shim to handle frontswap
xen: allow enable use of VGA console on dom0
Diffstat (limited to 'arch/x86/xen')
-rw-r--r-- | arch/x86/xen/Makefile | 2 | ||||
-rw-r--r-- | arch/x86/xen/enlighten.c | 8 | ||||
-rw-r--r-- | arch/x86/xen/vga.c | 67 | ||||
-rw-r--r-- | arch/x86/xen/xen-ops.h | 11 |
4 files changed, 87 insertions, 1 deletions
diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile index 17c565de3d64..a6575b949b11 100644 --- a/arch/x86/xen/Makefile +++ b/arch/x86/xen/Makefile | |||
@@ -18,5 +18,5 @@ obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \ | |||
18 | obj-$(CONFIG_SMP) += smp.o | 18 | obj-$(CONFIG_SMP) += smp.o |
19 | obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o | 19 | obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o |
20 | obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o | 20 | obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o |
21 | 21 | obj-$(CONFIG_XEN_DOM0) += vga.o | |
22 | obj-$(CONFIG_SWIOTLB_XEN) += pci-swiotlb-xen.o | 22 | obj-$(CONFIG_SWIOTLB_XEN) += pci-swiotlb-xen.o |
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 5525163a0398..53257421082b 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
@@ -1248,6 +1248,14 @@ asmlinkage void __init xen_start_kernel(void) | |||
1248 | if (pci_xen) | 1248 | if (pci_xen) |
1249 | x86_init.pci.arch_init = pci_xen_init; | 1249 | x86_init.pci.arch_init = pci_xen_init; |
1250 | } else { | 1250 | } else { |
1251 | const struct dom0_vga_console_info *info = | ||
1252 | (void *)((char *)xen_start_info + | ||
1253 | xen_start_info->console.dom0.info_off); | ||
1254 | |||
1255 | xen_init_vga(info, xen_start_info->console.dom0.info_size); | ||
1256 | xen_start_info->console.domU.mfn = 0; | ||
1257 | xen_start_info->console.domU.evtchn = 0; | ||
1258 | |||
1251 | /* Make sure ACS will be enabled */ | 1259 | /* Make sure ACS will be enabled */ |
1252 | pci_request_acs(); | 1260 | pci_request_acs(); |
1253 | } | 1261 | } |
diff --git a/arch/x86/xen/vga.c b/arch/x86/xen/vga.c new file mode 100644 index 000000000000..1cd7f4d11e29 --- /dev/null +++ b/arch/x86/xen/vga.c | |||
@@ -0,0 +1,67 @@ | |||
1 | #include <linux/screen_info.h> | ||
2 | #include <linux/init.h> | ||
3 | |||
4 | #include <asm/bootparam.h> | ||
5 | #include <asm/setup.h> | ||
6 | |||
7 | #include <xen/interface/xen.h> | ||
8 | |||
9 | #include "xen-ops.h" | ||
10 | |||
11 | void __init xen_init_vga(const struct dom0_vga_console_info *info, size_t size) | ||
12 | { | ||
13 | struct screen_info *screen_info = &boot_params.screen_info; | ||
14 | |||
15 | /* This is drawn from a dump from vgacon:startup in | ||
16 | * standard Linux. */ | ||
17 | screen_info->orig_video_mode = 3; | ||
18 | screen_info->orig_video_isVGA = 1; | ||
19 | screen_info->orig_video_lines = 25; | ||
20 | screen_info->orig_video_cols = 80; | ||
21 | screen_info->orig_video_ega_bx = 3; | ||
22 | screen_info->orig_video_points = 16; | ||
23 | screen_info->orig_y = screen_info->orig_video_lines - 1; | ||
24 | |||
25 | switch (info->video_type) { | ||
26 | case XEN_VGATYPE_TEXT_MODE_3: | ||
27 | if (size < offsetof(struct dom0_vga_console_info, u.text_mode_3) | ||
28 | + sizeof(info->u.text_mode_3)) | ||
29 | break; | ||
30 | screen_info->orig_video_lines = info->u.text_mode_3.rows; | ||
31 | screen_info->orig_video_cols = info->u.text_mode_3.columns; | ||
32 | screen_info->orig_x = info->u.text_mode_3.cursor_x; | ||
33 | screen_info->orig_y = info->u.text_mode_3.cursor_y; | ||
34 | screen_info->orig_video_points = | ||
35 | info->u.text_mode_3.font_height; | ||
36 | break; | ||
37 | |||
38 | case XEN_VGATYPE_VESA_LFB: | ||
39 | if (size < offsetof(struct dom0_vga_console_info, | ||
40 | u.vesa_lfb.gbl_caps)) | ||
41 | break; | ||
42 | screen_info->orig_video_isVGA = VIDEO_TYPE_VLFB; | ||
43 | screen_info->lfb_width = info->u.vesa_lfb.width; | ||
44 | screen_info->lfb_height = info->u.vesa_lfb.height; | ||
45 | screen_info->lfb_depth = info->u.vesa_lfb.bits_per_pixel; | ||
46 | screen_info->lfb_base = info->u.vesa_lfb.lfb_base; | ||
47 | screen_info->lfb_size = info->u.vesa_lfb.lfb_size; | ||
48 | screen_info->lfb_linelength = info->u.vesa_lfb.bytes_per_line; | ||
49 | screen_info->red_size = info->u.vesa_lfb.red_size; | ||
50 | screen_info->red_pos = info->u.vesa_lfb.red_pos; | ||
51 | screen_info->green_size = info->u.vesa_lfb.green_size; | ||
52 | screen_info->green_pos = info->u.vesa_lfb.green_pos; | ||
53 | screen_info->blue_size = info->u.vesa_lfb.blue_size; | ||
54 | screen_info->blue_pos = info->u.vesa_lfb.blue_pos; | ||
55 | screen_info->rsvd_size = info->u.vesa_lfb.rsvd_size; | ||
56 | screen_info->rsvd_pos = info->u.vesa_lfb.rsvd_pos; | ||
57 | if (size >= offsetof(struct dom0_vga_console_info, | ||
58 | u.vesa_lfb.gbl_caps) | ||
59 | + sizeof(info->u.vesa_lfb.gbl_caps)) | ||
60 | screen_info->capabilities = info->u.vesa_lfb.gbl_caps; | ||
61 | if (size >= offsetof(struct dom0_vga_console_info, | ||
62 | u.vesa_lfb.mode_attrs) | ||
63 | + sizeof(info->u.vesa_lfb.mode_attrs)) | ||
64 | screen_info->vesa_attributes = info->u.vesa_lfb.mode_attrs; | ||
65 | break; | ||
66 | } | ||
67 | } | ||
diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h index 97dfdc8757b3..b095739ccd4c 100644 --- a/arch/x86/xen/xen-ops.h +++ b/arch/x86/xen/xen-ops.h | |||
@@ -88,6 +88,17 @@ static inline void xen_uninit_lock_cpu(int cpu) | |||
88 | } | 88 | } |
89 | #endif | 89 | #endif |
90 | 90 | ||
91 | struct dom0_vga_console_info; | ||
92 | |||
93 | #ifdef CONFIG_XEN_DOM0 | ||
94 | void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size); | ||
95 | #else | ||
96 | static inline void __init xen_init_vga(const struct dom0_vga_console_info *info, | ||
97 | size_t size) | ||
98 | { | ||
99 | } | ||
100 | #endif | ||
101 | |||
91 | /* Declare an asm function, along with symbols needed to make it | 102 | /* Declare an asm function, along with symbols needed to make it |
92 | inlineable */ | 103 | inlineable */ |
93 | #define DECL_ASM(ret, name, ...) \ | 104 | #define DECL_ASM(ret, name, ...) \ |