linux/drivers/firmware/efi/efi-pstore.c

// SPDX-License-Identifier: GPL-2.0+

#include <linux/efi.h>
#include <linux/module.h>
#include <linux/pstore.h>
#include <linux/slab.h>
#include <linux/ucs2_string.h>

MODULE_IMPORT_NS();

#define DUMP_NAME_LEN

static unsigned int record_size =;
module_param(record_size, uint, 0444);
MODULE_PARM_DESC();

#define PSTORE_EFI_ATTRIBUTES

static bool pstore_disable = IS_ENABLED();

static int efivars_pstore_init(void);
static void efivars_pstore_exit(void);

static int efi_pstore_disable_set(const char *val, const struct kernel_param *kp)
{}

static const struct kernel_param_ops pstore_disable_ops =;

module_param_cb();
__MODULE_PARM_TYPE();

static int efi_pstore_open(struct pstore_info *psi)
{}

static int efi_pstore_close(struct pstore_info *psi)
{}

static inline u64 generic_id(u64 timestamp, unsigned int part, int count)
{}

static int efi_pstore_read_func(struct pstore_record *record,
				efi_char16_t *varname)
{}

static ssize_t efi_pstore_read(struct pstore_record *record)
{}

static int efi_pstore_write(struct pstore_record *record)
{
	char name[DUMP_NAME_LEN];
	efi_char16_t efi_name[DUMP_NAME_LEN];
	efi_status_t status;
	int i;

	record->id = generic_id(record->time.tv_sec, record->part,
				record->count);

	/* Since we copy the entire length of name, make sure it is wiped. */
	memset(name, 0, sizeof(name));

	snprintf(name, sizeof(name), "dump-type%u-%u-%d-%lld-%c",
		 record->type, record->part, record->count,
		 (long long)record->time.tv_sec,
		 record->compressed ? 'C' : 'D');

	for (i = 0; i < DUMP_NAME_LEN; i++)
		efi_name[i] = name[i];

	if (efivar_trylock())
		return -EBUSY;
	status = efivar_set_variable_locked(efi_name, &LINUX_EFI_CRASH_GUID,
					    PSTORE_EFI_ATTRIBUTES,
					    record->size, record->psi->buf,
					    true);
	efivar_unlock();
	return efi_status_to_err(status);
};

static int efi_pstore_erase(struct pstore_record *record)
{}

static struct pstore_info efi_pstore_info =;

static int efivars_pstore_init(void)
{}

static void efivars_pstore_exit(void)
{}

module_init();
module_exit(efivars_pstore_exit);

MODULE_DESCRIPTION();
MODULE_LICENSE();
MODULE_ALIAS();