Exemple #1
0
static bool add_address_range(struct dt_node *root,
			      const struct HDIF_ms_area_id *id,
			      const struct HDIF_ms_area_address_range *arange)
{
	struct dt_node *mem;
	u64 reg[2];
	char *name;
	u32 chip_id;
	size_t namesz = sizeof("memory@") + STR_MAX_CHARS(reg[0]);

	name = (char*)malloc(namesz);

	prlog(PR_DEBUG, "  Range: 0x%016llx..0x%016llx "
	      "on Chip 0x%x mattr: 0x%x\n",
	      (long long)arange->start, (long long)arange->end,
	      pcid_to_chip_id(arange->chip), arange->mirror_attr);

	/* reg contains start and length */
	reg[0] = cleanup_addr(be64_to_cpu(arange->start));
	reg[1] = cleanup_addr(be64_to_cpu(arange->end)) - reg[0];

	chip_id = pcid_to_chip_id(be32_to_cpu(arange->chip));

	if (be16_to_cpu(id->flags) & MS_AREA_SHARED) {
		/* Only enter shared nodes once. */ 
		mem = find_shared(root, be16_to_cpu(id->share_id),
				  reg[0], reg[1]);
		if (mem) {
			append_chip_id(mem, chip_id);
			return true;
		}
	}
	snprintf(name, namesz, "memory@%llx", (long long)reg[0]);

	mem = dt_new(root, name);
	dt_add_property_string(mem, "device_type", "memory");
	dt_add_property_cells(mem, "ibm,chip-id", chip_id);
	dt_add_property_u64s(mem, "reg", reg[0], reg[1]);
	if (be16_to_cpu(id->flags) & MS_AREA_SHARED)
		dt_add_property_cells(mem, DT_PRIVATE "share-id",
				      be16_to_cpu(id->share_id));

	free(name);

	return true;
}
int main(int argc, char *argv[])
{
	struct s
#ifdef FAIL
#if !HAVE_TYPEOF
	#error We need typeof to check STR_MAX_CHARS.
#endif
#else
	/* A pointer is OK. */
		*
#endif
		val;
	char str[STR_MAX_CHARS(val)];

	str[0] = '\0';
	return str[0] ? 0 : 1;
}
static void add_mem_node(uint64_t start, uint64_t len)
{
	struct dt_node *mem;
	u64 reg[2];
	char *name;

	name = (char*)malloc(sizeof("memory@") + STR_MAX_CHARS(reg[0]));
	assert(name);

	/* reg contains start and length */
	reg[0] = cpu_to_be64(start);
	reg[1] = cpu_to_be64(len);

	sprintf(name, "memory@%llx", (long long)start);

	mem = dt_new(dt_root, name);
	dt_add_property_string(mem, "device_type", "memory");
	dt_add_property(mem, "reg", reg, sizeof(reg));
	free(name);
}
int main(int argc, char *argv[])
{
	char *str = (char*)malloc(sizeof(char)*1000);
	struct {
		uint8_t u1byte;
		int8_t s1byte;
		uint16_t u2byte;
		int16_t s2byte;
		uint32_t u4byte;
		int32_t s4byte;
		uint64_t u8byte;
		int64_t s8byte;
		void *ptr;
	} types;

	(void)argc;
	(void)argv;

	assert(str);

	plan_tests(13);

	memset(&types, 0xFF, sizeof(types));

	/* Hex versions */
	sprintf(str, "0x%llx", (unsigned long long)types.u1byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u1byte));
	sprintf(str, "0x%llx", (unsigned long long)types.u2byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u2byte));
	sprintf(str, "0x%llx", (unsigned long long)types.u4byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u4byte));
	sprintf(str, "0x%llx", (unsigned long long)types.u8byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u8byte));

	/* Decimal versions */
	sprintf(str, "%u", types.u1byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u1byte));
	sprintf(str, "%d", types.s1byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.s1byte));
	sprintf(str, "%u", types.u2byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u2byte));
	sprintf(str, "%d", types.s2byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.s2byte));
	sprintf(str, "%u", types.u4byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u4byte));
	sprintf(str, "%d", types.s4byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.s4byte));
	sprintf(str, "%llu", (unsigned long long)types.u8byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u8byte));
	sprintf(str, "%lld", (long long)types.s8byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.s8byte));

	/* Pointer version. */
	sprintf(str, "%p", types.ptr);
	ok1(strlen(str) < STR_MAX_CHARS(types.ptr));

	free(str);

	return exit_status();
}				
int main(void)
{
	char str[1000];
	struct {
		uint8_t u1byte;
		int8_t s1byte;
		uint16_t u2byte;
		int16_t s2byte;
		uint32_t u4byte;
		int32_t s4byte;
		uint64_t u8byte;
		int64_t s8byte;
		void *ptr;
	} types;

	plan_tests(13);

	memset(&types, 0xFF, sizeof(types));

	/* Hex versions */
	sprintf(str, "0x%llx", (unsigned long long)types.u1byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u1byte));
	sprintf(str, "0x%llx", (unsigned long long)types.u2byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u2byte));
	sprintf(str, "0x%llx", (unsigned long long)types.u4byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u4byte));
	sprintf(str, "0x%llx", (unsigned long long)types.u8byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u8byte));

	/* Decimal versions */
	sprintf(str, "%u", types.u1byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u1byte));
	sprintf(str, "%d", types.s1byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.s1byte));
	sprintf(str, "%u", types.u2byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u2byte));
	sprintf(str, "%d", types.s2byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.s2byte));
	sprintf(str, "%u", types.u4byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u4byte));
	sprintf(str, "%d", types.s4byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.s4byte));
	sprintf(str, "%llu", (unsigned long long)types.u8byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.u8byte));
	sprintf(str, "%lld", (long long)types.s8byte);
	ok1(strlen(str) < STR_MAX_CHARS(types.s8byte));

	/* Pointer version. */
	sprintf(str, "%p", types.ptr);
	ok1(strlen(str) < STR_MAX_CHARS(types.ptr));

	return exit_status();
}