Lines Matching defs:fpdu
1811 /* fpdu can be fragmented over maximum 3 bds: header, partial mpa, unaligned */
1822 struct qed_iwarp_fpdu *fpdu,
1827 struct qed_iwarp_fpdu *fpdu,
1833 if (fpdu->incomplete_bytes) {
1842 fpdu->fpdu_length = *mpa_data << BITS_PER_BYTE;
1848 fpdu->fpdu_length = QED_IWARP_FPDU_LEN_WITH_PAD(mpa_len);
1850 if (fpdu->fpdu_length <= tcp_payload_len)
1858 pkt_type_str[pkt_type], fpdu->fpdu_length, tcp_payload_len);
1865 struct qed_iwarp_fpdu *fpdu,
1871 fpdu->mpa_buf = buf;
1872 fpdu->pkt_hdr = buf->data_phys_addr + placement_offset;
1873 fpdu->pkt_hdr_size = pkt_data->tcp_payload_offset;
1874 fpdu->mpa_frag = buf->data_phys_addr + first_mpa_offset;
1875 fpdu->mpa_frag_virt = (u8 *)(buf->data) + first_mpa_offset;
1878 fpdu->incomplete_bytes = QED_IWARP_INVALID_FPDU_LENGTH;
1879 else if (tcp_payload_size < fpdu->fpdu_length)
1880 fpdu->incomplete_bytes = fpdu->fpdu_length - tcp_payload_size;
1882 fpdu->incomplete_bytes = 0; /* complete fpdu */
1884 fpdu->mpa_frag_len = fpdu->fpdu_length - fpdu->incomplete_bytes;
1889 struct qed_iwarp_fpdu *fpdu,
1897 /* need to copy the data from the partial packet stored in fpdu
1903 if ((fpdu->mpa_frag_len + tcp_payload_size) > (u16)buf->buff_size) {
1905 "MPA ALIGN: Unexpected: buffer is not large enough for split fpdu buff_size = %d mpa_frag_len = %d, tcp_payload_size = %d, incomplete_bytes = %d\n",
1906 buf->buff_size, fpdu->mpa_frag_len,
1907 tcp_payload_size, fpdu->incomplete_bytes);
1912 "MPA ALIGN Copying fpdu: [%p, %d] [%p, %d]\n",
1913 fpdu->mpa_frag_virt, fpdu->mpa_frag_len,
1916 memcpy(tmp_buf, fpdu->mpa_frag_virt, fpdu->mpa_frag_len);
1917 memcpy(tmp_buf + fpdu->mpa_frag_len,
1920 rc = qed_iwarp_recycle_pkt(p_hwfn, fpdu, fpdu->mpa_buf);
1928 fpdu->mpa_frag_len + tcp_payload_size);
1930 fpdu->mpa_buf = buf;
1931 /* fpdu->pkt_hdr remains as is */
1932 /* fpdu->mpa_frag is overridden with new buf */
1933 fpdu->mpa_frag = buf->data_phys_addr;
1934 fpdu->mpa_frag_virt = buf->data;
1935 fpdu->mpa_frag_len += tcp_payload_size;
1937 fpdu->incomplete_bytes -= tcp_payload_size;
1941 "MPA ALIGN: split fpdu buff_size = %d mpa_frag_len = %d, tcp_payload_size = %d, incomplete_bytes = %d\n",
1942 buf->buff_size, fpdu->mpa_frag_len, tcp_payload_size,
1943 fpdu->incomplete_bytes);
1950 struct qed_iwarp_fpdu *fpdu, u8 *mpa_data)
1955 if (fpdu->incomplete_bytes == QED_IWARP_INVALID_FPDU_LENGTH) {
1957 mpa_len = fpdu->fpdu_length | *mpa_data;
1958 fpdu->fpdu_length = QED_IWARP_FPDU_LEN_WITH_PAD(mpa_len);
1960 fpdu->mpa_frag_len = 1;
1961 fpdu->incomplete_bytes = fpdu->fpdu_length - 1;
1965 mpa_len, fpdu->fpdu_length, fpdu->incomplete_bytes);
1985 struct qed_iwarp_fpdu *fpdu,
1995 tx_pkt.l4_hdr_offset_w = fpdu->pkt_hdr_size >> 2;
1996 tx_pkt.first_frag = fpdu->pkt_hdr;
1997 tx_pkt.first_frag_len = fpdu->pkt_hdr_size;
2018 qed_iwarp_win_right_edge(struct qed_hwfn *p_hwfn, struct qed_iwarp_fpdu *fpdu)
2027 tx_pkt.l4_hdr_offset_w = fpdu->pkt_hdr_size >> 2;
2029 tx_pkt.first_frag = fpdu->pkt_hdr;
2030 tx_pkt.first_frag_len = fpdu->pkt_hdr_size;
2055 struct qed_iwarp_fpdu *fpdu,
2069 * part of the fpdu of the first tcp segment, and the last fragment
2070 * will point to the remainder of the fpdu. A packed pdu, requires only
2075 tx_pkt.l4_hdr_offset_w = fpdu->pkt_hdr_size >> 2; /* offset in words */
2077 /* Send the mpa_buf only with the last fpdu (in case of packed) */
2079 tcp_payload_size <= fpdu->fpdu_length)
2080 tx_pkt.cookie = fpdu->mpa_buf;
2082 tx_pkt.first_frag = fpdu->pkt_hdr;
2083 tx_pkt.first_frag_len = fpdu->pkt_hdr_size;
2093 if (tcp_payload_size == fpdu->incomplete_bytes)
2094 fpdu->mpa_buf->piggy_buf = buf;
2105 fpdu->mpa_frag,
2106 fpdu->mpa_frag_len);
2110 if (!fpdu->incomplete_bytes)
2120 fpdu->incomplete_bytes);
2127 fpdu->mpa_frag_len,
2128 fpdu->incomplete_bytes, rc);
2159 struct qed_iwarp_fpdu *fpdu;
2166 fpdu = qed_iwarp_get_curr_fpdu(p_hwfn, (u16)cid);
2167 if (!fpdu) { /* something corrupt with cid, post rx back */
2177 pkt_type = qed_iwarp_mpa_classify(p_hwfn, fpdu,
2183 qed_iwarp_init_fpdu(buf, fpdu,
2193 rc = qed_iwarp_win_right_edge(p_hwfn, fpdu);
2198 memset(fpdu, 0, sizeof(*fpdu));
2205 qed_iwarp_init_fpdu(buf, fpdu,
2210 rc = qed_iwarp_send_fpdu(p_hwfn, fpdu, curr_pkt, buf,
2216 memset(fpdu, 0, sizeof(*fpdu));
2220 mpa_buf->tcp_payload_len -= fpdu->fpdu_length;
2222 fpdu->fpdu_length);
2225 qed_iwarp_update_fpdu_length(p_hwfn, fpdu, mpa_data);
2226 if (mpa_buf->tcp_payload_len < fpdu->incomplete_bytes) {
2227 /* special handling of fpdu split over more
2232 fpdu);
2238 rc = qed_iwarp_cp_pkt(p_hwfn, fpdu, curr_pkt,
2248 rc = qed_iwarp_send_fpdu(p_hwfn, fpdu, curr_pkt, buf,
2254 /* don't reset fpdu -> we need it for next
2260 mpa_buf->tcp_payload_len -= fpdu->incomplete_bytes;
2262 fpdu->incomplete_bytes);
2265 fpdu->incomplete_bytes = 0;
2540 struct qed_iwarp_fpdu *fpdu;
2548 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "(0x%x) Flush fpdu\n", cid);
2550 fpdu = qed_iwarp_get_curr_fpdu(p_hwfn, (u16)cid);
2551 if (fpdu)
2552 memset(fpdu, 0, sizeof(*fpdu));
2736 * for handling the case that it is a partial fpdu.