int skge_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs) { const u32 *r = (const u32 *) regs->data; int dual = !(regs->data[0x11a] & 1); dump_pci(regs->data + 0x380); dump_control(regs->data); printf("\nBus Management Unit\n"); printf("-------------------\n"); printf("CSR Receive Queue 1 0x%08X\n", r[24]); printf("CSR Sync Queue 1 0x%08X\n", r[26]); printf("CSR Async Queue 1 0x%08X\n", r[27]); if (dual) { printf("CSR Receive Queue 2 0x%08X\n", r[25]); printf("CSR Async Queue 2 0x%08X\n", r[29]); printf("CSR Sync Queue 2 0x%08X\n", r[28]); } dump_mac(regs->data); dump_gmac("GMAC 1", regs->data + 0x2800); dump_timer("Timer", regs->data + 0x130); dump_timer("Blink Source", regs->data +0x170); dump_queue("Receive Queue 1", regs->data +0x400, 1); dump_queue("Sync Transmit Queue 1", regs->data +0x600, 0); dump_queue("Async Transmit Queue 1", regs->data +0x680, 0); dump_ram("Receive RAMbuffer 1", regs->data+0x800); dump_ram("Sync Transmit RAMbuffer 1", regs->data+0xa00); dump_ram("Async Transmit RAMbuffer 1", regs->data+0xa80); dump_fifo("Receive MAC FIFO 1", regs->data+0xc00); dump_fifo("Transmit MAC FIFO 1", regs->data+0xd00); if (dual) { dump_gmac("GMAC 1", regs->data + 0x2800); dump_queue("Receive Queue 2", regs->data +0x480, 1); dump_queue("Async Transmit Queue 2", regs->data +0x780, 0); dump_queue("Sync Transmit Queue 2", regs->data +0x700, 0); dump_ram("Receive RAMbuffer 2", regs->data+0x880); dump_ram("Sync Transmit RAMbuffer 2", regs->data+0xb00); dump_ram("Async Transmit RAMbuffer 21", regs->data+0xb80); dump_fifo("Receive MAC FIFO 2", regs->data+0xc80); dump_fifo("Transmit MAC FIFO 2", regs->data+0xd80); } dump_timer("Descriptor Poll", regs->data+0xe00); return 0; }
void kmain(uint32_t magic, multiboot_info_t *mboot, uintptr_t ebp) { monitor_clear(); printf("Booting Dionysus!\n"); ASSERT(magic == MULTIBOOT_BOOTLOADER_MAGIC && "Not booted with multiboot."); ASSERT(mboot->flags & MULTIBOOT_INFO_MEMORY && "No memory info."); ASSERT(mboot->flags & MULTIBOOT_INFO_MEM_MAP && "No memory map."); printf("Initializing GDT\n"); init_gdt(); printf("Initializing IDT\n"); init_idt(); // Check for modules if (mboot->flags & MULTIBOOT_INFO_MODS && mboot->mods_count) { multiboot_module_t *mods = (multiboot_module_t *)mboot->mods_addr; placement_address = mods[mboot->mods_count - 1].mod_end + KERNEL_BASE; } printf("Setting up paging\n"); init_paging(mboot->mem_lower + mboot->mem_upper, mboot->mmap_addr, mboot->mmap_length); printf("Initializing timers\n"); init_time(); init_timer(); printf("Starting task scheduling\n"); init_tasking(ebp); init_syscalls(); printf("Initializing vfs\n"); init_vfs(); printf("Initializing driver subsystem\n"); init_blockdev(); init_chardev(); init_term(); printf("Enumerating PCI bus(ses)\n"); init_pci(); dump_pci(); init_devfs(); ASSERT(mount(NULL, "/dev", "devfs", 0) == 0); init_ide(); halt(); }
/** * dump - dump info **/ void dump(struct s_hardware *hardware) { if (hardware->is_pxe_valid==false) { printf("PXE stack was not detected, Dump feature is not available\n"); return; } const union syslinux_derivative_info *sdi = syslinux_derivative_info(); int err=0; ZZJSON *json = NULL; ZZJSON_CONFIG config = { ZZJSON_VERY_STRICT, NULL, (int(*)(void*)) fgetc, NULL, malloc, calloc, free, realloc, stderr, NULL, stdout, (int(*)(void *,const char*,...)) dumpprintf, (int(*)(int,void*)) fputc }; memset(&p_buf,0,sizeof(p_buf)); /* By now, we only support TFTP reporting */ upload=&upload_tftp; upload->name="tftp"; /* The following defines the behavior of the reporting */ char *arg[64]; char filename[512]={0}; compute_filename(hardware, filename, sizeof(filename)); /* The filename */ arg[0] = filename; /* The server to upload the file */ if (strlen(hardware->tftp_ip) != 0) { arg[1] = hardware->tftp_ip; arg[2] = NULL; } else { arg[1] = NULL; snprintf(hardware->tftp_ip, sizeof(hardware->tftp_ip), "%u.%u.%u.%u", ((uint8_t *)&sdi->pxe.ipinfo->serverip)[0], ((uint8_t *)&sdi->pxe.ipinfo->serverip)[1], ((uint8_t *)&sdi->pxe.ipinfo->serverip)[2], ((uint8_t *)&sdi->pxe.ipinfo->serverip)[3]); } /* We initiate the cpio to send */ cpio_init(upload,(const char **)arg); dump_cpu(hardware, &config, &json); dump_pxe(hardware, &config, &json); dump_syslinux(hardware, &config, &json); dump_vpd(hardware, &config, &json); dump_vesa(hardware, &config, &json); dump_disks(hardware, &config, &json); dump_dmi(hardware, &config, &json); dump_memory(hardware, &config, &json); dump_pci(hardware, &config, &json); dump_acpi(hardware, &config, &json); dump_kernel(hardware, &config, &json); dump_hdt(hardware, &config, &json); /* We close & flush the file to send */ cpio_close(upload); if ((err=flush_data(upload)) != TFTP_OK) { /* As we manage a tftp connection, let's display the associated error message */ more_printf("Dump failed !\n"); more_printf("TFTP ERROR on : %s:/%s \n",hardware->tftp_ip, filename); more_printf("TFTP ERROR msg : %s \n",tftp_string_error_message[-err]); } else { more_printf("Dump file sent at %s:/%s\n",hardware->tftp_ip, filename); } }
int sky2_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs) { const u16 *r16 = (const u16 *) regs->data; const u32 *r32 = (const u32 *) regs->data; int dual; dump_pci(regs->data + 0x1c00); dump_control(regs->data); printf("\nBus Management Unit\n"); printf("-------------------\n"); printf("CSR Receive Queue 1 0x%08X\n", r32[24]); printf("CSR Sync Queue 1 0x%08X\n", r32[26]); printf("CSR Async Queue 1 0x%08X\n", r32[27]); dual = (regs->data[0x11e] & 2) != 0; if (dual) { printf("CSR Receive Queue 2 0x%08X\n", r32[25]); printf("CSR Async Queue 2 0x%08X\n", r32[29]); printf("CSR Sync Queue 2 0x%08X\n", r32[28]); } dump_mac(regs->data); dump_prefetch("Status", regs->data + 0xe80); dump_prefetch("Receive 1", regs->data + 0x450); dump_prefetch("Transmit 1", regs->data + 0x450 + 0x280); if (dual) { dump_prefetch("Receive 2", regs->data + 0x450 + 0x80); dump_prefetch("Transmit 2", regs->data + 0x450 + 0x380); } printf("\nStatus FIFO\n"); printf("\tWrite Pointer 0x%02X\n", regs->data[0xea0]); printf("\tRead Pointer 0x%02X\n", regs->data[0xea4]); printf("\tLevel 0x%02X\n", regs->data[0xea8]); printf("\tWatermark 0x%02X\n", regs->data[0xeac]); printf("\tISR Watermark 0x%02X\n", regs->data[0xead]); dump_timer("Status level", regs->data + 0xeb0); dump_timer("TX status", regs->data + 0xec0); dump_timer("ISR", regs->data + 0xed0); printf("\nGMAC control 0x%04X\n", r32[0xf00 >> 2]); printf("GPHY control 0x%04X\n", r32[0xf04 >> 2]); printf("LINK control 0x%02hX\n", r16[0xf10 >> 1]); dump_gmac("GMAC 1", regs->data + 0x2800); dump_gmac_fifo("Rx GMAC 1", regs->data + 0xc40); dump_gmac_fifo("Tx GMAC 1", regs->data + 0xd40); dump_queue2("Receive Queue 1", regs->data +0x400, 1); dump_queue("Sync Transmit Queue 1", regs->data +0x600, 0); dump_queue2("Async Transmit Queue 1", regs->data +0x680, 0); dump_ram("Receive RAMbuffer 1", regs->data+0x800); dump_ram("Sync Transmit RAMbuffer 1", regs->data+0xa00); dump_ram("Async Transmit RAMbuffer 1", regs->data+0xa80); if (dual) { dump_ram("Receive RAMbuffer 2", regs->data+0x880); dump_ram("Sync Transmit RAMbuffer 2", regs->data+0xb00); dump_ram("Async Transmit RAMbuffer 21", regs->data+0xb80); dump_gmac("GMAC 2", regs->data + 0x3800); dump_gmac_fifo("Rx GMAC 2", regs->data + 0xc40 + 128); dump_gmac_fifo("Tx GMAC 2", regs->data + 0xd40 + 128); } return 0; }