From: "Manuel Schölling" <manuel.schoelling@gmx.de> To: gregkh@linuxfoundation.org Cc: jslaby@suse.com, kilobyte@angband.pl, lkml14@scotdoyle.com, rdunlap@infradead.org, shorne@gmail.com, andrey_utkin@fastmail.com, akpm@linux-foundation.org, paul.burton@imgtec.com, daniel.vetter@ffwll.ch, tj@kernel.org, hdegoede@redhat.com, linux-kernel@vger.kernel.org, linux-fbdev@vger.kernel.org, "Manuel Schölling" <manuel.schoelling@gmx.de> Subject: [PATCH v9 1/4] console: Move scrollback data into its own struct Date: Tue, 10 Jan 2017 22:28:35 +0100 [thread overview] Message-ID: <20170110212838.16175-2-manuel.schoelling@gmx.de> (raw) In-Reply-To: <20170110212838.16175-1-manuel.schoelling@gmx.de> In-Reply-To: <4640722.jsFVORW8WM@amdc3058> This refactoring is in preparation for persistent scrollback support for VGA console. Signed-off-by: Manuel Schölling <manuel.schoelling@gmx.de> Reviewed-by: Andrey Utkin <andrey_utkin@fastmail.com> Tested-by: Andrey Utkin <andrey_utkin@fastmail.com> Tested-by: Adam Borowski <kilobyte@angband.pl> --- drivers/video/console/vgacon.c | 91 ++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 44 deletions(-) diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c index c22a56232b7c..48b97648d4af 100644 --- a/drivers/video/console/vgacon.c +++ b/drivers/video/console/vgacon.c @@ -162,31 +162,34 @@ static inline void vga_set_mem_top(struct vc_data *c) #ifdef CONFIG_VGACON_SOFT_SCROLLBACK /* software scrollback */ -static void *vgacon_scrollback; -static int vgacon_scrollback_tail; -static int vgacon_scrollback_size; -static int vgacon_scrollback_rows; -static int vgacon_scrollback_cnt; -static int vgacon_scrollback_cur; -static int vgacon_scrollback_save; -static int vgacon_scrollback_restore; +static struct vgacon_scrollback_info { + void *data; + int tail; + int size; + int rows; + int cnt; + int cur; + int save; + int restore; +} vgacon_scrollback; static void vgacon_scrollback_init(int pitch) { int rows = CONFIG_VGACON_SOFT_SCROLLBACK_SIZE * 1024/pitch; - if (vgacon_scrollback) { - vgacon_scrollback_cnt = 0; - vgacon_scrollback_tail = 0; - vgacon_scrollback_cur = 0; - vgacon_scrollback_rows = rows - 1; - vgacon_scrollback_size = rows * pitch; + if (vgacon_scrollback.data) { + vgacon_scrollback.cnt = 0; + vgacon_scrollback.tail = 0; + vgacon_scrollback.cur = 0; + vgacon_scrollback.rows = rows - 1; + vgacon_scrollback.size = rows * pitch; } } static void vgacon_scrollback_startup(void) { - vgacon_scrollback = kcalloc(CONFIG_VGACON_SOFT_SCROLLBACK_SIZE, 1024, GFP_NOWAIT); + vgacon_scrollback.data = kcalloc(CONFIG_VGACON_SOFT_SCROLLBACK_SIZE, + 1024, GFP_NOWAIT); vgacon_scrollback_init(vga_video_num_columns * 2); } @@ -194,38 +197,38 @@ static void vgacon_scrollback_update(struct vc_data *c, int t, int count) { void *p; - if (!vgacon_scrollback_size || c->vc_num != fg_console) + if (!vgacon_scrollback.size || c->vc_num != fg_console) return; p = (void *) (c->vc_origin + t * c->vc_size_row); while (count--) { - scr_memcpyw(vgacon_scrollback + vgacon_scrollback_tail, + scr_memcpyw(vgacon_scrollback.data + vgacon_scrollback.tail, p, c->vc_size_row); - vgacon_scrollback_cnt++; + vgacon_scrollback.cnt++; p += c->vc_size_row; - vgacon_scrollback_tail += c->vc_size_row; + vgacon_scrollback.tail += c->vc_size_row; - if (vgacon_scrollback_tail >= vgacon_scrollback_size) - vgacon_scrollback_tail = 0; + if (vgacon_scrollback.tail >= vgacon_scrollback.size) + vgacon_scrollback.tail = 0; - if (vgacon_scrollback_cnt > vgacon_scrollback_rows) - vgacon_scrollback_cnt = vgacon_scrollback_rows; + if (vgacon_scrollback.cnt > vgacon_scrollback.rows) + vgacon_scrollback.cnt = vgacon_scrollback.rows; - vgacon_scrollback_cur = vgacon_scrollback_cnt; + vgacon_scrollback.cur = vgacon_scrollback.cnt; } } static void vgacon_restore_screen(struct vc_data *c) { - vgacon_scrollback_save = 0; + vgacon_scrollback.save = 0; - if (!vga_is_gfx && !vgacon_scrollback_restore) { + if (!vga_is_gfx && !vgacon_scrollback.restore) { scr_memcpyw((u16 *) c->vc_origin, (u16 *) c->vc_screenbuf, c->vc_screenbuf_size > vga_vram_size ? vga_vram_size : c->vc_screenbuf_size); - vgacon_scrollback_restore = 1; - vgacon_scrollback_cur = vgacon_scrollback_cnt; + vgacon_scrollback.restore = 1; + vgacon_scrollback.cur = vgacon_scrollback.cnt; } } @@ -239,41 +242,41 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines) return; } - if (!vgacon_scrollback) + if (!vgacon_scrollback.data) return; - if (!vgacon_scrollback_save) { + if (!vgacon_scrollback.save) { vgacon_cursor(c, CM_ERASE); vgacon_save_screen(c); - vgacon_scrollback_save = 1; + vgacon_scrollback.save = 1; } - vgacon_scrollback_restore = 0; - start = vgacon_scrollback_cur + lines; + vgacon_scrollback.restore = 0; + start = vgacon_scrollback.cur + lines; end = start + abs(lines); if (start < 0) start = 0; - if (start > vgacon_scrollback_cnt) - start = vgacon_scrollback_cnt; + if (start > vgacon_scrollback.cnt) + start = vgacon_scrollback.cnt; if (end < 0) end = 0; - if (end > vgacon_scrollback_cnt) - end = vgacon_scrollback_cnt; + if (end > vgacon_scrollback.cnt) + end = vgacon_scrollback.cnt; - vgacon_scrollback_cur = start; + vgacon_scrollback.cur = start; count = end - start; - soff = vgacon_scrollback_tail - ((vgacon_scrollback_cnt - end) * + soff = vgacon_scrollback.tail - ((vgacon_scrollback.cnt - end) * c->vc_size_row); soff -= count * c->vc_size_row; if (soff < 0) - soff += vgacon_scrollback_size; + soff += vgacon_scrollback.size; - count = vgacon_scrollback_cnt - start; + count = vgacon_scrollback.cnt - start; if (count > c->vc_rows) count = c->vc_rows; @@ -287,13 +290,13 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines) count *= c->vc_size_row; /* how much memory to end of buffer left? */ - copysize = min(count, vgacon_scrollback_size - soff); - scr_memcpyw(d, vgacon_scrollback + soff, copysize); + copysize = min(count, vgacon_scrollback.size - soff); + scr_memcpyw(d, vgacon_scrollback.data + soff, copysize); d += copysize; count -= copysize; if (count) { - scr_memcpyw(d, vgacon_scrollback, count); + scr_memcpyw(d, vgacon_scrollback.data, count); d += count; } -- 2.11.0
next prev parent reply other threads:[~2017-01-10 21:29 UTC|newest] Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-12-04 10:53 [PATCH v7 0/3] console: Add persistent scrollback buffers for all VGA consoles Manuel Schölling 2016-12-04 10:53 ` [PATCH v7 1/3] console: Move scrollback data into its own struct Manuel Schölling 2016-12-04 10:53 ` [PATCH v7 2/3] console: Add callback to flush scrollback buffer to consw struct Manuel Schölling 2016-12-04 10:53 ` [PATCH v7 3/3] console: Add persistent scrollback buffers for all VGA consoles Manuel Schölling 2016-12-06 10:02 ` [PATCH v7 0/3] " Greg KH 2016-12-06 16:32 ` Manuel Schölling 2016-12-21 16:37 ` [PATCH RESEND " Manuel Schölling 2016-12-21 16:37 ` [PATCH RESEND v7 1/3] console: Move scrollback data into its own struct Manuel Schölling 2016-12-21 16:37 ` [PATCH RESEND v7 2/3] console: Add callback to flush scrollback buffer to consw struct Manuel Schölling 2016-12-21 16:37 ` [PATCH RESEND v7 3/3] console: Add persistent scrollback buffers for all VGA consoles Manuel Schölling 2017-01-04 13:54 ` [PATCH RESEND v7 0/3] " Andrey Utkin 2017-01-05 11:33 ` [PATCH v8 " Manuel Schölling 2017-01-05 11:33 ` [PATCH v8 1/3] console: Move scrollback data into its own struct Manuel Schölling 2017-01-05 11:33 ` [PATCH v8 2/3] console: Add callback to flush scrollback buffer to consw struct Manuel Schölling 2017-01-05 11:33 ` [PATCH v8 3/3] console: Add persistent scrollback buffers for all VGA consoles Manuel Schölling [not found] ` <CGME20170110162224epcas1p2095912fa6b73a1457fa86396149e78e9@epcas1p2.samsung.com> 2017-01-10 16:22 ` Bartlomiej Zolnierkiewicz [not found] ` <CGME20170110164435epcas1p314efb9c6ea3ffb971fce06f3bfaec736@epcas1p3.samsung.com> 2017-01-10 16:44 ` Bartlomiej Zolnierkiewicz 2017-01-10 17:31 ` Manuel Schölling 2017-01-10 21:28 ` [PATCH v9 0/4] " Manuel Schölling 2017-01-10 21:28 ` Manuel Schölling [this message] 2017-01-10 21:28 ` [PATCH v9 2/4] console: Add callback to flush scrollback buffer to consw struct Manuel Schölling 2017-01-10 21:28 ` [PATCH v9 3/4] console: Add persistent scrollback buffers for all VGA consoles Manuel Schölling 2017-01-10 21:28 ` [PATCH v9 4/4] console: Make persistent scrollback a boot parameter Manuel Schölling 2017-01-10 22:58 ` Adam Borowski 2017-01-11 21:41 ` Manuel Schölling 2017-01-13 20:00 ` Manuel Schölling 2017-01-14 7:26 ` Greg KH 2017-01-11 13:32 ` kbuild test robot 2017-01-13 20:07 ` [PATCH v10 0/4] console: Add persistent scrollback buffers for all VGA consoles Manuel Schölling 2017-01-25 10:55 ` Greg KH 2017-01-13 20:07 ` [PATCH v10 1/4] console: Move scrollback data into its own struct Manuel Schölling 2017-01-13 20:07 ` [PATCH v10 2/4] console: Add callback to flush scrollback buffer to consw struct Manuel Schölling 2017-01-13 20:07 ` [PATCH v10 3/4] console: Add persistent scrollback buffers for all VGA consoles Manuel Schölling 2017-01-19 13:23 ` Greg KH 2017-01-19 16:12 ` Manuel Schölling 2017-01-19 16:33 ` Greg KH 2017-01-19 23:04 ` Adam Borowski 2017-01-20 13:16 ` Adam Borowski 2017-01-20 13:31 ` Greg KH 2017-01-20 14:27 ` Adam Borowski 2017-01-19 17:20 ` Adam Borowski 2017-01-13 20:07 ` [PATCH v10 4/4] console: Make persistent scrollback a boot parameter Manuel Schölling 2017-02-02 20:07 ` [PATCH v9 " Paul Gortmaker 2017-02-03 16:04 ` Manuel Schölling 2017-02-03 16:45 ` Adam Borowski 2017-01-02 14:27 ` [PATCH RESEND v7 0/3] console: Add persistent scrollback buffers for all VGA consoles Manuel Schölling 2017-01-02 14:27 ` [PATCH RESEND v7 1/3] console: Move scrollback data into its own struct Manuel Schölling 2017-01-02 14:27 ` [PATCH RESEND v7 2/3] console: Add callback to flush scrollback buffer to consw struct Manuel Schölling 2017-01-02 14:27 ` [PATCH RESEND v7 3/3] console: Add persistent scrollback buffers for all VGA consoles Manuel Schölling
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20170110212838.16175-2-manuel.schoelling@gmx.de \ --to=manuel.schoelling@gmx.de \ --cc=akpm@linux-foundation.org \ --cc=andrey_utkin@fastmail.com \ --cc=daniel.vetter@ffwll.ch \ --cc=gregkh@linuxfoundation.org \ --cc=hdegoede@redhat.com \ --cc=jslaby@suse.com \ --cc=kilobyte@angband.pl \ --cc=linux-fbdev@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=lkml14@scotdoyle.com \ --cc=paul.burton@imgtec.com \ --cc=rdunlap@infradead.org \ --cc=shorne@gmail.com \ --cc=tj@kernel.org \ --subject='Re: [PATCH v9 1/4] console: Move scrollback data into its own struct' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).