diff options
author | Alistair Francis <alistair.francis@wdc.com> | 2019-03-08 22:22:22 +0300 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2019-03-10 18:38:21 +0300 |
commit | 508a27204cbbca0a9430236e56681e5e0d343fb9 (patch) | |
tree | 6814c923713eab8d1c0a9f8ea7859c1ce63d9507 /include | |
parent | 007a6b26d9a22a9dc49ede12115a8704f634dad0 (diff) | |
download | opensbi-508a27204cbbca0a9430236e56681e5e0d343fb9.tar.xz |
lib: Create a sbi_ipi_data structure
Create a sbi_ipi_data structure that holds unpacked IPI information. At
the same time remove ipi_type from the sbi_scratch struct and use a
fixed offset to access it.
This structure fits in behind the sbi_scratch structure.
This fixes https://github.com/riscv/opensbi/issues/81
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/sbi/sbi_scratch.h | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/include/sbi/sbi_scratch.h b/include/sbi/sbi_scratch.h index 8389ef3..70ab384 100644 --- a/include/sbi/sbi_scratch.h +++ b/include/sbi/sbi_scratch.h @@ -28,17 +28,24 @@ #define SBI_SCRATCH_PLATFORM_ADDR_OFFSET (6 * __SIZEOF_POINTER__) /** Offset of hartid_to_scratch member in sbi_scratch */ #define SBI_SCRATCH_HARTID_TO_SCRATCH_OFFSET (7 * __SIZEOF_POINTER__) -/** Offset of ipi_type member in sbi_scratch */ -#define SBI_SCRATCH_IPI_TYPE_OFFSET (8 * __SIZEOF_POINTER__) /** Offset of tmp0 member in sbi_scratch */ -#define SBI_SCRATCH_TMP0_OFFSET (9 * __SIZEOF_POINTER__) -/** Maximum size of sbi_scratch */ -#define SBI_SCRATCH_SIZE 256 +#define SBI_SCRATCH_TMP0_OFFSET (8 * __SIZEOF_POINTER__) + +/** sbi_ipi_data is located behind sbi_scratch. This struct is not packed. */ +/** Offset of ipi_type in sbi_ipi_data */ +#define SBI_IPI_DATA_IPI_TYPE_OFFSET (15 * __SIZEOF_POINTER__) + +/** Maximum size of sbi_scratch and sbi_ipi_data */ +#define SBI_SCRATCH_SIZE (32 * __SIZEOF_POINTER__) #ifndef __ASSEMBLY__ #include <sbi/sbi_types.h> +struct sbi_ipi_data { + unsigned long ipi_type; +}; + /** Representation of per-HART scratch space */ struct sbi_scratch { /** Start (or base) address of firmware linked to OpenSBI library */ @@ -57,8 +64,6 @@ struct sbi_scratch { unsigned long platform_addr; /** Address of HART ID to sbi_scratch conversion function */ unsigned long hartid_to_scratch; - /** IPI type (or flags) */ - unsigned long ipi_type; /** Temporary storage */ unsigned long tmp0; } __packed; @@ -71,6 +76,10 @@ struct sbi_scratch { #define sbi_scratch_thishart_arg1_ptr() \ ((void *)(sbi_scratch_thishart_ptr()->next_arg1)) +/** Get pointer to sbi_ipi_data from sbi_scratch */ +#define sbi_ipi_data_ptr(scratch) \ +((struct sbi_ipi_data *)(void*)scratch + SBI_IPI_DATA_IPI_TYPE_OFFSET) + #endif #endif |