Hey folks,
I'm using a virtual framebuffer on some embedded hardware, and I'm trying to keep track of all changes to the framebuffer. I know when the three biggies, cfb_imageblit, cfb_fillrect, and cfb_copyarea write to it, but there's somebody else out there monkeying with it. These mystery writes happen during scrolling, which makes me think its somebody in fbcon. And I know its nothing from userspace, because this is happening during boot before we ever get to userspace. There any docs on this? Is somebody in fbcon writing to my framebuffer behind my back?
Much thanks,
Nathan
fbcon_scroll
fbcon_scroll() calls info->fbcon_par->bmove()
which is usually bit_bmove()
which calls info->fbops->fb_copyarea()
which is usually cfb_copyarea().
fbcon_scroll() also calls info->fbcon_par->clear()
which is usually bit_clear()
which calls info->fbops->fb_fillrect()
which is usually cfb_fillrect().
fbcon_scroll() also calls fbcon_cursor()
which calls info->fbcon_par->cursor
which is usually bit_cursor()
which calls info->fbops->fb_cursor()
which is usually soft_cursor().
Is soft_cursor() the function you wanted?
soft_cursor()
Well, and then soft_cursor() in turn calls info->fbops->fb_imageblit(), which is in this case cfb_imageblit().
My mystery writes ARE cursor sized (8x16 pixels). I can't find any, but do any cursor functions not in cfb* operate directly on info->screen_base?
What I'm seeing is that cfb_imageblit will receive a block of text from fbcon to draw at, say, (0,72), with a width of 64 pixels. Then the next block it receives is for (72,72). An eight pixel gap, and there should be some data between the two blocks. In fact if I look at the data after its finished with the line the data is somehow there. This happens at exactly the same locations every run.