aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/xhci.h
diff options
context:
space:
mode:
authorJohn Youn <johnyoun@synopsys.com>2009-07-27 15:05:03 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2009-07-28 17:31:13 -0400
commit254c80a3a0eb811489f7410c3291f01a60e8e42f (patch)
tree2556e997876bc3e02f49bad8feb2a269103a5440 /drivers/usb/host/xhci.h
parent9f8e443816976edd68f415ea25c0223ea921e88c (diff)
USB: xhci: Scratchpad buffer allocation
Allocates and initializes the scratchpad buffer array (XHCI 4.20). This is an array of 64-bit DMA addresses to scratch pages that the controller may use during operation. The number of pages is specified in the "Max Scratchpad Buffers" field of HCSPARAMS2. The DMA address of this array is written into slot 0 of the DCBAA. Signed-off-by: John Youn <johnyoun@synopsys.com> Acked-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host/xhci.h')
-rw-r--r--drivers/usb/host/xhci.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index 074728e10225..5a09b9a26e0d 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -89,6 +89,7 @@ struct xhci_cap_regs {
89#define HCS_ERST_MAX(p) (((p) >> 4) & 0xf) 89#define HCS_ERST_MAX(p) (((p) >> 4) & 0xf)
90/* bit 26 Scratchpad restore - for save/restore HW state - not used yet */ 90/* bit 26 Scratchpad restore - for save/restore HW state - not used yet */
91/* bits 27:31 number of Scratchpad buffers SW must allocate for the HW */ 91/* bits 27:31 number of Scratchpad buffers SW must allocate for the HW */
92#define HCS_MAX_SCRATCHPAD(p) (((p) >> 27) & 0x1f)
92 93
93/* HCSPARAMS3 - hcs_params3 - bitmasks */ 94/* HCSPARAMS3 - hcs_params3 - bitmasks */
94/* bits 0:7, Max U1 to U0 latency for the roothub ports */ 95/* bits 0:7, Max U1 to U0 latency for the roothub ports */
@@ -951,6 +952,13 @@ struct xhci_erst {
951 unsigned int erst_size; 952 unsigned int erst_size;
952}; 953};
953 954
955struct xhci_scratchpad {
956 u64 *sp_array;
957 dma_addr_t sp_dma;
958 void **sp_buffers;
959 dma_addr_t *sp_dma_buffers;
960};
961
954/* 962/*
955 * Each segment table entry is 4*32bits long. 1K seems like an ok size: 963 * Each segment table entry is 4*32bits long. 1K seems like an ok size:
956 * (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table, 964 * (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table,
@@ -1005,6 +1013,9 @@ struct xhci_hcd {
1005 struct xhci_ring *cmd_ring; 1013 struct xhci_ring *cmd_ring;
1006 struct xhci_ring *event_ring; 1014 struct xhci_ring *event_ring;
1007 struct xhci_erst erst; 1015 struct xhci_erst erst;
1016 /* Scratchpad */
1017 struct xhci_scratchpad *scratchpad;
1018
1008 /* slot enabling and address device helpers */ 1019 /* slot enabling and address device helpers */
1009 struct completion addr_dev; 1020 struct completion addr_dev;
1010 int slot_id; 1021 int slot_id;