#define FSG_DRIVER_DESC "Mass Storage Function"
#define FSG_DRIVER_VERSION "2009/09/11"
-/* to avoid a lot of #ifndef-#endif in the temporary compatibility layer */
-#ifndef USB_FMS_INCLUDED
-#define EXPORT_SYMBOL_GPL_IF_MODULE(m) EXPORT_SYMBOL_GPL(m);
-#else
-#define EXPORT_SYMBOL_GPL_IF_MODULE(m)
-#endif
-
static const char fsg_string_interface[] = "Mass Storage";
#include "storage_common.h"
{
kref_get(&common->ref);
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_get);
+EXPORT_SYMBOL_GPL(fsg_common_get);
void fsg_common_put(struct fsg_common *common)
{
kref_put(&common->ref, fsg_common_release);
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_put);
+EXPORT_SYMBOL_GPL(fsg_common_put);
/* check if fsg_num_buffers is within a valid range */
static inline int fsg_num_buffers_validate(unsigned int fsg_num_buffers)
return -EINVAL;
}
-static struct fsg_common *fsg_common_setup(struct fsg_common *common, bool zero)
+static struct fsg_common *fsg_common_setup(struct fsg_common *common)
{
if (!common) {
common = kzalloc(sizeof(*common), GFP_KERNEL);
return ERR_PTR(-ENOMEM);
common->free_storage_on_release = 1;
} else {
- if (zero)
- memset(common, 0, sizeof(*common));
common->free_storage_on_release = 0;
}
init_rwsem(&common->filesem);
{
common->sysfs = sysfs;
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_set_sysfs);
+EXPORT_SYMBOL_GPL(fsg_common_set_sysfs);
static void _fsg_common_free_buffers(struct fsg_buffhd *buffhds, unsigned n)
{
return -ENOMEM;
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_set_num_buffers);
+EXPORT_SYMBOL_GPL(fsg_common_set_num_buffers);
static inline void fsg_common_remove_sysfs(struct fsg_lun *lun)
{
fsg_lun_close(lun);
kfree(lun);
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_remove_lun);
+EXPORT_SYMBOL_GPL(fsg_common_remove_lun);
static void _fsg_common_remove_luns(struct fsg_common *common, int n)
{
common->luns[i] = NULL;
}
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_remove_luns);
+EXPORT_SYMBOL_GPL(fsg_common_remove_luns);
void fsg_common_remove_luns(struct fsg_common *common)
{
kfree(common->luns);
common->luns = NULL;
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_free_luns);
+EXPORT_SYMBOL_GPL(fsg_common_free_luns);
int fsg_common_set_nluns(struct fsg_common *common, int nluns)
{
return 0;
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_set_nluns);
+EXPORT_SYMBOL_GPL(fsg_common_set_nluns);
void fsg_common_set_ops(struct fsg_common *common,
const struct fsg_operations *ops)
{
common->ops = ops;
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_set_ops);
+EXPORT_SYMBOL_GPL(fsg_common_set_ops);
void fsg_common_free_buffers(struct fsg_common *common)
{
_fsg_common_free_buffers(common->buffhds, common->fsg_num_buffers);
common->buffhds = NULL;
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_free_buffers);
+EXPORT_SYMBOL_GPL(fsg_common_free_buffers);
int fsg_common_set_cdev(struct fsg_common *common,
struct usb_composite_dev *cdev, bool can_stall)
return 0;
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_set_cdev);
+EXPORT_SYMBOL_GPL(fsg_common_set_cdev);
static inline int fsg_common_add_sysfs(struct fsg_common *common,
struct fsg_lun *lun)
kfree(lun);
return rc;
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_create_lun);
+EXPORT_SYMBOL_GPL(fsg_common_create_lun);
int fsg_common_create_luns(struct fsg_common *common, struct fsg_config *cfg)
{
_fsg_common_remove_luns(common, i);
return rc;
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_create_luns);
+EXPORT_SYMBOL_GPL(fsg_common_create_luns);
void fsg_common_set_inquiry_string(struct fsg_common *common, const char *vn,
const char *pn)
: "File-Stor Gadget"),
i);
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_set_inquiry_string);
+EXPORT_SYMBOL_GPL(fsg_common_set_inquiry_string);
int fsg_common_run_thread(struct fsg_common *common)
{
return 0;
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_run_thread);
-
-struct fsg_common *fsg_common_init(struct fsg_common *common,
- struct usb_composite_dev *cdev,
- struct fsg_config *cfg)
-{
- int rc;
-
- common = fsg_common_setup(common, !!common);
- if (IS_ERR(common))
- return common;
- fsg_common_set_sysfs(common, true);
- common->state = FSG_STATE_IDLE;
-
- rc = fsg_common_set_num_buffers(common, cfg->fsg_num_buffers);
- if (rc) {
- if (common->free_storage_on_release)
- kfree(common);
- return ERR_PTR(rc);
- }
- common->ops = cfg->ops;
- common->private_data = cfg->private_data;
-
- rc = fsg_common_set_cdev(common, cdev, cfg->can_stall);
- if (rc)
- goto error_release;
-
- rc = fsg_common_set_nluns(common, cfg->nluns);
- if (rc)
- goto error_release;
-
- rc = fsg_common_create_luns(common, cfg);
- if (rc)
- goto error_release;
-
-
- fsg_common_set_inquiry_string(common, cfg->vendor_name,
- cfg->product_name);
-
- /* Information */
- INFO(common, FSG_DRIVER_DESC ", version: " FSG_DRIVER_VERSION "\n");
-
- rc = fsg_common_run_thread(common);
- if (rc)
- goto error_release;
-
- return common;
-
-error_release:
- common->state = FSG_STATE_TERMINATED; /* The thread is dead */
- /* Call fsg_common_release() directly, ref might be not initialised. */
- fsg_common_release(&common->ref);
- return ERR_PTR(rc);
-}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_common_init);
+EXPORT_SYMBOL_GPL(fsg_common_run_thread);
static void fsg_common_release(struct kref *ref)
{
struct usb_ep *ep;
unsigned max_burst;
int ret;
-
-#ifndef USB_FMS_INCLUDED
struct fsg_opts *opts;
+
opts = fsg_opts_from_func_inst(f->fi);
if (!opts->no_configfs) {
ret = fsg_common_set_cdev(fsg->common, c->cdev,
if (ret)
return ret;
}
-#endif
fsg->gadget = gadget;
wait_event(common->fsg_wait, common->fsg != fsg);
}
-#ifdef USB_FMS_INCLUDED
- fsg_common_put(common);
-#endif
usb_free_all_descriptors(&fsg->function);
-#ifdef USB_FMS_INCLUDED
- kfree(fsg);
-#endif
-}
-
-#ifdef USB_FMS_INCLUDED
-
-static int fsg_bind_config(struct usb_composite_dev *cdev,
- struct usb_configuration *c,
- struct fsg_common *common)
-{
- struct fsg_dev *fsg;
- int rc;
-
- fsg = kzalloc(sizeof *fsg, GFP_KERNEL);
- if (unlikely(!fsg))
- return -ENOMEM;
-
- fsg->function.name = FSG_DRIVER_DESC;
- fsg->function.bind = fsg_bind;
- fsg->function.unbind = fsg_unbind;
- fsg->function.setup = fsg_setup;
- fsg->function.set_alt = fsg_set_alt;
- fsg->function.disable = fsg_disable;
-
- fsg->common = common;
- /*
- * Our caller holds a reference to common structure so we
- * don't have to be worry about it being freed until we return
- * from this function. So instead of incrementing counter now
- * and decrement in error recovery we increment it only when
- * call to usb_add_function() was successful.
- */
-
- rc = usb_add_function(c, &fsg->function);
- if (unlikely(rc))
- kfree(fsg);
- else
- fsg_common_get(fsg->common);
- return rc;
}
-#else
-
static inline struct fsg_lun_opts *to_fsg_lun_opts(struct config_item *item)
{
return container_of(to_config_group(item), struct fsg_lun_opts, group);
return ERR_PTR(-ENOMEM);
mutex_init(&opts->lock);
opts->func_inst.free_func_inst = fsg_free_inst;
- opts->common = fsg_common_setup(opts->common, false);
+ opts->common = fsg_common_setup(opts->common);
if (IS_ERR(opts->common)) {
rc = PTR_ERR(opts->common);
goto release_opts;
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Michal Nazarewicz");
-#endif
-
/************************* Module parameters *************************/
cfg->can_stall = params->stall;
cfg->fsg_num_buffers = fsg_num_buffers;
}
-EXPORT_SYMBOL_GPL_IF_MODULE(fsg_config_from_params);
+EXPORT_SYMBOL_GPL(fsg_config_from_params);