Обновление стандартных модулей под новый API

This commit is contained in:
Aren 2023-12-15 18:00:19 +03:00
parent cc7c21f0fd
commit 1f6eaf3ca0
5 changed files with 85 additions and 60 deletions

View File

@ -13,8 +13,8 @@ static inline void L1_cache_size( ) {
fb_printf("L1 кэш недоступен\n");
return;
}
fb_printf("L1: Размер строки: %u B, Тип ассоциации: %u, Размер кэша: %u КБ\n", ecx & 0xff, (ecx >> 12) & 0x07,
(ecx >> 16) & 0xffff);
fb_printf("L1: Размер строки: %u B, Тип ассоциации: %u, Размер кэша: %u КБ\n", ecx & 0xFF, (ecx >> 12) & 0x07,
(ecx >> 16) & 0xFFff);
}
static inline void L2_cache_size( ) {
@ -24,7 +24,7 @@ static inline void L2_cache_size( ) {
fb_printf("L2 кэш недоступен\n");
return;
}
fb_printf("L2: Размер строки: %u B, Тип ассоциации: %u, Размер кэша: %u КБ\n", ecx & 0xff, (ecx >> 12) & 0x0F,
fb_printf("L2: Размер строки: %u B, Тип ассоциации: %u, Размер кэша: %u КБ\n", ecx & 0xFF, (ecx >> 12) & 0x0F,
(ecx >> 16) & 0xFFFF);
}
@ -35,24 +35,56 @@ static inline void L3_cache_size( ) {
fb_printf("L3 кэш недоступен\n");
return;
}
fb_printf("L3: Размер строки: %u B, Тип ассоциации: %u, Размер кэша: %u КБ\n", edx & 0xff, (edx >> 12) & 0x0F,
fb_printf("L3: Размер строки: %u B, Тип ассоциации: %u, Размер кэша: %u КБ\n", edx & 0xFF, (edx >> 12) & 0x0F,
(edx >> 16) & 0xFFFF);
}
static void cpu_info( ) {
uint32_t eax, ebx, ecx, edx;
cpuid(0x8000001E, &eax, &ebx, &ecx, &edx);
uint32_t apic_id = eax;
uint8_t compute_unit_id = ebx & 0xFF;
uint8_t cores_per_compute_unit = ((ebx >> 8) & 3) + 1;
uint8_t node_id = ecx & 0xFF;
uint8_t nodes_per_processor = ((ecx >> 8) & 3) + 1;
fb_printf("Топология процессора:\n");
fb_printf(" Идентификатор APIC: %u\n", apic_id);
fb_printf(" Идентификатор вычислительной единицы: %u\n", compute_unit_id);
fb_printf(" Ядра на вычислительную единицу: %u\n", cores_per_compute_unit);
fb_printf(" Идентификатор узла: %u\n", node_id);
fb_printf(" Узлы на процессор: %u\n", nodes_per_processor);
}
module_info_t __attribute__((section(".minit"))) init(env_t *env) {
uint32_t eax, ebx, ecx, edx;
init_env(env);
cpuid(1, &eax, &ebx, &ecx, &edx);
if (ecx & (1 << 31)) {
fb_printf("Запуск на эмуляторе\n");
} else {
fb_printf("Запуск на физическом процессоре\n");
}
L1_cache_size( );
L2_cache_size( );
L3_cache_size( );
return (module_info_t){
.name = (char *)"CPUBENCH",
.message = (char *)"Дополнительная информация о процессоре",
.type = 0,
.data_size = 0,
.data = (void *)0,
.err_code = 0,
.module_id = 0,
};
cpuid(0x80000000, &eax, &ebx, &ecx, &edx);
if (eax >= 0x8000001E) { cpu_info( ); }
return (module_info_t){ .name = (char *)"CPUBENCH",
.message = (char *)"Дополнительная информация о процессоре",
.type = 0,
.data_size = 0,
.data = (void *)0,
.err_code = 0,
.module_id = 0,
.irq = 0,
.irq_handler = 0,
.get_func = 0 };
}

View File

@ -6,13 +6,14 @@ static const char message[] = "Привет из модуля!";
module_info_t __attribute__((section(".minit"))) init(env_t *env) {
init_env(env);
fb_printf("[%s]\n", message);
return (module_info_t){
.name = (char *)&name,
.message = (char *)&message,
.type = 0,
.data_size = 0,
.data = (void *)0,
.err_code = 0,
.module_id = 0,
};
return (module_info_t){ .name = (char *)&name,
.message = (char *)&message,
.type = 0,
.data_size = 0,
.data = (void *)0,
.err_code = 0,
.module_id = 0,
.irq = 0,
.irq_handler = 0,
.get_func = 0 };
}

View File

@ -15,16 +15,6 @@ static char *find_vendor(uint16_t id) {
return "Нет в базе";
}
static inline uint32_t inl(uint16_t port) {
uint32_t data;
asm volatile("inl %1, %0" : "=a"(data) : "Nd"(port));
return data;
}
static inline void outl(uint16_t port, uint32_t data) {
asm volatile("outl %0, %1" : : "a"(data), "Nd"(port));
}
static inline uint16_t pci_read_word(uint16_t bus, uint16_t slot, uint16_t func, uint16_t offset) {
uint64_t address;
uint64_t lbus = (uint64_t)bus;
@ -134,13 +124,14 @@ module_info_t __attribute__((section(".minit"))) init(env_t *env) {
}
scan( );
return (module_info_t){
.name = (char *)"[PCI]",
.message = (char *)"PCI драйвер",
.type = 0,
.data_size = 0,
.data = (void *)0,
.err_code = 0,
.module_id = 0,
};
return (module_info_t){ .name = (char *)"[PCI]",
.message = (char *)"PCI драйвер",
.type = 0,
.data_size = 0,
.data = (void *)0,
.err_code = 0,
.module_id = 0,
.irq = 0,
.irq_handler = 0,
.get_func = 0 };
}

View File

@ -71,13 +71,14 @@ module_info_t __attribute__((section(".minit"))) init(env_t *env) {
vendor_t **vendor_list = parse_file(pci_data->data, num_vendors, pci_data->data_size);
// print_vendors(num_vendors, vendor_list);
return (module_info_t){
.name = (char *)"[PCI][ADAPTER]",
.message = (char *)"PCI данные",
.type = 0,
.data_size = num_vendors,
.data = vendor_list,
.err_code = 0,
.module_id = 0,
};
return (module_info_t){ .name = (char *)"[PCI][ADAPTER]",
.message = (char *)"PCI данные",
.type = 0,
.data_size = num_vendors,
.data = vendor_list,
.err_code = 0,
.module_id = 0,
.irq = 0,
.irq_handler = 0,
.get_func = 0 };
}

View File

@ -29,14 +29,14 @@ module_info_t __attribute__((section(".minit"))) init(env_t *env) {
if ((ecx >> 28) & 1) { fb_printf("AVX поддерживается!\n"); }
return (module_info_t){
.name = (char *)"SIMD",
.message = (char *)"SIMD инструкции",
.type = 0,
.data_size = 0,
.data = (void *)0,
.err_code = 0,
.module_id = 0,
};
return (module_info_t){ .name = (char *)"SIMD",
.message = (char *)"SIMD инструкции",
.type = 0,
.data_size = 0,
.data = (void *)0,
.err_code = 0,
.module_id = 0,
.irq = 0,
.irq_handler = 0,
.get_func = 0 };
}