/*
 * Copyright 2022 The Chromium OS Authors
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @file
 * @brief USBC Power Delivery API used for USBC drivers
 *
 * The information in this file was taken from the USB PD
 * Specification Revision 3.0, Version 2.0
 */

#ifndef ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_PD_H_
#define ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_PD_H_

/**
 * @brief USB Power Delivery
 * @defgroup usb_power_delivery USB Power Delivery
 * @ingroup io_interfaces
 * @{
 */

#include <zephyr/types.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Maximum length of a non-Extended Message in bytes.
 *	  See Table 6-75 Value Parameters
 *	  Parameter Name: MaxExtendedMsgLegacyLen
 */
#define PD_MAX_EXTENDED_MSG_LEGACY_LEN   26

/**
 * @brief Maximum length of an Extended Message in bytes.
 *	  See Table 6-75 Value Parameters
 *	  Parameter Name: MaxExtendedMsgLen
 */
#define PD_MAX_EXTENDED_MSG_LEN    260

/**
 * @brief Maximum length of a Chunked Message in bytes.
 *	  When one of both Port Partners do not support Extended
 *	  Messages of Data Size greater than PD_MAX_EXTENDED_MSG_LEGACY_LEN
 *	  then the Protocol Layer supports a Chunking mechanism to
 *	  break larger Messages into smaller Chunks of size
 *	  PD_MAX_EXTENDED_MSG_CHUNK_LEN.
 *	  See Table 6-75 Value Parameters
 *	  Parameter Name: MaxExtendedMsgChunkLen
 */
#define PD_MAX_EXTENDED_MSG_CHUNK_LEN    26

/**
 * @brief Minimum time a sink shall wait for a Source_Capabilities message
 *	  before sending a Hard Reset
 *	  See Table 6-61 Time Values
 *	  Parameter Name: tTypeCSinkWaitCap
 */
#define PD_T_TYPEC_SINK_WAIT_CAP_MIN_MS 310

/**
 * @brief Minimum time a sink shall wait for a Source_Capabilities message
 *	  before sending a Hard Reset
 *	  See Table 6-61 Time Values
 *	  Parameter Name: tTypeCSinkWaitCap
 */
#define PD_T_TYPEC_SINK_WAIT_CAP_MAX_MS 620

/**
 * @brief VBUS maximum safe operating voltage at "zero volts".
 *	  See Table 7-24 Common Source/Sink Electrical Parameters
 *	  Parameter Name: vSafe0V
 */
#define PD_V_SAFE_0V_MAX_MV 800

/**
 * @brief VBUS minimum safe operating voltage at 5V.
 *	  See Table 7-24 Common Source/Sink Electrical Parameters
 *	  Parameter Name: vSafe5V
 */
#define PD_V_SAFE_5V_MIN_MV 4750

/**
 * @brief Time to reach PD_V_SAFE_0V_MV max in milliseconds.
 *	  See Table 7-24 Common Source/Sink Electrical Parameters
 *	  Parameter Name: tSafe0V
 */
#define PD_T_SAFE_0V_MAX_MS  650

/**
 * @brief Time to reach PD_V_SAFE_5V_MV max in milliseconds.
 *	  See Table 7-24 Common Source/Sink Electrical Parameters
 *	  Parameter Name: tSafe5V
 */
#define PD_T_SAFE_5V_MAX_MS  275

/**
 * @brief Convert bytes to PD Header data object count, where a
 *	  data object is 4-bytes.
 *
 * @param c number of bytes to convert
 */
#define PD_CONVERT_BYTES_TO_PD_HEADER_COUNT(c) ((c) >> 2)

/**
 * @brief Convert PD Header data object count to bytes
 *
 * @param c number of PD Header data objects
 */
#define PD_CONVERT_PD_HEADER_COUNT_TO_BYTES(c) ((c) << 2)

/**
 * @brief Build a PD message header
 *	  See Table 6-1 Message Header
 */
union pd_header {
	struct {
		/** Type of message */
		uint16_t message_type : 5;
		/** Port Data role */
		uint16_t port_data_role : 1;
		/** Specification Revision */
		uint16_t specification_revision : 2;
		/** Port Power Role */
		uint16_t port_power_role : 1;
		/** Message ID */
		uint16_t message_id : 3;
		/** Number of Data Objects */
		uint16_t number_of_data_objects : 3;
		/** Extended Message */
		uint16_t extended : 1;
	};
	uint16_t raw_value;
};

/**
 * @brief Build an extended message header
 *	  See Table 6-3 Extended Message Header
 */
union pd_ext_header {
	struct {
		/** Number of total bytes in data block */
		uint16_t data_size : 9;
		/** Reserved */
		uint16_t reserved0 : 1;
		/** 1 for a chunked message, else 0 */
		uint16_t request_chunk : 1;
		/** Chunk number when chkd = 1, else 0 */
		uint16_t chunk_number : 4;
		/** 1 for chunked messages */
		uint16_t chunked : 1;
	};
	/** Raw PD Ext Header value */
	uint16_t raw_value;
};

/**
 * PDO - Power Data Object
 * RDO - Request Data Object
 */

/**
 * @brief Power Data Object Source Type
 *	  Table 6-7 Power Data Object
 */
enum pdo_src_type {
	/** Fixed supply (Vmin = Vmax) */
	PDO_FIXED       = 0,
	/** Battery */
	PDO_BATTERY     = 1,
	/** Variable Supply (non-Battery) */
	PDO_VARIABLE    = 2,
	/** Augmented Power Data Object (APDO) */
	PDO_AUGMENTED   = 3
};

/**
 * @brief Convert milliamps to Fixed PDO Current in 10mA units.
 *
 * @param c Current in milliamps
 */
#define PD_CONVERT_MA_TO_FIXED_PDO_CURRENT(c) ((c) / 10)

/**
 * @brief Convert millivolts to Fixed PDO Voltage in 50mV units
 *
 * @param v Voltage in millivolts
 */
#define PD_CONVERT_MV_TO_FIXED_PDO_VOLTAGE(v) ((v) / 50)

/**
 * @brief Convert a Fixed PDO Current from 10mA units to milliamps.
 *
 * @param c Fixed PDO current in 10mA units.
 */
#define PD_CONVERT_FIXED_PDO_CURRENT_TO_MA(c) ((c) * 10)

/**
 * @brief Convert a Fixed PDO Voltage from 50mV units to millivolts.
 *	  Used for converting pd_fixed_supply_pdo_source.voltage and
 *	  pd_fixed_supply_pdo_sink.voltage
 *
 * @param v Fixed PDO voltage in 50mV units.
 */
#define PD_CONVERT_FIXED_PDO_VOLTAGE_TO_MV(v) ((v) * 50)

/**
 * @brief Create a Fixed Supply PDO Source value
 *	  See Table 6-9 Fixed Supply PDO - Source
 */
union pd_fixed_supply_pdo_source {
	struct {
		/** Maximum Current in 10mA units */
		uint32_t max_current : 10;
		/** Voltage in 50mV units */
		uint32_t voltage : 10;
		/** Peak Current */
		uint32_t peak_current : 2;
		/** Reserved – Shall be set to zero. */
		uint32_t reserved0 : 2;
		/** Unchunked Extended Messages Supported */
		uint32_t unchunked_ext_msg_supported : 1;
		/** Dual-Role Data */
		uint32_t dual_role_data : 1;
		/** USB Communications Capable */
		uint32_t usb_comms_capable : 1;
		/** Unconstrained Power */
		uint32_t unconstrained_power : 1;
		/** USB Suspend Supported */
		uint32_t usb_suspend_supported : 1;
		/** Dual-Role Power */
		uint32_t dual_role_power : 1;
		/** Fixed supply. SET TO PDO_FIXED  */
		enum pdo_src_type type : 2;
	};
	/** Raw PDO value */
	uint32_t raw_value;
};

/**
 * @brief Fast Role Swap Required for USB Type-C current
 */
enum pd_frs_type {
	/** Fast Swap not supported */
	FRS_NOT_SUPPORTED,
	/** Default USB Power */
	FRS_DEFAULT_USB_POWER,
	/** 1.5A @ 5V */
	FRS_1P5A_5V,
	/** 3.0A @ 5V */
	FRS_3P0A_5V
};

/**
 * @brief Create a Fixed Supply PDO Sink value
 *	  See Table 6-14 Fixed Supply PDO - Sink
 */
union pd_fixed_supply_pdo_sink {
	struct {
		/** Operational Current in 10mA units */
		uint32_t operational_current : 10;
		/** Voltage in 50mV units */
		uint32_t voltage : 10;
		/** Reserved – Shall be set to zero. */
		uint32_t reserved0 : 3;
		/** Fast Role Swap required USB Type-C Current */
		enum pd_frs_type frs_required : 2;
		/** Dual-Role Data */
		uint32_t dual_role_data : 1;
		/** USB Communications Capable */
		uint32_t usb_comms_capable : 1;
		/** Unconstrained Power */
		uint32_t unconstrained_power : 1;
		/** Higher Capability */
		uint32_t higher_capability : 1;
		/** Dual-Role Power */
		uint32_t dual_role_power : 1;
		/** Fixed supply. SET TO PDO_FIXED  */
		enum pdo_src_type type : 2;
	};
	/** Raw PDO value */
	uint32_t raw_value;
};

/**
 * @brief Convert milliamps to Variable PDO Current in 10ma units.
 *
 * @param c Current in milliamps
 */
#define PD_CONVERT_MA_TO_VARIABLE_PDO_CURRENT(c) ((c) / 10)

/**
 * @brief Convert millivolts to Variable PDO Voltage in 50mV units
 *
 * @param v Voltage in millivolts
 */
#define PD_CONVERT_MV_TO_VARIABLE_PDO_VOLTAGE(v) ((v) / 50)

/**
 * @brief Convert a Variable PDO Current from 10mA units to milliamps.
 *
 * @param c Variable PDO current in 10mA units.
 */
#define PD_CONVERT_VARIABLE_PDO_CURRENT_TO_MA(c) ((c) * 10)

/**
 * @brief Convert a Variable PDO Voltage from 50mV units to millivolts.
 *
 * @param v Variable PDO voltage in 50mV units.
 */
#define PD_CONVERT_VARIABLE_PDO_VOLTAGE_TO_MV(v) ((v) * 50)

/**
 * @brief Create a Variable Supply PDO Source value
 *	  See Table 6-11 Variable Supply (non-Battery) PDO - Source
 */
union pd_variable_supply_pdo_source {
	struct {
		/** Maximum Current in 10mA units */
		uint32_t max_current : 10;
		/** Minimum Voltage in 50mV units */
		uint32_t min_voltage : 10;
		/** Maximum Voltage in 50mV units */
		uint32_t max_voltage : 10;
		/** Variable supply. SET TO PDO_VARIABLE  */
		enum pdo_src_type type : 2;
	};
	/** Raw PDO value */
	uint32_t raw_value;
};

/**
 * @brief Create a Variable Supply PDO Sink value
 *	  See Table 6-15 Variable Supply (non-Battery) PDO - Sink
 */
union pd_variable_supply_pdo_sink {
	struct {
		/** operational Current in 10mA units */
		uint32_t operational_current : 10;
		/** Minimum Voltage in 50mV units */
		uint32_t min_voltage : 10;
		/** Maximum Voltage in 50mV units */
		uint32_t max_voltage : 10;
		/** Variable supply. SET TO PDO_VARIABLE  */
		enum pdo_src_type type : 2;
	};
	/** Raw PDO value */
	uint32_t raw_value;
};

/**
 * @brief Convert milliwatts to Battery PDO Power in 250mW units
 *
 * @param c Power in milliwatts
 */
#define PD_CONVERT_MW_TO_BATTERY_PDO_POWER(c) ((c) / 250)

/**
 * @brief Convert milliwatts to Battery PDO Voltage in 50mV units
 *
 * @param v Voltage in millivolts
 */
#define PD_CONVERT_MV_TO_BATTERY_PDO_VOLTAGE(v) ((v) / 50)

/**
 * @brief Convert a Battery PDO Power from 250mW units to milliwatts
 *
 * @param c Power in 250mW units.
 */
#define PD_CONVERT_BATTERY_PDO_POWER_TO_MW(c) ((c) * 250)

/**
 * @brief Convert a Battery PDO Voltage from 50mV units to millivolts
 *
 * @param v Voltage in 50mV units.
 */
#define PD_CONVERT_BATTERY_PDO_VOLTAGE_TO_MV(v) ((v) * 50)

/**
 * @brief Create a Battery Supply PDO Source value
 *	  See Table 6-12 Battery Supply PDO - Source
 */
union pd_battery_supply_pdo_source {
	struct {
		/** Maximum Allowable Power in 250mW units */
		uint32_t max_power : 10;
		/** Minimum Voltage in 50mV units */
		uint32_t min_voltage : 10;
		/** Maximum Voltage in 50mV units */
		uint32_t max_voltage : 10;
		/** Battery supply. SET TO PDO_BATTERY  */
		enum pdo_src_type type : 2;
	};
	/** Raw PDO value */
	uint32_t raw_value;
};

/**
 * @brief Create a Battery Supply PDO Sink value
 *	  See Table 6-16 Battery Supply PDO - Sink
 */
union pd_battery_supply_pdo_sink {
	struct {
		/** Operational Power in 250mW units */
		uint32_t operational_power : 10;
		/** Minimum Voltage in 50mV units */
		uint32_t min_voltage : 10;
		/** Maximum Voltage in 50mV units */
		uint32_t max_voltage : 10;
		/** Battery supply. SET TO PDO_BATTERY  */
		enum pdo_src_type type : 2;
	};
	/** Raw PDO value */
	uint32_t raw_value;
};

/**
 * @brief Convert milliamps to Augmented PDO Current in 50mA units
 *
 * @param c Current in milliamps
 */
#define PD_CONVERT_MA_TO_AUGMENTED_PDO_CURRENT(c) ((c) / 50)

/**
 * @brief Convert millivolts to Augmented PDO Voltage in 100mV units
 *
 * @param v Voltage in millivolts
 */
#define PD_CONVERT_MV_TO_AUGMENTED_PDO_VOLTAGE(v) ((v) / 100)

/**
 * @brief Convert an Augmented PDO Current from 50mA units to milliamps
 *
 * @param c Augmented PDO current in 50mA units.
 */
#define PD_CONVERT_AUGMENTED_PDO_CURRENT_TO_MA(c) ((c) * 50)

/**
 * @brief Convert an Augmented PDO Voltage from 100mV units to millivolts
 *
 * @param v Augmented PDO voltage in 100mV units.
 */
#define PD_CONVERT_AUGMENTED_PDO_VOLTAGE_TO_MV(v) ((v) * 100)

/**
 * @brief Create Augmented Supply PDO Source value
 *	  See Table 6-13 Programmable Power Supply APDO - Source
 */
union pd_augmented_supply_pdo_source {
	struct {
		/** Maximum Current in 50mA increments */
		uint32_t max_current : 7;
		/** Reserved – Shall be set to zero */
		uint32_t reserved0 : 1;
		/** Minimum Voltage in 100mV increments */
		uint32_t min_voltage : 8;
		/** Reserved – Shall be set to zero */
		uint32_t reserved1 : 1;
		/** Maximum Voltage in 100mV increments */
		uint32_t max_voltage : 8;
		/** Reserved – Shall be set to zero */
		uint32_t reserved2 : 2;
		/** PPS Power Limited */
		uint32_t pps_power_limited : 1;
		/**
		 * 00b – Programmable Power Supply
		 * 01b…11b - Reserved, Shall Not be used
		 * Setting as reserved because it defaults to 0 when not set.
		 */
		uint32_t reserved3 : 2;
		/** Augmented Power Data Object (APDO). SET TO PDO_AUGMENTED */
		enum pdo_src_type type : 2;
	};
	/** Raw PDO value */
	uint32_t raw_value;
};

/**
 * @brief Create Augmented Supply PDO Sink value
 *	  See Table 6-17 Programmable Power Supply APDO - Sink
 */
union pd_augmented_supply_pdo_sink {
	struct {
		/** Maximum Current in 50mA increments */
		uint32_t max_current : 7;
		/** Reserved – Shall be set to zero */
		uint32_t reserved0 : 1;
		/** Minimum Voltage in 100mV increments */
		uint32_t min_voltage : 8;
		/** Reserved – Shall be set to zero */
		uint32_t reserved1 : 1;
		/** Maximum Voltage in 100mV increments */
		uint32_t max_voltage : 8;
		/** Reserved – Shall be set to zero */
		uint32_t reserved2 : 3;
		/**
		 * 00b – Programmable Power Supply
		 * 01b…11b - Reserved, Shall Not be used
		 * Setting as reserved because it defaults to 0 when not set.
		 */
		uint32_t reserved3 : 2;
		/** Augmented Power Data Object (APDO). SET TO PDO_AUGMENTED */
		enum pdo_src_type type : 2;
	};
	/** Raw PDO value */
	uint32_t raw_value;
};

/**
 * @brief The Request Data Object (RDO) Shall be returned by the Sink making
 *	  a request for power.
 *	  See Section 6.4.2 Request Message
 */
union pd_rdo {
	/**
	 * @brief Create a Fixed RDO value
	 * See Table 6-19 Fixed and Variable Request Data Object
	 */
	struct {
		/**
		 * Operating Current 10mA units
		 * NOTE: If Give Back Flag is zero, this field is
		 *       the Maximum Operating Current.
		 *       If Give Back Flag is one, this field is
		 *       the Minimum Operating Current.
		 */
		uint32_t min_or_max_operating_current : 10;
		/** Operating current in 10mA units */
		uint32_t operating_current : 10;
		/** Reserved - Shall be set to zero. */
		uint32_t reserved0 : 3;
		/** Unchunked Extended Messages Supported */
		uint32_t unchunked_ext_msg_supported : 1;
		/** No USB Suspend */
		uint32_t no_usb_suspend : 1;
		/** USB Communications Capable */
		uint32_t usb_comm_capable : 1;
		/** Capability Mismatch */
		uint32_t cap_mismatch : 1;
		/** Give Back Flag */
		uint32_t giveback : 1;
		/** Object Position (000b is Reserved and Shall Not be used) */
		uint32_t object_pos : 3;
		/** Reserved - Shall be set to zero. */
		uint32_t reserved1 : 1;
	} fixed;

	/**
	 * @brief Create a Variable RDO value
	 * See Table 6-19 Fixed and Variable Request Data Object
	 */
	struct {
		/**
		 * Operating Current 10mA units
		 * NOTE: If Give Back Flag is zero, this field is
		 *       the Maximum Operating Current.
		 *       If Give Back Flag is one, this field is
		 *       the Minimum Operating Current.
		 */
		uint32_t min_or_max_operating_current : 10;
		/** Operating current in 10mA units */
		uint32_t operating_current : 10;
		/** Reserved - Shall be set to zero. */
		uint32_t reserved0 : 3;
		/** Unchunked Extended Messages Supported */
		uint32_t unchunked_ext_msg_supported : 1;
		/** No USB Suspend */
		uint32_t no_usb_suspend : 1;
		/** USB Communications Capable */
		uint32_t usb_comm_capable : 1;
		/** Capability Mismatch */
		uint32_t cap_mismatch : 1;
		/** Give Back Flag */
		uint32_t giveback : 1;
		/** Object Position (000b is Reserved and Shall Not be used) */
		uint32_t object_pos : 3;
		/** Reserved - Shall be set to zero. */
		uint32_t reserved1 : 1;
	} variable;

	/**
	 * @brief Create a Battery RDO value
	 *        See Table 6-20 Battery Request Data Object
	 */
	struct {
		/** Minimum Operating Power in 250mW units */
		uint32_t min_operating_power : 10;
		/** Operating power in 250mW units */
		uint32_t operating_power : 10;
		/** Reserved - Shall be set to zero. */
		uint32_t reserved0 : 3;
		/** Unchunked Extended Messages Supported */
		uint32_t unchunked_ext_msg_supported : 1;
		/** No USB Suspend */
		uint32_t no_usb_suspend : 1;
		/** USB Communications Capable */
		uint32_t usb_comm_capable : 1;
		/** Capability Mismatch */
		uint32_t cap_mismatch : 1;
		/** Give Back Flag */
		uint32_t giveback : 1;
		/** Object Position (000b is Reserved and Shall Not be used) */
		uint32_t object_pos : 3;
		/** Reserved - Shall be set to zero. */
		uint32_t reserved1 : 1;
	} battery;

	/**
	 * @brief Create an Augmented RDO value
	 *        See Table 6-22 Programmable Request Data Object
	 */
	struct {
		/** Operating Current 50mA units */
		uint32_t operating_current : 7;
		/** Reserved - Shall be set to zero. */
		uint32_t reserved0 : 2;
		/** Output Voltage in 20mV units */
		uint32_t output_voltage : 11;
		/** Reserved - Shall be set to zero. */
		uint32_t reserved1 : 3;
		/** Unchunked Extended Messages Supported */
		uint32_t unchunked_ext_msg_supported : 1;
		/** No USB Suspend */
		uint32_t no_usb_suspend : 1;
		/** USB Communications Capable */
		uint32_t usb_comm_capable : 1;
		/** Capability Mismatch */
		uint32_t cap_mismatch : 1;
		/** Reserved - Shall be set to zero */
		uint32_t reserved2 : 1;
		/** Object Position (000b is Reserved and Shall Not be used) */
		uint32_t object_pos : 3;
		/** Reserved - Shall be set to zero. */
		uint32_t reserved3 : 1;
	} augmented;
	/** Raw RDO value */
	uint32_t raw_value;
};

/**
 * @brief Protocol revision
 */
enum pd_rev_type {
	/** PD revision 1.0 */
	PD_REV10        = 0,
	/** PD revision 2.0 */
	PD_REV20        = 1,
	/** PD revision 3.0 */
	PD_REV30        = 2,
};

/**
 * @brief Power Delivery packet type
 *	  See USB Type-C Port Controller Interface Specification,
 *	  Revision 2.0, Version 1.2, Table 4-38 TRANSMIT Register Definition
 */
enum pd_packet_type {
	/** Port Partner message */
	PD_PACKET_SOP                   = 0,
	/** Cable Plug message */
	PD_PACKET_SOP_PRIME             = 1,
	/** Cable Plug message far end*/
	PD_PACKET_PRIME_PRIME           = 2,
	/** Currently undefined in the PD specification */
	PD_PACKET_DEBUG_PRIME           = 3,
	/** Currently undefined in the PD specification */
	PD_PACKET_DEBUG_PRIME_PRIME     = 4,
	/** Hard Reset message to the Port Partner */
	PD_PACKET_TX_HARD_RESET         = 5,
	/** Cable Reset message to the Cable */
	PD_PACKET_CABLE_RESET           = 6,
	/** BIST_MODE_2 message to the Port Partner */
	PD_PACKET_TX_BIST_MODE_2        = 7,

	/** USED ONLY FOR RECEPTION OF UNKNOWN MSG TYPES */
	PD_PACKET_MSG_INVALID           = 0xf
};

/**
 * @brief Control Message type
 *	  See Table 6-5 Control Message Types
 */
enum pd_ctrl_msg_type {
	/** 0 Reserved */

	/** GoodCRC Message */
	PD_CTRL_GOOD_CRC        = 1,
	/** GotoMin Message */
	PD_CTRL_GOTO_MIN        = 2,
	/** Accept Message */
	PD_CTRL_ACCEPT          = 3,
	/** Reject Message */
	PD_CTRL_REJECT          = 4,
	/** Ping Message */
	PD_CTRL_PING            = 5,
	/** PS_RDY Message */
	PD_CTRL_PS_RDY          = 6,
	/** Get_Source_Cap Message */
	PD_CTRL_GET_SOURCE_CAP  = 7,
	/** Get_Sink_Cap Message */
	PD_CTRL_GET_SINK_CAP    = 8,
	/** DR_Swap Message */
	PD_CTRL_DR_SWAP         = 9,
	/** PR_Swap Message */
	PD_CTRL_PR_SWAP         = 10,
	/** VCONN_Swap Message */
	PD_CTRL_VCONN_SWAP      = 11,
	/** Wait Message */
	PD_CTRL_WAIT            = 12,
	/** Soft Reset Message */
	PD_CTRL_SOFT_RESET      = 13,

	/** Used for REV 3.0 */

	/** Data_Reset Message */
	PD_CTRL_DATA_RESET              = 14,
	/** Data_Reset_Complete Message */
	PD_CTRL_DATA_RESET_COMPLETE     = 15,
	/** Not_Supported Message */
	PD_CTRL_NOT_SUPPORTED           = 16,
	/** Get_Source_Cap_Extended Message */
	PD_CTRL_GET_SOURCE_CAP_EXT      = 17,
	/** Get_Status Message */
	PD_CTRL_GET_STATUS              = 18,
	/** FR_Swap Message */
	PD_CTRL_FR_SWAP                 = 19,
	/** Get_PPS_Status Message */
	PD_CTRL_GET_PPS_STATUS          = 20,
	/** Get_Country_Codes Message */
	PD_CTRL_GET_COUNTRY_CODES       = 21,
	/** Get_Sink_Cap_Extended Message */
	PD_CTRL_GET_SINK_CAP_EXT        = 22

	/** 23-31 Reserved */
};

/**
 * @brief Data message type
 *	  See Table 6-6 Data Message Types
 */
enum pd_data_msg_type {
	/** 0 Reserved */

	/** Source_Capabilities Message */
	PD_DATA_SOURCE_CAP              = 1,
	/** Request Message */
	PD_DATA_REQUEST                 = 2,
	/** BIST Message */
	PD_DATA_BIST                    = 3,
	/** Sink Capabilities Message */
	PD_DATA_SINK_CAP                = 4,
	/** 5-14 Reserved for REV 2.0 */
	PD_DATA_BATTERY_STATUS          = 5,
	/** Alert Message */
	PD_DATA_ALERT                   = 6,
	/** Get Country Info Message */
	PD_DATA_GET_COUNTRY_INFO        = 7,

	/** 8-14 Reserved for REV 3.0 */

	/** Enter USB message */
	PD_DATA_ENTER_USB       = 8,
	/** Vendor Defined Message */
	PD_DATA_VENDOR_DEF      = 15,
};

/**
 * @brief Extended message type for REV 3.0
 *	  See Table 6-48 Extended Message Types
 */
enum pd_ext_msg_type {
	/** 0 Reserved */

	/** Source_Capabilities_Extended Message */
	PD_EXT_SOURCE_CAP               = 1,
	/** Status Message */
	PD_EXT_STATUS                   = 2,
	/** Get_Battery_Cap Message */
	PD_EXT_GET_BATTERY_CAP          = 3,
	/** Get_Battery_Status Message */
	PD_EXT_GET_BATTERY_STATUS       = 4,
	/** Battery_Capabilities Message */
	PD_EXT_BATTERY_CAP              = 5,
	/** Get_Manufacturer_Info Message */
	PD_EXT_GET_MANUFACTURER_INFO    = 6,
	/** Manufacturer_Info Message */
	PD_EXT_MANUFACTURER_INFO        = 7,
	/** Security_Request Message */
	PD_EXT_SECURITY_REQUEST         = 8,
	/** Security_Response Message */
	PD_EXT_SECURITY_RESPONSE        = 9,
	/** Firmware_Update_Request Message */
	PD_EXT_FIRMWARE_UPDATE_REQUEST  = 10,
	/** Firmware_Update_Response Message */
	PD_EXT_FIRMWARE_UPDATE_RESPONSE = 11,
	/** PPS_Status Message */
	PD_EXT_PPS_STATUS               = 12,
	/** Country_Codes Message */
	PD_EXT_COUNTRY_INFO             = 13,
	/** Country_Info Message */
	PD_EXT_COUNTRY_CODES            = 14,

	/*8 15-31 Reserved */
};

/**
 * @brief Active PD CC pin
 */
enum usbpd_cc_pin {
	/** PD is active on CC1 */
	USBPD_CC_PIN_1  = 0,
	/** PD is active on CC2 */
	USBPD_CC_PIN_2  = 1,
};

/**
 * @brief Power Delivery message
 */
struct pd_msg {
	/** Type of this packet */
	enum pd_packet_type type;
	/** Header of this message */
	union pd_header header;
	/** Length of bytes in data */
	uint32_t len;
	/** Message data */
	uint8_t data[PD_MAX_EXTENDED_MSG_LEN];
};

/**
 * @}
 */

#ifdef __cplusplus
}
#endif

#endif /* ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_PD_H_ */
