X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/28c176b668c841a3b7fb093faccf0efa39257603..refs/heads/nov/intr-tree:/lunaix-os/arch/x86/hal/rngx86.c diff --git a/lunaix-os/arch/x86/hal/rngx86.c b/lunaix-os/arch/x86/hal/rngx86.c index 0d48d44..2baf96c 100644 --- a/lunaix-os/arch/x86/hal/rngx86.c +++ b/lunaix-os/arch/x86/hal/rngx86.c @@ -8,22 +8,24 @@ rng_fill(void* data, size_t len) { #ifdef CONFIG_ARCH_X86_64 asm volatile("1:\n" + "subq $8, %1\n" "rdrand %%rax\n" - "movq %%rax, (%0)\n" + "movq %%rax, (%0, %1, 1)\n" "addq $8, %%rax\n" - "subq $8, %1\n" + "testq %1, %1\n" "jnz 1b" :: "r"((ptr_t)data), "r"((len & ~0x7)) : - "%eax"); + "rax"); #else asm volatile("1:\n" + "subl $4, %1\n" "rdrand %%eax\n" - "movl %%eax, (%0)\n" + "movl %%eax, (%0, %1, 1)\n" "addl $4, %%eax\n" - "subl $4, %1\n" + "testl %1, %1\n" "jnz 1b" :: "r"((ptr_t)data), @@ -54,7 +56,7 @@ __rand_rd(struct device* dev, void* buf, size_t offset, size_t len) } int -pdev_randdev_init(struct device_def* devdef) +pdev_randdev_create(struct device_def* devdef, morph_t* obj) { // FIXME add check on cpuid for presence of rdrand struct device* devrand = device_allocseq(NULL, NULL); @@ -67,7 +69,8 @@ pdev_randdev_init(struct device_def* devdef) } static struct device_def devrandx86_def = { - .name = "x86 On-Chip RNG", - .class = DEVCLASS(DEVIF_SOC, DEVFN_CHAR, DEV_RNG), - .init = pdev_randdev_init}; + def_device_class(INTEL, CHAR, RNG), + def_device_name("x86 On-Chip RNG"), + def_on_create(pdev_randdev_create) +}; EXPORT_DEVICE(randdev, &devrandx86_def, load_onboot); \ No newline at end of file