mirror of https://github.com/ipxe/ipxe.git
[usb] Report xHCI host controller events
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/34/head
parent
cc5a27f9cb
commit
66048e3214
|
@ -1615,6 +1615,22 @@ static void xhci_port_status ( struct xhci_device *xhci,
|
||||||
usb_port_changed ( usb_port ( xhci->bus->hub, port->port ) );
|
usb_port_changed ( usb_port ( xhci->bus->hub, port->port ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle host controller event
|
||||||
|
*
|
||||||
|
* @v xhci xHCI device
|
||||||
|
* @v host Host controller event
|
||||||
|
*/
|
||||||
|
static void xhci_host_controller ( struct xhci_device *xhci,
|
||||||
|
struct xhci_trb_host_controller *host ) {
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
/* Construct error */
|
||||||
|
rc = -ECODE ( host->code );
|
||||||
|
DBGC ( xhci, "XHCI %p host controller event (code %d): %s\n",
|
||||||
|
xhci, host->code, strerror ( rc ) );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Poll event ring
|
* Poll event ring
|
||||||
*
|
*
|
||||||
|
@ -1656,6 +1672,10 @@ static void xhci_event_poll ( struct xhci_device *xhci ) {
|
||||||
xhci_port_status ( xhci, &trb->port );
|
xhci_port_status ( xhci, &trb->port );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case XHCI_TRB_HOST_CONTROLLER:
|
||||||
|
xhci_host_controller ( xhci, &trb->host );
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
DBGC ( xhci, "XHCI %p unrecognised event %#x\n:",
|
DBGC ( xhci, "XHCI %p unrecognised event %#x\n:",
|
||||||
xhci, event->cons );
|
xhci, event->cons );
|
||||||
|
|
|
@ -649,6 +649,25 @@ struct xhci_trb_port_status {
|
||||||
/** A port status change transfer request block */
|
/** A port status change transfer request block */
|
||||||
#define XHCI_TRB_PORT_STATUS XHCI_TRB_TYPE ( 34 )
|
#define XHCI_TRB_PORT_STATUS XHCI_TRB_TYPE ( 34 )
|
||||||
|
|
||||||
|
/** A port status change transfer request block */
|
||||||
|
struct xhci_trb_host_controller {
|
||||||
|
/** Reserved */
|
||||||
|
uint64_t reserved_a;
|
||||||
|
/** Reserved */
|
||||||
|
uint8_t reserved_b[3];
|
||||||
|
/** Completion code */
|
||||||
|
uint8_t code;
|
||||||
|
/** Flags */
|
||||||
|
uint8_t flags;
|
||||||
|
/** Type */
|
||||||
|
uint8_t type;
|
||||||
|
/** Reserved */
|
||||||
|
uint16_t reserved_c;
|
||||||
|
} __attribute__ (( packed ));
|
||||||
|
|
||||||
|
/** A port status change transfer request block */
|
||||||
|
#define XHCI_TRB_HOST_CONTROLLER XHCI_TRB_TYPE ( 37 )
|
||||||
|
|
||||||
/** A transfer request block */
|
/** A transfer request block */
|
||||||
union xhci_trb {
|
union xhci_trb {
|
||||||
/** Template */
|
/** Template */
|
||||||
|
@ -683,6 +702,8 @@ union xhci_trb {
|
||||||
struct xhci_trb_complete complete;
|
struct xhci_trb_complete complete;
|
||||||
/** Port status changed event */
|
/** Port status changed event */
|
||||||
struct xhci_trb_port_status port;
|
struct xhci_trb_port_status port;
|
||||||
|
/** Host controller event */
|
||||||
|
struct xhci_trb_host_controller host;
|
||||||
} __attribute__ (( packed ));
|
} __attribute__ (( packed ));
|
||||||
|
|
||||||
/** An input control context */
|
/** An input control context */
|
||||||
|
|
Loading…
Reference in New Issue