new file mode 100644
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: MIT
+/* Copyright(c) 2019-2021, Celeno Communications Ltd. */
+
+#include "tx/sw_txhdr.h"
+
+int cl_sw_txhdr_init(struct cl_hw *cl_hw)
+{
+ char sw_txhdr_cache_name[MODULE_NAME_LEN + 32] = {0};
+
+ snprintf(sw_txhdr_cache_name, sizeof(sw_txhdr_cache_name),
+ "%s_sw_txhdr_cache", THIS_MODULE->name);
+
+ cl_hw->sw_txhdr_cache = kmem_cache_create(sw_txhdr_cache_name,
+ sizeof(struct cl_sw_txhdr),
+ 0,
+ (SLAB_HWCACHE_ALIGN | SLAB_PANIC),
+ NULL);
+
+ if (!cl_hw->sw_txhdr_cache) {
+ cl_dbg_verbose(cl_hw, "sw_txhdr_cache NULL\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+void cl_sw_txhdr_deinit(struct cl_hw *cl_hw)
+{
+ kmem_cache_destroy(cl_hw->sw_txhdr_cache);
+}
+
+struct cl_sw_txhdr *cl_sw_txhdr_alloc(struct cl_hw *cl_hw)
+{
+ return kmem_cache_alloc(cl_hw->sw_txhdr_cache, GFP_ATOMIC);
+}
+
+void cl_sw_txhdr_free(struct cl_hw *cl_hw, struct cl_sw_txhdr *sw_txhdr)
+{
+ kmem_cache_free(cl_hw->sw_txhdr_cache, sw_txhdr);
+}