staticinlineconstchar *cdnsp_trb_comp_code_string(u8 status)
{ switch (status) { case COMP_INVALID: return"Invalid"; case COMP_SUCCESS: return"Success"; case COMP_DATA_BUFFER_ERROR: return"Data Buffer Error"; case COMP_BABBLE_DETECTED_ERROR: return"Babble Detected"; case COMP_TRB_ERROR: return"TRB Error"; case COMP_RESOURCE_ERROR: return"Resource Error"; case COMP_NO_SLOTS_AVAILABLE_ERROR: return"No Slots Available Error"; case COMP_INVALID_STREAM_TYPE_ERROR: return"Invalid Stream Type Error"; case COMP_SLOT_NOT_ENABLED_ERROR: return"Slot Not Enabled Error"; case COMP_ENDPOINT_NOT_ENABLED_ERROR: return"Endpoint Not Enabled Error"; case COMP_SHORT_PACKET: return"Short Packet"; case COMP_RING_UNDERRUN: return"Ring Underrun"; case COMP_RING_OVERRUN: return"Ring Overrun"; case COMP_VF_EVENT_RING_FULL_ERROR: return"VF Event Ring Full Error"; case COMP_PARAMETER_ERROR: return"Parameter Error"; case COMP_CONTEXT_STATE_ERROR: return"Context State Error"; case COMP_EVENT_RING_FULL_ERROR: return"Event Ring Full Error"; case COMP_INCOMPATIBLE_DEVICE_ERROR: return"Incompatible Device Error"; case COMP_MISSED_SERVICE_ERROR: return"Missed Service Error"; case COMP_COMMAND_RING_STOPPED: return"Command Ring Stopped"; case COMP_COMMAND_ABORTED: return"Command Aborted"; case COMP_STOPPED: return"Stopped"; case COMP_STOPPED_LENGTH_INVALID: return"Stopped - Length Invalid"; case COMP_STOPPED_SHORT_PACKET: return"Stopped - Short Packet"; case COMP_MAX_EXIT_LATENCY_TOO_LARGE_ERROR: return"Max Exit Latency Too Large Error"; case COMP_ISOCH_BUFFER_OVERRUN: return"Isoch Buffer Overrun"; case COMP_EVENT_LOST_ERROR: return"Event Lost Error"; case COMP_UNDEFINED_ERROR: return"Undefined Error"; case COMP_INVALID_STREAM_ID_ERROR: return"Invalid Stream ID Error"; default: return"Unknown!!";
}
}
staticinlineconstchar *cdnsp_trb_type_string(u8 type)
{ switch (type) { case TRB_NORMAL: return"Normal"; case TRB_SETUP: return"Setup Stage"; case TRB_DATA: return"Data Stage"; case TRB_STATUS: return"Status Stage"; case TRB_ISOC: return"Isoch"; case TRB_LINK: return"Link"; case TRB_EVENT_DATA: return"Event Data"; case TRB_TR_NOOP: return"No-Op"; case TRB_ENABLE_SLOT: return"Enable Slot Command"; case TRB_DISABLE_SLOT: return"Disable Slot Command"; case TRB_ADDR_DEV: return"Address Device Command"; case TRB_CONFIG_EP: return"Configure Endpoint Command"; case TRB_EVAL_CONTEXT: return"Evaluate Context Command"; case TRB_RESET_EP: return"Reset Endpoint Command"; case TRB_STOP_RING: return"Stop Ring Command"; case TRB_SET_DEQ: return"Set TR Dequeue Pointer Command"; case TRB_RESET_DEV: return"Reset Device Command"; case TRB_FORCE_HEADER: return"Force Header Command"; case TRB_CMD_NOOP: return"No-Op Command"; case TRB_TRANSFER: return"Transfer Event"; case TRB_COMPLETION: return"Command Completion Event"; case TRB_PORT_STATUS: return"Port Status Change Event"; case TRB_HC_EVENT: return"Device Controller Event"; case TRB_MFINDEX_WRAP: return"MFINDEX Wrap Event"; case TRB_ENDPOINT_NRDY: return"Endpoint Not ready"; case TRB_HALT_ENDPOINT: return"Halt Endpoint"; default: return"UNKNOWN";
}
}
staticinlineconstchar *cdnsp_ring_type_string(enum cdnsp_ring_type type)
{ switch (type) { case TYPE_CTRL: return"CTRL"; case TYPE_ISOC: return"ISOC"; case TYPE_BULK: return"BULK"; case TYPE_INTR: return"INTR"; case TYPE_STREAM: return"STREAM"; case TYPE_COMMAND: return"CMD"; case TYPE_EVENT: return"EVENT";
}
return"UNKNOWN";
}
staticinlinechar *cdnsp_slot_state_string(u32 state)
{ switch (state) { case SLOT_STATE_ENABLED: return"enabled/disabled"; case SLOT_STATE_DEFAULT: return"default"; case SLOT_STATE_ADDRESSED: return"addressed"; case SLOT_STATE_CONFIGURED: return"configured"; default: return"reserved";
}
}
staticinlineconstchar *cdnsp_decode_trb(char *str, size_t size, u32 field0,
u32 field1, u32 field2, u32 field3)
{ int ep_id = TRB_TO_EP_INDEX(field3) - 1; int type = TRB_FIELD_TO_TYPE(field3); unsignedint ep_num; int ret;
u32 temp;
if (ret == size - 1)
pr_info("CDNSP: buffer may be truncated.\n");
return str;
}
staticinlineconstchar *cdnsp_decode_slot_context(u32 info, u32 info2,
u32 int_target, u32 state)
{ staticchar str[1024]; int ret = 0;
u32 speed; char *s;
speed = info & DEV_SPEED;
switch (speed) { case SLOT_SPEED_FS:
s = "full-speed"; break; case SLOT_SPEED_HS:
s = "high-speed"; break; case SLOT_SPEED_SS:
s = "super-speed"; break; case SLOT_SPEED_SSP:
s = "super-speed plus"; break; default:
s = "UNKNOWN speed";
}
ret += sprintf(str + ret, " [Intr %ld] Addr %ld State %s",
GET_INTR_TARGET(int_target), state & DEV_ADDR_MASK,
cdnsp_slot_state_string(GET_SLOT_STATE(state)));
return str;
}
staticinlineconstchar *cdnsp_portsc_link_state_string(u32 portsc)
{ switch (portsc & PORT_PLS_MASK) { case XDEV_U0: return"U0"; case XDEV_U1: return"U1"; case XDEV_U2: return"U2"; case XDEV_U3: return"U3"; case XDEV_DISABLED: return"Disabled"; case XDEV_RXDETECT: return"RxDetect"; case XDEV_INACTIVE: return"Inactive"; case XDEV_POLLING: return"Polling"; case XDEV_RECOVERY: return"Recovery"; case XDEV_HOT_RESET: return"Hot Reset"; case XDEV_COMP_MODE: return"Compliance mode"; case XDEV_TEST_MODE: return"Test mode"; case XDEV_RESUME: return"Resume"; default: break;
}
return"Unknown";
}
staticinlineconstchar *cdnsp_decode_portsc(char *str, size_t size,
u32 portsc)
{ int ret;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.