--- 3.6_kernel.4200_fbcondecor-0.9.6.patch 2012-10-02 12:51:28.000000000 -0400 +++ modified.4200_fbcondecor-0.9.6.patch 2013-02-26 13:59:19.455415178 -0500 @@ -228,8 +228,7 @@ index 95952c8..b55db6d 100644 --- a/drivers/Makefile +++ b/drivers/Makefile -@@ -11,6 +11,10 @@ obj-y += gpio/ - obj-$(CONFIG_PCI) += pci/ +@@ -16,4 +16,8 @@ obj-$(CONFIG_PCI) += pci/ obj-$(CONFIG_PARISC) += parisc/ obj-$(CONFIG_RAPIDIO) += rapidio/ +# tty/ comes before char/ so that the VT console is the boot-time @@ -238,8 +237,7 @@ +obj-y += char/ obj-y += video/ obj-y += idle/ - obj-$(CONFIG_ACPI) += acpi/ -@@ -29,11 +33,6 @@ obj-$(CONFIG_XEN) += xen/ +@@ -37,11 +41,6 @@ obj-$(CONFIG_XEN) += xen/ # regulators early, since some subsystems rely on them to initialize obj-$(CONFIG_REGULATOR) += regulator/ @@ -255,7 +253,7 @@ index a290be5..3a4ca32 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig -@@ -1241,7 +1241,6 @@ config FB_MATROX +@@ -1229,7 +1229,6 @@ config FB_MATROX select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT @@ -870,7 +868,7 @@ u16 c, int is_fg) { int depth = fb_get_color_depth(&info->var, &info->fix); -@@ -458,7 +459,7 @@ static int __init fb_console_setup(char *this_opt) +@@ -465,7 +466,7 @@ static int __init fb_console_setup(char *this_opt) } else return 1; } @@ -879,7 +877,7 @@ if (!strncmp(options, "map:", 4)) { options += 4; if (*options) { -@@ -483,8 +484,8 @@ static int __init fb_console_setup(char *this_opt) +@@ -490,8 +491,8 @@ static int __init fb_console_setup(char *this_opt) first_fb_vc = 0; if (*options++ == '-') last_fb_vc = simple_strtoul(options, &options, 10) - 1; @@ -890,7 +888,7 @@ if (!strncmp(options, "rotate:", 7)) { options += 7; -@@ -545,6 +546,9 @@ static int fbcon_takeover(int show_logo) +@@ -552,6 +553,9 @@ static int fbcon_takeover(int show_logo) info_idx = -1; } else { fbcon_has_console_bind = 1; @@ -900,7 +898,7 @@ } return err; -@@ -935,7 +939,7 @@ static const char *fbcon_startup(void) +@@ -942,7 +946,7 @@ static const char *fbcon_startup(void) info = registered_fb[info_idx]; if (!info) return NULL; @@ -909,7 +907,7 @@ owner = info->fbops->owner; if (!try_module_get(owner)) return NULL; -@@ -999,6 +1003,12 @@ static const char *fbcon_startup(void) +@@ -1006,6 +1010,12 @@ static const char *fbcon_startup(void) rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); cols /= vc->vc_font.width; rows /= vc->vc_font.height; @@ -922,7 +920,7 @@ vc_resize(vc, cols, rows); DPRINTK("mode: %s\n", info->fix.id); -@@ -1028,7 +1038,7 @@ static void fbcon_init(struct vc_data *vc, int init) +@@ -1035,7 +1045,7 @@ static void fbcon_init(struct vc_data *vc, int init) cap = info->flags; if (vc != svc || logo_shown == FBCON_LOGO_DONTSHOW || @@ -931,7 +929,7 @@ logo = 0; if (var_to_display(p, &info->var, info)) -@@ -1238,6 +1248,11 @@ static void fbcon_clear(struct vc_data *vc, int sy, int sx, int height, +@@ -1245,6 +1255,11 @@ static void fbcon_clear(struct vc_data *vc, int sy, int sx, int height, if (sy < vc->vc_top && vc->vc_top == logo_lines) vc->vc_top = 0; @@ -943,7 +941,7 @@ /* Split blits that cross physical y_wrap boundary */ y_break = p->vrows - p->yscroll; -@@ -1257,10 +1272,15 @@ static void fbcon_putcs(struct vc_data *vc, const unsigned short *s, +@@ -1264,10 +1279,15 @@ static void fbcon_putcs(struct vc_data *vc, const unsigned short *s, struct display *p = &fb_display[vc->vc_num]; struct fbcon_ops *ops = info->fbcon_par; @@ -963,7 +961,7 @@ } static void fbcon_putc(struct vc_data *vc, int c, int ypos, int xpos) -@@ -1276,8 +1296,13 @@ static void fbcon_clear_margins(struct vc_data *vc, int bottom_only) +@@ -1283,8 +1303,13 @@ static void fbcon_clear_margins(struct vc_data *vc, int bottom_only) struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; struct fbcon_ops *ops = info->fbcon_par; @@ -979,7 +977,7 @@ } static void fbcon_cursor(struct vc_data *vc, int mode) -@@ -1387,7 +1412,7 @@ static __inline__ void ywrap_up(struct vc_data *vc, int count) +@@ -1394,7 +1419,7 @@ static __inline__ void ywrap_up(struct vc_data *vc, int count) struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; struct fbcon_ops *ops = info->fbcon_par; struct display *p = &fb_display[vc->vc_num]; @@ -988,7 +986,7 @@ p->yscroll += count; if (p->yscroll >= p->vrows) /* Deal with wrap */ p->yscroll -= p->vrows; -@@ -1406,7 +1431,7 @@ static __inline__ void ywrap_down(struct vc_data *vc, int count) +@@ -1413,7 +1438,7 @@ static __inline__ void ywrap_down(struct vc_data *vc, int count) struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; struct fbcon_ops *ops = info->fbcon_par; struct display *p = &fb_display[vc->vc_num]; @@ -997,7 +995,7 @@ p->yscroll -= count; if (p->yscroll < 0) /* Deal with wrap */ p->yscroll += p->vrows; -@@ -1473,7 +1498,7 @@ static __inline__ void ypan_down(struct vc_data *vc, int count) +@@ -1480,7 +1505,7 @@ static __inline__ void ypan_down(struct vc_data *vc, int count) struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; struct display *p = &fb_display[vc->vc_num]; struct fbcon_ops *ops = info->fbcon_par; @@ -1006,7 +1004,7 @@ p->yscroll -= count; if (p->yscroll < 0) { ops->bmove(vc, info, 0, 0, p->vrows - vc->vc_rows, -@@ -1797,7 +1822,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, +@@ -1804,7 +1829,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, count = vc->vc_rows; if (softback_top) fbcon_softback_note(vc, t, count); @@ -1015,7 +1013,7 @@ goto redraw_up; switch (p->scrollmode) { case SCROLL_MOVE: -@@ -1890,6 +1915,8 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, +@@ -1897,6 +1922,8 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, count = vc->vc_rows; if (logo_shown >= 0) goto redraw_down; @@ -1024,7 +1022,7 @@ switch (p->scrollmode) { case SCROLL_MOVE: fbcon_redraw_blit(vc, info, p, b - 1, b - t - count, -@@ -1982,7 +2009,7 @@ static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx, +@@ -1989,7 +2016,7 @@ static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx, { struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; struct display *p = &fb_display[vc->vc_num]; @@ -1033,7 +1031,7 @@ if (fbcon_is_inactive(vc, info)) return; -@@ -2000,7 +2027,7 @@ static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx, +@@ -2007,7 +2034,7 @@ static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx, p->vrows - p->yscroll); } @@ -1042,7 +1040,7 @@ int dy, int dx, int height, int width, u_int y_break) { struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; -@@ -2038,6 +2065,13 @@ static void fbcon_bmove_rec(struct vc_data *vc, struct display *p, int sy, int s +@@ -2045,6 +2072,13 @@ static void fbcon_bmove_rec(struct vc_data *vc, struct display *p, int sy, int s } return; } @@ -1056,7 +1054,7 @@ ops->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx, height, width); } -@@ -2089,7 +2123,7 @@ static void updatescrollmode(struct display *p, +@@ -2096,7 +2130,7 @@ static void updatescrollmode(struct display *p, } } @@ -1065,7 +1063,7 @@ unsigned int height, unsigned int user) { struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; -@@ -2108,8 +2142,8 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, +@@ -2115,8 +2149,8 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, var.yres = virt_h * virt_fh; x_diff = info->var.xres - var.xres; y_diff = info->var.yres - var.yres; @@ -1076,7 +1074,7 @@ const struct fb_videomode *mode; DPRINTK("attempting resize %ix%i\n", var.xres, var.yres); -@@ -2145,6 +2179,21 @@ static int fbcon_switch(struct vc_data *vc) +@@ -2152,6 +2186,21 @@ static int fbcon_switch(struct vc_data *vc) info = registered_fb[con2fb_map[vc->vc_num]]; ops = info->fbcon_par; @@ -1098,7 +1096,7 @@ if (softback_top) { if (softback_lines) -@@ -2163,9 +2212,6 @@ static int fbcon_switch(struct vc_data *vc) +@@ -2170,9 +2219,6 @@ static int fbcon_switch(struct vc_data *vc) logo_shown = FBCON_LOGO_CANSHOW; } @@ -1108,7 +1106,7 @@ /* * FIXME: If we have multiple fbdev's loaded, we need to * update all info->currcon. Perhaps, we can place this -@@ -2209,6 +2255,18 @@ static int fbcon_switch(struct vc_data *vc) +@@ -2216,6 +2262,18 @@ static int fbcon_switch(struct vc_data *vc) fbcon_del_cursor_timer(old_info); } @@ -1127,7 +1125,7 @@ if (fbcon_is_inactive(vc, info) || ops->blank_state != FB_BLANK_UNBLANK) fbcon_del_cursor_timer(info); -@@ -2257,11 +2315,10 @@ static int fbcon_switch(struct vc_data *vc) +@@ -2264,11 +2322,10 @@ static int fbcon_switch(struct vc_data *vc) ops->update_start(info); } @@ -1140,7 +1138,7 @@ logo_shown = fg_console; /* This is protected above by initmem_freed */ fb_show_logo(info, ops->rotate); -@@ -2317,15 +2374,20 @@ static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch) +@@ -2324,15 +2381,20 @@ static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch) } } @@ -1165,7 +1163,7 @@ } if (!blank) -@@ -2447,7 +2509,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, +@@ -2454,7 +2516,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, vc->vc_complement_mask >>= 1; vc->vc_s_complement_mask >>= 1; } @@ -1174,7 +1172,7 @@ /* ++Edmund: reorder the attribute bits */ if (vc->vc_can_do_color) { unsigned short *cp = -@@ -2470,7 +2532,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, +@@ -2477,7 +2539,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, vc->vc_complement_mask <<= 1; vc->vc_s_complement_mask <<= 1; } @@ -1183,7 +1181,7 @@ /* ++Edmund: reorder the attribute bits */ { unsigned short *cp = -@@ -2500,13 +2562,22 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, +@@ -2507,13 +2569,22 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, } if (resize) { @@ -1206,7 +1204,7 @@ if (CON_IS_VISIBLE(vc) && softback_buf) fbcon_update_softback(vc); } else if (CON_IS_VISIBLE(vc) -@@ -2590,7 +2661,7 @@ static int fbcon_set_font(struct vc_data *vc, struct console_font *font, unsigne +@@ -2597,7 +2661,7 @@ static int fbcon_set_font(struct vc_data *vc, struct console_font *font, unsigne /* Check if the same font is on some other console already */ for (i = first_fb_vc; i <= last_fb_vc; i++) { struct vc_data *tmp = vc_cons[i].d; @@ -1215,7 +1213,7 @@ if (fb_display[i].userfont && fb_display[i].fontdata && FNTSUM(fb_display[i].fontdata) == csum && -@@ -2635,7 +2706,11 @@ static int fbcon_set_palette(struct vc_data *vc, unsigned char *table) +@@ -2642,7 +2713,11 @@ static int fbcon_set_palette(struct vc_data *vc, unsigned char *table) int i, j, k, depth; u8 val; @@ -1228,7 +1226,7 @@ return -EINVAL; if (!CON_IS_VISIBLE(vc)) -@@ -2661,14 +2736,56 @@ static int fbcon_set_palette(struct vc_data *vc, unsigned char *table) +@@ -2668,14 +2743,56 @@ static int fbcon_set_palette(struct vc_data *vc, unsigned char *table) } else fb_copy_cmap(fb_default_cmap(1 << depth), &palette_cmap); @@ -1287,7 +1285,7 @@ if (vc->vc_num != fg_console || !softback_lines) return (u16 *) (vc->vc_origin + offset); line = offset / vc->vc_size_row; -@@ -2887,7 +3004,14 @@ static void fbcon_modechanged(struct fb_info *info) +@@ -2894,7 +3011,14 @@ static void fbcon_modechanged(struct fb_info *info) rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); cols /= vc->vc_font.width; rows /= vc->vc_font.height; @@ -1303,7 +1301,7 @@ updatescrollmode(p, info, vc); scrollback_max = 0; scrollback_current = 0; -@@ -2932,7 +3056,9 @@ static void fbcon_set_all_vcs(struct fb_info *info) +@@ -2939,7 +3063,9 @@ static void fbcon_set_all_vcs(struct fb_info *info) rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); cols /= vc->vc_font.width; rows /= vc->vc_font.height; @@ -1314,7 +1312,7 @@ } if (fg != -1) -@@ -3542,6 +3668,7 @@ static void fbcon_exit(void) +@@ -3549,6 +3675,7 @@ static void fbcon_exit(void) } } @@ -1322,7 +1320,7 @@ fbcon_has_exited = 1; } -@@ -3595,7 +3722,7 @@ static void __exit fb_console_exit(void) +@@ -3602,7 +3729,7 @@ static void __exit fb_console_exit(void) fbcon_exit(); console_unlock(); unregister_con_driver(&fb_con); @@ -2014,7 +2012,7 @@ index c6ce416..7ce6640 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c -@@ -1222,15 +1222,6 @@ struct fb_fix_screeninfo32 { +@@ -1231,15 +1231,6 @@ struct fb_fix_screeninfo32 { u16 reserved[3]; }; @@ -2103,11 +2101,11 @@ /* additional information is in vt_kern.h */ }; -diff --git a/include/linux/fb.h b/include/linux/fb.h +diff --git a/include/uapi/linux/fb.h b/include/uapi/linux/fb.h index d31cb68..ad161bb 100644 ---- a/include/linux/fb.h -+++ b/include/linux/fb.h -@@ -11,6 +11,25 @@ +--- a/include/uapi/linux/fb.h ++++ b/include/uapi/linux/fb.h +@@ -8,6 +8,25 @@ #define FB_MAX 32 /* sufficient for now */ @@ -2133,7 +2131,7 @@ /* ioctls 0x46 is 'F' */ #define FBIOGET_VSCREENINFO 0x4600 -@@ -39,6 +58,24 @@ +@@ -34,6 +53,24 @@ #define FBIOPUT_MODEINFO 0x4617 #define FBIOGET_DISPINFO 0x4618 #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) @@ -2158,7 +2156,7 @@ #define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */ #define FB_TYPE_PLANES 1 /* Non interleaved planes */ -@@ -291,6 +328,28 @@ struct fb_cmap { +@@ -286,6 +323,28 @@ struct fb_cmap { __u16 *transp; /* transparency, can be NULL */ }; @@ -2187,7 +2185,7 @@ struct fb_con2fbmap { __u32 console; __u32 framebuffer; -@@ -372,6 +431,34 @@ struct fb_image { +@@ -367,6 +426,34 @@ struct fb_image { struct fb_cmap cmap; /* color map info */ }; @@ -2222,8 +2220,12 @@ /* * hardware cursor control */ -@@ -881,6 +968,9 @@ struct fb_info { - #define FBINFO_STATE_SUSPENDED 1 + +diff --git a/include/linux/fb.h b/include/linux/fb.h +index d31cb68..ad161bb 100644 +--- a/include/linux/fb.h ++++ b/include/linux/fb.h +@@ -488,5 +488,8 @@ #define FBINFO_STATE_SUSPENDED 1 u32 state; /* Hardware state i.e suspend */ void *fbcon_par; /* fbcon use-only private area */ + @@ -2232,11 +2234,12 @@ /* From here on everything is device dependent */ void *par; /* we need the PCI or similar aperture base/size not + diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 4ab1187..6561627 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c -@@ -142,6 +142,10 @@ static int min_percpu_pagelist_fract = 8; +@@ -145,6 +145,10 @@ static int min_percpu_pagelist_fract = 8; static int ngroups_max = NGROUPS_MAX; static const int cap_last_cap = CAP_LAST_CAP; @@ -2247,7 +2250,7 @@ #ifdef CONFIG_INOTIFY_USER #include #endif -@@ -238,6 +242,15 @@ static struct ctl_table sysctl_base_table[] = { +@@ -248,6 +252,15 @@ static struct ctl_table sysctl_base_table[] = { .mode = 0555, .child = dev_table, }, @@ -2263,7 +2266,7 @@ { } }; -@@ -1038,7 +1051,7 @@ static struct ctl_table vm_table[] = { +@@ -1091,7 +1104,7 @@ static struct ctl_table vm_table[] = { .proc_handler = proc_dointvec, }, { @@ -2272,7 +2275,7 @@ .data = &page_cluster, .maxlen = sizeof(int), .mode = 0644, -@@ -1484,7 +1497,7 @@ static struct ctl_table fs_table[] = { +@@ -1535,7 +1548,7 @@ static struct ctl_table fs_table[] = { .mode = 0555, .child = inotify_table, }, @@ -2281,7 +2284,7 @@ #ifdef CONFIG_EPOLL { .procname = "epoll", -@@ -1802,12 +1815,12 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table, +@@ -1873,12 +1886,12 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table, unsigned long page = 0; size_t left; char *kbuf; @@ -2296,7 +2299,7 @@ i = (int *) tbl_data; vleft = table->maxlen / sizeof(*i); left = *lenp; -@@ -1896,7 +1909,7 @@ static int do_proc_dointvec(struct ctl_table *table, int write, +@@ -1967,7 +1980,7 @@ static int do_proc_dointvec(struct ctl_table *table, int write, * @ppos: file position * * Reads/writes up to table->maxlen/sizeof(unsigned int) integer @@ -2305,7 +2308,7 @@ * * Returns 0 on success. */ -@@ -2223,7 +2236,7 @@ static int do_proc_dointvec_ms_jiffies_conv(bool *negp, unsigned long *lvalp, +@@ -2326,7 +2339,7 @@ static int do_proc_dointvec_ms_jiffies_conv(bool *negp, unsigned long *lvalp, * @ppos: file position * * Reads/writes up to table->maxlen/sizeof(unsigned int) integer @@ -2314,7 +2317,7 @@ * The values read are assumed to be in seconds, and are converted into * jiffies. * -@@ -2245,8 +2258,8 @@ int proc_dointvec_jiffies(struct ctl_table *table, int write, +@@ -2348,8 +2361,8 @@ int proc_dointvec_jiffies(struct ctl_table *table, int write, * @ppos: pointer to the file position * * Reads/writes up to table->maxlen/sizeof(unsigned int) integer @@ -2325,7 +2328,7 @@ * are converted into jiffies. * * Returns 0 on success. -@@ -2268,8 +2281,8 @@ int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write, +@@ -2371,8 +2384,8 @@ int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write, * @ppos: the current position in the file * * Reads/writes up to table->maxlen/sizeof(unsigned int) integer