/* 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. */ /* USB Protocol Layer module */ #ifndef __CROS_EC_USB_PRL_H #define __CROS_EC_USB_PRL_H #include "common.h" #include "timer.h" #include "usb_pd.h" #include "usb_pd_tcpm.h" #include "usb_sm.h" /** * Returns TX success time stamp. * * @param port USB-C port number * @return the time stamp of TCPC tx success. **/ timestamp_t prl_get_tcpc_tx_success_ts(int port); /** * Returns true if Protocol Layer State Machine is in run mode * * @param port USB-C port number * @return 1 if state machine is running, else 0 */ int prl_is_running(int port); /** * Returns true if the Protocol Layer State Machine is in the * process of transmitting or receiving chunked messages. * * @param port USB-C port number * @return true if sending or receiving a chunked message, else false */ bool prl_is_busy(int port); /** * Sets the debug level for the PRL layer * * @param level debug level */ void prl_set_debug_level(enum debug_level level); /** * Resets the Protocol Layer state machine but does not reset the stored PD * revisions of the partners. * * @param port USB-C port number */ void prl_reset_soft(int port); /** * resets the stored pd revisions for each sop type to their default value, the * highest revision supported by this implementation. per pd r3.0 v2.0, * ss6.2.1.1.5, this should only happen upon detach, hard reset, or error * recovery. * * @param port USB-C port number */ void prl_set_default_pd_revision(int port); /** * Runs the Protocol Layer State Machine * * @param port USB-C port number * @param evt system event, ie: PD_EVENT_RX * @param en 0 to disable the machine, 1 to enable the machine */ void prl_run(int port, int evt, int en); /** * Set the PD revision * * @param port USB-C port number * @param type port address * @param rev revision */ void prl_set_rev(int port, enum tcpci_msg_type type, enum pd_rev_type rev); /** * Get the PD revision * * @param port USB-C port number * @param type port address * @return pd rev */ enum pd_rev_type prl_get_rev(int port, enum tcpci_msg_type type); /** * Reset Tx and Rx message IDs for the specified partner to their initial * values. * * @param port USB-C port number * @param type Transmit type */ void prl_reset_msg_ids(int port, enum tcpci_msg_type type); /** * Sends a PD control message * * @param port USB-C port number * @param type Transmit type * @param msg Control message type */ void prl_send_ctrl_msg(int port, enum tcpci_msg_type type, enum pd_ctrl_msg_type msg); /** * Sends a PD data message * * @param port USB-C port number * @param type Transmit type * @param msg Data message type */ void prl_send_data_msg(int port, enum tcpci_msg_type type, enum pd_data_msg_type msg); /** * Sends a PD extended data message * * @param port USB-C port number * @param type Transmit type * @param msg Extended data message type */ void prl_send_ext_data_msg(int port, enum tcpci_msg_type type, enum pd_ext_msg_type msg); /** * Informs the Protocol Layer that a hard reset has completed * * @param port USB-C port number */ void prl_hard_reset_complete(int port); /** * Policy Engine calls this function to execute a hard reset. * * @param port USB-C port number */ void prl_execute_hard_reset(int port); /** * Enables or disables checking the data role on incoming messages. * * @param port USB-C port number * @param enable True to enable checking, false to disable checking */ void prl_set_data_role_check(int port, bool enable); #endif /* __CROS_EC_USB_PRL_H */