Lines Matching refs:ptask

806 static void fwnet_free_ptask(struct fwnet_packet_task *ptask)
808 dev_kfree_skb_any(ptask->skb);
809 kmem_cache_free(fwnet_packet_task_cache, ptask);
819 static int fwnet_send_packet(struct fwnet_packet_task *ptask);
821 static void fwnet_transmit_packet_done(struct fwnet_packet_task *ptask)
823 struct fwnet_device *dev = ptask->dev;
824 struct sk_buff *skb = ptask->skb;
830 ptask->outstanding_pkts--;
833 free = (ptask->outstanding_pkts == 0 && ptask->enqueued);
837 if (ptask->outstanding_pkts == 0) {
844 if (ptask->outstanding_pkts > 0) {
850 /* Update the ptask to point to the next fragment and send it */
851 lf = fwnet_get_hdr_lf(&ptask->hdr);
858 ptask->outstanding_pkts, lf, ptask->hdr.w0,
859 ptask->hdr.w1);
864 dg_size = fwnet_get_hdr_dg_size(&ptask->hdr);
865 fg_off = ptask->max_payload - RFC2374_FRAG_HDR_SIZE;
866 datagram_label = fwnet_get_hdr_dgl(&ptask->hdr);
870 dg_size = fwnet_get_hdr_dg_size(&ptask->hdr);
871 fg_off = fwnet_get_hdr_fg_off(&ptask->hdr)
872 + ptask->max_payload - RFC2374_FRAG_HDR_SIZE;
873 datagram_label = fwnet_get_hdr_dgl(&ptask->hdr);
877 if (ptask->dest_node == IEEE1394_ALL_NODES) {
879 ptask->max_payload + IEEE1394_GASP_HDR_SIZE);
881 skb_pull(skb, ptask->max_payload);
883 if (ptask->outstanding_pkts > 1) {
884 fwnet_make_sf_hdr(&ptask->hdr, RFC2374_HDR_INTFRAG,
887 fwnet_make_sf_hdr(&ptask->hdr, RFC2374_HDR_LASTFRAG,
889 ptask->max_payload = skb->len + RFC2374_FRAG_HDR_SIZE;
891 fwnet_send_packet(ptask);
895 fwnet_free_ptask(ptask);
898 static void fwnet_transmit_packet_failed(struct fwnet_packet_task *ptask)
900 struct fwnet_device *dev = ptask->dev;
907 ptask->outstanding_pkts = 0;
910 free = ptask->enqueued;
920 fwnet_free_ptask(ptask);
926 struct fwnet_packet_task *ptask = data;
931 fwnet_transmit_packet_done(ptask);
934 dev_err(&ptask->dev->netdev->dev,
943 fwnet_transmit_packet_failed(ptask);
947 static int fwnet_send_packet(struct fwnet_packet_task *ptask)
955 dev = ptask->dev;
956 tx_len = ptask->max_payload;
957 switch (fwnet_get_hdr_lf(&ptask->hdr)) {
959 bufhdr = skb_push(ptask->skb, RFC2374_UNFRAG_HDR_SIZE);
960 put_unaligned_be32(ptask->hdr.w0, &bufhdr->w0);
966 bufhdr = skb_push(ptask->skb, RFC2374_FRAG_HDR_SIZE);
967 put_unaligned_be32(ptask->hdr.w0, &bufhdr->w0);
968 put_unaligned_be32(ptask->hdr.w1, &bufhdr->w1);
974 if (ptask->dest_node == IEEE1394_ALL_NODES) {
980 /* ptask->generation may not have been set yet */
985 switch (ptask->skb->protocol) {
995 p = skb_push(ptask->skb, IEEE1394_GASP_HDR_SIZE);
1001 fw_send_request(dev->card, &ptask->transaction,
1005 generation, SCODE_100, 0ULL, ptask->skb->data,
1006 tx_len + 8, fwnet_write_complete, ptask);
1011 free = (ptask->outstanding_pkts == 0 && !ptask->enqueued);
1013 ptask->enqueued = true;
1022 fw_send_request(dev->card, &ptask->transaction,
1023 TCODE_WRITE_BLOCK_REQUEST, ptask->dest_node,
1024 ptask->generation, ptask->speed, ptask->fifo_addr,
1025 ptask->skb->data, tx_len, fwnet_write_complete, ptask);
1030 free = (ptask->outstanding_pkts == 0 && !ptask->enqueued);
1032 ptask->enqueued = true;
1041 fwnet_free_ptask(ptask);
1235 struct fwnet_packet_task *ptask;
1248 ptask = kmem_cache_alloc(fwnet_packet_task_cache, GFP_ATOMIC);
1249 if (ptask == NULL)
1285 ptask->fifo_addr = FWNET_NO_FIFO_ADDR;
1286 ptask->generation = 0;
1287 ptask->dest_node = IEEE1394_ALL_NODES;
1288 ptask->speed = SCODE_100;
1303 ptask->fifo_addr = get_unaligned_be48(ha->uc.fifo);
1304 ptask->generation = generation;
1305 ptask->dest_node = dest_node;
1306 ptask->speed = peer->speed;
1309 ptask->hdr.w0 = 0;
1310 ptask->hdr.w1 = 0;
1311 ptask->skb = skb;
1312 ptask->dev = dev;
1316 fwnet_make_uf_hdr(&ptask->hdr, ntohs(proto));
1317 ptask->outstanding_pkts = 1;
1324 fwnet_make_ff_hdr(&ptask->hdr, ntohs(proto), dg_size,
1326 ptask->outstanding_pkts = DIV_ROUND_UP(dg_size, max_payload);
1335 ptask->max_payload = max_payload;
1336 ptask->enqueued = 0;
1338 fwnet_send_packet(ptask);
1345 if (ptask)
1346 kmem_cache_free(fwnet_packet_task_cache, ptask);