[9610] wlbt: SCSC Driver version 10.9.1.0
[GitHub/MotorolaMobilityLLC/kernel-slsi.git] / drivers / net / wireless / scsc / scsc_wifi_cm_if.h
1 /****************************************************************************
2 *
3 * Copyright (c) 2012 - 2016 Samsung Electronics Co., Ltd. All rights reserved
4 *
5 ****************************************************************************/
6
7 #ifndef __SCSC_WIFI_CM_IF_H__
8 #define __SCSC_WIFI_CM_IF_H__
9
10 #include <linux/types.h>
11 #include <linux/device.h>
12 #include <linux/kref.h>
13
14 #include <scsc/scsc_mx.h>
15
16 #define SLSI_WIFI_CM_IF_SYSTEM_ERROR_PANIC 8
17
18 struct slsi_dev;
19
20 /**
21 * CM interface States:
22 * STOPPED : (default) state,
23 * PROBING :
24 * PROBED :
25 * STARTING :
26 * STARTED :
27 * STOPPING :
28 * REMOVING :
29 * REMOVED :
30 * BLOCKED :
31 */
32 enum scsc_wifi_cm_if_state {
33 SCSC_WIFI_CM_IF_STATE_STOPPED,
34 SCSC_WIFI_CM_IF_STATE_PROBING,
35 SCSC_WIFI_CM_IF_STATE_PROBED,
36 SCSC_WIFI_CM_IF_STATE_STARTING,
37 SCSC_WIFI_CM_IF_STATE_STARTED,
38 SCSC_WIFI_CM_IF_STATE_STOPPING,
39 SCSC_WIFI_CM_IF_STATE_REMOVING,
40 SCSC_WIFI_CM_IF_STATE_REMOVED,
41 SCSC_WIFI_CM_IF_STATE_BLOCKED
42 };
43
44 /**
45 * Notification Events
46 * SCSC_WIFI_STOP : Wifi service should freeze
47 * SCSC_WIFI_FAILURE_RESET : Failure has been handled
48 * SCSC_WIFI_SUSPEND: Host going in to suspend mode
49 * SCSC_WIFI_RESUME: Host resuming
50 */
51 enum scsc_wifi_cm_if_notifier {
52 SCSC_WIFI_STOP,
53 SCSC_WIFI_FAILURE_RESET,
54 SCSC_WIFI_SUSPEND,
55 SCSC_WIFI_RESUME,
56 SCSC_WIFI_SUBSYSTEM_RESET,
57 SCSC_WIFI_CHIP_READY,
58 SCSC_MAX_NOTIFIER
59 };
60
61 struct scsc_wifi_cm_if {
62 struct slsi_dev *sdev;
63 /* a std mutex */
64 struct mutex cm_if_mutex;
65
66 struct kref kref;
67
68 /* refer to enum scsc_wifi_cm_if_state */
69 atomic_t cm_if_state;
70
71 int recovery_state;
72
73 #ifdef CONFIG_SCSC_WLAN_SILENT_RECOVERY
74 atomic_t reset_level;
75 #endif
76 };
77
78 /*********************************** API ************************************/
79
80 /**
81 * Driver's interface to cm_if
82 */
83 struct slsi_dev *slsi_dev_attach(struct device *dev, struct scsc_mx *core, struct scsc_service_client *mx_wlan_client);
84 void slsi_dev_detach(struct slsi_dev *sdev);
85
86 /**
87 * cm_if's interface to driver
88 */
89 int slsi_sm_service_driver_register(void);
90 void slsi_sm_service_driver_unregister(void);
91 void slsi_sm_service_failed(struct slsi_dev *sdev, const char *reason);
92 int slsi_sm_wlan_service_open(struct slsi_dev *sdev);
93 int slsi_sm_wlan_service_start(struct slsi_dev *sdev);
94 void slsi_sm_wlan_service_stop(struct slsi_dev *sdev);
95 void slsi_sm_wlan_service_close(struct slsi_dev *sdev);
96 int slsi_wlan_service_notifier_register(struct notifier_block *nb);
97 int slsi_wlan_service_notifier_unregister(struct notifier_block *nb);
98 int slsi_sm_recovery_service_stop(struct slsi_dev *sdev);
99 int slsi_sm_recovery_service_close(struct slsi_dev *sdev);
100 int slsi_sm_recovery_service_open(struct slsi_dev *sdev);
101 int slsi_sm_recovery_service_start(struct slsi_dev *sdev);
102
103 #endif