new file mode 100644
@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: MIT */
+/* Copyright(c) 2019-2021, Celeno Communications Ltd. */
+
+#ifndef CL_MOTION_SENSE_H
+#define CL_MOTION_SENSE_H
+
+#include "hw.h"
+#include "rx/rx.h"
+#include <linux/types.h>
+
+#define MOTION_SENSE_SIZE 30
+
+enum cl_motion_state {
+ STATE_NULL,
+ STATE_MOVING,
+ STATE_STATIC
+};
+
+struct cl_motion_rssi {
+ s32 sum[MAX_ANTENNAS];
+ s32 cnt;
+ s8 history[MOTION_SENSE_SIZE];
+ u8 idx;
+ s8 max;
+ s8 min;
+ enum cl_motion_state state;
+};
+
+struct cl_motion_sense {
+ struct cl_motion_rssi rssi_mgmt_ctl;
+ struct cl_motion_rssi rssi_data;
+ struct cl_motion_rssi rssi_ba;
+ enum cl_motion_state combined_state;
+ enum cl_motion_state forced_state;
+};
+
+void cl_motion_sense_sta_add(struct cl_hw *cl_hw, struct cl_sta *cl_sta);
+void cl_motion_sense_rssi_mgmt_ctl(struct cl_hw *cl_hw, struct cl_sta *cl_sta,
+ struct hw_rxhdr *rxhdr);
+void cl_motion_sense_rssi_data(struct cl_hw *cl_hw, struct cl_sta *cl_sta,
+ struct hw_rxhdr *rxhdr);
+void cl_motion_sense_rssi_ba(struct cl_hw *cl_hw, struct cl_sta *cl_sta, s8 rssi[MAX_ANTENNAS]);
+void cl_motion_sense_maintenance(struct cl_hw *cl_hw);
+bool cl_motion_sense_is_static(struct cl_hw *cl_hw, struct cl_sta *cl_sta);
+int cl_motion_sense_cli(struct cl_hw *cl_hw, struct cli_params *cli_params);
+
+#endif /* CL_MOTION_SENSE_H */