1 /* 2 * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 #include "hal_hw_headers.h" 19 #include "hal_internal.h" 20 #include "cdp_txrx_mon_struct.h" 21 #include "qdf_trace.h" 22 #include "hal_rx.h" 23 #include "hal_tx.h" 24 #include "dp_types.h" 25 #include "hal_api_mon.h" 26 27 /** 28 * hal_tx_desc_set_dscp_tid_table_id_8074() - Sets DSCP to TID conversion 29 * table ID 30 * @desc: Handle to Tx Descriptor 31 * @id: DSCP to tid conversion table to be used for this frame 32 * 33 * Return: void 34 */ 35 36 static void hal_tx_desc_set_dscp_tid_table_id_8074(void *desc, uint8_t id) 37 { 38 HAL_SET_FLD(desc, TCL_DATA_CMD_3, 39 DSCP_TO_TID_PRIORITY_TABLE_ID) |= 40 HAL_TX_SM(TCL_DATA_CMD_3, 41 DSCP_TO_TID_PRIORITY_TABLE_ID, id); 42 } 43 44 /** 45 * hal_tx_set_dscp_tid_map_8074() - Configure default DSCP to TID map table 46 * @soc: HAL SoC context 47 * @map: DSCP-TID mapping table 48 * @id: mapping table ID - 0,1 49 * 50 * DSCP are mapped to 8 TID values using TID values programmed 51 * in two set of mapping registers DSCP_TID1_MAP_<0 to 6> (id = 0) 52 * and DSCP_TID2_MAP_<0 to 6> (id = 1) 53 * Each mapping register has TID mapping for 10 DSCP values 54 * 55 * Return: none 56 */ 57 static void hal_tx_set_dscp_tid_map_8074(struct hal_soc *soc, uint8_t *map, 58 uint8_t id) 59 { 60 int i; 61 uint32_t addr; 62 uint32_t value; 63 64 if (id == HAL_TX_DSCP_TID_MAP_TABLE_DEFAULT) { 65 addr = HWIO_TCL_R0_DSCP_TID1_MAP_0_ADDR( 66 SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET); 67 } else { 68 addr = HWIO_TCL_R0_DSCP_TID2_MAP_0_ADDR( 69 SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET); 70 } 71 72 for (i = 0; i < 64; i += 10) { 73 value = 74 (map[i] | 75 (map[i + 1] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_1_SHFT) | 76 (map[i + 2] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_2_SHFT) | 77 (map[i + 3] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_3_SHFT) | 78 (map[i + 4] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_4_SHFT) | 79 (map[i + 5] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_5_SHFT) | 80 (map[i + 6] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_6_SHFT) | 81 (map[i + 7] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_7_SHFT) | 82 (map[i + 8] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_8_SHFT) | 83 (map[i + 9] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_9_SHFT)); 84 85 HAL_REG_WRITE(soc, addr, 86 (value & HWIO_TCL_R0_DSCP_TID1_MAP_1_RMSK)); 87 88 addr += 4; 89 } 90 } 91 92 /** 93 * hal_tx_update_dscp_tid_8074() - Update the dscp tid map table as 94 updated by user 95 * @soc: HAL SoC context 96 * @map: DSCP-TID mapping table 97 * @id : MAP ID 98 * @dscp: DSCP_TID map index 99 * 100 * Return: void 101 */ 102 static 103 void hal_tx_update_dscp_tid_8074(struct hal_soc *soc, uint8_t tid, 104 uint8_t id, uint8_t dscp) 105 { 106 int index; 107 uint32_t addr; 108 uint32_t value; 109 uint32_t regval; 110 111 if (id == HAL_TX_DSCP_TID_MAP_TABLE_DEFAULT) 112 addr = HWIO_TCL_R0_DSCP_TID1_MAP_0_ADDR( 113 SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET); 114 else 115 addr = HWIO_TCL_R0_DSCP_TID2_MAP_0_ADDR( 116 SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET); 117 118 index = dscp % HAL_TX_NUM_DSCP_PER_REGISTER; 119 addr += 4 * (dscp / HAL_TX_NUM_DSCP_PER_REGISTER); 120 value = tid << (HAL_TX_BITS_PER_TID * index); 121 122 /* Read back previous DSCP TID config and update 123 * with new config. 124 */ 125 regval = HAL_REG_READ(soc, addr); 126 regval &= ~(HAL_TX_TID_BITS_MASK << (HAL_TX_BITS_PER_TID * index)); 127 regval |= value; 128 129 HAL_REG_WRITE(soc, addr, 130 (regval & HWIO_TCL_R0_DSCP_TID1_MAP_1_RMSK)); 131 } 132 133 /** 134 * hal_tx_desc_set_lmac_id - Set the lmac_id value 135 * @desc: Handle to Tx Descriptor 136 * @lmac_id: mac Id to ast matching 137 * b00 – mac 0 138 * b01 – mac 1 139 * b10 – mac 2 140 * b11 – all macs (legacy HK way) 141 * 142 * Return: void 143 */ 144 static void hal_tx_desc_set_lmac_id_8074(void *desc, uint8_t lmac_id) 145 { 146 } 147