cosq.h (6434B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 */ 7 8 #ifndef _BCM_INT_COSQ_H 9 #define _BCM_INT_COSQ_H 10 11 #include <bcm/cosq.h> 12 13 extern int bcm_esw_cosq_deinit(int unit); 14 extern int _bcm_esw_cosq_config_property_get(int unit); 15 extern int _bcm_esw_cpu_cosq_mapping_default_set(int unit, int numq); 16 extern int _bcm_esw_cosq_num_get(int unit, int *num_cos); 17 18 /* Constant definitions for Katana */ 19 20 #define BCM_KA_SCHEDULER_CNT 9 21 #define BCM_KA_MCAST_QUEUE_GROUP_CNT 4 22 #define BCM_KA_TOTAL_UCAST_QUEUE_GROUP_CNT 12 23 #define BCM_KA_REG_UCAST_QUEUE_GROUP_CNT 8 24 #define BCM_KA_EXT_UCAST_QUEUE_GROUP_MIN 8 25 26 typedef enum _bcm_cosq_op_e { 27 _BCM_COSQ_OP_SET = 1, 28 _BCM_COSQ_OP_ADD, 29 _BCM_COSQ_OP_DELETE, 30 _BCM_COSQ_OP_CLEAR, 31 _BCM_COSQ_OP_GET, 32 _BCM_COSQ_OP_COUNT 33 } _bcm_cosq_op_t; 34 35 #ifdef BCM_WARM_BOOT_SUPPORT 36 #define BCMI_COSQ_WB_TAS_VERSION_1_0 SOC_SCACHE_VERSION(1, 0) 37 #define BCMI_COSQ_WB_SCACHE_PARTITION_TAS (1) 38 extern int _bcm_esw_cosq_sync(int unit); 39 #endif /* BCM_WARM_BOOT_SUPPORT */ 40 41 #ifndef BCM_SW_STATE_DUMP_DISABLE 42 extern void _bcm_cosq_sw_dump(int unit); 43 #endif /* BCM_SW_STATE_DUMP_DISABLE */ 44 45 #ifdef BCM_TRIDENT_SUPPORT 46 extern int _bcm_td_wred_mem_war(int unit); 47 #endif 48 49 /* The classifier_id used by bcm_cosq_classifier_* APIs 50 * contains two fields, a 6-bit type field, followed by 51 * a 26-bit value field. 52 */ 53 #define _BCM_COSQ_CLASSIFIER_TYPE_NONE 0 54 #define _BCM_COSQ_CLASSIFIER_TYPE_ENDPOINT (1 << 0) 55 #define _BCM_COSQ_CLASSIFIER_TYPE_SERVICE (1 << 1) 56 #define _BCM_COSQ_CLASSIFIER_TYPE_FIELD (1 << 2) 57 #define _BCM_COSQ_CLASSIFIER_TYPE_MAX _BCM_COSQ_CLASSIFIER_TYPE_FIELD 58 59 #define _BCM_COSQ_CLASSIFIER_TYPE_SHIFT 26 60 #define _BCM_COSQ_CLASSIFIER_TYPE_MASK 0x3f 61 #define _BCM_COSQ_CLASSIFIER_ENDPOINT_SHIFT 0 62 #define _BCM_COSQ_CLASSIFIER_ENDPOINT_MASK 0x3ffffff 63 #define _BCM_COSQ_CLASSIFIER_SERVICE_SHIFT 0 64 #define _BCM_COSQ_CLASSIFIER_SERVICE_MASK 0x3ffffff 65 #define _BCM_COSQ_CLASSIFIER_FIELD_SHIFT (0) 66 #define _BCM_COSQ_CLASSIFIER_FIELD_MASK (0x3ffffff) 67 68 #define _BCM_COSQ_CLASSIFIER_IS_SET(_classifier) \ 69 ((((_classifier) >> _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) > 0) && \ 70 (((_classifier) >> _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) <= \ 71 _BCM_COSQ_CLASSIFIER_TYPE_MAX)) 72 73 #define _BCM_COSQ_CLASSIFIER_IS_ENDPOINT(_classifier) \ 74 (((_classifier) >> _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) == \ 75 _BCM_COSQ_CLASSIFIER_TYPE_ENDPOINT) 76 77 #define _BCM_COSQ_CLASSIFIER_ENDPOINT_SET(_classifier, _endpoint) \ 78 ((_classifier) = (_BCM_COSQ_CLASSIFIER_TYPE_ENDPOINT << \ 79 _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) | \ 80 (((_endpoint) & _BCM_COSQ_CLASSIFIER_ENDPOINT_MASK) << \ 81 _BCM_COSQ_CLASSIFIER_ENDPOINT_SHIFT)) 82 83 #define _BCM_COSQ_CLASSIFIER_ENDPOINT_GET(_classifier) \ 84 (((_classifier) >> _BCM_COSQ_CLASSIFIER_ENDPOINT_SHIFT) & \ 85 _BCM_COSQ_CLASSIFIER_ENDPOINT_MASK) 86 87 #define _BCM_COSQ_CLASSIFIER_IS_SERVICE(_classifier) \ 88 (((_classifier) >> _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) == \ 89 _BCM_COSQ_CLASSIFIER_TYPE_SERVICE) 90 91 #define _BCM_COSQ_CLASSIFIER_SERVICE_SET(_classifier, _id) \ 92 ((_classifier) = (_BCM_COSQ_CLASSIFIER_TYPE_SERVICE << \ 93 _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) | \ 94 (((_id) & _BCM_COSQ_CLASSIFIER_SERVICE_MASK) << \ 95 _BCM_COSQ_CLASSIFIER_SERVICE_SHIFT)) 96 97 #define _BCM_COSQ_CLASSIFIER_SERVICE_GET(_classifier) \ 98 (((_classifier) >> _BCM_COSQ_CLASSIFIER_SERVICE_SHIFT) \ 99 & _BCM_COSQ_CLASSIFIER_SERVICE_MASK) 100 101 #define _BCM_COSQ_CLASSIFIER_IS_FIELD(_classifier) \ 102 (((_classifier) >> _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) == \ 103 _BCM_COSQ_CLASSIFIER_TYPE_FIELD) 104 105 #define _BCM_COSQ_CLASSIFIER_FIELD_SET(_classifier, _id) \ 106 ((_classifier) = (_BCM_COSQ_CLASSIFIER_TYPE_FIELD \ 107 << _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) | \ 108 (((_id) & _BCM_COSQ_CLASSIFIER_FIELD_MASK) \ 109 << _BCM_COSQ_CLASSIFIER_FIELD_SHIFT)) 110 111 #define _BCM_COSQ_CLASSIFIER_FIELD_GET(_classifier) \ 112 (((_classifier) >> _BCM_COSQ_CLASSIFIER_FIELD_SHIFT) \ 113 & _BCM_COSQ_CLASSIFIER_FIELD_MASK) 114 115 /* Worst case time = 256k * 768 * 8 @ 1Gbps = 1.6 sec */ 116 #define _BCM_COSQ_QUEUE_FLUSH_TIMEOUT_DEFAULT 1600000 117 118 /* Worst case time = 256k * 2880 *8 @ 1Gbps = 5.9 sec */ 119 #define _BCM_COSQ_QUEUE_FLUSH_TIMEOUT_PACKING_DEFAULT 5900000 120 121 extern int bcmi_esw_cosq_handle_interrupt(int unit, bcm_cosq_event_type_t event, 122 bcm_port_t port, bcm_cos_queue_t cosq); 123 124 #define QCM_MAX_GPORT_MONITOR 0x40 125 #define QCM_UC_MSG_TIMEOUT 5000000 /* 5 sec for FW response */ 126 #define QCM_UC_STATUS_TIMEOUT 100 /* 100 usec for FW response */ 127 typedef struct qcm_gport_port_queue_map_s { 128 /* gport value */ 129 bcm_gport_t gport; 130 131 /* calculate global queue based on physical port and local queue */ 132 uint32 global_num; 133 134 /* Extract port number and local queue number of the port */ 135 uint16 pipe_num; 136 uint16 port_num; 137 uint16 queue_num; 138 139 struct qcm_gport_port_queue_map_s *next; 140 141 } qcm_gport_port_queue_map_t; 142 143 typedef struct qcm_sram_memory_info_s { 144 uint32 host_status; 145 uint32 host_buf_start_addr; 146 uint32 host_buf_size; 147 uint32 total_num_gports; 148 uint32 port_pipe_queue[(QCM_MAX_GPORT_MONITOR * 2)]; 149 uint32 uc_status; 150 uint32 app_status[2]; 151 uint32 drop_table_index[4]; 152 uint32 egr_table_index; 153 uint32 queues_per_pipe; 154 uint32 queues_per_port; 155 uint32 ports_per_pipe; 156 uint32 num_pipes; 157 uint32 num_xpe_per_pipe; 158 uint32 endianess; 159 } qcm_sram_memory_info_t; 160 161 #define SRAM_BASEADDR(unit) (SOC_IS_TRIDENT3X(unit) ? 0x01200000 : 0x1b000000) 162 #define sram_offset(mem) ((size_t)((char *)&((qcm_sram_memory_info_t *)0)->mem - (char *)(qcm_sram_memory_info_t *)0)) 163 164 #endif /* !_BCM_INT_COSQ_H */