summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Brockus <dbrockus@chromium.org>2019-08-26 07:10:44 -0600
committerCommit Bot <commit-bot@chromium.org>2019-09-05 14:39:34 +0000
commit73bb9370b182e4f46d37529365cb4eee78bf7c6f (patch)
treedca615d8be516b4de5d0b84688560abe451ac3f3
parent5094437e865bb00c672288b5420b3a257c14d236 (diff)
downloadchrome-ec-73bb9370b182e4f46d37529365cb4eee78bf7c6f.tar.gz
common: usb_prl_sm add rch_pass_up_message as a state
BUG=none BRANCH=none TEST=make buildall -j Change-Id: Ib89f2edf6ce1a57cfeb5f59ffac1fde77cbfa803 Signed-off-by: Denis Brockus <dbrockus@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1770680 Reviewed-by: Jett Rink <jettrink@chromium.org>
-rw-r--r--common/usbc/usb_prl_sm.c28
-rw-r--r--test/usb_prl.c1
2 files changed, 18 insertions, 11 deletions
diff --git a/common/usbc/usb_prl_sm.c b/common/usbc/usb_prl_sm.c
index 52a1e607a5..11cadb9614 100644
--- a/common/usbc/usb_prl_sm.c
+++ b/common/usbc/usb_prl_sm.c
@@ -74,6 +74,7 @@ enum usb_prl_hr_state {
/* Chunked Rx states (Section 6.11.2.1.2) */
enum usb_rch_state {
RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER,
+ RCH_PASS_UP_MESSAGE,
RCH_PROCESSING_EXTENDED_MESSAGE,
RCH_REQUESTING_CHUNK,
RCH_WAITING_CHUNK,
@@ -880,10 +881,7 @@ static void rch_wait_for_message_from_protocol_layer_run(const int port)
PRL_FLAGS_CHUNKING) && !chunked) {
/* Copy chunk to extended buffer */
copy_chunk_to_ext(port);
- /* Pass Message to Policy Engine */
- pe_pass_up_message(port);
- /* Clear Abort flag and set Chunking */
- rch_clear_abort_set_chunking(port);
+ set_state_rch(port, RCH_PASS_UP_MESSAGE);
}
/*
* Chunked != Chunking
@@ -899,10 +897,7 @@ static void rch_wait_for_message_from_protocol_layer_run(const int port)
else if (!PD_HEADER_EXT(emsg[port].header)) {
/* Copy chunk to extended buffer */
copy_chunk_to_ext(port);
- /* Pass Message to Policy Engine */
- pe_pass_up_message(port);
- /* Clear Abort flag and set Chunking */
- rch_clear_abort_set_chunking(port);
+ set_state_rch(port, RCH_PASS_UP_MESSAGE);
}
/*
* Received an Extended Message while communicating at a
@@ -916,6 +911,16 @@ static void rch_wait_for_message_from_protocol_layer_run(const int port)
}
/*
+ * RchPassUpMessage
+ */
+static void rch_pass_up_message_entry(const int port)
+{
+ /* Pass Message to Policy Engine */
+ pe_pass_up_message(port);
+ set_state_rch(port, RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER);
+}
+
+/*
* RchProcessingExtendedMessage
*/
static void rch_processing_extended_message_entry(const int port)
@@ -982,9 +987,7 @@ static void rch_processing_extended_message_run(const int port)
if (pdmsg[port].num_bytes_received >= data_size) {
emsg[port].len = pdmsg[port].num_bytes_received;
/* Pass Message to Policy Engine */
- pe_pass_up_message(port);
- set_state_rch(port,
- RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER);
+ set_state_rch(port, RCH_PASS_UP_MESSAGE);
}
/*
* Message not Complete
@@ -1585,6 +1588,9 @@ static const struct usb_state rch_states[] = {
.entry = rch_wait_for_message_from_protocol_layer_entry,
.run = rch_wait_for_message_from_protocol_layer_run,
},
+ [RCH_PASS_UP_MESSAGE] = {
+ .entry = rch_pass_up_message_entry,
+ },
[RCH_PROCESSING_EXTENDED_MESSAGE] = {
.entry = rch_processing_extended_message_entry,
.run = rch_processing_extended_message_run,
diff --git a/test/usb_prl.c b/test/usb_prl.c
index 72f4fd6c8f..eab20be46f 100644
--- a/test/usb_prl.c
+++ b/test/usb_prl.c
@@ -47,6 +47,7 @@ enum usb_prl_hr_state {
enum usb_rch_state {
RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER,
+ RCH_PASS_UP_MESSAGE,
RCH_PROCESSING_EXTENDED_MESSAGE,
RCH_REQUESTING_CHUNK,
RCH_WAITING_CHUNK,