[PATCH] usb: gadget: f_mass_storage: Stop ums on START-STOP UNIT SCSI command

Mattijs Korpershoek mkorpershoek at baylibre.com
Tue Nov 7 10:02:53 CET 2023


Hi Marek,

Thank you for your patch.

On mar., nov. 07, 2023 at 01:09, Marek Vasut <marex at denx.de> wrote:

> Exit the UMS handler loop in case START-STOP UNIT SCSI command is
> received. This is sent e.g. by the util-linux eject(1) command and
> indicates to the device that it is supposed to spin down the media
> and enter low power state.
>
> This effectively adds support for exitting the 'ums' command from
> host using 'eject /dev/sdN' that is on par with 'dfu-util -e' .
>
> Signed-off-by: Marek Vasut <marex at denx.de>

Reviewed-by: Mattijs Korpershoek <mkorpershoek at baylibre.com>

> ---
> Cc: Lukasz Majewski <lukma at denx.de>
> Cc: Mattijs Korpershoek <mkorpershoek at baylibre.com>
> ---
>  drivers/usb/gadget/f_mass_storage.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
> index 1d17331cb03..c725aed3f62 100644
> --- a/drivers/usb/gadget/f_mass_storage.c
> +++ b/drivers/usb/gadget/f_mass_storage.c
> @@ -327,6 +327,7 @@ struct fsg_common {
>  	unsigned int		short_packet_received:1;
>  	unsigned int		bad_lun_okay:1;
>  	unsigned int		running:1;
> +	unsigned int		eject:1;
>  
>  	int			thread_wakeup_needed;
>  	struct completion	thread_notifier;
> @@ -669,6 +670,10 @@ static int sleep_thread(struct fsg_common *common)
>  		}
>  
>  		if (k == 10) {
> +			/* Handle START-STOP UNIT */
> +			if (common->eject)
> +				return -EPIPE;
> +
>  			/* Handle CTRL+C */
>  			if (ctrlc())
>  				return -EPIPE;
> @@ -1325,6 +1330,8 @@ static int do_start_stop(struct fsg_common *common)
>  		return -EINVAL;
>  	}
>  
> +	common->eject = 1;
> +
>  	return 0;
>  }
>  
> -- 
> 2.42.0


More information about the U-Boot mailing list