Lines Matching refs:rxdes
59 struct ftmac100_rxdes rxdes[RX_QUEUE_ENTRIES]; member
86 struct ftmac100_rxdes *rxdes, gfp_t gfp);
183 offsetof(struct ftmac100_descs, rxdes)); in ftmac100_start_hw()
204 static bool ftmac100_rxdes_first_segment(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_first_segment() argument
206 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_FRS); in ftmac100_rxdes_first_segment()
209 static bool ftmac100_rxdes_last_segment(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_last_segment() argument
211 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_LRS); in ftmac100_rxdes_last_segment()
214 static bool ftmac100_rxdes_owned_by_dma(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_owned_by_dma() argument
216 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RXDMA_OWN); in ftmac100_rxdes_owned_by_dma()
219 static void ftmac100_rxdes_set_dma_own(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_set_dma_own() argument
222 rxdes->rxdes0 = cpu_to_le32(FTMAC100_RXDES0_RXDMA_OWN); in ftmac100_rxdes_set_dma_own()
225 static bool ftmac100_rxdes_rx_error(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_rx_error() argument
227 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RX_ERR); in ftmac100_rxdes_rx_error()
230 static bool ftmac100_rxdes_crc_error(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_crc_error() argument
232 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_CRC_ERR); in ftmac100_rxdes_crc_error()
235 static bool ftmac100_rxdes_frame_too_long(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_frame_too_long() argument
237 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_FTL); in ftmac100_rxdes_frame_too_long()
240 static bool ftmac100_rxdes_runt(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_runt() argument
242 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RUNT); in ftmac100_rxdes_runt()
245 static bool ftmac100_rxdes_odd_nibble(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_odd_nibble() argument
247 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RX_ODD_NB); in ftmac100_rxdes_odd_nibble()
250 static unsigned int ftmac100_rxdes_frame_length(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_frame_length() argument
252 return le32_to_cpu(rxdes->rxdes0) & FTMAC100_RXDES0_RFL; in ftmac100_rxdes_frame_length()
255 static bool ftmac100_rxdes_multicast(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_multicast() argument
257 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_MULTICAST); in ftmac100_rxdes_multicast()
260 static void ftmac100_rxdes_set_buffer_size(struct ftmac100_rxdes *rxdes, in ftmac100_rxdes_set_buffer_size() argument
263 rxdes->rxdes1 &= cpu_to_le32(FTMAC100_RXDES1_EDORR); in ftmac100_rxdes_set_buffer_size()
264 rxdes->rxdes1 |= cpu_to_le32(FTMAC100_RXDES1_RXBUF_SIZE(size)); in ftmac100_rxdes_set_buffer_size()
267 static void ftmac100_rxdes_set_end_of_ring(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_set_end_of_ring() argument
269 rxdes->rxdes1 |= cpu_to_le32(FTMAC100_RXDES1_EDORR); in ftmac100_rxdes_set_end_of_ring()
272 static void ftmac100_rxdes_set_dma_addr(struct ftmac100_rxdes *rxdes, in ftmac100_rxdes_set_dma_addr() argument
275 rxdes->rxdes2 = cpu_to_le32(addr); in ftmac100_rxdes_set_dma_addr()
278 static dma_addr_t ftmac100_rxdes_get_dma_addr(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_get_dma_addr() argument
280 return le32_to_cpu(rxdes->rxdes2); in ftmac100_rxdes_get_dma_addr()
287 static void ftmac100_rxdes_set_page(struct ftmac100_rxdes *rxdes, struct page *page) in ftmac100_rxdes_set_page() argument
289 rxdes->rxdes3 = (unsigned int)page; in ftmac100_rxdes_set_page()
292 static struct page *ftmac100_rxdes_get_page(struct ftmac100_rxdes *rxdes) in ftmac100_rxdes_get_page() argument
294 return (struct page *)rxdes->rxdes3; in ftmac100_rxdes_get_page()
312 return &priv->descs->rxdes[priv->rx_pointer]; in ftmac100_current_rxdes()
318 struct ftmac100_rxdes *rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_locate_first_segment() local
320 while (!ftmac100_rxdes_owned_by_dma(rxdes)) { in ftmac100_rx_locate_first_segment()
321 if (ftmac100_rxdes_first_segment(rxdes)) in ftmac100_rx_locate_first_segment()
322 return rxdes; in ftmac100_rx_locate_first_segment()
324 ftmac100_rxdes_set_dma_own(rxdes); in ftmac100_rx_locate_first_segment()
326 rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_locate_first_segment()
333 struct ftmac100_rxdes *rxdes) in ftmac100_rx_packet_error() argument
338 if (unlikely(ftmac100_rxdes_rx_error(rxdes))) { in ftmac100_rx_packet_error()
346 if (unlikely(ftmac100_rxdes_crc_error(rxdes))) { in ftmac100_rx_packet_error()
354 if (unlikely(ftmac100_rxdes_frame_too_long(rxdes))) { in ftmac100_rx_packet_error()
360 } else if (unlikely(ftmac100_rxdes_runt(rxdes))) { in ftmac100_rx_packet_error()
366 } else if (unlikely(ftmac100_rxdes_odd_nibble(rxdes))) { in ftmac100_rx_packet_error()
380 struct ftmac100_rxdes *rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_drop_packet() local
384 netdev_dbg(netdev, "drop packet %p\n", rxdes); in ftmac100_rx_drop_packet()
387 if (ftmac100_rxdes_last_segment(rxdes)) in ftmac100_rx_drop_packet()
390 ftmac100_rxdes_set_dma_own(rxdes); in ftmac100_rx_drop_packet()
392 rxdes = ftmac100_current_rxdes(priv); in ftmac100_rx_drop_packet()
393 } while (!done && !ftmac100_rxdes_owned_by_dma(rxdes)); in ftmac100_rx_drop_packet()
401 struct ftmac100_rxdes *rxdes; in ftmac100_rx_packet() local
408 rxdes = ftmac100_rx_locate_first_segment(priv); in ftmac100_rx_packet()
409 if (!rxdes) in ftmac100_rx_packet()
412 if (unlikely(ftmac100_rx_packet_error(priv, rxdes))) { in ftmac100_rx_packet()
421 ret = ftmac100_rxdes_last_segment(rxdes); in ftmac100_rx_packet()
434 if (unlikely(ftmac100_rxdes_multicast(rxdes))) in ftmac100_rx_packet()
437 map = ftmac100_rxdes_get_dma_addr(rxdes); in ftmac100_rx_packet()
440 length = ftmac100_rxdes_frame_length(rxdes); in ftmac100_rx_packet()
441 page = ftmac100_rxdes_get_page(rxdes); in ftmac100_rx_packet()
454 ftmac100_alloc_rx_page(priv, rxdes, GFP_ATOMIC); in ftmac100_rx_packet()
673 struct ftmac100_rxdes *rxdes, gfp_t gfp) in ftmac100_alloc_rx_page() argument
694 ftmac100_rxdes_set_page(rxdes, page); in ftmac100_alloc_rx_page()
695 ftmac100_rxdes_set_dma_addr(rxdes, map); in ftmac100_alloc_rx_page()
696 ftmac100_rxdes_set_buffer_size(rxdes, RX_BUF_SIZE); in ftmac100_alloc_rx_page()
697 ftmac100_rxdes_set_dma_own(rxdes); in ftmac100_alloc_rx_page()
706 struct ftmac100_rxdes *rxdes = &priv->descs->rxdes[i]; in ftmac100_free_buffers() local
707 struct page *page = ftmac100_rxdes_get_page(rxdes); in ftmac100_free_buffers()
708 dma_addr_t map = ftmac100_rxdes_get_dma_addr(rxdes); in ftmac100_free_buffers()
745 ftmac100_rxdes_set_end_of_ring(&priv->descs->rxdes[RX_QUEUE_ENTRIES - 1]); in ftmac100_alloc_buffers()
748 struct ftmac100_rxdes *rxdes = &priv->descs->rxdes[i]; in ftmac100_alloc_buffers() local
750 if (ftmac100_alloc_rx_page(priv, rxdes, GFP_KERNEL)) in ftmac100_alloc_buffers()