13d0407baSopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
23d0407baSopenharmony_ci/*
33d0407baSopenharmony_ci *
43d0407baSopenharmony_ci * (C) COPYRIGHT 2017, 2020-2021 ARM Limited. All rights reserved.
53d0407baSopenharmony_ci *
63d0407baSopenharmony_ci * This program is free software and is provided to you under the terms of the
73d0407baSopenharmony_ci * GNU General Public License version 2 as published by the Free Software
83d0407baSopenharmony_ci * Foundation, and any use by you of this program is subject to the terms
93d0407baSopenharmony_ci * of such GNU license.
103d0407baSopenharmony_ci *
113d0407baSopenharmony_ci * This program is distributed in the hope that it will be useful,
123d0407baSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
133d0407baSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
143d0407baSopenharmony_ci * GNU General Public License for more details.
153d0407baSopenharmony_ci *
163d0407baSopenharmony_ci * You should have received a copy of the GNU General Public License
173d0407baSopenharmony_ci * along with this program; if not, you can access it online at
183d0407baSopenharmony_ci * http://www.gnu.org/licenses/gpl-2.0.html.
193d0407baSopenharmony_ci *
203d0407baSopenharmony_ci */
213d0407baSopenharmony_ci
223d0407baSopenharmony_ci#ifndef _PROTECTED_MODE_SWITCH_H_
233d0407baSopenharmony_ci#define _PROTECTED_MODE_SWITCH_H_
243d0407baSopenharmony_ci
253d0407baSopenharmony_cistruct protected_mode_device;
263d0407baSopenharmony_ci
273d0407baSopenharmony_ci/**
283d0407baSopenharmony_ci * struct protected_mode_ops - Callbacks for protected mode switch operations
293d0407baSopenharmony_ci *
303d0407baSopenharmony_ci * @protected_mode_enable:  Callback to enable protected mode for device
313d0407baSopenharmony_ci * @protected_mode_disable: Callback to disable protected mode for device
323d0407baSopenharmony_ci */
333d0407baSopenharmony_cistruct protected_mode_ops {
343d0407baSopenharmony_ci	/*
353d0407baSopenharmony_ci	 * protected_mode_enable() - Enable protected mode on device
363d0407baSopenharmony_ci	 * @dev:	The struct device
373d0407baSopenharmony_ci	 *
383d0407baSopenharmony_ci	 * Return: 0 on success, non-zero on error
393d0407baSopenharmony_ci	 */
403d0407baSopenharmony_ci	int (*protected_mode_enable)(
413d0407baSopenharmony_ci			struct protected_mode_device *protected_dev);
423d0407baSopenharmony_ci
433d0407baSopenharmony_ci	/*
443d0407baSopenharmony_ci	 * protected_mode_disable() - Disable protected mode on device, and
453d0407baSopenharmony_ci	 *                            reset device
463d0407baSopenharmony_ci	 * @dev:	The struct device
473d0407baSopenharmony_ci	 *
483d0407baSopenharmony_ci	 * Return: 0 on success, non-zero on error
493d0407baSopenharmony_ci	 */
503d0407baSopenharmony_ci	int (*protected_mode_disable)(
513d0407baSopenharmony_ci			struct protected_mode_device *protected_dev);
523d0407baSopenharmony_ci};
533d0407baSopenharmony_ci
543d0407baSopenharmony_ci/**
553d0407baSopenharmony_ci * struct protected_mode_device - Device structure for protected mode devices
563d0407baSopenharmony_ci *
573d0407baSopenharmony_ci * @ops:  Callbacks associated with this device
583d0407baSopenharmony_ci * @data: Pointer to device private data
593d0407baSopenharmony_ci *
603d0407baSopenharmony_ci * This structure should be registered with the platform device using
613d0407baSopenharmony_ci * platform_set_drvdata().
623d0407baSopenharmony_ci */
633d0407baSopenharmony_cistruct protected_mode_device {
643d0407baSopenharmony_ci	struct protected_mode_ops ops;
653d0407baSopenharmony_ci	void *data;
663d0407baSopenharmony_ci};
673d0407baSopenharmony_ci
683d0407baSopenharmony_ci#endif /* _PROTECTED_MODE_SWITCH_H_ */
69