Lines Matching refs:descr
99 gelic_descr_get_status(struct gelic_descr *descr) in gelic_descr_get_status() argument
101 return be32_to_cpu(descr->dmac_cmd_status) & GELIC_DESCR_DMA_STAT_MASK; in gelic_descr_get_status()
195 static void gelic_descr_set_status(struct gelic_descr *descr, in gelic_descr_set_status() argument
198 descr->dmac_cmd_status = cpu_to_be32(status | in gelic_descr_set_status()
199 (be32_to_cpu(descr->dmac_cmd_status) & in gelic_descr_set_status()
223 struct gelic_descr *descr; in gelic_card_reset_chain() local
225 for (descr = start_descr; start_descr != descr->next; descr++) { in gelic_card_reset_chain()
226 gelic_descr_set_status(descr, GELIC_DESCR_DMA_CARDOWNED); in gelic_card_reset_chain()
227 descr->next_descr_addr = cpu_to_be32(descr->next->bus_addr); in gelic_card_reset_chain()
231 chain->tail = (descr - 1); in gelic_card_reset_chain()
233 (descr - 1)->next_descr_addr = 0; in gelic_card_reset_chain()
271 card->descr + GELIC_NET_TX_DESCRIPTORS); in gelic_card_down()
287 struct gelic_descr *descr; in gelic_card_free_chain() local
289 for (descr = descr_in; descr && descr->bus_addr; descr = descr->next) { in gelic_card_free_chain()
290 dma_unmap_single(ctodev(card), descr->bus_addr, in gelic_card_free_chain()
292 descr->bus_addr = 0; in gelic_card_free_chain()
313 struct gelic_descr *descr; in gelic_card_init_chain() local
315 descr = start_descr; in gelic_card_init_chain()
316 memset(descr, 0, sizeof(*descr) * no); in gelic_card_init_chain()
319 for (i = 0; i < no; i++, descr++) { in gelic_card_init_chain()
320 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE); in gelic_card_init_chain()
321 descr->bus_addr = in gelic_card_init_chain()
322 dma_map_single(ctodev(card), descr, in gelic_card_init_chain()
326 if (!descr->bus_addr) in gelic_card_init_chain()
329 descr->next = descr + 1; in gelic_card_init_chain()
330 descr->prev = descr - 1; in gelic_card_init_chain()
333 (descr - 1)->next = start_descr; in gelic_card_init_chain()
334 start_descr->prev = (descr - 1); in gelic_card_init_chain()
337 descr = start_descr; in gelic_card_init_chain()
338 for (i = 0; i < no; i++, descr++) { in gelic_card_init_chain()
339 descr->next_descr_addr = cpu_to_be32(descr->next->bus_addr); in gelic_card_init_chain()
346 (descr - 1)->next_descr_addr = 0; in gelic_card_init_chain()
351 for (i--, descr--; 0 <= i; i--, descr--) in gelic_card_init_chain()
352 if (descr->bus_addr) in gelic_card_init_chain()
353 dma_unmap_single(ctodev(card), descr->bus_addr, in gelic_card_init_chain()
370 struct gelic_descr *descr) in gelic_descr_prepare_rx() argument
375 if (gelic_descr_get_status(descr) != GELIC_DESCR_DMA_NOT_IN_USE) in gelic_descr_prepare_rx()
382 descr->skb = dev_alloc_skb(bufsize + GELIC_NET_RXBUF_ALIGN - 1); in gelic_descr_prepare_rx()
383 if (!descr->skb) { in gelic_descr_prepare_rx()
384 descr->buf_addr = 0; /* tell DMAC don't touch memory */ in gelic_descr_prepare_rx()
387 descr->buf_size = cpu_to_be32(bufsize); in gelic_descr_prepare_rx()
388 descr->dmac_cmd_status = 0; in gelic_descr_prepare_rx()
389 descr->result_size = 0; in gelic_descr_prepare_rx()
390 descr->valid_size = 0; in gelic_descr_prepare_rx()
391 descr->data_error = 0; in gelic_descr_prepare_rx()
393 offset = ((unsigned long)descr->skb->data) & in gelic_descr_prepare_rx()
396 skb_reserve(descr->skb, GELIC_NET_RXBUF_ALIGN - offset); in gelic_descr_prepare_rx()
398 descr->buf_addr = cpu_to_be32(dma_map_single(ctodev(card), in gelic_descr_prepare_rx()
399 descr->skb->data, in gelic_descr_prepare_rx()
402 if (!descr->buf_addr) { in gelic_descr_prepare_rx()
403 dev_kfree_skb_any(descr->skb); in gelic_descr_prepare_rx()
404 descr->skb = NULL; in gelic_descr_prepare_rx()
407 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE); in gelic_descr_prepare_rx()
410 gelic_descr_set_status(descr, GELIC_DESCR_DMA_CARDOWNED); in gelic_descr_prepare_rx()
422 struct gelic_descr *descr = card->rx_chain.head; in gelic_card_release_rx_chain() local
425 if (descr->skb) { in gelic_card_release_rx_chain()
427 be32_to_cpu(descr->buf_addr), in gelic_card_release_rx_chain()
428 descr->skb->len, in gelic_card_release_rx_chain()
430 descr->buf_addr = 0; in gelic_card_release_rx_chain()
431 dev_kfree_skb_any(descr->skb); in gelic_card_release_rx_chain()
432 descr->skb = NULL; in gelic_card_release_rx_chain()
433 gelic_descr_set_status(descr, in gelic_card_release_rx_chain()
436 descr = descr->next; in gelic_card_release_rx_chain()
437 } while (descr != card->rx_chain.head); in gelic_card_release_rx_chain()
450 struct gelic_descr *descr = card->rx_chain.head; in gelic_card_fill_rx_chain() local
454 if (!descr->skb) { in gelic_card_fill_rx_chain()
455 ret = gelic_descr_prepare_rx(card, descr); in gelic_card_fill_rx_chain()
459 descr = descr->next; in gelic_card_fill_rx_chain()
460 } while (descr != card->rx_chain.head); in gelic_card_fill_rx_chain()
492 struct gelic_descr *descr) in gelic_descr_release_tx() argument
494 struct sk_buff *skb = descr->skb; in gelic_descr_release_tx()
496 BUG_ON(!(be32_to_cpu(descr->data_status) & GELIC_DESCR_TX_TAIL)); in gelic_descr_release_tx()
498 dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr), skb->len, in gelic_descr_release_tx()
502 descr->buf_addr = 0; in gelic_descr_release_tx()
503 descr->buf_size = 0; in gelic_descr_release_tx()
504 descr->next_descr_addr = 0; in gelic_descr_release_tx()
505 descr->result_size = 0; in gelic_descr_release_tx()
506 descr->valid_size = 0; in gelic_descr_release_tx()
507 descr->data_status = 0; in gelic_descr_release_tx()
508 descr->data_error = 0; in gelic_descr_release_tx()
509 descr->skb = NULL; in gelic_descr_release_tx()
512 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE); in gelic_descr_release_tx()
697 static void gelic_descr_set_tx_cmdstat(struct gelic_descr *descr, in gelic_descr_set_tx_cmdstat() argument
701 descr->dmac_cmd_status = in gelic_descr_set_tx_cmdstat()
709 descr->dmac_cmd_status = in gelic_descr_set_tx_cmdstat()
714 descr->dmac_cmd_status = in gelic_descr_set_tx_cmdstat()
721 descr->dmac_cmd_status = in gelic_descr_set_tx_cmdstat()
763 struct gelic_descr *descr, in gelic_descr_prepare_tx() argument
789 descr->buf_addr = cpu_to_be32(buf); in gelic_descr_prepare_tx()
790 descr->buf_size = cpu_to_be32(skb->len); in gelic_descr_prepare_tx()
791 descr->skb = skb; in gelic_descr_prepare_tx()
792 descr->data_status = 0; in gelic_descr_prepare_tx()
793 descr->next_descr_addr = 0; /* terminate hw descr */ in gelic_descr_prepare_tx()
794 gelic_descr_set_tx_cmdstat(descr, skb); in gelic_descr_prepare_tx()
797 card->tx_chain.head = descr->next; in gelic_descr_prepare_tx()
808 struct gelic_descr *descr) in gelic_card_kick_txdma() argument
815 if (gelic_descr_get_status(descr) == GELIC_DESCR_DMA_CARDOWNED) { in gelic_card_kick_txdma()
818 descr->bus_addr, 0); in gelic_card_kick_txdma()
838 struct gelic_descr *descr; in gelic_net_xmit() local
846 descr = gelic_card_get_next_tx_descr(card); in gelic_net_xmit()
847 if (!descr) { in gelic_net_xmit()
856 result = gelic_descr_prepare_tx(card, descr, skb); in gelic_net_xmit()
871 descr->prev->next_descr_addr = cpu_to_be32(descr->bus_addr); in gelic_net_xmit()
877 if (gelic_card_kick_txdma(card, descr)) { in gelic_net_xmit()
884 descr->data_status = cpu_to_be32(GELIC_DESCR_TX_TAIL); in gelic_net_xmit()
885 gelic_descr_release_tx(card, descr); in gelic_net_xmit()
887 card->tx_chain.head = descr; in gelic_net_xmit()
889 descr->prev->next_descr_addr = 0; in gelic_net_xmit()
906 static void gelic_net_pass_skb_up(struct gelic_descr *descr, in gelic_net_pass_skb_up() argument
911 struct sk_buff *skb = descr->skb; in gelic_net_pass_skb_up()
914 data_status = be32_to_cpu(descr->data_status); in gelic_net_pass_skb_up()
915 data_error = be32_to_cpu(descr->data_error); in gelic_net_pass_skb_up()
917 dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr), in gelic_net_pass_skb_up()
921 skb_put(skb, be32_to_cpu(descr->valid_size)? in gelic_net_pass_skb_up()
922 be32_to_cpu(descr->valid_size) : in gelic_net_pass_skb_up()
923 be32_to_cpu(descr->result_size)); in gelic_net_pass_skb_up()
924 if (!descr->valid_size) in gelic_net_pass_skb_up()
926 be32_to_cpu(descr->result_size), in gelic_net_pass_skb_up()
927 be32_to_cpu(descr->buf_size), in gelic_net_pass_skb_up()
928 be32_to_cpu(descr->dmac_cmd_status)); in gelic_net_pass_skb_up()
930 descr->skb = NULL; in gelic_net_pass_skb_up()
969 struct gelic_descr *descr = chain->head; in gelic_card_decode_one_descr() local
973 status = gelic_descr_get_status(descr); in gelic_card_decode_one_descr()
979 dev_dbg(ctodev(card), "dormant descr? %p\n", descr); in gelic_card_decode_one_descr()
987 vid = *(u16 *)(descr->skb->data) & VLAN_VID_MASK; in gelic_card_decode_one_descr()
1034 gelic_net_pass_skb_up(descr, card, netdev); in gelic_card_decode_one_descr()
1039 be32_to_cpu(descr->dmac_cmd_status) & in gelic_card_decode_one_descr()
1046 descr->next_descr_addr = 0; in gelic_card_decode_one_descr()
1049 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE); in gelic_card_decode_one_descr()
1055 gelic_descr_prepare_rx(card, descr); in gelic_card_decode_one_descr()
1057 chain->tail = descr; in gelic_card_decode_one_descr()
1058 chain->head = descr->next; in gelic_card_decode_one_descr()
1063 descr->prev->next_descr_addr = cpu_to_be32(descr->bus_addr); in gelic_card_decode_one_descr()
1526 BUILD_BUG_ON(offsetof(struct gelic_card, descr) % 32); in gelic_alloc_card_net()
1722 card->descr, GELIC_NET_TX_DESCRIPTORS); in ps3_gelic_driver_probe()
1726 card->descr + GELIC_NET_TX_DESCRIPTORS, in ps3_gelic_driver_probe()