diff options
Diffstat (limited to 'common/usbc/usb_prl_sm.c')
-rw-r--r-- | common/usbc/usb_prl_sm.c | 285 |
1 files changed, 132 insertions, 153 deletions
diff --git a/common/usbc/usb_prl_sm.c b/common/usbc/usb_prl_sm.c index 805e6dfcd8..b1843da6eb 100644 --- a/common/usbc/usb_prl_sm.c +++ b/common/usbc/usb_prl_sm.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -6,6 +6,7 @@ #include "battery.h" #include "battery_smart.h" #include "board.h" +#include "builtin/assert.h" #include "charge_manager.h" #include "charge_state.h" #include "chipset.h" @@ -33,8 +34,8 @@ #include "vpd_api.h" #ifdef CONFIG_COMMON_RUNTIME -#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ## args) -#define CPRINTS(format, args...) cprints(CC_USBPD, format, ## args) +#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ##args) +#define CPRINTS(format, args...) cprints(CC_USBPD, format, ##args) #else #define CPRINTF(format, args...) #define CPRINTS(format, args...) @@ -46,27 +47,25 @@ #undef DEBUG_PRINT_FLAG_NAMES #ifdef DEBUG_PRINT_FLAG_NAMES -__maybe_unused static void print_flag(const char *group, - int set_or_clear, +__maybe_unused static void print_flag(const char *group, int set_or_clear, int flag); -#define SET_FLAG(group, flags, flag) \ - do { \ - print_flag(group, 1, flag); \ - atomic_or(flags, (flag)); \ +#define SET_FLAG(group, flags, flag) \ + do { \ + print_flag(group, 1, flag); \ + atomic_or(flags, (flag)); \ } while (0) -#define CLR_FLAG(group, flags, flag) \ - do { \ - int before = *flags; \ - atomic_clear_bits(flags, (flag)); \ - if (*flags != before) \ - print_flag(group, 0, flag); \ +#define CLR_FLAG(group, flags, flag) \ + do { \ + int before = *flags; \ + atomic_clear_bits(flags, (flag)); \ + if (*flags != before) \ + print_flag(group, 0, flag); \ } while (0) #else #define SET_FLAG(group, flags, flag) atomic_or(flags, (flag)) #define CLR_FLAG(group, flags, flag) atomic_clear_bits(flags, (flag)) #endif - #define RCH_SET_FLAG(port, flag) SET_FLAG("RCH", &rch[port].flags, (flag)) #define RCH_CLR_FLAG(port, flag) CLR_FLAG("RCH", &rch[port].flags, (flag)) #define RCH_CHK_FLAG(port, flag) (rch[port].flags & (flag)) @@ -98,34 +97,34 @@ __maybe_unused static void print_flag(const char *group, * different meanings in each state machine. */ /* Flag to note message transmission completed */ -#define PRL_FLAGS_TX_COMPLETE BIT(0) +#define PRL_FLAGS_TX_COMPLETE BIT(0) /* Flag to note that PRL requested to set SINK_NG CC state */ -#define PRL_FLAGS_SINK_NG BIT(1) +#define PRL_FLAGS_SINK_NG BIT(1) /* Flag to note PRL waited for SINK_OK CC state before transmitting */ -#define PRL_FLAGS_WAIT_SINK_OK BIT(2) +#define PRL_FLAGS_WAIT_SINK_OK BIT(2) /* Flag to note transmission error occurred */ -#define PRL_FLAGS_TX_ERROR BIT(3) +#define PRL_FLAGS_TX_ERROR BIT(3) /* Flag to note PE triggered a hard reset */ -#define PRL_FLAGS_PE_HARD_RESET BIT(4) +#define PRL_FLAGS_PE_HARD_RESET BIT(4) /* Flag to note hard reset has completed */ -#define PRL_FLAGS_HARD_RESET_COMPLETE BIT(5) +#define PRL_FLAGS_HARD_RESET_COMPLETE BIT(5) /* Flag to note port partner sent a hard reset */ #define PRL_FLAGS_PORT_PARTNER_HARD_RESET BIT(6) /* * Flag to note a message transmission has been requested. It is only cleared * when we send the message to the TCPC layer. */ -#define PRL_FLAGS_MSG_XMIT BIT(7) +#define PRL_FLAGS_MSG_XMIT BIT(7) /* Flag to note a message was received */ -#define PRL_FLAGS_MSG_RECEIVED BIT(8) +#define PRL_FLAGS_MSG_RECEIVED BIT(8) /* Flag to note aborting current TX message, not currently set */ -#define PRL_FLAGS_ABORT BIT(9) +#define PRL_FLAGS_ABORT BIT(9) /* Flag to note current TX message uses chunking */ -#define PRL_FLAGS_CHUNKING BIT(10) +#define PRL_FLAGS_CHUNKING BIT(10) struct bit_name { - int value; - const char *name; + int value; + const char *name; }; static __const_data const struct bit_name flag_bit_names[] = { @@ -136,17 +135,15 @@ static __const_data const struct bit_name flag_bit_names[] = { { PRL_FLAGS_PE_HARD_RESET, "PRL_FLAGS_PE_HARD_RESET" }, { PRL_FLAGS_HARD_RESET_COMPLETE, "PRL_FLAGS_HARD_RESET_COMPLETE" }, { PRL_FLAGS_PORT_PARTNER_HARD_RESET, - "PRL_FLAGS_PORT_PARTNER_HARD_RESET" }, + "PRL_FLAGS_PORT_PARTNER_HARD_RESET" }, { PRL_FLAGS_MSG_XMIT, "PRL_FLAGS_MSG_XMIT" }, { PRL_FLAGS_MSG_RECEIVED, "PRL_FLAGS_MSG_RECEIVED" }, { PRL_FLAGS_ABORT, "PRL_FLAGS_ABORT" }, { PRL_FLAGS_CHUNKING, "PRL_FLAGS_CHUNKING" }, }; -__maybe_unused static void print_bits(const char *group, - const char *desc, - int value, - const struct bit_name *names, +__maybe_unused static void print_bits(const char *group, const char *desc, + int value, const struct bit_name *names, int names_size) { int i; @@ -162,8 +159,7 @@ __maybe_unused static void print_bits(const char *group, CPRINTF("\n"); } -__maybe_unused static void print_flag(const char *group, - int set_or_clear, +__maybe_unused static void print_flag(const char *group, int set_or_clear, int flag) { print_bits(group, set_or_clear ? "Set" : "Clr", flag, flag_bit_names, @@ -189,6 +185,8 @@ __maybe_unused static void print_flag(const char *group, */ #ifdef CONFIG_USB_PD_DEBUG_LEVEL static const enum debug_level prl_debug_level = CONFIG_USB_PD_DEBUG_LEVEL; +#elif defined(CONFIG_USB_PD_INITIAL_DEBUG_LEVEL) +static enum debug_level prl_debug_level = CONFIG_USB_PD_INITIAL_DEBUG_LEVEL; #else static enum debug_level prl_debug_level = DEBUG_LEVEL_1; #endif @@ -238,7 +236,7 @@ enum usb_tch_state { TCH_REPORT_ERROR, }; -static const char * const prl_tx_state_names[] = { +static const char *const prl_tx_state_names[] = { [PRL_TX_PHY_LAYER_RESET] = "PRL_TX_PHY_LAYER_RESET", [PRL_TX_WAIT_FOR_MESSAGE_REQUEST] = "PRL_TX_WAIT_FOR_MESSAGE_REQUEST", [PRL_TX_LAYER_RESET_FOR_TRANSMIT] = "PRL_TX_LAYER_RESET_FOR_TRANSMIT", @@ -250,18 +248,18 @@ static const char * const prl_tx_state_names[] = { [PRL_TX_DISCARD_MESSAGE] = "PRL_TX_DISCARD_MESSAGE", }; -static const char * const prl_hr_state_names[] = { +static const char *const prl_hr_state_names[] = { [PRL_HR_WAIT_FOR_REQUEST] = "PRL_HR_WAIT_FOR_REQUEST", [PRL_HR_RESET_LAYER] = "PRL_HR_RESET_LAYER", - [PRL_HR_WAIT_FOR_PHY_HARD_RESET_COMPLETE] - = "PRL_HR_WAIT_FOR_PHY_HARD_RESET_COMPLETE", - [PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE] - = "PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE", + [PRL_HR_WAIT_FOR_PHY_HARD_RESET_COMPLETE] = + "PRL_HR_WAIT_FOR_PHY_HARD_RESET_COMPLETE", + [PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE] = + "PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE", }; -__maybe_unused static const char * const rch_state_names[] = { - [RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER] - = "RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER", +__maybe_unused static const char *const rch_state_names[] = { + [RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER] = + "RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER", [RCH_PASS_UP_MESSAGE] = "RCH_PASS_UP_MESSAGE", [RCH_PROCESSING_EXTENDED_MESSAGE] = "RCH_PROCESSING_EXTENDED_MESSAGE", [RCH_REQUESTING_CHUNK] = "RCH_REQUESTING_CHUNK", @@ -269,11 +267,11 @@ __maybe_unused static const char * const rch_state_names[] = { [RCH_REPORT_ERROR] = "RCH_REPORT_ERROR", }; -__maybe_unused static const char * const tch_state_names[] = { - [TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE] - = "TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE", - [TCH_WAIT_FOR_TRANSMISSION_COMPLETE] - = "TCH_WAIT_FOR_TRANSMISSION_COMPLETE", +__maybe_unused static const char *const tch_state_names[] = { + [TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE] = + "TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE", + [TCH_WAIT_FOR_TRANSMISSION_COMPLETE] = + "TCH_WAIT_FOR_TRANSMISSION_COMPLETE", [TCH_CONSTRUCT_CHUNKED_MESSAGE] = "TCH_CONSTRUCT_CHUNKED_MESSAGE", [TCH_SENDING_CHUNKED_MESSAGE] = "TCH_SENDING_CHUNKED_MESSAGE", [TCH_WAIT_CHUNK_REQUEST] = "TCH_WAIT_CHUNK_REQUEST", @@ -380,12 +378,12 @@ GEN_NOT_SUPPORTED(PRL_TX_SNK_START_AMS); GEN_NOT_SUPPORTED(RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER); #define RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER \ - RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER_NOT_SUPPORTED + RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER_NOT_SUPPORTED GEN_NOT_SUPPORTED(RCH_PASS_UP_MESSAGE); #define RCH_PASS_UP_MESSAGE RCH_PASS_UP_MESSAGE_NOT_SUPPORTED GEN_NOT_SUPPORTED(RCH_PROCESSING_EXTENDED_MESSAGE); #define RCH_PROCESSING_EXTENDED_MESSAGE \ - RCH_PROCESSING_EXTENDED_MESSAGE_NOT_SUPPORTED + RCH_PROCESSING_EXTENDED_MESSAGE_NOT_SUPPORTED GEN_NOT_SUPPORTED(RCH_REQUESTING_CHUNK); #define RCH_REQUESTING_CHUNK RCH_REQUESTING_CHUNK_NOT_SUPPORTED GEN_NOT_SUPPORTED(RCH_WAITING_CHUNK); @@ -395,13 +393,13 @@ GEN_NOT_SUPPORTED(RCH_REPORT_ERROR); GEN_NOT_SUPPORTED(TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE); #define TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE \ - TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE_NOT_SUPPORTED + TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE_NOT_SUPPORTED GEN_NOT_SUPPORTED(TCH_WAIT_FOR_TRANSMISSION_COMPLETE); #define TCH_WAIT_FOR_TRANSMISSION_COMPLETE \ - TCH_WAIT_FOR_TRANSMISSION_COMPLETE_NOT_SUPPORTED + TCH_WAIT_FOR_TRANSMISSION_COMPLETE_NOT_SUPPORTED GEN_NOT_SUPPORTED(TCH_CONSTRUCT_CHUNKED_MESSAGE); #define TCH_CONSTRUCT_CHUNKED_MESSAGE \ - TCH_CONSTRUCT_CHUNKED_MESSAGE_NOT_SUPPORTED + TCH_CONSTRUCT_CHUNKED_MESSAGE_NOT_SUPPORTED GEN_NOT_SUPPORTED(TCH_SENDING_CHUNKED_MESSAGE); #define TCH_SENDING_CHUNKED_MESSAGE TCH_SENDING_CHUNKED_MESSAGE_NOT_SUPPORTED GEN_NOT_SUPPORTED(TCH_WAIT_CHUNK_REQUEST); @@ -435,7 +433,7 @@ static void print_current_prl_tx_state(const int port) { if (prl_debug_level >= DEBUG_LEVEL_3) CPRINTS("C%d: %s", port, - prl_tx_state_names[prl_tx_get_state(port)]); + prl_tx_state_names[prl_tx_get_state(port)]); } /* Set the hard reset statemachine to a new state. */ @@ -456,7 +454,7 @@ static void print_current_prl_hr_state(const int port) { if (prl_debug_level >= DEBUG_LEVEL_3) CPRINTS("C%d: %s", port, - prl_hr_state_names[prl_hr_get_state(port)]); + prl_hr_state_names[prl_hr_get_state(port)]); } /* Set the chunked Rx statemachine to a new state. */ @@ -477,8 +475,7 @@ test_export_static enum usb_rch_state rch_get_state(const int port) static void print_current_rch_state(const int port) { if (prl_debug_level >= DEBUG_LEVEL_3) - CPRINTS("C%d: %s", port, - rch_state_names[rch_get_state(port)]); + CPRINTS("C%d: %s", port, rch_state_names[rch_get_state(port)]); } #endif /* CONFIG_USB_PD_EXTENDED_MESSAGES */ @@ -503,12 +500,10 @@ test_export_static enum usb_tch_state tch_get_state(const int port) static void print_current_tch_state(const int port) { if (prl_debug_level >= DEBUG_LEVEL_3) - CPRINTS("C%d: %s", port, - tch_state_names[tch_get_state(port)]); + CPRINTS("C%d: %s", port, tch_state_names[tch_get_state(port)]); } #endif /* CONFIG_USB_PD_EXTENDED_MESSAGES */ - timestamp_t prl_get_tcpc_tx_success_ts(int port) { return tcpc_tx_success_ts[port]; @@ -578,10 +573,8 @@ static void prl_init(int port) prl_hr[port].flags = 0; - for (i = 0; i < NUM_SOP_STAR_TYPES; i++) { - prl_rx[port].msg_id[i] = -1; - prl_tx[port].msg_id_counter[i] = 0; - } + for (i = 0; i < NUM_SOP_STAR_TYPES; i++) + prl_reset_msg_ids(port, i); pd_timer_disable_range(port, PR_TIMER_RANGE); @@ -605,9 +598,8 @@ bool prl_is_busy(int port) { #ifdef CONFIG_USB_PD_EXTENDED_MESSAGES return rch_get_state(port) != - RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER || - tch_get_state(port) != - TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE; + RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER || + tch_get_state(port) != TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE; #else return false; #endif /* CONFIG_USB_PD_EXTENDED_MESSAGES */ @@ -626,9 +618,8 @@ void prl_hard_reset_complete(int port) task_wake(PD_PORT_TO_TASK_ID(port)); } -void prl_send_ctrl_msg(int port, - enum tcpci_msg_type type, - enum pd_ctrl_msg_type msg) +void prl_send_ctrl_msg(int port, enum tcpci_msg_type type, + enum pd_ctrl_msg_type msg) { pdmsg[port].xmit_type = type; pdmsg[port].msg_type = msg; @@ -646,9 +637,8 @@ void prl_send_ctrl_msg(int port, task_wake(PD_PORT_TO_TASK_ID(port)); } -void prl_send_data_msg(int port, - enum tcpci_msg_type type, - enum pd_data_msg_type msg) +void prl_send_data_msg(int port, enum tcpci_msg_type type, + enum pd_data_msg_type msg) { pdmsg[port].xmit_type = type; pdmsg[port].msg_type = msg; @@ -666,9 +656,8 @@ void prl_send_data_msg(int port, } #ifdef CONFIG_USB_PD_EXTENDED_MESSAGES -void prl_send_ext_data_msg(int port, - enum tcpci_msg_type type, - enum pd_ext_msg_type msg) +void prl_send_ext_data_msg(int port, enum tcpci_msg_type type, + enum pd_ext_msg_type msg) { pdmsg[port].xmit_type = type; pdmsg[port].msg_type = msg; @@ -736,11 +725,9 @@ void prl_run(int port, int evt, int en) * reset. */ if (prl_hr_get_state(port) == PRL_HR_WAIT_FOR_REQUEST) { - /* Run Protocol Layer Message Reception */ prl_rx_wait_for_phy_message(port, evt); - if (IS_ENABLED(CONFIG_USB_PD_EXTENDED_MESSAGES)) { /* * Run RX Chunked state machine after prl_rx. @@ -772,8 +759,7 @@ void prl_run(int port, int evt, int en) } } -void prl_set_rev(int port, enum tcpci_msg_type type, - enum pd_rev_type rev) +void prl_set_rev(int port, enum tcpci_msg_type type, enum pd_rev_type rev) { /* We only store revisions for SOP* types. */ ASSERT(type < NUM_SOP_STAR_TYPES); @@ -789,6 +775,12 @@ enum pd_rev_type prl_get_rev(int port, enum tcpci_msg_type type) return pdmsg[port].rev[type]; } +void prl_reset_msg_ids(int port, enum tcpci_msg_type type) +{ + prl_tx[port].msg_id_counter[type] = 0; + prl_rx[port].msg_id[type] = -1; +} + static void prl_copy_msg_to_buffer(int port) { /* @@ -814,7 +806,7 @@ static void prl_copy_msg_to_buffer(int port) /* Copy message to chunked buffer */ memset((uint8_t *)pdmsg[port].tx_chk_buf, 0, CHK_BUF_SIZE_BYTES); memcpy((uint8_t *)pdmsg[port].tx_chk_buf, (uint8_t *)tx_emsg[port].buf, - tx_emsg[port].len); + tx_emsg[port].len); /* * Pad length to 4-byte boundary and * convert to number of 32-bit objects. @@ -828,8 +820,8 @@ static void prl_copy_msg_to_buffer(int port) static __maybe_unused int pdmsg_xmit_type_is_rev30(const int port) { if (IS_ENABLED(CONFIG_USB_PD_REV30)) - return ((pdmsg[port].xmit_type < NUM_SOP_STAR_TYPES) - && (prl_get_rev(port, pdmsg[port].xmit_type) == PD_REV30)); + return ((pdmsg[port].xmit_type < NUM_SOP_STAR_TYPES) && + (prl_get_rev(port, pdmsg[port].xmit_type) == PD_REV30)); else return 0; } @@ -846,8 +838,7 @@ static void prl_tx_phy_layer_reset_entry(const int port) { print_current_prl_tx_state(port); - if (IS_ENABLED(CONFIG_USB_CTVPD) - || IS_ENABLED(CONFIG_USB_VPD)) { + if (IS_ENABLED(CONFIG_USB_CTVPD) || IS_ENABLED(CONFIG_USB_VPD)) { vpd_rx_enable(pd_is_connected(port)); } else { /* Note: can't clear PHY messages due to TCPC architecture */ @@ -884,7 +875,7 @@ static void prl_tx_wait_for_message_request_run(const int port) if (IS_ENABLED(CONFIG_USB_PD_REV30) && is_sop_rev30(port) && pe_in_local_ams(port)) { if (PRL_TX_CHK_FLAG(port, PRL_FLAGS_SINK_NG | - PRL_FLAGS_WAIT_SINK_OK)) { + PRL_FLAGS_WAIT_SINK_OK)) { /* * If we are already in an AMS then allow the * multi-message AMS to continue, even if we @@ -915,7 +906,7 @@ static void prl_tx_wait_for_message_request_run(const int port) * Soft Reset Message Message pending */ if ((pdmsg[port].msg_type == PD_CTRL_SOFT_RESET) && - (tx_emsg[port].len == 0)) { + (tx_emsg[port].len == 0)) { set_state_prl_tx(port, PRL_TX_LAYER_RESET_FOR_TRANSMIT); } /* @@ -1031,16 +1022,14 @@ static void prl_tx_layer_reset_for_transmit_entry(const int port) * From section 6.3.13 Soft Reset Message in the USB PD 3.0 * v2.0 spec, Soft_Reset Message Shall be targeted at a * specific entity depending on the type of SOP* Packet used. - */ - prl_tx[port].msg_id_counter[pdmsg[port].xmit_type] = 0; - - /* + * + * * From section 6.11.2.3.2, the MessageID should be cleared * from the PRL_Rx_Layer_Reset_for_Receive state. However, we * don't implement a full state machine for PRL RX states so * clear the MessageID here. */ - prl_rx[port].msg_id[pdmsg[port].xmit_type] = -1; + prl_reset_msg_ids(port, pdmsg[port].xmit_type); } } @@ -1063,23 +1052,21 @@ static uint32_t get_sop_star_header(const int port) #endif /* SOP vs SOP'/SOP" headers are different. Replace fields as needed */ - return PD_HEADER( - pdmsg[port].msg_type, - is_sop_packet ? - pd_get_power_role(port) : tc_get_cable_plug(port), - is_sop_packet ? - pd_get_data_role(port) : 0, - prl_tx[port].msg_id_counter[pdmsg[port].xmit_type], - pdmsg[port].data_objs, - pdmsg[port].rev[pdmsg[port].xmit_type], - ext); + return PD_HEADER(pdmsg[port].msg_type, + is_sop_packet ? pd_get_power_role(port) : + tc_get_cable_plug(port), + is_sop_packet ? pd_get_data_role(port) : 0, + prl_tx[port].msg_id_counter[pdmsg[port].xmit_type], + pdmsg[port].data_objs, + pdmsg[port].rev[pdmsg[port].xmit_type], ext); } static void prl_tx_construct_message(const int port) { /* The header is unused for hard reset, etc. */ const uint32_t header = pdmsg[port].xmit_type < NUM_SOP_STAR_TYPES ? - get_sop_star_header(port) : 0; + get_sop_star_header(port) : + 0; /* Save SOP* so the correct msg_id_counter can be incremented */ prl_tx[port].last_xmit_type = pdmsg[port].xmit_type; @@ -1199,7 +1186,7 @@ static void prl_tx_src_pending_run(const int port) * SinkTxTimer timeout */ if ((tx_emsg[port].len == 0) && - (pdmsg[port].msg_type == PD_CTRL_SOFT_RESET)) { + (pdmsg[port].msg_type == PD_CTRL_SOFT_RESET)) { set_state_prl_tx(port, PRL_TX_LAYER_RESET_FOR_TRANSMIT); } /* Message pending (except Soft Reset) & @@ -1259,7 +1246,7 @@ static void prl_tx_snk_pending_run(const int port) * Rp = SinkTxOk */ if ((pdmsg[port].msg_type == PD_CTRL_SOFT_RESET) && - (tx_emsg[port].len == 0)) { + (tx_emsg[port].len == 0)) { set_state_prl_tx(port, PRL_TX_LAYER_RESET_FOR_TRANSMIT); } /* @@ -1305,7 +1292,7 @@ static void prl_hr_wait_for_request_entry(const int port) static void prl_hr_wait_for_request_run(const int port) { if (PRL_HR_CHK_FLAG(port, PRL_FLAGS_PE_HARD_RESET | - PRL_FLAGS_PORT_PARTNER_HARD_RESET)) + PRL_FLAGS_PORT_PARTNER_HARD_RESET)) set_state_prl_hr(port, PRL_HR_RESET_LAYER); } @@ -1327,13 +1314,11 @@ static void prl_hr_reset_layer_entry(const int port) /* Hard reset resets messageIDCounters for all TX types */ for (i = 0; i < NUM_SOP_STAR_TYPES; i++) { - prl_rx[port].msg_id[i] = -1; - prl_tx[port].msg_id_counter[i] = 0; + prl_reset_msg_ids(port, i); } /* Disable RX */ - if (IS_ENABLED(CONFIG_USB_CTVPD) || - IS_ENABLED(CONFIG_USB_VPD)) + if (IS_ENABLED(CONFIG_USB_CTVPD) || IS_ENABLED(CONFIG_USB_VPD)) vpd_rx_enable(0); else tcpm_set_rx_enable(port, 0); @@ -1396,8 +1381,7 @@ static void prl_hr_wait_for_phy_hard_reset_complete_entry(const int port) print_current_prl_hr_state(port); /* Start HardResetCompleteTimer */ - pd_timer_enable(port, PR_TIMER_HARD_RESET_COMPLETE, - PD_T_PS_HARD_RESET); + pd_timer_enable(port, PR_TIMER_HARD_RESET_COMPLETE, PD_T_PS_HARD_RESET); } static void prl_hr_wait_for_phy_hard_reset_complete_run(const int port) @@ -1455,11 +1439,11 @@ static void copy_chunk_to_ext(int port) { /* Calculate number of bytes */ pdmsg[port].num_bytes_received = - (PD_HEADER_CNT(rx_emsg[port].header) * 4); + (PD_HEADER_CNT(rx_emsg[port].header) * 4); /* Copy chunk into extended message */ memcpy((uint8_t *)rx_emsg[port].buf, (uint8_t *)pdmsg[port].rx_chk_buf, - pdmsg[port].num_bytes_received); + pdmsg[port].num_bytes_received); /* Set extended message length */ rx_emsg[port].len = pdmsg[port].num_bytes_received; @@ -1491,10 +1475,10 @@ static void rch_wait_for_message_from_protocol_layer_run(const int port) * Are we communicating with a PD3.0 device and is * this an extended message? */ - if (pdmsg_xmit_type_is_rev30(port) - && PD_HEADER_EXT(rx_emsg[port].header)) { + if (pdmsg_xmit_type_is_rev30(port) && + PD_HEADER_EXT(rx_emsg[port].header)) { uint16_t exhdr = - GET_EXT_HEADER(*pdmsg[port].rx_chk_buf); + GET_EXT_HEADER(*pdmsg[port].rx_chk_buf); uint8_t chunked = PD_EXT_HEADER_CHUNKED(exhdr); /* @@ -1502,7 +1486,7 @@ static void rch_wait_for_message_from_protocol_layer_run(const int port) * (Chunking = 1 & Chunked = 1) */ if ((RCH_CHK_FLAG(port, PRL_FLAGS_CHUNKING)) && - chunked) { + chunked) { /* * RCH_Processing_Extended_Message first chunk * entry processing embedded here @@ -1524,7 +1508,7 @@ static void rch_wait_for_message_from_protocol_layer_run(const int port) * (Chunking = 0 & Chunked = 0)) */ else if (!RCH_CHK_FLAG(port, PRL_FLAGS_CHUNKING) && - !chunked) { + !chunked) { /* Copy chunk to extended buffer */ copy_chunk_to_ext(port); set_state_rch(port, RCH_PASS_UP_MESSAGE); @@ -1602,8 +1586,8 @@ static void rch_processing_extended_message_run(const int port) byte_num = PD_MAX_EXTENDED_MSG_CHUNK_LEN; /* Make sure extended message buffer does not overflow */ - if (pdmsg[port].num_bytes_received + - byte_num > EXTENDED_BUFFER_SIZE) { + if (pdmsg[port].num_bytes_received + byte_num > + EXTENDED_BUFFER_SIZE) { rch[port].error = ERR_RCH_CHUNKED; set_state_rch(port, RCH_REPORT_ERROR); return; @@ -1612,9 +1596,8 @@ static void rch_processing_extended_message_run(const int port) /* Append data */ /* Add 2 to chk_buf to skip over extended message header */ memcpy(((uint8_t *)rx_emsg[port].buf + - pdmsg[port].num_bytes_received), - (uint8_t *)pdmsg[port].rx_chk_buf + 2, - byte_num); + pdmsg[port].num_bytes_received), + (uint8_t *)pdmsg[port].rx_chk_buf + 2, byte_num); /* increment chunk number expected */ pdmsg[port].chunk_number_expected++; /* adjust num bytes received */ @@ -1623,7 +1606,7 @@ static void rch_processing_extended_message_run(const int port) /* Was that the last chunk? */ if (pdmsg[port].num_bytes_received >= data_size) { rx_emsg[port].len = pdmsg[port].num_bytes_received; - /* Pass Message to Policy Engine */ + /* Pass Message to Policy Engine */ set_state_rch(port, RCH_PASS_UP_MESSAGE); } /* @@ -1652,11 +1635,11 @@ static void rch_requesting_chunk_entry(const int port) * Send Chunk Request to Protocol Layer * with chunk number = Chunk_Number_Expected */ - pdmsg[port].tx_chk_buf[0] = PD_EXT_HEADER( - pdmsg[port].chunk_number_expected, - 1, /* Request Chunk */ - 0 /* Data Size */ - ); + pdmsg[port].tx_chk_buf[0] = + PD_EXT_HEADER(pdmsg[port].chunk_number_expected, 1, /* Request + Chunk */ + 0 /* Data Size */ + ); pdmsg[port].data_objs = 1; pdmsg[port].ext = 1; @@ -1827,16 +1810,15 @@ static void tch_wait_for_message_request_from_pe_run(const int port) * Discard the Message */ if (rch_get_state(port) != - RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER) { + RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER) { tch[port].error = ERR_TCH_XMIT; set_state_tch(port, TCH_REPORT_ERROR); } else { /* * Extended Message Request & Chunking */ - if (pdmsg_xmit_type_is_rev30(port) - && pdmsg[port].ext - && TCH_CHK_FLAG(port, PRL_FLAGS_CHUNKING)) { + if (pdmsg_xmit_type_is_rev30(port) && pdmsg[port].ext && + TCH_CHK_FLAG(port, PRL_FLAGS_CHUNKING)) { /* * NOTE: TCH_Prepare_To_Send_Chunked_Message * embedded here. @@ -1855,7 +1837,8 @@ static void tch_wait_for_message_request_from_pe_run(const int port) /* Pass Message to Protocol Layer */ PRL_TX_SET_FLAG(port, PRL_FLAGS_MSG_XMIT); - set_state_tch(port, + set_state_tch( + port, TCH_WAIT_FOR_TRANSMISSION_COMPLETE); } } @@ -1900,7 +1883,7 @@ static void tch_wait_for_transmission_complete_run(const int port) * the tx message was sent successfully. */ if (TCH_CHK_FLAG(port, PRL_FLAGS_MSG_RECEIVED) && - prl_tx[port].xmit_status != TCPC_TX_COMPLETE_SUCCESS) { + prl_tx[port].xmit_status != TCPC_TX_COMPLETE_SUCCESS) { TCH_CLR_FLAG(port, PRL_FLAGS_MSG_RECEIVED); set_state_tch(port, TCH_MESSAGE_RECEIVED); return; @@ -1937,8 +1920,9 @@ static void tch_construct_chunked_message_entry(const int port) num = PD_MAX_EXTENDED_MSG_CHUNK_LEN; /* Set the chunks extended header */ - *ext_hdr = PD_EXT_HEADER(pdmsg[port].chunk_number_to_send, - 0, /* Chunk Request */ + *ext_hdr = PD_EXT_HEADER(pdmsg[port].chunk_number_to_send, 0, /* Chunk + Request + */ tx_emsg[port].len); /* Copy the message chunk into chk_buf */ @@ -2036,7 +2020,8 @@ static void tch_wait_chunk_request_run(const int port) */ if (PD_EXT_HEADER_CHUNK_NUM(exthdr) == pdmsg[port].chunk_number_to_send) { - set_state_tch(port, + set_state_tch( + port, TCH_CONSTRUCT_CHUNKED_MESSAGE); } /* @@ -2111,8 +2096,6 @@ static void tch_message_sent_entry(const int port) return; } - - set_state_tch(port, TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE); } @@ -2136,7 +2119,6 @@ static void tch_report_error_entry(const int port) return; } - set_state_tch(port, TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE); } #endif /* CONFIG_USB_PD_EXTENDED_MESSAGES */ @@ -2176,7 +2158,7 @@ static void prl_rx_wait_for_phy_message(const int port, int evt) /* dump received packet content (only dump ping at debug level MAX) */ if ((prl_debug_level >= DEBUG_LEVEL_2 && type != PD_CTRL_PING) || - prl_debug_level >= DEBUG_LEVEL_3) { + prl_debug_level >= DEBUG_LEVEL_3) { int p; ccprintf("C%d: RECV %04x/%d ", port, header, cnt); @@ -2189,8 +2171,7 @@ static void prl_rx_wait_for_phy_message(const int port, int evt) * Ignore messages sent to the cable from our * port partner if we aren't Vconn powered device. */ - if (!IS_ENABLED(CONFIG_USB_CTVPD) && - !IS_ENABLED(CONFIG_USB_VPD) && + if (!IS_ENABLED(CONFIG_USB_CTVPD) && !IS_ENABLED(CONFIG_USB_VPD) && PD_HEADER_GET_SOP(header) != TCPCI_MSG_SOP && PD_HEADER_PROLE(header) == PD_PLUG_FROM_DFP_UFP) return; @@ -2214,19 +2195,17 @@ static void prl_rx_wait_for_phy_message(const int port, int evt) /* Handle incoming soft reset as special case */ if (cnt == 0 && type == PD_CTRL_SOFT_RESET) { - /* Clear MessageIdCounter */ - prl_tx[port].msg_id_counter[prl_rx[port].sop] = 0; - /* Clear stored MessageID value */ - prl_rx[port].msg_id[prl_rx[port].sop] = -1; + /* Clear MessageIdCounter and stored MessageID value. */ + prl_reset_msg_ids(port, prl_rx[port].sop); /* Soft Reset occurred */ set_state_prl_tx(port, PRL_TX_PHY_LAYER_RESET); if (IS_ENABLED(CONFIG_USB_PD_EXTENDED_MESSAGES)) { set_state_rch(port, - RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER); + RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER); set_state_tch(port, - TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE); + TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE); } /* @@ -2286,7 +2265,7 @@ static void prl_rx_wait_for_phy_message(const int port, int evt) * tch_wait_for_message_request_from_pe has been run */ else if (tch_get_state(port) != - TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE || + TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE || TCH_CHK_FLAG(port, PRL_FLAGS_MSG_XMIT)) { /* NOTE: RTR_TX_CHUNKS State embedded here. */ /* |