⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pm3fb.c

📁 linux和2410结合开发 用他可以生成2410所需的zImage文件
💻 C
📖 第 1 页 / 共 5 页
字号:
	fbgen_install_cmap(0, &l_fb_info->gen);	if (register_framebuffer(&l_fb_info->gen.info) < 0) {		DPRINTK(1, "Couldn't register framebuffer\n");		return;	}	PM3_WRITE_DAC_REG(PM3RD_CursorMode,			  PM3RD_CursorMode_CURSOR_DISABLE);		PM3_SHOW_CUR_MODE;		pm3fb_write_mode(l_fb_info);		printk("fb%d: %s, using %uK of video memory (%s)\n",	       GET_FB_IDX(l_fb_info->gen.info.node),	       permedia3_name, (u32) (l_fb_info->fb_size >> 10),	       cardbase[l_fb_info->board_type].cardname);}/* **************************************************** *//* ***** accelerated permedia3-specific functions ***** *//* **************************************************** */#ifdef PM3FB_USE_ACCELstatic void pm3fb_wait_pm3(struct pm3fb_info *l_fb_info){	DTRACE;	PM3_SLOW_WRITE_REG(PM3FilterMode, PM3FilterModeSync);	PM3_SLOW_WRITE_REG(PM3Sync, 0);	mb();	do {		while ((PM3_READ_REG(PM3OutFIFOWords)) == 0);		rmb();	} while ((PM3_READ_REG(PM3OutputFifo)) != PM3Sync_Tag);}static void pm3fb_init_engine(struct pm3fb_info *l_fb_info){	PM3_SLOW_WRITE_REG(PM3FilterMode, PM3FilterModeSync);	PM3_SLOW_WRITE_REG(PM3StatisticMode, 0x0);	PM3_SLOW_WRITE_REG(PM3DeltaMode, 0x0);	PM3_SLOW_WRITE_REG(PM3RasterizerMode, 0x0);	PM3_SLOW_WRITE_REG(PM3ScissorMode, 0x0);	PM3_SLOW_WRITE_REG(PM3LineStippleMode, 0x0);	PM3_SLOW_WRITE_REG(PM3AreaStippleMode, 0x0);	PM3_SLOW_WRITE_REG(PM3GIDMode, 0x0);	PM3_SLOW_WRITE_REG(PM3DepthMode, 0x0);	PM3_SLOW_WRITE_REG(PM3StencilMode, 0x0);	PM3_SLOW_WRITE_REG(PM3StencilData, 0x0);	PM3_SLOW_WRITE_REG(PM3ColorDDAMode, 0x0);	PM3_SLOW_WRITE_REG(PM3TextureCoordMode, 0x0);	PM3_SLOW_WRITE_REG(PM3TextureIndexMode0, 0x0);	PM3_SLOW_WRITE_REG(PM3TextureIndexMode1, 0x0);	PM3_SLOW_WRITE_REG(PM3TextureReadMode, 0x0);	PM3_SLOW_WRITE_REG(PM3LUTMode, 0x0);	PM3_SLOW_WRITE_REG(PM3TextureFilterMode, 0x0);	PM3_SLOW_WRITE_REG(PM3TextureCompositeMode, 0x0);	PM3_SLOW_WRITE_REG(PM3TextureApplicationMode, 0x0);	PM3_SLOW_WRITE_REG(PM3TextureCompositeColorMode1, 0x0);	PM3_SLOW_WRITE_REG(PM3TextureCompositeAlphaMode1, 0x0);	PM3_SLOW_WRITE_REG(PM3TextureCompositeColorMode0, 0x0);	PM3_SLOW_WRITE_REG(PM3TextureCompositeAlphaMode0, 0x0);	PM3_SLOW_WRITE_REG(PM3FogMode, 0x0);	PM3_SLOW_WRITE_REG(PM3ChromaTestMode, 0x0);	PM3_SLOW_WRITE_REG(PM3AlphaTestMode, 0x0);	PM3_SLOW_WRITE_REG(PM3AntialiasMode, 0x0);	PM3_SLOW_WRITE_REG(PM3YUVMode, 0x0);	PM3_SLOW_WRITE_REG(PM3AlphaBlendColorMode, 0x0);	PM3_SLOW_WRITE_REG(PM3AlphaBlendAlphaMode, 0x0);	PM3_SLOW_WRITE_REG(PM3DitherMode, 0x0);	PM3_SLOW_WRITE_REG(PM3LogicalOpMode, 0x0);	PM3_SLOW_WRITE_REG(PM3RouterMode, 0x0);	PM3_SLOW_WRITE_REG(PM3Window, 0x0);	PM3_SLOW_WRITE_REG(PM3Config2D, 0x0);	PM3_SLOW_WRITE_REG(PM3SpanColorMask, 0xffffffff);	PM3_SLOW_WRITE_REG(PM3XBias, 0x0);	PM3_SLOW_WRITE_REG(PM3YBias, 0x0);	PM3_SLOW_WRITE_REG(PM3DeltaControl, 0x0);	PM3_SLOW_WRITE_REG(PM3BitMaskPattern, 0xffffffff);	PM3_SLOW_WRITE_REG(PM3FBDestReadEnables,			   PM3FBDestReadEnables_E(0xff) |			   PM3FBDestReadEnables_R(0xff) |			   PM3FBDestReadEnables_ReferenceAlpha(0xff));	PM3_SLOW_WRITE_REG(PM3FBDestReadBufferAddr0, 0x0);	PM3_SLOW_WRITE_REG(PM3FBDestReadBufferOffset0, 0x0);	PM3_SLOW_WRITE_REG(PM3FBDestReadBufferWidth0,			   PM3FBDestReadBufferWidth_Width(l_fb_info->							  current_par->							  width));	PM3_SLOW_WRITE_REG(PM3FBDestReadMode,			   PM3FBDestReadMode_ReadEnable |			   PM3FBDestReadMode_Enable0);	PM3_SLOW_WRITE_REG(PM3FBSourceReadBufferAddr, 0x0);	PM3_SLOW_WRITE_REG(PM3FBSourceReadBufferOffset, 0x0);	PM3_SLOW_WRITE_REG(PM3FBSourceReadBufferWidth,			   PM3FBSourceReadBufferWidth_Width(l_fb_info->							    current_par->							    width));	PM3_SLOW_WRITE_REG(PM3FBSourceReadMode,			   PM3FBSourceReadMode_Blocking |			   PM3FBSourceReadMode_ReadEnable);	{		unsigned long rm = 1;		switch (l_fb_info->current_par->depth) {		case 8:			PM3_SLOW_WRITE_REG(PM3PixelSize,					   PM3PixelSize_GLOBAL_8BIT);			break;		case 12:		case 15:		case 16:			PM3_SLOW_WRITE_REG(PM3PixelSize,					   PM3PixelSize_GLOBAL_16BIT);			break;		case 32:			PM3_SLOW_WRITE_REG(PM3PixelSize,					   PM3PixelSize_GLOBAL_32BIT);			break;		default:			DPRINTK(1, "Unsupported depth %d\n",				l_fb_info->current_par->depth);			break;		}		PM3_SLOW_WRITE_REG(PM3RasterizerMode, rm);	}	PM3_SLOW_WRITE_REG(PM3FBSoftwareWriteMask, 0xffffffff);	PM3_SLOW_WRITE_REG(PM3FBWriteMode,			   PM3FBWriteMode_WriteEnable |			   PM3FBWriteMode_OpaqueSpan |			   PM3FBWriteMode_Enable0);	PM3_SLOW_WRITE_REG(PM3FBWriteBufferAddr0, 0x0);	PM3_SLOW_WRITE_REG(PM3FBWriteBufferOffset0, 0x0);	PM3_SLOW_WRITE_REG(PM3FBWriteBufferWidth0,			   PM3FBWriteBufferWidth_Width(l_fb_info->						       current_par->						       width));	PM3_SLOW_WRITE_REG(PM3SizeOfFramebuffer, 0x0);	{		unsigned long sofb = (8UL * l_fb_info->fb_size) /			((depth2bpp(l_fb_info->current_par->depth))			 * l_fb_info->current_par->width);	/* size in lines of FB */		if (sofb > 4095)			PM3_SLOW_WRITE_REG(PM3SizeOfFramebuffer, 4095);		else			PM3_SLOW_WRITE_REG(PM3SizeOfFramebuffer, sofb);		PM3_SLOW_WRITE_REG(PM3FBHardwareWriteMask, 0xffffffff);		switch (l_fb_info->current_par->depth) {		case 8:			PM3_SLOW_WRITE_REG(PM3DitherMode,					   (1 << 10) | (2 << 3));			break;		case 12:		case 15:		case 16:			PM3_SLOW_WRITE_REG(PM3DitherMode,					   (1 << 10) | (1 << 3));			break;		case 32:			PM3_SLOW_WRITE_REG(PM3DitherMode,					   (1 << 10) | (0 << 3));			break;		default:			DPRINTK(1, "Unsupported depth %d\n",				l_fb_info->current_par->depth);			break;		}	}	PM3_SLOW_WRITE_REG(PM3dXDom, 0x0);	PM3_SLOW_WRITE_REG(PM3dXSub, 0x0);	PM3_SLOW_WRITE_REG(PM3dY, (1 << 16));	PM3_SLOW_WRITE_REG(PM3StartXDom, 0x0);	PM3_SLOW_WRITE_REG(PM3StartXSub, 0x0);	PM3_SLOW_WRITE_REG(PM3StartY, 0x0);	PM3_SLOW_WRITE_REG(PM3Count, 0x0);	/* Disable LocalBuffer. better safe than sorry */	PM3_SLOW_WRITE_REG(PM3LBDestReadMode, 0x0);	PM3_SLOW_WRITE_REG(PM3LBDestReadEnables, 0x0);	PM3_SLOW_WRITE_REG(PM3LBSourceReadMode, 0x0);	PM3_SLOW_WRITE_REG(PM3LBWriteMode, 0x0);		pm3fb_wait_pm3(l_fb_info);}#ifdef FBCON_HAS_CFB32static void pm3fb_cfb32_clear(struct vc_data *conp,			      struct display *p,			      int sy, int sx, int height, int width){	struct pm3fb_info *l_fb_info = (struct pm3fb_info *) p->fb_info;	u32 c;	DTRACE;	sx = sx * fontwidth(p);	width = width * fontwidth(p);	sy = sy * fontheight(p);	height = height * fontheight(p);	c = ((u32 *) p->dispsw_data)[attr_bgcol_ec(p, conp)];	if (l_fb_info->current_par->width > 1600) {		PM3_WAIT(4);		PM3_WRITE_REG(PM3Config2D,					  PM3Config2D_UseConstantSource |					  PM3Config2D_ForegroundROPEnable |					  (PM3Config2D_ForegroundROP(0x3)) |	/* Ox3 is GXcopy */					  PM3Config2D_FBWriteEnable);		PM3_WRITE_REG(PM3ForegroundColor, c);		PM3_WRITE_REG(PM3RectanglePosition,			      (PM3RectanglePosition_XOffset(sx)) |			      (PM3RectanglePosition_YOffset(sy)));		PM3_WRITE_REG(PM3Render2D,			      PM3Render2D_XPositive |			      PM3Render2D_YPositive |			      PM3Render2D_Operation_Normal |			      PM3Render2D_SpanOperation |			      (PM3Render2D_Width(width)) |			      (PM3Render2D_Height(height)));	} else {		/* block fills in 32bpp are hard, but in low res (width <= 1600 :-) we can use 16bpp operations */		PM3_WAIT(8);		PM3_WRITE_REG(PM3FBBlockColor, c);		PM3_WRITE_REG(PM3PixelSize, PM3PixelSize_GLOBAL_16BIT);		PM3_WRITE_REG(PM3FBWriteBufferWidth0,			      PM3FBWriteBufferWidth_Width(l_fb_info->							  current_par->							  width << 1));		PM3_WRITE_REG(PM3Config2D,					  PM3Config2D_UseConstantSource |					  PM3Config2D_ForegroundROPEnable |					  (PM3Config2D_ForegroundROP(0x3)) |	/* Ox3 is GXcopy */					  PM3Config2D_FBWriteEnable);		PM3_WRITE_REG(PM3RectanglePosition,			      (PM3RectanglePosition_XOffset(sx << 1)) |			      (PM3RectanglePosition_YOffset(sy)));		PM3_WRITE_REG(PM3Render2D,			      PM3Render2D_XPositive |			      PM3Render2D_YPositive |			      PM3Render2D_Operation_Normal |			      (PM3Render2D_Width(width << 1)) |			      (PM3Render2D_Height(height)));		PM3_WRITE_REG(PM3FBWriteBufferWidth0,			      PM3FBWriteBufferWidth_Width(l_fb_info->							  current_par->							  width));		PM3_WRITE_REG(PM3PixelSize, PM3PixelSize_GLOBAL_32BIT);	}	pm3fb_wait_pm3(l_fb_info);}static void pm3fb_cfb32_clear_margins(struct vc_data *conp,				      struct display *p, int bottom_only){	struct pm3fb_info *l_fb_info = (struct pm3fb_info *) p->fb_info;	int sx, sy;	u32 c;	DTRACE;	sx = conp->vc_cols * fontwidth(p);	/* right margin */	sy = conp->vc_rows * fontheight(p);	/* bottom margin */	c = ((u32 *) p->dispsw_data)[attr_bgcol_ec(p, conp)];	if (!bottom_only) {	/* right margin top->bottom */		PM3_WAIT(4);		PM3_WRITE_REG(PM3Config2D,					  PM3Config2D_UseConstantSource |					  PM3Config2D_ForegroundROPEnable |					  (PM3Config2D_ForegroundROP(0x3)) |	/* Ox3 is GXcopy */					  PM3Config2D_FBWriteEnable);		PM3_WRITE_REG(PM3ForegroundColor, c);		PM3_WRITE_REG(PM3RectanglePosition,			      (PM3RectanglePosition_XOffset			       (p->var.xoffset +				sx)) | (PM3RectanglePosition_YOffset(p->								     var.								     yoffset)));		PM3_WRITE_REG(PM3Render2D,			      PM3Render2D_XPositive |			      PM3Render2D_YPositive |			      PM3Render2D_Operation_Normal |			      PM3Render2D_SpanOperation |			      (PM3Render2D_Width(p->var.xres - sx)) |			      (PM3Render2D_Height(p->var.yres)));	}	/* bottom margin left -> right */	PM3_WAIT(4);	PM3_WRITE_REG(PM3Config2D,				  PM3Config2D_UseConstantSource |				  PM3Config2D_ForegroundROPEnable |				  (PM3Config2D_ForegroundROP(0x3)) |	/* Ox3 is GXcopy */				  PM3Config2D_FBWriteEnable);	PM3_WRITE_REG(PM3ForegroundColor, c);	PM3_WRITE_REG(PM3RectanglePosition,		      (PM3RectanglePosition_XOffset(p->var.xoffset)) |		      (PM3RectanglePosition_YOffset(p->var.yoffset + sy)));	PM3_WRITE_REG(PM3Render2D,		      PM3Render2D_XPositive |		      PM3Render2D_YPositive |		      PM3Render2D_Operation_Normal |		      PM3Render2D_SpanOperation |		      (PM3Render2D_Width(p->var.xres)) |		      (PM3Render2D_Height(p->var.yres - sy)));	pm3fb_wait_pm3(l_fb_info);}#endif /* FBCON_HAS_CFB32 */#ifdef FBCON_HAS_CFB16static void pm3fb_cfb16_clear(struct vc_data *conp,			      struct display *p,			      int sy, int sx, int height, int width){	struct pm3fb_info *l_fb_info = (struct pm3fb_info *) p->fb_info;	u32 c;	DTRACE;	sx = sx * fontwidth(p);	width = width * fontwidth(p);	sy = sy * fontheight(p);	height = height * fontheight(p);	c = ((u16 *) p->dispsw_data)[attr_bgcol_ec(p, conp)];	c = c | (c << 16);	PM3_WAIT(4);	PM3_WRITE_REG(PM3FBBlockColor, c);	PM3_WRITE_REG(PM3Config2D,				  PM3Config2D_UseConstantSource |				  PM3Config2D_ForegroundROPEnable |				  (PM3Config2D_ForegroundROP(0x3)) |	/* Ox3 is GXcopy */				  PM3Config2D_FBWriteEnable);	PM3_WRITE_REG(PM3RectanglePosition,		      (PM3RectanglePosition_XOffset(sx)) |		      (PM3RectanglePosition_YOffset(sy)));	PM3_WRITE_REG(PM3Render2D,		      PM3Render2D_XPositive |		      PM3Render2D_YPositive |		      PM3Render2D_Operation_Normal |		      (PM3Render2D_Width(width)) |		      (PM3Render2D_Height(height)));	pm3fb_wait_pm3(l_fb_info);}static void pm3fb_cfb16_clear_margins(struct vc_data *conp,				      struct display *p, int bottom_only){	struct pm3fb_info *l_fb_info = (struct pm3fb_info *) p->fb_info;	int sx, sy;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -