Lines Matching refs:rxdes

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