Lines Matching refs:work

63 static inline int cvm_oct_check_rcv_error(struct cvmx_wqe *work)  in cvm_oct_check_rcv_error()  argument
68 port = work->word0.pip.cn68xx.pknd; in cvm_oct_check_rcv_error()
70 port = work->word1.cn38xx.ipprt; in cvm_oct_check_rcv_error()
72 if ((work->word2.snoip.err_code == 10) && (work->word1.len <= 64)) in cvm_oct_check_rcv_error()
81 if (work->word2.snoip.err_code == 5 || in cvm_oct_check_rcv_error()
82 work->word2.snoip.err_code == 7) { in cvm_oct_check_rcv_error()
99 cvmx_phys_to_ptr(work->packet_ptr.s.addr); in cvm_oct_check_rcv_error()
102 while (i < work->word1.len - 1) { in cvm_oct_check_rcv_error()
111 work->packet_ptr.s.addr += i + 1; in cvm_oct_check_rcv_error()
112 work->word1.len -= i + 5; in cvm_oct_check_rcv_error()
118 work->packet_ptr.s.addr += i; in cvm_oct_check_rcv_error()
119 work->word1.len -= i + 4; in cvm_oct_check_rcv_error()
120 for (i = 0; i < work->word1.len; i++) { in cvm_oct_check_rcv_error()
131 cvm_oct_free_work(work); in cvm_oct_check_rcv_error()
137 port, work->word2.snoip.err_code); in cvm_oct_check_rcv_error()
138 cvm_oct_free_work(work); in cvm_oct_check_rcv_error()
142 static void copy_segments_to_skb(struct cvmx_wqe *work, struct sk_buff *skb) in copy_segments_to_skb() argument
144 int segments = work->word2.s.bufs; in copy_segments_to_skb()
145 union cvmx_buf_ptr segment_ptr = work->packet_ptr; in copy_segments_to_skb()
146 int len = work->word1.len; in copy_segments_to_skb()
222 struct cvmx_wqe *work; in cvm_oct_poll() local
226 work = cvmx_pow_work_response_async(CVMX_SCR_SCRATCH); in cvm_oct_poll()
228 work = cvmx_pow_work_request_sync(CVMX_POW_NO_WAIT); in cvm_oct_poll()
230 prefetch(work); in cvm_oct_poll()
232 if (!work) { in cvm_oct_poll()
249 (cvm_oct_get_buffer_ptr(work->packet_ptr) - in cvm_oct_poll()
260 skb_in_hw = work->word2.s.bufs == 1; in cvm_oct_poll()
268 port = work->word0.pip.cn68xx.pknd; in cvm_oct_poll()
270 port = work->word1.cn38xx.ipprt; in cvm_oct_poll()
275 if (unlikely(work->word2.snoip.rcv_error)) { in cvm_oct_poll()
276 if (cvm_oct_check_rcv_error(work)) in cvm_oct_poll()
286 skb->data = skb->head + work->packet_ptr.s.addr - in cvm_oct_poll()
289 skb->len = work->word1.len; in cvm_oct_poll()
297 skb = dev_alloc_skb(work->word1.len); in cvm_oct_poll()
299 cvm_oct_free_work(work); in cvm_oct_poll()
307 if (unlikely(work->word2.s.bufs == 0)) { in cvm_oct_poll()
308 u8 *ptr = work->packet_data; in cvm_oct_poll()
310 if (likely(!work->word2.s.not_IP)) { in cvm_oct_poll()
315 if (work->word2.s.is_v6) in cvm_oct_poll()
320 skb_put_data(skb, ptr, work->word1.len); in cvm_oct_poll()
323 copy_segments_to_skb(work, skb); in cvm_oct_poll()
339 if (unlikely(work->word2.s.not_IP || in cvm_oct_poll()
340 work->word2.s.IP_exc || in cvm_oct_poll()
341 work->word2.s.L4_error || in cvm_oct_poll()
342 !work->word2.s.tcp_or_udp)) in cvm_oct_poll()
383 cvmx_fpa_free(work, CVMX_FPA_WQE_POOL, 1); in cvm_oct_poll()
385 cvm_oct_free_work(work); in cvm_oct_poll()