summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2017-05-05 11:31:35 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2017-05-05 11:31:35 +0200
commit8e91536a000c1738e354827d6f72965fa1444985 (patch)
treecb48104fa7a635e82d2b8b8eed6af6fe671756f2 /include
parent30cce0c7414498317a43b2020dc1737b007acf98 (diff)
parent0071bacb4c7cab21c9fab8540f5aa9922a270a85 (diff)
downloadbarebox-8e91536a000c1738e354827d6f72965fa1444985.tar.gz
barebox-8e91536a000c1738e354827d6f72965fa1444985.tar.xz
Merge branch 'for-next/parameter-types'
Diffstat (limited to 'include')
-rw-r--r--include/console.h2
-rw-r--r--include/globalvar.h109
-rw-r--r--include/linux/kernel.h1
-rw-r--r--include/linux/mtd/mtd.h1
-rw-r--r--include/linux/mtd/nand.h1
-rw-r--r--include/param.h195
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 */