if (!(par->dev_flags & USE_HWCUR) || !info->var.accel_flags || par->dev_flags & LOCKUP) return soft_cursor(info, cursor); 
if (!par->dev_flags & LOCKUP) return -ENXIO; 
static int i810fb_cursor(struct fb_info *info, struct fb_cursor *cursor){	struct i810fb_par *par = (struct i810fb_par *)info->par;	u8 __iomem *mmio = par->mmio_start_virtual;	if (!(par->dev_flags & USE_HWCUR) || !info->var.accel_flags ||	    par->dev_flags & LOCKUP)		return soft_cursor(info, cursor);	if (cursor->image.width > 64 || cursor->image.height > 64)		return -ENXIO;	if ((i810_readl(CURBASE, mmio) & 0xf) != par->cursor_heap.physical) {		i810_init_cursor(par);		cursor->set |= FB_CUR_SETALL;	}	i810_enable_cursor(mmio, OFF);	if (cursor->set & FB_CUR_SETPOS) {		u32 tmp;		tmp = (cursor->image.dx - info->var.xoffset) & 0xffff;		tmp |= (cursor->image.dy - info->var.yoffset) << 16;		i810_writel(CURPOS, mmio, tmp);	}	if (cursor->set & FB_CUR_SETSIZE)		i810_reset_cursor_image(par);	if (cursor->set & FB_CUR_SETCMAP)		i810_load_cursor_colors(cursor->image.fg_color,					cursor->image.bg_color,					info);	if (cursor->set & (FB_CUR_SETSHAPE | FB_CUR_SETIMAGE)) {		int size = ((cursor->image.width + 7) >> 3) *			cursor->image.height;		int i;		u8 *data = kmalloc(64 * 8, GFP_KERNEL);		if (data == NULL)			return -ENOMEM;		switch (cursor->rop) {		case ROP_XOR:			for (i = 0; i < size; i++)				data[i] = cursor->image.data[i] ^ cursor->mask[i];			break;		case ROP_COPY:		default:			for (i = 0; i < size; i++)				data[i] = cursor->image.data[i] & cursor->mask[i];			break;		}		i810_load_cursor_image(cursor->image.width,				       cursor->image.height, data,				       par);		kfree(data);	}	if (cursor->enable)		i810_enable_cursor(mmio, ON);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/4c7ffe0b9f7f40bd818fe3af51342f64c483908e/i810_main.c/clean/drivers/video/i810/i810_main.c