Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
C
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169/* * font.h -- `Soft' font definitions * * Created 1995 by Geert Uytterhoeven * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive * for more details. */
#ifndef _VIDEO_FONT_H#define _VIDEO_FONT_H
#include <linux/math.h>#include <linux/types.h>
struct console_font;
/* * Glyphs */
/** * font_glyph_pitch - Calculates the number of bytes per scanline * @width: The glyph width in bits per scanline * * A glyph's pitch is the number of bytes in a single scanline, rounded * up to the next full byte. The parameter @width receives the number * of visible bits per scanline. For example, if width is 14 bytes per * scanline, the pitch is 2 bytes per scanline. If width is 8 bits per * scanline, the pitch is 1 byte per scanline. * * Returns: * The number of bytes in a single scanline of the glyph */static inline unsigned int font_glyph_pitch(unsigned int width){ return DIV_ROUND_UP(width, 8);}
/** * font_glyph_size - Calculates the number of bytes per glyph * @width: The glyph width in bits per scanline * @vpitch: The number of scanlines in the glyph * * The number of bytes in a glyph depends on the pitch and the number * of scanlines. font_glyph_size automatically calculates the pitch * from the given width. The parameter @vpitch gives the number of * scanlines, which is usually the glyph's height in scanlines. Fonts * coming from user space can sometimes have a different vertical pitch * with empty scanlines between two adjacent glyphs. * * Returns: the number of bytes per glyph */static inline unsigned int font_glyph_size(unsigned int width, unsigned int vpitch){ return font_glyph_pitch(width) * vpitch;}
/* * font_data_t and helpers */
/** * typedef font_data_t - Raw font data * * Values of type font_data_t store a pointer to raw font data. The format * is monochrome. Each bit sets a pixel of a stored glyph. Font data does * not store geometry information for the individual glyphs. Users of the * font have to store glyph size, pitch and character count separately. * * Font data in font_data_t is not equivalent to raw u8. Each pointer stores * an additional hidden header before the font data. The layout is * * +------+-----------------------------+ * | -16 | CRC32 Checksum (optional) | * | -12 | <Unused> | * | -8 | Number of data bytes | * | -4 | Reference count | * +------+-----------------------------+ * | 0 | Data buffer | * | ... | | * +------+-----------------------------+ * * Use helpers to access font_data_t. Use font_data_buf() to get the stored data. */typedef const unsigned char font_data_t;
/** * font_data_buf() - Returns the font data as raw bytes * @fd: The font data * * Returns: * The raw font data. The provided buffer is read-only. */static inline const unsigned char *font_data_buf(font_data_t *fd){ return (const unsigned char *)fd;}
font_data_t *font_data_import(const struct console_font *font, unsigned int vpitch, u32 (*calc_csum)(u32, const void *, size_t));void font_data_get(font_data_t *fd);bool font_data_put(font_data_t *fd);unsigned int font_data_size(font_data_t *fd);const unsigned char *font_data_glyph_buf(font_data_t *fd, unsigned int width, unsigned int vpitch, unsigned int c);bool font_data_is_equal(font_data_t *lhs, font_data_t *rhs);int font_data_export(font_data_t *fd, struct console_font *font, unsigned int vpitch);
/* font_rotate.c */void font_glyph_rotate_90(const unsigned char *glyph, unsigned int width, unsigned int height, unsigned char *out);void font_glyph_rotate_180(const unsigned char *glyph, unsigned int width, unsigned int height, unsigned char *out);void font_glyph_rotate_270(const unsigned char *glyph, unsigned int width, unsigned int height, unsigned char *out);unsigned char *font_data_rotate(font_data_t *fd, unsigned int width, unsigned int height, unsigned int charcount, unsigned int steps, unsigned char *buf, size_t *bufsize);
/* * Font description */
struct font_desc { int idx; const char *name; unsigned int width, height; unsigned int charcount; font_data_t *data; int pref;};
/* Find a font with a specific name */
extern const struct font_desc *find_font(const char *name);
/* Get the default font for a specific screen size */
extern const struct font_desc *get_default_font(int xres, int yres, unsigned long *font_w, unsigned long *font_h);
/* Max. length for the name of a predefined font */#define MAX_FONT_NAME 32
/* * Built-in fonts */
extern const struct font_desc font_10x18;extern const struct font_desc font_6x10;extern const struct font_desc font_6x8;extern const struct font_desc font_7x14;extern const struct font_desc font_acorn_8x8;extern const struct font_desc font_mini_4x6;extern const struct font_desc font_pearl_8x8;extern const struct font_desc font_sun_12x22;extern const struct font_desc font_sun_8x16;extern const struct font_desc font_ter_10x18;extern const struct font_desc font_ter_16x32;extern const struct font_desc font_vga_6x11;extern const struct font_desc font_vga_8x16;extern const struct font_desc font_vga_8x8;
#endif /* _VIDEO_FONT_H */