cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fbcon_rotate.h (2435B)


      1/*
      2 *  linux/drivers/video/console/fbcon_rotate.h -- Software Display Rotation
      3 *
      4 *	Copyright (C) 2005 Antonino Daplas <adaplas@pol.net>
      5 *
      6 *  This file is subject to the terms and conditions of the GNU General Public
      7 *  License.  See the file COPYING in the main directory of this archive
      8 *  for more details.
      9 */
     10
     11#ifndef _FBCON_ROTATE_H
     12#define _FBCON_ROTATE_H
     13
     14#define GETVYRES(s,i) ({                           \
     15        (fb_scrollmode(s) == SCROLL_REDRAW || fb_scrollmode(s) == SCROLL_MOVE) ? \
     16        (i)->var.yres : (i)->var.yres_virtual; })
     17
     18#define GETVXRES(s,i) ({                           \
     19        (fb_scrollmode(s) == SCROLL_REDRAW || fb_scrollmode(s) == SCROLL_MOVE || !(i)->fix.xpanstep) ? \
     20        (i)->var.xres : (i)->var.xres_virtual; })
     21
     22
     23static inline int pattern_test_bit(u32 x, u32 y, u32 pitch, const char *pat)
     24{
     25	u32 tmp = (y * pitch) + x, index = tmp / 8,  bit = tmp % 8;
     26
     27	pat +=index;
     28	return (*pat) & (0x80 >> bit);
     29}
     30
     31static inline void pattern_set_bit(u32 x, u32 y, u32 pitch, char *pat)
     32{
     33	u32 tmp = (y * pitch) + x, index = tmp / 8, bit = tmp % 8;
     34
     35	pat += index;
     36
     37	(*pat) |= 0x80 >> bit;
     38}
     39
     40static inline void rotate_ud(const char *in, char *out, u32 width, u32 height)
     41{
     42	int i, j;
     43	int shift = (8 - (width % 8)) & 7;
     44
     45	width = (width + 7) & ~7;
     46
     47	for (i = 0; i < height; i++) {
     48		for (j = 0; j < width - shift; j++) {
     49			if (pattern_test_bit(j, i, width, in))
     50				pattern_set_bit(width - (1 + j + shift),
     51						height - (1 + i),
     52						width, out);
     53		}
     54
     55	}
     56}
     57
     58static inline void rotate_cw(const char *in, char *out, u32 width, u32 height)
     59{
     60	int i, j, h = height, w = width;
     61	int shift = (8 - (height % 8)) & 7;
     62
     63	width = (width + 7) & ~7;
     64	height = (height + 7) & ~7;
     65
     66	for (i = 0; i < h; i++) {
     67		for (j = 0; j < w; j++) {
     68			if (pattern_test_bit(j, i, width, in))
     69				pattern_set_bit(height - 1 - i - shift, j,
     70						height, out);
     71
     72		}
     73	}
     74}
     75
     76static inline void rotate_ccw(const char *in, char *out, u32 width, u32 height)
     77{
     78	int i, j, h = height, w = width;
     79	int shift = (8 - (width % 8)) & 7;
     80
     81	width = (width + 7) & ~7;
     82	height = (height + 7) & ~7;
     83
     84	for (i = 0; i < h; i++) {
     85		for (j = 0; j < w; j++) {
     86			if (pattern_test_bit(j, i, width, in))
     87				pattern_set_bit(i, width - 1 - j - shift,
     88						height, out);
     89		}
     90	}
     91}
     92
     93extern void fbcon_rotate_cw(struct fbcon_ops *ops);
     94extern void fbcon_rotate_ud(struct fbcon_ops *ops);
     95extern void fbcon_rotate_ccw(struct fbcon_ops *ops);
     96#endif