1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 * Copyright (C) 2000, 2001, 2002 Broadcom Corporation
4 */
5#ifndef CFE_API_INT_H
6#define CFE_API_INT_H
7
8/*
9 * Constants.
10 */
11#define CFE_CMD_FW_GETINFO	0
12#define CFE_CMD_FW_RESTART	1
13#define CFE_CMD_FW_BOOT		2
14#define CFE_CMD_FW_CPUCTL	3
15#define CFE_CMD_FW_GETTIME      4
16#define CFE_CMD_FW_MEMENUM	5
17#define CFE_CMD_FW_FLUSHCACHE	6
18
19#define CFE_CMD_DEV_GETHANDLE	9
20#define CFE_CMD_DEV_ENUM	10
21#define CFE_CMD_DEV_OPEN	11
22#define CFE_CMD_DEV_INPSTAT	12
23#define CFE_CMD_DEV_READ	13
24#define CFE_CMD_DEV_WRITE	14
25#define CFE_CMD_DEV_IOCTL	15
26#define CFE_CMD_DEV_CLOSE	16
27#define CFE_CMD_DEV_GETINFO	17
28
29#define CFE_CMD_ENV_ENUM	20
30#define CFE_CMD_ENV_GET		22
31#define CFE_CMD_ENV_SET		23
32#define CFE_CMD_ENV_DEL		24
33
34#define CFE_CMD_MAX		32
35
36#define CFE_CMD_VENDOR_USE	0x8000	/* codes above this are for customer use */
37
38/*
39 * Structures.
40 */
41
42/* eeek, signed "pointers" */
43typedef s64 cfe_xptr_t;
44
45struct xiocb_buffer {
46	u64 buf_offset;		/* offset on device (bytes) */
47	cfe_xptr_t  buf_ptr;		/* pointer to a buffer */
48	u64 buf_length;		/* length of this buffer */
49	u64 buf_retlen;		/* returned length (for read ops) */
50	u64 buf_ioctlcmd;	/* IOCTL command (used only for IOCTLs) */
51};
52
53struct xiocb_inpstat {
54	u64 inp_status;		/* 1 means input available */
55};
56
57struct xiocb_envbuf {
58	s64 enum_idx;		/* 0-based enumeration index */
59	cfe_xptr_t name_ptr;		/* name string buffer */
60	s64 name_length;		/* size of name buffer */
61	cfe_xptr_t val_ptr;		/* value string buffer */
62	s64 val_length;		/* size of value string buffer */
63};
64
65struct xiocb_cpuctl {
66	u64 cpu_number;		/* cpu number to control */
67	u64 cpu_command;	/* command to issue to CPU */
68	u64 start_addr;		/* CPU start address */
69	u64 gp_val;		/* starting GP value */
70	u64 sp_val;		/* starting SP value */
71	u64 a1_val;		/* starting A1 value */
72};
73
74struct xiocb_time {
75	s64 ticks;		/* current time in ticks */
76};
77
78struct xiocb_exitstat{
79	s64 status;
80};
81
82struct xiocb_meminfo {
83	s64 mi_idx;		/* 0-based enumeration index */
84	s64 mi_type;		/* type of memory block */
85	u64 mi_addr;		/* physical start address */
86	u64 mi_size;		/* block size */
87};
88
89struct xiocb_fwinfo {
90	s64 fwi_version;		/* major, minor, eco version */
91	s64 fwi_totalmem;	/* total installed mem */
92	s64 fwi_flags;		/* various flags */
93	s64 fwi_boardid;		/* board ID */
94	s64 fwi_bootarea_va;	/* VA of boot area */
95	s64 fwi_bootarea_pa;	/* PA of boot area */
96	s64 fwi_bootarea_size;	/* size of boot area */
97	s64 fwi_reserved1;
98	s64 fwi_reserved2;
99	s64 fwi_reserved3;
100};
101
102struct cfe_xiocb {
103	u64 xiocb_fcode;	/* IOCB function code */
104	s64 xiocb_status;	/* return status */
105	s64 xiocb_handle;	/* file/device handle */
106	u64 xiocb_flags;	/* flags for this IOCB */
107	u64 xiocb_psize;	/* size of parameter list */
108	union {
109		/* buffer parameters */
110		struct xiocb_buffer xiocb_buffer;
111
112		/* input status parameters */
113		struct xiocb_inpstat xiocb_inpstat;
114
115		/* environment function parameters */
116		struct xiocb_envbuf xiocb_envbuf;
117
118		/* CPU control parameters */
119		struct xiocb_cpuctl xiocb_cpuctl;
120
121		/* timer parameters */
122		struct xiocb_time xiocb_time;
123
124		/* memory arena info parameters */
125		struct xiocb_meminfo xiocb_meminfo;
126
127		/* firmware information */
128		struct xiocb_fwinfo xiocb_fwinfo;
129
130		/* Exit Status */
131		struct xiocb_exitstat xiocb_exitstat;
132	} plist;
133};
134
135#endif /* CFE_API_INT_H */
136