| .. | .. |
|---|
| 923 | 923 | return 0; |
|---|
| 924 | 924 | } |
|---|
| 925 | 925 | |
|---|
| 926 | | -static void ep_rx_tasklet(unsigned long data) |
|---|
| 926 | +static void ep_rx_tasklet(struct tasklet_struct *t) |
|---|
| 927 | 927 | { |
|---|
| 928 | | - struct qe_udc *udc = (struct qe_udc *)data; |
|---|
| 928 | + struct qe_udc *udc = from_tasklet(udc, t, rx_tasklet); |
|---|
| 929 | 929 | struct qe_ep *ep; |
|---|
| 930 | 930 | struct qe_frame *pframe; |
|---|
| 931 | 931 | struct qe_bd __iomem *bd; |
|---|
| .. | .. |
|---|
| 1950 | 1950 | } else if ((request_type & USB_RECIP_MASK) == USB_RECIP_ENDPOINT) { |
|---|
| 1951 | 1951 | /* Get endpoint status */ |
|---|
| 1952 | 1952 | int pipe = index & USB_ENDPOINT_NUMBER_MASK; |
|---|
| 1953 | | - struct qe_ep *target_ep = &udc->eps[pipe]; |
|---|
| 1953 | + struct qe_ep *target_ep; |
|---|
| 1954 | 1954 | u16 usep; |
|---|
| 1955 | + |
|---|
| 1956 | + if (pipe >= USB_MAX_ENDPOINTS) |
|---|
| 1957 | + goto stall; |
|---|
| 1958 | + target_ep = &udc->eps[pipe]; |
|---|
| 1955 | 1959 | |
|---|
| 1956 | 1960 | /* stall if endpoint doesn't exist */ |
|---|
| 1957 | 1961 | if (!target_ep->ep.desc) |
|---|
| .. | .. |
|---|
| 2553 | 2557 | DMA_TO_DEVICE); |
|---|
| 2554 | 2558 | } |
|---|
| 2555 | 2559 | |
|---|
| 2556 | | - tasklet_init(&udc->rx_tasklet, ep_rx_tasklet, |
|---|
| 2557 | | - (unsigned long)udc); |
|---|
| 2560 | + tasklet_setup(&udc->rx_tasklet, ep_rx_tasklet); |
|---|
| 2558 | 2561 | /* request irq and disable DR */ |
|---|
| 2559 | 2562 | udc->usb_irq = irq_of_parse_and_map(np, 0); |
|---|
| 2560 | 2563 | if (!udc->usb_irq) { |
|---|