LCOV - code coverage report
Current view: top level - drivers/video/fbdev/core - fb_info.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 16 0.0 %
Date: 2023-08-24 13:40:31 Functions: 0 2 0.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-or-later
       2             : 
       3             : #include <linux/export.h>
       4             : #include <linux/fb.h>
       5             : #include <linux/mutex.h>
       6             : #include <linux/slab.h>
       7             : 
       8             : /**
       9             :  * framebuffer_alloc - creates a new frame buffer info structure
      10             :  *
      11             :  * @size: size of driver private data, can be zero
      12             :  * @dev: pointer to the device for this fb, this can be NULL
      13             :  *
      14             :  * Creates a new frame buffer info structure. Also reserves @size bytes
      15             :  * for driver private data (info->par). info->par (if any) will be
      16             :  * aligned to sizeof(long). The new instances of struct fb_info and
      17             :  * the driver private data are both cleared to zero.
      18             :  *
      19             :  * Returns the new structure, or NULL if an error occurred.
      20             :  *
      21             :  */
      22           0 : struct fb_info *framebuffer_alloc(size_t size, struct device *dev)
      23             : {
      24             : #define BYTES_PER_LONG (BITS_PER_LONG/8)
      25             : #define PADDING (BYTES_PER_LONG - (sizeof(struct fb_info) % BYTES_PER_LONG))
      26           0 :         int fb_info_size = sizeof(struct fb_info);
      27             :         struct fb_info *info;
      28             :         char *p;
      29             : 
      30           0 :         if (size)
      31           0 :                 fb_info_size += PADDING;
      32             : 
      33           0 :         p = kzalloc(fb_info_size + size, GFP_KERNEL);
      34             : 
      35           0 :         if (!p)
      36             :                 return NULL;
      37             : 
      38           0 :         info = (struct fb_info *) p;
      39             : 
      40           0 :         if (size)
      41           0 :                 info->par = p + fb_info_size;
      42             : 
      43           0 :         info->device = dev;
      44           0 :         info->fbcon_rotate_hint = -1;
      45             : 
      46             : #if IS_ENABLED(CONFIG_FB_BACKLIGHT)
      47             :         mutex_init(&info->bl_curve_mutex);
      48             : #endif
      49             : 
      50           0 :         return info;
      51             : #undef PADDING
      52             : #undef BYTES_PER_LONG
      53             : }
      54             : EXPORT_SYMBOL(framebuffer_alloc);
      55             : 
      56             : /**
      57             :  * framebuffer_release - marks the structure available for freeing
      58             :  *
      59             :  * @info: frame buffer info structure
      60             :  *
      61             :  * Drop the reference count of the device embedded in the
      62             :  * framebuffer info structure.
      63             :  *
      64             :  */
      65           0 : void framebuffer_release(struct fb_info *info)
      66             : {
      67           0 :         if (!info)
      68             :                 return;
      69             : 
      70           0 :         if (WARN_ON(refcount_read(&info->count)))
      71             :                 return;
      72             : 
      73             : #if IS_ENABLED(CONFIG_FB_BACKLIGHT)
      74             :         mutex_destroy(&info->bl_curve_mutex);
      75             : #endif
      76             : 
      77           0 :         kfree(info);
      78             : }
      79             : EXPORT_SYMBOL(framebuffer_release);

Generated by: LCOV version 1.14