Lines Matching refs:rxdes

50 	struct ftgmac100_rxdes rxdes[RX_QUEUE_ENTRIES];  member
80 struct ftgmac100_rxdes *rxdes, gfp_t gfp);
151 offsetof(struct ftgmac100_descs, rxdes)); in ftgmac100_init_hw()
201 static bool ftgmac100_rxdes_first_segment(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_first_segment() argument
203 return rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_FRS); in ftgmac100_rxdes_first_segment()
206 static bool ftgmac100_rxdes_last_segment(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_last_segment() argument
208 return rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_LRS); in ftgmac100_rxdes_last_segment()
211 static bool ftgmac100_rxdes_packet_ready(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_packet_ready() argument
213 return rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_RXPKT_RDY); in ftgmac100_rxdes_packet_ready()
216 static void ftgmac100_rxdes_set_dma_own(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_set_dma_own() argument
219 rxdes->rxdes0 &= cpu_to_le32(FTGMAC100_RXDES0_EDORR); in ftgmac100_rxdes_set_dma_own()
222 static bool ftgmac100_rxdes_rx_error(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_rx_error() argument
224 return rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_RX_ERR); in ftgmac100_rxdes_rx_error()
227 static bool ftgmac100_rxdes_crc_error(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_crc_error() argument
229 return rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_CRC_ERR); in ftgmac100_rxdes_crc_error()
232 static bool ftgmac100_rxdes_frame_too_long(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_frame_too_long() argument
234 return rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_FTL); in ftgmac100_rxdes_frame_too_long()
237 static bool ftgmac100_rxdes_runt(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_runt() argument
239 return rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_RUNT); in ftgmac100_rxdes_runt()
242 static bool ftgmac100_rxdes_odd_nibble(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_odd_nibble() argument
244 return rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_RX_ODD_NB); in ftgmac100_rxdes_odd_nibble()
247 static unsigned int ftgmac100_rxdes_data_length(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_data_length() argument
249 return le32_to_cpu(rxdes->rxdes0) & FTGMAC100_RXDES0_VDBC; in ftgmac100_rxdes_data_length()
252 static bool ftgmac100_rxdes_multicast(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_multicast() argument
254 return rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_MULTICAST); in ftgmac100_rxdes_multicast()
257 static void ftgmac100_rxdes_set_end_of_ring(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_set_end_of_ring() argument
259 rxdes->rxdes0 |= cpu_to_le32(FTGMAC100_RXDES0_EDORR); in ftgmac100_rxdes_set_end_of_ring()
262 static void ftgmac100_rxdes_set_dma_addr(struct ftgmac100_rxdes *rxdes, in ftgmac100_rxdes_set_dma_addr() argument
265 rxdes->rxdes3 = cpu_to_le32(addr); in ftgmac100_rxdes_set_dma_addr()
268 static dma_addr_t ftgmac100_rxdes_get_dma_addr(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_get_dma_addr() argument
270 return le32_to_cpu(rxdes->rxdes3); in ftgmac100_rxdes_get_dma_addr()
273 static bool ftgmac100_rxdes_is_tcp(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_is_tcp() argument
275 return (rxdes->rxdes1 & cpu_to_le32(FTGMAC100_RXDES1_PROT_MASK)) == in ftgmac100_rxdes_is_tcp()
279 static bool ftgmac100_rxdes_is_udp(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_is_udp() argument
281 return (rxdes->rxdes1 & cpu_to_le32(FTGMAC100_RXDES1_PROT_MASK)) == in ftgmac100_rxdes_is_udp()
285 static bool ftgmac100_rxdes_tcpcs_err(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_tcpcs_err() argument
287 return rxdes->rxdes1 & cpu_to_le32(FTGMAC100_RXDES1_TCP_CHKSUM_ERR); in ftgmac100_rxdes_tcpcs_err()
290 static bool ftgmac100_rxdes_udpcs_err(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_udpcs_err() argument
292 return rxdes->rxdes1 & cpu_to_le32(FTGMAC100_RXDES1_UDP_CHKSUM_ERR); in ftgmac100_rxdes_udpcs_err()
295 static bool ftgmac100_rxdes_ipcs_err(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_ipcs_err() argument
297 return rxdes->rxdes1 & cpu_to_le32(FTGMAC100_RXDES1_IP_CHKSUM_ERR); in ftgmac100_rxdes_ipcs_err()
304 static void ftgmac100_rxdes_set_page(struct ftgmac100_rxdes *rxdes, struct page *page) in ftgmac100_rxdes_set_page() argument
306 rxdes->rxdes2 = (unsigned int)page; in ftgmac100_rxdes_set_page()
309 static struct page *ftgmac100_rxdes_get_page(struct ftgmac100_rxdes *rxdes) in ftgmac100_rxdes_get_page() argument
311 return (struct page *)rxdes->rxdes2; in ftgmac100_rxdes_get_page()
329 return &priv->descs->rxdes[priv->rx_pointer]; in ftgmac100_current_rxdes()
335 struct ftgmac100_rxdes *rxdes = ftgmac100_current_rxdes(priv); in ftgmac100_rx_locate_first_segment() local
337 while (ftgmac100_rxdes_packet_ready(rxdes)) { in ftgmac100_rx_locate_first_segment()
338 if (ftgmac100_rxdes_first_segment(rxdes)) in ftgmac100_rx_locate_first_segment()
339 return rxdes; in ftgmac100_rx_locate_first_segment()
341 ftgmac100_rxdes_set_dma_own(rxdes); in ftgmac100_rx_locate_first_segment()
343 rxdes = ftgmac100_current_rxdes(priv); in ftgmac100_rx_locate_first_segment()
350 struct ftgmac100_rxdes *rxdes) in ftgmac100_rx_packet_error() argument
355 if (unlikely(ftgmac100_rxdes_rx_error(rxdes))) { in ftgmac100_rx_packet_error()
363 if (unlikely(ftgmac100_rxdes_crc_error(rxdes))) { in ftgmac100_rx_packet_error()
369 } else if (unlikely(ftgmac100_rxdes_ipcs_err(rxdes))) { in ftgmac100_rx_packet_error()
376 if (unlikely(ftgmac100_rxdes_frame_too_long(rxdes))) { in ftgmac100_rx_packet_error()
382 } else if (unlikely(ftgmac100_rxdes_runt(rxdes))) { in ftgmac100_rx_packet_error()
388 } else if (unlikely(ftgmac100_rxdes_odd_nibble(rxdes))) { in ftgmac100_rx_packet_error()
402 struct ftgmac100_rxdes *rxdes = ftgmac100_current_rxdes(priv); in ftgmac100_rx_drop_packet() local
406 netdev_dbg(netdev, "drop packet %p\n", rxdes); in ftgmac100_rx_drop_packet()
409 if (ftgmac100_rxdes_last_segment(rxdes)) in ftgmac100_rx_drop_packet()
412 ftgmac100_rxdes_set_dma_own(rxdes); in ftgmac100_rx_drop_packet()
414 rxdes = ftgmac100_current_rxdes(priv); in ftgmac100_rx_drop_packet()
415 } while (!done && ftgmac100_rxdes_packet_ready(rxdes)); in ftgmac100_rx_drop_packet()
423 struct ftgmac100_rxdes *rxdes; in ftgmac100_rx_packet() local
427 rxdes = ftgmac100_rx_locate_first_segment(priv); in ftgmac100_rx_packet()
428 if (!rxdes) in ftgmac100_rx_packet()
431 if (unlikely(ftgmac100_rx_packet_error(priv, rxdes))) { in ftgmac100_rx_packet()
446 if (unlikely(ftgmac100_rxdes_multicast(rxdes))) in ftgmac100_rx_packet()
454 if ((ftgmac100_rxdes_is_tcp(rxdes) && !ftgmac100_rxdes_tcpcs_err(rxdes)) || in ftgmac100_rx_packet()
455 (ftgmac100_rxdes_is_udp(rxdes) && !ftgmac100_rxdes_udpcs_err(rxdes))) in ftgmac100_rx_packet()
459 dma_addr_t map = ftgmac100_rxdes_get_dma_addr(rxdes); in ftgmac100_rx_packet()
460 struct page *page = ftgmac100_rxdes_get_page(rxdes); in ftgmac100_rx_packet()
465 size = ftgmac100_rxdes_data_length(rxdes); in ftgmac100_rx_packet()
472 if (ftgmac100_rxdes_last_segment(rxdes)) in ftgmac100_rx_packet()
475 ftgmac100_alloc_rx_page(priv, rxdes, GFP_ATOMIC); in ftgmac100_rx_packet()
478 rxdes = ftgmac100_current_rxdes(priv); in ftgmac100_rx_packet()
717 struct ftgmac100_rxdes *rxdes, gfp_t gfp) in ftgmac100_alloc_rx_page() argument
738 ftgmac100_rxdes_set_page(rxdes, page); in ftgmac100_alloc_rx_page()
739 ftgmac100_rxdes_set_dma_addr(rxdes, map); in ftgmac100_alloc_rx_page()
740 ftgmac100_rxdes_set_dma_own(rxdes); in ftgmac100_alloc_rx_page()
749 struct ftgmac100_rxdes *rxdes = &priv->descs->rxdes[i]; in ftgmac100_free_buffers() local
750 struct page *page = ftgmac100_rxdes_get_page(rxdes); in ftgmac100_free_buffers()
751 dma_addr_t map = ftgmac100_rxdes_get_dma_addr(rxdes); in ftgmac100_free_buffers()
787 ftgmac100_rxdes_set_end_of_ring(&priv->descs->rxdes[RX_QUEUE_ENTRIES - 1]); in ftgmac100_alloc_buffers()
790 struct ftgmac100_rxdes *rxdes = &priv->descs->rxdes[i]; in ftgmac100_alloc_buffers() local
792 if (ftgmac100_alloc_rx_page(priv, rxdes, GFP_KERNEL)) in ftgmac100_alloc_buffers()