Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 87b385da authored by David S. Miller's avatar David S. Miller
Browse files

[SPARC]: Add unique device_node IDs and a ".node" property.

parent fb7cd9d9
Loading
Loading
Loading
Loading
+35 −18
Original line number Diff line number Diff line
@@ -407,7 +407,9 @@ static char * __init build_full_name(struct device_node *dp)
	return n;
}

static struct property * __init build_one_prop(phandle node, char *prev)
static unsigned int unique_id;

static struct property * __init build_one_prop(phandle node, char *prev, char *special_name, void *special_val, int special_len)
{
	static struct property *tmp = NULL;
	struct property *p;
@@ -417,10 +419,17 @@ static struct property * __init build_one_prop(phandle node, char *prev)
		p = tmp;
		memset(p, 0, sizeof(*p) + 32);
		tmp = NULL;
	} else
	} else {
		p = prom_early_alloc(sizeof(struct property) + 32);
		p->unique_id = unique_id++;
	}

	p->name = (char *) (p + 1);
	if (special_name) {
		p->length = special_len;
		p->value = prom_early_alloc(special_len);
		memcpy(p->value, special_val, special_len);
	} else {
		if (prev == NULL) {
			prom_firstprop(node, p->name);
		} else {
@@ -434,8 +443,10 @@ static struct property * __init build_one_prop(phandle node, char *prev)
		if (p->length <= 0) {
			p->length = 0;
		} else {
		p->value = prom_early_alloc(p->length);
		len = prom_getproperty(node, p->name, p->value, p->length);
			p->value = prom_early_alloc(p->length + 1);
			prom_getproperty(node, p->name, p->value, p->length);
			((unsigned char *)p->value)[p->length] = '\0';
		}
	}
	return p;
}
@@ -444,9 +455,14 @@ static struct property * __init build_prop_list(phandle node)
{
	struct property *head, *tail;

	head = tail = build_one_prop(node, NULL);
	head = tail = build_one_prop(node, NULL,
				     ".node", &node, sizeof(node));

	tail->next = build_one_prop(node, NULL, NULL, NULL, 0);
	tail = tail->next;
	while(tail) {
		tail->next = build_one_prop(node, tail->name);
		tail->next = build_one_prop(node, tail->name,
					    NULL, NULL, 0);
		tail = tail->next;
	}

@@ -475,6 +491,7 @@ static struct device_node * __init create_node(phandle node)
		return NULL;

	dp = prom_early_alloc(sizeof(*dp));
	dp->unique_id = unique_id++;

	kref_init(&dp->kref);

+36 −18
Original line number Diff line number Diff line
@@ -584,7 +584,9 @@ static char * __init build_full_name(struct device_node *dp)
	return n;
}

static struct property * __init build_one_prop(phandle node, char *prev)
static unsigned int unique_id;

static struct property * __init build_one_prop(phandle node, char *prev, char *special_name, void *special_val, int special_len)
{
	static struct property *tmp = NULL;
	struct property *p;
@@ -593,10 +595,18 @@ static struct property * __init build_one_prop(phandle node, char *prev)
		p = tmp;
		memset(p, 0, sizeof(*p) + 32);
		tmp = NULL;
	} else
	} else {
		p = prom_early_alloc(sizeof(struct property) + 32);
		p->unique_id = unique_id++;
	}

	p->name = (char *) (p + 1);
	if (special_name) {
		strcpy(p->name, special_name);
		p->length = special_len;
		p->value = prom_early_alloc(special_len);
		memcpy(p->value, special_val, special_len);
	} else {
		if (prev == NULL) {
			prom_firstprop(node, p->name);
		} else {
@@ -610,8 +620,10 @@ static struct property * __init build_one_prop(phandle node, char *prev)
		if (p->length <= 0) {
			p->length = 0;
		} else {
		p->value = prom_early_alloc(p->length);
			p->value = prom_early_alloc(p->length + 1);
			prom_getproperty(node, p->name, p->value, p->length);
			((unsigned char *)p->value)[p->length] = '\0';
		}
	}
	return p;
}
@@ -620,9 +632,14 @@ static struct property * __init build_prop_list(phandle node)
{
	struct property *head, *tail;

	head = tail = build_one_prop(node, NULL);
	head = tail = build_one_prop(node, NULL,
				     ".node", &node, sizeof(node));

	tail->next = build_one_prop(node, NULL, NULL, NULL, 0);
	tail = tail->next;
	while(tail) {
		tail->next = build_one_prop(node, tail->name);
		tail->next = build_one_prop(node, tail->name,
					    NULL, NULL, 0);
		tail = tail->next;
	}

@@ -651,6 +668,7 @@ static struct device_node * __init create_node(phandle node)
		return NULL;

	dp = prom_early_alloc(sizeof(*dp));
	dp->unique_id = unique_id++;

	kref_init(&dp->kref);

+2 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ struct property {
	void	*value;
	struct property *next;
	unsigned long _flags;
	unsigned int unique_id;
};

struct device_node {
@@ -59,6 +60,7 @@ struct device_node {
	struct  kref kref;
	unsigned long _flags;
	void	*data;
	unsigned int unique_id;
};

/* flag descriptions */
+2 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ struct property {
	void	*value;
	struct property *next;
	unsigned long _flags;
	unsigned int unique_id;
};

struct device_node {
@@ -59,6 +60,7 @@ struct device_node {
	struct  kref kref;
	unsigned long _flags;
	void	*data;
	unsigned int unique_id;
};

/* flag descriptions */