@@ -165,214 +165,6 @@ static inline void vga_set_mem_top(struct vc_data *c)
165
165
write_vga (12 , (c -> vc_visible_origin - vga_vram_base ) / 2 );
166
166
}
167
167
168
- #ifdef CONFIG_VGACON_SOFT_SCROLLBACK
169
- /* software scrollback */
170
- struct vgacon_scrollback_info {
171
- void * data ;
172
- int tail ;
173
- int size ;
174
- int rows ;
175
- int cnt ;
176
- int cur ;
177
- int save ;
178
- int restore ;
179
- };
180
-
181
- static struct vgacon_scrollback_info * vgacon_scrollback_cur ;
182
- static struct vgacon_scrollback_info vgacon_scrollbacks [MAX_NR_CONSOLES ];
183
- static bool scrollback_persistent = \
184
- IS_ENABLED (CONFIG_VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT );
185
- module_param_named (scrollback_persistent , scrollback_persistent , bool , 0000 );
186
- MODULE_PARM_DESC (scrollback_persistent , "Enable persistent scrollback for all vga consoles" );
187
-
188
- static void vgacon_scrollback_reset (int vc_num , size_t reset_size )
189
- {
190
- struct vgacon_scrollback_info * scrollback = & vgacon_scrollbacks [vc_num ];
191
-
192
- if (scrollback -> data && reset_size > 0 )
193
- memset (scrollback -> data , 0 , reset_size );
194
-
195
- scrollback -> cnt = 0 ;
196
- scrollback -> tail = 0 ;
197
- scrollback -> cur = 0 ;
198
- }
199
-
200
- static void vgacon_scrollback_init (int vc_num )
201
- {
202
- int pitch = vga_video_num_columns * 2 ;
203
- size_t size = CONFIG_VGACON_SOFT_SCROLLBACK_SIZE * 1024 ;
204
- int rows = size / pitch ;
205
- void * data ;
206
-
207
- data = kmalloc_array (CONFIG_VGACON_SOFT_SCROLLBACK_SIZE , 1024 ,
208
- GFP_NOWAIT );
209
-
210
- vgacon_scrollbacks [vc_num ].data = data ;
211
- vgacon_scrollback_cur = & vgacon_scrollbacks [vc_num ];
212
-
213
- vgacon_scrollback_cur -> rows = rows - 1 ;
214
- vgacon_scrollback_cur -> size = rows * pitch ;
215
-
216
- vgacon_scrollback_reset (vc_num , size );
217
- }
218
-
219
- static void vgacon_scrollback_switch (int vc_num )
220
- {
221
- if (!scrollback_persistent )
222
- vc_num = 0 ;
223
-
224
- if (!vgacon_scrollbacks [vc_num ].data ) {
225
- vgacon_scrollback_init (vc_num );
226
- } else {
227
- if (scrollback_persistent ) {
228
- vgacon_scrollback_cur = & vgacon_scrollbacks [vc_num ];
229
- } else {
230
- size_t size = CONFIG_VGACON_SOFT_SCROLLBACK_SIZE * 1024 ;
231
-
232
- vgacon_scrollback_reset (vc_num , size );
233
- }
234
- }
235
- }
236
-
237
- static void vgacon_scrollback_startup (void )
238
- {
239
- vgacon_scrollback_cur = & vgacon_scrollbacks [0 ];
240
- vgacon_scrollback_init (0 );
241
- }
242
-
243
- static void vgacon_scrollback_update (struct vc_data * c , int t , int count )
244
- {
245
- void * p ;
246
-
247
- if (!vgacon_scrollback_cur -> data || !vgacon_scrollback_cur -> size ||
248
- c -> vc_num != fg_console )
249
- return ;
250
-
251
- p = (void * ) (c -> vc_origin + t * c -> vc_size_row );
252
-
253
- while (count -- ) {
254
- if ((vgacon_scrollback_cur -> tail + c -> vc_size_row ) >
255
- vgacon_scrollback_cur -> size )
256
- vgacon_scrollback_cur -> tail = 0 ;
257
-
258
- scr_memcpyw (vgacon_scrollback_cur -> data +
259
- vgacon_scrollback_cur -> tail ,
260
- p , c -> vc_size_row );
261
-
262
- vgacon_scrollback_cur -> cnt ++ ;
263
- p += c -> vc_size_row ;
264
- vgacon_scrollback_cur -> tail += c -> vc_size_row ;
265
-
266
- if (vgacon_scrollback_cur -> tail >= vgacon_scrollback_cur -> size )
267
- vgacon_scrollback_cur -> tail = 0 ;
268
-
269
- if (vgacon_scrollback_cur -> cnt > vgacon_scrollback_cur -> rows )
270
- vgacon_scrollback_cur -> cnt = vgacon_scrollback_cur -> rows ;
271
-
272
- vgacon_scrollback_cur -> cur = vgacon_scrollback_cur -> cnt ;
273
- }
274
- }
275
-
276
- static void vgacon_restore_screen (struct vc_data * c )
277
- {
278
- c -> vc_origin = c -> vc_visible_origin ;
279
- vgacon_scrollback_cur -> save = 0 ;
280
-
281
- if (!vga_is_gfx && !vgacon_scrollback_cur -> restore ) {
282
- scr_memcpyw ((u16 * ) c -> vc_origin , (u16 * ) c -> vc_screenbuf ,
283
- c -> vc_screenbuf_size > vga_vram_size ?
284
- vga_vram_size : c -> vc_screenbuf_size );
285
- vgacon_scrollback_cur -> restore = 1 ;
286
- vgacon_scrollback_cur -> cur = vgacon_scrollback_cur -> cnt ;
287
- }
288
- }
289
-
290
- static void vgacon_scrolldelta (struct vc_data * c , int lines )
291
- {
292
- int start , end , count , soff ;
293
-
294
- if (!lines ) {
295
- vgacon_restore_screen (c );
296
- return ;
297
- }
298
-
299
- if (!vgacon_scrollback_cur -> data )
300
- return ;
301
-
302
- if (!vgacon_scrollback_cur -> save ) {
303
- vgacon_cursor (c , CM_ERASE );
304
- vgacon_save_screen (c );
305
- c -> vc_origin = (unsigned long )c -> vc_screenbuf ;
306
- vgacon_scrollback_cur -> save = 1 ;
307
- }
308
-
309
- vgacon_scrollback_cur -> restore = 0 ;
310
- start = vgacon_scrollback_cur -> cur + lines ;
311
- end = start + abs (lines );
312
-
313
- if (start < 0 )
314
- start = 0 ;
315
-
316
- if (start > vgacon_scrollback_cur -> cnt )
317
- start = vgacon_scrollback_cur -> cnt ;
318
-
319
- if (end < 0 )
320
- end = 0 ;
321
-
322
- if (end > vgacon_scrollback_cur -> cnt )
323
- end = vgacon_scrollback_cur -> cnt ;
324
-
325
- vgacon_scrollback_cur -> cur = start ;
326
- count = end - start ;
327
- soff = vgacon_scrollback_cur -> tail -
328
- ((vgacon_scrollback_cur -> cnt - end ) * c -> vc_size_row );
329
- soff -= count * c -> vc_size_row ;
330
-
331
- if (soff < 0 )
332
- soff += vgacon_scrollback_cur -> size ;
333
-
334
- count = vgacon_scrollback_cur -> cnt - start ;
335
-
336
- if (count > c -> vc_rows )
337
- count = c -> vc_rows ;
338
-
339
- if (count ) {
340
- int copysize ;
341
-
342
- int diff = c -> vc_rows - count ;
343
- void * d = (void * ) c -> vc_visible_origin ;
344
- void * s = (void * ) c -> vc_screenbuf ;
345
-
346
- count *= c -> vc_size_row ;
347
- /* how much memory to end of buffer left? */
348
- copysize = min (count , vgacon_scrollback_cur -> size - soff );
349
- scr_memcpyw (d , vgacon_scrollback_cur -> data + soff , copysize );
350
- d += copysize ;
351
- count -= copysize ;
352
-
353
- if (count ) {
354
- scr_memcpyw (d , vgacon_scrollback_cur -> data , count );
355
- d += count ;
356
- }
357
-
358
- if (diff )
359
- scr_memcpyw (d , s , diff * c -> vc_size_row );
360
- } else
361
- vgacon_cursor (c , CM_MOVE );
362
- }
363
-
364
- static void vgacon_flush_scrollback (struct vc_data * c )
365
- {
366
- size_t size = CONFIG_VGACON_SOFT_SCROLLBACK_SIZE * 1024 ;
367
-
368
- vgacon_scrollback_reset (c -> vc_num , size );
369
- }
370
- #else
371
- #define vgacon_scrollback_startup (...) do { } while (0)
372
- #define vgacon_scrollback_init (...) do { } while (0)
373
- #define vgacon_scrollback_update (...) do { } while (0)
374
- #define vgacon_scrollback_switch (...) do { } while (0)
375
-
376
168
static void vgacon_restore_screen (struct vc_data * c )
377
169
{
378
170
if (c -> vc_origin != c -> vc_visible_origin )
@@ -386,11 +178,6 @@ static void vgacon_scrolldelta(struct vc_data *c, int lines)
386
178
vga_set_mem_top (c );
387
179
}
388
180
389
- static void vgacon_flush_scrollback (struct vc_data * c )
390
- {
391
- }
392
- #endif /* CONFIG_VGACON_SOFT_SCROLLBACK */
393
-
394
181
static const char * vgacon_startup (void )
395
182
{
396
183
const char * display_desc = NULL ;
@@ -573,10 +360,7 @@ static const char *vgacon_startup(void)
573
360
vgacon_xres = screen_info .orig_video_cols * VGA_FONTWIDTH ;
574
361
vgacon_yres = vga_scan_lines ;
575
362
576
- if (!vga_init_done ) {
577
- vgacon_scrollback_startup ();
578
- vga_init_done = true;
579
- }
363
+ vga_init_done = true;
580
364
581
365
return display_desc ;
582
366
}
@@ -869,7 +653,6 @@ static int vgacon_switch(struct vc_data *c)
869
653
vgacon_doresize (c , c -> vc_cols , c -> vc_rows );
870
654
}
871
655
872
- vgacon_scrollback_switch (c -> vc_num );
873
656
return 0 ; /* Redrawing not needed */
874
657
}
875
658
@@ -1386,7 +1169,6 @@ static bool vgacon_scroll(struct vc_data *c, unsigned int t, unsigned int b,
1386
1169
oldo = c -> vc_origin ;
1387
1170
delta = lines * c -> vc_size_row ;
1388
1171
if (dir == SM_UP ) {
1389
- vgacon_scrollback_update (c , t , lines );
1390
1172
if (c -> vc_scr_end + delta >= vga_vram_end ) {
1391
1173
scr_memcpyw ((u16 * ) vga_vram_base ,
1392
1174
(u16 * ) (oldo + delta ),
@@ -1450,7 +1232,6 @@ const struct consw vga_con = {
1450
1232
.con_save_screen = vgacon_save_screen ,
1451
1233
.con_build_attr = vgacon_build_attr ,
1452
1234
.con_invert_region = vgacon_invert_region ,
1453
- .con_flush_scrollback = vgacon_flush_scrollback ,
1454
1235
};
1455
1236
EXPORT_SYMBOL (vga_con );
1456
1237
0 commit comments