cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cdc-acm.h (3937B)


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