Lines Matching defs:descr

190  * @descr: descriptor to change
196 static void gelic_descr_set_status(struct gelic_descr *descr,
199 descr->dmac_cmd_status = cpu_to_be32(status |
200 (be32_to_cpu(descr->dmac_cmd_status) &
224 struct gelic_descr *descr;
226 for (descr = start_descr; start_descr != descr->next; descr++) {
227 gelic_descr_set_status(descr, GELIC_DESCR_DMA_CARDOWNED);
228 descr->next_descr_addr = cpu_to_be32(descr->next->bus_addr);
232 chain->tail = (descr - 1);
234 (descr - 1)->next_descr_addr = 0;
272 card->descr + GELIC_NET_TX_DESCRIPTORS);
282 * @descr: descriptor to look at
287 gelic_descr_get_status(struct gelic_descr *descr)
289 return be32_to_cpu(descr->dmac_cmd_status) & GELIC_DESCR_DMA_STAT_MASK;
300 struct gelic_descr *descr;
302 for (descr = descr_in; descr && descr->bus_addr; descr = descr->next) {
303 dma_unmap_single(ctodev(card), descr->bus_addr,
305 descr->bus_addr = 0;
326 struct gelic_descr *descr;
328 descr = start_descr;
329 memset(descr, 0, sizeof(*descr) * no);
332 for (i = 0; i < no; i++, descr++) {
333 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
334 descr->bus_addr =
335 dma_map_single(ctodev(card), descr,
339 if (!descr->bus_addr)
342 descr->next = descr + 1;
343 descr->prev = descr - 1;
346 (descr - 1)->next = start_descr;
347 start_descr->prev = (descr - 1);
350 descr = start_descr;
351 for (i = 0; i < no; i++, descr++) {
352 descr->next_descr_addr = cpu_to_be32(descr->next->bus_addr);
359 (descr - 1)->next_descr_addr = 0;
364 for (i--, descr--; 0 <= i; i--, descr--)
365 if (descr->bus_addr)
366 dma_unmap_single(ctodev(card), descr->bus_addr,
375 * @descr: descriptor to re-init
383 struct gelic_descr *descr)
388 if (gelic_descr_get_status(descr) != GELIC_DESCR_DMA_NOT_IN_USE)
395 descr->skb = dev_alloc_skb(bufsize + GELIC_NET_RXBUF_ALIGN - 1);
396 if (!descr->skb) {
397 descr->buf_addr = 0; /* tell DMAC don't touch memory */
402 descr->buf_size = cpu_to_be32(bufsize);
403 descr->dmac_cmd_status = 0;
404 descr->result_size = 0;
405 descr->valid_size = 0;
406 descr->data_error = 0;
408 offset = ((unsigned long)descr->skb->data) &
411 skb_reserve(descr->skb, GELIC_NET_RXBUF_ALIGN - offset);
413 descr->buf_addr = cpu_to_be32(dma_map_single(ctodev(card),
414 descr->skb->data,
417 if (!descr->buf_addr) {
418 dev_kfree_skb_any(descr->skb);
419 descr->skb = NULL;
422 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
425 gelic_descr_set_status(descr, GELIC_DESCR_DMA_CARDOWNED);
431 * gelic_card_release_rx_chain - free all skb of rx descr
437 struct gelic_descr *descr = card->rx_chain.head;
440 if (descr->skb) {
442 be32_to_cpu(descr->buf_addr),
443 descr->skb->len,
445 descr->buf_addr = 0;
446 dev_kfree_skb_any(descr->skb);
447 descr->skb = NULL;
448 gelic_descr_set_status(descr,
451 descr = descr->next;
452 } while (descr != card->rx_chain.head);
465 struct gelic_descr *descr = card->rx_chain.head;
469 if (!descr->skb) {
470 ret = gelic_descr_prepare_rx(card, descr);
474 descr = descr->next;
475 } while (descr != card->rx_chain.head);
502 * @descr: descriptor to release
507 struct gelic_descr *descr)
509 struct sk_buff *skb = descr->skb;
511 BUG_ON(!(be32_to_cpu(descr->data_status) & GELIC_DESCR_TX_TAIL));
513 dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr), skb->len,
517 descr->buf_addr = 0;
518 descr->buf_size = 0;
519 descr->next_descr_addr = 0;
520 descr->result_size = 0;
521 descr->valid_size = 0;
522 descr->data_status = 0;
523 descr->data_error = 0;
524 descr->skb = NULL;
526 /* set descr status */
527 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
705 * @descr: descriptor structure to fill out
712 static void gelic_descr_set_tx_cmdstat(struct gelic_descr *descr,
716 descr->dmac_cmd_status =
724 descr->dmac_cmd_status =
729 descr->dmac_cmd_status =
736 descr->dmac_cmd_status =
771 * @descr: descriptor structure
778 struct gelic_descr *descr,
804 descr->buf_addr = cpu_to_be32(buf);
805 descr->buf_size = cpu_to_be32(skb->len);
806 descr->skb = skb;
807 descr->data_status = 0;
808 descr->next_descr_addr = 0; /* terminate hw descr */
809 gelic_descr_set_tx_cmdstat(descr, skb);
812 card->tx_chain.head = descr->next;
819 * @descr: descriptor address to enable TX processing at
823 struct gelic_descr *descr)
830 if (gelic_descr_get_status(descr) == GELIC_DESCR_DMA_CARDOWNED) {
833 descr->bus_addr, 0);
853 struct gelic_descr *descr;
861 descr = gelic_card_get_next_tx_descr(card);
862 if (!descr) {
871 result = gelic_descr_prepare_tx(card, descr, skb);
886 descr->prev->next_descr_addr = cpu_to_be32(descr->bus_addr);
892 if (gelic_card_kick_txdma(card, descr)) {
899 descr->data_status = cpu_to_be32(GELIC_DESCR_TX_TAIL);
900 gelic_descr_release_tx(card, descr);
902 card->tx_chain.head = descr;
904 descr->prev->next_descr_addr = 0;
914 * @descr: descriptor to process
921 static void gelic_net_pass_skb_up(struct gelic_descr *descr,
926 struct sk_buff *skb = descr->skb;
929 data_status = be32_to_cpu(descr->data_status);
930 data_error = be32_to_cpu(descr->data_error);
932 dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr),
936 skb_put(skb, be32_to_cpu(descr->valid_size)?
937 be32_to_cpu(descr->valid_size) :
938 be32_to_cpu(descr->result_size));
939 if (!descr->valid_size)
941 be32_to_cpu(descr->result_size),
942 be32_to_cpu(descr->buf_size),
943 be32_to_cpu(descr->dmac_cmd_status));
945 descr->skb = NULL;
984 struct gelic_descr *descr = chain->head;
988 status = gelic_descr_get_status(descr);
994 dev_dbg(ctodev(card), "dormant descr? %p\n", descr);
1002 vid = *(u16 *)(descr->skb->data) & VLAN_VID_MASK;
1048 /* ok, we've got a packet in descr */
1049 gelic_net_pass_skb_up(descr, card, netdev);
1054 be32_to_cpu(descr->dmac_cmd_status) &
1061 descr->next_descr_addr = 0;
1064 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
1070 gelic_descr_prepare_rx(card, descr);
1072 chain->tail = descr;
1073 chain->head = descr->next;
1078 descr->prev->next_descr_addr = cpu_to_be32(descr->bus_addr);
1547 BUILD_BUG_ON(offsetof(struct gelic_card, descr) % 32);
1743 card->descr, GELIC_NET_TX_DESCRIPTORS);
1747 card->descr + GELIC_NET_TX_DESCRIPTORS,
1755 dev_dbg(ctodev(card), "descr rx %p, tx %p, size %#lx, num %#x\n",