aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/xhci.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/host/xhci.h')
-rw-r--r--drivers/usb/host/xhci.h90
1 files changed, 89 insertions, 1 deletions
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index e3e935291ed6..2abaa4d6d39d 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -311,12 +311,19 @@ struct xhci_op_regs {
311 */ 311 */
312#define PORT_PLS_MASK (0xf << 5) 312#define PORT_PLS_MASK (0xf << 5)
313#define XDEV_U0 (0x0 << 5) 313#define XDEV_U0 (0x0 << 5)
314#define XDEV_U1 (0x1 << 5)
314#define XDEV_U2 (0x2 << 5) 315#define XDEV_U2 (0x2 << 5)
315#define XDEV_U3 (0x3 << 5) 316#define XDEV_U3 (0x3 << 5)
317#define XDEV_DISABLED (0x4 << 5)
318#define XDEV_RXDETECT (0x5 << 5)
316#define XDEV_INACTIVE (0x6 << 5) 319#define XDEV_INACTIVE (0x6 << 5)
317#define XDEV_POLLING (0x7 << 5) 320#define XDEV_POLLING (0x7 << 5)
318#define XDEV_COMP_MODE (0xa << 5) 321#define XDEV_RECOVERY (0x8 << 5)
322#define XDEV_HOT_RESET (0x9 << 5)
323#define XDEV_COMP_MODE (0xa << 5)
324#define XDEV_TEST_MODE (0xb << 5)
319#define XDEV_RESUME (0xf << 5) 325#define XDEV_RESUME (0xf << 5)
326
320/* true: port has power (see HCC_PPC) */ 327/* true: port has power (see HCC_PPC) */
321#define PORT_POWER (1 << 9) 328#define PORT_POWER (1 << 9)
322/* bits 10:13 indicate device speed: 329/* bits 10:13 indicate device speed:
@@ -2392,6 +2399,87 @@ static inline const char *xhci_decode_slot_context(u32 info, u32 info2,
2392 return str; 2399 return str;
2393} 2400}
2394 2401
2402
2403static inline const char *xhci_portsc_link_state_string(u32 portsc)
2404{
2405 switch (portsc & PORT_PLS_MASK) {
2406 case XDEV_U0:
2407 return "U0";
2408 case XDEV_U1:
2409 return "U1";
2410 case XDEV_U2:
2411 return "U2";
2412 case XDEV_U3:
2413 return "U3";
2414 case XDEV_DISABLED:
2415 return "Disabled";
2416 case XDEV_RXDETECT:
2417 return "RxDetect";
2418 case XDEV_INACTIVE:
2419 return "Inactive";
2420 case XDEV_POLLING:
2421 return "Polling";
2422 case XDEV_RECOVERY:
2423 return "Recovery";
2424 case XDEV_HOT_RESET:
2425 return "Hot Reset";
2426 case XDEV_COMP_MODE:
2427 return "Compliance mode";
2428 case XDEV_TEST_MODE:
2429 return "Test mode";
2430 case XDEV_RESUME:
2431 return "Resume";
2432 default:
2433 break;
2434 }
2435 return "Unknown";
2436}
2437
2438static inline const char *xhci_decode_portsc(u32 portsc)
2439{
2440 static char str[256];
2441 int ret;
2442
2443 ret = sprintf(str, "%s %s %s Link:%s ",
2444 portsc & PORT_POWER ? "Powered" : "Powered-off",
2445 portsc & PORT_CONNECT ? "Connected" : "Not-connected",
2446 portsc & PORT_PE ? "Enabled" : "Disabled",
2447 xhci_portsc_link_state_string(portsc));
2448
2449 if (portsc & PORT_OC)
2450 ret += sprintf(str + ret, "OverCurrent ");
2451 if (portsc & PORT_RESET)
2452 ret += sprintf(str + ret, "In-Reset ");
2453
2454 ret += sprintf(str + ret, "Change: ");
2455 if (portsc & PORT_CSC)
2456 ret += sprintf(str + ret, "CSC ");
2457 if (portsc & PORT_PEC)
2458 ret += sprintf(str + ret, "PEC ");
2459 if (portsc & PORT_WRC)
2460 ret += sprintf(str + ret, "WRC ");
2461 if (portsc & PORT_OCC)
2462 ret += sprintf(str + ret, "OCC ");
2463 if (portsc & PORT_RC)
2464 ret += sprintf(str + ret, "PRC ");
2465 if (portsc & PORT_PLC)
2466 ret += sprintf(str + ret, "PLC ");
2467 if (portsc & PORT_CEC)
2468 ret += sprintf(str + ret, "CEC ");
2469 if (portsc & PORT_CAS)
2470 ret += sprintf(str + ret, "CAS ");
2471
2472 ret += sprintf(str + ret, "Wake: ");
2473 if (portsc & PORT_WKCONN_E)
2474 ret += sprintf(str + ret, "WCE ");
2475 if (portsc & PORT_WKDISC_E)
2476 ret += sprintf(str + ret, "WDE ");
2477 if (portsc & PORT_WKOC_E)
2478 ret += sprintf(str + ret, "WOE ");
2479
2480 return str;
2481}
2482
2395static inline const char *xhci_ep_state_string(u8 state) 2483static inline const char *xhci_ep_state_string(u8 state)
2396{ 2484{
2397 switch (state) { 2485 switch (state) {