Lines Matching refs:rxdes

58 	struct ftmac100_rxdes rxdes[RX_QUEUE_ENTRIES];  member
85 struct ftmac100_rxdes *rxdes, gfp_t gfp);
182 offsetof(struct ftmac100_descs, rxdes)); in ftmac100_start_hw()
203 static bool ftmac100_rxdes_first_segment(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_first_segment() argument
205 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_FRS); in ftmac100_rxdes_first_segment()
208 static bool ftmac100_rxdes_last_segment(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_last_segment() argument
210 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_LRS); in ftmac100_rxdes_last_segment()
213 static bool ftmac100_rxdes_owned_by_dma(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_owned_by_dma() argument
215 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RXDMA_OWN); in ftmac100_rxdes_owned_by_dma()
218 static void ftmac100_rxdes_set_dma_own(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_set_dma_own() argument
221 rxdes->rxdes0 = cpu_to_le32(FTMAC100_RXDES0_RXDMA_OWN); in ftmac100_rxdes_set_dma_own()
224 static bool ftmac100_rxdes_rx_error(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_rx_error() argument
226 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RX_ERR); in ftmac100_rxdes_rx_error()
229 static bool ftmac100_rxdes_crc_error(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_crc_error() argument
231 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_CRC_ERR); in ftmac100_rxdes_crc_error()
234 static bool ftmac100_rxdes_frame_too_long(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_frame_too_long() argument
236 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_FTL); in ftmac100_rxdes_frame_too_long()
239 static bool ftmac100_rxdes_runt(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_runt() argument
241 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RUNT); in ftmac100_rxdes_runt()
244 static bool ftmac100_rxdes_odd_nibble(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_odd_nibble() argument
246 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RX_ODD_NB); in ftmac100_rxdes_odd_nibble()
249 static unsigned int ftmac100_rxdes_frame_length(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_frame_length() argument
251 return le32_to_cpu(rxdes->rxdes0) & FTMAC100_RXDES0_RFL; in ftmac100_rxdes_frame_length()
254 static bool ftmac100_rxdes_multicast(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_multicast() argument
256 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_MULTICAST); in ftmac100_rxdes_multicast()
259 static void ftmac100_rxdes_set_buffer_size(struct ftmac100_rxdes *rxdes, in ftmac100_rxdes_set_buffer_size() argument
262 rxdes->rxdes1 &= cpu_to_le32(FTMAC100_RXDES1_EDORR); in ftmac100_rxdes_set_buffer_size()
263 rxdes->rxdes1 |= cpu_to_le32(FTMAC100_RXDES1_RXBUF_SIZE(size)); in ftmac100_rxdes_set_buffer_size()
266 static void ftmac100_rxdes_set_end_of_ring(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_set_end_of_ring() argument
268 rxdes->rxdes1 |= cpu_to_le32(FTMAC100_RXDES1_EDORR); in ftmac100_rxdes_set_end_of_ring()
271 static void ftmac100_rxdes_set_dma_addr(struct ftmac100_rxdes *rxdes, in ftmac100_rxdes_set_dma_addr() argument
274 rxdes->rxdes2 = cpu_to_le32(addr); in ftmac100_rxdes_set_dma_addr()
277 static dma_addr_t ftmac100_rxdes_get_dma_addr(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_get_dma_addr() argument
279 return le32_to_cpu(rxdes->rxdes2); in ftmac100_rxdes_get_dma_addr()
286 static void ftmac100_rxdes_set_page(struct ftmac100_rxdes *rxdes, struct page *page) in ftmac100_rxdes_set_page() argument
288 rxdes->rxdes3 = (unsigned int)page; in ftmac100_rxdes_set_page()
291 static struct page *ftmac100_rxdes_get_page(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_get_page() argument
293 return (struct page *)rxdes->rxdes3; in ftmac100_rxdes_get_page()
311 return &priv->descs->rxdes[priv->rx_pointer]; in ftmac100_current_rxdes()
317 struct ftmac100_rxdes *rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_locate_first_segment() local
319 while (!ftmac100_rxdes_owned_by_dma(rxdes)) { in ftmac100_rx_locate_first_segment()
320 if (ftmac100_rxdes_first_segment(rxdes)) in ftmac100_rx_locate_first_segment()
321 return rxdes; in ftmac100_rx_locate_first_segment()
323 ftmac100_rxdes_set_dma_own(rxdes); in ftmac100_rx_locate_first_segment()
325 rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_locate_first_segment()
332 struct ftmac100_rxdes *rxdes) in ftmac100_rx_packet_error() argument
337 if (unlikely(ftmac100_rxdes_rx_error(rxdes))) { in ftmac100_rx_packet_error()
345 if (unlikely(ftmac100_rxdes_crc_error(rxdes))) { in ftmac100_rx_packet_error()
353 if (unlikely(ftmac100_rxdes_frame_too_long(rxdes))) { in ftmac100_rx_packet_error()
359 } else if (unlikely(ftmac100_rxdes_runt(rxdes))) { in ftmac100_rx_packet_error()
365 } else if (unlikely(ftmac100_rxdes_odd_nibble(rxdes))) { in ftmac100_rx_packet_error()
379 struct ftmac100_rxdes *rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_drop_packet() local
383 netdev_dbg(netdev, "drop packet %p\n", rxdes); in ftmac100_rx_drop_packet()
386 if (ftmac100_rxdes_last_segment(rxdes)) in ftmac100_rx_drop_packet()
389 ftmac100_rxdes_set_dma_own(rxdes); in ftmac100_rx_drop_packet()
391 rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_drop_packet()
392 } while (!done && !ftmac100_rxdes_owned_by_dma(rxdes)); in ftmac100_rx_drop_packet()
400 struct ftmac100_rxdes *rxdes; in ftmac100_rx_packet() local
406 rxdes = ftmac100_rx_locate_first_segment(priv); in ftmac100_rx_packet()
407 if (!rxdes) in ftmac100_rx_packet()
410 if (unlikely(ftmac100_rx_packet_error(priv, rxdes))) { in ftmac100_rx_packet()
419 if (unlikely(!ftmac100_rxdes_last_segment(rxdes))) in ftmac100_rx_packet()
432 if (unlikely(ftmac100_rxdes_multicast(rxdes))) in ftmac100_rx_packet()
435 map = ftmac100_rxdes_get_dma_addr(rxdes); in ftmac100_rx_packet()
438 length = ftmac100_rxdes_frame_length(rxdes); in ftmac100_rx_packet()
439 page = ftmac100_rxdes_get_page(rxdes); in ftmac100_rx_packet()
452 ftmac100_alloc_rx_page(priv, rxdes, GFP_ATOMIC); in ftmac100_rx_packet()
671 struct ftmac100_rxdes *rxdes, gfp_t gfp) in ftmac100_alloc_rx_page() argument
692 ftmac100_rxdes_set_page(rxdes, page); in ftmac100_alloc_rx_page()
693 ftmac100_rxdes_set_dma_addr(rxdes, map); in ftmac100_alloc_rx_page()
694 ftmac100_rxdes_set_buffer_size(rxdes, RX_BUF_SIZE); in ftmac100_alloc_rx_page()
695 ftmac100_rxdes_set_dma_own(rxdes); in ftmac100_alloc_rx_page()
704 struct ftmac100_rxdes *rxdes = &priv->descs->rxdes[i]; in ftmac100_free_buffers() local
705 struct page *page = ftmac100_rxdes_get_page(rxdes); in ftmac100_free_buffers()
706 dma_addr_t map = ftmac100_rxdes_get_dma_addr(rxdes); in ftmac100_free_buffers()
743 ftmac100_rxdes_set_end_of_ring(&priv->descs->rxdes[RX_QUEUE_ENTRIES - 1]); in ftmac100_alloc_buffers()
746 struct ftmac100_rxdes *rxdes = &priv->descs->rxdes[i]; in ftmac100_alloc_buffers() local
748 if (ftmac100_alloc_rx_page(priv, rxdes, GFP_KERNEL)) in ftmac100_alloc_buffers()