Sfoglia il codice sorgente

qcacmn: Restructure and add new files in wmi layer

Add new directory structure and new files for
tlv and non-tlv implementation.
wmi layer shall not use global context of other layer,
remove global context and unused methods.

CRs-Fixed: 978547
Change-Id: I230f59052d9db8e1660cc087b09e03641227f490
Govind Singh 9 anni fa
commit
d475ea965e
2 ha cambiato i file con 280 aggiunte e 0 eliminazioni
  1. 180 0
      wmi_unified_api.h
  2. 100 0
      wmi_unified_priv.h

+ 180 - 0
wmi_unified_api.h

@@ -0,0 +1,180 @@
+/*
+ * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
+ *
+ * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
+ *
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * This file was originally distributed by Qualcomm Atheros, Inc.
+ * under proprietary terms before Copyright ownership was assigned
+ * to the Linux Foundation.
+ */
+
+/*
+ * This file contains the API definitions for the Unified Wireless Module Interface (WMI).
+ */
+
+#ifndef _WMI_UNIFIED_API_H_
+#define _WMI_UNIFIED_API_H_
+
+#include <osdep.h>
+#include "a_types.h"
+#include "ol_defines.h"
+#include "wmi.h"
+#include "htc_api.h"
+
+typedef cdf_nbuf_t wmi_buf_t;
+#define wmi_buf_data(_buf) cdf_nbuf_data(_buf)
+
+/**
+ * attach for unified WMI
+ *
+ *  @param scn_handle      : handle to SCN.
+ *  @return opaque handle.
+ */
+void *wmi_unified_attach(void *scn_handle,
+			 int (*func)(struct wmi_unified *, wmi_buf_t));
+/**
+ * detach for unified WMI
+ *
+ *  @param wmi_handle      : handle to WMI.
+ *  @return void.
+ */
+void wmi_unified_detach(struct wmi_unified *wmi_handle);
+
+void
+wmi_unified_remove_work(struct wmi_unified *wmi_handle);
+
+/**
+ * generic function to allocate WMI buffer
+ *
+ *  @param wmi_handle      : handle to WMI.
+ *  @param len             : length of the buffer
+ *  @return wmi_buf_t.
+ */
+#ifdef MEMORY_DEBUG
+#define wmi_buf_alloc(h, l) wmi_buf_alloc_debug(h, l, __FILE__, __LINE__)
+wmi_buf_t
+wmi_buf_alloc_debug(wmi_unified_t wmi_handle, uint16_t len,
+		    uint8_t *file_name, uint32_t line_num);
+#else
+wmi_buf_t wmi_buf_alloc(wmi_unified_t wmi_handle, uint16_t len);
+#endif
+
+/**
+ * generic function frees WMI net buffer
+ *
+ *  @param net_buf : Pointer ot net_buf to be freed
+ */
+void wmi_buf_free(wmi_buf_t net_buf);
+
+/**
+ * generic function to send unified WMI command
+ *
+ *  @param wmi_handle      : handle to WMI.
+ *  @param buf             : wmi command buffer
+ *  @param buflen          : wmi command buffer length
+ *  @return 0  on success and -ve on failure.
+ */
+int
+wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, int buflen,
+		     WMI_CMD_ID cmd_id);
+
+/**
+ * WMI event handler register function
+ *
+ *  @param wmi_handle      : handle to WMI.
+ *  @param event_id        : WMI event ID
+ *  @param handler_func    : Event handler call back function
+ *  @return 0  on success and -ve on failure.
+ */
+int
+wmi_unified_register_event_handler(wmi_unified_t wmi_handle,
+				   WMI_EVT_ID event_id,
+				   wmi_unified_event_handler handler_func);
+
+/**
+ * WMI event handler unregister function
+ *
+ *  @param wmi_handle      : handle to WMI.
+ *  @param event_id        : WMI event ID
+ *  @return 0  on success and -ve on failure.
+ */
+int
+wmi_unified_unregister_event_handler(wmi_unified_t wmi_handle,
+				     WMI_EVT_ID event_id);
+
+/**
+ * request wmi to connet its htc service.
+ *  @param wmi_handle      : handle to WMI.
+ *  @return void
+ */
+int
+wmi_unified_connect_htc_service(struct wmi_unified *wmi_handle,
+				void *htc_handle);
+
+/*
+ * WMI API to verify the host has enough credits to suspend
+ */
+
+int wmi_is_suspend_ready(wmi_unified_t wmi_handle);
+
+/**
+   WMI API to get updated host_credits
+ */
+
+int wmi_get_host_credits(wmi_unified_t wmi_handle);
+
+/**
+   WMI API to get WMI Pending Commands in the HTC queue
+ */
+
+int wmi_get_pending_cmds(wmi_unified_t wmi_handle);
+
+/**
+   WMI API to set target suspend state
+ */
+
+void wmi_set_target_suspend(wmi_unified_t wmi_handle, bool val);
+
+#ifdef FEATURE_RUNTIME_PM
+void
+wmi_set_runtime_pm_inprogress(wmi_unified_t wmi_handle, bool val);
+bool wmi_get_runtime_pm_inprogress(wmi_unified_t wmi_handle);
+#else
+static inline void
+wmi_set_runtime_pm_inprogress(wmi_unified_t wmi_handle, bool val)
+{
+	return;
+}
+static inline bool wmi_get_runtime_pm_inprogress(wmi_unified_t wmi_handle)
+{
+	return false;
+}
+#endif
+
+
+/**
+ * WMA Callback to process fw event.
+ */
+typedef int (*wma_process_fw_event_handler_cbk)(struct wmi_unified *wmi_handle,
+						wmi_buf_t evt_buf);
+
+void wmi_process_fw_event(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf);
+uint16_t wmi_get_max_msg_len(wmi_unified_t wmi_handle);
+#endif /* _WMI_UNIFIED_API_H_ */

+ 100 - 0
wmi_unified_priv.h

@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
+ *
+ * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
+ *
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * This file was originally distributed by Qualcomm Atheros, Inc.
+ * under proprietary terms before Copyright ownership was assigned
+ * to the Linux Foundation.
+ */
+
+/*
+ * This file contains the API definitions for the Unified Wireless Module Interface (WMI).
+ */
+#ifndef _WMI_UNIFIED_PRIV_H_
+#define _WMI_UNIFIED_PRIV_H_
+#include <osdep.h>
+#include "a_types.h"
+#include "wmi.h"
+#include "wmi_unified.h"
+#include "cdf_atomic.h"
+
+#define WMI_UNIFIED_MAX_EVENT 0x100
+#define WMI_MAX_CMDS  1024
+
+typedef cdf_nbuf_t wmi_buf_t;
+
+#ifdef WMI_INTERFACE_EVENT_LOGGING
+
+#define WMI_EVENT_DEBUG_MAX_ENTRY (1024)
+
+struct wmi_command_debug {
+	uint32_t command;
+	uint32_t data[4];       /*16 bytes of WMI cmd excluding TLV and WMI headers */
+	uint64_t time;
+};
+
+struct wmi_event_debug {
+	uint32_t event;
+	uint32_t data[4];       /*16 bytes of WMI event data excluding TLV header */
+	uint64_t time;
+};
+
+#endif /*WMI_INTERFACE_EVENT_LOGGING */
+
+#ifdef WLAN_OPEN_SOURCE
+struct fwdebug {
+	struct sk_buff_head fwlog_queue;
+	struct completion fwlog_completion;
+	A_BOOL fwlog_open;
+};
+#endif /* WLAN_OPEN_SOURCE */
+
+struct wmi_unified {
+	ol_scn_t scn_handle;    /* handle to device */
+	cdf_atomic_t pending_cmds;
+	HTC_ENDPOINT_ID wmi_endpoint_id;
+	uint16_t max_msg_len;
+	WMI_EVT_ID event_id[WMI_UNIFIED_MAX_EVENT];
+	wmi_unified_event_handler event_handler[WMI_UNIFIED_MAX_EVENT];
+	uint32_t max_event_idx;
+	void *htc_handle;
+	cdf_spinlock_t eventq_lock;
+	cdf_nbuf_queue_t event_queue;
+	struct work_struct rx_event_work;
+#ifdef WLAN_OPEN_SOURCE
+	struct fwdebug dbglog;
+	struct dentry *debugfs_phy;
+#endif /* WLAN_OPEN_SOURCE */
+
+#ifdef WMI_INTERFACE_EVENT_LOGGING
+	cdf_spinlock_t wmi_record_lock;
+#endif /*WMI_INTERFACE_EVENT_LOGGING */
+
+	cdf_atomic_t is_target_suspended;
+
+#ifdef FEATURE_RUNTIME_PM
+	cdf_atomic_t runtime_pm_inprogress;
+#endif
+
+	int (*wma_process_fw_event_handler_cbk)(struct wmi_unified *wmi_handle,
+						wmi_buf_t evt_buf);
+};
+#endif