diff options
author | John Youn <johnyoun@synopsys.com> | 2009-07-27 15:05:03 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-07-28 17:31:13 -0400 |
commit | 254c80a3a0eb811489f7410c3291f01a60e8e42f (patch) | |
tree | 2556e997876bc3e02f49bad8feb2a269103a5440 /drivers/usb/host/xhci.h | |
parent | 9f8e443816976edd68f415ea25c0223ea921e88c (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.h | 11 |
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 | ||
955 | struct 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; |