Lines Matching refs:ptask
803 static void fwnet_free_ptask(struct fwnet_packet_task *ptask) in fwnet_free_ptask() argument
805 dev_kfree_skb_any(ptask->skb); in fwnet_free_ptask()
806 kmem_cache_free(fwnet_packet_task_cache, ptask); in fwnet_free_ptask()
816 static int fwnet_send_packet(struct fwnet_packet_task *ptask);
818 static void fwnet_transmit_packet_done(struct fwnet_packet_task *ptask) in fwnet_transmit_packet_done() argument
820 struct fwnet_device *dev = ptask->dev; in fwnet_transmit_packet_done()
821 struct sk_buff *skb = ptask->skb; in fwnet_transmit_packet_done()
827 ptask->outstanding_pkts--; in fwnet_transmit_packet_done()
830 free = (ptask->outstanding_pkts == 0 && ptask->enqueued); in fwnet_transmit_packet_done()
834 if (ptask->outstanding_pkts == 0) { in fwnet_transmit_packet_done()
841 if (ptask->outstanding_pkts > 0) { in fwnet_transmit_packet_done()
848 lf = fwnet_get_hdr_lf(&ptask->hdr); in fwnet_transmit_packet_done()
855 ptask->outstanding_pkts, lf, ptask->hdr.w0, in fwnet_transmit_packet_done()
856 ptask->hdr.w1); in fwnet_transmit_packet_done()
861 dg_size = fwnet_get_hdr_dg_size(&ptask->hdr); in fwnet_transmit_packet_done()
862 fg_off = ptask->max_payload - RFC2374_FRAG_HDR_SIZE; in fwnet_transmit_packet_done()
863 datagram_label = fwnet_get_hdr_dgl(&ptask->hdr); in fwnet_transmit_packet_done()
867 dg_size = fwnet_get_hdr_dg_size(&ptask->hdr); in fwnet_transmit_packet_done()
868 fg_off = fwnet_get_hdr_fg_off(&ptask->hdr) in fwnet_transmit_packet_done()
869 + ptask->max_payload - RFC2374_FRAG_HDR_SIZE; in fwnet_transmit_packet_done()
870 datagram_label = fwnet_get_hdr_dgl(&ptask->hdr); in fwnet_transmit_packet_done()
874 if (ptask->dest_node == IEEE1394_ALL_NODES) { in fwnet_transmit_packet_done()
876 ptask->max_payload + IEEE1394_GASP_HDR_SIZE); in fwnet_transmit_packet_done()
878 skb_pull(skb, ptask->max_payload); in fwnet_transmit_packet_done()
880 if (ptask->outstanding_pkts > 1) { in fwnet_transmit_packet_done()
881 fwnet_make_sf_hdr(&ptask->hdr, RFC2374_HDR_INTFRAG, in fwnet_transmit_packet_done()
884 fwnet_make_sf_hdr(&ptask->hdr, RFC2374_HDR_LASTFRAG, in fwnet_transmit_packet_done()
886 ptask->max_payload = skb->len + RFC2374_FRAG_HDR_SIZE; in fwnet_transmit_packet_done()
888 fwnet_send_packet(ptask); in fwnet_transmit_packet_done()
892 fwnet_free_ptask(ptask); in fwnet_transmit_packet_done()
895 static void fwnet_transmit_packet_failed(struct fwnet_packet_task *ptask) in fwnet_transmit_packet_failed() argument
897 struct fwnet_device *dev = ptask->dev; in fwnet_transmit_packet_failed()
904 ptask->outstanding_pkts = 0; in fwnet_transmit_packet_failed()
907 free = ptask->enqueued; in fwnet_transmit_packet_failed()
917 fwnet_free_ptask(ptask); in fwnet_transmit_packet_failed()
923 struct fwnet_packet_task *ptask = data; in fwnet_write_complete() local
928 fwnet_transmit_packet_done(ptask); in fwnet_write_complete()
931 dev_err(&ptask->dev->netdev->dev, in fwnet_write_complete()
940 fwnet_transmit_packet_failed(ptask); in fwnet_write_complete()
944 static int fwnet_send_packet(struct fwnet_packet_task *ptask) in fwnet_send_packet() argument
952 dev = ptask->dev; in fwnet_send_packet()
953 tx_len = ptask->max_payload; in fwnet_send_packet()
954 switch (fwnet_get_hdr_lf(&ptask->hdr)) { in fwnet_send_packet()
956 bufhdr = skb_push(ptask->skb, RFC2374_UNFRAG_HDR_SIZE); in fwnet_send_packet()
957 put_unaligned_be32(ptask->hdr.w0, &bufhdr->w0); in fwnet_send_packet()
963 bufhdr = skb_push(ptask->skb, RFC2374_FRAG_HDR_SIZE); in fwnet_send_packet()
964 put_unaligned_be32(ptask->hdr.w0, &bufhdr->w0); in fwnet_send_packet()
965 put_unaligned_be32(ptask->hdr.w1, &bufhdr->w1); in fwnet_send_packet()
971 if (ptask->dest_node == IEEE1394_ALL_NODES) { in fwnet_send_packet()
982 switch (ptask->skb->protocol) { in fwnet_send_packet()
992 p = skb_push(ptask->skb, IEEE1394_GASP_HDR_SIZE); in fwnet_send_packet()
998 fw_send_request(dev->card, &ptask->transaction, in fwnet_send_packet()
1002 generation, SCODE_100, 0ULL, ptask->skb->data, in fwnet_send_packet()
1003 tx_len + 8, fwnet_write_complete, ptask); in fwnet_send_packet()
1008 free = (ptask->outstanding_pkts == 0 && !ptask->enqueued); in fwnet_send_packet()
1010 ptask->enqueued = true; in fwnet_send_packet()
1019 fw_send_request(dev->card, &ptask->transaction, in fwnet_send_packet()
1020 TCODE_WRITE_BLOCK_REQUEST, ptask->dest_node, in fwnet_send_packet()
1021 ptask->generation, ptask->speed, ptask->fifo_addr, in fwnet_send_packet()
1022 ptask->skb->data, tx_len, fwnet_write_complete, ptask); in fwnet_send_packet()
1027 free = (ptask->outstanding_pkts == 0 && !ptask->enqueued); in fwnet_send_packet()
1029 ptask->enqueued = true; in fwnet_send_packet()
1038 fwnet_free_ptask(ptask); in fwnet_send_packet()
1232 struct fwnet_packet_task *ptask; in fwnet_tx() local
1245 ptask = kmem_cache_alloc(fwnet_packet_task_cache, GFP_ATOMIC); in fwnet_tx()
1246 if (ptask == NULL) in fwnet_tx()
1282 ptask->fifo_addr = FWNET_NO_FIFO_ADDR; in fwnet_tx()
1283 ptask->generation = 0; in fwnet_tx()
1284 ptask->dest_node = IEEE1394_ALL_NODES; in fwnet_tx()
1285 ptask->speed = SCODE_100; in fwnet_tx()
1300 ptask->fifo_addr = get_unaligned_be48(ha->uc.fifo); in fwnet_tx()
1301 ptask->generation = generation; in fwnet_tx()
1302 ptask->dest_node = dest_node; in fwnet_tx()
1303 ptask->speed = peer->speed; in fwnet_tx()
1306 ptask->hdr.w0 = 0; in fwnet_tx()
1307 ptask->hdr.w1 = 0; in fwnet_tx()
1308 ptask->skb = skb; in fwnet_tx()
1309 ptask->dev = dev; in fwnet_tx()
1313 fwnet_make_uf_hdr(&ptask->hdr, ntohs(proto)); in fwnet_tx()
1314 ptask->outstanding_pkts = 1; in fwnet_tx()
1321 fwnet_make_ff_hdr(&ptask->hdr, ntohs(proto), dg_size, in fwnet_tx()
1323 ptask->outstanding_pkts = DIV_ROUND_UP(dg_size, max_payload); in fwnet_tx()
1332 ptask->max_payload = max_payload; in fwnet_tx()
1333 ptask->enqueued = 0; in fwnet_tx()
1335 fwnet_send_packet(ptask); in fwnet_tx()
1342 if (ptask) in fwnet_tx()
1343 kmem_cache_free(fwnet_packet_task_cache, ptask); in fwnet_tx()