/****************************************************************************** * * Copyright(c) 2019 Realtek Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * ******************************************************************************/ #include "hdr_conv.h" #if MAC_AX_FW_REG_OFLD u32 mac_hdr_conv(struct mac_ax_adapter *adapter, u8 en_hdr_conv) { u32 ret = 0; u8 *buf; #if MAC_AX_PHL_H2C struct rtw_h2c_pkt *h2cb; #else struct h2c_buf *h2cb; #endif struct mac_ax_en_hdr_conv *content; h2cb = h2cb_alloc(adapter, H2CB_CLASS_CMD); if (!h2cb) return MACNPTR; buf = h2cb_put(h2cb, sizeof(struct mac_ax_en_hdr_conv)); if (!buf) { ret = MACNOBUF; goto fail; } content = (struct mac_ax_en_hdr_conv *)buf; content->enable = en_hdr_conv; ret = h2c_pkt_set_hdr(adapter, h2cb, FWCMD_TYPE_H2C, FWCMD_H2C_CAT_MAC, FWCMD_H2C_CL_FW_OFLD, FWCMD_H2C_FUNC_EN_MAC_HDR_CONV, 0, 1); if (ret) goto fail; ret = h2c_pkt_build_txd(adapter, h2cb); if (ret) goto fail; #if MAC_AX_PHL_H2C ret = PLTFM_TX(h2cb); #else ret = PLTFM_TX(h2cb->data, h2cb->len); #endif fail: h2cb_free(adapter, h2cb); return ret; } #else u32 mac_hdr_conv(struct mac_ax_adapter *adapter, u8 en_hdr_conv) { u32 val; struct mac_ax_intf_ops *ops = adapter_to_intf_ops(adapter); if (en_hdr_conv) { val = MAC_REG_R32(R_AX_HDR_SHCUT_SETTING); val |= (B_AX_MAC_MPDU_PROC_EN | B_AX_SHCUT_LLC_WR_LOCK | B_AX_SHCUT_PARSE_DASA); MAC_REG_W32(R_AX_HDR_SHCUT_SETTING, val); } else { val = MAC_REG_R32(R_AX_HDR_SHCUT_SETTING); val &= (~(B_AX_MAC_MPDU_PROC_EN | B_AX_SHCUT_LLC_WR_LOCK | B_AX_SHCUT_PARSE_DASA)); MAC_REG_W32(R_AX_HDR_SHCUT_SETTING, val); } return MACSUCCESS; } #endif