1 /* 2 * Copyright (c) 2016-2018 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(void *hal_soc, uint8_t *map, 58 uint8_t id) 59 { 60 int i; 61 uint32_t addr; 62 uint32_t value; 63 64 struct hal_soc *soc = (struct hal_soc *)hal_soc; 65 66 if (id == HAL_TX_DSCP_TID_MAP_TABLE_DEFAULT) { 67 addr = HWIO_TCL_R0_DSCP_TID1_MAP_0_ADDR( 68 SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET); 69 } else { 70 addr = HWIO_TCL_R0_DSCP_TID2_MAP_0_ADDR( 71 SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET); 72 } 73 74 for (i = 0; i < 64; i += 10) { 75 value = 76 (map[i] | 77 (map[i + 1] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_1_SHFT) | 78 (map[i + 2] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_2_SHFT) | 79 (map[i + 3] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_3_SHFT) | 80 (map[i + 4] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_4_SHFT) | 81 (map[i + 5] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_5_SHFT) | 82 (map[i + 6] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_6_SHFT) | 83 (map[i + 7] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_7_SHFT) | 84 (map[i + 8] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_8_SHFT) | 85 (map[i + 9] << HWIO_TCL_R0_DSCP_TID1_MAP_0_DSCP_9_SHFT)); 86 87 HAL_REG_WRITE(soc, addr, 88 (value & HWIO_TCL_R0_DSCP_TID1_MAP_1_RMSK)); 89 90 addr += 4; 91 } 92 } 93 94 /** 95 * hal_tx_update_dscp_tid_8074() - Update the dscp tid map table as 96 updated by user 97 * @soc: HAL SoC context 98 * @map: DSCP-TID mapping table 99 * @id : MAP ID 100 * @dscp: DSCP_TID map index 101 * 102 * Return: void 103 */ 104 static 105 void hal_tx_update_dscp_tid_8074(void *hal_soc, uint8_t tid, 106 uint8_t id, uint8_t dscp) 107 { 108 int index; 109 uint32_t addr; 110 uint32_t value; 111 uint32_t regval; 112 113 struct hal_soc *soc = (struct hal_soc *)hal_soc; 114 115 if (id == HAL_TX_DSCP_TID_MAP_TABLE_DEFAULT) 116 addr = HWIO_TCL_R0_DSCP_TID1_MAP_0_ADDR( 117 SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET); 118 else 119 addr = HWIO_TCL_R0_DSCP_TID2_MAP_0_ADDR( 120 SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET); 121 122 index = dscp % HAL_TX_NUM_DSCP_PER_REGISTER; 123 addr += 4 * (dscp / HAL_TX_NUM_DSCP_PER_REGISTER); 124 value = tid << (HAL_TX_BITS_PER_TID * index); 125 126 /* Read back previous DSCP TID config and update 127 * with new config. 128 */ 129 regval = HAL_REG_READ(soc, addr); 130 regval &= ~(HAL_TX_TID_BITS_MASK << (HAL_TX_BITS_PER_TID * index)); 131 regval |= value; 132 133 HAL_REG_WRITE(soc, addr, 134 (regval & HWIO_TCL_R0_DSCP_TID1_MAP_1_RMSK)); 135 } 136 137 /** 138 * hal_tx_desc_set_lmac_id - Set the lmac_id value 139 * @desc: Handle to Tx Descriptor 140 * @lmac_id: mac Id to ast matching 141 * b00 – mac 0 142 * b01 – mac 1 143 * b10 – mac 2 144 * b11 – all macs (legacy HK way) 145 * 146 * Return: void 147 */ 148 static void hal_tx_desc_set_lmac_id_8074(void *desc, uint8_t lmac_id) 149 { 150 } 151