€•„¹Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ$/translations/zh_CN/usb/mass-storage”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/zh_TW/usb/mass-storage”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/it_IT/usb/mass-storage”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/ja_JP/usb/mass-storage”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/ko_KR/usb/mass-storage”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/pt_BR/usb/mass-storage”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/sp_SP/usb/mass-storage”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒMass Storage Gadget (MSG)”h]”hŒMass Storage Gadget (MSG)”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ>/var/lib/git/docbuild/linux/Documentation/usb/mass-storage.rst”h´Kubh¶)”}”(hhh]”(h»)”}”(hŒOverview”h]”hŒOverview”…””}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ block_quote”“”)”}”(hX®Mass Storage Gadget (or MSG) acts as a USB Mass Storage device, appearing to the host as a disk or a CD-ROM drive. It supports multiple logical units (LUNs). Backing storage for each LUN is provided by a regular file or a block device, access can be limited to read-only, and gadget can indicate that it is removable and/or CD-ROM (the latter implies read-only access). Its requirements are modest; only a bulk-in and a bulk-out endpoint are needed. The memory requirement amounts to two 16K buffers. Support is included for full-speed, high-speed and SuperSpeed operation. Note that the driver is slightly non-portable in that it assumes a single memory/DMA buffer will be usable for bulk-in and bulk-out endpoints. With most device controllers this is not an issue, but there may be some with hardware restrictions that prevent a buffer from being used by more than one endpoint. This document describes how to use the gadget from user space, its relation to mass storage function (or MSF) and different gadgets using it, and how it differs from File Storage Gadget (or FSG) (which is no longer included in Linux). It will talk only briefly about how to use MSF within composite gadgets. ”h]”(hŒ paragraph”“”)”}”(hXsMass Storage Gadget (or MSG) acts as a USB Mass Storage device, appearing to the host as a disk or a CD-ROM drive. It supports multiple logical units (LUNs). Backing storage for each LUN is provided by a regular file or a block device, access can be limited to read-only, and gadget can indicate that it is removable and/or CD-ROM (the latter implies read-only access).”h]”hXsMass Storage Gadget (or MSG) acts as a USB Mass Storage device, appearing to the host as a disk or a CD-ROM drive. It supports multiple logical units (LUNs). Backing storage for each LUN is provided by a regular file or a block device, access can be limited to read-only, and gadget can indicate that it is removable and/or CD-ROM (the latter implies read-only access).”…””}”(hhäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KhhÞubhã)”}”(hŒÌIts requirements are modest; only a bulk-in and a bulk-out endpoint are needed. The memory requirement amounts to two 16K buffers. Support is included for full-speed, high-speed and SuperSpeed operation.”h]”hŒÌIts requirements are modest; only a bulk-in and a bulk-out endpoint are needed. The memory requirement amounts to two 16K buffers. Support is included for full-speed, high-speed and SuperSpeed operation.”…””}”(hhòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KhhÞubhã)”}”(hX4Note that the driver is slightly non-portable in that it assumes a single memory/DMA buffer will be usable for bulk-in and bulk-out endpoints. With most device controllers this is not an issue, but there may be some with hardware restrictions that prevent a buffer from being used by more than one endpoint.”h]”hX4Note that the driver is slightly non-portable in that it assumes a single memory/DMA buffer will be usable for bulk-in and bulk-out endpoints. With most device controllers this is not an issue, but there may be some with hardware restrictions that prevent a buffer from being used by more than one endpoint.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KhhÞubhã)”}”(hX4This document describes how to use the gadget from user space, its relation to mass storage function (or MSF) and different gadgets using it, and how it differs from File Storage Gadget (or FSG) (which is no longer included in Linux). It will talk only briefly about how to use MSF within composite gadgets.”h]”hX4This document describes how to use the gadget from user space, its relation to mass storage function (or MSF) and different gadgets using it, and how it differs from File Storage Gadget (or FSG) (which is no longer included in Linux). It will talk only briefly about how to use MSF within composite gadgets.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KhhÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubeh}”(h]”Œoverview”ah ]”h"]”Œoverview”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒModule parameters”h]”hŒModule parameters”…””}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj*h²hh³hÊh´K!ubhÝ)”}”(hXThe mass storage gadget accepts the following mass storage specific module parameters: - file=filename[,filename...] This parameter lists paths to files or block devices used for backing storage for each logical unit. There may be at most FSG_MAX_LUNS (8) LUNs set. If more files are specified, they will be silently ignored. See also “luns†parameter. *BEWARE* that if a file is used as a backing storage, it may not be modified by any other process. This is because the host assumes the data does not change without its knowledge. It may be read, but (if the logical unit is writable) due to buffering on the host side, the contents are not well defined. The size of the logical unit will be rounded down to a full logical block. The logical block size is 2048 bytes for LUNs simulating CD-ROM, block size of the device if the backing file is a block device, or 512 bytes otherwise. - removable=b[,b...] This parameter specifies whether each logical unit should be removable. “b†here is either “yâ€, “Y†or “1†for true or “nâ€, “N†or “0†for false. If this option is set for a logical unit, gadget will accept an “eject†SCSI request (Start/Stop Unit). When it is sent, the backing file will be closed to simulate ejection and the logical unit will not be mountable by the host until a new backing file is specified by userspace on the device (see “sysfs entries†section). If a logical unit is not removable (the default), a backing file must be specified for it with the “file†parameter as the module is loaded. The same applies if the module is built in, no exceptions. The default value of the flag is false, *HOWEVER* it used to be true. This has been changed to better match File Storage Gadget and because it seems like a saner default after all. Thus to maintain compatibility with older kernels, it's best to specify the default values. Also, if one relied on old default, explicit “n†needs to be specified now. Note that “removable†means the logical unit's media can be ejected or removed (as is true for a CD-ROM drive or a card reader). It does *not* mean that the entire gadget can be unplugged from the host; the proper term for that is “hot-unpluggableâ€. - cdrom=b[,b...] This parameter specifies whether each logical unit should simulate CD-ROM. The default is false. - ro=b[,b...] This parameter specifies whether each logical unit should be reported as read only. This will prevent host from modifying the backing files. Note that if this flag for given logical unit is false but the backing file could not be opened in read/write mode, the gadget will fall back to read only mode anyway. The default value for non-CD-ROM logical units is false; for logical units simulating CD-ROM it is forced to true. - nofua=b[,b...] This parameter specifies whether FUA flag should be ignored in SCSI Write10 and Write12 commands sent to given logical units. MS Windows mounts removable storage in “Removal optimised mode†by default. All the writes to the media are synchronous, which is achieved by setting the FUA (Force Unit Access) bit in SCSI Write(10,12) commands. This forces each write to wait until the data has actually been written out and prevents I/O requests aggregation in block layer dramatically decreasing performance. Note that this may mean that if the device is powered from USB and the user unplugs the device without unmounting it first (which at least some Windows users do), the data may be lost. The default value is false. - luns=N This parameter specifies number of logical units the gadget will have. It is limited by FSG_MAX_LUNS (8) and higher value will be capped. If this parameter is provided, and the number of files specified in “file†argument is greater then the value of “lunsâ€, all excess files will be ignored. If this parameter is not present, the number of logical units will be deduced from the number of files specified in the “file†parameter. If the file parameter is missing as well, one is assumed. - stall=b Specifies whether the gadget is allowed to halt bulk endpoints. The default is determined according to the type of USB device controller, but usually true. In addition to the above, the gadget also accepts the following parameters defined by the composite framework (they are common to all composite gadgets so just a quick listing): - idVendor -- USB Vendor ID (16 bit integer) - idProduct -- USB Product ID (16 bit integer) - bcdDevice -- USB Device version (BCD) (16 bit integer) - iManufacturer -- USB Manufacturer string (string) - iProduct -- USB Product string (string) - iSerialNumber -- SerialNumber string (string) ”h]”(hã)”}”(hŒVThe mass storage gadget accepts the following mass storage specific module parameters:”h]”hŒVThe mass storage gadget accepts the following mass storage specific module parameters:”…””}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K#hj;ubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hX)file=filename[,filename...] This parameter lists paths to files or block devices used for backing storage for each logical unit. There may be at most FSG_MAX_LUNS (8) LUNs set. If more files are specified, they will be silently ignored. See also “luns†parameter. *BEWARE* that if a file is used as a backing storage, it may not be modified by any other process. This is because the host assumes the data does not change without its knowledge. It may be read, but (if the logical unit is writable) due to buffering on the host side, the contents are not well defined. The size of the logical unit will be rounded down to a full logical block. The logical block size is 2048 bytes for LUNs simulating CD-ROM, block size of the device if the backing file is a block device, or 512 bytes otherwise. ”h]”(hã)”}”(hŒfile=filename[,filename...]”h]”hŒfile=filename[,filename...]”…””}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K&hjTubhã)”}”(hŒòThis parameter lists paths to files or block devices used for backing storage for each logical unit. There may be at most FSG_MAX_LUNS (8) LUNs set. If more files are specified, they will be silently ignored. See also “luns†parameter.”h]”hŒòThis parameter lists paths to files or block devices used for backing storage for each logical unit. There may be at most FSG_MAX_LUNS (8) LUNs set. If more files are specified, they will be silently ignored. See also “luns†parameter.”…””}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K(hjTubhã)”}”(hX1*BEWARE* that if a file is used as a backing storage, it may not be modified by any other process. This is because the host assumes the data does not change without its knowledge. It may be read, but (if the logical unit is writable) due to buffering on the host side, the contents are not well defined.”h]”(hŒemphasis”“”)”}”(hŒ*BEWARE*”h]”hŒBEWARE”…””}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjtubhX) that if a file is used as a backing storage, it may not be modified by any other process. This is because the host assumes the data does not change without its knowledge. It may be read, but (if the logical unit is writable) due to buffering on the host side, the contents are not well defined.”…””}”(hjth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K-hjTubhã)”}”(hŒäThe size of the logical unit will be rounded down to a full logical block. The logical block size is 2048 bytes for LUNs simulating CD-ROM, block size of the device if the backing file is a block device, or 512 bytes otherwise.”h]”hŒäThe size of the logical unit will be rounded down to a full logical block. The logical block size is 2048 bytes for LUNs simulating CD-ROM, block size of the device if the backing file is a block device, or 512 bytes otherwise.”…””}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K3hjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jRhjOubjS)”}”(hXIremovable=b[,b...] This parameter specifies whether each logical unit should be removable. “b†here is either “yâ€, “Y†or “1†for true or “nâ€, “N†or “0†for false. If this option is set for a logical unit, gadget will accept an “eject†SCSI request (Start/Stop Unit). When it is sent, the backing file will be closed to simulate ejection and the logical unit will not be mountable by the host until a new backing file is specified by userspace on the device (see “sysfs entries†section). If a logical unit is not removable (the default), a backing file must be specified for it with the “file†parameter as the module is loaded. The same applies if the module is built in, no exceptions. The default value of the flag is false, *HOWEVER* it used to be true. This has been changed to better match File Storage Gadget and because it seems like a saner default after all. Thus to maintain compatibility with older kernels, it's best to specify the default values. Also, if one relied on old default, explicit “n†needs to be specified now. Note that “removable†means the logical unit's media can be ejected or removed (as is true for a CD-ROM drive or a card reader). It does *not* mean that the entire gadget can be unplugged from the host; the proper term for that is “hot-unpluggableâ€. ”h]”(hã)”}”(hŒremovable=b[,b...]”h]”hŒremovable=b[,b...]”…””}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K8hj¦ubhã)”}”(hŒ®This parameter specifies whether each logical unit should be removable. “b†here is either “yâ€, “Y†or “1†for true or “nâ€, “N†or “0†for false.”h]”hŒ®This parameter specifies whether each logical unit should be removable. “b†here is either “yâ€, “Y†or “1†for true or “nâ€, “N†or “0†for false.”…””}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K:hj¦ubhã)”}”(hXMIf this option is set for a logical unit, gadget will accept an “eject†SCSI request (Start/Stop Unit). When it is sent, the backing file will be closed to simulate ejection and the logical unit will not be mountable by the host until a new backing file is specified by userspace on the device (see “sysfs entries†section).”h]”hXMIf this option is set for a logical unit, gadget will accept an “eject†SCSI request (Start/Stop Unit). When it is sent, the backing file will be closed to simulate ejection and the logical unit will not be mountable by the host until a new backing file is specified by userspace on the device (see “sysfs entries†section).”…””}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K>hj¦ubhã)”}”(hŒÌIf a logical unit is not removable (the default), a backing file must be specified for it with the “file†parameter as the module is loaded. The same applies if the module is built in, no exceptions.”h]”hŒÌIf a logical unit is not removable (the default), a backing file must be specified for it with the “file†parameter as the module is loaded. The same applies if the module is built in, no exceptions.”…””}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KEhj¦ubhã)”}”(hXcThe default value of the flag is false, *HOWEVER* it used to be true. This has been changed to better match File Storage Gadget and because it seems like a saner default after all. Thus to maintain compatibility with older kernels, it's best to specify the default values. Also, if one relied on old default, explicit “n†needs to be specified now.”h]”(hŒ(The default value of the flag is false, ”…””}”(hjâh²hh³Nh´Nubjy)”}”(hŒ *HOWEVER*”h]”hŒHOWEVER”…””}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjâubhX4 it used to be true. This has been changed to better match File Storage Gadget and because it seems like a saner default after all. Thus to maintain compatibility with older kernels, it’s best to specify the default values. Also, if one relied on old default, explicit “n†needs to be specified now.”…””}”(hjâh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KJhj¦ubhã)”}”(hXNote that “removable†means the logical unit's media can be ejected or removed (as is true for a CD-ROM drive or a card reader). It does *not* mean that the entire gadget can be unplugged from the host; the proper term for that is “hot-unpluggableâ€.”h]”(hŒNote that “removable†means the logical unit’s media can be ejected or removed (as is true for a CD-ROM drive or a card reader). It does ”…””}”(hjh²hh³Nh´Nubjy)”}”(hŒ*not*”h]”hŒnot”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjubhŒo mean that the entire gadget can be unplugged from the host; the proper term for that is “hot-unpluggableâ€.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KQhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jRhjOubjS)”}”(hŒrcdrom=b[,b...] This parameter specifies whether each logical unit should simulate CD-ROM. The default is false. ”h]”(hã)”}”(hŒcdrom=b[,b...]”h]”hŒcdrom=b[,b...]”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KWhj(ubhã)”}”(hŒaThis parameter specifies whether each logical unit should simulate CD-ROM. The default is false.”h]”hŒaThis parameter specifies whether each logical unit should simulate CD-ROM. The default is false.”…””}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KYhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jRhjOubjS)”}”(hX¸ro=b[,b...] This parameter specifies whether each logical unit should be reported as read only. This will prevent host from modifying the backing files. Note that if this flag for given logical unit is false but the backing file could not be opened in read/write mode, the gadget will fall back to read only mode anyway. The default value for non-CD-ROM logical units is false; for logical units simulating CD-ROM it is forced to true. ”h]”(hã)”}”(hŒ ro=b[,b...]”h]”hŒ ro=b[,b...]”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K\hjNubhã)”}”(hŒThis parameter specifies whether each logical unit should be reported as read only. This will prevent host from modifying the backing files.”h]”hŒThis parameter specifies whether each logical unit should be reported as read only. This will prevent host from modifying the backing files.”…””}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K^hjNubhã)”}”(hŒ§Note that if this flag for given logical unit is false but the backing file could not be opened in read/write mode, the gadget will fall back to read only mode anyway.”h]”hŒ§Note that if this flag for given logical unit is false but the backing file could not be opened in read/write mode, the gadget will fall back to read only mode anyway.”…””}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KbhjNubhã)”}”(hŒrThe default value for non-CD-ROM logical units is false; for logical units simulating CD-ROM it is forced to true.”h]”hŒrThe default value for non-CD-ROM logical units is false; for logical units simulating CD-ROM it is forced to true.”…””}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KfhjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jRhjOubjS)”}”(hXçnofua=b[,b...] This parameter specifies whether FUA flag should be ignored in SCSI Write10 and Write12 commands sent to given logical units. MS Windows mounts removable storage in “Removal optimised mode†by default. All the writes to the media are synchronous, which is achieved by setting the FUA (Force Unit Access) bit in SCSI Write(10,12) commands. This forces each write to wait until the data has actually been written out and prevents I/O requests aggregation in block layer dramatically decreasing performance. Note that this may mean that if the device is powered from USB and the user unplugs the device without unmounting it first (which at least some Windows users do), the data may be lost. The default value is false. ”h]”(hã)”}”(hŒnofua=b[,b...]”h]”hŒnofua=b[,b...]”…””}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Kihjubhã)”}”(hŒ}This parameter specifies whether FUA flag should be ignored in SCSI Write10 and Write12 commands sent to given logical units.”h]”hŒ}This parameter specifies whether FUA flag should be ignored in SCSI Write10 and Write12 commands sent to given logical units.”…””}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Kkhjubhã)”}”(hX€MS Windows mounts removable storage in “Removal optimised mode†by default. All the writes to the media are synchronous, which is achieved by setting the FUA (Force Unit Access) bit in SCSI Write(10,12) commands. This forces each write to wait until the data has actually been written out and prevents I/O requests aggregation in block layer dramatically decreasing performance.”h]”hX€MS Windows mounts removable storage in “Removal optimised mode†by default. All the writes to the media are synchronous, which is achieved by setting the FUA (Force Unit Access) bit in SCSI Write(10,12) commands. This forces each write to wait until the data has actually been written out and prevents I/O requests aggregation in block layer dramatically decreasing performance.”…””}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Knhjubhã)”}”(hŒ¸Note that this may mean that if the device is powered from USB and the user unplugs the device without unmounting it first (which at least some Windows users do), the data may be lost.”h]”hŒ¸Note that this may mean that if the device is powered from USB and the user unplugs the device without unmounting it first (which at least some Windows users do), the data may be lost.”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Kuhjubhã)”}”(hŒThe default value is false.”h]”hŒThe default value is false.”…””}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Kyhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jRhjOubjS)”}”(hXluns=N This parameter specifies number of logical units the gadget will have. It is limited by FSG_MAX_LUNS (8) and higher value will be capped. If this parameter is provided, and the number of files specified in “file†argument is greater then the value of “lunsâ€, all excess files will be ignored. If this parameter is not present, the number of logical units will be deduced from the number of files specified in the “file†parameter. If the file parameter is missing as well, one is assumed. ”h]”(hã)”}”(hŒluns=N”h]”hŒluns=N”…””}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K{hjàubhã)”}”(hŒŠThis parameter specifies number of logical units the gadget will have. It is limited by FSG_MAX_LUNS (8) and higher value will be capped.”h]”hŒŠThis parameter specifies number of logical units the gadget will have. It is limited by FSG_MAX_LUNS (8) and higher value will be capped.”…””}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K}hjàubhã)”}”(hŒ¢If this parameter is provided, and the number of files specified in “file†argument is greater then the value of “lunsâ€, all excess files will be ignored.”h]”hŒ¢If this parameter is provided, and the number of files specified in “file†argument is greater then the value of “lunsâ€, all excess files will be ignored.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Khjàubhã)”}”(hŒÈIf this parameter is not present, the number of logical units will be deduced from the number of files specified in the “file†parameter. If the file parameter is missing as well, one is assumed.”h]”hŒÈIf this parameter is not present, the number of logical units will be deduced from the number of files specified in the “file†parameter. If the file parameter is missing as well, one is assumed.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K…hjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jRhjOubjS)”}”(hŒ¥stall=b Specifies whether the gadget is allowed to halt bulk endpoints. The default is determined according to the type of USB device controller, but usually true. ”h]”(hã)”}”(hŒstall=b”h]”hŒstall=b”…””}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KŠhj"ubhã)”}”(hŒ›Specifies whether the gadget is allowed to halt bulk endpoints. The default is determined according to the type of USB device controller, but usually true.”h]”hŒ›Specifies whether the gadget is allowed to halt bulk endpoints. The default is determined according to the type of USB device controller, but usually true.”…””}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KŒhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jRhjOubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jMh³hÊh´K&hj;ubhã)”}”(hŒ±In addition to the above, the gadget also accepts the following parameters defined by the composite framework (they are common to all composite gadgets so just a quick listing):”h]”hŒ±In addition to the above, the gadget also accepts the following parameters defined by the composite framework (they are common to all composite gadgets so just a quick listing):”…””}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Khj;ubjN)”}”(hhh]”(jS)”}”(hŒ/idVendor -- USB Vendor ID (16 bit integer)”h]”hã)”}”(hjch]”hŒ/idVendor -- USB Vendor ID (16 bit integer)”…””}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K”hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^ubjS)”}”(hŒ0idProduct -- USB Product ID (16 bit integer)”h]”hã)”}”(hjzh]”hŒ0idProduct -- USB Product ID (16 bit integer)”…””}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K•hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^ubjS)”}”(hŒ:bcdDevice -- USB Device version (BCD) (16 bit integer)”h]”hã)”}”(hj‘h]”hŒ:bcdDevice -- USB Device version (BCD) (16 bit integer)”…””}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K–hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^ubjS)”}”(hŒ1iManufacturer -- USB Manufacturer string (string)”h]”hã)”}”(hj¨h]”hŒ1iManufacturer -- USB Manufacturer string (string)”…””}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K—hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^ubjS)”}”(hŒ,iProduct -- USB Product string (string)”h]”hã)”}”(hj¿h]”hŒ,iProduct -- USB Product string (string)”…””}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K˜hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^ubjS)”}”(hŒ.iSerialNumber -- SerialNumber string (string) ”h]”hã)”}”(hŒ-iSerialNumber -- SerialNumber string (string)”h]”hŒ-iSerialNumber -- SerialNumber string (string)”…””}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K™hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^ubeh}”(h]”h ]”h"]”h$]”h&]”jNjOuh1jMh³hÊh´K”hj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K#hj*h²hubeh}”(h]”Œmodule-parameters”ah ]”h"]”Œmodule parameters”ah$]”h&]”uh1hµhh·h²hh³hÊh´K!ubh¶)”}”(hhh]”(h»)”}”(hŒ sysfs entries”h]”hŒ sysfs entries”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KœubhÝ)”}”(hXFor each logical unit, the gadget creates a directory in the sysfs hierarchy. Inside of it the following three files are created: - file When read it returns the path to the backing file for the given logical unit. If there is no backing file (possible only if the logical unit is removable), the content is empty. When written into, it changes the backing file for given logical unit. This change can be performed even if given logical unit is not specified as removable (but that may look strange to the host). It may fail, however, if host disallowed medium removal with the Prevent-Allow Medium Removal SCSI command. - ro Reflects the state of ro flag for the given logical unit. It can be read any time, and written to when there is no backing file open for given logical unit. - nofua Reflects the state of nofua flag for given logical unit. It can be read and written. - forced_eject When written into, it causes the backing file to be forcibly detached from the LUN, regardless of whether the host has allowed it. The content doesn't matter, any non-zero number of bytes written will result in ejection. Can not be read. Other then those, as usual, the values of module parameters can be read from /sys/module/g_mass_storage/parameters/* files. ”h]”(hã)”}”(hŒ‚For each logical unit, the gadget creates a directory in the sysfs hierarchy. Inside of it the following three files are created:”h]”hŒ‚For each logical unit, the gadget creates a directory in the sysfs hierarchy. Inside of it the following three files are created:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KžhjubjN)”}”(hhh]”(jS)”}”(hXîfile When read it returns the path to the backing file for the given logical unit. If there is no backing file (possible only if the logical unit is removable), the content is empty. When written into, it changes the backing file for given logical unit. This change can be performed even if given logical unit is not specified as removable (but that may look strange to the host). It may fail, however, if host disallowed medium removal with the Prevent-Allow Medium Removal SCSI command. ”h]”(hã)”}”(hŒfile”h]”hŒfile”…””}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K¡hj&ubhã)”}”(hŒ²When read it returns the path to the backing file for the given logical unit. If there is no backing file (possible only if the logical unit is removable), the content is empty.”h]”hŒ²When read it returns the path to the backing file for the given logical unit. If there is no backing file (possible only if the logical unit is removable), the content is empty.”…””}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K£hj&ubhã)”}”(hX3When written into, it changes the backing file for given logical unit. This change can be performed even if given logical unit is not specified as removable (but that may look strange to the host). It may fail, however, if host disallowed medium removal with the Prevent-Allow Medium Removal SCSI command.”h]”hX3When written into, it changes the backing file for given logical unit. This change can be performed even if given logical unit is not specified as removable (but that may look strange to the host). It may fail, however, if host disallowed medium removal with the Prevent-Allow Medium Removal SCSI command.”…””}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K§hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#ubjS)”}”(hŒ¢ro Reflects the state of ro flag for the given logical unit. It can be read any time, and written to when there is no backing file open for given logical unit. ”h]”(hã)”}”(hŒro”h]”hŒro”…””}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K­hjZubhã)”}”(hŒReflects the state of ro flag for the given logical unit. It can be read any time, and written to when there is no backing file open for given logical unit.”h]”hŒReflects the state of ro flag for the given logical unit. It can be read any time, and written to when there is no backing file open for given logical unit.”…””}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K¯hjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#ubjS)”}”(hŒ]nofua Reflects the state of nofua flag for given logical unit. It can be read and written. ”h]”(hã)”}”(hŒnofua”h]”hŒnofua”…””}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K³hj€ubhã)”}”(hŒUReflects the state of nofua flag for given logical unit. It can be read and written.”h]”hŒUReflects the state of nofua flag for given logical unit. It can be read and written.”…””}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Kµhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#ubjS)”}”(hŒþforced_eject When written into, it causes the backing file to be forcibly detached from the LUN, regardless of whether the host has allowed it. The content doesn't matter, any non-zero number of bytes written will result in ejection. Can not be read. ”h]”(hã)”}”(hŒ forced_eject”h]”hŒ forced_eject”…””}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K¸hj¦ubhã)”}”(hŒÝWhen written into, it causes the backing file to be forcibly detached from the LUN, regardless of whether the host has allowed it. The content doesn't matter, any non-zero number of bytes written will result in ejection.”h]”hŒßWhen written into, it causes the backing file to be forcibly detached from the LUN, regardless of whether the host has allowed it. The content doesn’t matter, any non-zero number of bytes written will result in ejection.”…””}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Kºhj¦ubhã)”}”(hŒCan not be read.”h]”hŒCan not be read.”…””}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´K¿hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#ubeh}”(h]”h ]”h"]”h$]”h&]”jNjOuh1jMh³hÊh´K¡hjubhã)”}”(hŒ{Other then those, as usual, the values of module parameters can be read from /sys/module/g_mass_storage/parameters/* files.”h]”hŒ{Other then those, as usual, the values of module parameters can be read from /sys/module/g_mass_storage/parameters/* files.”…””}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KÁhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kžhjh²hubeh}”(h]”Œ sysfs-entries”ah ]”h"]”Œ sysfs entries”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kœubh¶)”}”(hhh]”(h»)”}”(hŒ)Other gadgets using mass storage function”h]”hŒ)Other gadgets using mass storage function”…””}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjüh²hh³hÊh´KÅubhÝ)”}”(hX‚The Mass Storage Gadget uses the Mass Storage Function to handle mass storage protocol. As a composite function, MSF may be used by other gadgets as well (eg. g_multi and acm_ms). All of the information in previous sections are valid for other gadgets using MSF, except that support for mass storage related module parameters may be missing, or the parameters may have a prefix. To figure out whether any of this is true one needs to consult the gadget's documentation or its source code. For examples of how to include mass storage function in gadgets, one may take a look at mass_storage.c, acm_ms.c and multi.c (sorted by complexity). ”h]”(hã)”}”(hŒ´The Mass Storage Gadget uses the Mass Storage Function to handle mass storage protocol. As a composite function, MSF may be used by other gadgets as well (eg. g_multi and acm_ms).”h]”hŒ´The Mass Storage Gadget uses the Mass Storage Function to handle mass storage protocol. As a composite function, MSF may be used by other gadgets as well (eg. g_multi and acm_ms).”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KÇhj ubhã)”}”(hX5All of the information in previous sections are valid for other gadgets using MSF, except that support for mass storage related module parameters may be missing, or the parameters may have a prefix. To figure out whether any of this is true one needs to consult the gadget's documentation or its source code.”h]”hX7All of the information in previous sections are valid for other gadgets using MSF, except that support for mass storage related module parameters may be missing, or the parameters may have a prefix. To figure out whether any of this is true one needs to consult the gadget’s documentation or its source code.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KËhj ubhã)”}”(hŒ”For examples of how to include mass storage function in gadgets, one may take a look at mass_storage.c, acm_ms.c and multi.c (sorted by complexity).”h]”hŒ”For examples of how to include mass storage function in gadgets, one may take a look at mass_storage.c, acm_ms.c and multi.c (sorted by complexity).”…””}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KÑhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÇhjüh²hubeh}”(h]”Œ)other-gadgets-using-mass-storage-function”ah ]”h"]”Œ)other gadgets using mass storage function”ah$]”h&]”uh1hµhh·h²hh³hÊh´KÅubh¶)”}”(hhh]”(h»)”}”(hŒRelation to file storage gadget”h]”hŒRelation to file storage gadget”…””}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjIh²hh³hÊh´KÖubhÝ)”}”(hXåThe Mass Storage Function and thus the Mass Storage Gadget has been based on the File Storage Gadget. The difference between the two is that MSG is a composite gadget (ie. uses the composite framework) while file storage gadget was a traditional gadget. From userspace point of view this distinction does not really matter, but from kernel hacker's point of view, this means that (i) MSG does not duplicate code needed for handling basic USB protocol commands and (ii) MSF can be used in any other composite gadget. Because of that, File Storage Gadget has been removed in Linux 3.8. All users need to transition to the Mass Storage Gadget. The two gadgets behave mostly the same from the outside except: 1. In FSG the “removable†and “cdrom†module parameters set the flag for all logical units whereas in MSG they accept a list of y/n values for each logical unit. If one uses only a single logical unit this does not matter, but if there are more, the y/n value needs to be repeated for each logical unit. 2. FSG's “serialâ€, “vendorâ€, “product†and “release†module parameters are handled in MSG by the composite layer's parameters named respectively: “iSerialnumberâ€, “idVendorâ€, “idProduct†and “bcdDeviceâ€. 3. MSG does not support FSG's test mode, thus “transportâ€, “protocol†and “buflen†FSG's module parameters are not supported. MSG always uses SCSI protocol with bulk only transport mode and 16 KiB buffers.”h]”(hã)”}”(hXThe Mass Storage Function and thus the Mass Storage Gadget has been based on the File Storage Gadget. The difference between the two is that MSG is a composite gadget (ie. uses the composite framework) while file storage gadget was a traditional gadget. From userspace point of view this distinction does not really matter, but from kernel hacker's point of view, this means that (i) MSG does not duplicate code needed for handling basic USB protocol commands and (ii) MSF can be used in any other composite gadget.”h]”hXThe Mass Storage Function and thus the Mass Storage Gadget has been based on the File Storage Gadget. The difference between the two is that MSG is a composite gadget (ie. uses the composite framework) while file storage gadget was a traditional gadget. From userspace point of view this distinction does not really matter, but from kernel hacker’s point of view, this means that (i) MSG does not duplicate code needed for handling basic USB protocol commands and (ii) MSF can be used in any other composite gadget.”…””}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KØhjZubhã)”}”(hŒ½Because of that, File Storage Gadget has been removed in Linux 3.8. All users need to transition to the Mass Storage Gadget. The two gadgets behave mostly the same from the outside except:”h]”hŒ½Because of that, File Storage Gadget has been removed in Linux 3.8. All users need to transition to the Mass Storage Gadget. The two gadgets behave mostly the same from the outside except:”…””}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´KáhjZubhŒenumerated_list”“”)”}”(hhh]”(jS)”}”(hX6In FSG the “removable†and “cdrom†module parameters set the flag for all logical units whereas in MSG they accept a list of y/n values for each logical unit. If one uses only a single logical unit this does not matter, but if there are more, the y/n value needs to be repeated for each logical unit. ”h]”hã)”}”(hX5In FSG the “removable†and “cdrom†module parameters set the flag for all logical units whereas in MSG they accept a list of y/n values for each logical unit. If one uses only a single logical unit this does not matter, but if there are more, the y/n value needs to be repeated for each logical unit.”h]”hX5In FSG the “removable†and “cdrom†module parameters set the flag for all logical units whereas in MSG they accept a list of y/n values for each logical unit. If one uses only a single logical unit this does not matter, but if there are more, the y/n value needs to be repeated for each logical unit.”…””}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Kåhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj|ubjS)”}”(hŒéFSG's “serialâ€, “vendorâ€, “product†and “release†module parameters are handled in MSG by the composite layer's parameters named respectively: “iSerialnumberâ€, “idVendorâ€, “idProduct†and “bcdDeviceâ€. ”h]”hã)”}”(hŒèFSG's “serialâ€, “vendorâ€, “product†and “release†module parameters are handled in MSG by the composite layer's parameters named respectively: “iSerialnumberâ€, “idVendorâ€, “idProduct†and “bcdDeviceâ€.”h]”hŒìFSG’s “serialâ€, “vendorâ€, “product†and “release†module parameters are handled in MSG by the composite layer’s parameters named respectively: “iSerialnumberâ€, “idVendorâ€, “idProduct†and “bcdDeviceâ€.”…””}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Këhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj|ubjS)”}”(hŒ×MSG does not support FSG's test mode, thus “transportâ€, “protocol†and “buflen†FSG's module parameters are not supported. MSG always uses SCSI protocol with bulk only transport mode and 16 KiB buffers.”h]”hã)”}”(hŒ×MSG does not support FSG's test mode, thus “transportâ€, “protocol†and “buflen†FSG's module parameters are not supported. MSG always uses SCSI protocol with bulk only transport mode and 16 KiB buffers.”h]”hŒÛMSG does not support FSG’s test mode, thus “transportâ€, “protocol†and “buflen†FSG’s module parameters are not supported. MSG always uses SCSI protocol with bulk only transport mode and 16 KiB buffers.”…””}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÊh´Kðhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj|ubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jzhjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KØhjIh²hubeh}”(h]”Œrelation-to-file-storage-gadget”ah ]”h"]”Œrelation to file storage gadget”ah$]”h&]”uh1hµhh·h²hh³hÊh´KÖubeh}”(h]”Œmass-storage-gadget-msg”ah ]”h"]”Œmass storage gadget (msg)”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jåjâj'j$jýjújùjöjFjCjÝjÚuŒ nametypes”}”(jå‰j'‰jý‰jù‰jF‰j݉uh}”(jâh·j$hËjúj*jöjjCjüjÚjIuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.