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

Commit 7d8eae98 authored by Sreelakshmi Gownipalli's avatar Sreelakshmi Gownipalli
Browse files

diag: Close the SMD transport type if sockets are supported



Close the SMD control channel on receiving the feature mask
from peripheral on socket channel and if the sockets are supported.

Change-Id: I7b15b69741cfcc6763a6109f7fccfb2f68378584
Signed-off-by: default avatarSreelakshmi Gownipalli <sgownipa@codeaurora.org>
parent 87bcf4a6
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -619,6 +619,7 @@ void diagfwd_close_transport(uint8_t transport, uint8_t peripheral)
	struct diagfwd_info *dest_info = NULL;
	int (*init_fn)(uint8_t) = NULL;
	void (*invalidate_fn)(void *, struct diagfwd_info *) = NULL;
	int (*check_channel_state)(void *) = NULL;
	uint8_t transport_open = 0;

	if (peripheral >= NUM_PERIPHERALS)
@@ -629,20 +630,23 @@ void diagfwd_close_transport(uint8_t transport, uint8_t peripheral)
		transport_open = TRANSPORT_SOCKET;
		init_fn = diag_socket_init_peripheral;
		invalidate_fn = diag_socket_invalidate;
		check_channel_state = diag_socket_check_state;
		break;
	case TRANSPORT_SOCKET:
		transport_open = TRANSPORT_SMD;
		init_fn = diag_smd_init_peripheral;
		invalidate_fn = diag_smd_invalidate;
		check_channel_state = diag_smd_check_state;
		break;
	default:
		return;

	}

	fwd_info = &early_init_info[transport_open][peripheral];
	fwd_info = &early_init_info[transport][peripheral];
	if (fwd_info->p_ops && fwd_info->p_ops->close)
		fwd_info->p_ops->close(fwd_info->ctxt);
	fwd_info = &early_init_info[transport_open][peripheral];
	dest_info = &peripheral_info[TYPE_CNTL][peripheral];
	dest_info->inited = 1;
	dest_info->ctxt = fwd_info->ctxt;
@@ -654,7 +658,9 @@ void diagfwd_close_transport(uint8_t transport, uint8_t peripheral)
	dest_info->inited = fwd_info->inited;
	dest_info->buf_1 = fwd_info->buf_1;
	dest_info->buf_2 = fwd_info->buf_2;
	dest_info->transport = fwd_info->transport;
	invalidate_fn(dest_info->ctxt, dest_info);
	if (!check_channel_state(dest_info->ctxt))
		diagfwd_late_open(dest_info);
	diagfwd_cntl_open(dest_info);
	init_fn(peripheral);
+9 −0
Original line number Diff line number Diff line
@@ -417,7 +417,16 @@ static void diag_smd_queue_read(void *ctxt)
		queue_work(smd_info->wq, &(smd_info->read_work));
	}
}
int diag_smd_check_state(void *ctxt)
{
	struct diag_smd_info *info = NULL;

	if (!ctxt)
		return 0;

	info = (struct diag_smd_info *)ctxt;
	return (int)(atomic_read(&info->diag_state));
}
void diag_smd_invalidate(void *ctxt, struct diagfwd_info *fwd_ctxt)
{
	struct diag_smd_info *smd_info = NULL;
+1 −0
Original line number Diff line number Diff line
@@ -45,5 +45,6 @@ void diag_smd_exit(void);
int diag_smd_init(void);
void diag_smd_early_exit(void);
void diag_smd_invalidate(void *ctxt, struct diagfwd_info *fwd_ctxt);
int diag_smd_check_state(void *ctxt);

#endif
+11 −0
Original line number Diff line number Diff line
@@ -655,6 +655,17 @@ void diag_socket_invalidate(void *ctxt, struct diagfwd_info *fwd_ctxt)
	info->fwd_ctxt = fwd_ctxt;
}

int diag_socket_check_state(void *ctxt)
{
	struct diag_socket_info *info = NULL;

	if (!ctxt)
		return 0;

	info = (struct diag_socket_info *)ctxt;
	return (int)(atomic_read(&info->diag_state));
}

static void __diag_socket_init(struct diag_socket_info *info)
{
	uint16_t ins_base = 0;
+1 −0
Original line number Diff line number Diff line
@@ -92,4 +92,5 @@ int diag_socket_init_peripheral(uint8_t peripheral);
void diag_socket_exit(void);
void diag_socket_early_exit(void);
void diag_socket_invalidate(void *ctxt, struct diagfwd_info *fwd_ctxt);
int diag_socket_check_state(void *ctxt);
#endif