1783a015bSLeonardo Bras /* SPDX-License-Identifier: GPL-2.0-or-later */ 2783a015bSLeonardo Bras #ifndef _ASM_POWERPC_RTAS_TYPES_H 3783a015bSLeonardo Bras #define _ASM_POWERPC_RTAS_TYPES_H 4783a015bSLeonardo Bras 5783a015bSLeonardo Bras #include <linux/spinlock_types.h> 6783a015bSLeonardo Bras 7783a015bSLeonardo Bras typedef __be32 rtas_arg_t; 8783a015bSLeonardo Bras 9783a015bSLeonardo Bras struct rtas_args { 10783a015bSLeonardo Bras __be32 token; 11783a015bSLeonardo Bras __be32 nargs; 12783a015bSLeonardo Bras __be32 nret; 13783a015bSLeonardo Bras rtas_arg_t args[16]; 14783a015bSLeonardo Bras rtas_arg_t *rets; /* Pointer to return values in args[]. */ 15783a015bSLeonardo Bras }; 16783a015bSLeonardo Bras 17783a015bSLeonardo Bras struct rtas_t { 18783a015bSLeonardo Bras unsigned long entry; /* physical address pointer */ 19783a015bSLeonardo Bras unsigned long base; /* physical address pointer */ 20783a015bSLeonardo Bras unsigned long size; 21783a015bSLeonardo Bras arch_spinlock_t lock; 22783a015bSLeonardo Bras struct rtas_args args; 23783a015bSLeonardo Bras struct device_node *dev; /* virtual address pointer */ 24783a015bSLeonardo Bras }; 25783a015bSLeonardo Bras 26783a015bSLeonardo Bras struct rtas_suspend_me_data { 27783a015bSLeonardo Bras atomic_t working; /* number of cpus accessing this struct */ 28783a015bSLeonardo Bras atomic_t done; 29783a015bSLeonardo Bras int token; /* ibm,suspend-me */ 30783a015bSLeonardo Bras atomic_t error; 31783a015bSLeonardo Bras struct completion *complete; /* wait on this until working == 0 */ 32783a015bSLeonardo Bras }; 33783a015bSLeonardo Bras 34783a015bSLeonardo Bras struct rtas_error_log { 35783a015bSLeonardo Bras /* Byte 0 */ 36783a015bSLeonardo Bras u8 byte0; /* Architectural version */ 37783a015bSLeonardo Bras 38783a015bSLeonardo Bras /* Byte 1 */ 39783a015bSLeonardo Bras u8 byte1; 40783a015bSLeonardo Bras /* XXXXXXXX 41783a015bSLeonardo Bras * XXX 3: Severity level of error 42783a015bSLeonardo Bras * XX 2: Degree of recovery 43783a015bSLeonardo Bras * X 1: Extended log present? 44783a015bSLeonardo Bras * XX 2: Reserved 45783a015bSLeonardo Bras */ 46783a015bSLeonardo Bras 47783a015bSLeonardo Bras /* Byte 2 */ 48783a015bSLeonardo Bras u8 byte2; 49783a015bSLeonardo Bras /* XXXXXXXX 50783a015bSLeonardo Bras * XXXX 4: Initiator of event 51783a015bSLeonardo Bras * XXXX 4: Target of failed operation 52783a015bSLeonardo Bras */ 53783a015bSLeonardo Bras u8 byte3; /* General event or error*/ 54783a015bSLeonardo Bras __be32 extended_log_length; /* length in bytes */ 55783a015bSLeonardo Bras unsigned char buffer[1]; /* Start of extended log */ 56783a015bSLeonardo Bras /* Variable length. */ 57783a015bSLeonardo Bras }; 58783a015bSLeonardo Bras 59783a015bSLeonardo Bras /* RTAS general extended event log, Version 6. The extended log starts 60783a015bSLeonardo Bras * from "buffer" field of struct rtas_error_log defined above. 61783a015bSLeonardo Bras */ 62783a015bSLeonardo Bras struct rtas_ext_event_log_v6 { 63783a015bSLeonardo Bras /* Byte 0 */ 64783a015bSLeonardo Bras u8 byte0; 65783a015bSLeonardo Bras /* XXXXXXXX 66783a015bSLeonardo Bras * X 1: Log valid 67783a015bSLeonardo Bras * X 1: Unrecoverable error 68783a015bSLeonardo Bras * X 1: Recoverable (correctable or successfully retried) 69783a015bSLeonardo Bras * X 1: Bypassed unrecoverable error (degraded operation) 70783a015bSLeonardo Bras * X 1: Predictive error 71783a015bSLeonardo Bras * X 1: "New" log (always 1 for data returned from RTAS) 72783a015bSLeonardo Bras * X 1: Big Endian 73783a015bSLeonardo Bras * X 1: Reserved 74783a015bSLeonardo Bras */ 75783a015bSLeonardo Bras 76783a015bSLeonardo Bras /* Byte 1 */ 77783a015bSLeonardo Bras u8 byte1; /* reserved */ 78783a015bSLeonardo Bras 79783a015bSLeonardo Bras /* Byte 2 */ 80783a015bSLeonardo Bras u8 byte2; 81783a015bSLeonardo Bras /* XXXXXXXX 82783a015bSLeonardo Bras * X 1: Set to 1 (indicating log is in PowerPC format) 83783a015bSLeonardo Bras * XXX 3: Reserved 84783a015bSLeonardo Bras * XXXX 4: Log format used for bytes 12-2047 85783a015bSLeonardo Bras */ 86783a015bSLeonardo Bras 87783a015bSLeonardo Bras /* Byte 3 */ 88783a015bSLeonardo Bras u8 byte3; /* reserved */ 89783a015bSLeonardo Bras /* Byte 4-11 */ 90783a015bSLeonardo Bras u8 reserved[8]; /* reserved */ 91783a015bSLeonardo Bras /* Byte 12-15 */ 92783a015bSLeonardo Bras __be32 company_id; /* Company ID of the company */ 93783a015bSLeonardo Bras /* that defines the format for */ 94783a015bSLeonardo Bras /* the vendor specific log type */ 95783a015bSLeonardo Bras /* Byte 16-end of log */ 96783a015bSLeonardo Bras u8 vendor_log[1]; /* Start of vendor specific log */ 97783a015bSLeonardo Bras /* Variable length. */ 98783a015bSLeonardo Bras }; 99783a015bSLeonardo Bras 100783a015bSLeonardo Bras /* Vendor specific Platform Event Log Format, Version 6, section header */ 101783a015bSLeonardo Bras struct pseries_errorlog { 102783a015bSLeonardo Bras __be16 id; /* 0x00 2-byte ASCII section ID */ 103783a015bSLeonardo Bras __be16 length; /* 0x02 Section length in bytes */ 104783a015bSLeonardo Bras u8 version; /* 0x04 Section version */ 105783a015bSLeonardo Bras u8 subtype; /* 0x05 Section subtype */ 106783a015bSLeonardo Bras __be16 creator_component; /* 0x06 Creator component ID */ 107783a015bSLeonardo Bras u8 data[]; /* 0x08 Start of section data */ 108783a015bSLeonardo Bras }; 109783a015bSLeonardo Bras 110783a015bSLeonardo Bras /* RTAS pseries hotplug errorlog section */ 111783a015bSLeonardo Bras struct pseries_hp_errorlog { 112783a015bSLeonardo Bras u8 resource; 113783a015bSLeonardo Bras u8 action; 114783a015bSLeonardo Bras u8 id_type; 115783a015bSLeonardo Bras u8 reserved; 116783a015bSLeonardo Bras union { 117783a015bSLeonardo Bras __be32 drc_index; 118783a015bSLeonardo Bras __be32 drc_count; 119783a015bSLeonardo Bras struct { __be32 count, index; } ic; 120783a015bSLeonardo Bras char drc_name[1]; 121783a015bSLeonardo Bras } _drc_u; 122783a015bSLeonardo Bras }; 123783a015bSLeonardo Bras 124783a015bSLeonardo Bras #endif /* _ASM_POWERPC_RTAS_TYPES_H */ 125