ANDROID: usb: host: export xhci symbols for ring management
Export below xhci symbols for vendor modules to manage additional secondary rings. These will be used to manage the secondary ring for usb audio offload. xhci_segment_free - Free a segment struct. xhci_link_segments - Make the prev segment point to the next segment. xhci_initialze_ring_info - Initialze a ring struct. xhci_check_trb_in_td_math - Check TRB math for validation. xhci_get_endpoint_address - Get endpoint address from endpoint index. xhci_address_device - Issue an address device command xhci_bus_suspend xhci_bus_resume - Suspend and resume for power scenario Bug: 183761108 Signed-off-by: Daehwan Jung <dh10.jung@samsung.com> Change-Id: I2c2d72957214636573ab681ccae0af73b6331b31
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
f694171a83
commit
731d2da95e
@@ -1723,6 +1723,7 @@ retry:
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xhci_bus_suspend);
|
||||
|
||||
/*
|
||||
* Workaround for missing Cold Attach Status (CAS) if device re-plugged in S3.
|
||||
@@ -1867,6 +1868,7 @@ int xhci_bus_resume(struct usb_hcd *hcd)
|
||||
spin_unlock_irqrestore(&xhci->lock, flags);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xhci_bus_resume);
|
||||
|
||||
unsigned long xhci_get_resuming_ports(struct usb_hcd *hcd)
|
||||
{
|
||||
|
@@ -65,7 +65,7 @@ static struct xhci_segment *xhci_segment_alloc(struct xhci_hcd *xhci,
|
||||
return seg;
|
||||
}
|
||||
|
||||
static void xhci_segment_free(struct xhci_hcd *xhci, struct xhci_segment *seg)
|
||||
void xhci_segment_free(struct xhci_hcd *xhci, struct xhci_segment *seg)
|
||||
{
|
||||
if (seg->trbs) {
|
||||
dma_pool_free(xhci->segment_pool, seg->trbs, seg->dma);
|
||||
@@ -74,8 +74,9 @@ static void xhci_segment_free(struct xhci_hcd *xhci, struct xhci_segment *seg)
|
||||
kfree(seg->bounce_buf);
|
||||
kfree(seg);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xhci_segment_free);
|
||||
|
||||
static void xhci_free_segments_for_ring(struct xhci_hcd *xhci,
|
||||
void xhci_free_segments_for_ring(struct xhci_hcd *xhci,
|
||||
struct xhci_segment *first)
|
||||
{
|
||||
struct xhci_segment *seg;
|
||||
@@ -96,9 +97,9 @@ static void xhci_free_segments_for_ring(struct xhci_hcd *xhci,
|
||||
* DMA address of the next segment. The caller needs to set any Link TRB
|
||||
* related flags, such as End TRB, Toggle Cycle, and no snoop.
|
||||
*/
|
||||
static void xhci_link_segments(struct xhci_segment *prev,
|
||||
struct xhci_segment *next,
|
||||
enum xhci_ring_type type, bool chain_links)
|
||||
void xhci_link_segments(struct xhci_segment *prev,
|
||||
struct xhci_segment *next,
|
||||
enum xhci_ring_type type, bool chain_links)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
@@ -118,6 +119,7 @@ static void xhci_link_segments(struct xhci_segment *prev,
|
||||
prev->trbs[TRBS_PER_SEGMENT-1].link.control = cpu_to_le32(val);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xhci_link_segments);
|
||||
|
||||
/*
|
||||
* Link the ring to the new segments.
|
||||
@@ -317,6 +319,7 @@ void xhci_initialize_ring_info(struct xhci_ring *ring,
|
||||
*/
|
||||
ring->num_trbs_free = ring->num_segs * (TRBS_PER_SEGMENT - 1) - 1;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xhci_initialize_ring_info);
|
||||
|
||||
/* Allocate segments and link them for a ring */
|
||||
static int xhci_alloc_segments_for_ring(struct xhci_hcd *xhci,
|
||||
@@ -2041,7 +2044,7 @@ static int xhci_test_trb_in_td(struct xhci_hcd *xhci,
|
||||
}
|
||||
|
||||
/* TRB math checks for xhci_trb_in_td(), using the command and event rings. */
|
||||
static int xhci_check_trb_in_td_math(struct xhci_hcd *xhci)
|
||||
int xhci_check_trb_in_td_math(struct xhci_hcd *xhci)
|
||||
{
|
||||
struct {
|
||||
dma_addr_t input_dma;
|
||||
@@ -2161,6 +2164,7 @@ static int xhci_check_trb_in_td_math(struct xhci_hcd *xhci)
|
||||
xhci_dbg(xhci, "TRB math tests passed.\n");
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xhci_check_trb_in_td_math);
|
||||
|
||||
static void xhci_set_hc_event_deq(struct xhci_hcd *xhci)
|
||||
{
|
||||
|
@@ -1313,6 +1313,7 @@ unsigned int xhci_get_endpoint_address(unsigned int ep_index)
|
||||
unsigned int direction = ep_index % 2 ? USB_DIR_OUT : USB_DIR_IN;
|
||||
return direction | number;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xhci_get_endpoint_address);
|
||||
|
||||
/* Find the flag for this endpoint (for use in the control context). Use the
|
||||
* endpoint index to create a bitmask. The slot context is bit 0, endpoint 0 is
|
||||
@@ -4202,10 +4203,11 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)
|
||||
int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)
|
||||
{
|
||||
return xhci_setup_device(hcd, udev, SETUP_CONTEXT_ADDRESS);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xhci_address_device);
|
||||
|
||||
static int xhci_enable_device(struct usb_hcd *hcd, struct usb_device *udev)
|
||||
{
|
||||
|
Reference in New Issue
Block a user