Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3fcd5680 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "wcnss: Read multiple SMD Packet from SMD Channel"

parents ce948348 b6560f13
Loading
Loading
Loading
Loading
+29 −16
Original line number Diff line number Diff line
@@ -2123,10 +2123,8 @@ exit:
	return;
}


static void wcnssctrl_rx_handler(struct work_struct *worker)
static void wcnss_process_smd_msg(int len)
{
	int len = 0;
	int rc = 0;
	unsigned char buf[sizeof(struct wcnss_version)];
	unsigned char build[WCNSS_MAX_BUILD_VER_LEN+1];
@@ -2136,17 +2134,6 @@ static void wcnssctrl_rx_handler(struct work_struct *worker)
	int hw_type;
	unsigned char fw_status = 0;

	len = smd_read_avail(penv->smd_ch);
	if (len > WCNSS_MAX_FRAME_SIZE) {
		pr_err("wcnss: frame larger than the allowed size\n");
		smd_read(penv->smd_ch, NULL, len);
		return;
	}
	if (len < sizeof(struct smd_msg_hdr)) {
		pr_err("wcnss: incomplete header available len = %d\n", len);
		return;
	}

	rc = smd_read(penv->smd_ch, buf, sizeof(struct smd_msg_hdr));
	if (rc < sizeof(struct smd_msg_hdr)) {
		pr_err("wcnss: incomplete header read from smd\n");
@@ -2245,7 +2232,6 @@ static void wcnssctrl_rx_handler(struct work_struct *worker)
		penv->is_cbc_done = 1;
		pr_debug("wcnss: received WCNSS_CBC_COMPLETE_IND from FW\n");
		break;

	case WCNSS_CALDATA_UPLD_REQ:
		extract_cal_data(len);
		break;
@@ -2256,6 +2242,33 @@ static void wcnssctrl_rx_handler(struct work_struct *worker)
	return;
}

static void wcnssctrl_rx_handler(struct work_struct *worker)
{
	int len;

	while (1) {
		len = smd_read_avail(penv->smd_ch);
		if (0 == len) {
			pr_debug("wcnss: No more data to be read\n");
			return;
		}

		if (len > WCNSS_MAX_FRAME_SIZE) {
			pr_err("wcnss: frame larger than the allowed size\n");
			smd_read(penv->smd_ch, NULL, len);
			return;
		}

		if (len < sizeof(struct smd_msg_hdr)) {
			pr_err("wcnss: incomplete header available len = %d\n",
			       len);
			return;
		}

		wcnss_process_smd_msg(len);
	}
}

static void wcnss_send_version_req(struct work_struct *worker)
{
	struct smd_msg_hdr smd_msg;