File Index
Files and directories
Sign in
FILE

fbcon_rotate.h

File preview with syntax highlighting.

linux-6.19.14/drivers/video/fbdev/core/fbcon_rotate.h C
  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
 93int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc);
 94
 95#if defined(CONFIG_FRAMEBUFFER_CONSOLE_ROTATION)
 96void fbcon_set_bitops_cw(struct fbcon_par *par);
 97void fbcon_set_bitops_ud(struct fbcon_par *par);
 98void fbcon_set_bitops_ccw(struct fbcon_par *par);
 99#else
100static inline void fbcon_set_bitops_cw(struct fbcon_par *par)
101{ }
102static inline void fbcon_set_bitops_ud(struct fbcon_par *par)
103{ }
104static inline void fbcon_set_bitops_ccw(struct fbcon_par *par)
105{ }
106#endif
107
108#endif
~/ Read-only file preview.