int send_msg(msg_t *msg)
{
    int retval;

    retval = mcc_send(&mqx_endpoint_m4, msg, sizeof(msg_t), 0xffffffff);
    if(retval)
        qDebug("mcc_send failed, result = 0x%x", retval);

    //mcc_destroy(mqx_endpoint_a5.node);
    return retval;
}
예제 #2
0
static ssize_t imx_mcc_pingpong_en(struct device *dev,
		struct device_attribute *attr, const char *buf, size_t count)
{
	u32 pingpong_en;
	int i = 0, ret = 0;
	struct timeval tv1, tv2, tv3;
	u32 tv_count1 = 0, tv_count2 = 0;
	struct mcc_pp_msg msg;
	MCC_MEM_SIZE num_of_received_bytes;
	MCC_INFO_STRUCT mcc_info;

	sscanf(buf, "%d\n", &pingpong_en);
	if (pingpong_en) {
		pr_info("imx mcc pingpong test begin.\n");
		ret = mcc_get_info(MCC_NODE_A9, &mcc_info);
		if (ret) {
			pr_err("failed to get mcc info.\n");
			return -EINVAL;
		}

		ret = mcc_create_endpoint(&mcc_endpoint_a9_pingpong,
				MCC_A9_PORT);
		if (ret) {
			pr_err("failed to create a9 mcc ep.\n");
			return -EINVAL;
		}

		pr_info("\nA9 mcc prepares run, MCC version is %s\n",
				mcc_info.version_string);
		msg.data = 1;
		while (i < 0x50000) {
			i++;
			i++;
			/*
			 * wait until the remote endpoint is created by
			 * the other core
			 */
			if (pingpong_en > 1)
				do_gettimeofday(&tv1);

			ret = mcc_send(&mcc_endpoint_a9_pingpong,
					&mcc_endpoint_m4_pingpong, &msg,
					sizeof(struct mcc_pp_msg),
					0xffffffff);
			if (ret < 0) {
				pr_err("A9 Main task send error: %d\n", ret);
				break;
			}

			if (pingpong_en > 1) {
				do_gettimeofday(&tv2);
				tv_count1 = (tv2.tv_sec - tv1.tv_sec)
					* USEC_PER_SEC
					+ tv2.tv_usec - tv1.tv_usec;
			}
			while (MCC_ERR_ENDPOINT == ret) {
				pr_err("\n send err ret %d, re-send\n", ret);
				ret = mcc_send(&mcc_endpoint_a9_pingpong,
						&mcc_endpoint_m4_pingpong, &msg,
						sizeof(struct mcc_pp_msg),
						0xffffffff);
				msleep(5000);
			}

			if (pingpong_en > 1)
				do_gettimeofday(&tv2);

			ret = mcc_recv(&mcc_endpoint_m4_pingpong,
					&mcc_endpoint_a9_pingpong, &msg,
					sizeof(struct mcc_pp_msg),
					&num_of_received_bytes, 0xffffffff);

			if (pingpong_en > 1) {
				do_gettimeofday(&tv3);
				tv_count2 = (tv3.tv_sec - tv2.tv_sec)
					* USEC_PER_SEC
					+ tv3.tv_usec - tv2.tv_usec;
				pr_info("imx mcc: Data transfer speed tests"
						"in pingpong. a9 -> m4:%08dus."
						"a9 <- m4:%08dus.\n",
						tv_count1, tv_count2);
			}

			if (MCC_SUCCESS != ret) {
				pr_err("A9 Main task receive error: %d\n", ret);
				break;
			} else {
				pr_info("%08x Main task received a msg"
					" from [%d, %d, %d] endpoint\n", i,
					mcc_endpoint_m4_pingpong.core,
					mcc_endpoint_m4_pingpong.node,
					mcc_endpoint_m4_pingpong.port);
				pr_info("Message: Size=0x%08x, data = 0x%08x\n",
					num_of_received_bytes, msg.data);
				msg.data++;
			}
		}
		ret = mcc_destroy_endpoint(&mcc_endpoint_a9_pingpong);
		if (ret) {
			pr_err("failed to destory a9 mcc ep.\n");
			return ret;
		} else {
			pr_info("destory a9 mcc ep.\n");
		}
		pr_info("imx mcc test end after %08d times tests.\n", i/2);
	}

	if (ret)
		return ret;
	else
		return count;
}