diff options
Diffstat (limited to 'drivers/usb/host/xhci.h')
| -rw-r--r-- | drivers/usb/host/xhci.h | 148 |
1 files changed, 110 insertions, 38 deletions
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 8936eeb5588b..d31d32206ba3 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | 25 | ||
| 26 | #include <linux/usb.h> | 26 | #include <linux/usb.h> |
| 27 | #include <linux/timer.h> | 27 | #include <linux/timer.h> |
| 28 | #include <linux/kernel.h> | ||
| 28 | 29 | ||
| 29 | #include "../core/hcd.h" | 30 | #include "../core/hcd.h" |
| 30 | /* Code sharing between pci-quirks and xhci hcd */ | 31 | /* Code sharing between pci-quirks and xhci hcd */ |
| @@ -42,14 +43,6 @@ | |||
| 42 | * xHCI register interface. | 43 | * xHCI register interface. |
| 43 | * This corresponds to the eXtensible Host Controller Interface (xHCI) | 44 | * This corresponds to the eXtensible Host Controller Interface (xHCI) |
| 44 | * Revision 0.95 specification | 45 | * Revision 0.95 specification |
| 45 | * | ||
| 46 | * Registers should always be accessed with double word or quad word accesses. | ||
| 47 | * | ||
| 48 | * Some xHCI implementations may support 64-bit address pointers. Registers | ||
| 49 | * with 64-bit address pointers should be written to with dword accesses by | ||
| 50 | * writing the low dword first (ptr[0]), then the high dword (ptr[1]) second. | ||
| 51 | * xHCI implementations that do not support 64-bit address pointers will ignore | ||
| 52 | * the high dword, and write order is irrelevant. | ||
| 53 | */ | 46 | */ |
| 54 | 47 | ||
| 55 | /** | 48 | /** |
| @@ -96,6 +89,7 @@ struct xhci_cap_regs { | |||
| 96 | #define HCS_ERST_MAX(p) (((p) >> 4) & 0xf) | 89 | #define HCS_ERST_MAX(p) (((p) >> 4) & 0xf) |
| 97 | /* 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 */ |
| 98 | /* 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) | ||
| 99 | 93 | ||
| 100 | /* HCSPARAMS3 - hcs_params3 - bitmasks */ | 94 | /* HCSPARAMS3 - hcs_params3 - bitmasks */ |
| 101 | /* 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 */ |
| @@ -166,10 +160,10 @@ struct xhci_op_regs { | |||
| 166 | u32 reserved1; | 160 | u32 reserved1; |
| 167 | u32 reserved2; | 161 | u32 reserved2; |
| 168 | u32 dev_notification; | 162 | u32 dev_notification; |
| 169 | u32 cmd_ring[2]; | 163 | u64 cmd_ring; |
| 170 | /* rsvd: offset 0x20-2F */ | 164 | /* rsvd: offset 0x20-2F */ |
| 171 | u32 reserved3[4]; | 165 | u32 reserved3[4]; |
| 172 | u32 dcbaa_ptr[2]; | 166 | u64 dcbaa_ptr; |
| 173 | u32 config_reg; | 167 | u32 config_reg; |
| 174 | /* rsvd: offset 0x3C-3FF */ | 168 | /* rsvd: offset 0x3C-3FF */ |
| 175 | u32 reserved4[241]; | 169 | u32 reserved4[241]; |
| @@ -254,7 +248,7 @@ struct xhci_op_regs { | |||
| 254 | #define CMD_RING_RUNNING (1 << 3) | 248 | #define CMD_RING_RUNNING (1 << 3) |
| 255 | /* bits 4:5 reserved and should be preserved */ | 249 | /* bits 4:5 reserved and should be preserved */ |
| 256 | /* Command Ring pointer - bit mask for the lower 32 bits. */ | 250 | /* Command Ring pointer - bit mask for the lower 32 bits. */ |
| 257 | #define CMD_RING_ADDR_MASK (0xffffffc0) | 251 | #define CMD_RING_RSVD_BITS (0x3f) |
| 258 | 252 | ||
| 259 | /* CONFIG - Configure Register - config_reg bitmasks */ | 253 | /* CONFIG - Configure Register - config_reg bitmasks */ |
| 260 | /* bits 0:7 - maximum number of device slots enabled (NumSlotsEn) */ | 254 | /* bits 0:7 - maximum number of device slots enabled (NumSlotsEn) */ |
| @@ -382,8 +376,8 @@ struct xhci_intr_reg { | |||
| 382 | u32 irq_control; | 376 | u32 irq_control; |
| 383 | u32 erst_size; | 377 | u32 erst_size; |
| 384 | u32 rsvd; | 378 | u32 rsvd; |
| 385 | u32 erst_base[2]; | 379 | u64 erst_base; |
| 386 | u32 erst_dequeue[2]; | 380 | u64 erst_dequeue; |
| 387 | }; | 381 | }; |
| 388 | 382 | ||
| 389 | /* irq_pending bitmasks */ | 383 | /* irq_pending bitmasks */ |
| @@ -453,6 +447,27 @@ struct xhci_doorbell_array { | |||
| 453 | 447 | ||
| 454 | 448 | ||
| 455 | /** | 449 | /** |
| 450 | * struct xhci_container_ctx | ||
| 451 | * @type: Type of context. Used to calculated offsets to contained contexts. | ||
| 452 | * @size: Size of the context data | ||
| 453 | * @bytes: The raw context data given to HW | ||
| 454 | * @dma: dma address of the bytes | ||
| 455 | * | ||
| 456 | * Represents either a Device or Input context. Holds a pointer to the raw | ||
| 457 | * memory used for the context (bytes) and dma address of it (dma). | ||
| 458 | */ | ||
| 459 | struct xhci_container_ctx { | ||
| 460 | unsigned type; | ||
| 461 | #define XHCI_CTX_TYPE_DEVICE 0x1 | ||
| 462 | #define XHCI_CTX_TYPE_INPUT 0x2 | ||
| 463 | |||
| 464 | int size; | ||
| 465 | |||
| 466 | u8 *bytes; | ||
| 467 | dma_addr_t dma; | ||
| 468 | }; | ||
| 469 | |||
| 470 | /** | ||
| 456 | * struct xhci_slot_ctx | 471 | * struct xhci_slot_ctx |
| 457 | * @dev_info: Route string, device speed, hub info, and last valid endpoint | 472 | * @dev_info: Route string, device speed, hub info, and last valid endpoint |
| 458 | * @dev_info2: Max exit latency for device number, root hub port number | 473 | * @dev_info2: Max exit latency for device number, root hub port number |
| @@ -538,7 +553,7 @@ struct xhci_slot_ctx { | |||
| 538 | struct xhci_ep_ctx { | 553 | struct xhci_ep_ctx { |
| 539 | u32 ep_info; | 554 | u32 ep_info; |
| 540 | u32 ep_info2; | 555 | u32 ep_info2; |
| 541 | u32 deq[2]; | 556 | u64 deq; |
| 542 | u32 tx_info; | 557 | u32 tx_info; |
| 543 | /* offset 0x14 - 0x1f reserved for HC internal use */ | 558 | /* offset 0x14 - 0x1f reserved for HC internal use */ |
| 544 | u32 reserved[3]; | 559 | u32 reserved[3]; |
| @@ -589,18 +604,16 @@ struct xhci_ep_ctx { | |||
| 589 | 604 | ||
| 590 | 605 | ||
| 591 | /** | 606 | /** |
| 592 | * struct xhci_device_control | 607 | * struct xhci_input_control_context |
| 593 | * Input/Output context; see section 6.2.5. | 608 | * Input control context; see section 6.2.5. |
| 594 | * | 609 | * |
| 595 | * @drop_context: set the bit of the endpoint context you want to disable | 610 | * @drop_context: set the bit of the endpoint context you want to disable |
| 596 | * @add_context: set the bit of the endpoint context you want to enable | 611 | * @add_context: set the bit of the endpoint context you want to enable |
| 597 | */ | 612 | */ |
| 598 | struct xhci_device_control { | 613 | struct xhci_input_control_ctx { |
| 599 | u32 drop_flags; | 614 | u32 drop_flags; |
| 600 | u32 add_flags; | 615 | u32 add_flags; |
| 601 | u32 rsvd[6]; | 616 | u32 rsvd2[6]; |
| 602 | struct xhci_slot_ctx slot; | ||
| 603 | struct xhci_ep_ctx ep[31]; | ||
| 604 | }; | 617 | }; |
| 605 | 618 | ||
| 606 | /* drop context bitmasks */ | 619 | /* drop context bitmasks */ |
| @@ -608,7 +621,6 @@ struct xhci_device_control { | |||
| 608 | /* add context bitmasks */ | 621 | /* add context bitmasks */ |
| 609 | #define ADD_EP(x) (0x1 << x) | 622 | #define ADD_EP(x) (0x1 << x) |
| 610 | 623 | ||
| 611 | |||
| 612 | struct xhci_virt_device { | 624 | struct xhci_virt_device { |
| 613 | /* | 625 | /* |
| 614 | * Commands to the hardware are passed an "input context" that | 626 | * Commands to the hardware are passed an "input context" that |
| @@ -618,11 +630,10 @@ struct xhci_virt_device { | |||
| 618 | * track of input and output contexts separately because | 630 | * track of input and output contexts separately because |
| 619 | * these commands might fail and we don't trust the hardware. | 631 | * these commands might fail and we don't trust the hardware. |
| 620 | */ | 632 | */ |
| 621 | struct xhci_device_control *out_ctx; | 633 | struct xhci_container_ctx *out_ctx; |
| 622 | dma_addr_t out_ctx_dma; | ||
| 623 | /* Used for addressing devices and configuration changes */ | 634 | /* Used for addressing devices and configuration changes */ |
| 624 | struct xhci_device_control *in_ctx; | 635 | struct xhci_container_ctx *in_ctx; |
| 625 | dma_addr_t in_ctx_dma; | 636 | |
| 626 | /* FIXME when stream support is added */ | 637 | /* FIXME when stream support is added */ |
| 627 | struct xhci_ring *ep_rings[31]; | 638 | struct xhci_ring *ep_rings[31]; |
| 628 | /* Temporary storage in case the configure endpoint command fails and we | 639 | /* Temporary storage in case the configure endpoint command fails and we |
| @@ -641,7 +652,7 @@ struct xhci_virt_device { | |||
| 641 | */ | 652 | */ |
| 642 | struct xhci_device_context_array { | 653 | struct xhci_device_context_array { |
| 643 | /* 64-bit device addresses; we only write 32-bit addresses */ | 654 | /* 64-bit device addresses; we only write 32-bit addresses */ |
| 644 | u32 dev_context_ptrs[2*MAX_HC_SLOTS]; | 655 | u64 dev_context_ptrs[MAX_HC_SLOTS]; |
| 645 | /* private xHCD pointers */ | 656 | /* private xHCD pointers */ |
| 646 | dma_addr_t dma; | 657 | dma_addr_t dma; |
| 647 | }; | 658 | }; |
| @@ -654,7 +665,7 @@ struct xhci_device_context_array { | |||
| 654 | 665 | ||
| 655 | struct xhci_stream_ctx { | 666 | struct xhci_stream_ctx { |
| 656 | /* 64-bit stream ring address, cycle state, and stream type */ | 667 | /* 64-bit stream ring address, cycle state, and stream type */ |
| 657 | u32 stream_ring[2]; | 668 | u64 stream_ring; |
| 658 | /* offset 0x14 - 0x1f reserved for HC internal use */ | 669 | /* offset 0x14 - 0x1f reserved for HC internal use */ |
| 659 | u32 reserved[2]; | 670 | u32 reserved[2]; |
| 660 | }; | 671 | }; |
| @@ -662,7 +673,7 @@ struct xhci_stream_ctx { | |||
| 662 | 673 | ||
| 663 | struct xhci_transfer_event { | 674 | struct xhci_transfer_event { |
| 664 | /* 64-bit buffer address, or immediate data */ | 675 | /* 64-bit buffer address, or immediate data */ |
| 665 | u32 buffer[2]; | 676 | u64 buffer; |
| 666 | u32 transfer_len; | 677 | u32 transfer_len; |
| 667 | /* This field is interpreted differently based on the type of TRB */ | 678 | /* This field is interpreted differently based on the type of TRB */ |
| 668 | u32 flags; | 679 | u32 flags; |
| @@ -744,7 +755,7 @@ struct xhci_transfer_event { | |||
| 744 | 755 | ||
| 745 | struct xhci_link_trb { | 756 | struct xhci_link_trb { |
| 746 | /* 64-bit segment pointer*/ | 757 | /* 64-bit segment pointer*/ |
| 747 | u32 segment_ptr[2]; | 758 | u64 segment_ptr; |
| 748 | u32 intr_target; | 759 | u32 intr_target; |
| 749 | u32 control; | 760 | u32 control; |
| 750 | }; | 761 | }; |
| @@ -755,7 +766,7 @@ struct xhci_link_trb { | |||
| 755 | /* Command completion event TRB */ | 766 | /* Command completion event TRB */ |
| 756 | struct xhci_event_cmd { | 767 | struct xhci_event_cmd { |
| 757 | /* Pointer to command TRB, or the value passed by the event data trb */ | 768 | /* Pointer to command TRB, or the value passed by the event data trb */ |
| 758 | u32 cmd_trb[2]; | 769 | u64 cmd_trb; |
| 759 | u32 status; | 770 | u32 status; |
| 760 | u32 flags; | 771 | u32 flags; |
| 761 | }; | 772 | }; |
| @@ -848,8 +859,8 @@ union xhci_trb { | |||
| 848 | #define TRB_CONFIG_EP 12 | 859 | #define TRB_CONFIG_EP 12 |
| 849 | /* Evaluate Context Command */ | 860 | /* Evaluate Context Command */ |
| 850 | #define TRB_EVAL_CONTEXT 13 | 861 | #define TRB_EVAL_CONTEXT 13 |
| 851 | /* Reset Transfer Ring Command */ | 862 | /* Reset Endpoint Command */ |
| 852 | #define TRB_RESET_RING 14 | 863 | #define TRB_RESET_EP 14 |
| 853 | /* Stop Transfer Ring Command */ | 864 | /* Stop Transfer Ring Command */ |
| 854 | #define TRB_STOP_RING 15 | 865 | #define TRB_STOP_RING 15 |
| 855 | /* Set Transfer Ring Dequeue Pointer Command */ | 866 | /* Set Transfer Ring Dequeue Pointer Command */ |
| @@ -929,6 +940,7 @@ struct xhci_ring { | |||
| 929 | unsigned int cancels_pending; | 940 | unsigned int cancels_pending; |
| 930 | unsigned int state; | 941 | unsigned int state; |
| 931 | #define SET_DEQ_PENDING (1 << 0) | 942 | #define SET_DEQ_PENDING (1 << 0) |
| 943 | #define EP_HALTED (1 << 1) | ||
| 932 | /* The TRB that was last reported in a stopped endpoint ring */ | 944 | /* The TRB that was last reported in a stopped endpoint ring */ |
| 933 | union xhci_trb *stopped_trb; | 945 | union xhci_trb *stopped_trb; |
| 934 | struct xhci_td *stopped_td; | 946 | struct xhci_td *stopped_td; |
| @@ -940,9 +952,15 @@ struct xhci_ring { | |||
| 940 | u32 cycle_state; | 952 | u32 cycle_state; |
| 941 | }; | 953 | }; |
| 942 | 954 | ||
| 955 | struct xhci_dequeue_state { | ||
| 956 | struct xhci_segment *new_deq_seg; | ||
| 957 | union xhci_trb *new_deq_ptr; | ||
| 958 | int new_cycle_state; | ||
| 959 | }; | ||
| 960 | |||
| 943 | struct xhci_erst_entry { | 961 | struct xhci_erst_entry { |
| 944 | /* 64-bit event ring segment address */ | 962 | /* 64-bit event ring segment address */ |
| 945 | u32 seg_addr[2]; | 963 | u64 seg_addr; |
| 946 | u32 seg_size; | 964 | u32 seg_size; |
| 947 | /* Set to zero */ | 965 | /* Set to zero */ |
| 948 | u32 rsvd; | 966 | u32 rsvd; |
| @@ -957,6 +975,13 @@ struct xhci_erst { | |||
| 957 | unsigned int erst_size; | 975 | unsigned int erst_size; |
| 958 | }; | 976 | }; |
| 959 | 977 | ||
| 978 | struct xhci_scratchpad { | ||
| 979 | u64 *sp_array; | ||
| 980 | dma_addr_t sp_dma; | ||
| 981 | void **sp_buffers; | ||
| 982 | dma_addr_t *sp_dma_buffers; | ||
| 983 | }; | ||
| 984 | |||
| 960 | /* | 985 | /* |
| 961 | * Each segment table entry is 4*32bits long. 1K seems like an ok size: | 986 | * Each segment table entry is 4*32bits long. 1K seems like an ok size: |
| 962 | * (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table, | 987 | * (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table, |
| @@ -1011,6 +1036,9 @@ struct xhci_hcd { | |||
| 1011 | struct xhci_ring *cmd_ring; | 1036 | struct xhci_ring *cmd_ring; |
| 1012 | struct xhci_ring *event_ring; | 1037 | struct xhci_ring *event_ring; |
| 1013 | struct xhci_erst erst; | 1038 | struct xhci_erst erst; |
| 1039 | /* Scratchpad */ | ||
| 1040 | struct xhci_scratchpad *scratchpad; | ||
| 1041 | |||
| 1014 | /* slot enabling and address device helpers */ | 1042 | /* slot enabling and address device helpers */ |
| 1015 | struct completion addr_dev; | 1043 | struct completion addr_dev; |
| 1016 | int slot_id; | 1044 | int slot_id; |
| @@ -1071,13 +1099,43 @@ static inline unsigned int xhci_readl(const struct xhci_hcd *xhci, | |||
| 1071 | static inline void xhci_writel(struct xhci_hcd *xhci, | 1099 | static inline void xhci_writel(struct xhci_hcd *xhci, |
| 1072 | const unsigned int val, __u32 __iomem *regs) | 1100 | const unsigned int val, __u32 __iomem *regs) |
| 1073 | { | 1101 | { |
| 1074 | if (!in_interrupt()) | 1102 | xhci_dbg(xhci, |
| 1075 | xhci_dbg(xhci, | 1103 | "`MEM_WRITE_DWORD(3'b000, 32'h%p, 32'h%0x, 4'hf);\n", |
| 1076 | "`MEM_WRITE_DWORD(3'b000, 32'h%p, 32'h%0x, 4'hf);\n", | 1104 | regs, val); |
| 1077 | regs, val); | ||
| 1078 | writel(val, regs); | 1105 | writel(val, regs); |
| 1079 | } | 1106 | } |
| 1080 | 1107 | ||
| 1108 | /* | ||
| 1109 | * Registers should always be accessed with double word or quad word accesses. | ||
| 1110 | * | ||
| 1111 | * Some xHCI implementations may support 64-bit address pointers. Registers | ||
| 1112 | * with 64-bit address pointers should be written to with dword accesses by | ||
| 1113 | * writing the low dword first (ptr[0]), then the high dword (ptr[1]) second. | ||
| 1114 | * xHCI implementations that do not support 64-bit address pointers will ignore | ||
| 1115 | * the high dword, and write order is irrelevant. | ||
| 1116 | */ | ||
| 1117 | static inline u64 xhci_read_64(const struct xhci_hcd *xhci, | ||
| 1118 | __u64 __iomem *regs) | ||
| 1119 | { | ||
| 1120 | __u32 __iomem *ptr = (__u32 __iomem *) regs; | ||
| 1121 | u64 val_lo = readl(ptr); | ||
| 1122 | u64 val_hi = readl(ptr + 1); | ||
| 1123 | return val_lo + (val_hi << 32); | ||
| 1124 | } | ||
| 1125 | static inline void xhci_write_64(struct xhci_hcd *xhci, | ||
| 1126 | const u64 val, __u64 __iomem *regs) | ||
| 1127 | { | ||
| 1128 | __u32 __iomem *ptr = (__u32 __iomem *) regs; | ||
| 1129 | u32 val_lo = lower_32_bits(val); | ||
| 1130 | u32 val_hi = upper_32_bits(val); | ||
| 1131 | |||
| 1132 | xhci_dbg(xhci, | ||
| 1133 | "`MEM_WRITE_DWORD(3'b000, 64'h%p, 64'h%0lx, 4'hf);\n", | ||
| 1134 | regs, (long unsigned int) val); | ||
| 1135 | writel(val_lo, ptr); | ||
| 1136 | writel(val_hi, ptr + 1); | ||
| 1137 | } | ||
| 1138 | |||
| 1081 | /* xHCI debugging */ | 1139 | /* xHCI debugging */ |
| 1082 | void xhci_print_ir_set(struct xhci_hcd *xhci, struct xhci_intr_reg *ir_set, int set_num); | 1140 | void xhci_print_ir_set(struct xhci_hcd *xhci, struct xhci_intr_reg *ir_set, int set_num); |
| 1083 | void xhci_print_registers(struct xhci_hcd *xhci); | 1141 | void xhci_print_registers(struct xhci_hcd *xhci); |
| @@ -1090,7 +1148,7 @@ void xhci_debug_ring(struct xhci_hcd *xhci, struct xhci_ring *ring); | |||
| 1090 | void xhci_dbg_erst(struct xhci_hcd *xhci, struct xhci_erst *erst); | 1148 | void xhci_dbg_erst(struct xhci_hcd *xhci, struct xhci_erst *erst); |
| 1091 | void xhci_dbg_cmd_ptrs(struct xhci_hcd *xhci); | 1149 | void xhci_dbg_cmd_ptrs(struct xhci_hcd *xhci); |
| 1092 | void xhci_dbg_ring_ptrs(struct xhci_hcd *xhci, struct xhci_ring *ring); | 1150 | void xhci_dbg_ring_ptrs(struct xhci_hcd *xhci, struct xhci_ring *ring); |
| 1093 | void xhci_dbg_ctx(struct xhci_hcd *xhci, struct xhci_device_control *ctx, dma_addr_t dma, unsigned int last_ep); | 1151 | void xhci_dbg_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx, unsigned int last_ep); |
| 1094 | 1152 | ||
| 1095 | /* xHCI memory managment */ | 1153 | /* xHCI memory managment */ |
| 1096 | void xhci_mem_cleanup(struct xhci_hcd *xhci); | 1154 | void xhci_mem_cleanup(struct xhci_hcd *xhci); |
| @@ -1128,6 +1186,7 @@ int xhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags); | |||
| 1128 | int xhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status); | 1186 | int xhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status); |
| 1129 | int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev, struct usb_host_endpoint *ep); | 1187 | int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev, struct usb_host_endpoint *ep); |
| 1130 | int xhci_drop_endpoint(struct usb_hcd *hcd, struct usb_device *udev, struct usb_host_endpoint *ep); | 1188 | int xhci_drop_endpoint(struct usb_hcd *hcd, struct usb_device *udev, struct usb_host_endpoint *ep); |
| 1189 | void xhci_endpoint_reset(struct usb_hcd *hcd, struct usb_host_endpoint *ep); | ||
| 1131 | int xhci_check_bandwidth(struct usb_hcd *hcd, struct usb_device *udev); | 1190 | int xhci_check_bandwidth(struct usb_hcd *hcd, struct usb_device *udev); |
| 1132 | void xhci_reset_bandwidth(struct usb_hcd *hcd, struct usb_device *udev); | 1191 | void xhci_reset_bandwidth(struct usb_hcd *hcd, struct usb_device *udev); |
| 1133 | 1192 | ||
| @@ -1148,10 +1207,23 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags, struct urb *urb, | |||
| 1148 | int slot_id, unsigned int ep_index); | 1207 | int slot_id, unsigned int ep_index); |
| 1149 | int xhci_queue_configure_endpoint(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr, | 1208 | int xhci_queue_configure_endpoint(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr, |
| 1150 | u32 slot_id); | 1209 | u32 slot_id); |
| 1210 | int xhci_queue_reset_ep(struct xhci_hcd *xhci, int slot_id, | ||
| 1211 | unsigned int ep_index); | ||
| 1212 | void xhci_find_new_dequeue_state(struct xhci_hcd *xhci, | ||
| 1213 | unsigned int slot_id, unsigned int ep_index, | ||
| 1214 | struct xhci_td *cur_td, struct xhci_dequeue_state *state); | ||
| 1215 | void xhci_queue_new_dequeue_state(struct xhci_hcd *xhci, | ||
| 1216 | struct xhci_ring *ep_ring, unsigned int slot_id, | ||
| 1217 | unsigned int ep_index, struct xhci_dequeue_state *deq_state); | ||
| 1151 | 1218 | ||
| 1152 | /* xHCI roothub code */ | 1219 | /* xHCI roothub code */ |
| 1153 | int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, u16 wIndex, | 1220 | int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, u16 wIndex, |
| 1154 | char *buf, u16 wLength); | 1221 | char *buf, u16 wLength); |
| 1155 | int xhci_hub_status_data(struct usb_hcd *hcd, char *buf); | 1222 | int xhci_hub_status_data(struct usb_hcd *hcd, char *buf); |
| 1156 | 1223 | ||
| 1224 | /* xHCI contexts */ | ||
| 1225 | struct xhci_input_control_ctx *xhci_get_input_control_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx); | ||
| 1226 | struct xhci_slot_ctx *xhci_get_slot_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx); | ||
| 1227 | struct xhci_ep_ctx *xhci_get_ep_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx, unsigned int ep_index); | ||
| 1228 | |||
| 1157 | #endif /* __LINUX_XHCI_HCD_H */ | 1229 | #endif /* __LINUX_XHCI_HCD_H */ |
