mirror of https://gitee.com/openkylin/linux.git
powerpc/rtas: Move type/struct definitions from rtas.h into rtas-types.h
In order to get any rtas* struct into other headers, including rtas.h may cause a lot of errors, regarding include dependency needed for inline functions. Create rtas-types.h and move there all type/struct definitions from rtas.h, then include rtas-types.h into rtas.h. Also, as suggested by checkpath.pl, replace uint8_t for u8. Signed-off-by: Leonardo Bras <leobras.c@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20200518234245.200672-2-leobras.c@gmail.com
This commit is contained in:
parent
af2876b501
commit
783a015b74
|
@ -0,0 +1,124 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
#ifndef _ASM_POWERPC_RTAS_TYPES_H
|
||||
#define _ASM_POWERPC_RTAS_TYPES_H
|
||||
|
||||
#include <linux/spinlock_types.h>
|
||||
|
||||
typedef __be32 rtas_arg_t;
|
||||
|
||||
struct rtas_args {
|
||||
__be32 token;
|
||||
__be32 nargs;
|
||||
__be32 nret;
|
||||
rtas_arg_t args[16];
|
||||
rtas_arg_t *rets; /* Pointer to return values in args[]. */
|
||||
};
|
||||
|
||||
struct rtas_t {
|
||||
unsigned long entry; /* physical address pointer */
|
||||
unsigned long base; /* physical address pointer */
|
||||
unsigned long size;
|
||||
arch_spinlock_t lock;
|
||||
struct rtas_args args;
|
||||
struct device_node *dev; /* virtual address pointer */
|
||||
};
|
||||
|
||||
struct rtas_suspend_me_data {
|
||||
atomic_t working; /* number of cpus accessing this struct */
|
||||
atomic_t done;
|
||||
int token; /* ibm,suspend-me */
|
||||
atomic_t error;
|
||||
struct completion *complete; /* wait on this until working == 0 */
|
||||
};
|
||||
|
||||
struct rtas_error_log {
|
||||
/* Byte 0 */
|
||||
u8 byte0; /* Architectural version */
|
||||
|
||||
/* Byte 1 */
|
||||
u8 byte1;
|
||||
/* XXXXXXXX
|
||||
* XXX 3: Severity level of error
|
||||
* XX 2: Degree of recovery
|
||||
* X 1: Extended log present?
|
||||
* XX 2: Reserved
|
||||
*/
|
||||
|
||||
/* Byte 2 */
|
||||
u8 byte2;
|
||||
/* XXXXXXXX
|
||||
* XXXX 4: Initiator of event
|
||||
* XXXX 4: Target of failed operation
|
||||
*/
|
||||
u8 byte3; /* General event or error*/
|
||||
__be32 extended_log_length; /* length in bytes */
|
||||
unsigned char buffer[1]; /* Start of extended log */
|
||||
/* Variable length. */
|
||||
};
|
||||
|
||||
/* RTAS general extended event log, Version 6. The extended log starts
|
||||
* from "buffer" field of struct rtas_error_log defined above.
|
||||
*/
|
||||
struct rtas_ext_event_log_v6 {
|
||||
/* Byte 0 */
|
||||
u8 byte0;
|
||||
/* XXXXXXXX
|
||||
* X 1: Log valid
|
||||
* X 1: Unrecoverable error
|
||||
* X 1: Recoverable (correctable or successfully retried)
|
||||
* X 1: Bypassed unrecoverable error (degraded operation)
|
||||
* X 1: Predictive error
|
||||
* X 1: "New" log (always 1 for data returned from RTAS)
|
||||
* X 1: Big Endian
|
||||
* X 1: Reserved
|
||||
*/
|
||||
|
||||
/* Byte 1 */
|
||||
u8 byte1; /* reserved */
|
||||
|
||||
/* Byte 2 */
|
||||
u8 byte2;
|
||||
/* XXXXXXXX
|
||||
* X 1: Set to 1 (indicating log is in PowerPC format)
|
||||
* XXX 3: Reserved
|
||||
* XXXX 4: Log format used for bytes 12-2047
|
||||
*/
|
||||
|
||||
/* Byte 3 */
|
||||
u8 byte3; /* reserved */
|
||||
/* Byte 4-11 */
|
||||
u8 reserved[8]; /* reserved */
|
||||
/* Byte 12-15 */
|
||||
__be32 company_id; /* Company ID of the company */
|
||||
/* that defines the format for */
|
||||
/* the vendor specific log type */
|
||||
/* Byte 16-end of log */
|
||||
u8 vendor_log[1]; /* Start of vendor specific log */
|
||||
/* Variable length. */
|
||||
};
|
||||
|
||||
/* Vendor specific Platform Event Log Format, Version 6, section header */
|
||||
struct pseries_errorlog {
|
||||
__be16 id; /* 0x00 2-byte ASCII section ID */
|
||||
__be16 length; /* 0x02 Section length in bytes */
|
||||
u8 version; /* 0x04 Section version */
|
||||
u8 subtype; /* 0x05 Section subtype */
|
||||
__be16 creator_component; /* 0x06 Creator component ID */
|
||||
u8 data[]; /* 0x08 Start of section data */
|
||||
};
|
||||
|
||||
/* RTAS pseries hotplug errorlog section */
|
||||
struct pseries_hp_errorlog {
|
||||
u8 resource;
|
||||
u8 action;
|
||||
u8 id_type;
|
||||
u8 reserved;
|
||||
union {
|
||||
__be32 drc_index;
|
||||
__be32 drc_count;
|
||||
struct { __be32 count, index; } ic;
|
||||
char drc_name[1];
|
||||
} _drc_u;
|
||||
};
|
||||
|
||||
#endif /* _ASM_POWERPC_RTAS_TYPES_H */
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
#include <linux/spinlock.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/rtas-types.h>
|
||||
#include <linux/time.h>
|
||||
#include <linux/cpumask.h>
|
||||
|
||||
|
@ -42,33 +43,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
typedef __be32 rtas_arg_t;
|
||||
|
||||
struct rtas_args {
|
||||
__be32 token;
|
||||
__be32 nargs;
|
||||
__be32 nret;
|
||||
rtas_arg_t args[16];
|
||||
rtas_arg_t *rets; /* Pointer to return values in args[]. */
|
||||
};
|
||||
|
||||
struct rtas_t {
|
||||
unsigned long entry; /* physical address pointer */
|
||||
unsigned long base; /* physical address pointer */
|
||||
unsigned long size;
|
||||
arch_spinlock_t lock;
|
||||
struct rtas_args args;
|
||||
struct device_node *dev; /* virtual address pointer */
|
||||
};
|
||||
|
||||
struct rtas_suspend_me_data {
|
||||
atomic_t working; /* number of cpus accessing this struct */
|
||||
atomic_t done;
|
||||
int token; /* ibm,suspend-me */
|
||||
atomic_t error;
|
||||
struct completion *complete; /* wait on this until working == 0 */
|
||||
};
|
||||
|
||||
/* RTAS event classes */
|
||||
#define RTAS_INTERNAL_ERROR 0x80000000 /* set bit 0 */
|
||||
#define RTAS_EPOW_WARNING 0x40000000 /* set bit 1 */
|
||||
|
@ -148,31 +122,6 @@ struct rtas_suspend_me_data {
|
|||
/* RTAS check-exception vector offset */
|
||||
#define RTAS_VECTOR_EXTERNAL_INTERRUPT 0x500
|
||||
|
||||
struct rtas_error_log {
|
||||
/* Byte 0 */
|
||||
uint8_t byte0; /* Architectural version */
|
||||
|
||||
/* Byte 1 */
|
||||
uint8_t byte1;
|
||||
/* XXXXXXXX
|
||||
* XXX 3: Severity level of error
|
||||
* XX 2: Degree of recovery
|
||||
* X 1: Extended log present?
|
||||
* XX 2: Reserved
|
||||
*/
|
||||
|
||||
/* Byte 2 */
|
||||
uint8_t byte2;
|
||||
/* XXXXXXXX
|
||||
* XXXX 4: Initiator of event
|
||||
* XXXX 4: Target of failed operation
|
||||
*/
|
||||
uint8_t byte3; /* General event or error*/
|
||||
__be32 extended_log_length; /* length in bytes */
|
||||
unsigned char buffer[1]; /* Start of extended log */
|
||||
/* Variable length. */
|
||||
};
|
||||
|
||||
static inline uint8_t rtas_error_severity(const struct rtas_error_log *elog)
|
||||
{
|
||||
return (elog->byte1 & 0xE0) >> 5;
|
||||
|
@ -212,47 +161,6 @@ uint32_t rtas_error_extended_log_length(const struct rtas_error_log *elog)
|
|||
|
||||
#define RTAS_V6EXT_COMPANY_ID_IBM (('I' << 24) | ('B' << 16) | ('M' << 8))
|
||||
|
||||
/* RTAS general extended event log, Version 6. The extended log starts
|
||||
* from "buffer" field of struct rtas_error_log defined above.
|
||||
*/
|
||||
struct rtas_ext_event_log_v6 {
|
||||
/* Byte 0 */
|
||||
uint8_t byte0;
|
||||
/* XXXXXXXX
|
||||
* X 1: Log valid
|
||||
* X 1: Unrecoverable error
|
||||
* X 1: Recoverable (correctable or successfully retried)
|
||||
* X 1: Bypassed unrecoverable error (degraded operation)
|
||||
* X 1: Predictive error
|
||||
* X 1: "New" log (always 1 for data returned from RTAS)
|
||||
* X 1: Big Endian
|
||||
* X 1: Reserved
|
||||
*/
|
||||
|
||||
/* Byte 1 */
|
||||
uint8_t byte1; /* reserved */
|
||||
|
||||
/* Byte 2 */
|
||||
uint8_t byte2;
|
||||
/* XXXXXXXX
|
||||
* X 1: Set to 1 (indicating log is in PowerPC format)
|
||||
* XXX 3: Reserved
|
||||
* XXXX 4: Log format used for bytes 12-2047
|
||||
*/
|
||||
|
||||
/* Byte 3 */
|
||||
uint8_t byte3; /* reserved */
|
||||
/* Byte 4-11 */
|
||||
uint8_t reserved[8]; /* reserved */
|
||||
/* Byte 12-15 */
|
||||
__be32 company_id; /* Company ID of the company */
|
||||
/* that defines the format for */
|
||||
/* the vendor specific log type */
|
||||
/* Byte 16-end of log */
|
||||
uint8_t vendor_log[1]; /* Start of vendor specific log */
|
||||
/* Variable length. */
|
||||
};
|
||||
|
||||
static
|
||||
inline uint8_t rtas_ext_event_log_format(struct rtas_ext_event_log_v6 *ext_log)
|
||||
{
|
||||
|
@ -287,16 +195,6 @@ inline uint32_t rtas_ext_event_company_id(struct rtas_ext_event_log_v6 *ext_log)
|
|||
#define PSERIES_ELOG_SECT_ID_HOTPLUG (('H' << 8) | 'P')
|
||||
#define PSERIES_ELOG_SECT_ID_MCE (('M' << 8) | 'C')
|
||||
|
||||
/* Vendor specific Platform Event Log Format, Version 6, section header */
|
||||
struct pseries_errorlog {
|
||||
__be16 id; /* 0x00 2-byte ASCII section ID */
|
||||
__be16 length; /* 0x02 Section length in bytes */
|
||||
uint8_t version; /* 0x04 Section version */
|
||||
uint8_t subtype; /* 0x05 Section subtype */
|
||||
__be16 creator_component; /* 0x06 Creator component ID */
|
||||
uint8_t data[]; /* 0x08 Start of section data */
|
||||
};
|
||||
|
||||
static
|
||||
inline uint16_t pseries_errorlog_id(struct pseries_errorlog *sect)
|
||||
{
|
||||
|
@ -309,20 +207,6 @@ inline uint16_t pseries_errorlog_length(struct pseries_errorlog *sect)
|
|||
return be16_to_cpu(sect->length);
|
||||
}
|
||||
|
||||
/* RTAS pseries hotplug errorlog section */
|
||||
struct pseries_hp_errorlog {
|
||||
u8 resource;
|
||||
u8 action;
|
||||
u8 id_type;
|
||||
u8 reserved;
|
||||
union {
|
||||
__be32 drc_index;
|
||||
__be32 drc_count;
|
||||
struct { __be32 count, index; } ic;
|
||||
char drc_name[1];
|
||||
} _drc_u;
|
||||
};
|
||||
|
||||
#define PSERIES_HP_ELOG_RESOURCE_CPU 1
|
||||
#define PSERIES_HP_ELOG_RESOURCE_MEM 2
|
||||
#define PSERIES_HP_ELOG_RESOURCE_SLOT 3
|
||||
|
|
Loading…
Reference in New Issue