#include #include #include #include #include #include "chip.h" static void print_pci_regs(struct device *dev) { uint8_t byte; int i; for(i=0;i<256;i++) { byte = pci_read_config8(dev, i); if((i & 0xf)==0) printk_debug("\n%02x:",i); printk_debug(" %02x",byte); } printk_debug("\n"); } static void print_mem(void) { unsigned int i; unsigned int start = 0xfffff000; for(i=start;i<0xffffffff;i++) { if((i & 0xf)==0) printk_debug("\n %08x:",i); printk_debug(" %02x ",(unsigned char)*((unsigned char *)i)); } printk_debug(" %02x \n",(unsigned char)*((unsigned char *)i)); } static void print_pci_regs_all(void) { struct device *dev; unsigned char i,j,k; for(i=0;i<=15;i++) { for(j=0;j<=0x1f;j++) { for (k=0;k<=6;k++){ dev = dev_find_slot(i, PCI_DEVFN(j, k)); if(!dev) { continue; } if(!dev->enabled) { continue; } printk_debug("\n%02x:%02x:%02x aka %s",i,j,k, dev_path(dev)); print_pci_regs(dev); } } } } static void debug_init(device_t dev) { unsigned bus; unsigned devfn; // print_pci_regs_all(); print_mem(); #if 0 msr_t msr; unsigned index; unsigned eax, ebx, ecx, edx; index = 0x80000007; printk_debug("calling cpuid 0x%08x\n", index); asm volatile( "cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (index) ); printk_debug("cpuid[%08x]: %08x %08x %08x %08x\n", index, eax, ebx, ecx, edx); if (edx & (3 << 1)) { index = 0xC0010042; printk_debug("Reading msr: 0x%08x\n", index); msr = rdmsr(index); printk_debug("msr[0x%08x]: 0x%08x%08x\n", index, msr.hi, msr.hi); } #endif } static void debug_noop(device_t dummy) { } static struct device_operations debug_operations = { .read_resources = debug_noop, .set_resources = debug_noop, .enable_resources = debug_noop, .init = debug_init, }; static void enable_dev(struct device *dev) { dev->ops = &debug_operations; } struct chip_operations drivers_generic_debug_ops = { CHIP_NAME("Debug device") .enable_dev = enable_dev, };