LCOV - code coverage report
Current view: top level - drivers/firmware/efi - efi-bgrt.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 36 0.0 %
Date: 2022-03-28 13:20:08 Functions: 0 1 0.0 %
Branches: 0 18 0.0 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: GPL-2.0
       2                 :            : /*
       3                 :            :  * Copyright 2012 Intel Corporation
       4                 :            :  * Author: Josh Triplett <josh@joshtriplett.org>
       5                 :            :  *
       6                 :            :  * Based on the bgrt driver:
       7                 :            :  * Copyright 2012 Red Hat, Inc <mjg@redhat.com>
       8                 :            :  * Author: Matthew Garrett
       9                 :            :  */
      10                 :            : 
      11                 :            : #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
      12                 :            : 
      13                 :            : #include <linux/kernel.h>
      14                 :            : #include <linux/init.h>
      15                 :            : #include <linux/acpi.h>
      16                 :            : #include <linux/efi.h>
      17                 :            : #include <linux/efi-bgrt.h>
      18                 :            : 
      19                 :            : struct acpi_table_bgrt bgrt_tab;
      20                 :            : size_t bgrt_image_size;
      21                 :            : 
      22                 :            : struct bmp_header {
      23                 :            :         u16 id;
      24                 :            :         u32 size;
      25                 :            : } __packed;
      26                 :            : 
      27                 :          0 : void __init efi_bgrt_init(struct acpi_table_header *table)
      28                 :            : {
      29                 :          0 :         void *image;
      30                 :          0 :         struct bmp_header bmp_header;
      31                 :          0 :         struct acpi_table_bgrt *bgrt = &bgrt_tab;
      32                 :            : 
      33         [ #  # ]:          0 :         if (acpi_disabled)
      34                 :            :                 return;
      35                 :            : 
      36         [ #  # ]:          0 :         if (!efi_enabled(EFI_MEMMAP))
      37                 :            :                 return;
      38                 :            : 
      39         [ #  # ]:          0 :         if (table->length < sizeof(bgrt_tab)) {
      40                 :          0 :                 pr_notice("Ignoring BGRT: invalid length %u (expected %zu)\n",
      41                 :            :                        table->length, sizeof(bgrt_tab));
      42                 :          0 :                 return;
      43                 :            :         }
      44                 :          0 :         *bgrt = *(struct acpi_table_bgrt *)table;
      45         [ #  # ]:          0 :         if (bgrt->version != 1) {
      46                 :          0 :                 pr_notice("Ignoring BGRT: invalid version %u (expected 1)\n",
      47                 :            :                        bgrt->version);
      48                 :          0 :                 goto out;
      49                 :            :         }
      50         [ #  # ]:          0 :         if (bgrt->image_type != 0) {
      51                 :          0 :                 pr_notice("Ignoring BGRT: invalid image type %u (expected 0)\n",
      52                 :            :                        bgrt->image_type);
      53                 :          0 :                 goto out;
      54                 :            :         }
      55         [ #  # ]:          0 :         if (!bgrt->image_address) {
      56                 :          0 :                 pr_notice("Ignoring BGRT: null image address\n");
      57                 :          0 :                 goto out;
      58                 :            :         }
      59                 :            : 
      60         [ #  # ]:          0 :         if (efi_mem_type(bgrt->image_address) != EFI_BOOT_SERVICES_DATA) {
      61                 :          0 :                 pr_notice("Ignoring BGRT: invalid image address\n");
      62                 :          0 :                 goto out;
      63                 :            :         }
      64                 :          0 :         image = early_memremap(bgrt->image_address, sizeof(bmp_header));
      65         [ #  # ]:          0 :         if (!image) {
      66                 :          0 :                 pr_notice("Ignoring BGRT: failed to map image header memory\n");
      67                 :          0 :                 goto out;
      68                 :            :         }
      69                 :            : 
      70                 :          0 :         memcpy(&bmp_header, image, sizeof(bmp_header));
      71                 :          0 :         early_memunmap(image, sizeof(bmp_header));
      72         [ #  # ]:          0 :         if (bmp_header.id != 0x4d42) {
      73                 :          0 :                 pr_notice("Ignoring BGRT: Incorrect BMP magic number 0x%x (expected 0x4d42)\n",
      74                 :            :                         bmp_header.id);
      75                 :          0 :                 goto out;
      76                 :            :         }
      77                 :          0 :         bgrt_image_size = bmp_header.size;
      78                 :          0 :         efi_mem_reserve(bgrt->image_address, bgrt_image_size);
      79                 :            : 
      80                 :          0 :         return;
      81                 :          0 : out:
      82                 :          0 :         memset(bgrt, 0, sizeof(bgrt_tab));
      83                 :            : }

Generated by: LCOV version 1.14