.. | .. |
---|
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) { |
---|