| /* |
| * fbsysfs.c - framebuffer device class and attributes |
| * |
| * Copyright (c) 2004 James Simmons <jsimmons@infradead.org> |
| * |
| * 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 <linux/kernel.h> |
| #include <linux/fb.h> |
| |
| /** |
| * 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; |
| |
| info->device = dev; |
| |
| 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); |