Hello All, Andrzej Pietrasiewicz, who has been working on configfs support for usb gadgets for a last few months, went for holidays this week. He asked me to post his initial patches adding configs support to mass storage usb function. The patches are based on latest usb-next kernel free from git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git Best regards, Marek Szyprowski Here is the cover letter prepared by Andrzej: ======================================================================== Dear All, This series aims at integrating configfs into mass storage, the way it has been done for acm, ncm, ecm, eem, ecm subset, rndis, obex and phonet. It contains everything that is required to provide the equivalent of g_mass_storage.ko with configfs. Mass storage itself is quite large, so the resulting patch series is a bit lengthy. However, it is supposed to be done in steps like this: 1) preliminary work, e.g. factoring out a header file, creating a utility u_ms.ko module, use usb_gstrings_attach 2) prepare for initializing the fsg_common structure in smaller steps instead of in one big step 3) usual stuff, similar to functions previously converted to configfs I kindly ask for comments; I will be out of office until June 30th, so when I'm back I will be happy to get my hands dirty with implementing changes resulting from lots of good comments ;) BACKWARD COMPATIBILITY ====================== Please note that the old g_mass_storage.ko is still available and works. USING THE NEW "GADGET" ====================== Please refer to this post: http://www.spinics.net/lists/linux-usb/msg76388.html for general information from Sebastian on how to use configfs-based gadgets (*). With configfs the procedure is as follows, compared to the information mentioned above (*): instead of mkdir functions/acm.ttyS1 do mkdir functions/<mass_storage>.<instance name> e.g. mkdir functions/mass_storage.0 In functions/<function>.<instance name> there will be the following attribute files: stall - Set to permit function to halt bulk endpoints. Disabled on some USB devices known not to work correctly. You should set it to true. num_buffers - Number of pipeline buffers. Valid numbers are 2..4. Available only if CONFIG_USB_GADGET_DEBUG_FILES is set. and a default lun.0 directory corresponding to SCSI LUN #0. A new lun can be added with mkdir: $ mkdir functions/mass_storage.0/partition.5 Lun numbering does not have to be continuous, except for lun #0 which is created by default. A maximum of 8 luns can be specified and they all must be named following the <name>.<number> scheme. The numbers can be 0..8. Probably a good convention is to name the luns "lun.<number>", although it is not mandatory. In each lun directory there are the following attribute files: file - The path to the backing file for the LUN. Required if LUN is not marked as removable. ro - Flag specifying access to the LUN shall be read-only. This is implied if CD-ROM emulation is enabled as well as when it was impossible to open "filename" in R/W mode. removable - Flag specifying that LUN shall be indicated as being removable. cdrom - Flag specifying that LUN shall be reported as being a CD-ROM. nofua - Flag specifying that FUA flag in SCSI WRITE(10,12) The rest of the procedure (*) remains the same. An example gadget with two luns: $ modprobe libcomposite $ mount none cfg -t configfs $ mkdir cfg/usb_gadget/g1 $ cd cfg/usb_gadget/g1 $ mkdir configs/c.1 $ mkdir functions/mass_storage.0 $ echo /root/lun0.img > functions/mass_storage.0/lun.0/file $ mkdir functions/mass_storage.0/lun.1 $ echo /root/lun1.img > functions/mass_storage.0/lun.1/file $ mkdir strings/0x409 $ mkdir configs/c.1/strings/0x409 $ echo 0xa4a2 > idProduct $ echo 0x0525 > idVendor $ echo samsung123 > strings/0x409/serialnumber $ echo Samsung > strings/0x409/manufacturer $ echo "Mass Storage Gadget" > strings/0x409/product $ echo "Conf 1" > configs/c.1/strings/0x409/configuration $ echo 120 > configs/c.1/MaxPower $ ln -s functions/mass_storage.0 configs/c.1 $ echo s3c-hsotg > UDC After unbinding the gadget with echo "" > UDC the symbolic links in the configuration directory can be removed, the strings/* subdirectories in the configuration directory can be removed, the strings/* subdirectories at the gadget level can be removed and the configs/* subdirectories can be removed. The functions/* subdirectories can be removed. After that the gadget directory can be removed. After that the respective modules can be unloaded. TESTING THE FUNCTIONS (actually there is only one) ===================== mass_storage) device: connect the gadget, enable it host: dmesg, see the USB drives appear (if system configured to automatically mount) Andrzej Pietrasiewicz (19): usb/gadget: configfs: add a method to unregister the gadget usb/gadget: create a utility module for mass_storage usb/gadget: f_mass_storage: factor out a header file usb/gadget: f_mass_storage: add a level of indirection for luns storage usb/gadget: f_mass_storage: use usb_gstrings_attach usb/gadget: f_mass_storage: split fsg_common initialization into a number of functions usb/gadget: f_mass_storage: use fsg_common_setup in fsg_common_init usb/gadget: f_mass_storage: use fsg_common_set_num_buffers in fsg_common_init usb/gadget: f_mass_storage: use fsg_common_set_nluns in fsg_common_init usb/gadget: f_mass_storage: use fsg_common_set_ops/_private_data in fsg_common_init usb/gadget: f_mass_storage: use fsg_common_set_cdev in fsg_common_init usb/gadget: f_mass_storage: use fsg_common_create_luns in fsg_common_init usb/gadget: f_mass_storage: use fsg_common_set_inquiry_string in fsg_common_init usb/gadget: f_mass_storage: use fsg_common_run_thread in fsg_common_init usb/gadget: f_mass_storage: convert to new function interface with backward compatibility usb/gadget: mass_storage: convert to new interface of f_mass_storage usb/gadget: storage_common: make attribute operations more generic usb/gadget: storage_common: add methods to show/store 'cdrom' and 'removable' usb/gadget: f_mass_storage: add configfs support .../ABI/testing/configfs-usb-gadget-mass-storage | 31 + drivers/usb/gadget/Kconfig | 21 + drivers/usb/gadget/Makefile | 4 + drivers/usb/gadget/acm_ms.c | 18 +- drivers/usb/gadget/configfs.c | 8 + drivers/usb/gadget/configfs.h | 6 + drivers/usb/gadget/f_mass_storage.c | 1705 ++++++++++++++------ drivers/usb/gadget/f_mass_storage.h | 181 +++ drivers/usb/gadget/mass_storage.c | 125 +- drivers/usb/gadget/multi.c | 18 +- drivers/usb/gadget/storage_common.c | 408 ++--- drivers/usb/gadget/storage_common.h | 214 +++ 12 files changed, 1938 insertions(+), 801 deletions(-) create mode 100644 Documentation/ABI/testing/configfs-usb-gadget-mass-storage create mode 100644 drivers/usb/gadget/configfs.h create mode 100644 drivers/usb/gadget/f_mass_storage.h create mode 100644 drivers/usb/gadget/storage_common.h -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html