i8k module and x86_64 kernel

Manuel Arostegui Ramirez manuel at todo-linux.com
Thu Nov 9 14:06:03 UTC 2006


El Jueves, 9 de Noviembre de 2006 14:49, Marcel J.E. Mol escribió:
> On Thu, Nov 09, 2006 at 11:41:27AM +0100, Manuel Arostegui Ramirez wrote:
> > El Jueves, 9 de Noviembre de 2006 09:58, Marcel J.E. Mol escribió:
> > > After setting up my new inspiron laptop with FC6 x86_64 I noticed the
> > > i8k module is not present. It turned out the module is only present in
> > > the i686 kernel package.
> > >
> > > Is there a reason i8k is not in 64-bit kernels?
> >
> > I supposed that they are trying to port the module to 64 bit kernels,
> > maybe you could contact the developer and ask him if there's a plan to
> > include i8k on kernel for 64bits distros, I hope so.
> >
> > Furthermore I rembemer that i read (don't know where) that the problem
> > was (i don't know if it's still a problem) that the main developer of i8k
> > hasn't got a 64bit machine where he could be able to test his driver and
> > modifying it if that was necesary.
>
> I forced compilation of the driver for x86_64 and the basic part seems to
> work, but it oopses on the small bit of assembly code in the i8k_smm
> function of the driver:
>
> /*
>  * Call the System Management Mode BIOS. Code provided by Jonathan Buzzard.
>  */
> static int i8k_smm(struct smm_regs *regs)
> {
>         int rc;
>         int eax = regs->eax;
>
>         asm("pushl %%eax\n\t"
>             "movl 0(%%eax),%%edx\n\t"
>             "push %%edx\n\t"
>             "movl 4(%%eax),%%ebx\n\t"
>             "movl 8(%%eax),%%ecx\n\t"
>             "movl 12(%%eax),%%edx\n\t"
>             "movl 16(%%eax),%%esi\n\t"
>             "movl 20(%%eax),%%edi\n\t"
>             "popl %%eax\n\t"
>             "out %%al,$0xb2\n\t"
>             "out %%al,$0x84\n\t"
>             "xchgl %%eax,(%%esp)\n\t"
>             "movl %%ebx,4(%%eax)\n\t"
>             "movl %%ecx,8(%%eax)\n\t"
>             "movl %%edx,12(%%eax)\n\t"
>             "movl %%esi,16(%%eax)\n\t"
>             "movl %%edi,20(%%eax)\n\t"
>             "popl %%edx\n\t"
>             "movl %%edx,0(%%eax)\n\t"
>             "lahf\n\t"
>             "shrl $8,%%eax\n\t"
>             "andl $1,%%eax\n":"=a"(rc)
>
>             :    "a"(regs)
>             :    "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
>
>         if (rc != 0 || (regs->eax & 0xffff) == 0xffff || regs->eax == eax)
>                 return -EINVAL;
>
>         return 0;
> }
>
> I don't now much of assembly but it seems is playing with the stack and
> asks an ioport for some info. I can imagine this needs tweaking to work on
> 64-bit architecture. I guess we have to wait till someone has a bright idea
> to solve this...
>

As I said on my previus post, maybe the developer is already working on it, 
you should ask him if you're really interested in solved your problem or just 
helps to develop a i8k module for 64 bits Kernels :-)
-- 
Manuel Arostegui Ramirez.

Electronic Mail is not secure, may not be read every day, and should not
be used for urgent or sensitive issues.




More information about the users mailing list