/* * fbsysfs.c - framebuffer device class and attributes * * Copyright (c) 2004 James Simmons * * This program is free software you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */ /* * Note: currently there's only stubs for framebuffer_alloc and * framebuffer_release here. The reson for that is that until all drivers * are converted to use it a sysfsification will open OOPSable races. */ #include #include /** * framebuffer_alloc - creates a new frame buffer info structure * * @size: size of driver private data, can be zero * @dev: pointer to the device for this fb, this can be NULL * * Creates a new frame buffer info structure. Also reserves @size bytes * for driver private data (info->par). info->par (if any) will be * aligned to sizeof(long). * * Returns the new structure, or NULL if an error occured. * */ struct fb_info *framebuffer_alloc(size_t size, struct device *dev) { #define BYTES_PER_LONG (BITS_PER_LONG/8) #define PADDING (BYTES_PER_LONG - (sizeof(struct fb_info) % BYTES_PER_LONG)) int fb_info_size = sizeof(struct fb_info); struct fb_info *info; char *p; if (size) fb_info_size += PADDING; p = kmalloc(fb_info_size + size, GFP_KERNEL); if (!p) return NULL; memset(p, 0, fb_info_size + size); info = (struct fb_info *) p; if (size) info->par = p + fb_info_size; return info; #undef PADDING #undef BYTES_PER_LONG } /** * framebuffer_release - marks the structure available for freeing * * @info: frame buffer info structure * * Drop the reference count of the class_device embedded in the * framebuffer info structure. * */ void framebuffer_release(struct fb_info *info) { kfree(info); } EXPORT_SYMBOL(framebuffer_release); EXPORT_SYMBOL(framebuffer_alloc);