linux/drivers/usb/gadget/function/u_fs.h
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * u_fs.h
   4 *
   5 * Utility definitions for the FunctionFS
   6 *
   7 * Copyright (c) 2013 Samsung Electronics Co., Ltd.
   8 *              http://www.samsung.com
   9 *
  10 * Author: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
  11 */
  12
  13#ifndef U_FFS_H
  14#define U_FFS_H
  15
  16#include <linux/usb/composite.h>
  17#include <linux/list.h>
  18#include <linux/mutex.h>
  19#include <linux/workqueue.h>
  20#include <linux/refcount.h>
  21
  22#ifdef VERBOSE_DEBUG
  23#ifndef pr_vdebug
  24#  define pr_vdebug pr_debug
  25#endif /* pr_vdebug */
  26#  define ffs_dump_mem(prefix, ptr, len) \
  27        print_hex_dump_bytes(pr_fmt(prefix ": "), DUMP_PREFIX_NONE, ptr, len)
  28#else
  29#ifndef pr_vdebug
  30#  define pr_vdebug(...)                 do { } while (0)
  31#endif /* pr_vdebug */
  32#  define ffs_dump_mem(prefix, ptr, len) do { } while (0)
  33#endif /* VERBOSE_DEBUG */
  34
  35#define ENTER()    pr_vdebug("%s()\n", __func__)
  36
  37struct f_fs_opts;
  38
  39struct ffs_dev {
  40        struct ffs_data *ffs_data;
  41        struct f_fs_opts *opts;
  42        struct list_head entry;
  43
  44        char name[41];
  45
  46        bool mounted;
  47        bool desc_ready;
  48        bool single;
  49
  50        int (*ffs_ready_callback)(struct ffs_data *ffs);
  51        void (*ffs_closed_callback)(struct ffs_data *ffs);
  52        void *(*ffs_acquire_dev_callback)(struct ffs_dev *dev);
  53        void (*ffs_release_dev_callback)(struct ffs_dev *dev);
  54};
  55
  56extern struct mutex ffs_lock;
  57
  58static inline void ffs_dev_lock(void)
  59{
  60        mutex_lock(&ffs_lock);
  61}
  62
  63static inline void ffs_dev_unlock(void)
  64{
  65        mutex_unlock(&ffs_lock);
  66}
  67
  68int ffs_name_dev(struct ffs_dev *dev, const char *name);
  69int ffs_single_dev(struct ffs_dev *dev);
  70
  71struct ffs_epfile;
  72struct ffs_function;
  73
  74enum ffs_state {
  75        /*
  76         * Waiting for descriptors and strings.
  77         *
  78         * In this state no open(2), read(2) or write(2) on epfiles
  79         * may succeed (which should not be the problem as there
  80         * should be no such files opened in the first place).
  81         */
  82        FFS_READ_DESCRIPTORS,
  83        FFS_READ_STRINGS,
  84
  85        /*
  86         * We've got descriptors and strings.  We are or have called
  87         * functionfs_ready_callback().  functionfs_bind() may have
  88         * been called but we don't know.
  89         *
  90         * This is the only state in which operations on epfiles may
  91         * succeed.
  92         */
  93        FFS_ACTIVE,
  94
  95        /*
  96         * Function is visible to host, but it's not functional. All
  97         * setup requests are stalled and transfers on another endpoints
  98         * are refused. All epfiles, except ep0, are deleted so there
  99         * is no way to perform any operations on them.
 100         *
 101         * This state is set after closing all functionfs files, when
 102         * mount parameter "no_disconnect=1" has been set. Function will
 103         * remain in deactivated state until filesystem is umounted or
 104         * ep0 is opened again. In the second case functionfs state will
 105         * be reset, and it will be ready for descriptors and strings
 106         * writing.
 107         *
 108         * This is useful only when functionfs is composed to gadget
 109         * with another function which can perform some critical
 110         * operations, and it's strongly desired to have this operations
 111         * completed, even after functionfs files closure.
 112         */
 113        FFS_DEACTIVATED,
 114
 115        /*
 116         * All endpoints have been closed.  This state is also set if
 117         * we encounter an unrecoverable error.  The only
 118         * unrecoverable error is situation when after reading strings
 119         * from user space we fail to initialise epfiles or
 120         * functionfs_ready_callback() returns with error (<0).
 121         *
 122         * In this state no open(2), read(2) or write(2) (both on ep0
 123         * as well as epfile) may succeed (at this point epfiles are
 124         * unlinked and all closed so this is not a problem; ep0 is
 125         * also closed but ep0 file exists and so open(2) on ep0 must
 126         * fail).
 127         */
 128        FFS_CLOSING
 129};
 130
 131enum ffs_setup_state {
 132        /* There is no setup request pending. */
 133        FFS_NO_SETUP,
 134        /*
 135         * User has read events and there was a setup request event
 136         * there.  The next read/write on ep0 will handle the
 137         * request.
 138         */
 139        FFS_SETUP_PENDING,
 140        /*
 141         * There was event pending but before user space handled it
 142         * some other event was introduced which canceled existing
 143         * setup.  If this state is set read/write on ep0 return
 144         * -EIDRM.  This state is only set when adding event.
 145         */
 146        FFS_SETUP_CANCELLED
 147};
 148
 149struct ffs_data {
 150        struct usb_gadget               *gadget;
 151
 152        /*
 153         * Protect access read/write operations, only one read/write
 154         * at a time.  As a consequence protects ep0req and company.
 155         * While setup request is being processed (queued) this is
 156         * held.
 157         */
 158        struct mutex                    mutex;
 159
 160        /*
 161         * Protect access to endpoint related structures (basically
 162         * usb_ep_queue(), usb_ep_dequeue(), etc. calls) except for
 163         * endpoint zero.
 164         */
 165        spinlock_t                      eps_lock;
 166
 167        /*
 168         * XXX REVISIT do we need our own request? Since we are not
 169         * handling setup requests immediately user space may be so
 170         * slow that another setup will be sent to the gadget but this
 171         * time not to us but another function and then there could be
 172         * a race.  Is that the case? Or maybe we can use cdev->req
 173         * after all, maybe we just need some spinlock for that?
 174         */
 175        struct usb_request              *ep0req;                /* P: mutex */
 176        struct completion               ep0req_completion;      /* P: mutex */
 177
 178        /* reference counter */
 179        refcount_t                      ref;
 180        /* how many files are opened (EP0 and others) */
 181        atomic_t                        opened;
 182
 183        /* EP0 state */
 184        enum ffs_state                  state;
 185
 186        /*
 187         * Possible transitions:
 188         * + FFS_NO_SETUP        -> FFS_SETUP_PENDING  -- P: ev.waitq.lock
 189         *               happens only in ep0 read which is P: mutex
 190         * + FFS_SETUP_PENDING   -> FFS_NO_SETUP       -- P: ev.waitq.lock
 191         *               happens only in ep0 i/o  which is P: mutex
 192         * + FFS_SETUP_PENDING   -> FFS_SETUP_CANCELLED -- P: ev.waitq.lock
 193         * + FFS_SETUP_CANCELLED -> FFS_NO_SETUP        -- cmpxchg
 194         *
 195         * This field should never be accessed directly and instead
 196         * ffs_setup_state_clear_cancelled function should be used.
 197         */
 198        enum ffs_setup_state            setup_state;
 199
 200        /* Events & such. */
 201        struct {
 202                u8                              types[4];
 203                unsigned short                  count;
 204                /* XXX REVISIT need to update it in some places, or do we? */
 205                unsigned short                  can_stall;
 206                struct usb_ctrlrequest          setup;
 207
 208                wait_queue_head_t               waitq;
 209        } ev; /* the whole structure, P: ev.waitq.lock */
 210
 211        /* Flags */
 212        unsigned long                   flags;
 213#define FFS_FL_CALL_CLOSED_CALLBACK 0
 214#define FFS_FL_BOUND                1
 215
 216        /* For waking up blocked threads when function is enabled. */
 217        wait_queue_head_t               wait;
 218
 219        /* Active function */
 220        struct ffs_function             *func;
 221
 222        /*
 223         * Device name, write once when file system is mounted.
 224         * Intended for user to read if she wants.
 225         */
 226        const char                      *dev_name;
 227        /* Private data for our user (ie. gadget).  Managed by user. */
 228        void                            *private_data;
 229
 230        /* filled by __ffs_data_got_descs() */
 231        /*
 232         * raw_descs is what you kfree, real_descs points inside of raw_descs,
 233         * where full speed, high speed and super speed descriptors start.
 234         * real_descs_length is the length of all those descriptors.
 235         */
 236        const void                      *raw_descs_data;
 237        const void                      *raw_descs;
 238        unsigned                        raw_descs_length;
 239        unsigned                        fs_descs_count;
 240        unsigned                        hs_descs_count;
 241        unsigned                        ss_descs_count;
 242        unsigned                        ms_os_descs_count;
 243        unsigned                        ms_os_descs_ext_prop_count;
 244        unsigned                        ms_os_descs_ext_prop_name_len;
 245        unsigned                        ms_os_descs_ext_prop_data_len;
 246        void                            *ms_os_descs_ext_prop_avail;
 247        void                            *ms_os_descs_ext_prop_name_avail;
 248        void                            *ms_os_descs_ext_prop_data_avail;
 249
 250        unsigned                        user_flags;
 251
 252#define FFS_MAX_EPS_COUNT 31
 253        u8                              eps_addrmap[FFS_MAX_EPS_COUNT];
 254
 255        unsigned short                  strings_count;
 256        unsigned short                  interfaces_count;
 257        unsigned short                  eps_count;
 258        unsigned short                  _pad1;
 259
 260        /* filled by __ffs_data_got_strings() */
 261        /* ids in stringtabs are set in functionfs_bind() */
 262        const void                      *raw_strings;
 263        struct usb_gadget_strings       **stringtabs;
 264
 265        /*
 266         * File system's super block, write once when file system is
 267         * mounted.
 268         */
 269        struct super_block              *sb;
 270
 271        /* File permissions, written once when fs is mounted */
 272        struct ffs_file_perms {
 273                umode_t                         mode;
 274                kuid_t                          uid;
 275                kgid_t                          gid;
 276        }                               file_perms;
 277
 278        struct eventfd_ctx *ffs_eventfd;
 279        struct workqueue_struct *io_completion_wq;
 280        bool no_disconnect;
 281        struct work_struct reset_work;
 282
 283        /*
 284         * The endpoint files, filled by ffs_epfiles_create(),
 285         * destroyed by ffs_epfiles_destroy().
 286         */
 287        struct ffs_epfile               *epfiles;
 288};
 289
 290
 291struct f_fs_opts {
 292        struct usb_function_instance    func_inst;
 293        struct ffs_dev                  *dev;
 294        unsigned                        refcnt;
 295        bool                            no_configfs;
 296};
 297
 298static inline struct f_fs_opts *to_f_fs_opts(struct usb_function_instance *fi)
 299{
 300        return container_of(fi, struct f_fs_opts, func_inst);
 301}
 302
 303#endif /* U_FFS_H */
 304