diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2017-05-05 11:31:35 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2017-05-05 11:31:35 +0200 |
commit | 8e91536a000c1738e354827d6f72965fa1444985 (patch) | |
tree | cb48104fa7a635e82d2b8b8eed6af6fe671756f2 /include | |
parent | 30cce0c7414498317a43b2020dc1737b007acf98 (diff) | |
parent | 0071bacb4c7cab21c9fab8540f5aa9922a270a85 (diff) | |
download | barebox-8e91536a000c1738e354827d6f72965fa1444985.tar.gz barebox-8e91536a000c1738e354827d6f72965fa1444985.tar.xz |
Merge branch 'for-next/parameter-types'
Diffstat (limited to 'include')
-rw-r--r-- | include/console.h | 2 | ||||
-rw-r--r-- | include/globalvar.h | 109 | ||||
-rw-r--r-- | include/linux/kernel.h | 1 | ||||
-rw-r--r-- | include/linux/mtd/mtd.h | 1 | ||||
-rw-r--r-- | include/linux/mtd/nand.h | 1 | ||||
-rw-r--r-- | include/param.h | 195 |
6 files changed, 252 insertions, 57 deletions
diff --git a/include/console.h b/include/console.h index 126c2e8aa3..724168e07c 100644 --- a/include/console.h +++ b/include/console.h @@ -53,7 +53,7 @@ struct console_device { struct list_head list; unsigned char f_active; - char active[4]; + char *active_string; unsigned int open_count; diff --git a/include/globalvar.h b/include/globalvar.h index df43f1fe66..aea43b193d 100644 --- a/include/globalvar.h +++ b/include/globalvar.h @@ -15,10 +15,9 @@ void globalvar_remove(const char *name); char *globalvar_get_match(const char *match, const char *separator); void globalvar_set_match(const char *match, const char *val); -int globalvar_add_simple_string(const char *name, char **value); -int globalvar_add_simple_int(const char *name, int *value, - const char *format); -int globalvar_add_simple_bool(const char *name, int *value); +int __globalvar_add_simple_string(const char *name, char **value); +int __globalvar_add_simple_int(const char *name, void *value, + enum param_type type, const char *format); int globalvar_add_simple_enum(const char *name, int *value, const char * const *names, int max); int globalvar_add_simple_bitmask(const char *name, unsigned long *value, @@ -39,19 +38,13 @@ static inline int globalvar_add_simple(const char *name, const char *value) return 0; } -static inline int globalvar_add_simple_string(const char *name, char **value) +static inline int __globalvar_add_simple_int(const char *name, void *value, + enum param_type type, const char *format) { return 0; } -static inline int globalvar_add_simple_int(const char *name, - int *value, const char *format) -{ - return 0; -} - -static inline int globalvar_add_simple_bool(const char *name, - int *value) +static inline int __globalvar_add_simple_string(const char *name, char **value) { return 0; } @@ -115,6 +108,96 @@ static inline void dev_param_init_from_nv(struct device_d *dev, const char *name #endif +#define DECLARE_GLOBALVAR_INT(intname, inttype, paramtype) \ + static inline int globalvar_add_simple_##intname(const char *name, \ + inttype *value, \ + const char *format) \ + { \ + return __globalvar_add_simple_int(name, value, \ + paramtype, \ + format); \ + } + +DECLARE_GLOBALVAR_INT(uint32, uint32_t, PARAM_TYPE_UINT32) +DECLARE_GLOBALVAR_INT(int32, int32_t, PARAM_TYPE_INT32) +DECLARE_GLOBALVAR_INT(uint64, uint64_t, PARAM_TYPE_UINT64) +DECLARE_GLOBALVAR_INT(int64, int64_t, PARAM_TYPE_INT64) + +static inline int globalvar_add_simple_bool(const char *name, uint32_t *value) +{ + return __globalvar_add_simple_int(name, value, PARAM_TYPE_BOOL, "%u"); +} + +static inline int globalvar_add_simple_string(const char *name, char **value) +{ + return __globalvar_add_simple_string(name, value); +} + +#define DECLARE_GLOBALVAR_INT_RO(intname, inttype, paramtype) \ + static inline int globalvar_add_simple_##intname##_ro(const char *name, \ + inttype *value, \ + const char *format) \ + { \ + return PTR_ERR_OR_ZERO(__dev_add_param_int(&global_device, name,\ + param_set_readonly, \ + NULL, value, \ + paramtype, \ + format, NULL)); \ + } + +DECLARE_GLOBALVAR_INT_RO(uint32, uint32_t, PARAM_TYPE_UINT32) +DECLARE_GLOBALVAR_INT_RO(int32, int32_t, PARAM_TYPE_INT32) +DECLARE_GLOBALVAR_INT_RO(uint64, uint64_t, PARAM_TYPE_UINT64) +DECLARE_GLOBALVAR_INT_RO(int64, int64_t, PARAM_TYPE_INT64) + +static inline int globalvar_add_simple_bool_ro(const char *name, uint32_t *value) +{ + return PTR_ERR_OR_ZERO(__dev_add_param_int(&global_device, name, + param_set_readonly, NULL, + value, PARAM_TYPE_BOOL, "%u", + NULL)); +} + +static inline int globalvar_add_simple_string_ro(const char *name, char **value) +{ + return __globalvar_add_simple_string(name, value); +} + +#define DECLARE_GLOBALVAR_INT_FIXED(intname, inttype, paramtype) \ + static inline int globalvar_add_simple_##intname##_fixed(const char *name, \ + inttype value, \ + const char *format) \ + { \ + return PTR_ERR_OR_ZERO(__dev_add_param_int(&global_device, name, \ + ERR_PTR(-EROFS), NULL, \ + &value, paramtype, \ + format, NULL)); \ + } + +DECLARE_GLOBALVAR_INT_FIXED(uint32, uint32_t, PARAM_TYPE_UINT32) +DECLARE_GLOBALVAR_INT_FIXED(int32, int32_t, PARAM_TYPE_INT32) +DECLARE_GLOBALVAR_INT_FIXED(uint64, uint64_t, PARAM_TYPE_UINT64) +DECLARE_GLOBALVAR_INT_FIXED(int64, int64_t, PARAM_TYPE_INT64) + +static inline int globalvar_add_simple_bool_fixed(const char *name, uint32_t value) +{ + return PTR_ERR_OR_ZERO(__dev_add_param_int(&global_device, name, ERR_PTR(-EROFS), + NULL, &value, PARAM_TYPE_BOOL, "%u", + NULL)); +} + +static inline int globalvar_add_simple_string_fixed(const char *name, char *value) +{ + return PTR_ERR_OR_ZERO(dev_add_param_string_fixed(&global_device, name, value)); +} + +static inline int globalvar_add_simple_enum_ro(const char *name, int *value, + const char * const *names, int max) +{ + return PTR_ERR_OR_ZERO(dev_add_param_enum_ro(&global_device, name, value, names, + max)); +} + void nv_var_set_clean(void); int nvvar_save(void); int nv_global_complete(struct string_list *sl, char *instr); diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 945e063f02..b4d2f09081 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -92,6 +92,7 @@ void __noreturn panic(const char *fmt, ...); extern unsigned long simple_strtoul(const char *,char **,unsigned int); extern long simple_strtol(const char *,char **,unsigned int); extern unsigned long long simple_strtoull(const char *,char **,unsigned int); +extern long long simple_strtoll(const char *,char **,unsigned int); /* * min()/max()/clamp() macros that also do diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index fa35c7ef39..16725ac4bc 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h @@ -226,6 +226,7 @@ struct mtd_info { struct list_head partitions; struct list_head partitions_entry; + char *partition_string; char *of_path; unsigned int of_binding; diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 66c936ee70..27538c3f42 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -540,6 +540,7 @@ struct nand_chip { struct nand_bbt_descr *badblock_pattern; void *priv; + unsigned int bbt_type; }; /* diff --git a/include/param.h b/include/param.h index 23abb52406..9637229838 100644 --- a/include/param.h +++ b/include/param.h @@ -10,9 +10,22 @@ struct device_d; typedef uint32_t IPaddr_t; +enum param_type { + PARAM_TYPE_STRING = 0, + PARAM_TYPE_INT32, + PARAM_TYPE_UINT32, + PARAM_TYPE_INT64, + PARAM_TYPE_UINT64, + PARAM_TYPE_BOOL, + PARAM_TYPE_ENUM, + PARAM_TYPE_BITMASK, + PARAM_TYPE_IPV4, + PARAM_TYPE_MAC, +}; + struct param_d { - const char* (*get)(struct device_d *, struct param_d *param); - int (*set)(struct device_d *, struct param_d *param, const char *val); + const char* (*get)(struct param_d *param); + int (*set)(struct param_d *param, const char *val); void (*info)(struct param_d *param); unsigned int flags; char *name; @@ -20,16 +33,18 @@ struct param_d { struct device_d *dev; void *driver_priv; struct list_head list; + enum param_type type; }; #ifdef CONFIG_PARAMETER +const char *get_param_type(struct param_d *param); const char *dev_get_param(struct device_d *dev, const char *name); int dev_set_param(struct device_d *dev, const char *name, const char *val); struct param_d *get_param_by_name(struct device_d *dev, const char *name); struct param_d *dev_add_param(struct device_d *dev, const char *name, - int (*set)(struct device_d *dev, struct param_d *p, const char *val), - const char *(*get)(struct device_d *, struct param_d *p), + int (*set)(struct param_d *p, const char *val), + const char *(*get)(struct param_d *p), unsigned long flags); struct param_d *dev_add_param_string(struct device_d *dev, const char *name, @@ -37,15 +52,10 @@ struct param_d *dev_add_param_string(struct device_d *dev, const char *name, int (*get)(struct param_d *p, void *priv), char **value, void *priv); -struct param_d *dev_add_param_int(struct device_d *dev, const char *name, - int (*set)(struct param_d *p, void *priv), - int (*get)(struct param_d *p, void *priv), - int *value, const char *format, void *priv); - -struct param_d *dev_add_param_bool(struct device_d *dev, const char *name, +struct param_d *__dev_add_param_int(struct device_d *dev, const char *name, int (*set)(struct param_d *p, void *priv), int (*get)(struct param_d *p, void *priv), - int *value, void *priv); + void *value, enum param_type type, const char *format, void *priv); struct param_d *dev_add_param_enum(struct device_d *dev, const char *name, int (*set)(struct param_d *p, void *priv), @@ -57,12 +67,6 @@ struct param_d *dev_add_param_bitmask(struct device_d *dev, const char *name, int (*get)(struct param_d *p, void *priv), unsigned long *value, const char * const *names, int max, void *priv); -struct param_d *dev_add_param_int_ro(struct device_d *dev, const char *name, - int value, const char *format); - -struct param_d *dev_add_param_llint_ro(struct device_d *dev, const char *name, - long long value, const char *format); - struct param_d *dev_add_param_ip(struct device_d *dev, const char *name, int (*set)(struct param_d *p, void *priv), int (*get)(struct param_d *p, void *priv), @@ -73,14 +77,13 @@ struct param_d *dev_add_param_mac(struct device_d *dev, const char *name, int (*get)(struct param_d *p, void *priv), u8 *mac, void *priv); -int dev_add_param_fixed(struct device_d *dev, const char *name, const char *value); +struct param_d *dev_add_param_fixed(struct device_d *dev, const char *name, const char *value); void dev_remove_param(struct param_d *p); void dev_remove_parameters(struct device_d *dev); -int dev_param_set_generic(struct device_d *dev, struct param_d *p, - const char *val); +int dev_param_set_generic(struct param_d *p, const char *val); #else static inline const char *dev_get_param(struct device_d *dev, const char *name) @@ -114,10 +117,10 @@ static inline struct param_d *dev_add_param_string(struct device_d *dev, const c return ERR_PTR(-ENOSYS); } -static inline struct param_d *dev_add_param_int(struct device_d *dev, const char *name, +static inline struct param_d *__dev_add_param_int(struct device_d *dev, const char *name, int (*set)(struct param_d *p, void *priv), int (*get)(struct param_d *p, void *priv), - int *value, const char *format, void *priv) + void *value, enum param_type type, const char *format, void *priv) { return ERR_PTR(-ENOSYS); } @@ -139,56 +142,162 @@ static inline struct param_d *dev_add_param_bitmask(struct device_d *dev, const return ERR_PTR(-ENOSYS); } -static inline struct param_d *dev_add_param_bool(struct device_d *dev, const char *name, +static inline struct param_d *dev_add_param_ip(struct device_d *dev, const char *name, int (*set)(struct param_d *p, void *priv), int (*get)(struct param_d *p, void *priv), - int *value, void *priv) + IPaddr_t *ip, void *priv) { return ERR_PTR(-ENOSYS); } -static inline struct param_d *dev_add_param_int_ro(struct device_d *dev, const char *name, - int value, const char *format) +static inline struct param_d *dev_add_param_mac(struct device_d *dev, const char *name, + int (*set)(struct param_d *p, void *priv), + int (*get)(struct param_d *p, void *priv), + u8 *mac, void *priv) { return ERR_PTR(-ENOSYS); } -static inline struct param_d *dev_add_param_llint_ro(struct device_d *dev, const char *name, - long long value, const char *format) +static inline struct param_d *dev_add_param_fixed(struct device_d *dev, const char *name, + const char *value) { return ERR_PTR(-ENOSYS); } -static inline struct param_d *dev_add_param_ip(struct device_d *dev, const char *name, +static inline void dev_remove_param(struct param_d *p) {} + +static inline void dev_remove_parameters(struct device_d *dev) {} + +static inline int dev_param_set_generic(struct device_d *dev, struct param_d *p, + const char *val) +{ + return 0; +} +#endif + +int param_set_readonly(struct param_d *p, void *priv); + +/* + * dev_add_param_int + * dev_add_param_int32 + * dev_add_param_uint32 + * dev_add_param_int64 + * dev_add_param_uint64 + */ +#define DECLARE_PARAM_INT(intname, inttype, paramtype) \ + static inline struct param_d *dev_add_param_##intname(struct device_d *dev, const char *name, \ + int (*set)(struct param_d *p, void *priv), \ + int (*get)(struct param_d *p, void *priv), \ + inttype *value, const char *format, void *priv) \ + { \ + return __dev_add_param_int(dev, name, set, get, value, paramtype, format, priv); \ + } + +DECLARE_PARAM_INT(int, int, PARAM_TYPE_INT32) +DECLARE_PARAM_INT(int32, int32_t, PARAM_TYPE_INT32) +DECLARE_PARAM_INT(uint32, uint32_t, PARAM_TYPE_UINT32) +DECLARE_PARAM_INT(int64, int64_t, PARAM_TYPE_INT64) +DECLARE_PARAM_INT(uint64, uint64_t, PARAM_TYPE_UINT64) + +/* + * dev_add_param_int_fixed + * dev_add_param_int32_fixed + * dev_add_param_uint32_fixed + * dev_add_param_int64_fixed + * dev_add_param_uint64_fixed + */ +#define DECLARE_PARAM_INT_FIXED(intname, inttype, paramtype) \ + static inline struct param_d *dev_add_param_##intname##_fixed(struct device_d *dev, const char *name, \ + inttype value, const char *format) \ + { \ + return __dev_add_param_int(dev, name, ERR_PTR(-EROFS), NULL, &value, paramtype, format, NULL); \ + } + +DECLARE_PARAM_INT_FIXED(int, int, PARAM_TYPE_INT32) +DECLARE_PARAM_INT_FIXED(int32, int32_t, PARAM_TYPE_INT32) +DECLARE_PARAM_INT_FIXED(uint32, uint32_t, PARAM_TYPE_UINT32) +DECLARE_PARAM_INT_FIXED(int64, int64_t, PARAM_TYPE_INT64) +DECLARE_PARAM_INT_FIXED(uint64, uint64_t, PARAM_TYPE_UINT64) + +/* + * dev_add_param_int_ro + * dev_add_param_int32_ro + * dev_add_param_uint32_ro + * dev_add_param_int64_ro + * dev_add_param_uint64_ro + */ +#define DECLARE_PARAM_INT_RO(intname, inttype, paramtype) \ + static inline struct param_d *dev_add_param_##intname##_ro(struct device_d *dev, const char *name, \ + inttype *value, const char *format) \ + { \ + return __dev_add_param_int(dev, name, param_set_readonly, NULL, value, paramtype, format, NULL); \ + } + +DECLARE_PARAM_INT_RO(int, int, PARAM_TYPE_INT32) +DECLARE_PARAM_INT_RO(int32, int32_t, PARAM_TYPE_INT32) +DECLARE_PARAM_INT_RO(uint32, uint32_t, PARAM_TYPE_UINT32) +DECLARE_PARAM_INT_RO(int64, int64_t, PARAM_TYPE_INT64) +DECLARE_PARAM_INT_RO(uint64, uint64_t, PARAM_TYPE_UINT64) + +static inline struct param_d *dev_add_param_bool(struct device_d *dev, const char *name, int (*set)(struct param_d *p, void *priv), int (*get)(struct param_d *p, void *priv), - IPaddr_t *ip, void *priv) + uint32_t *value, void *priv) { - return ERR_PTR(-ENOSYS); + return __dev_add_param_int(dev, name, set, get, value, PARAM_TYPE_BOOL, "%u", priv); } -static inline struct param_d *dev_add_param_mac(struct device_d *dev, const char *name, +static inline struct param_d *dev_add_param_bool_fixed(struct device_d *dev, const char *name, + uint32_t value) +{ + return __dev_add_param_int(dev, name, ERR_PTR(-EROFS), NULL, &value, PARAM_TYPE_BOOL, + "%u", NULL); +} + +static inline struct param_d *dev_add_param_bool_ro(struct device_d *dev, const char *name, + uint32_t *value) +{ + return __dev_add_param_int(dev, name, param_set_readonly, NULL, value, PARAM_TYPE_BOOL, + "%u", NULL); +} + +static inline struct param_d *dev_add_param_string_ro(struct device_d *dev, const char *name, int (*set)(struct param_d *p, void *priv), int (*get)(struct param_d *p, void *priv), - u8 *mac, void *priv) + char **value, void *priv) { - return ERR_PTR(-ENOSYS); + return dev_add_param_string(dev, name, param_set_readonly, NULL, value, NULL); } -static inline int dev_add_param_fixed(struct device_d *dev, const char *name, const char *value) +static inline struct param_d *dev_add_param_string_fixed(struct device_d *dev, const char *name, + char *value) { - return 0; + return dev_add_param_fixed(dev, name, value); } -static inline void dev_remove_param(struct param_d *p) {} - -static inline void dev_remove_parameters(struct device_d *dev) {} +static inline struct param_d *dev_add_param_enum_ro(struct device_d *dev, const char *name, + int *value, const char * const *names, int max) +{ + return dev_add_param_enum(dev, name, param_set_readonly, NULL, + value, names, max, NULL); +} -static inline int dev_param_set_generic(struct device_d *dev, struct param_d *p, - const char *val) +static inline struct param_d *dev_add_param_bitmask_ro(struct device_d *dev, const char *name, + int (*set)(struct param_d *p, void *priv), + int (*get)(struct param_d *p, void *priv), + unsigned long *value, const char * const *names, int max, void *priv) { - return 0; + return dev_add_param_bitmask(dev, name, param_set_readonly, NULL, + value, names, max, NULL); } -#endif +/* + * unimplemented: + * dev_add_param_enum_fixed + * dev_add_param_bitmask_fixed + * dev_add_param_ip_ro + * dev_add_param_ip_fixed + * dev_add_param_mac_ro + * dev_add_param_mac_fixed + */ #endif /* PARAM_H */ |