blob: f7bd974b21ae8d49fbbf4028ba8d637f0362e492 [file] [log] [blame]
/* Copyright 2020 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
* Thunderbolt-compatible mode header.
*/
#ifndef __CROS_EC_USB_PD_TBT_COMPAT_H
#define __CROS_EC_USB_PD_TBT_COMPAT_H
#include "usb_pd_vdo.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
* NOTE: Throughout the file, some of the bit fields in the structures are for
* information purpose, they might not be actually used in the current code.
* When appropriate, replace the bit fields in the structures with appropriate
* enums.
*/
/*
* Reference: USB Type-C cable and connector specification, Release 2.0
*/
/*****************************************************************************/
/*
* TBT3 Device Discover Identity Responses
*/
/*
* Table F-8 TBT3 Device Discover Identity VDO Responses
* -------------------------------------------------------------
* <31> : USB Communications Capable as USB Host
* 0b = No
* 1b = Yes
* <30> : USB Communications Capable as a USB Device
* 0b = No
* 1b = Yes
* <29:27> : Product Type (UFP)
* 001b = PDUSB Hub
* 010b = PDUSB Peripheral
* 101b = Alternate Mode Adapter (AMA)
* 110b = VCONN-Powered USB Device (VPD)
* <26> : Modal Operation Supported Modal Operation Supported
* 0b = No
* 1b = Yes
* <25:23> : Product Type (DFP)
* 001b = PDUSB Hub
* 010b = PDUSB Host
* 100b = Alternate Mode Controller (AMC)
* <22:16> : 0 Reserved
* <15:0> : Per vendor USB Vendor ID
*/
/*****************************************************************************/
/*
* TBT3 Discover SVID Responses
*/
/*
* Table F-9 TBT3 Discover SVID VDO Responses
* -------------------------------------------------------------
* Note: These SVID can be in any order
* <31:16> : 0x8087 = Intel/TBT3 SVID 0
* <B15:0> : 0xFF01 = VESA DP (if supported) SVID 1
*/
/*****************************************************************************/
/*
* TBT3 Device Discover Mode Responses
*/
/*
* Table F-10 TBT3 Device Discover Mode VDO Responses
* -------------------------------------------------------------
* <31> : Vendor specific B1
* 0b = Not supported
* 1b = Supported
* <30> : Vendor specific B0
* 0b = Not supported
* 1b = Supported
* <29:27> : Reserved
* <26> : Intel specific B0
* 0b = Not supported
* 1b = Supported
* <25:17> : Reserved
* <16> : TBT Adapter
* Errata: TBT Adapter bits are swapped in the document
* Refer USB Type-C ENGINEERING CHANGE NOTICE (ECN)
* "USB Type-C ECN Thunderbolt 3 Compatibility Updates.pdf"
* with Title: Thunderbolt 3 Compatibility Updates
* for the document fix published by USB-IF.
* 0b = TBT3 Adapter
* 1b = TBT2 Legacy Adapter
* <15:0> : TBT Alternate Mode
* 0x0001 = TBT Mode
*/
enum tbt_adapter_type {
TBT_ADAPTER_TBT3,
TBT_ADAPTER_TBT2_LEGACY,
};
enum vendor_specific_support {
VENDOR_SPECIFIC_NOT_SUPPORTED,
VENDOR_SPECIFIC_SUPPORTED,
};
/* TBT Alternate Mode */
#define TBT_ALTERNATE_MODE 0x0001
#define PD_VDO_RESP_MODE_INTEL_TBT(x) (((x) & 0xff) == TBT_ALTERNATE_MODE)
union tbt_mode_resp_device {
struct {
uint16_t tbt_alt_mode : 16;
enum tbt_adapter_type tbt_adapter : 1;
uint16_t reserved0 : 9;
enum vendor_specific_support intel_spec_b0 : 1;
uint8_t reserved1 : 3;
enum vendor_specific_support vendor_spec_b0 : 1;
enum vendor_specific_support vendor_spec_b1 : 1;
};
uint32_t raw_value;
};
/*
* Table F-11 TBT3 Cable Discover Mode VDO Responses
* -------------------------------------------------------------
* <31:26> : Reserved
* <25> : Active Passive
* Errata: Reserved B25 has been changed to Active passive bit
* Refer USB Type-C ENGINEERING CHANGE NOTICE (ECN)
* "USB Type-C ECN Thunderbolt 3 Compatibility Updates.pdf"
* with Title: Thunderbolt 3 Compatibility Updates
* for the document fix published by USB-IF.
* 0b = Passive cable
* 1b = Active cable
* NOTE: This change is only applicable to rev 3 cables
* <24> : Reserved
* <23> : Active Cable Plug Link Training
* 0 = Active with bi-directional LSRX1 communication or when Passive
* 1 = Active with uni-directional LSRX1 communication
* <22> : Re-timer
* 0 = Not re-timer
* 1 = Re-timer
* <21> : Cable Type
* 0b = Non-Optical
* 1b = Optical
* <20:19> : TBT_Rounded_Support
* 00b = 3rd Gen Non-Rounded TBT
* 01b = 3rd & 4th Gen Rounded and Non-Rounded TBT
* 10b..11b = Reserved
* <18:16> : Cable Speed
* 000b = Reserved
* 001b = USB3.1 Gen1 Cable (10 Gbps TBT support)
* 010b = 10 Gbps (USB 3.2 Gen1 and Gen2 passive cables)
* 011b = 10 Gbps and 20 Gbps (TBT 3rd Gen active cables and
* 20 Gbps passive cables)
* 100b..111b = Reserved
* <15:0> : TBT Alternate Mode
* 0x0001 = TBT Mode
*/
enum tbt_active_passive_cable {
TBT_CABLE_PASSIVE,
TBT_CABLE_ACTIVE,
};
enum tbt_compat_cable_speed {
TBT_SS_RES_0,
TBT_SS_U31_GEN1,
TBT_SS_U32_GEN1_GEN2,
TBT_SS_TBT_GEN3,
TBT_SS_RES_4,
TBT_SS_RES_5,
TBT_SS_RES_6,
TBT_SS_RES_7,
};
enum tbt_cable_type {
TBT_CABLE_NON_OPTICAL,
TBT_CABLE_OPTICAL,
};
enum tbt_compat_rounded_support {
TBT_GEN3_NON_ROUNDED,
TBT_GEN3_GEN4_ROUNDED_NON_ROUNDED,
TBT_ROUND_SUP_RES_2,
TBT_ROUND_SUP_RES_3,
};
enum usb_retimer_type {
USB_NOT_RETIMER,
USB_RETIMER,
};
enum link_lsrx_comm {
BIDIR_LSRX_COMM,
UNIDIR_LSRX_COMM,
};
union tbt_mode_resp_cable {
struct {
uint16_t tbt_alt_mode : 16;
enum tbt_compat_cable_speed tbt_cable_speed : 3;
enum tbt_compat_rounded_support tbt_rounded : 2;
enum tbt_cable_type tbt_cable : 1;
enum usb_retimer_type retimer_type : 1;
enum link_lsrx_comm lsrx_comm : 1;
uint8_t reserved1 : 1;
enum tbt_active_passive_cable tbt_active_passive : 1;
uint8_t reserved0 : 6;
};
uint32_t raw_value;
};
/*****************************************************************************/
/*
* TBT3 Enter Mode Command
*/
/*
* Table F-13 TBT3 Device Enter Mode Command SOP
* -------------------------------------------------------------
* <31> : Vendor specific B1
* 0b = Not supported
* 1b = Supported
* <30> : Vendor specific B0
* 0b = Not supported
* 1b = Supported
* <29:27> : 000b Reserved
* <26> : Intel specific B0
* 0b = Not supported
* 1b = Supported
* <25> : Active_Passive
* Errata: Active_Passive bit is changed to B25
* Refer USB Type-C ENGINEERING CHANGE NOTICE (ECN)
* "USB Type-C ECN Thunderbolt 3 Compatibility Updates.pdf"
* with Title: Thunderbolt 3 Compatibility Updates
* for the document fix published by USB-IF.
* 0b = Passive cable
* 1b = Active cable
* <24> : TBT adapter
* Errata: B24 represents Thunderbolt Adapter type
* Refer USB Type-C ENGINEERING CHANGE NOTICE (ECN)
* "USB Type-C ECN Thunderbolt 3 Compatibility Updates.pdf"
* with Title: Thunderbolt 3 Compatibility Updates
* for the document fix published by USB-IF.
* 0b = TBT3 Adapter
* 1b = TBT2 Legacy Adapter
* <23> : Active Cable Link Training
* 0b = Active with bi-directional LSRX1 communication or when Passive
* 1b = Active with uni-directional LSRX1 communication
* <22> : Re-timer
* 0b = Not re-timer
* 1b = Re-timer
* <21> : Cable Type
* 0b = Non-Optical
* 1b = Optical
* <20:19> : TBT_Rounded_Support
* 00b = 3rd Gen Non-Rounded TBT
* 01b = 3rd & 4th Gen Rounded and Non-Rounded TBT
* 10b..11b = Reserved
* <18:16> : Cable Speed
* 000b = Reserved
* 001b = USB3.1 Gen1 Cable (10 Gbps TBT support)
* 010b = 10 Gbps (USB 3.2 Gen1 and Gen2 passive cables)
* 011b = 10 Gbps and 20 Gbps (TBT 3rd Gen active cables and
* 20 Gbps passive cables)
* 100b..111b = Reserved
* <15:0> : TBT Alternate Mode
* 0x0001 = TBT Mode
*/
enum tbt_enter_cable_type {
TBT_ENTER_PASSIVE_CABLE,
TBT_ENTER_ACTIVE_CABLE,
};
union tbt_dev_mode_enter_cmd {
struct {
uint16_t tbt_alt_mode : 16;
enum tbt_compat_cable_speed tbt_cable_speed : 3;
enum tbt_compat_rounded_support tbt_rounded : 2;
enum tbt_cable_type tbt_cable : 1;
enum usb_retimer_type retimer_type : 1;
enum link_lsrx_comm lsrx_comm : 1;
enum tbt_adapter_type tbt_adapter : 1;
enum tbt_enter_cable_type cable : 1;
enum vendor_specific_support intel_spec_b0 : 1;
uint8_t reserved1 : 3;
enum vendor_specific_support vendor_spec_b0 : 1;
enum vendor_specific_support vendor_spec_b1 : 1;
};
uint32_t raw_value;
};
#ifdef __cplusplus
}
#endif
#endif /* __CROS_EC_USB_PD_TBT_COMPAT_H */
OSZAR »