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

isp1760-udc.h (2400B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Driver for the NXP ISP1761 device controller
      4 *
      5 * Copyright 2021 Linaro, Rui Miguel Silva
      6 * Copyright 2014 Ideas on Board Oy
      7 *
      8 * Contacts:
      9 *	Laurent Pinchart <laurent.pinchart@ideasonboard.com>
     10 *	Rui Miguel Silva <rui.silva@linaro.org>
     11 */
     12
     13#ifndef _ISP1760_UDC_H_
     14#define _ISP1760_UDC_H_
     15
     16#include <linux/ioport.h>
     17#include <linux/list.h>
     18#include <linux/spinlock.h>
     19#include <linux/timer.h>
     20#include <linux/usb/gadget.h>
     21
     22#include "isp1760-regs.h"
     23
     24struct isp1760_device;
     25struct isp1760_udc;
     26
     27enum isp1760_ctrl_state {
     28	ISP1760_CTRL_SETUP,		/* Waiting for a SETUP transaction */
     29	ISP1760_CTRL_DATA_IN,		/* Setup received, data IN stage */
     30	ISP1760_CTRL_DATA_OUT,		/* Setup received, data OUT stage */
     31	ISP1760_CTRL_STATUS,		/* 0-length request in status stage */
     32};
     33
     34struct isp1760_ep {
     35	struct isp1760_udc *udc;
     36	struct usb_ep ep;
     37
     38	struct list_head queue;
     39
     40	unsigned int addr;
     41	unsigned int maxpacket;
     42	char name[7];
     43
     44	const struct usb_endpoint_descriptor *desc;
     45
     46	bool rx_pending;
     47	bool halted;
     48	bool wedged;
     49};
     50
     51/**
     52 * struct isp1760_udc - UDC state information
     53 * irq: IRQ number
     54 * irqname: IRQ name (as passed to request_irq)
     55 * regs: regmap for UDC registers
     56 * driver: Gadget driver
     57 * gadget: Gadget device
     58 * lock: Protects driver, vbus_timer, ep, ep0_*, DC_EPINDEX register
     59 * ep: Array of endpoints
     60 * ep0_state: Control request state for endpoint 0
     61 * ep0_dir: Direction of the current control request
     62 * ep0_length: Length of the current control request
     63 * connected: Tracks gadget driver bus connection state
     64 */
     65struct isp1760_udc {
     66	struct isp1760_device *isp;
     67
     68	int irq;
     69	char *irqname;
     70
     71	struct regmap *regs;
     72	struct regmap_field *fields[DC_FIELD_MAX];
     73
     74	struct usb_gadget_driver *driver;
     75	struct usb_gadget gadget;
     76
     77	spinlock_t lock;
     78	struct timer_list vbus_timer;
     79
     80	struct isp1760_ep ep[15];
     81
     82	enum isp1760_ctrl_state ep0_state;
     83	u8 ep0_dir;
     84	u16 ep0_length;
     85
     86	bool connected;
     87	bool is_isp1763;
     88
     89	unsigned int devstatus;
     90};
     91
     92#ifdef CONFIG_USB_ISP1761_UDC
     93int isp1760_udc_register(struct isp1760_device *isp, int irq,
     94			 unsigned long irqflags);
     95void isp1760_udc_unregister(struct isp1760_device *isp);
     96#else
     97static inline int isp1760_udc_register(struct isp1760_device *isp, int irq,
     98				       unsigned long irqflags)
     99{
    100	return 0;
    101}
    102
    103static inline void isp1760_udc_unregister(struct isp1760_device *isp)
    104{
    105}
    106#endif
    107
    108#endif