/* CPL connection rx data ack: host -> Send RX credits through an RX_DATA_ACK CPL message. Returns the number of credits sent.  */
static u32 send_rx_credits(struct s3_conn *c3cn, u32 credits, u32 dack)
/* CPL connection rx data ack: host -> Send RX credits through an RX_DATA_ACK CPL message. Returns the number of credits sent.  */
static u32 send_rx_credits(struct s3_conn *c3cn, u32 credits, u32 dack)
{
	struct sk_buff *skb;
	struct cpl_rx_data_ack *req;
	skb = alloc_skb(sizeof(*req), GFP_ATOMIC);
	if (!skb)
		return 0;
	req = (struct cpl_rx_data_ack *)__skb_put(skb, sizeof(*req));
	req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
	OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_RX_DATA_ACK, c3cn->tid));
	req->credit_dack = htonl(dack | V_RX_CREDITS(credits));
	skb->priority = CPL_PRIORITY_ACK;
	cxgb3_ofld_send(c3cn->cdev, skb);
	return credits;
}