162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * u_tcm.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Utility definitions for the tcm function
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Copyright (c) 2015 Samsung Electronics Co., Ltd.
862306a36Sopenharmony_ci *		http://www.samsung.com
962306a36Sopenharmony_ci *
1062306a36Sopenharmony_ci * Author: Andrzej Pietrasiewicz <andrzej.p@xxxxxxxxxxx>
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#ifndef U_TCM_H
1462306a36Sopenharmony_ci#define U_TCM_H
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#include <linux/usb/composite.h>
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci/**
1962306a36Sopenharmony_ci * @dependent: optional dependent module. Meant for legacy gadget.
2062306a36Sopenharmony_ci * If non-null its refcount will be increased when a tpg is created and
2162306a36Sopenharmony_ci * decreased when tpg is dropped.
2262306a36Sopenharmony_ci * @dep_lock: lock for dependent module operations.
2362306a36Sopenharmony_ci * @ready: true if the dependent module information is set.
2462306a36Sopenharmony_ci * @can_attach: true a function can be bound to gadget
2562306a36Sopenharmony_ci * @has_dep: true if there is a dependent module
2662306a36Sopenharmony_ci *
2762306a36Sopenharmony_ci */
2862306a36Sopenharmony_cistruct f_tcm_opts {
2962306a36Sopenharmony_ci	struct usb_function_instance	func_inst;
3062306a36Sopenharmony_ci	struct module			*dependent;
3162306a36Sopenharmony_ci	struct mutex			dep_lock;
3262306a36Sopenharmony_ci	bool				ready;
3362306a36Sopenharmony_ci	bool				can_attach;
3462306a36Sopenharmony_ci	bool				has_dep;
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci	/*
3762306a36Sopenharmony_ci	 * Callbacks to be removed when legacy tcm gadget disappears.
3862306a36Sopenharmony_ci	 *
3962306a36Sopenharmony_ci	 * If you use the new function registration interface
4062306a36Sopenharmony_ci	 * programmatically, you MUST set these callbacks to
4162306a36Sopenharmony_ci	 * something sensible (e.g. probe/remove the composite).
4262306a36Sopenharmony_ci	 */
4362306a36Sopenharmony_ci	int (*tcm_register_callback)(struct usb_function_instance *);
4462306a36Sopenharmony_ci	void (*tcm_unregister_callback)(struct usb_function_instance *);
4562306a36Sopenharmony_ci};
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci#endif /* U_TCM_H */
48