diff options
author | Eugene Syromyatnikov <evgsyr@gmail.com> | 2021-10-21 20:54:01 +0200 |
---|---|---|
committer | Eugene Syromyatnikov <evgsyr@gmail.com> | 2022-08-09 08:32:01 +0200 |
commit | 2e94ee40e2f4468318521de5d049b9a4f7c4dbed (patch) | |
tree | b8344c6739d4706359fe29df33e0f0e2ebc0b04b | |
parent | 22a68526021b1a5fb3eb202be01af71aaf94b9a8 (diff) | |
download | strace-esyr/fb.tar.gz |
Decode FBIO* ioctl commandsesyr/fb
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/defs.h | 2 | ||||
-rw-r--r-- | src/fb_ioctl.c | 333 | ||||
-rw-r--r-- | src/fb_mpers_ioctl.c | 180 | ||||
-rw-r--r-- | src/ioctl.c | 2 | ||||
-rw-r--r-- | src/util.c | 1 | ||||
-rw-r--r-- | src/xlat/fb_accel_flags.in | 1 | ||||
-rw-r--r-- | src/xlat/fb_accels.in | 83 | ||||
-rw-r--r-- | src/xlat/fb_activate_flags.in | 6 | ||||
-rw-r--r-- | src/xlat/fb_activate_vals.in | 4 | ||||
-rw-r--r-- | src/xlat/fb_caps.in | 1 | ||||
-rw-r--r-- | src/xlat/fb_ioctl_cmds.in | 40 | ||||
-rw-r--r-- | src/xlat/fb_sync_flags.in | 6 | ||||
-rw-r--r-- | src/xlat/fb_type_aux_text.in | 11 | ||||
-rw-r--r-- | src/xlat/fb_type_aux_vga_planes.in | 4 | ||||
-rw-r--r-- | src/xlat/fb_types.in | 7 | ||||
-rw-r--r-- | src/xlat/fb_vblank_flags.in | 9 | ||||
-rw-r--r-- | src/xlat/fb_visuals.in | 8 | ||||
-rw-r--r-- | src/xlat/fb_vmode_flags.in | 2 | ||||
-rw-r--r-- | src/xlat/fb_vmodes.in | 4 |
20 files changed, 706 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 6ee9fb0ac..1a2d1c95b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -103,6 +103,8 @@ libstrace_a_SOURCES = \ fadvise.c \ fallocate.c \ fanotify.c \ + fb_ioctl.c \ + fb_mpers_ioctl.c \ fchownat.c \ fcntl.c \ fetch_bpf_fprog.c \ diff --git a/src/defs.h b/src/defs.h index af2a645cf..d7ebc7a8f 100644 --- a/src/defs.h +++ b/src/defs.h @@ -1391,6 +1391,7 @@ name ## _ioctl(struct tcb *, unsigned int request, kernel_ulong_t arg) \ DECL_IOCTL(counter); DECL_IOCTL(dm); DECL_IOCTL(evdev); +DECL_IOCTL(fb); DECL_IOCTL(fs_0x94); DECL_IOCTL(fs_f); DECL_IOCTL(fs_x); @@ -1722,6 +1723,7 @@ printnum_ ## name(struct tcb *, kernel_ulong_t addr, const char *fmt) \ ATTRIBUTE_FORMAT((printf, 3, 0)) \ /* End of DECL_PRINTNUM definition. */ +DECL_PRINTNUM(char); DECL_PRINTNUM(short); DECL_PRINTNUM(int); DECL_PRINTNUM(int64); diff --git a/src/fb_ioctl.c b/src/fb_ioctl.c new file mode 100644 index 000000000..fcfbb806d --- /dev/null +++ b/src/fb_ioctl.c @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2021 Eugene Syromyatnikov <evgsyr@gmail.com>. + * All rights reserved. + * + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#include "defs.h" + +#include <linux/ioctl.h> +#include <linux/fb.h> + +#include "xlat/fb_accel_flags.h" +#include "xlat/fb_activate_flags.h" +#include "xlat/fb_activate_vals.h" +#include "xlat/fb_sync_flags.h" +#include "xlat/fb_vblank_flags.h" +#include "xlat/fb_vmodes.h" +#include "xlat/fb_vmode_flags.h" + +#define XLAT_MACROS_ONLY +# include "xlat/fb_ioctl_cmds.h" +#undef XLAT_MACROS_ONLY + +static void +print_fb_bitfield(struct fb_bitfield *bf) +{ + tprint_struct_begin(); + PRINT_FIELD_U(*bf, offset); + tprint_struct_next(); + PRINT_FIELD_U(*bf, length); + tprint_struct_next(); + PRINT_FIELD_U(*bf, msb_right); + tprint_struct_end(); +} + +static void +print_fb_activate(uint32_t val) +{ + uint32_t flags = val & ~FB_ACTIVATE_MASK; + uint32_t mode = val & FB_ACTIVATE_MASK; + + printflags(fb_activate_flags, flags, NULL); + if (flags) + tprints("|"); + printxval(fb_activate_vals, mode, "FB_ACTIVATE_???"); +} + +static void +print_fb_vmode(uint32_t val) +{ + uint32_t flags = val & ~FB_VMODE_MASK; + uint32_t mode = val & FB_VMODE_MASK; + + printflags(fb_vmode_flags, flags, NULL); + if (flags) + tprints("|"); + printflags(fb_vmodes, mode, "FB_VMODE_???"); +} + +static int +fb_vscreeninfo(struct tcb *const tcp, const kernel_ulong_t arg, const bool get) +{ + struct fb_var_screeninfo si; + + if (entering(tcp)) { + tprint_arg_next(); + if (get) + return 0; + } else { + if (!get) { + if (syserror(tcp)) + return RVAL_IOCTL_DECODED; + else + tprint_value_changed(); + } + } + + if (umove_or_printaddr(tcp, arg, &si)) + return RVAL_IOCTL_DECODED; + + tprint_struct_begin(); + PRINT_FIELD_U(si, xres); + tprint_struct_next(); + PRINT_FIELD_U(si, yres); + tprint_struct_next(); + PRINT_FIELD_U(si, xres_virtual); + tprint_struct_next(); + PRINT_FIELD_U(si, yres_virtual); + tprint_struct_next(); + PRINT_FIELD_U(si, xoffset); + tprint_struct_next(); + PRINT_FIELD_U(si, yoffset); + tprint_struct_next(); + PRINT_FIELD_U(si, bits_per_pixel); + tprint_struct_next(); + if (si.grayscale > 1) + PRINT_FIELD_PIXFMT(si, grayscale, v4l2_pix_fmts); + else + PRINT_FIELD_U(si, grayscale); + tprint_struct_next(); + PRINT_FIELD_OBJ_PTR(si, red, print_fb_bitfield); + tprint_struct_next(); + PRINT_FIELD_OBJ_PTR(si, green, print_fb_bitfield); + tprint_struct_next(); + PRINT_FIELD_OBJ_PTR(si, blue, print_fb_bitfield); + tprint_struct_next(); + PRINT_FIELD_OBJ_PTR(si, transp, print_fb_bitfield); + tprint_struct_next(); + /* + * Unfortunately, despite presence and some usage of FB_NONSTD_* + * constants, the encoding of the field is actually varies depending + * on driver. + */ + PRINT_FIELD_X(si, nonstd); + tprint_struct_next(); + PRINT_FIELD_OBJ_VAL(si, activate, print_fb_activate); + tprint_struct_next(); + PRINT_FIELD_U(si, height); + tprint_struct_next(); + PRINT_FIELD_U(si, width); + tprint_struct_next(); + PRINT_FIELD_FLAGS(si, accel_flags, fb_accel_flags, "FB_ACCELF_???"); + tprint_struct_next(); + PRINT_FIELD_U(si, pixclock); + tprint_struct_next(); + PRINT_FIELD_U(si, left_margin); + tprint_struct_next(); + PRINT_FIELD_U(si, right_margin); + tprint_struct_next(); + PRINT_FIELD_U(si, upper_margin); + tprint_struct_next(); + PRINT_FIELD_U(si, lower_margin); + tprint_struct_next(); + PRINT_FIELD_U(si, hsync_len); + tprint_struct_next(); + PRINT_FIELD_U(si, vsync_len); + tprint_struct_next(); + PRINT_FIELD_FLAGS(si, sync, fb_sync_flags, "FB_SYNC_???"); + tprint_struct_next(); + PRINT_FIELD_OBJ_VAL(si, vmode, print_fb_vmode); + tprint_struct_next(); + PRINT_FIELD_U(si, rotate); + tprint_struct_next(); + if (si.colorspace) + PRINT_FIELD_PIXFMT(si, colorspace, v4l2_pix_fmts); + else + PRINT_FIELD_U(si, colorspace); + if (!IS_ARRAY_ZERO(si.reserved)) { + tprint_struct_next(); + PRINT_FIELD_X_ARRAY(si, reserved); + } + tprint_struct_end(); + + return entering(tcp) ? 0 : RVAL_IOCTL_DECODED; +} + +static int +fb_con2fbmap(struct tcb *const tcp, const kernel_ulong_t arg, const bool get) +{ + struct fb_con2fbmap cf; + + if (entering(tcp)) { + tprint_arg_next(); + if (get) + return 0; + + if (umove_or_printaddr(tcp, arg, &cf)) + return RVAL_IOCTL_DECODED; + } else { + if (!get && (syserror(tcp) || umove(tcp, arg, &cf))) { + tprint_struct_end(); + return RVAL_IOCTL_DECODED; + } + } + + if (get || entering(tcp)) { + tprint_struct_begin(); + PRINT_FIELD_U(cf, console); + tprint_struct_next(); + + if (!get) + return 0; + } + + PRINT_FIELD_U(cf, framebuffer); + tprint_struct_end(); + + return RVAL_IOCTL_DECODED; +} + +static int +fb_vblank(struct tcb *const tcp, const kernel_ulong_t arg) +{ + struct fb_vblank vb; + + if (entering(tcp)) { + tprint_arg_next(); + return 0; + } + + if (umove_or_printaddr(tcp, arg, &vb)) + return RVAL_IOCTL_DECODED; + + tprint_struct_begin(); + PRINT_FIELD_FLAGS(vb, flags, fb_vblank_flags, "FB_VBLANK_???"); + tprint_struct_next(); + PRINT_FIELD_U(vb, count); + tprint_struct_next(); + PRINT_FIELD_U(vb, vcount); + tprint_struct_next(); + PRINT_FIELD_U(vb, hcount); + tprint_struct_next(); + if (!IS_ARRAY_ZERO(vb.reserved)) { + tprint_struct_next(); + PRINT_FIELD_X_ARRAY(vb, reserved); + } + + return RVAL_IOCTL_DECODED; +} + +static int +fb_da8xx_sync(struct tcb *const tcp, const kernel_ulong_t arg) +{ + struct lcd_sync_arg { + int back_porch; + int front_porch; + int pulse_width; + } sa; + + if (umove_or_printaddr(tcp, arg, &sa)) + return RVAL_IOCTL_DECODED; + + tprint_struct_begin(); + PRINT_FIELD_D(sa, back_porch); + tprint_struct_next(); + PRINT_FIELD_D(sa, front_porch); + tprint_struct_next(); + PRINT_FIELD_D(sa, pulse_width); + tprint_struct_end(); + + return RVAL_IOCTL_DECODED; +} + +int +fb_ioctl(struct tcb *const tcp, const unsigned int code, + const kernel_ulong_t arg) +{ + switch (code) { + case FBIOGET_VSCREENINFO: + case FBIOPUT_VSCREENINFO: + case FBIOPAN_DISPLAY: + return fb_vscreeninfo(tcp, arg, code == FBIOGET_VSCREENINFO); + + case FBIOGET_CON2FBMAP: + case FBIOPUT_CON2FBMAP: + return fb_con2fbmap(tcp, arg, code == FBIOGET_CON2FBMAP); + + case FBIOBLANK: + tprint_arg_next(); + PRINT_VAL_D(arg); + return RVAL_IOCTL_DECODED; + + case FBIOGET_VBLANK: + return fb_vblank(tcp, arg); + + case FBIO_WAITFORVSYNC: + tprint_arg_next(); + printnum_int(tcp, arg, "%u"); + return RVAL_IOCTL_DECODED; + + /* The following two commands are from da8xx_fb.c */ + case FBIPUT_HSYNC: + case FBIPUT_VSYNC: + return fb_da8xx_sync(tcp, arg); + + /* The following two are from arcfb.c */ + case FBIO_WAITEVENT: + return RVAL_IOCTL_DECODED; + + case FBIO_GETCONTROL2: + if (entering(tcp)) { + tprint_arg_next(); + return 0; + } + printnum_char(tcp, arg, "%hhu"); + return RVAL_IOCTL_DECODED; + + /* The following two are from sstfb.c */ + case SSTFB_SET_VGAPASS: + tprint_arg_next(); + printnum_int(tcp, arg, "%u"); + return RVAL_IOCTL_DECODED; + + case SSTFB_GET_VGAPASS: + if (entering(tcp)) { + tprint_arg_next(); + return 0; + } + printnum_int(tcp, arg, "%u"); + return RVAL_IOCTL_DECODED; + + /* Unsupported */ + case FBIO_CURSOR: + case FBIOGET_MONITORSPEC: + case FBIOPUT_MONITORSPEC: + case FBIOSWITCH_MONIBIT: + + /* These were implemented by pre-1.7.10 sisfb (v2.6.9-rc1~85^2~1^2~88) */ + case FBIO_ALLOC: + case FBIO_FREE: + case FBIOGET_GLYPH: + case FBIOGET_HWCINFO: + case FBIOPUT_MODEINFO: + case FBIOGET_DISPINFO: + + /* + * These are declared in include/video/da8xx-fb.h, mentioned only + * in da8xx-fb.c, and never have an implementetion (always returned + * EINVAL/ENOTTY). + */ + case FBIOGET_CONTRAST: + case FBIOPUT_CONTRAST: + case FBIGET_BRIGHTNESS: + case FBIPUT_BRIGHTNESS: + case FBIGET_COLOR: + case FBIPUT_COLOR: + return RVAL_DECODED; + } + + /* FBIOGET_FSCREENINFO, FBIOGETCMAP, FBIOPUTCMAP */ + return fb_mpers_ioctl(tcp, code, arg); +} diff --git a/src/fb_mpers_ioctl.c b/src/fb_mpers_ioctl.c new file mode 100644 index 000000000..96290a265 --- /dev/null +++ b/src/fb_mpers_ioctl.c @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2021 Eugene Syromyatnikov <evgsyr@gmail.com>. + * All rights reserved. + * + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#include "defs.h" + +#include <linux/ioctl.h> +#include <linux/fb.h> + +#include DEF_MPERS_TYPE(struct_fb_cmap) +#include DEF_MPERS_TYPE(struct_fb_fix_screeninfo) + +typedef struct fb_cmap struct_fb_cmap; +typedef struct fb_fix_screeninfo struct_fb_fix_screeninfo; + +#include MPERS_DEFS + +#include "xlat/fb_accels.h" +#include "xlat/fb_caps.h" +#include "xlat/fb_types.h" +#include "xlat/fb_type_aux_text.h" +#include "xlat/fb_type_aux_vga_planes.h" +#include "xlat/fb_visuals.h" + +#define XLAT_MACROS_ONLY +# include "xlat/fb_ioctl_cmds.h" +#undef XLAT_MACROS_ONLY + +static int +fb_fscreeninfo(struct tcb *const tcp, const kernel_ulong_t arg) +{ + struct_fb_fix_screeninfo si; + + if (entering(tcp)) { + tprint_arg_next(); + return 0; + } + + if (umove_or_printaddr(tcp, arg, &si)) + return RVAL_IOCTL_DECODED; + + tprint_struct_begin(); + PRINT_FIELD_CSTRING(si, id); + tprint_struct_next(); + PRINT_FIELD_PTR(si, smem_start); + tprint_struct_next(); + PRINT_FIELD_X(si, smem_len); + tprint_struct_next(); + PRINT_FIELD_XVAL(si, type, fb_types, "FB_TYPE_???"); + tprint_struct_next(); + switch (si.type) { + case FB_TYPE_TEXT: + PRINT_FIELD_XVAL(si, type_aux, fb_type_aux_text, + "FB_AUX_TEXT_???"); + break; + case FB_TYPE_VGA_PLANES: + PRINT_FIELD_XVAL(si, type_aux, fb_type_aux_vga_planes, + "FB_AUX_VGA_PLANES_???"); + break; + default: + PRINT_FIELD_X(si, type_aux); + } + tprint_struct_next(); + PRINT_FIELD_XVAL(si, visual, fb_visuals, "FB_VISUAL_???"); + tprint_struct_next(); + PRINT_FIELD_U(si, xpanstep); + tprint_struct_next(); + PRINT_FIELD_U(si, ypanstep); + tprint_struct_next(); + PRINT_FIELD_U(si, ywrapstep); + tprint_struct_next(); + PRINT_FIELD_U(si, line_length); + tprint_struct_next(); + PRINT_FIELD_PTR(si, mmio_start); + tprint_struct_next(); + PRINT_FIELD_X(si, mmio_len); + tprint_struct_next(); + PRINT_FIELD_XVAL(si, accel, fb_accels, "FB_ACCEL_???"); + tprint_struct_next(); + PRINT_FIELD_FLAGS(si, capabilities, fb_caps, "FB_CAP_???"); + if (!IS_ARRAY_ZERO(si.reserved)) { + tprint_struct_next(); + PRINT_FIELD_X_ARRAY(si, reserved); + } + tprint_struct_end(); + + return RVAL_IOCTL_DECODED; +} + +#define PRINT_FIELD_U16_ARR(where_, field_, tcp_, len_, print_func_) \ + do { \ + uint16_t elem_; \ + tprints_field_name(#field_); \ + print_array((tcp_), (mpers_ptr_t) (where_).field_, \ + (len_), &elem_, sizeof(elem_), \ + tfetch_mem, (print_func_), NULL); \ + } while (0) + +static void +print_fb_cmap(struct tcb *const tcp, const struct_fb_cmap *const cm, + const bool print_arrays) +{ + tprint_struct_begin(); + PRINT_FIELD_U(*cm, start); + tprint_struct_next(); + PRINT_FIELD_U(*cm, len); + tprint_struct_next(); + if (print_arrays) { + PRINT_FIELD_U16_ARR(*cm, red, tcp, cm->len, + print_uint_array_member); + tprint_struct_next(); + PRINT_FIELD_U16_ARR(*cm, green, tcp, cm->len, + print_uint_array_member); + tprint_struct_next(); + PRINT_FIELD_U16_ARR(*cm, blue, tcp, cm->len, + print_uint_array_member); + tprint_struct_next(); + PRINT_FIELD_U16_ARR(*cm, transp, tcp, cm->len, + print_uint_array_member); + } else { + PRINT_FIELD_PTR(*cm, red); + tprint_struct_next(); + PRINT_FIELD_PTR(*cm, green); + tprint_struct_next(); + PRINT_FIELD_PTR(*cm, blue); + tprint_struct_next(); + PRINT_FIELD_PTR(*cm, transp); + } + tprint_struct_end(); +} + +static int +fb_cmap(struct tcb *const tcp, const kernel_ulong_t arg, const bool get) +{ + struct_fb_cmap cm; + + if (entering(tcp)) { + tprint_arg_next(); + if (get) { + if (umove_or_printaddr(tcp, arg, &cm)) + return RVAL_IOCTL_DECODED; + + print_fb_cmap(tcp, &cm, false); + return 0; + } + } + + if (get) { + if (syserror(tcp) || umove(tcp, arg, &cm)) + return RVAL_IOCTL_DECODED; + else + tprint_value_changed(); + } else { + if (umove_or_printaddr(tcp, arg, &cm)) + return RVAL_IOCTL_DECODED; + } + + print_fb_cmap(tcp, &cm, true); + + return RVAL_IOCTL_DECODED; + +} + +MPERS_PRINTER_DECL(int, fb_mpers_ioctl, struct tcb *const tcp, + const unsigned int code, const kernel_ulong_t arg) +{ + switch (code) { + case FBIOGET_FSCREENINFO: + return fb_fscreeninfo(tcp, arg); + + case FBIOGETCMAP: + case FBIOPUTCMAP: + return fb_cmap(tcp, arg, code == FBIOGETCMAP); + } + + return RVAL_DECODED; +} diff --git a/src/ioctl.c b/src/ioctl.c index 60dffa7aa..c75a0ddc3 100644 --- a/src/ioctl.c +++ b/src/ioctl.c @@ -366,6 +366,8 @@ ioctl_decode(struct tcb *tcp) return counter_ioctl(tcp, code, arg); case 'E': return evdev_ioctl(tcp, code, arg); + case 'F': + return fb_ioctl(tcp, code, arg); case 'I': return inotify_ioctl(tcp, code, arg); case 'K': diff --git a/src/util.c b/src/util.c index c4c4bc0ef..cd491ee44 100644 --- a/src/util.c +++ b/src/util.c @@ -454,6 +454,7 @@ DEF_PRINTNUM(int, int) DEF_PRINTNUM_ADDR(int, unsigned int) DEF_PRINTPAIR(int, int) DEF_PRINTNUM(short, short) +DEF_PRINTNUM(char, char) DEF_PRINTNUM(int64, uint64_t) DEF_PRINTNUM_ADDR(int64, uint64_t) DEF_PRINTPAIR(int64, uint64_t) diff --git a/src/xlat/fb_accel_flags.in b/src/xlat/fb_accel_flags.in new file mode 100644 index 000000000..5fb477070 --- /dev/null +++ b/src/xlat/fb_accel_flags.in @@ -0,0 +1 @@ +FB_ACCELF_TEXT 1 diff --git a/src/xlat/fb_accels.in b/src/xlat/fb_accels.in new file mode 100644 index 000000000..6a0639fe4 --- /dev/null +++ b/src/xlat/fb_accels.in @@ -0,0 +1,83 @@ +#sorted +FB_ACCEL_NONE 0 +FB_ACCEL_ATARIBLITT 1 +FB_ACCEL_AMIGABLITT 2 +FB_ACCEL_S3_TRIO64 3 +FB_ACCEL_NCR_77C32BLT 4 +FB_ACCEL_S3_VIRGE 5 +FB_ACCEL_ATI_MACH64GX 6 +FB_ACCEL_DEC_TGA 7 +FB_ACCEL_ATI_MACH64CT 8 +FB_ACCEL_ATI_MACH64VT 9 +FB_ACCEL_ATI_MACH64GT 10 +FB_ACCEL_SUN_CREATOR 11 +FB_ACCEL_SUN_CGSIX 12 +FB_ACCEL_SUN_LEO 13 +FB_ACCEL_IMS_TWINTURBO 14 +FB_ACCEL_3DLABS_PERMEDIA2 15 +FB_ACCEL_MATROX_MGA2064W 16 +FB_ACCEL_MATROX_MGA1064SG 17 +FB_ACCEL_MATROX_MGA2164W 18 +FB_ACCEL_MATROX_MGA2164W_AGP 19 +FB_ACCEL_MATROX_MGAG100 20 +FB_ACCEL_MATROX_MGAG200 21 +FB_ACCEL_SUN_CG14 22 +FB_ACCEL_SUN_BWTWO 23 +FB_ACCEL_SUN_CGTHREE 24 +FB_ACCEL_SUN_TCX 25 +FB_ACCEL_MATROX_MGAG400 26 +FB_ACCEL_NV3 27 +FB_ACCEL_NV4 28 +FB_ACCEL_NV5 29 +FB_ACCEL_CT_6555x 30 +FB_ACCEL_3DFX_BANSHEE 31 +FB_ACCEL_ATI_RAGE128 32 +FB_ACCEL_IGS_CYBER2000 33 +FB_ACCEL_IGS_CYBER2010 34 +FB_ACCEL_IGS_CYBER5000 35 +FB_ACCEL_SIS_GLAMOUR 36 +FB_ACCEL_3DLABS_PERMEDIA3 37 +FB_ACCEL_ATI_RADEON 38 +FB_ACCEL_I810 39 +FB_ACCEL_SIS_GLAMOUR_2 40 +FB_ACCEL_SIS_XABRE 41 +FB_ACCEL_I830 42 +FB_ACCEL_NV_10 43 +FB_ACCEL_NV_20 44 +FB_ACCEL_NV_30 45 +FB_ACCEL_NV_40 46 +FB_ACCEL_XGI_VOLARI_V 47 +FB_ACCEL_XGI_VOLARI_Z 48 +FB_ACCEL_OMAP1610 49 +FB_ACCEL_TRIDENT_TGUI 50 +FB_ACCEL_TRIDENT_3DIMAGE 51 +FB_ACCEL_TRIDENT_BLADE3D 52 +FB_ACCEL_TRIDENT_BLADEXP 53 +FB_ACCEL_NEOMAGIC_NM2070 90 +FB_ACCEL_NEOMAGIC_NM2090 91 +FB_ACCEL_NEOMAGIC_NM2093 92 +FB_ACCEL_NEOMAGIC_NM2097 93 +FB_ACCEL_NEOMAGIC_NM2160 94 +FB_ACCEL_NEOMAGIC_NM2200 95 +FB_ACCEL_NEOMAGIC_NM2230 96 +FB_ACCEL_NEOMAGIC_NM2360 97 +FB_ACCEL_NEOMAGIC_NM2380 98 +FB_ACCEL_PXA3XX 99 + +FB_ACCEL_SAVAGE4 0x80 +FB_ACCEL_SAVAGE3D 0x81 +FB_ACCEL_SAVAGE3D_MV 0x82 +FB_ACCEL_SAVAGE2000 0x83 +FB_ACCEL_SAVAGE_MX_MV 0x84 +FB_ACCEL_SAVAGE_MX 0x85 +FB_ACCEL_SAVAGE_IX_MV 0x86 +FB_ACCEL_SAVAGE_IX 0x87 +FB_ACCEL_PROSAVAGE_PM 0x88 +FB_ACCEL_PROSAVAGE_KM 0x89 +FB_ACCEL_S3TWISTER_P 0x8a +FB_ACCEL_S3TWISTER_K 0x8b +FB_ACCEL_SUPERSAVAGE 0x8c +FB_ACCEL_PROSAVAGE_DDR 0x8d +FB_ACCEL_PROSAVAGE_DDRK 0x8e + +FB_ACCEL_PUV3_UNIGFX 0xa0 diff --git a/src/xlat/fb_activate_flags.in b/src/xlat/fb_activate_flags.in new file mode 100644 index 000000000..20eabcde0 --- /dev/null +++ b/src/xlat/fb_activate_flags.in @@ -0,0 +1,6 @@ +FB_ACTIVATE_VBL 16 +FB_CHANGE_CMAP_VBL 32 +FB_ACTIVATE_ALL 64 +FB_ACTIVATE_FORCE 128 +FB_ACTIVATE_INV_MODE 256 +FB_ACTIVATE_KD_TEXT 512 diff --git a/src/xlat/fb_activate_vals.in b/src/xlat/fb_activate_vals.in new file mode 100644 index 000000000..a6e628160 --- /dev/null +++ b/src/xlat/fb_activate_vals.in @@ -0,0 +1,4 @@ +#value_indexed +FB_ACTIVATE_NOW 0 +FB_ACTIVATE_NXTOPEN 1 +FB_ACTIVATE_TEST 2 diff --git a/src/xlat/fb_caps.in b/src/xlat/fb_caps.in new file mode 100644 index 000000000..e020ce751 --- /dev/null +++ b/src/xlat/fb_caps.in @@ -0,0 +1 @@ +FB_CAP_FOURCC 1 diff --git a/src/xlat/fb_ioctl_cmds.in b/src/xlat/fb_ioctl_cmds.in new file mode 100644 index 000000000..3961a14b4 --- /dev/null +++ b/src/xlat/fb_ioctl_cmds.in @@ -0,0 +1,40 @@ +/* include/uapi/linux/fb.h */ +FBIOGET_VSCREENINFO 0x4600 +FBIOPUT_VSCREENINFO 0x4601 +FBIOGET_FSCREENINFO 0x4602 +FBIOGETCMAP 0x4604 +FBIOPUTCMAP 0x4605 +FBIOPAN_DISPLAY 0x4606 +FBIO_CURSOR /* _IOWR('F', 0x08, struct fb_cursor) */ +FBIOGET_MONITORSPEC 0x460C +FBIOPUT_MONITORSPEC 0x460D +FBIOSWITCH_MONIBIT 0x460E +FBIOGET_CON2FBMAP 0x460F +FBIOPUT_CON2FBMAP 0x4610 +FBIOBLANK 0x4611 /* arg: 0 or vesa level + 1 */ +FBIOGET_VBLANK _IOR('F', 0x12, struct fb_vblank) +FBIO_ALLOC 0x4613 +FBIO_FREE 0x4614 +FBIOGET_GLYPH 0x4615 +FBIOGET_HWCINFO 0x4616 +FBIOPUT_MODEINFO 0x4617 +FBIOGET_DISPINFO 0x4618 +FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) + +/* include/video/da8xx-fb.h */ +FBIOGET_CONTRAST _IOR('F', 1, int) +FBIOPUT_CONTRAST _IOW('F', 2, int) +FBIGET_BRIGHTNESS _IOR('F', 3, int) +FBIPUT_BRIGHTNESS _IOW('F', 3, int) +FBIGET_COLOR _IOR('F', 5, int) +FBIPUT_COLOR _IOW('F', 6, int) +FBIPUT_HSYNC _IOW('F', 9, int) +FBIPUT_VSYNC _IOW('F', 10, int) + +/* include/uapi/linux/arcfb.h */ +FBIO_WAITEVENT _IO('F', 0x88) +FBIO_GETCONTROL2 _IOR('F', 0x89, size_t) + +/* include/video/sstfb.h */ +SSTFB_SET_VGAPASS _IOW('F', 0xdd, __u32) +SSTFB_GET_VGAPASS _IOR('F', 0xdd, __u32) diff --git a/src/xlat/fb_sync_flags.in b/src/xlat/fb_sync_flags.in new file mode 100644 index 000000000..4848f0347 --- /dev/null +++ b/src/xlat/fb_sync_flags.in @@ -0,0 +1,6 @@ +FB_SYNC_HOR_HIGH_ACT 1 +FB_SYNC_VERT_HIGH_ACT 2 +FB_SYNC_EXT 4 +FB_SYNC_COMP_HIGH_ACT 8 +FB_SYNC_BROADCAST 16 +FB_SYNC_ON_GREEN 32 diff --git a/src/xlat/fb_type_aux_text.in b/src/xlat/fb_type_aux_text.in new file mode 100644 index 000000000..751d330f4 --- /dev/null +++ b/src/xlat/fb_type_aux_text.in @@ -0,0 +1,11 @@ +#value_indexed +FB_AUX_TEXT_MDA 0 +FB_AUX_TEXT_CGA 1 +FB_AUX_TEXT_S3_MMIO 2 +FB_AUX_TEXT_MGA_STEP16 3 +FB_AUX_TEXT_MGA_STEP8 4 +FB_AUX_TEXT_SVGA_STEP2 8 +FB_AUX_TEXT_SVGA_STEP4 9 +FB_AUX_TEXT_SVGA_STEP8 10 +FB_AUX_TEXT_SVGA_STEP16 11 +FB_AUX_TEXT_SVGA_LAST 15 diff --git a/src/xlat/fb_type_aux_vga_planes.in b/src/xlat/fb_type_aux_vga_planes.in new file mode 100644 index 000000000..3aaf684da --- /dev/null +++ b/src/xlat/fb_type_aux_vga_planes.in @@ -0,0 +1,4 @@ +#value_indexed +FB_AUX_VGA_PLANES_VGA4 0 +FB_AUX_VGA_PLANES_CFB4 1 +FB_AUX_VGA_PLANES_CFB8 2 diff --git a/src/xlat/fb_types.in b/src/xlat/fb_types.in new file mode 100644 index 000000000..5ee769a78 --- /dev/null +++ b/src/xlat/fb_types.in @@ -0,0 +1,7 @@ +#value_indexed +FB_TYPE_PACKED_PIXELS 0 +FB_TYPE_PLANES 1 +FB_TYPE_INTERLEAVED_PLANES 2 +FB_TYPE_TEXT 3 +FB_TYPE_VGA_PLANES 4 +FB_TYPE_FOURCC 5 diff --git a/src/xlat/fb_vblank_flags.in b/src/xlat/fb_vblank_flags.in new file mode 100644 index 000000000..d59790c5e --- /dev/null +++ b/src/xlat/fb_vblank_flags.in @@ -0,0 +1,9 @@ +FB_VBLANK_VBLANKING 0x001 +FB_VBLANK_HBLANKING 0x002 +FB_VBLANK_HAVE_VBLANK 0x004 +FB_VBLANK_HAVE_HBLANK 0x008 +FB_VBLANK_HAVE_COUNT 0x010 +FB_VBLANK_HAVE_VCOUNT 0x020 +FB_VBLANK_HAVE_HCOUNT 0x040 +FB_VBLANK_VSYNCING 0x080 +FB_VBLANK_HAVE_VSYNC 0x100 diff --git a/src/xlat/fb_visuals.in b/src/xlat/fb_visuals.in new file mode 100644 index 000000000..1d40595b8 --- /dev/null +++ b/src/xlat/fb_visuals.in @@ -0,0 +1,8 @@ +#value_indexed +FB_VISUAL_MONO01 0 +FB_VISUAL_MONO10 1 +FB_VISUAL_TRUECOLOR 2 +FB_VISUAL_PSEUDOCOLOR 3 +FB_VISUAL_DIRECTCOLOR 4 +FB_VISUAL_STATIC_PSEUDOCOLOR 5 +FB_VISUAL_FOURCC 6 diff --git a/src/xlat/fb_vmode_flags.in b/src/xlat/fb_vmode_flags.in new file mode 100644 index 000000000..5c2bb8ac9 --- /dev/null +++ b/src/xlat/fb_vmode_flags.in @@ -0,0 +1,2 @@ +FB_VMODE_YWRAP 256 +FB_VMODE_CONUPDATE 512 diff --git a/src/xlat/fb_vmodes.in b/src/xlat/fb_vmodes.in new file mode 100644 index 000000000..071f8d6e0 --- /dev/null +++ b/src/xlat/fb_vmodes.in @@ -0,0 +1,4 @@ +FB_VMODE_NONINTERLACED 0 +FB_VMODE_INTERLACED 1 +FB_VMODE_DOUBLE 2 +FB_VMODE_ODD_FLD_FIRST 4 |