Lines Matching defs:rxdes

47 	struct ftmac100_rxdes rxdes[RX_QUEUE_ENTRIES];
74 struct ftmac100_rxdes *rxdes, gfp_t gfp);
206 offsetof(struct ftmac100_descs, rxdes));
233 static bool ftmac100_rxdes_first_segment(struct ftmac100_rxdes *rxdes)
235 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_FRS);
238 static bool ftmac100_rxdes_last_segment(struct ftmac100_rxdes *rxdes)
240 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_LRS);
243 static bool ftmac100_rxdes_owned_by_dma(struct ftmac100_rxdes *rxdes)
245 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RXDMA_OWN);
248 static void ftmac100_rxdes_set_dma_own(struct ftmac100_rxdes *rxdes)
251 rxdes->rxdes0 = cpu_to_le32(FTMAC100_RXDES0_RXDMA_OWN);
254 static bool ftmac100_rxdes_rx_error(struct ftmac100_rxdes *rxdes)
256 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RX_ERR);
259 static bool ftmac100_rxdes_crc_error(struct ftmac100_rxdes *rxdes)
261 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_CRC_ERR);
264 static bool ftmac100_rxdes_runt(struct ftmac100_rxdes *rxdes)
266 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RUNT);
269 static bool ftmac100_rxdes_odd_nibble(struct ftmac100_rxdes *rxdes)
271 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_RX_ODD_NB);
274 static unsigned int ftmac100_rxdes_frame_length(struct ftmac100_rxdes *rxdes)
276 return le32_to_cpu(rxdes->rxdes0) & FTMAC100_RXDES0_RFL;
279 static bool ftmac100_rxdes_multicast(struct ftmac100_rxdes *rxdes)
281 return rxdes->rxdes0 & cpu_to_le32(FTMAC100_RXDES0_MULTICAST);
284 static void ftmac100_rxdes_set_buffer_size(struct ftmac100_rxdes *rxdes,
287 rxdes->rxdes1 &= cpu_to_le32(FTMAC100_RXDES1_EDORR);
288 rxdes->rxdes1 |= cpu_to_le32(FTMAC100_RXDES1_RXBUF_SIZE(size));
291 static void ftmac100_rxdes_set_end_of_ring(struct ftmac100_rxdes *rxdes)
293 rxdes->rxdes1 |= cpu_to_le32(FTMAC100_RXDES1_EDORR);
296 static void ftmac100_rxdes_set_dma_addr(struct ftmac100_rxdes *rxdes,
299 rxdes->rxdes2 = cpu_to_le32(addr);
302 static dma_addr_t ftmac100_rxdes_get_dma_addr(struct ftmac100_rxdes *rxdes)
304 return le32_to_cpu(rxdes->rxdes2);
311 static void ftmac100_rxdes_set_page(struct ftmac100_rxdes *rxdes, struct page *page)
313 rxdes->rxdes3 = (unsigned int)page;
316 static struct page *ftmac100_rxdes_get_page(struct ftmac100_rxdes *rxdes)
318 return (struct page *)rxdes->rxdes3;
336 return &priv->descs->rxdes[priv->rx_pointer];
342 struct ftmac100_rxdes *rxdes = ftmac100_current_rxdes(priv);
344 while (!ftmac100_rxdes_owned_by_dma(rxdes)) {
345 if (ftmac100_rxdes_first_segment(rxdes))
346 return rxdes;
348 ftmac100_rxdes_set_dma_own(rxdes);
350 rxdes = ftmac100_current_rxdes(priv);
357 struct ftmac100_rxdes *rxdes)
362 if (unlikely(ftmac100_rxdes_rx_error(rxdes))) {
370 if (unlikely(ftmac100_rxdes_crc_error(rxdes))) {
378 if (unlikely(ftmac100_rxdes_runt(rxdes))) {
384 } else if (unlikely(ftmac100_rxdes_odd_nibble(rxdes))) {
403 struct ftmac100_rxdes *rxdes = ftmac100_current_rxdes(priv);
407 netdev_dbg(netdev, "drop packet %p\n", rxdes);
410 if (ftmac100_rxdes_last_segment(rxdes))
413 ftmac100_rxdes_set_dma_own(rxdes);
415 rxdes = ftmac100_current_rxdes(priv);
416 } while (!done && !ftmac100_rxdes_owned_by_dma(rxdes));
424 struct ftmac100_rxdes *rxdes;
431 rxdes = ftmac100_rx_locate_first_segment(priv);
432 if (!rxdes)
435 if (unlikely(ftmac100_rx_packet_error(priv, rxdes))) {
441 ret = ftmac100_rxdes_last_segment(rxdes);
458 if (unlikely(ftmac100_rxdes_multicast(rxdes)))
461 map = ftmac100_rxdes_get_dma_addr(rxdes);
464 length = ftmac100_rxdes_frame_length(rxdes);
465 page = ftmac100_rxdes_get_page(rxdes);
478 ftmac100_alloc_rx_page(priv, rxdes, GFP_ATOMIC);
697 struct ftmac100_rxdes *rxdes, gfp_t gfp)
718 ftmac100_rxdes_set_page(rxdes, page);
719 ftmac100_rxdes_set_dma_addr(rxdes, map);
720 ftmac100_rxdes_set_buffer_size(rxdes, RX_BUF_SIZE);
721 ftmac100_rxdes_set_dma_own(rxdes);
730 struct ftmac100_rxdes *rxdes = &priv->descs->rxdes[i];
731 struct page *page = ftmac100_rxdes_get_page(rxdes);
732 dma_addr_t map = ftmac100_rxdes_get_dma_addr(rxdes);
768 ftmac100_rxdes_set_end_of_ring(&priv->descs->rxdes[RX_QUEUE_ENTRIES - 1]);
771 struct ftmac100_rxdes *rxdes = &priv->descs->rxdes[i];
773 if (ftmac100_alloc_rx_page(priv, rxdes, GFP_KERNEL))