brintos

brintos / linux-shallow public Read only

0
0
Text · 4.9 KiB · 18e0a2f Raw
143 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (C) 2023, STMicroelectronics - All Rights Reserved4 */5 6#ifndef STM32_FIREWALL_DEVICE_H7#define STM32_FIREWALL_DEVICE_H8 9#include <linux/of.h>10#include <linux/platform_device.h>11#include <linux/types.h>12 13#define STM32_FIREWALL_MAX_EXTRA_ARGS		514 15/* Opaque reference to stm32_firewall_controller */16struct stm32_firewall_controller;17 18/**19 * struct stm32_firewall - Information on a device's firewall. Each device can have more than one20 *			   firewall.21 *22 * @firewall_ctrl:		Pointer referencing a firewall controller of the device. It is23 *				opaque so a device cannot manipulate the controller's ops or access24 *				the controller's data25 * @extra_args:			Extra arguments that are implementation dependent26 * @entry:			Name of the firewall entry27 * @extra_args_size:		Number of extra arguments28 * @firewall_id:		Firewall ID associated the device for this firewall controller29 */30struct stm32_firewall {31	struct stm32_firewall_controller *firewall_ctrl;32	u32 extra_args[STM32_FIREWALL_MAX_EXTRA_ARGS];33	const char *entry;34	size_t extra_args_size;35	u32 firewall_id;36};37 38#if IS_ENABLED(CONFIG_STM32_FIREWALL)39/**40 * stm32_firewall_get_firewall - Get the firewall(s) associated to given device.41 *				 The firewall controller reference is always the first argument42 *				 of each of the access-controller property entries.43 *				 The firewall ID is always the second argument of each of the44 *				 access-controller  property entries.45 *				 If there's no argument linked to the phandle, then the firewall ID46 *				 field is set to U32_MAX, which is an invalid ID.47 *48 * @np:				Device node to parse49 * @firewall:			Array of firewall references50 * @nb_firewall:		Number of firewall references to get. Must be at least 1.51 *52 * Returns 0 on success, -ENODEV if there's no match with a firewall controller or appropriate errno53 * code if error occurred.54 */55int stm32_firewall_get_firewall(struct device_node *np, struct stm32_firewall *firewall,56				unsigned int nb_firewall);57 58/**59 * stm32_firewall_grant_access - Request firewall access rights and grant access.60 *61 * @firewall:			Firewall reference containing the ID to check against its firewall62 *				controller63 *64 * Returns 0 if access is granted, -EACCES if access is denied, -ENODEV if firewall is null or65 * appropriate errno code if error occurred66 */67int stm32_firewall_grant_access(struct stm32_firewall *firewall);68 69/**70 * stm32_firewall_release_access - Release access granted from a call to71 *				   stm32_firewall_grant_access().72 *73 * @firewall:			Firewall reference containing the ID to check against its firewall74 *				controller75 */76void stm32_firewall_release_access(struct stm32_firewall *firewall);77 78/**79 * stm32_firewall_grant_access_by_id - Request firewall access rights of a given device80 *				       based on a specific firewall ID81 *82 * Warnings:83 * There is no way to ensure that the given ID will correspond to the firewall referenced in the84 * device node if the ID did not come from stm32_firewall_get_firewall(). In that case, this85 * function must be used with caution.86 * This function should be used for subsystem resources that do not have the same firewall ID87 * as their parent.88 * U32_MAX is an invalid ID.89 *90 * @firewall:			Firewall reference containing the firewall controller91 * @subsystem_id:		Firewall ID of the subsystem resource92 *93 * Returns 0 if access is granted, -EACCES if access is denied, -ENODEV if firewall is null or94 * appropriate errno code if error occurred95 */96int stm32_firewall_grant_access_by_id(struct stm32_firewall *firewall, u32 subsystem_id);97 98/**99 * stm32_firewall_release_access_by_id - Release access granted from a call to100 *					 stm32_firewall_grant_access_by_id().101 *102 * Warnings:103 * There is no way to ensure that the given ID will correspond to the firewall referenced in the104 * device node if the ID did not come from stm32_firewall_get_firewall(). In that case, this105 * function must be used with caution.106 * This function should be used for subsystem resources that do not have the same firewall ID107 * as their parent.108 * U32_MAX is an invalid ID.109 *110 * @firewall:			Firewall reference containing the firewall controller111 * @subsystem_id:		Firewall ID of the subsystem resource112 */113void stm32_firewall_release_access_by_id(struct stm32_firewall *firewall, u32 subsystem_id);114 115#else /* CONFIG_STM32_FIREWALL */116 117int stm32_firewall_get_firewall(struct device_node *np, struct stm32_firewall *firewall,118				unsigned int nb_firewall);119{120	return -ENODEV;121}122 123int stm32_firewall_grant_access(struct stm32_firewall *firewall)124{125	return -ENODEV;126}127 128void stm32_firewall_release_access(struct stm32_firewall *firewall)129{130}131 132int stm32_firewall_grant_access_by_id(struct stm32_firewall *firewall, u32 subsystem_id)133{134	return -ENODEV;135}136 137void stm32_firewall_release_access_by_id(struct stm32_firewall *firewall, u32 subsystem_id)138{139}140 141#endif /* CONFIG_STM32_FIREWALL */142#endif /* STM32_FIREWALL_DEVICE_H */143