src/dpdk/drivers/net/bnxt/tf_ulp/ulp_utils.c
uint32_t
ulp_blob_insert(struct ulp_blob *blob, uint32_t offset,
		uint8_t *data, uint32_t datalen)
{
	uint32_t rc;
	uint8_t local_data[BNXT_ULP_FLMP_BLOB_SIZE];
	uint16_t mov_len;

	/* validate the arguments */
	if (!blob || datalen > (uint32_t)(blob->bitlen - blob->write_idx) ||
	    offset > blob->write_idx) {
		BNXT_TF_DBG(ERR, "invalid argument\n");
		return 0; /* failure */
	}

	mov_len = blob->write_idx - offset;
	/* If offset and data len are not 8 bit aligned then return error */
	if (ULP_BITS_IS_BYTE_NOT_ALIGNED(offset) ||
	    ULP_BITS_IS_BYTE_NOT_ALIGNED(datalen)) {
		BNXT_TF_DBG(ERR, "invalid argument, not aligned\n");
		return 0; /* failure */
	}

	/* copy the data so we can move the data */
	memcpy(local_data, &blob->data[ULP_BITS_2_BYTE_NR(offset)],
	       ULP_BITS_2_BYTE(mov_len));
	blob->write_idx = offset;
	if (blob->byte_order == BNXT_ULP_BYTE_ORDER_BE)
		rc = ulp_bs_push_msb(blob->data,
				     blob->write_idx,
				     datalen,
				     data);
	else
		rc = ulp_bs_push_lsb(blob->data,
				     blob->write_idx,
				     datalen,
				     data);
	if (!rc) {
		BNXT_TF_DBG(ERR, "Failed ro write blob\n");
		return 0;
	}
	/* copy the previously stored data */
	memcpy(&blob->data[ULP_BITS_2_BYTE_NR(offset + datalen)], local_data,
	       ULP_BITS_2_BYTE(mov_len));
	blob->write_idx += (mov_len + datalen);
	return datalen;
}
/*
 * Insert data into the binary blob at the given offset.
 *
 * blob [in] The blob that data is added to.  The blob must
 * be initialized prior to pushing data.
 *
 * offset [in] The offset where the data needs to be inserted.
 *
 * data [in/out] A pointer to bytes to be added to the blob.
 *
 * datalen [in] The number of bits to be added to the blob.
 *
 * The offset of the data is updated after each push of data.
 * NULL returned on error.
 */
Insert data into the binary blob at the given offset.
blob [in] The blob that data is added to.  The blob must
be initialized prior to pushing data.

offset [in] The offset where the data needs to be inserted.

data [in/out] A pointer to bytes to be added to the blob.

datalen [in] The number of bits to be added to the blob.

The offset of the data is updated after each push of data.
NULL returned on error.
Insert data into the binary blob at the given offset . blob [ in ] The blob that data is added to . The blob must be initialized prior to pushing data . offset [ in ] The offset where the data needs to be inserted . data [ in / out ] A pointer to bytes to be added to the blob . datalen [ in ] The number of bits to be added to the blob . The offset of the data is updated after each push of data . NULL returned on error .
uint32_t
ulp_blob_insert(struct ulp_blob *blob, uint32_t offset,
		uint8_t *data, uint32_t datalen)
{
	uint32_t rc;
	uint8_t local_data[BNXT_ULP_FLMP_BLOB_SIZE];
	uint16_t mov_len;
	if (!blob || datalen > (uint32_t)(blob->bitlen - blob->write_idx) ||
	    offset > blob->write_idx) {
		BNXT_TF_DBG(ERR, "invalid argument\n");
		return 0; 
	}
	mov_len = blob->write_idx - offset;
	if (ULP_BITS_IS_BYTE_NOT_ALIGNED(offset) ||
	    ULP_BITS_IS_BYTE_NOT_ALIGNED(datalen)) {
		BNXT_TF_DBG(ERR, "invalid argument, not aligned\n");
		return 0; 
	}
	memcpy(local_data, &blob->data[ULP_BITS_2_BYTE_NR(offset)],
	       ULP_BITS_2_BYTE(mov_len));
	blob->write_idx = offset;
	if (blob->byte_order == BNXT_ULP_BYTE_ORDER_BE)
		rc = ulp_bs_push_msb(blob->data,
				     blob->write_idx,
				     datalen,
				     data);
	else
		rc = ulp_bs_push_lsb(blob->data,
				     blob->write_idx,
				     datalen,
				     data);
	if (!rc) {
		BNXT_TF_DBG(ERR, "Failed ro write blob\n");
		return 0;
	}
	memcpy(&blob->data[ULP_BITS_2_BYTE_NR(offset + datalen)], local_data,
	       ULP_BITS_2_BYTE(mov_len));
	blob->write_idx += (mov_len + datalen);
	return datalen;
}
uint32_t ulp_blob_insert ( struct ulp_blob * blob , uint32_t offset , uint8_t * data , uint32_t datalen ) { uint32_t rc ; uint8_t local_data [ BNXT_ULP_FLMP_BLOB_SIZE ] ; uint16_t mov_len ; if ( ! blob || datalen > ( uint32_t ) ( blob -> bitlen - blob -> write_idx ) || offset > blob -> write_idx ) { BNXT_TF_DBG ( ERR , " \n " ) ; return 0 ; } mov_len = blob -> write_idx - offset ; if ( ULP_BITS_IS_BYTE_NOT_ALIGNED ( offset ) || ULP_BITS_IS_BYTE_NOT_ALIGNED ( datalen ) ) { BNXT_TF_DBG ( ERR , " \n " ) ; return 0 ; } memcpy ( local_data , & blob -> data [ ULP_BITS_2_BYTE_NR ( offset ) ] , ULP_BITS_2_BYTE ( mov_len ) ) ; blob -> write_idx = offset ; if ( blob -> byte_order == BNXT_ULP_BYTE_ORDER_BE ) rc = ulp_bs_push_msb ( blob -> data , blob -> write_idx , datalen , data ) ; else rc = ulp_bs_push_lsb ( blob -> data , blob -> write_idx , datalen , data ) ; if ( ! rc ) { BNXT_TF_DBG ( ERR , " \n " ) ; return 0 ; } memcpy ( & blob -> data [ ULP_BITS_2_BYTE_NR ( offset + datalen ) ] , local_data , ULP_BITS_2_BYTE ( mov_len ) ) ; blob -> write_idx += ( mov_len + datalen ) ; return datalen ; }
Insert data into the binary blob at the given offset.
Insert data into the binary blob at the given offset .
/* validate the arguments */ /* failure */ /* If offset and data len are not 8 bit aligned then return error */ /* failure */ /* copy the data so we can move the data */ /* copy the previously stored data */