Lines Matching refs:work

90  * @param work Work queue entry pointing to the packet.
93 static inline int cvm_oct_check_rcv_error(cvmx_wqe_t *work)
95 if ((work->word2.snoip.err_code == 10) && (work->len <= 64)) {
100 if (USE_10MBPS_PREAMBLE_WORKAROUND && ((work->word2.snoip.err_code == 5) || (work->word2.snoip.err_code == 7))) {
107 int interface = cvmx_helper_get_interface_num(work->ipprt);
108 int index = cvmx_helper_get_interface_index_num(work->ipprt);
113 uint8_t *ptr = cvmx_phys_to_ptr(work->packet_ptr.s.addr);
116 while (i < work->len-1) {
125 DEBUGPRINT("Port %d received 0xd5 preamble\n", work->ipprt);
127 work->packet_ptr.s.addr += i+1;
128 work->len -= i+5;
132 DEBUGPRINT("Port %d received 0x?d preamble\n", work->ipprt);
134 work->packet_ptr.s.addr += i;
135 work->len -= i+4;
136 for (i = 0; i < work->len; i++) {
141 DEBUGPRINT("Port %d unknown preamble, packet dropped\n", work->ipprt);
143 cvmx_helper_dump_packet(work);
145 cvm_oct_free_work(work);
150 DEBUGPRINT("Port %d receive error code %d, packet dropped\n", work->ipprt, work->word2.snoip.err_code);
151 cvm_oct_free_work(work);
178 /* Only allow work for our group (and preserve priorities) */
186 cvmx_wqe_t *work;
189 work = cvmx_pow_work_request_sync(CVMX_POW_NO_WAIT);
191 work = NULL;
192 CVMX_PREFETCH(work, 0);
193 if (work == NULL)
196 mbuf_in_hw = work->word2.s.bufs == 1;
198 m = *(struct mbuf **)(cvm_oct_get_buffer_ptr(work->packet_ptr) - sizeof(void *));
202 CVMX_PREFETCH(cvm_oct_device[work->ipprt], 0);
208 if ((work->word2.snoip.rcv_error)) {
209 if (cvm_oct_check_rcv_error(work))
218 m->m_pkthdr.len = m->m_len = work->len;
226 m->m_data += (work->packet_ptr.s.back << 7) + (work->packet_ptr.s.addr & 0x7f);
233 DEBUGPRINT("Port %d failed to allocate mbuf, packet dropped\n", work->ipprt);
234 cvm_oct_free_work(work);
239 stored in the work entry. This is untested */
240 if ((work->word2.s.bufs == 0)) {
241 uint8_t *ptr = work->packet_data;
243 if (cvmx_likely(!work->word2.s.not_IP)) {
246 if (work->word2.s.is_v6)
254 int segments = work->word2.s.bufs;
255 cvmx_buf_ptr_t segment_ptr = work->packet_ptr;
256 int len = work->len;
286 if (((work->ipprt < TOTAL_NUMBER_OF_PORTS) &&
287 cvm_oct_device[work->ipprt])) {
288 struct ifnet *ifp = cvm_oct_device[work->ipprt];
296 if ((work->word2.s.not_IP || work->word2.s.IP_exc || work->word2.s.L4_error))
320 DEBUGPRINT("Port %d not controlled by Linux, packet dropped\n", work->ipprt);
324 /* Check to see if the mbuf and work share
332 cvmx_fpa_free(work, CVMX_FPA_WQE_POOL,
335 cvm_oct_free_work(work);