root/arch/powerpc/include/asm/rtas-types.h
/* SPDX-License-Identifier: GPL-2.0-or-later */
#ifndef _ASM_POWERPC_RTAS_TYPES_H
#define _ASM_POWERPC_RTAS_TYPES_H

#include <linux/compiler_attributes.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[]. */
} __aligned(8);

struct rtas_t {
        unsigned long entry;            /* physical address pointer */
        unsigned long base;             /* physical address pointer */
        unsigned long size;
        struct device_node *dev;        /* virtual address pointer */
};

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 */