One thing that's quite a bit confusing in v3 is the mess of cpu.c and cpu.h.
include/arch/x86/cpu.h defines lots of functions which should be in a .c file instead. They are: struct cpuid_result cpuid(u32 op); u32 cpuid_eax(u32 op); u32 cpuid_ebx(u32 op); u32 cpuid_ecx(u32 op); u32 cpuid_edx(u32 op); void get_fms(struct cpuinfo_x86 *c, u32 tfms); unsigned long read_cr0(void); void write_cr0(unsigned long cr0); void invd(void); void wbinvd(void); void enable_cache(void); void disable_cache(void); void cpu_relax(void); void hlt(void);
arch/x86/geodelx/cpu.c is completely unused, but the contents look important. Why don't we call them?
northbridge/amd/k8/cpu.c is used.
Can someone please illustrate the underlying architecture?
(Background: I'm trying to add timestamping to printk, but I'm totally at a loss where I should place get_timestamp().)
Regards, Carl-Daniel
On Mon, Aug 18, 2008 at 5:29 AM, Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net wrote:
One thing that's quite a bit confusing in v3 is the mess of cpu.c and cpu.h.
include/arch/x86/cpu.h defines lots of functions which should be in a .c file instead. They are: struct cpuid_result cpuid(u32 op); u32 cpuid_eax(u32 op); u32 cpuid_ebx(u32 op); u32 cpuid_ecx(u32 op); u32 cpuid_edx(u32 op); void get_fms(struct cpuinfo_x86 *c, u32 tfms); unsigned long read_cr0(void); void write_cr0(unsigned long cr0); void invd(void); void wbinvd(void); void enable_cache(void); void disable_cache(void); void cpu_relax(void); void hlt(void);
I want these in a .c. This is more romcc legacy. They should be in stage1, callable from anywhere.
arch/x86/geodelx/cpu.c is completely unused, but the contents look important. Why don't we call them?
I'm not there yet. As you know, the cpu stuff is not ready yet. Also, there was the problem of how to think about the cpu "device". I am almost there and intend to augment newboot.lyx with an appendix.
northbridge/amd/k8/cpu.c is used.
The k8 has hardware that manages pci, domain, and cpu stuff that intermix due to hardware design. The C code also intermixed, but it was confusing. That said, I am thinking to move that cpu code to the arch tree at some point, which is why I broke it out.
Can someone please illustrate the underlying architecture?
I"m going to write it up as soon as I can figure it out.
(Background: I'm trying to add timestamping to printk, but I'm totally at a loss where I should place get_timestamp().)
amd cpu support I assume.
ron