// SPDX-License-Identifier: GPL-2.0/* * main.c - Multi purpose firmware loading support * * Copyright (c) 2003 Manuel Estrada Sainz * * Please see Documentation/driver-api/firmware/ for more information. * */#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt#include<linux/capability.h>#include<linux/device.h>#include<linux/module.h>#include<linux/init.h>#include<linux/timer.h>#include<linux/vmalloc.h>#include<linux/interrupt.h>#include<linux/bitops.h>#include<linux/mutex.h>#include<linux/workqueue.h>#include<linux/highmem.h>#include<linux/firmware.h>#include<linux/slab.h>#include<linux/sched.h>#include<linux/file.h>#include<linux/list.h>#include<linux/fs.h>#include<linux/async.h>#include<linux/pm.h>#include<linux/suspend.h>#include<linux/syscore_ops.h>#include<linux/reboot.h>#include<linux/security.h>#include<linux/xz.h>#include<generated/utsrelease.h>#include"../base.h"#include"firmware.h"#include"fallback.h"MODULE_AUTHOR("Manuel Estrada Sainz");MODULE_DESCRIPTION("Multi purpose firmware loading support");MODULE_LICENSE("GPL");structfirmware_cache{/* firmware_buf instance will be added into the below list */spinlock_tlock;structlist_headhead;int<