openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

cosq.h (6603B)


      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-2020 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 /* Macros for increase/decrease share threshold limit */
     69 #define _BCM_COSQ_INCREASE_SHARE_LIMIT      (1 << 0)
     70 #define _BCM_COSQ_DECREASE_SHARE_LIMIT      (1 << 1)
     71 
     72 #define _BCM_COSQ_CLASSIFIER_IS_SET(_classifier)                     \
     73         ((((_classifier) >> _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) > 0) && \
     74          (((_classifier) >> _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) <=      \
     75           _BCM_COSQ_CLASSIFIER_TYPE_MAX))
     76 
     77 #define _BCM_COSQ_CLASSIFIER_IS_ENDPOINT(_classifier)          \
     78         (((_classifier) >> _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) == \
     79          _BCM_COSQ_CLASSIFIER_TYPE_ENDPOINT)
     80 
     81 #define _BCM_COSQ_CLASSIFIER_ENDPOINT_SET(_classifier, _endpoint)               \
     82         ((_classifier) = (_BCM_COSQ_CLASSIFIER_TYPE_ENDPOINT <<                 \
     83                           _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) |                    \
     84                          (((_endpoint) & _BCM_COSQ_CLASSIFIER_ENDPOINT_MASK) << \
     85                           _BCM_COSQ_CLASSIFIER_ENDPOINT_SHIFT))
     86 
     87 #define _BCM_COSQ_CLASSIFIER_ENDPOINT_GET(_classifier)            \
     88         (((_classifier) >> _BCM_COSQ_CLASSIFIER_ENDPOINT_SHIFT) & \
     89          _BCM_COSQ_CLASSIFIER_ENDPOINT_MASK)
     90 
     91 #define _BCM_COSQ_CLASSIFIER_IS_SERVICE(_classifier)          \
     92         (((_classifier) >> _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) == \
     93          _BCM_COSQ_CLASSIFIER_TYPE_SERVICE)
     94 
     95 #define _BCM_COSQ_CLASSIFIER_SERVICE_SET(_classifier, _id)               \
     96         ((_classifier) = (_BCM_COSQ_CLASSIFIER_TYPE_SERVICE <<                 \
     97                           _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) |                    \
     98                          (((_id) & _BCM_COSQ_CLASSIFIER_SERVICE_MASK) << \
     99                           _BCM_COSQ_CLASSIFIER_SERVICE_SHIFT))
    100 
    101 #define _BCM_COSQ_CLASSIFIER_SERVICE_GET(_classifier)            \
    102         (((_classifier) >> _BCM_COSQ_CLASSIFIER_SERVICE_SHIFT) \
    103             & _BCM_COSQ_CLASSIFIER_SERVICE_MASK)
    104 
    105 #define _BCM_COSQ_CLASSIFIER_IS_FIELD(_classifier)                  \
    106             (((_classifier) >> _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) == \
    107              _BCM_COSQ_CLASSIFIER_TYPE_FIELD)
    108 
    109 #define _BCM_COSQ_CLASSIFIER_FIELD_SET(_classifier, _id)                    \
    110             ((_classifier) = (_BCM_COSQ_CLASSIFIER_TYPE_FIELD               \
    111                                 << _BCM_COSQ_CLASSIFIER_TYPE_SHIFT) |       \
    112                                 (((_id) & _BCM_COSQ_CLASSIFIER_FIELD_MASK)  \
    113                                 << _BCM_COSQ_CLASSIFIER_FIELD_SHIFT))
    114 
    115 #define _BCM_COSQ_CLASSIFIER_FIELD_GET(_classifier)                 \
    116             (((_classifier) >> _BCM_COSQ_CLASSIFIER_FIELD_SHIFT)    \
    117                 & _BCM_COSQ_CLASSIFIER_FIELD_MASK)
    118 
    119 /* Worst case time = 256k * 768 * 8 @ 1Gbps = 1.6 sec */
    120 #define _BCM_COSQ_QUEUE_FLUSH_TIMEOUT_DEFAULT 1600000
    121 
    122 /* Worst case time = 256k * 2880 *8 @ 1Gbps = 5.9 sec */
    123 #define _BCM_COSQ_QUEUE_FLUSH_TIMEOUT_PACKING_DEFAULT 5900000
    124 
    125 extern int bcmi_esw_cosq_handle_interrupt(int unit, bcm_cosq_event_type_t event,
    126                                           bcm_port_t port, bcm_cos_queue_t cosq);
    127 
    128 #define QCM_MAX_GPORT_MONITOR    0x40
    129 #define QCM_UC_MSG_TIMEOUT       5000000 /* 5 sec for FW response */
    130 #define QCM_UC_STATUS_TIMEOUT    100     /* 100 usec for FW response */
    131 typedef struct qcm_gport_port_queue_map_s {
    132     /* gport value */
    133     bcm_gport_t gport;
    134 
    135     /* calculate global queue based on physical port and local queue */
    136     uint32 global_num;
    137 
    138     /* Extract port number and local queue number of the port */
    139     uint16 pipe_num;
    140     uint16 port_num;
    141     uint16 queue_num;
    142 
    143     struct qcm_gport_port_queue_map_s *next;
    144 
    145 } qcm_gport_port_queue_map_t;
    146 
    147 typedef struct qcm_sram_memory_info_s {
    148     uint32 host_status;
    149     uint32 host_buf_start_addr;
    150     uint32 host_buf_size;
    151     uint32 total_num_gports;
    152     uint32 port_pipe_queue[(QCM_MAX_GPORT_MONITOR * 2)];
    153     uint32 uc_status;
    154     uint32 app_status[2];
    155     uint32 drop_table_index[4];
    156     uint32 egr_table_index;
    157     uint32 queues_per_pipe;
    158     uint32 queues_per_port;
    159     uint32 ports_per_pipe;
    160     uint32 num_pipes;
    161     uint32 num_counters_per_pipe;
    162     uint32 endianess;
    163 } qcm_sram_memory_info_t;
    164 
    165 #define SRAM_BASEADDR(unit)      (SOC_IS_TRIDENT3X(unit) ? 0x01200000 :  0x1b000000)
    166 #define sram_offset(mem) ((size_t)((char *)&((qcm_sram_memory_info_t *)0)->mem - (char *)(qcm_sram_memory_info_t *)0))
    167 
    168 #endif  /* !_BCM_INT_COSQ_H */