/* Copyright (c) 2003 Andreas Robinson, All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #ifndef __UNICHROME_H__ #define __UNICHROME_H__ #include #include #include #include #include #define UNICHROME_DEVICE "/dev/cle266vgaio" #define UC_FIFO_SIZE 4096 /** If defined - the driver will use the 3D engine. */ #define UC_ENABLE_3D //#undef UC_ENABLE_3D /** Register settings for the current source surface. (3D) */ struct uc_hw_texture { DFBSurfaceBlittingFlags bltflags; u32 l2w; //width, rounded up to nearest 2^m, eg 600 => 1024 u32 l2h; //height, rounded up, e.g 480 => 512 u32 we; //width exponent, i.e m in the number 2^m u32 he; //height exponent u32 format; // HW pixel format // 3d engine texture environment, texture unit 0 // Used for the DSBLIT_BLEND_ALPHACHANNEL, DSBLIT_BLEND_COLORALPHA // and DSBLIT_COLORIZE blitting flags. u32 regHTXnTB; u32 regHTXnMPMD; u32 regHTXnTBLCsat_0; u32 regHTXnTBLCop_0; u32 regHTXnTBLMPfog_0; u32 regHTXnTBLAsat_0; u32 regHTXnTBLRCb_0; u32 regHTXnTBLRAa_0; u32 regHTXnTBLRFog_0; }; /** Hardware source-destination blending registers. */ struct uc_hw_alpha { /* u32 regHABBasL; // Alpha buffer, low 24 bits. u32 regHABBasH; // Alpha buffer, high 8 bits. u32 regHABFM; // Alpha pixel format, memory type and pitch. u32 regHATMD; // Alpha test function and reference value. // Blending function */ u32 regHABLCsat; u32 regHABLCop; u32 regHABLAsat; u32 regHABLAop; u32 regHABLRCa; u32 regHABLRFCa; u32 regHABLRCbias; u32 regHABLRCb; u32 regHABLRFCb; u32 regHABLRAa; u32 regHABLRAb; }; typedef enum { uc_source2d = 0x00000001, uc_source3d = 0x00000002, uc_texenv = 0x00000004, uc_blending_fn = 0x00000008, uc_color2d = 0x00000010, uc_colorkey2d = 0x00000020 } UcStateBits; #define UC_VALIDATE(b) (ucdev->valid |= (b)) #define UC_INVALIDATE(b) (ucdev->valid &= ~(b)) #define UC_IS_VALID(b) (ucdev->valid & (b)) typedef struct _UcDeviceData { /* State validation */ UcStateBits valid; /* Current state settings */ u32 pitch; // combined src/dst pitch (2D) u32 color; // 2D fill color u32 color3d; // color for 3D operations u32 draw_rop2d; // logical drawing ROP (2D) u32 draw_rop3d; // logical drawing ROP (3D) DFBSurfaceBlittingFlags bflags; // blitting flags DFBRegion clip; // clipping region DFBSurfacePixelFormat dst_format; // destination pixel format int dst_offset; // destination buffer byte offset int dst_pitch; // destination buffer byte pitch int field; // source field /* Hardware settings */ struct uc_hw_alpha hwalpha; // alpha blending setting (3D) struct uc_hw_texture hwtex; // hardware settings for blitting (3D) /// Set directly after a 2D/3D engine command is sent. int must_wait; unsigned int cmd_waitcycles; unsigned int idle_waitcycles; u32 vq_start; // VQ related u32 vq_size; u32 vq_end; } UcDeviceData; typedef struct _UcDriverData { int file; // File handle to mmapped IO region. int hwrev; // Hardware revision volatile void* hwregs; // Hardware register base struct uc_fifo* fifo; // Data FIFO. FusionSHMPoolShared *pool; } UcDriverData; #endif // __UNICHROME_H__