.. | .. |
---|
81 | 81 | } |
---|
82 | 82 | |
---|
83 | 83 | /** |
---|
84 | | - * Debug routine to dump the packet structure to the console |
---|
85 | | - * |
---|
86 | | - * @work: Work queue entry containing the packet to dump |
---|
87 | | - * Returns |
---|
88 | | - */ |
---|
89 | | -int cvmx_helper_dump_packet(cvmx_wqe_t *work) |
---|
90 | | -{ |
---|
91 | | - uint64_t count; |
---|
92 | | - uint64_t remaining_bytes; |
---|
93 | | - union cvmx_buf_ptr buffer_ptr; |
---|
94 | | - uint64_t start_of_buffer; |
---|
95 | | - uint8_t *data_address; |
---|
96 | | - uint8_t *end_of_data; |
---|
97 | | - |
---|
98 | | - cvmx_dprintf("Packet Length: %u\n", work->word1.len); |
---|
99 | | - cvmx_dprintf(" Input Port: %u\n", cvmx_wqe_get_port(work)); |
---|
100 | | - cvmx_dprintf(" QoS: %u\n", cvmx_wqe_get_qos(work)); |
---|
101 | | - cvmx_dprintf(" Buffers: %u\n", work->word2.s.bufs); |
---|
102 | | - |
---|
103 | | - if (work->word2.s.bufs == 0) { |
---|
104 | | - union cvmx_ipd_wqe_fpa_queue wqe_pool; |
---|
105 | | - wqe_pool.u64 = cvmx_read_csr(CVMX_IPD_WQE_FPA_QUEUE); |
---|
106 | | - buffer_ptr.u64 = 0; |
---|
107 | | - buffer_ptr.s.pool = wqe_pool.s.wqe_pool; |
---|
108 | | - buffer_ptr.s.size = 128; |
---|
109 | | - buffer_ptr.s.addr = cvmx_ptr_to_phys(work->packet_data); |
---|
110 | | - if (likely(!work->word2.s.not_IP)) { |
---|
111 | | - union cvmx_pip_ip_offset pip_ip_offset; |
---|
112 | | - pip_ip_offset.u64 = cvmx_read_csr(CVMX_PIP_IP_OFFSET); |
---|
113 | | - buffer_ptr.s.addr += |
---|
114 | | - (pip_ip_offset.s.offset << 3) - |
---|
115 | | - work->word2.s.ip_offset; |
---|
116 | | - buffer_ptr.s.addr += (work->word2.s.is_v6 ^ 1) << 2; |
---|
117 | | - } else { |
---|
118 | | - /* |
---|
119 | | - * WARNING: This code assumes that the packet |
---|
120 | | - * is not RAW. If it was, we would use |
---|
121 | | - * PIP_GBL_CFG[RAW_SHF] instead of |
---|
122 | | - * PIP_GBL_CFG[NIP_SHF]. |
---|
123 | | - */ |
---|
124 | | - union cvmx_pip_gbl_cfg pip_gbl_cfg; |
---|
125 | | - pip_gbl_cfg.u64 = cvmx_read_csr(CVMX_PIP_GBL_CFG); |
---|
126 | | - buffer_ptr.s.addr += pip_gbl_cfg.s.nip_shf; |
---|
127 | | - } |
---|
128 | | - } else |
---|
129 | | - buffer_ptr = work->packet_ptr; |
---|
130 | | - remaining_bytes = work->word1.len; |
---|
131 | | - |
---|
132 | | - while (remaining_bytes) { |
---|
133 | | - start_of_buffer = |
---|
134 | | - ((buffer_ptr.s.addr >> 7) - buffer_ptr.s.back) << 7; |
---|
135 | | - cvmx_dprintf(" Buffer Start:%llx\n", |
---|
136 | | - (unsigned long long)start_of_buffer); |
---|
137 | | - cvmx_dprintf(" Buffer I : %u\n", buffer_ptr.s.i); |
---|
138 | | - cvmx_dprintf(" Buffer Back: %u\n", buffer_ptr.s.back); |
---|
139 | | - cvmx_dprintf(" Buffer Pool: %u\n", buffer_ptr.s.pool); |
---|
140 | | - cvmx_dprintf(" Buffer Data: %llx\n", |
---|
141 | | - (unsigned long long)buffer_ptr.s.addr); |
---|
142 | | - cvmx_dprintf(" Buffer Size: %u\n", buffer_ptr.s.size); |
---|
143 | | - |
---|
144 | | - cvmx_dprintf("\t\t"); |
---|
145 | | - data_address = (uint8_t *) cvmx_phys_to_ptr(buffer_ptr.s.addr); |
---|
146 | | - end_of_data = data_address + buffer_ptr.s.size; |
---|
147 | | - count = 0; |
---|
148 | | - while (data_address < end_of_data) { |
---|
149 | | - if (remaining_bytes == 0) |
---|
150 | | - break; |
---|
151 | | - else |
---|
152 | | - remaining_bytes--; |
---|
153 | | - cvmx_dprintf("%02x", (unsigned int)*data_address); |
---|
154 | | - data_address++; |
---|
155 | | - if (remaining_bytes && (count == 7)) { |
---|
156 | | - cvmx_dprintf("\n\t\t"); |
---|
157 | | - count = 0; |
---|
158 | | - } else |
---|
159 | | - count++; |
---|
160 | | - } |
---|
161 | | - cvmx_dprintf("\n"); |
---|
162 | | - |
---|
163 | | - if (remaining_bytes) |
---|
164 | | - buffer_ptr = *(union cvmx_buf_ptr *) |
---|
165 | | - cvmx_phys_to_ptr(buffer_ptr.s.addr - 8); |
---|
166 | | - } |
---|
167 | | - return 0; |
---|
168 | | -} |
---|
169 | | - |
---|
170 | | -/** |
---|
171 | 84 | * Setup Random Early Drop on a specific input queue |
---|
172 | 85 | * |
---|
173 | 86 | * @queue: Input queue to setup RED on (0-7) |
---|
.. | .. |
---|
179 | 92 | * than this many free packet buffers in FPA 0. |
---|
180 | 93 | * Returns Zero on success. Negative on failure |
---|
181 | 94 | */ |
---|
182 | | -int cvmx_helper_setup_red_queue(int queue, int pass_thresh, int drop_thresh) |
---|
| 95 | +static int cvmx_helper_setup_red_queue(int queue, int pass_thresh, |
---|
| 96 | + int drop_thresh) |
---|
183 | 97 | { |
---|
184 | 98 | union cvmx_ipd_qosx_red_marks red_marks; |
---|
185 | 99 | union cvmx_ipd_red_quex_param red_param; |
---|