mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-29 19:18:22 +00:00 
			
		
		
		
	These headers follow the pattern:
| #if CONFIG_IS_ENABLED(FANCY_FEATURE)
|   void foo(void);
| #else
|   static inline void foo(void) { return -ENOSYS; }
| #endif
In the #else path ENOSYS is used, however linux/errno.h is not included.
If errno.h has not been included already the compiler errors out even
if the inline function is not referenced.
Make those headers self contained.
Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
		
	
			
		
			
				
	
	
		
			150 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0+ */
 | |
| /*
 | |
|  * (C) Copyright 2020 - Texas Instruments Incorporated - https://www.ti.com/
 | |
|  *	Dave Gerlach <d-gerlach@ti.com>
 | |
|  */
 | |
| 
 | |
| #ifndef __SOC_H
 | |
| #define __SOC_H
 | |
| 
 | |
| #include <linux/errno.h>
 | |
| 
 | |
| #define SOC_MAX_STR_SIZE	128
 | |
| 
 | |
| struct udevice;
 | |
| 
 | |
| /**
 | |
|  * struct soc_attr - Contains SoC identify information to be used in
 | |
|  *		     SoC matching. An array of these structs
 | |
|  *		     representing different SoCs can be passed to
 | |
|  *		     soc_device_match and the struct matching the SoC
 | |
|  *		     in use will be returned.
 | |
|  *
 | |
|  * @family   - Name of SoC family that can include multiple related SoC
 | |
|  *	       variants. Example: am33
 | |
|  * @machine  - Name of a specific SoC. Example: am3352
 | |
|  * @revision - Name of a specific SoC revision. Example: SR1.1
 | |
|  * @data     - A pointer to user data for the SoC variant
 | |
|  */
 | |
| struct soc_attr {
 | |
| 	const char *family;
 | |
| 	const char *machine;
 | |
| 	const char *revision;
 | |
| 	const void *data;
 | |
| };
 | |
| 
 | |
| struct soc_ops {
 | |
| 	/**
 | |
| 	 * get_machine() - Get machine name of an SOC
 | |
| 	 *
 | |
| 	 * @dev:	Device to check (UCLASS_SOC)
 | |
| 	 * @buf:	Buffer to place string
 | |
| 	 * @size:	Size of string space
 | |
| 	 * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
| 	 */
 | |
| 	int (*get_machine)(struct udevice *dev, char *buf, int size);
 | |
| 
 | |
| 	/**
 | |
| 	 * get_revision() - Get revision name of a SOC
 | |
| 	 *
 | |
| 	 * @dev:	Device to check (UCLASS_SOC)
 | |
| 	 * @buf:	Buffer to place string
 | |
| 	 * @size:	Size of string space
 | |
| 	 * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
| 	 */
 | |
| 	int (*get_revision)(struct udevice *dev, char *buf, int size);
 | |
| 
 | |
| 	/**
 | |
| 	 * get_family() - Get family name of an SOC
 | |
| 	 *
 | |
| 	 * @dev:	Device to check (UCLASS_SOC)
 | |
| 	 * @buf:	Buffer to place string
 | |
| 	 * @size:	Size of string space
 | |
| 	 * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
| 	 */
 | |
| 	int (*get_family)(struct udevice *dev, char *buf, int size);
 | |
| };
 | |
| 
 | |
| #define soc_get_ops(dev)        ((struct soc_ops *)(dev)->driver->ops)
 | |
| 
 | |
| #ifdef CONFIG_SOC_DEVICE
 | |
| /**
 | |
|  * soc_get() - Return the soc device for the soc in use.
 | |
|  * @devp: Pointer to structure to receive the soc device.
 | |
|  *
 | |
|  * Since there can only be at most one SOC instance, the API can supply a
 | |
|  * function that returns the unique device.
 | |
|  *
 | |
|  * Return: 0 if OK, -ve on error.
 | |
|  */
 | |
| int soc_get(struct udevice **devp);
 | |
| 
 | |
| /**
 | |
|  * soc_get_machine() - Get machine name of an SOC
 | |
|  * @dev:	Device to check (UCLASS_SOC)
 | |
|  * @buf:	Buffer to place string
 | |
|  * @size:	Size of string space
 | |
|  *
 | |
|  * Return: 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
|  */
 | |
| int soc_get_machine(struct udevice *dev, char *buf, int size);
 | |
| 
 | |
| /**
 | |
|  * soc_get_revision() - Get revision name of an SOC
 | |
|  * @dev:	Device to check (UCLASS_SOC)
 | |
|  * @buf:	Buffer to place string
 | |
|  * @size:	Size of string space
 | |
|  *
 | |
|  * Return: 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
|  */
 | |
| int soc_get_revision(struct udevice *dev, char *buf, int size);
 | |
| 
 | |
| /**
 | |
|  * soc_get_family() - Get family name of an SOC
 | |
|  * @dev:	Device to check (UCLASS_SOC)
 | |
|  * @buf:	Buffer to place string
 | |
|  * @size:	Size of string space
 | |
|  *
 | |
|  * Return: 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
|  */
 | |
| int soc_get_family(struct udevice *dev, char *buf, int size);
 | |
| 
 | |
| /**
 | |
|  * soc_device_match() - Return match from an array of soc_attr
 | |
|  * @matches:	Array with any combination of family, revision or machine set
 | |
|  *
 | |
|  * Return: Pointer to struct from matches array with set attributes matching
 | |
|  *	   those provided by the soc device, or NULL if no match found.
 | |
|  */
 | |
| const struct soc_attr *
 | |
| soc_device_match(const struct soc_attr *matches);
 | |
| 
 | |
| #else
 | |
| static inline int soc_get(struct udevice **devp)
 | |
| {
 | |
| 	return -ENOSYS;
 | |
| }
 | |
| 
 | |
| static inline int soc_get_machine(struct udevice *dev, char *buf, int size)
 | |
| {
 | |
| 	return -ENOSYS;
 | |
| }
 | |
| 
 | |
| static inline int soc_get_revision(struct udevice *dev, char *buf, int size)
 | |
| {
 | |
| 	return -ENOSYS;
 | |
| }
 | |
| 
 | |
| static inline int soc_get_family(struct udevice *dev, char *buf, int size)
 | |
| {
 | |
| 	return -ENOSYS;
 | |
| }
 | |
| 
 | |
| static inline const struct soc_attr *
 | |
| soc_device_match(const struct soc_attr *matches)
 | |
| {
 | |
| 	return NULL;
 | |
| }
 | |
| #endif
 | |
| #endif /* _SOC_H */
 |