static int cache_info()

in kernel/palinfo.c [212:287]


static int cache_info(struct seq_file *m)
{
	unsigned long i, levels, unique_caches;
	pal_cache_config_info_t cci;
	int j, k;
	long status;

	if ((status = ia64_pal_cache_summary(&levels, &unique_caches)) != 0) {
		printk(KERN_ERR "ia64_pal_cache_summary=%ld\n", status);
		return 0;
	}

	seq_printf(m, "Cache levels  : %ld\nUnique caches : %ld\n\n",
		   levels, unique_caches);

	for (i=0; i < levels; i++) {
		for (j=2; j >0 ; j--) {
			/* even without unification some level may not be present */
			if ((status=ia64_pal_cache_config_info(i,j, &cci)) != 0)
				continue;

			seq_printf(m,
				   "%s Cache level %lu:\n"
				   "\tSize           : %u bytes\n"
				   "\tAttributes     : ",
				   cache_types[j+cci.pcci_unified], i+1,
				   cci.pcci_cache_size);

			if (cci.pcci_unified)
				seq_puts(m, "Unified ");

			seq_printf(m, "%s\n", cache_mattrib[cci.pcci_cache_attr]);

			seq_printf(m,
				   "\tAssociativity  : %d\n"
				   "\tLine size      : %d bytes\n"
				   "\tStride         : %d bytes\n",
				   cci.pcci_assoc,
				   1<<cci.pcci_line_size,
				   1<<cci.pcci_stride);
			if (j == 1)
				seq_puts(m, "\tStore latency  : N/A\n");
			else
				seq_printf(m, "\tStore latency  : %d cycle(s)\n",
					   cci.pcci_st_latency);

			seq_printf(m,
				   "\tLoad latency   : %d cycle(s)\n"
				   "\tStore hints    : ", cci.pcci_ld_latency);

			for(k=0; k < 8; k++ ) {
				if ( cci.pcci_st_hints & 0x1)
					seq_printf(m, "[%s]", cache_st_hints[k]);
				cci.pcci_st_hints >>=1;
			}
			seq_puts(m, "\n\tLoad hints     : ");

			for(k=0; k < 8; k++ ) {
				if (cci.pcci_ld_hints & 0x1)
					seq_printf(m, "[%s]", cache_ld_hints[k]);
				cci.pcci_ld_hints >>=1;
			}
			seq_printf(m,
				   "\n\tAlias boundary : %d byte(s)\n"
				   "\tTag LSB        : %d\n"
				   "\tTag MSB        : %d\n",
				   1<<cci.pcci_alias_boundary, cci.pcci_tag_lsb,
				   cci.pcci_tag_msb);

			/* when unified, data(j=2) is enough */
			if (cci.pcci_unified)
				break;
		}
	}
	return 0;
}