Lines Matching refs:rxdes
45 struct ftmac100_rxdes rxdes[RX_QUEUE_ENTRIES]; member
72 struct ftmac100_rxdes *rxdes, gfp_t gfp);
169 offsetof(struct ftmac100_descs, rxdes)); in ftmac100_start_hw()
190 static bool ftmac100_rxdes_first_segment(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_first_segment() argument
192 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_FRS); in ftmac100_rxdes_first_segment()
195 static bool ftmac100_rxdes_last_segment(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_last_segment() argument
197 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_LRS); in ftmac100_rxdes_last_segment()
200 static bool ftmac100_rxdes_owned_by_dma(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_owned_by_dma() argument
202 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RXDMA_OWN); in ftmac100_rxdes_owned_by_dma()
205 static void ftmac100_rxdes_set_dma_own(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_set_dma_own() argument
208 rxdes->rxdes0 = cpu_to_le32(FTMAC100_RXDES0_RXDMA_OWN); in ftmac100_rxdes_set_dma_own()
211 static bool ftmac100_rxdes_rx_error(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_rx_error() argument
213 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RX_ERR); in ftmac100_rxdes_rx_error()
216 static bool ftmac100_rxdes_crc_error(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_crc_error() argument
218 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_CRC_ERR); in ftmac100_rxdes_crc_error()
221 static bool ftmac100_rxdes_frame_too_long(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_frame_too_long() argument
223 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_FTL); in ftmac100_rxdes_frame_too_long()
226 static bool ftmac100_rxdes_runt(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_runt() argument
228 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RUNT); in ftmac100_rxdes_runt()
231 static bool ftmac100_rxdes_odd_nibble(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_odd_nibble() argument
233 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RX_ODD_NB); in ftmac100_rxdes_odd_nibble()
236 static unsigned int ftmac100_rxdes_frame_length(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_frame_length() argument
238 return le32_to_cpu(rxdes->rxdes0) & FTMAC100_RXDES0_RFL; in ftmac100_rxdes_frame_length()
241 static bool ftmac100_rxdes_multicast(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_multicast() argument
243 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_MULTICAST); in ftmac100_rxdes_multicast()
246 static void ftmac100_rxdes_set_buffer_size(struct ftmac100_rxdes *rxdes, in ftmac100_rxdes_set_buffer_size() argument
249 rxdes->rxdes1 &= cpu_to_le32(FTMAC100_RXDES1_EDORR); in ftmac100_rxdes_set_buffer_size()
250 rxdes->rxdes1 |= cpu_to_le32(FTMAC100_RXDES1_RXBUF_SIZE(size)); in ftmac100_rxdes_set_buffer_size()
253 static void ftmac100_rxdes_set_end_of_ring(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_set_end_of_ring() argument
255 rxdes->rxdes1 |= cpu_to_le32(FTMAC100_RXDES1_EDORR); in ftmac100_rxdes_set_end_of_ring()
258 static void ftmac100_rxdes_set_dma_addr(struct ftmac100_rxdes *rxdes, in ftmac100_rxdes_set_dma_addr() argument
261 rxdes->rxdes2 = cpu_to_le32(addr); in ftmac100_rxdes_set_dma_addr()
264 static dma_addr_t ftmac100_rxdes_get_dma_addr(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_get_dma_addr() argument
266 return le32_to_cpu(rxdes->rxdes2); in ftmac100_rxdes_get_dma_addr()
273 static void ftmac100_rxdes_set_page(struct ftmac100_rxdes *rxdes, struct page *page) in ftmac100_rxdes_set_page() argument
275 rxdes->rxdes3 = (unsigned int)page; in ftmac100_rxdes_set_page()
278 static struct page *ftmac100_rxdes_get_page(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_get_page() argument
280 return (struct page *)rxdes->rxdes3; in ftmac100_rxdes_get_page()
298 return &priv->descs->rxdes[priv->rx_pointer]; in ftmac100_current_rxdes()
304 struct ftmac100_rxdes *rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_locate_first_segment() local
306 while (!ftmac100_rxdes_owned_by_dma(rxdes)) { in ftmac100_rx_locate_first_segment()
307 if (ftmac100_rxdes_first_segment(rxdes)) in ftmac100_rx_locate_first_segment()
308 return rxdes; in ftmac100_rx_locate_first_segment()
310 ftmac100_rxdes_set_dma_own(rxdes); in ftmac100_rx_locate_first_segment()
312 rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_locate_first_segment()
319 struct ftmac100_rxdes *rxdes) in ftmac100_rx_packet_error() argument
324 if (unlikely(ftmac100_rxdes_rx_error(rxdes))) { in ftmac100_rx_packet_error()
332 if (unlikely(ftmac100_rxdes_crc_error(rxdes))) { in ftmac100_rx_packet_error()
340 if (unlikely(ftmac100_rxdes_frame_too_long(rxdes))) { in ftmac100_rx_packet_error()
346 } else if (unlikely(ftmac100_rxdes_runt(rxdes))) { in ftmac100_rx_packet_error()
352 } else if (unlikely(ftmac100_rxdes_odd_nibble(rxdes))) { in ftmac100_rx_packet_error()
366 struct ftmac100_rxdes *rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_drop_packet() local
370 netdev_dbg(netdev, "drop packet %p\n", rxdes); in ftmac100_rx_drop_packet()
373 if (ftmac100_rxdes_last_segment(rxdes)) in ftmac100_rx_drop_packet()
376 ftmac100_rxdes_set_dma_own(rxdes); in ftmac100_rx_drop_packet()
378 rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_drop_packet()
379 } while (!done && !ftmac100_rxdes_owned_by_dma(rxdes)); in ftmac100_rx_drop_packet()
387 struct ftmac100_rxdes *rxdes; in ftmac100_rx_packet() local
394 rxdes = ftmac100_rx_locate_first_segment(priv); in ftmac100_rx_packet()
395 if (!rxdes) in ftmac100_rx_packet()
398 if (unlikely(ftmac100_rx_packet_error(priv, rxdes))) { in ftmac100_rx_packet()
407 ret = ftmac100_rxdes_last_segment(rxdes); in ftmac100_rx_packet()
420 if (unlikely(ftmac100_rxdes_multicast(rxdes))) in ftmac100_rx_packet()
423 map = ftmac100_rxdes_get_dma_addr(rxdes); in ftmac100_rx_packet()
426 length = ftmac100_rxdes_frame_length(rxdes); in ftmac100_rx_packet()
427 page = ftmac100_rxdes_get_page(rxdes); in ftmac100_rx_packet()
440 ftmac100_alloc_rx_page(priv, rxdes, GFP_ATOMIC); in ftmac100_rx_packet()
659 struct ftmac100_rxdes *rxdes, gfp_t gfp) in ftmac100_alloc_rx_page() argument
680 ftmac100_rxdes_set_page(rxdes, page); in ftmac100_alloc_rx_page()
681 ftmac100_rxdes_set_dma_addr(rxdes, map); in ftmac100_alloc_rx_page()
682 ftmac100_rxdes_set_buffer_size(rxdes, RX_BUF_SIZE); in ftmac100_alloc_rx_page()
683 ftmac100_rxdes_set_dma_own(rxdes); in ftmac100_alloc_rx_page()
692 struct ftmac100_rxdes *rxdes = &priv->descs->rxdes[i]; in ftmac100_free_buffers() local
693 struct page *page = ftmac100_rxdes_get_page(rxdes); in ftmac100_free_buffers()
694 dma_addr_t map = ftmac100_rxdes_get_dma_addr(rxdes); in ftmac100_free_buffers()
730 ftmac100_rxdes_set_end_of_ring(&priv->descs->rxdes[RX_QUEUE_ENTRIES - 1]); in ftmac100_alloc_buffers()
733 struct ftmac100_rxdes *rxdes = &priv->descs->rxdes[i]; in ftmac100_alloc_buffers() local
735 if (ftmac100_alloc_rx_page(priv, rxdes, GFP_KERNEL)) in ftmac100_alloc_buffers()