示例#1
0
extern void
resources_cleanup(void) {
    for (int i = 0; i < MAX_TEXTURES; i++)
        if (all_resources.textures[i].id != 0)
            free_texture(&all_resources.textures[i]);

    for (int i = 0; i < MAX_SAMPLERS; i++)
        if (all_resources.samplers[i].id != 0)
            free_sampler(&all_resources.samplers[i]);

    for (int i = 0; i < MAX_RENDERBUFFERS; i++)
        if (all_resources.renderbuffers[i].id)
            free_renderbuffer(&all_resources.renderbuffers[i]);

    for (int i = 0; i < MAX_FRAMEBUFFERS; i++)
        if (all_resources.framebuffers[i].id)
            free_framebuffer(&all_resources.framebuffers[i]);

    for (int i = 0; i < MAX_BUFFERS; i++)
        if (all_resources.buffers[i].id)
            free_video_buffer(&all_resources.buffers[i]);

    for (int i = 0; i < MAX_VERTEX_ARRAYS; i++)
        if (all_resources.arrays[i].id)
            free_vertex_array(&all_resources.arrays[i]);

    for (int i = 0; i < MAX_SHADERS; i++)
        free_shader(&all_resources.shaders[i]);        
}
void
cleanup_module(void)
{
	int status = 0;

	if (bModInit) {
		status = unregister_framebuffer(&fb_info.gen.info);
		if (status < 0) {
			printk
			    ("Failed to unregister the framebuffer device (status=%d).\n",
			     status);
		} else {
			ruby_deinit_display();
			free_framebuffer();
			if (periodic_flush_enable)
				del_timer(&fb_info.ruby_timer);
			bModInit = 0;
		}
	}
}
//----------------------------------------------------------------------------- 
//
// Initialise the chip and the frame buffer driver. 
//
//----------------------------------------------------------------------------- 
int __init
rubyfb_init(void)
{
	int i; ///// TESTING
	int j; ///// TESTING
	
	fb_info.FrameBufferAddress = alloc_framebuffer();
	if (!fb_info.FrameBufferAddress) {
		printk
		    ("rubyfb_init: Failed to allocate memory for the framebuffer.\n");
		return -EINVAL;
	}
	// Clear the allocated memory
	memset(fb_info.FrameBufferAddress, 0, RUBY_PHYSICAL_MEM_SIZE);

	// Tell the lower levels what our addresses are
	ruby_set_addresses(fb_info.FrameBufferAddress,
			   fb_info.FrameBufferDmaAddress);

	ruby_init_display();


	strcpy(fb_info.gen.info.modename, "ruby");
	fb_info.gen.info.changevar = NULL;
	fb_info.gen.info.node = -1;
	fb_info.gen.info.fbops = &ruby_ops;
	fb_info.gen.info.disp = &disp;

	fb_info.gen.info.switch_con = &fbgen_switch;
	fb_info.gen.info.updatevar = &fbgen_update_var;
	fb_info.gen.info.blank = &fbgen_blank;

	strcpy(fb_info.gen.info.fontname, default_fontname);
	fb_info.gen.parsize = 0;
	fb_info.gen.info.flags = FBINFO_FLAG_DEFAULT;
	fb_info.gen.fbhw = &ruby_hwswitch;
	fb_info.gen.fbhw->detect();

	fbgen_get_var(&disp.var, -1, &fb_info.gen.info);
	disp.var.activate = FB_ACTIVATE_NOW;
	fbgen_do_set_var(&disp.var, 1, &fb_info.gen);
	fbgen_set_disp(-1, &fb_info.gen);
	fbgen_install_cmap(0, &fb_info.gen);

	if (register_framebuffer(&fb_info.gen.info) < 0) {
		printk("Failed to register the %s framebuffer device.\n",
		       fb_info.gen.info.modename);
		free_framebuffer();
		return -EINVAL;
	}
	if (periodic_flush_enable) {
		init_timer(&fb_info.ruby_timer);
		fb_info.ruby_timer.function = ruby_flush;
		fb_info.ruby_timer.data = 0;
		fb_info.ruby_timer.expires = (unsigned long) jiffies + HZ + 100;
		add_timer(&fb_info.ruby_timer);
	}


/////////////////////////////
//////   Display Logo       //////
///////////////////////////

/////	ruby_display_logo();

	


	printk("fb%d: %s framebuffer device installed.\n",
	       GET_FB_IDX(fb_info.gen.info.node), fb_info.gen.info.modename);

	printk("Display %s features %d x %d at %d bpp.\n",
	       fb_info.gen.info.modename,
	       RUBY_DISPLAY_WIDTH, RUBY_DISPLAY_HEIGHT, RUBY_DISPLAY_BPP);

	return 0;
}