1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Includes for cdc-acm.c 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Mainly take from usbnet's cdc-ether part 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun /* 11*4882a593Smuzhiyun * CMSPAR, some architectures can't have space and mark parity. 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #ifndef CMSPAR 15*4882a593Smuzhiyun #define CMSPAR 0 16*4882a593Smuzhiyun #endif 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* 19*4882a593Smuzhiyun * Major and minor numbers. 20*4882a593Smuzhiyun */ 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define ACM_TTY_MAJOR 166 23*4882a593Smuzhiyun #define ACM_TTY_MINORS 256 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define ACM_MINOR_INVALID ACM_TTY_MINORS 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun /* 28*4882a593Smuzhiyun * Requests. 29*4882a593Smuzhiyun */ 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #define USB_RT_ACM (USB_TYPE_CLASS | USB_RECIP_INTERFACE) 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun /* 34*4882a593Smuzhiyun * Output control lines. 35*4882a593Smuzhiyun */ 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #define ACM_CTRL_DTR 0x01 38*4882a593Smuzhiyun #define ACM_CTRL_RTS 0x02 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* 41*4882a593Smuzhiyun * Input control lines and line errors. 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #define ACM_CTRL_DCD 0x01 45*4882a593Smuzhiyun #define ACM_CTRL_DSR 0x02 46*4882a593Smuzhiyun #define ACM_CTRL_BRK 0x04 47*4882a593Smuzhiyun #define ACM_CTRL_RI 0x08 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define ACM_CTRL_FRAMING 0x10 50*4882a593Smuzhiyun #define ACM_CTRL_PARITY 0x20 51*4882a593Smuzhiyun #define ACM_CTRL_OVERRUN 0x40 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /* 54*4882a593Smuzhiyun * Internal driver structures. 55*4882a593Smuzhiyun */ 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* 58*4882a593Smuzhiyun * The only reason to have several buffers is to accommodate assumptions 59*4882a593Smuzhiyun * in line disciplines. They ask for empty space amount, receive our URB size, 60*4882a593Smuzhiyun * and proceed to issue several 1-character writes, assuming they will fit. 61*4882a593Smuzhiyun * The very first write takes a complete URB. Fortunately, this only happens 62*4882a593Smuzhiyun * when processing onlcr, so we only need 2 buffers. These values must be 63*4882a593Smuzhiyun * powers of 2. 64*4882a593Smuzhiyun */ 65*4882a593Smuzhiyun #define ACM_NW 16 66*4882a593Smuzhiyun #define ACM_NR 16 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun struct acm_wb { 69*4882a593Smuzhiyun u8 *buf; 70*4882a593Smuzhiyun dma_addr_t dmah; 71*4882a593Smuzhiyun unsigned int len; 72*4882a593Smuzhiyun struct urb *urb; 73*4882a593Smuzhiyun struct acm *instance; 74*4882a593Smuzhiyun bool use; 75*4882a593Smuzhiyun }; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun struct acm_rb { 78*4882a593Smuzhiyun int size; 79*4882a593Smuzhiyun unsigned char *base; 80*4882a593Smuzhiyun dma_addr_t dma; 81*4882a593Smuzhiyun int index; 82*4882a593Smuzhiyun struct acm *instance; 83*4882a593Smuzhiyun }; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun struct acm { 86*4882a593Smuzhiyun struct usb_device *dev; /* the corresponding usb device */ 87*4882a593Smuzhiyun struct usb_interface *control; /* control interface */ 88*4882a593Smuzhiyun struct usb_interface *data; /* data interface */ 89*4882a593Smuzhiyun unsigned in, out; /* i/o pipes */ 90*4882a593Smuzhiyun struct tty_port port; /* our tty port data */ 91*4882a593Smuzhiyun struct urb *ctrlurb; /* urbs */ 92*4882a593Smuzhiyun u8 *ctrl_buffer; /* buffers of urbs */ 93*4882a593Smuzhiyun dma_addr_t ctrl_dma; /* dma handles of buffers */ 94*4882a593Smuzhiyun u8 *country_codes; /* country codes from device */ 95*4882a593Smuzhiyun unsigned int country_code_size; /* size of this buffer */ 96*4882a593Smuzhiyun unsigned int country_rel_date; /* release date of version */ 97*4882a593Smuzhiyun struct acm_wb wb[ACM_NW]; 98*4882a593Smuzhiyun unsigned long read_urbs_free; 99*4882a593Smuzhiyun struct urb *read_urbs[ACM_NR]; 100*4882a593Smuzhiyun struct acm_rb read_buffers[ACM_NR]; 101*4882a593Smuzhiyun int rx_buflimit; 102*4882a593Smuzhiyun spinlock_t read_lock; 103*4882a593Smuzhiyun u8 *notification_buffer; /* to reassemble fragmented notifications */ 104*4882a593Smuzhiyun unsigned int nb_index; 105*4882a593Smuzhiyun unsigned int nb_size; 106*4882a593Smuzhiyun int transmitting; 107*4882a593Smuzhiyun spinlock_t write_lock; 108*4882a593Smuzhiyun struct mutex mutex; 109*4882a593Smuzhiyun bool disconnected; 110*4882a593Smuzhiyun unsigned long flags; 111*4882a593Smuzhiyun # define EVENT_TTY_WAKEUP 0 112*4882a593Smuzhiyun # define EVENT_RX_STALL 1 113*4882a593Smuzhiyun # define ACM_THROTTLED 2 114*4882a593Smuzhiyun # define ACM_ERROR_DELAY 3 115*4882a593Smuzhiyun unsigned long urbs_in_error_delay; /* these need to be restarted after a delay */ 116*4882a593Smuzhiyun struct usb_cdc_line_coding line; /* bits, stop, parity */ 117*4882a593Smuzhiyun struct delayed_work dwork; /* work queue entry for various purposes */ 118*4882a593Smuzhiyun unsigned int ctrlin; /* input control lines (DCD, DSR, RI, break, overruns) */ 119*4882a593Smuzhiyun unsigned int ctrlout; /* output control lines (DTR, RTS) */ 120*4882a593Smuzhiyun struct async_icount iocount; /* counters for control line changes */ 121*4882a593Smuzhiyun struct async_icount oldcount; /* for comparison of counter */ 122*4882a593Smuzhiyun wait_queue_head_t wioctl; /* for ioctl */ 123*4882a593Smuzhiyun unsigned int writesize; /* max packet size for the output bulk endpoint */ 124*4882a593Smuzhiyun unsigned int readsize,ctrlsize; /* buffer sizes for freeing */ 125*4882a593Smuzhiyun unsigned int minor; /* acm minor number */ 126*4882a593Smuzhiyun unsigned char clocal; /* termios CLOCAL */ 127*4882a593Smuzhiyun unsigned int ctrl_caps; /* control capabilities from the class specific header */ 128*4882a593Smuzhiyun unsigned int susp_count; /* number of suspended interfaces */ 129*4882a593Smuzhiyun unsigned int combined_interfaces:1; /* control and data collapsed */ 130*4882a593Smuzhiyun u8 bInterval; 131*4882a593Smuzhiyun struct usb_anchor delayed; /* writes queued for a device about to be woken */ 132*4882a593Smuzhiyun unsigned long quirks; 133*4882a593Smuzhiyun }; 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun /* constants describing various quirks and errors */ 136*4882a593Smuzhiyun #define NO_UNION_NORMAL BIT(0) 137*4882a593Smuzhiyun #define SINGLE_RX_URB BIT(1) 138*4882a593Smuzhiyun #define NO_CAP_LINE BIT(2) 139*4882a593Smuzhiyun #define IGNORE_DEVICE BIT(3) 140*4882a593Smuzhiyun #define QUIRK_CONTROL_LINE_STATE BIT(4) 141*4882a593Smuzhiyun #define CLEAR_HALT_CONDITIONS BIT(5) 142*4882a593Smuzhiyun #define SEND_ZERO_PACKET BIT(6) 143*4882a593Smuzhiyun #define DISABLE_ECHO BIT(7) 144