404

[ Avaa Bypassed ]




Upload:

Command:

botdev@3.149.250.142: ~ $
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef GHES_H
#define GHES_H

#include <acpi/apei.h>
#include <acpi/hed.h>

/*
 * One struct ghes is created for each generic hardware error source.
 * It provides the context for APEI hardware error timer/IRQ/SCI/NMI
 * handler.
 *
 * estatus: memory buffer for error status block, allocated during
 * HEST parsing.
 */
#define GHES_TO_CLEAR		0x0001
#define GHES_EXITING		0x0002

struct ghes {
	union {
		struct acpi_hest_generic *generic;
		struct acpi_hest_generic_v2 *generic_v2;
	};
	struct acpi_hest_generic_status *estatus;
	u64 buffer_paddr;
	unsigned long flags;
	union {
		struct list_head list;
		struct timer_list timer;
		unsigned int irq;
	};
};

struct ghes_estatus_node {
	struct llist_node llnode;
	struct acpi_hest_generic *generic;
	struct ghes *ghes;
};

struct ghes_estatus_cache {
	u32 estatus_len;
	atomic_t count;
	struct acpi_hest_generic *generic;
	unsigned long long time_in;
	struct rcu_head rcu;
};

enum {
	GHES_SEV_NO = 0x0,
	GHES_SEV_CORRECTED = 0x1,
	GHES_SEV_RECOVERABLE = 0x2,
	GHES_SEV_PANIC = 0x3,
};

/* From drivers/edac/ghes_edac.c */

#ifdef CONFIG_EDAC_GHES
void ghes_edac_report_mem_error(struct ghes *ghes, int sev,
				struct cper_sec_mem_err *mem_err);

int ghes_edac_register(struct ghes *ghes, struct device *dev);

void ghes_edac_unregister(struct ghes *ghes);

#else
static inline void ghes_edac_report_mem_error(struct ghes *ghes, int sev,
				       struct cper_sec_mem_err *mem_err)
{
}

static inline int ghes_edac_register(struct ghes *ghes, struct device *dev)
{
	return 0;
}

static inline void ghes_edac_unregister(struct ghes *ghes)
{
}
#endif

static inline int acpi_hest_get_version(struct acpi_hest_generic_data *gdata)
{
	return gdata->revision >> 8;
}

static inline void *acpi_hest_get_payload(struct acpi_hest_generic_data *gdata)
{
	if (acpi_hest_get_version(gdata) >= 3)
		return (void *)(((struct acpi_hest_generic_data_v300 *)(gdata)) + 1);

	return gdata + 1;
}

static inline int acpi_hest_get_error_length(struct acpi_hest_generic_data *gdata)
{
	return ((struct acpi_hest_generic_data *)(gdata))->error_data_length;
}

static inline int acpi_hest_get_size(struct acpi_hest_generic_data *gdata)
{
	if (acpi_hest_get_version(gdata) >= 3)
		return sizeof(struct acpi_hest_generic_data_v300);

	return sizeof(struct acpi_hest_generic_data);
}

static inline int acpi_hest_get_record_size(struct acpi_hest_generic_data *gdata)
{
	return (acpi_hest_get_size(gdata) + acpi_hest_get_error_length(gdata));
}

static inline void *acpi_hest_get_next(struct acpi_hest_generic_data *gdata)
{
	return (void *)(gdata) + acpi_hest_get_record_size(gdata);
}

#define apei_estatus_for_each_section(estatus, section)			\
	for (section = (struct acpi_hest_generic_data *)(estatus + 1);	\
	     (void *)section - (void *)(estatus + 1) < estatus->data_length; \
	     section = acpi_hest_get_next(section))

int ghes_notify_sea(void);

#endif /* GHES_H */

Filemanager

Name Type Size Permission Actions
platform Folder 0755
acbuffer.h File 10.36 KB 0644
acconfig.h File 8.69 KB 0644
acexcep.h File 17.79 KB 0644
acnames.h File 3.78 KB 0644
acoutput.h File 17.69 KB 0644
acpi.h File 3.07 KB 0644
acpi_bus.h File 18.99 KB 0644
acpi_drivers.h File 4.08 KB 0644
acpi_io.h File 713 B 0644
acpi_lpat.h File 1.55 KB 0644
acpi_numa.h File 623 B 0644
acpiosxf.h File 12.4 KB 0644
acpixf.h File 31.5 KB 0644
acrestyp.h File 20.57 KB 0644
actbl.h File 20 KB 0644
actbl1.h File 44.48 KB 0644
actbl2.h File 42.98 KB 0644
actbl3.h File 21.63 KB 0644
actypes.h File 42.59 KB 0644
acuuid.h File 4.17 KB 0644
apei.h File 1.34 KB 0644
button.h File 621 B 0644
cppc_acpi.h File 2.93 KB 0644
ghes.h File 2.88 KB 0644
hed.h File 371 B 0644
pcc.h File 816 B 0644
pdc_intel.h File 1.02 KB 0644
processor.h File 11.11 KB 0644
reboot.h File 201 B 0644
video.h File 2.8 KB 0644