diff options
author | Denis Brockus <dbrockus@chromium.org> | 2019-08-26 07:10:44 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-09-05 14:39:34 +0000 |
commit | 73bb9370b182e4f46d37529365cb4eee78bf7c6f (patch) | |
tree | dca615d8be516b4de5d0b84688560abe451ac3f3 | |
parent | 5094437e865bb00c672288b5420b3a257c14d236 (diff) | |
download | chrome-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.c | 28 | ||||
-rw-r--r-- | test/usb_prl.c | 1 |
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, |