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