Lines Matching refs:work

91  * @param work Work queue entry pointing to the packet.
94 static inline int cvm_oct_check_rcv_error(cvmx_wqe_t *work)
96 if ((work->word2.snoip.err_code == 10) && (work->word1.s.len <= 64)) {
101 if (USE_10MBPS_PREAMBLE_WORKAROUND && ((work->word2.snoip.err_code == 5) || (work->word2.snoip.err_code == 7))) {
108 int interface = cvmx_helper_get_interface_num(work->word1.cn38xx.ipprt);
109 int index = cvmx_helper_get_interface_index_num(work->word1.cn38xx.ipprt);
114 uint8_t *ptr = cvmx_phys_to_ptr(work->packet_ptr.s.addr);
117 while (i < work->word1.s.len-1) {
126 DEBUGPRINT("Port %d received 0xd5 preamble\n", work->word1.cn38xx.ipprt);
128 work->packet_ptr.s.addr += i+1;
129 work->word1.s.len -= i+5;
133 DEBUGPRINT("Port %d received 0x?d preamble\n", work->word1.cn38xx.ipprt);
135 work->packet_ptr.s.addr += i;
136 work->word1.s.len -= i+4;
137 for (i = 0; i < work->word1.s.len; i++) {
142 DEBUGPRINT("Port %d unknown preamble, packet dropped\n", work->word1.cn38xx.ipprt);
144 cvmx_helper_dump_packet(work);
146 cvm_oct_free_work(work);
151 DEBUGPRINT("Port %d receive error code %d, packet dropped\n", work->word1.cn38xx.ipprt, work->word2.snoip.err_code);
152 cvm_oct_free_work(work);
179 /* Only allow work for our group (and preserve priorities) */
187 cvmx_wqe_t *work;
190 work = cvmx_pow_work_request_sync(CVMX_POW_NO_WAIT);
192 work = NULL;
193 CVMX_PREFETCH(work, 0);
194 if (work == NULL)
197 mbuf_in_hw = work->word2.s.bufs == 1;
199 m = *(struct mbuf **)(cvm_oct_get_buffer_ptr(work->packet_ptr) - sizeof(void *));
203 CVMX_PREFETCH(cvm_oct_device[work->word1.cn38xx.ipprt], 0);
209 if ((work->word2.snoip.rcv_error)) {
210 if (cvm_oct_check_rcv_error(work))
219 m->m_pkthdr.len = m->m_len = work->word1.s.len;
227 m->m_data += (work->packet_ptr.s.back << 7) + (work->packet_ptr.s.addr & 0x7f);
234 DEBUGPRINT("Port %d failed to allocate mbuf, packet dropped\n", work->word1.cn38xx.ipprt);
235 cvm_oct_free_work(work);
240 stored in the work entry. This is untested */
241 if ((work->word2.s.bufs == 0)) {
242 uint8_t *ptr = work->packet_data;
244 if (cvmx_likely(!work->word2.s.not_IP)) {
247 if (work->word2.s.is_v6)
255 int segments = work->word2.s.bufs;
256 cvmx_buf_ptr_t segment_ptr = work->packet_ptr;
257 int len = work->word1.s.len;
287 if (((work->word1.cn38xx.ipprt < TOTAL_NUMBER_OF_PORTS) &&
288 cvm_oct_device[work->word1.cn38xx.ipprt])) {
289 struct ifnet *ifp = cvm_oct_device[work->word1.cn38xx.ipprt];
297 if ((work->word2.s.not_IP || work->word2.s.IP_exc || work->word2.s.L4_error))
321 DEBUGPRINT("Port %d not controlled by FreeBSD, packet dropped\n", work->word1.cn38xx.ipprt);
325 /* Check to see if the mbuf and work share
333 cvmx_fpa_free(work, CVMX_FPA_WQE_POOL,
336 cvm_oct_free_work(work);