1 /****************************************************************************
3 * Copyright (c) 2014 - 2016 Samsung Electronics Co., Ltd. All rights reserved
5 ****************************************************************************/
7 #ifndef __SLSI_KIC_PRIM_H
8 #define __SLSI_KIC_PRIM_H
11 #include <net/netlink.h>
13 #include <netlink/attr.h>
21 #define SLSI_KIC_INTERFACE_VERSION_MAJOR 1
22 #define SLSI_KIC_INTERFACE_VERSION_MINOR 0
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
,
39 slsi_kic_technology_type__after_last
,
40 slsi_kic_technology_type_max_category
= slsi_kic_technology_type__after_last
- 1
43 static const char *const slsi_kic_technology_type_text
[slsi_kic_technology_type_max_category
+ 1] = {
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
,
64 slsi_kic_system_category__after_last
,
65 slsi_kic_system_category_max_category
= slsi_kic_system_category__after_last
- 1
68 static const char *const slsi_kic_system_category_text
[slsi_kic_system_category_max_category
+ 1] = {
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
,
108 slsi_kic_system_events__after_last
,
109 slsi_kic_system_events_max_event
= slsi_kic_system_events__after_last
- 1
112 static const char *const slsi_kic_system_event_text
[slsi_kic_system_events_max_event
+ 1] = {
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",
124 "BT service driver attached",
125 "BT service driver detached",
126 "BT firmware patch downloaded",
127 "Curator firmware patch downloaded",
136 "Coredump in progress",
138 "Subsystem has crashed",
139 "Subsystem has been recovered",
140 "CCP Host ready Ind sent",
148 struct slsi_kic_timestamp
{
149 uint64_t tv_sec
; /* seconds */
150 uint64_t tv_nsec
; /* nanoseconds */
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
,
160 __SLSI_KIC_ATTR_TIMESTAMP_AFTER_LAST
,
161 SLSI_KIC_ATTR_TIMESTAMP_MAX
= __SLSI_KIC_ATTR_TIMESTAMP_AFTER_LAST
- 1
168 enum slsi_kic_firmware_event_type
{
169 slsi_kic_firmware_event_type_panic
,
170 slsi_kic_firmware_event_type_fault
,
173 slsi_kic_firmware_events__after_last
,
174 slsi_kic_firmware_events_max_event
= slsi_kic_firmware_events__after_last
- 1
177 static const char *const slsi_kic_firmware_event_type_text
[slsi_kic_firmware_events_max_event
+ 1] = {
182 enum slsi_kic_firmware_container_type
{
183 slsi_kic_firmware_container_type_ccp_host
,
188 * Firmware event: CCP host container
190 #define SLSI_KIC_FIRMWARE_EVENT_CCP_HOST_ARG_LENGTH 16
191 struct slsi_kic_firmware_event_ccp_host
{
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
,
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
,
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
,
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
241 struct slsi_kic_service_info
{
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
;
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
,
261 __SLSI_KIC_ATTR_SERVICE_INFO_AFTER_LAST
,
262 SLSI_KIC_ATTR_SERVICE_INFO_MAX
= __SLSI_KIC_ATTR_SERVICE_INFO_AFTER_LAST
- 1
268 * enum slsi_kic_commands - supported Samsung KIC commands
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
284 * @SLSI_KIC_CMD_MAX: highest used command number
285 * @__SLSI_KIC_CMD_AFTER_LAST: internal use
287 enum slsi_kic_commands
{
288 /* Do not change the order or add anything between, this is ABI! */
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
,
299 /* add new commands above here */
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
308 * enum slsi_kic_attrs - Samsung KIC netlink attributes
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
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.
333 * @SLSI_KIC_ATTR_MAX: highest attribute number currently defined
334 * @__SLSI_KIC_ATTR_AFTER_LAST: internal use
336 enum slsi_kic_attrs
{
337 /* Do not change the order or add anything between, this is ABI! */
338 SLSI_KIC_ATTR_UNSPEC
,
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
,
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
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
},
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
},
384 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_LEVEL_STRING
] = { .type
= NLA_STRING
, .len
= 128 },
386 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_LEVEL_STRING
] = { .type
= NLA_STRING
, .maxlen
= 128 },
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
},
392 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_ARG
] = { .type
= NLA_UNSPEC
,
393 .len
= SLSI_KIC_FIRMWARE_EVENT_CCP_HOST_ARG_LENGTH
},
395 [SLSI_KIC_ATTR_FIRMWARE_EVENT_CCP_HOST_ARG
] = { .type
= NLA_UNSPEC
,
396 .maxlen
= SLSI_KIC_FIRMWARE_EVENT_CCP_HOST_ARG_LENGTH
},
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] = {
404 [SLSI_KIC_ATTR_SERVICE_INFO_VER_STR
] = { .type
= NLA_STRING
, .len
= 128 },
406 [SLSI_KIC_ATTR_SERVICE_INFO_VER_STR
] = { .type
= NLA_STRING
, .maxlen
= 128 },
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
},
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
},
426 #endif /* #ifndef __SLSI_KIC_PRIM_H */