[RAMEN9610-20413][9610] wlbt: SCSC Driver version 10.6.1.0
[GitHub/MotorolaMobilityLLC/kernel-slsi.git] / include / scsc / kic / slsi_kic_prim.h
1 /****************************************************************************
2 *
3 * Copyright (c) 2014 - 2016 Samsung Electronics Co., Ltd. All rights reserved
4 *
5 ****************************************************************************/
6
7 #ifndef __SLSI_KIC_PRIM_H
8 #define __SLSI_KIC_PRIM_H
9
10 #ifdef __KERNEL__
11 #include <net/netlink.h>
12 #else
13 #include <netlink/attr.h>
14 #endif
15
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19
20
21 #define SLSI_KIC_INTERFACE_VERSION_MAJOR 1
22 #define SLSI_KIC_INTERFACE_VERSION_MINOR 0
23
24 /**
25 * Common
26 */
27 enum slsi_kic_technology_type {
28 slsi_kic_technology_type_curator,
29 slsi_kic_technology_type_bt,
30 slsi_kic_technology_type_wifi,
31 slsi_kic_technology_type_audio,
32 slsi_kic_technology_type_gnss,
33 slsi_kic_technology_type_nfc,
34 slsi_kic_technology_type_janitor,
35 slsi_kic_technology_type_common,
36 slsi_kic_technology_type_ant,
37
38 /* keep last */
39 slsi_kic_technology_type__after_last,
40 slsi_kic_technology_type_max_category = slsi_kic_technology_type__after_last - 1
41 };
42
43 static const char *const slsi_kic_technology_type_text[slsi_kic_technology_type_max_category + 1] = {
44 "curator",
45 "bt",
46 "wifi",
47 "audio",
48 "gnss",
49 "nfc",
50 "janitor",
51 "ant"
52 };
53
54 /**
55 * System events
56 */
57 enum slsi_kic_system_event_category {
58 slsi_kic_system_event_category_initialisation,
59 slsi_kic_system_event_category_deinitialisation,
60 slsi_kic_system_event_category_error,
61 slsi_kic_system_event_category_recovery,
62
63 /* keep last */
64 slsi_kic_system_category__after_last,
65 slsi_kic_system_category_max_category = slsi_kic_system_category__after_last - 1
66 };
67
68 static const char *const slsi_kic_system_category_text[slsi_kic_system_category_max_category + 1] = {
69 "Initialisation",
70 "Deinitialisation",
71 "Error",
72 "Recovery"
73 };
74
75 enum slsi_kic_system_events {
76 slsi_kic_system_events_wifi_on,
77 slsi_kic_system_events_wifi_off,
78 slsi_kic_system_events_wifi_suspend,
79 slsi_kic_system_events_wifi_resume,
80 slsi_kic_system_events_wifi_service_driver_attached,
81 slsi_kic_system_events_wifi_service_driver_detached,
82 slsi_kic_system_events_wifi_firmware_patch_downloaded,
83 slsi_kic_system_events_wifi_service_driver_started,
84 slsi_kic_system_events_wifi_service_driver_stopped,
85 slsi_kic_system_events_bt_on,
86 slsi_kic_system_events_bt_off,
87 slsi_kic_system_events_bt_service_driver_attached,
88 slsi_kic_system_events_bt_service_driver_detached,
89 slsi_kic_system_events_bt_firmware_patch_downloaded,
90 slsi_kic_system_events_curator_firmware_patch_downloaded,
91 slsi_kic_system_events_sdio_powered,
92 slsi_kic_system_events_sdio_inserted,
93 slsi_kic_system_events_sdio_removed,
94 slsi_kic_system_events_sdio_powered_off,
95 slsi_kic_system_events_sdio_error,
96 slsi_kic_system_events_uart_powered,
97 slsi_kic_system_events_uart_powered_off,
98 slsi_kic_system_events_uart_error,
99 slsi_kic_system_events_coredump_in_progress,
100 slsi_kic_system_events_coredump_done,
101 slsi_kic_system_events_subsystem_crashed,
102 slsi_kic_system_events_subsystem_recovered,
103 slsi_kic_system_events_host_ready_ind,
104 slsi_kic_system_events_ant_on,
105 slsi_kic_system_events_ant_off,
106
107 /* keep last */
108 slsi_kic_system_events__after_last,
109 slsi_kic_system_events_max_event = slsi_kic_system_events__after_last - 1
110 };
111
112 static const char *const slsi_kic_system_event_text[slsi_kic_system_events_max_event + 1] = {
113 "Wi-Fi on",
114 "Wi-Fi off",
115 "Wi-Fi suspend",
116 "Wi-Fi resume",
117 "Wi-Fi service driver attached",
118 "Wi-Fi service driver detached",
119 "Wi-Fi firmware patch downloaded",
120 "Wi-Fi service driver started",
121 "Wi-Fi service driver stopped",
122 "BT on",
123 "BT off",
124 "BT service driver attached",
125 "BT service driver detached",
126 "BT firmware patch downloaded",
127 "Curator firmware patch downloaded",
128 "SDIO powered",
129 "SDIO inserted",
130 "SDIO removed",
131 "SDIO powered off",
132 "SDIO error",
133 "UART powered",
134 "UART powered off",
135 "UART error",
136 "Coredump in progress",
137 "Coredump done",
138 "Subsystem has crashed",
139 "Subsystem has been recovered",
140 "CCP Host ready Ind sent",
141 "ANT on",
142 "ANT off"
143 };
144
145 /**
146 * Time stamp
147 */
148 struct slsi_kic_timestamp {
149 uint64_t tv_sec; /* seconds */
150 uint64_t tv_nsec; /* nanoseconds */
151 };
152
153 /* Policy */
154 enum slsi_kic_attr_timestamp_attributes {
155 __SLSI_KIC_ATTR_TIMESTAMP_INVALID,
156 SLSI_KIC_ATTR_TIMESTAMP_TV_SEC,
157 SLSI_KIC_ATTR_TIMESTAMP_TV_NSEC,
158
159 /* keep last */
160 __SLSI_KIC_ATTR_TIMESTAMP_AFTER_LAST,
161 SLSI_KIC_ATTR_TIMESTAMP_MAX = __SLSI_KIC_ATTR_TIMESTAMP_AFTER_LAST - 1
162 };
163
164
165 /**
166 * Firmware event
167 */
168 enum slsi_kic_firmware_event_type {
169 slsi_kic_firmware_event_type_panic,
170 slsi_kic_firmware_event_type_fault,
171
172 /* keep last */
173 slsi_kic_firmware_events__after_last,
174 slsi_kic_firmware_events_max_event = slsi_kic_firmware_events__after_last - 1
175 };
176
177 static const char *const slsi_kic_firmware_event_type_text[slsi_kic_firmware_events_max_event + 1] = {
178 "Firmware panic",
179 "Firmware fault"
180 };
181
182 enum slsi_kic_firmware_container_type {
183 slsi_kic_firmware_container_type_ccp_host,
184 };
185
186
187 /*
188 * Firmware event: CCP host container
189 */
190 #define SLSI_KIC_FIRMWARE_EVENT_CCP_HOST_ARG_LENGTH 16
191 struct slsi_kic_firmware_event_ccp_host {
192 uint32_t id;
193 uint32_t level;
194 char *level_string;
195 uint32_t timestamp;
196 uint32_t cpu;
197 uint32_t occurences;
198 uint32_t arg_length;
199 uint8_t *arg;
200 };
201
202 /**
203 * Trigger recovery
204 */
205 enum slsi_kic_test_recovery_type {
206 slsi_kic_test_recovery_type_subsystem_panic,
207 slsi_kic_test_recovery_type_emulate_firmware_no_response,
208 slsi_kic_test_recovery_type_watch_dog,
209 slsi_kic_test_recovery_type_chip_crash,
210 slsi_kic_test_recovery_type_service_start_panic,
211 slsi_kic_test_recovery_type_service_stop_panic,
212 };
213
214 enum slsi_kic_test_recovery_status {
215 slsi_kic_test_recovery_status_ok,
216 slsi_kic_test_recovery_status_error_invald_param,
217 slsi_kic_test_recovery_status_error_send_msg,
218 };
219
220
221 /* Policy */
222 enum slsi_kic_attr_firmware_event_ccp_host_attributes {
223 __SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_INVALID,
224 SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_ID,
225 SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_LEVEL,
226 SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_LEVEL_STRING,
227 SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_TIMESTAMP,
228 SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_CPU,
229 SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_OCCURENCES,
230 SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_ARG,
231
232 /* keep last */
233 __SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_AFTER_LAST,
234 SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_MAX = __SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_AFTER_LAST - 1
235 };
236
237
238 /**
239 * System information
240 */
241 struct slsi_kic_service_info {
242 char ver_str[128];
243 uint16_t fw_api_major;
244 uint16_t fw_api_minor;
245 uint16_t release_product;
246 uint16_t host_release_iteration;
247 uint16_t host_release_candidate;
248 };
249
250 /* Policy */
251 enum slsi_kic_attr_service_info_attributes {
252 __SLSI_KIC_ATTR_SERVICE_INFO_INVALID,
253 SLSI_KIC_ATTR_SERVICE_INFO_VER_STR,
254 SLSI_KIC_ATTR_SERVICE_INFO_FW_API_MAJOR,
255 SLSI_KIC_ATTR_SERVICE_INFO_FW_API_MINOR,
256 SLSI_KIC_ATTR_SERVICE_INFO_RELEASE_PRODUCT,
257 SLSI_KIC_ATTR_SERVICE_INFO_HOST_RELEASE_ITERATION,
258 SLSI_KIC_ATTR_SERVICE_INFO_HOST_RELEASE_CANDIDATE,
259
260 /* keep last */
261 __SLSI_KIC_ATTR_SERVICE_INFO_AFTER_LAST,
262 SLSI_KIC_ATTR_SERVICE_INFO_MAX = __SLSI_KIC_ATTR_SERVICE_INFO_AFTER_LAST - 1
263 };
264
265
266
267 /**
268 * enum slsi_kic_commands - supported Samsung KIC commands
269 *
270 * @SLSI_KIC_CMD_UNSPEC: unspecified command to catch errors
271 * @SLSI_KIC_CMD_KIC_INTERFACE_VERSION_NUMBER_REQ: Requests the KIC interface
272 * version numbers to be send back.
273 * @SLSI_KIC_CMD_SYSTEM_EVENT_IND: Indicate a system event to user space.
274 * @SLSI_KIC_CMD_SERVICE_INFORMATION_REQ: Requests information for all
275 * already enabled subsystems.
276 * @SLSI_KIC_CMD_SERVICE_INFORMATION_IND: Indicate that a new subsystem has
277 * been started and the information for this subsystem.
278 * @SLSI_KIC_CMD_TEST_TRIGGER_RECOVERY_REQ: Triggers a recovery (crash) for a
279 * subsystem specified in the primitive.
280 * @SLSI_KIC_CMD_FIRMWARE_EVENT_IND: Indicates a firmware event to user space.
281 * @SLSI_KIC_CMD_ECHO_REQ: Request an echo (test primitive, which will be
282 * removed later).
283 *
284 * @SLSI_KIC_CMD_MAX: highest used command number
285 * @__SLSI_KIC_CMD_AFTER_LAST: internal use
286 */
287 enum slsi_kic_commands {
288 /* Do not change the order or add anything between, this is ABI! */
289 SLSI_KIC_CMD_UNSPEC,
290
291 SLSI_KIC_CMD_KIC_INTERFACE_VERSION_NUMBER_REQ,
292 SLSI_KIC_CMD_SYSTEM_EVENT_IND,
293 SLSI_KIC_CMD_SERVICE_INFORMATION_REQ,
294 SLSI_KIC_CMD_SERVICE_INFORMATION_IND,
295 SLSI_KIC_CMD_TEST_TRIGGER_RECOVERY_REQ,
296 SLSI_KIC_CMD_FIRMWARE_EVENT_IND,
297 SLSI_KIC_CMD_ECHO_REQ,
298
299 /* add new commands above here */
300
301 /* used to define SLSI_KIC_CMD_MAX below */
302 __SLSI_KIC_CMD_AFTER_LAST,
303 SLSI_KIC_CMD_MAX = __SLSI_KIC_CMD_AFTER_LAST - 1
304 };
305
306
307 /**
308 * enum slsi_kic_attrs - Samsung KIC netlink attributes
309 *
310 * @SLSI_KIC_ATTR_UNSPEC: unspecified attribute to catch errors
311 * @SLSI_KIC_ATTR_KIC_VERSION_MAJOR: KIC version number - increments when the
312 * interface is updated with backward incompatible changes.
313 * @SLSI_KIC_ATTR_KIC_VERSION_MINOR: KIC version number - increments when the
314 * interface is updated with backward compatible changes.
315 * @SLSI_KIC_ATTR_TECHNOLOGY_TYPE: Technology type
316 * @SLSI_KIC_ATTR_SYSTEM_EVENT_CATEGORY: System event category
317 * @SLSI_KIC_ATTR_SYSTEM_EVENT: System event
318 * @SLSI_KIC_ATTR_SERVICE_INFO: Pass service info to user space.
319 * @SLSI_KIC_ATTR_NUMBER_OF_ENCODED_SERVICES: The attribute is used to determine
320 * the number of encoded services in the payload
321 * @SLSI_KIC_ATTR_TEST_RECOVERY_TYPE: Specifies the recovery type.
322 * @SLSI_KIC_ATTR_TIMESTAMP: A timestamp - ideally nano second resolution and
323 * precision, but it's platform dependent.
324 * @SLSI_KIC_ATTR_FIRMWARE_EVENT_TYPE: A firmware even type - panic or fault
325 * @SLSI_KIC_ATTR_FIRMWARE_CONTAINER_TYPE: Indicates container type carried in
326 * payload.
327 * @SLSI_KIC_ATTR_FIRMWARE_EVENT_CONTAINER_CCP_HOST: The firmware event data.
328 * @SLSI_KIC_ATTR_TRIGGER_RECOVERY_STATUS: Indicates if the recovery has been
329 * successfully triggered. The recovery signalling will happen afterwards as
330 * normal system events.
331 * @SLSI_KIC_ATTR_ECHO: An echo test primitive, which will be removed later.
332 *
333 * @SLSI_KIC_ATTR_MAX: highest attribute number currently defined
334 * @__SLSI_KIC_ATTR_AFTER_LAST: internal use
335 */
336 enum slsi_kic_attrs {
337 /* Do not change the order or add anything between, this is ABI! */
338 SLSI_KIC_ATTR_UNSPEC,
339
340 SLSI_KIC_ATTR_KIC_VERSION_MAJOR,
341 SLSI_KIC_ATTR_KIC_VERSION_MINOR,
342 SLSI_KIC_ATTR_TECHNOLOGY_TYPE,
343 SLSI_KIC_ATTR_SYSTEM_EVENT_CATEGORY,
344 SLSI_KIC_ATTR_SYSTEM_EVENT,
345 SLSI_KIC_ATTR_SERVICE_INFO,
346 SLSI_KIC_ATTR_NUMBER_OF_ENCODED_SERVICES,
347 SLSI_KIC_ATTR_TEST_RECOVERY_TYPE,
348 SLSI_KIC_ATTR_TIMESTAMP,
349 SLSI_KIC_ATTR_FIRMWARE_EVENT_TYPE,
350 SLSI_KIC_ATTR_FIRMWARE_CONTAINER_TYPE,
351 SLSI_KIC_ATTR_FIRMWARE_EVENT_CONTAINER_CCP_HOST,
352 SLSI_KIC_ATTR_TRIGGER_RECOVERY_STATUS,
353 SLSI_KIC_ATTR_ECHO,
354
355 /* Add attributes here, update the policy below */
356 __SLSI_KIC_ATTR_AFTER_LAST,
357 SLSI_KIC_ATTR_MAX = __SLSI_KIC_ATTR_AFTER_LAST - 1
358 };
359
360
361 /* Policy for the attributes */
362 static const struct nla_policy slsi_kic_attr_policy[SLSI_KIC_ATTR_MAX + 1] = {
363 [SLSI_KIC_ATTR_KIC_VERSION_MAJOR] = { .type = NLA_U32 },
364 [SLSI_KIC_ATTR_KIC_VERSION_MINOR] = { .type = NLA_U32 },
365 [SLSI_KIC_ATTR_TECHNOLOGY_TYPE] = { .type = NLA_U32 },
366 [SLSI_KIC_ATTR_SYSTEM_EVENT_CATEGORY] = { .type = NLA_U32 },
367 [SLSI_KIC_ATTR_SYSTEM_EVENT] = { .type = NLA_U32 },
368 [SLSI_KIC_ATTR_SERVICE_INFO] = { .type = NLA_NESTED, },
369 [SLSI_KIC_ATTR_NUMBER_OF_ENCODED_SERVICES] = { .type = NLA_U32 },
370 [SLSI_KIC_ATTR_TEST_RECOVERY_TYPE] = { .type = NLA_U32 },
371 [SLSI_KIC_ATTR_TIMESTAMP] = { .type = NLA_NESTED },
372 [SLSI_KIC_ATTR_FIRMWARE_EVENT_TYPE] = { .type = NLA_U16 },
373 [SLSI_KIC_ATTR_FIRMWARE_CONTAINER_TYPE] = { .type = NLA_U32 },
374 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CONTAINER_CCP_HOST] = { .type = NLA_NESTED },
375 [SLSI_KIC_ATTR_TRIGGER_RECOVERY_STATUS] = { .type = NLA_U32 },
376 [SLSI_KIC_ATTR_ECHO] = { .type = NLA_U32 },
377 };
378
379 /* Policy for the slsi_kic_firmware_event_ccp_host attribute */
380 static const struct nla_policy slsi_kic_attr_firmware_event_ccp_host_policy[SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_MAX + 1] = {
381 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_ID] = { .type = NLA_U32 },
382 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_LEVEL] = { .type = NLA_U32 },
383 #ifdef __KERNEL__
384 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_LEVEL_STRING] = { .type = NLA_STRING, .len = 128 },
385 #else
386 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_LEVEL_STRING] = { .type = NLA_STRING, .maxlen = 128 },
387 #endif
388 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_TIMESTAMP] = { .type = NLA_U32 },
389 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_CPU] = { .type = NLA_U32 },
390 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_OCCURENCES] = { .type = NLA_U32 },
391 #ifdef __KERNEL__
392 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_ARG] = { .type = NLA_UNSPEC,
393 .len = SLSI_KIC_FIRMWARE_EVENT_CCP_HOST_ARG_LENGTH },
394 #else
395 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_ARG] = { .type = NLA_UNSPEC,
396 .maxlen = SLSI_KIC_FIRMWARE_EVENT_CCP_HOST_ARG_LENGTH },
397 #endif
398 };
399
400
401 /* Policy for the slsi_kic_service_info attribute */
402 static const struct nla_policy slsi_kic_attr_service_info_policy[SLSI_KIC_ATTR_SERVICE_INFO_MAX + 1] = {
403 #ifdef __KERNEL__
404 [SLSI_KIC_ATTR_SERVICE_INFO_VER_STR] = { .type = NLA_STRING, .len = 128 },
405 #else
406 [SLSI_KIC_ATTR_SERVICE_INFO_VER_STR] = { .type = NLA_STRING, .maxlen = 128 },
407 #endif
408 [SLSI_KIC_ATTR_SERVICE_INFO_FW_API_MAJOR] = { .type = NLA_U16 },
409 [SLSI_KIC_ATTR_SERVICE_INFO_FW_API_MINOR] = { .type = NLA_U16 },
410 [SLSI_KIC_ATTR_SERVICE_INFO_RELEASE_PRODUCT] = { .type = NLA_U16 },
411 [SLSI_KIC_ATTR_SERVICE_INFO_HOST_RELEASE_ITERATION] = { .type = NLA_U16 },
412 [SLSI_KIC_ATTR_SERVICE_INFO_HOST_RELEASE_CANDIDATE] = { .type = NLA_U16 },
413 };
414
415 /* Policy for the slsi_kic_timestamp attribute */
416 static const struct nla_policy slsi_kic_attr_timestamp_policy[SLSI_KIC_ATTR_TIMESTAMP_MAX + 1] = {
417 [SLSI_KIC_ATTR_TIMESTAMP_TV_SEC] = { .type = NLA_U64 },
418 [SLSI_KIC_ATTR_TIMESTAMP_TV_NSEC] = { .type = NLA_U64 },
419 };
420
421
422 #ifdef __cplusplus
423 } /* extern "C" */
424 #endif
425
426 #endif /* #ifndef __SLSI_KIC_PRIM_H */