forked from KolibriOS/kolibrios
ddk: v4.5.7
git-svn-id: svn://kolibrios.org@6936 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -144,14 +144,18 @@ static inline int fwnode_property_read_u64(struct fwnode_handle *fwnode,
|
||||
/**
|
||||
* struct property_entry - "Built-in" device property representation.
|
||||
* @name: Name of the property.
|
||||
* @type: Type of the property.
|
||||
* @nval: Number of items of type @type making up the value.
|
||||
* @value: Value of the property (an array of @nval items of type @type).
|
||||
* @length: Length of data making up the value.
|
||||
* @is_array: True when the property is an array.
|
||||
* @is_string: True when property is a string.
|
||||
* @pointer: Pointer to the property (an array of items of the given type).
|
||||
* @value: Value of the property (when it is a single item of the given type).
|
||||
*/
|
||||
struct property_entry {
|
||||
const char *name;
|
||||
enum dev_prop_type type;
|
||||
size_t nval;
|
||||
size_t length;
|
||||
bool is_array;
|
||||
bool is_string;
|
||||
union {
|
||||
union {
|
||||
void *raw_data;
|
||||
u8 *u8_data;
|
||||
@@ -159,8 +163,80 @@ struct property_entry {
|
||||
u32 *u32_data;
|
||||
u64 *u64_data;
|
||||
const char **str;
|
||||
} pointer;
|
||||
union {
|
||||
unsigned long long raw_data;
|
||||
u8 u8_data;
|
||||
u16 u16_data;
|
||||
u32 u32_data;
|
||||
u64 u64_data;
|
||||
const char *str;
|
||||
} value;
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
* Note: the below four initializers for the anonymous union are carefully
|
||||
* crafted to avoid gcc-4.4.4's problems with initialization of anon unions
|
||||
* and structs.
|
||||
*/
|
||||
|
||||
#define PROPERTY_ENTRY_INTEGER_ARRAY(_name_, _type_, _val_) \
|
||||
{ \
|
||||
.name = _name_, \
|
||||
.length = ARRAY_SIZE(_val_) * sizeof(_type_), \
|
||||
.is_array = true, \
|
||||
.is_string = false, \
|
||||
{ .pointer = { _type_##_data = _val_ } }, \
|
||||
}
|
||||
|
||||
#define PROPERTY_ENTRY_U8_ARRAY(_name_, _val_) \
|
||||
PROPERTY_ENTRY_INTEGER_ARRAY(_name_, u8, _val_)
|
||||
#define PROPERTY_ENTRY_U16_ARRAY(_name_, _val_) \
|
||||
PROPERTY_ENTRY_INTEGER_ARRAY(_name_, u16, _val_)
|
||||
#define PROPERTY_ENTRY_U32_ARRAY(_name_, _val_) \
|
||||
PROPERTY_ENTRY_INTEGER_ARRAY(_name_, u32, _val_)
|
||||
#define PROPERTY_ENTRY_U64_ARRAY(_name_, _val_) \
|
||||
PROPERTY_ENTRY_INTEGER_ARRAY(_name_, u64, _val_)
|
||||
|
||||
#define PROPERTY_ENTRY_STRING_ARRAY(_name_, _val_) \
|
||||
{ \
|
||||
.name = _name_, \
|
||||
.length = ARRAY_SIZE(_val_) * sizeof(const char *), \
|
||||
.is_array = true, \
|
||||
.is_string = true, \
|
||||
{ .pointer = { .str = _val_ } }, \
|
||||
}
|
||||
|
||||
#define PROPERTY_ENTRY_INTEGER(_name_, _type_, _val_) \
|
||||
{ \
|
||||
.name = _name_, \
|
||||
.length = sizeof(_type_), \
|
||||
.is_string = false, \
|
||||
{ .value = { ._type_##_data = _val_ } }, \
|
||||
}
|
||||
|
||||
#define PROPERTY_ENTRY_U8(_name_, _val_) \
|
||||
PROPERTY_ENTRY_INTEGER(_name_, u8, _val_)
|
||||
#define PROPERTY_ENTRY_U16(_name_, _val_) \
|
||||
PROPERTY_ENTRY_INTEGER(_name_, u16, _val_)
|
||||
#define PROPERTY_ENTRY_U32(_name_, _val_) \
|
||||
PROPERTY_ENTRY_INTEGER(_name_, u32, _val_)
|
||||
#define PROPERTY_ENTRY_U64(_name_, _val_) \
|
||||
PROPERTY_ENTRY_INTEGER(_name_, u64, _val_)
|
||||
|
||||
#define PROPERTY_ENTRY_STRING(_name_, _val_) \
|
||||
{ \
|
||||
.name = _name_, \
|
||||
.length = sizeof(_val_), \
|
||||
.is_string = true, \
|
||||
{ .value = { .str = _val_ } }, \
|
||||
}
|
||||
|
||||
#define PROPERTY_ENTRY_BOOL(_name_) \
|
||||
{ \
|
||||
.name = _name_, \
|
||||
}
|
||||
|
||||
/**
|
||||
* struct property_set - Collection of "built-in" device properties.
|
||||
@@ -172,7 +248,8 @@ struct property_set {
|
||||
struct property_entry *properties;
|
||||
};
|
||||
|
||||
void device_add_property_set(struct device *dev, struct property_set *pset);
|
||||
int device_add_property_set(struct device *dev, const struct property_set *pset);
|
||||
void device_remove_property_set(struct device *dev);
|
||||
|
||||
bool device_dma_supported(struct device *dev);
|
||||
|
||||
|
Reference in New Issue
Block a user