xref: /aosp_15_r20/external/mesa3d/src/freedreno/common/msm_proto.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2022 Google LLC
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #ifndef MSM_PROTO_H_
7*61046927SAndroid Build Coastguard Worker #define MSM_PROTO_H_
8*61046927SAndroid Build Coastguard Worker 
9*61046927SAndroid Build Coastguard Worker /**
10*61046927SAndroid Build Coastguard Worker  * General protocol notes:
11*61046927SAndroid Build Coastguard Worker  * 1) Request (req) messages are generally sent over DRM_VIRTGPU_EXECBUFFER
12*61046927SAndroid Build Coastguard Worker  *    but can also be sent via DRM_VIRTGPU_RESOURCE_CREATE_BLOB (in which
13*61046927SAndroid Build Coastguard Worker  *    case they are processed by the host before ctx->get_blob())
14*61046927SAndroid Build Coastguard Worker  * 2) Response (rsp) messages are returned via shmem->rsp_mem, at an offset
15*61046927SAndroid Build Coastguard Worker  *    specified by the guest in the req message.  Not all req messages have
16*61046927SAndroid Build Coastguard Worker  *    a rsp.
17*61046927SAndroid Build Coastguard Worker  * 3) Host and guest could have different pointer sizes, ie. 32b guest and
18*61046927SAndroid Build Coastguard Worker  *    64b host, or visa versa, so similar to kernel uabi, req and rsp msgs
19*61046927SAndroid Build Coastguard Worker  *    should be explicitly padded to avoid 32b vs 64b struct padding issues
20*61046927SAndroid Build Coastguard Worker  */
21*61046927SAndroid Build Coastguard Worker 
22*61046927SAndroid Build Coastguard Worker /**
23*61046927SAndroid Build Coastguard Worker  * Defines the layout of shmem buffer used for host->guest communication.
24*61046927SAndroid Build Coastguard Worker  */
25*61046927SAndroid Build Coastguard Worker struct msm_shmem {
26*61046927SAndroid Build Coastguard Worker    struct vdrm_shmem base;
27*61046927SAndroid Build Coastguard Worker 
28*61046927SAndroid Build Coastguard Worker    /**
29*61046927SAndroid Build Coastguard Worker     * Counter that is incremented on asynchronous errors, like SUBMIT
30*61046927SAndroid Build Coastguard Worker     * or GEM_NEW failures.  The guest should treat errors as context-
31*61046927SAndroid Build Coastguard Worker     * lost.
32*61046927SAndroid Build Coastguard Worker     */
33*61046927SAndroid Build Coastguard Worker    uint32_t async_error;
34*61046927SAndroid Build Coastguard Worker 
35*61046927SAndroid Build Coastguard Worker    /**
36*61046927SAndroid Build Coastguard Worker     * Counter that is incremented on global fault (see MSM_PARAM_FAULTS)
37*61046927SAndroid Build Coastguard Worker     */
38*61046927SAndroid Build Coastguard Worker    uint32_t global_faults;
39*61046927SAndroid Build Coastguard Worker };
40*61046927SAndroid Build Coastguard Worker DEFINE_CAST(vdrm_shmem, msm_shmem)
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker /*
43*61046927SAndroid Build Coastguard Worker  * Possible cmd types for "command stream", ie. payload of EXECBUF ioctl:
44*61046927SAndroid Build Coastguard Worker  */
45*61046927SAndroid Build Coastguard Worker enum msm_ccmd {
46*61046927SAndroid Build Coastguard Worker    MSM_CCMD_NOP = 1,         /* No payload, can be used to sync with host */
47*61046927SAndroid Build Coastguard Worker    MSM_CCMD_IOCTL_SIMPLE,
48*61046927SAndroid Build Coastguard Worker    MSM_CCMD_GEM_NEW,
49*61046927SAndroid Build Coastguard Worker    MSM_CCMD_GEM_SET_IOVA,
50*61046927SAndroid Build Coastguard Worker    MSM_CCMD_GEM_CPU_PREP,
51*61046927SAndroid Build Coastguard Worker    MSM_CCMD_GEM_SET_NAME,
52*61046927SAndroid Build Coastguard Worker    MSM_CCMD_GEM_SUBMIT,
53*61046927SAndroid Build Coastguard Worker    MSM_CCMD_GEM_UPLOAD,
54*61046927SAndroid Build Coastguard Worker    MSM_CCMD_SUBMITQUEUE_QUERY,
55*61046927SAndroid Build Coastguard Worker    MSM_CCMD_WAIT_FENCE,
56*61046927SAndroid Build Coastguard Worker    MSM_CCMD_SET_DEBUGINFO,
57*61046927SAndroid Build Coastguard Worker    MSM_CCMD_LAST,
58*61046927SAndroid Build Coastguard Worker };
59*61046927SAndroid Build Coastguard Worker 
60*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
61*61046927SAndroid Build Coastguard Worker #define MSM_CCMD(_cmd, _len) {                      \
62*61046927SAndroid Build Coastguard Worker        .cmd = MSM_CCMD_##_cmd,                      \
63*61046927SAndroid Build Coastguard Worker        .len = (_len),                               \
64*61046927SAndroid Build Coastguard Worker    }
65*61046927SAndroid Build Coastguard Worker #else
66*61046927SAndroid Build Coastguard Worker #define MSM_CCMD(_cmd, _len) (struct vdrm_ccmd_req){ \
67*61046927SAndroid Build Coastguard Worker        .cmd = MSM_CCMD_##_cmd,                      \
68*61046927SAndroid Build Coastguard Worker        .len = (_len),                               \
69*61046927SAndroid Build Coastguard Worker    }
70*61046927SAndroid Build Coastguard Worker #endif
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker /*
73*61046927SAndroid Build Coastguard Worker  * MSM_CCMD_NOP
74*61046927SAndroid Build Coastguard Worker  */
75*61046927SAndroid Build Coastguard Worker struct msm_ccmd_nop_req {
76*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_req hdr;
77*61046927SAndroid Build Coastguard Worker };
78*61046927SAndroid Build Coastguard Worker 
79*61046927SAndroid Build Coastguard Worker /*
80*61046927SAndroid Build Coastguard Worker  * MSM_CCMD_IOCTL_SIMPLE
81*61046927SAndroid Build Coastguard Worker  *
82*61046927SAndroid Build Coastguard Worker  * Forward simple/flat IOC_RW or IOC_W ioctls.  Limited ioctls are supported.
83*61046927SAndroid Build Coastguard Worker  */
84*61046927SAndroid Build Coastguard Worker struct msm_ccmd_ioctl_simple_req {
85*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_req hdr;
86*61046927SAndroid Build Coastguard Worker 
87*61046927SAndroid Build Coastguard Worker    uint32_t cmd;
88*61046927SAndroid Build Coastguard Worker    uint8_t payload[];
89*61046927SAndroid Build Coastguard Worker };
90*61046927SAndroid Build Coastguard Worker DEFINE_CAST(vdrm_ccmd_req, msm_ccmd_ioctl_simple_req)
91*61046927SAndroid Build Coastguard Worker 
92*61046927SAndroid Build Coastguard Worker struct msm_ccmd_ioctl_simple_rsp {
93*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_rsp hdr;
94*61046927SAndroid Build Coastguard Worker 
95*61046927SAndroid Build Coastguard Worker    /* ioctl return value, interrupted syscalls are handled on the host without
96*61046927SAndroid Build Coastguard Worker     * returning to the guest.
97*61046927SAndroid Build Coastguard Worker     */
98*61046927SAndroid Build Coastguard Worker    int32_t ret;
99*61046927SAndroid Build Coastguard Worker 
100*61046927SAndroid Build Coastguard Worker    /* The output payload for IOC_RW ioctls, the payload is the same size as
101*61046927SAndroid Build Coastguard Worker     * msm_context_cmd_ioctl_simple_req.
102*61046927SAndroid Build Coastguard Worker     *
103*61046927SAndroid Build Coastguard Worker     * For IOC_W ioctls (userspace writes, kernel reads) this is zero length.
104*61046927SAndroid Build Coastguard Worker     */
105*61046927SAndroid Build Coastguard Worker    uint8_t payload[];
106*61046927SAndroid Build Coastguard Worker };
107*61046927SAndroid Build Coastguard Worker 
108*61046927SAndroid Build Coastguard Worker /*
109*61046927SAndroid Build Coastguard Worker  * MSM_CCMD_GEM_NEW
110*61046927SAndroid Build Coastguard Worker  *
111*61046927SAndroid Build Coastguard Worker  * GEM buffer allocation, maps to DRM_MSM_GEM_NEW plus DRM_MSM_GEM_INFO to
112*61046927SAndroid Build Coastguard Worker  * set the BO's iova (to avoid extra guest -> host trip)
113*61046927SAndroid Build Coastguard Worker  *
114*61046927SAndroid Build Coastguard Worker  * No response.
115*61046927SAndroid Build Coastguard Worker  */
116*61046927SAndroid Build Coastguard Worker struct msm_ccmd_gem_new_req {
117*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_req hdr;
118*61046927SAndroid Build Coastguard Worker 
119*61046927SAndroid Build Coastguard Worker    uint64_t iova;
120*61046927SAndroid Build Coastguard Worker    uint64_t size;
121*61046927SAndroid Build Coastguard Worker    uint32_t flags;
122*61046927SAndroid Build Coastguard Worker    uint32_t blob_id;
123*61046927SAndroid Build Coastguard Worker };
124*61046927SAndroid Build Coastguard Worker DEFINE_CAST(vdrm_ccmd_req, msm_ccmd_gem_new_req)
125*61046927SAndroid Build Coastguard Worker 
126*61046927SAndroid Build Coastguard Worker /*
127*61046927SAndroid Build Coastguard Worker  * MSM_CCMD_GEM_SET_IOVA
128*61046927SAndroid Build Coastguard Worker  *
129*61046927SAndroid Build Coastguard Worker  * Set the buffer iova (for imported BOs).  Also used to release the iova
130*61046927SAndroid Build Coastguard Worker  * (by setting it to zero) when a BO is freed.
131*61046927SAndroid Build Coastguard Worker  */
132*61046927SAndroid Build Coastguard Worker struct msm_ccmd_gem_set_iova_req {
133*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_req hdr;
134*61046927SAndroid Build Coastguard Worker 
135*61046927SAndroid Build Coastguard Worker    uint64_t iova;
136*61046927SAndroid Build Coastguard Worker    uint32_t res_id;
137*61046927SAndroid Build Coastguard Worker };
138*61046927SAndroid Build Coastguard Worker DEFINE_CAST(vdrm_ccmd_req, msm_ccmd_gem_set_iova_req)
139*61046927SAndroid Build Coastguard Worker 
140*61046927SAndroid Build Coastguard Worker /*
141*61046927SAndroid Build Coastguard Worker  * MSM_CCMD_GEM_CPU_PREP
142*61046927SAndroid Build Coastguard Worker  *
143*61046927SAndroid Build Coastguard Worker  * Maps to DRM_MSM_GEM_CPU_PREP
144*61046927SAndroid Build Coastguard Worker  *
145*61046927SAndroid Build Coastguard Worker  * Note: Since we don't want to block the single threaded host, this returns
146*61046927SAndroid Build Coastguard Worker  * immediately with -EBUSY if the fence is not yet signaled.  The guest
147*61046927SAndroid Build Coastguard Worker  * should poll if needed.
148*61046927SAndroid Build Coastguard Worker  */
149*61046927SAndroid Build Coastguard Worker struct msm_ccmd_gem_cpu_prep_req {
150*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_req hdr;
151*61046927SAndroid Build Coastguard Worker 
152*61046927SAndroid Build Coastguard Worker    uint32_t res_id;
153*61046927SAndroid Build Coastguard Worker    uint32_t op;
154*61046927SAndroid Build Coastguard Worker };
155*61046927SAndroid Build Coastguard Worker DEFINE_CAST(vdrm_ccmd_req, msm_ccmd_gem_cpu_prep_req)
156*61046927SAndroid Build Coastguard Worker 
157*61046927SAndroid Build Coastguard Worker struct msm_ccmd_gem_cpu_prep_rsp {
158*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_rsp hdr;
159*61046927SAndroid Build Coastguard Worker 
160*61046927SAndroid Build Coastguard Worker    int32_t ret;
161*61046927SAndroid Build Coastguard Worker };
162*61046927SAndroid Build Coastguard Worker 
163*61046927SAndroid Build Coastguard Worker /*
164*61046927SAndroid Build Coastguard Worker  * MSM_CCMD_GEM_SET_NAME
165*61046927SAndroid Build Coastguard Worker  *
166*61046927SAndroid Build Coastguard Worker  * Maps to DRM_MSM_GEM_INFO:MSM_INFO_SET_NAME
167*61046927SAndroid Build Coastguard Worker  *
168*61046927SAndroid Build Coastguard Worker  * No response.
169*61046927SAndroid Build Coastguard Worker  */
170*61046927SAndroid Build Coastguard Worker struct msm_ccmd_gem_set_name_req {
171*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_req hdr;
172*61046927SAndroid Build Coastguard Worker 
173*61046927SAndroid Build Coastguard Worker    uint32_t res_id;
174*61046927SAndroid Build Coastguard Worker    /* Note: packet size aligned to 4 bytes, so the string name may
175*61046927SAndroid Build Coastguard Worker     * be shorter than the packet header indicates.
176*61046927SAndroid Build Coastguard Worker     */
177*61046927SAndroid Build Coastguard Worker    uint32_t len;
178*61046927SAndroid Build Coastguard Worker    uint8_t  payload[];
179*61046927SAndroid Build Coastguard Worker };
180*61046927SAndroid Build Coastguard Worker DEFINE_CAST(vdrm_ccmd_req, msm_ccmd_gem_set_name_req)
181*61046927SAndroid Build Coastguard Worker 
182*61046927SAndroid Build Coastguard Worker /*
183*61046927SAndroid Build Coastguard Worker  * MSM_CCMD_GEM_SUBMIT
184*61046927SAndroid Build Coastguard Worker  *
185*61046927SAndroid Build Coastguard Worker  * Maps to DRM_MSM_GEM_SUBMIT
186*61046927SAndroid Build Coastguard Worker  *
187*61046927SAndroid Build Coastguard Worker  * The actual for-reals cmdstream submission.  Note this intentionally
188*61046927SAndroid Build Coastguard Worker  * does not support relocs, since we already require a non-ancient
189*61046927SAndroid Build Coastguard Worker  * kernel.
190*61046927SAndroid Build Coastguard Worker  *
191*61046927SAndroid Build Coastguard Worker  * Note, no in/out fence-fd, that synchronization is handled on guest
192*61046927SAndroid Build Coastguard Worker  * kernel side (ugg).. need to come up with a better story for fencing.
193*61046927SAndroid Build Coastguard Worker  * We probably need to sort something out for that to handle syncobjs.
194*61046927SAndroid Build Coastguard Worker  *
195*61046927SAndroid Build Coastguard Worker  * No response.
196*61046927SAndroid Build Coastguard Worker  */
197*61046927SAndroid Build Coastguard Worker struct msm_ccmd_gem_submit_req {
198*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_req hdr;
199*61046927SAndroid Build Coastguard Worker 
200*61046927SAndroid Build Coastguard Worker    uint32_t flags;
201*61046927SAndroid Build Coastguard Worker    uint32_t queue_id;
202*61046927SAndroid Build Coastguard Worker    uint32_t nr_bos;
203*61046927SAndroid Build Coastguard Worker    uint32_t nr_cmds;
204*61046927SAndroid Build Coastguard Worker 
205*61046927SAndroid Build Coastguard Worker    /**
206*61046927SAndroid Build Coastguard Worker     * The fence "seqno" assigned by the guest userspace.  The host SUBMIT
207*61046927SAndroid Build Coastguard Worker     * ioctl uses the MSM_SUBMIT_FENCE_SN_IN flag to let the guest assign
208*61046927SAndroid Build Coastguard Worker     * the sequence #, to avoid the guest needing to wait for a response
209*61046927SAndroid Build Coastguard Worker     * from the host.
210*61046927SAndroid Build Coastguard Worker     */
211*61046927SAndroid Build Coastguard Worker    uint32_t fence;
212*61046927SAndroid Build Coastguard Worker 
213*61046927SAndroid Build Coastguard Worker    /**
214*61046927SAndroid Build Coastguard Worker     * Payload is first an array of 'struct drm_msm_gem_submit_bo' of
215*61046927SAndroid Build Coastguard Worker     * length determined by nr_bos (note that handles are guest resource
216*61046927SAndroid Build Coastguard Worker     * ids which are translated to host GEM handles by the host VMM),
217*61046927SAndroid Build Coastguard Worker     * followed by an array of 'struct drm_msm_gem_submit_cmd' of length
218*61046927SAndroid Build Coastguard Worker     * determined by nr_cmds
219*61046927SAndroid Build Coastguard Worker     */
220*61046927SAndroid Build Coastguard Worker    int8_t   payload[];
221*61046927SAndroid Build Coastguard Worker };
222*61046927SAndroid Build Coastguard Worker DEFINE_CAST(vdrm_ccmd_req, msm_ccmd_gem_submit_req)
223*61046927SAndroid Build Coastguard Worker 
224*61046927SAndroid Build Coastguard Worker /*
225*61046927SAndroid Build Coastguard Worker  * MSM_CCMD_GEM_UPLOAD
226*61046927SAndroid Build Coastguard Worker  *
227*61046927SAndroid Build Coastguard Worker  * Upload data to a GEM buffer
228*61046927SAndroid Build Coastguard Worker  *
229*61046927SAndroid Build Coastguard Worker  * No response.
230*61046927SAndroid Build Coastguard Worker  */
231*61046927SAndroid Build Coastguard Worker struct msm_ccmd_gem_upload_req {
232*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_req hdr;
233*61046927SAndroid Build Coastguard Worker 
234*61046927SAndroid Build Coastguard Worker    uint32_t res_id;
235*61046927SAndroid Build Coastguard Worker    uint32_t pad;
236*61046927SAndroid Build Coastguard Worker    uint32_t off;
237*61046927SAndroid Build Coastguard Worker 
238*61046927SAndroid Build Coastguard Worker    /* Note: packet size aligned to 4 bytes, so the payload may
239*61046927SAndroid Build Coastguard Worker     * be shorter than the packet header indicates.
240*61046927SAndroid Build Coastguard Worker     */
241*61046927SAndroid Build Coastguard Worker    uint32_t len;
242*61046927SAndroid Build Coastguard Worker    uint8_t  payload[];
243*61046927SAndroid Build Coastguard Worker };
244*61046927SAndroid Build Coastguard Worker DEFINE_CAST(vdrm_ccmd_req, msm_ccmd_gem_upload_req)
245*61046927SAndroid Build Coastguard Worker 
246*61046927SAndroid Build Coastguard Worker /*
247*61046927SAndroid Build Coastguard Worker  * MSM_CCMD_SUBMITQUEUE_QUERY
248*61046927SAndroid Build Coastguard Worker  *
249*61046927SAndroid Build Coastguard Worker  * Maps to DRM_MSM_SUBMITQUEUE_QUERY
250*61046927SAndroid Build Coastguard Worker  */
251*61046927SAndroid Build Coastguard Worker struct msm_ccmd_submitqueue_query_req {
252*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_req hdr;
253*61046927SAndroid Build Coastguard Worker 
254*61046927SAndroid Build Coastguard Worker    uint32_t queue_id;
255*61046927SAndroid Build Coastguard Worker    uint32_t param;
256*61046927SAndroid Build Coastguard Worker    uint32_t len;   /* size of payload in rsp */
257*61046927SAndroid Build Coastguard Worker };
258*61046927SAndroid Build Coastguard Worker DEFINE_CAST(vdrm_ccmd_req, msm_ccmd_submitqueue_query_req)
259*61046927SAndroid Build Coastguard Worker 
260*61046927SAndroid Build Coastguard Worker struct msm_ccmd_submitqueue_query_rsp {
261*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_rsp hdr;
262*61046927SAndroid Build Coastguard Worker 
263*61046927SAndroid Build Coastguard Worker    int32_t  ret;
264*61046927SAndroid Build Coastguard Worker    uint32_t out_len;
265*61046927SAndroid Build Coastguard Worker    uint8_t  payload[];
266*61046927SAndroid Build Coastguard Worker };
267*61046927SAndroid Build Coastguard Worker 
268*61046927SAndroid Build Coastguard Worker /*
269*61046927SAndroid Build Coastguard Worker  * MSM_CCMD_WAIT_FENCE
270*61046927SAndroid Build Coastguard Worker  *
271*61046927SAndroid Build Coastguard Worker  * Maps to DRM_MSM_WAIT_FENCE
272*61046927SAndroid Build Coastguard Worker  *
273*61046927SAndroid Build Coastguard Worker  * Note: Since we don't want to block the single threaded host, this returns
274*61046927SAndroid Build Coastguard Worker  * immediately with -ETIMEDOUT if the fence is not yet signaled.  The guest
275*61046927SAndroid Build Coastguard Worker  * should poll if needed.
276*61046927SAndroid Build Coastguard Worker  */
277*61046927SAndroid Build Coastguard Worker struct msm_ccmd_wait_fence_req {
278*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_req hdr;
279*61046927SAndroid Build Coastguard Worker 
280*61046927SAndroid Build Coastguard Worker    uint32_t queue_id;
281*61046927SAndroid Build Coastguard Worker    uint32_t fence;
282*61046927SAndroid Build Coastguard Worker };
283*61046927SAndroid Build Coastguard Worker DEFINE_CAST(vdrm_ccmd_req, msm_ccmd_wait_fence_req)
284*61046927SAndroid Build Coastguard Worker 
285*61046927SAndroid Build Coastguard Worker struct msm_ccmd_wait_fence_rsp {
286*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_rsp hdr;
287*61046927SAndroid Build Coastguard Worker 
288*61046927SAndroid Build Coastguard Worker    int32_t ret;
289*61046927SAndroid Build Coastguard Worker };
290*61046927SAndroid Build Coastguard Worker 
291*61046927SAndroid Build Coastguard Worker /*
292*61046927SAndroid Build Coastguard Worker  * MSM_CCMD_SET_DEBUGINFO
293*61046927SAndroid Build Coastguard Worker  *
294*61046927SAndroid Build Coastguard Worker  * Set per-guest-process debug info (comm and cmdline).  For GPU faults/
295*61046927SAndroid Build Coastguard Worker  * crashes, it isn't too useful to see the crosvm (for ex.) comm/cmdline,
296*61046927SAndroid Build Coastguard Worker  * since the host process is only a proxy.  This allows the guest to
297*61046927SAndroid Build Coastguard Worker  * pass through the guest process comm and commandline for debugging
298*61046927SAndroid Build Coastguard Worker  * purposes.
299*61046927SAndroid Build Coastguard Worker  *
300*61046927SAndroid Build Coastguard Worker  * No response.
301*61046927SAndroid Build Coastguard Worker  */
302*61046927SAndroid Build Coastguard Worker struct msm_ccmd_set_debuginfo_req {
303*61046927SAndroid Build Coastguard Worker    struct vdrm_ccmd_req hdr;
304*61046927SAndroid Build Coastguard Worker 
305*61046927SAndroid Build Coastguard Worker    uint32_t comm_len;
306*61046927SAndroid Build Coastguard Worker    uint32_t cmdline_len;
307*61046927SAndroid Build Coastguard Worker 
308*61046927SAndroid Build Coastguard Worker    /**
309*61046927SAndroid Build Coastguard Worker     * Payload is first the comm string followed by cmdline string, padded
310*61046927SAndroid Build Coastguard Worker     * out to a multiple of 4.
311*61046927SAndroid Build Coastguard Worker     */
312*61046927SAndroid Build Coastguard Worker    int8_t   payload[];
313*61046927SAndroid Build Coastguard Worker };
314*61046927SAndroid Build Coastguard Worker DEFINE_CAST(vdrm_ccmd_req, msm_ccmd_set_debuginfo_req)
315*61046927SAndroid Build Coastguard Worker 
316*61046927SAndroid Build Coastguard Worker #endif /* MSM_PROTO_H_ */
317