1
2
3
4
5
6#ifndef __LINUX_USB_PD_VDO_H
7#define __LINUX_USB_PD_VDO_H
8
9#include "pd.h"
10
11
12
13
14
15
16#define VDO_MAX_OBJECTS 6
17#define VDO_MAX_SIZE (VDO_MAX_OBJECTS + 1)
18
19
20
21
22
23
24
25
26
27
28
29
30
31#define VDO(vid, type, ver, custom) \
32 (((vid) << 16) | \
33 ((type) << 15) | \
34 ((ver) << 13) | \
35 ((custom) & 0x7FFF))
36
37#define VDO_SVDM_TYPE (1 << 15)
38#define VDO_SVDM_VERS(x) ((x) << 13)
39#define VDO_OPOS(x) ((x) << 8)
40#define VDO_CMDT(x) ((x) << 6)
41#define VDO_SVDM_VERS_MASK VDO_SVDM_VERS(0x3)
42#define VDO_OPOS_MASK VDO_OPOS(0x7)
43#define VDO_CMDT_MASK VDO_CMDT(0x3)
44
45#define CMDT_INIT 0
46#define CMDT_RSP_ACK 1
47#define CMDT_RSP_NAK 2
48#define CMDT_RSP_BUSY 3
49
50
51#define VDO_SRC_INITIATOR (0 << 5)
52#define VDO_SRC_RESPONDER (1 << 5)
53
54#define CMD_DISCOVER_IDENT 1
55#define CMD_DISCOVER_SVID 2
56#define CMD_DISCOVER_MODES 3
57#define CMD_ENTER_MODE 4
58#define CMD_EXIT_MODE 5
59#define CMD_ATTENTION 6
60
61#define VDO_CMD_VENDOR(x) (((0x10 + (x)) & 0x1f))
62
63
64#define VDO_CMD_VERSION VDO_CMD_VENDOR(0)
65#define VDO_CMD_SEND_INFO VDO_CMD_VENDOR(1)
66#define VDO_CMD_READ_INFO VDO_CMD_VENDOR(2)
67#define VDO_CMD_REBOOT VDO_CMD_VENDOR(5)
68#define VDO_CMD_FLASH_ERASE VDO_CMD_VENDOR(6)
69#define VDO_CMD_FLASH_WRITE VDO_CMD_VENDOR(7)
70#define VDO_CMD_ERASE_SIG VDO_CMD_VENDOR(8)
71#define VDO_CMD_PING_ENABLE VDO_CMD_VENDOR(10)
72#define VDO_CMD_CURRENT VDO_CMD_VENDOR(11)
73#define VDO_CMD_FLIP VDO_CMD_VENDOR(12)
74#define VDO_CMD_GET_LOG VDO_CMD_VENDOR(13)
75#define VDO_CMD_CCD_EN VDO_CMD_VENDOR(14)
76
77#define PD_VDO_VID(vdo) ((vdo) >> 16)
78#define PD_VDO_SVDM(vdo) (((vdo) >> 15) & 1)
79#define PD_VDO_SVDM_VER(vdo) (((vdo) >> 13) & 0x3)
80#define PD_VDO_OPOS(vdo) (((vdo) >> 8) & 0x7)
81#define PD_VDO_CMD(vdo) ((vdo) & 0x1f)
82#define PD_VDO_CMDT(vdo) (((vdo) >> 6) & 0x3)
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97#define VDO_INDEX_HDR 0
98#define VDO_INDEX_IDH 1
99#define VDO_INDEX_CSTAT 2
100#define VDO_INDEX_CABLE 3
101#define VDO_INDEX_PRODUCT 3
102#define VDO_INDEX_AMA 4
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118#define IDH_PTYPE_UNDEF 0
119
120
121#define IDH_PTYPE_NOT_UFP 0
122#define IDH_PTYPE_HUB 1
123#define IDH_PTYPE_PERIPH 2
124#define IDH_PTYPE_PSD 3
125#define IDH_PTYPE_AMA 5
126
127
128#define IDH_PTYPE_NOT_CABLE 0
129#define IDH_PTYPE_PCABLE 3
130#define IDH_PTYPE_ACABLE 4
131#define IDH_PTYPE_VPD 6
132
133
134#define IDH_PTYPE_NOT_DFP 0
135#define IDH_PTYPE_DFP_HUB 1
136#define IDH_PTYPE_DFP_HOST 2
137#define IDH_PTYPE_DFP_PB 3
138
139
140#define IDH_DFP_MASK GENMASK(25, 23)
141#define IDH_CONN_MASK GENMASK(22, 21)
142
143#define VDO_IDH(usbh, usbd, ufp_cable, is_modal, dfp, conn, vid) \
144 ((usbh) << 31 | (usbd) << 30 | ((ufp_cable) & 0x7) << 27 \
145 | (is_modal) << 26 | ((dfp) & 0x7) << 23 | ((conn) & 0x3) << 21 \
146 | ((vid) & 0xffff))
147
148#define PD_IDH_PTYPE(vdo) (((vdo) >> 27) & 0x7)
149#define PD_IDH_VID(vdo) ((vdo) & 0xffff)
150#define PD_IDH_MODAL_SUPP(vdo) ((vdo) & (1 << 26))
151#define PD_IDH_DFP_PTYPE(vdo) (((vdo) >> 23) & 0x7)
152#define PD_IDH_CONN_TYPE(vdo) (((vdo) >> 21) & 0x3)
153
154
155
156
157
158
159#define PD_CSTAT_XID(vdo) (vdo)
160#define VDO_CERT(xid) ((xid) & 0xffffffff)
161
162
163
164
165
166
167
168#define VDO_PRODUCT(pid, bcd) (((pid) & 0xffff) << 16 | ((bcd) & 0xffff))
169#define PD_PRODUCT_PID(vdo) (((vdo) >> 16) & 0xffff)
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185#define PD_VDO_UFP_DEVCAP(vdo) (((vdo) & GENMASK(27, 24)) >> 24)
186
187
188#define UFP_VDO_VER1_2 2
189
190
191#define DEV_USB2_CAPABLE BIT(0)
192#define DEV_USB2_BILLBOARD BIT(1)
193#define DEV_USB3_CAPABLE BIT(2)
194#define DEV_USB4_CAPABLE BIT(3)
195
196
197#define UFP_RECEPTACLE 2
198#define UFP_CAPTIVE 3
199
200
201#define AMA_VCONN_PWR_1W 0
202#define AMA_VCONN_PWR_1W5 1
203#define AMA_VCONN_PWR_2W 2
204#define AMA_VCONN_PWR_3W 3
205#define AMA_VCONN_PWR_4W 4
206#define AMA_VCONN_PWR_5W 5
207#define AMA_VCONN_PWR_6W 6
208
209
210#define AMA_VCONN_NOT_REQ 0
211#define AMA_VCONN_REQ 1
212
213
214#define AMA_VBUS_REQ 0
215#define AMA_VBUS_NOT_REQ 1
216
217
218#define UFP_ALTMODE_NOT_SUPP 0
219#define UFP_ALTMODE_TBT3 BIT(0)
220#define UFP_ALTMODE_RECFG BIT(1)
221#define UFP_ALTMODE_NO_RECFG BIT(2)
222
223
224#define UFP_USB2_ONLY 0
225#define UFP_USB32_GEN1 1
226#define UFP_USB32_4_GEN2 2
227#define UFP_USB4_GEN3 3
228
229#define VDO_UFP(ver, cap, conn, vcpwr, vcr, vbr, alt, spd) \
230 (((ver) & 0x7) << 29 | ((cap) & 0xf) << 24 | ((conn) & 0x3) << 22 \
231 | ((vcpwr) & 0x7) << 8 | (vcr) << 7 | (vbr) << 6 | ((alt) & 0x7) << 3 \
232 | ((spd) & 0x7))
233
234
235
236
237
238
239
240
241
242
243
244#define PD_VDO_DFP_HOSTCAP(vdo) (((vdo) & GENMASK(26, 24)) >> 24)
245
246#define DFP_VDO_VER1_1 1
247#define HOST_USB2_CAPABLE BIT(0)
248#define HOST_USB3_CAPABLE BIT(1)
249#define HOST_USB4_CAPABLE BIT(2)
250#define DFP_RECEPTACLE 2
251#define DFP_CAPTIVE 3
252
253#define VDO_DFP(ver, cap, conn, pnum) \
254 (((ver) & 0x7) << 29 | ((cap) & 0x7) << 24 | ((conn) & 0x3) << 22 \
255 | ((pnum) & 0x1f))
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311#define CABLE_VDO_VER1_0 0
312#define CABLE_VDO_VER1_3 3
313
314
315#define CABLE_ATYPE 0
316#define CABLE_BTYPE 1
317#define CABLE_CTYPE 2
318#define CABLE_CAPTIVE 3
319
320
321#define CABLE_LATENCY_1M 1
322#define CABLE_LATENCY_2M 2
323#define CABLE_LATENCY_3M 3
324#define CABLE_LATENCY_4M 4
325#define CABLE_LATENCY_5M 5
326#define CABLE_LATENCY_6M 6
327#define CABLE_LATENCY_7M 7
328#define CABLE_LATENCY_7M_PLUS 8
329
330
331#define PCABLE_VCONN_NOT_REQ 0
332#define PCABLE_VCONN_REQ 1
333#define ACABLE_ONE_END 2
334#define ACABLE_BOTH_END 3
335
336
337#define CABLE_MAX_VBUS_20V 0
338#define CABLE_MAX_VBUS_30V 1
339#define CABLE_MAX_VBUS_40V 2
340#define CABLE_MAX_VBUS_50V 3
341
342
343#define ACABLE_SBU_SUPP 0
344#define ACABLE_SBU_NOT_SUPP 1
345#define ACABLE_SBU_PASSIVE 0
346#define ACABLE_SBU_ACTIVE 1
347
348
349#define CABLE_CURR_DEF 0
350#define CABLE_CURR_3A 1
351#define CABLE_CURR_5A 2
352
353
354#define CABLE_USBSS_U2_ONLY 0
355#define CABLE_USBSS_U31_GEN1 1
356#define CABLE_USBSS_U31_GEN2 2
357
358
359#define CABLE_USB2_ONLY 0
360#define CABLE_USB32_GEN1 1
361#define CABLE_USB32_4_GEN2 2
362#define CABLE_USB4_GEN3 3
363
364#define VDO_CABLE(hw, fw, cbl, lat, term, tx1d, tx2d, rx1d, rx2d, cur, vps, sopp, usbss) \
365 (((hw) & 0x7) << 28 | ((fw) & 0x7) << 24 | ((cbl) & 0x3) << 18 \
366 | ((lat) & 0x7) << 13 | ((term) & 0x3) << 11 | (tx1d) << 10 \
367 | (tx2d) << 9 | (rx1d) << 8 | (rx2d) << 7 | ((cur) & 0x3) << 5 \
368 | (vps) << 4 | (sopp) << 3 | ((usbss) & 0x7))
369#define VDO_PCABLE(hw, fw, ver, conn, lat, term, vbm, cur, spd) \
370 (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
371 | ((conn) & 0x3) << 18 | ((lat) & 0xf) << 13 | ((term) & 0x3) << 11 \
372 | ((vbm) & 0x3) << 9 | ((cur) & 0x3) << 5 | ((spd) & 0x7))
373#define VDO_ACABLE1(hw, fw, ver, conn, lat, term, vbm, sbu, sbut, cur, vbt, sopp, spd) \
374 (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
375 | ((conn) & 0x3) << 18 | ((lat) & 0xf) << 13 | ((term) & 0x3) << 11 \
376 | ((vbm) & 0x3) << 9 | (sbu) << 8 | (sbut) << 7 | ((cur) & 0x3) << 5 \
377 | (vbt) << 4 | (sopp) << 3 | ((spd) & 0x7))
378
379#define VDO_TYPEC_CABLE_TYPE(vdo) (((vdo) >> 18) & 0x3)
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401#define ACAB2_U3_CLD_10MW_PLUS 0
402#define ACAB2_U3_CLD_10MW 1
403#define ACAB2_U3_CLD_5MW 2
404#define ACAB2_U3_CLD_1MW 3
405#define ACAB2_U3_CLD_500UW 4
406#define ACAB2_U3_CLD_200UW 5
407#define ACAB2_U3_CLD_50UW 6
408
409
410#define ACAB2_U3U0_DIRECT 0
411#define ACAB2_U3U0_U3S 1
412#define ACAB2_PHY_COPPER 0
413#define ACAB2_PHY_OPTICAL 1
414#define ACAB2_REDRIVER 0
415#define ACAB2_RETIMER 1
416#define ACAB2_USB4_SUPP 0
417#define ACAB2_USB4_NOT_SUPP 1
418#define ACAB2_USB2_SUPP 0
419#define ACAB2_USB2_NOT_SUPP 1
420#define ACAB2_USB32_SUPP 0
421#define ACAB2_USB32_NOT_SUPP 1
422#define ACAB2_LANES_ONE 0
423#define ACAB2_LANES_TWO 1
424#define ACAB2_OPT_ISO_NO 0
425#define ACAB2_OPT_ISO_YES 1
426#define ACAB2_GEN_1 0
427#define ACAB2_GEN_2_PLUS 1
428
429#define VDO_ACABLE2(mtemp, stemp, u3p, trans, phy, ele, u4, hops, u2, u32, lane, iso, gen) \
430 (((mtemp) & 0xff) << 24 | ((stemp) & 0xff) << 16 | ((u3p) & 0x7) << 12 \
431 | (trans) << 11 | (phy) << 10 | (ele) << 9 | (u4) << 8 \
432 | ((hops) & 0x3) << 6 | (u2) << 5 | (u32) << 4 | (lane) << 3 \
433 | (iso) << 2 | (gen))
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450#define VDO_AMA(hw, fw, tx1d, tx2d, rx1d, rx2d, vcpwr, vcr, vbr, usbss) \
451 (((hw) & 0x7) << 28 | ((fw) & 0x7) << 24 \
452 | (tx1d) << 11 | (tx2d) << 10 | (rx1d) << 9 | (rx2d) << 8 \
453 | ((vcpwr) & 0x7) << 5 | (vcr) << 4 | (vbr) << 3 \
454 | ((usbss) & 0x7))
455
456#define PD_VDO_AMA_VCONN_REQ(vdo) (((vdo) >> 4) & 1)
457#define PD_VDO_AMA_VBUS_REQ(vdo) (((vdo) >> 3) & 1)
458
459#define AMA_USBSS_U2_ONLY 0
460#define AMA_USBSS_U31_GEN1 1
461#define AMA_USBSS_U31_GEN2 2
462#define AMA_USBSS_BBONLY 3
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478#define VPD_VDO_VER1_0 0
479#define VPD_MAX_VBUS_20V 0
480#define VPD_MAX_VBUS_30V 1
481#define VPD_MAX_VBUS_40V 2
482#define VPD_MAX_VBUS_50V 3
483#define VPDCT_CURR_3A 0
484#define VPDCT_CURR_5A 1
485#define VPDCT_NOT_SUPP 0
486#define VPDCT_SUPP 1
487
488#define VDO_VPD(hw, fw, ver, vbm, curr, vbi, gi, ct) \
489 (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
490 | ((vbm) & 0x3) << 15 | (curr) << 14 | ((vbi) & 0x3f) << 7 \
491 | ((gi) & 0x3f) << 1 | (ct))
492
493
494
495
496
497
498
499
500
501#define VDO_SVID(svid0, svid1) (((svid0) & 0xffff) << 16 | ((svid1) & 0xffff))
502#define PD_VDO_SVID_SVID0(vdo) ((vdo) >> 16)
503#define PD_VDO_SVID_SVID1(vdo) ((vdo) & 0xffff)
504
505
506#define USB_SID_PD 0xff00
507#define USB_SID_DISPLAYPORT 0xff01
508#define USB_SID_MHL 0xff02
509
510
511
512#define PD_T_VDM_UNSTRUCTURED 500
513#define PD_T_VDM_BUSY 100
514#define PD_T_VDM_WAIT_MODE_E 100
515#define PD_T_VDM_SNDR_RSP 30
516#define PD_T_VDM_E_MODE 25
517#define PD_T_VDM_RCVR_RSP 15
518
519#endif
520