
Currently, WBUFF logic is being used only for WMI TX buffers and the logic is closely tied to the WMI TX buffers alone. It is cumbersome to extend the support of WBUFF for additional modules in the current state. Cleanup the WBUFF code and make it generic to add future module additions. Change-Id: Ib20ddd487b4e88c3225da1883ad9ade722c2a606 CRs-Fixed: 3520811
154 satır
4.1 KiB
C
154 satır
4.1 KiB
C
/*
|
|
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
/**
|
|
* DOC: wbuff.h
|
|
* wbuff buffer management APIs
|
|
*/
|
|
|
|
#ifndef _WBUFF_H
|
|
#define _WBUFF_H
|
|
|
|
#include <qdf_status.h>
|
|
#include <qdf_nbuf.h>
|
|
|
|
enum wbuff_module_id {
|
|
WBUFF_MODULE_WMI_TX,
|
|
WBUFF_MAX_MODULES,
|
|
};
|
|
|
|
/**
|
|
* struct wbuff_alloc_request - allocation structure for registering each
|
|
* pool for wbuff module.
|
|
* @pool_id: pool identifier
|
|
* @pool_size: number of buffers for @pool_id
|
|
* @buffer_size: size of each buffer in this @pool_id
|
|
*/
|
|
struct wbuff_alloc_request {
|
|
uint8_t pool_id;
|
|
uint16_t pool_size;
|
|
uint16_t buffer_size;
|
|
};
|
|
|
|
/* Opaque handle for wbuff */
|
|
struct wbuff_mod_handle;
|
|
|
|
#ifdef WLAN_FEATURE_WBUFF
|
|
/**
|
|
* wbuff_module_init() - Initializes the wbuff module
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS - init success
|
|
* QDF_STATUS_E_NOSUPPORT - init failure
|
|
*/
|
|
QDF_STATUS wbuff_module_init(void);
|
|
|
|
/**
|
|
* wbuff_module_deinit() - De-initializes the wbuff module
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS - de-init success
|
|
* QDF_STATUS_E_INVAL - de-init failure (wbuff not initialized)
|
|
*/
|
|
QDF_STATUS wbuff_module_deinit(void);
|
|
|
|
/**
|
|
* wbuff_module_register() - Registers a module with wbuff
|
|
* @req: allocation request from registered module
|
|
* @num_pools: number of pools required
|
|
* @reserve: nbuf headroom to start with
|
|
* @align: alignment for the nbuf
|
|
* @module_id: module identifier
|
|
*
|
|
* Return: Handle if registration success
|
|
* NULL if registration failure
|
|
*/
|
|
struct wbuff_mod_handle *
|
|
wbuff_module_register(struct wbuff_alloc_request *req, uint8_t num_pools,
|
|
int reserve, int align, enum wbuff_module_id module_id);
|
|
|
|
/**
|
|
* wbuff_module_deregister() - De-registers a module with wbuff
|
|
* @hdl: wbuff_handle corresponding to the module
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS - deregistration success
|
|
* QDF_STATUS_E_INVAL - deregistration failure
|
|
*/
|
|
QDF_STATUS wbuff_module_deregister(struct wbuff_mod_handle *hdl);
|
|
|
|
/**
|
|
* wbuff_buff_get() - return buffer to the requester
|
|
* @hdl: wbuff_handle corresponding to the module
|
|
* @len: length of buffer requested
|
|
* @func_name: function from which buffer is requested
|
|
* @line_num: line number in the file
|
|
*
|
|
* Return: Network buffer if success
|
|
* NULL if failure
|
|
*/
|
|
qdf_nbuf_t wbuff_buff_get(struct wbuff_mod_handle *hdl, uint32_t len,
|
|
const char *func_name, uint32_t line_num);
|
|
|
|
/**
|
|
* wbuff_buff_put() - put the buffer back to wbuff pool
|
|
* @buf: pointer to network buffer
|
|
*
|
|
* Return: NULL if success (buffer consumed)
|
|
* @buf if failure (buffer not consumed)
|
|
*/
|
|
qdf_nbuf_t wbuff_buff_put(qdf_nbuf_t buf);
|
|
|
|
#else
|
|
|
|
static inline QDF_STATUS wbuff_module_init(void)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS wbuff_module_deinit(void)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline struct wbuff_mod_handle *
|
|
wbuff_module_register(struct wbuff_alloc_request *req, uint8_t num_pools,
|
|
int reserve, int align, enum wbuff_module_id module_id)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline QDF_STATUS wbuff_module_deregister(struct wbuff_mod_handle *hdl)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline qdf_nbuf_t
|
|
wbuff_buff_get(struct wbuff_mod_handle *hdl, uint32_t len, const char *func_name,
|
|
uint32_t line_num)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline qdf_nbuf_t
|
|
wbuff_buff_put(qdf_nbuf_t buf)
|
|
{
|
|
return buf;
|
|
}
|
|
|
|
#endif
|
|
#endif /* _WBUFF_H */
|