2005-04-17 02:20:36 +04:00
/* ----------------------------------------------------------------------- *
*
* Copyright 2002 - 2004 H . Peter Anvin - All Rights Reserved
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , Inc . , 53 Temple Place Ste 330 ,
* Bostom MA 02111 - 1307 , USA ; either version 2 of the License , or
* ( at your option ) any later version ; incorporated herein by reference .
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*
* raid6x86 . h
*
* Definitions common to x86 and x86 - 64 RAID - 6 code only
*/
# ifndef LINUX_RAID_RAID6X86_H
# define LINUX_RAID_RAID6X86_H
2007-10-29 07:31:16 +03:00
# if (defined(__i386__) || defined(__x86_64__)) && !defined(__arch_um__)
2005-04-17 02:20:36 +04:00
# ifdef __KERNEL__ /* Real code */
2007-03-01 07:11:25 +03:00
# include <asm/i387.h>
2005-04-17 02:20:36 +04:00
# else /* Dummy code for user space testing */
2007-03-01 07:11:25 +03:00
static inline void kernel_fpu_begin ( void )
2005-04-17 02:20:36 +04:00
{
}
2007-03-01 07:11:25 +03:00
static inline void kernel_fpu_end ( void )
2005-04-17 02:20:36 +04:00
{
}
2007-03-01 07:11:25 +03:00
# define X86_FEATURE_MMX (0*32+23) /* Multimedia Extensions */
# define X86_FEATURE_FXSR (0*32+24) / * FXSAVE and FXRSTOR instructions
* ( fast save and restore ) */
# define X86_FEATURE_XMM (0*32+25) /* Streaming SIMD Extensions */
# define X86_FEATURE_XMM2 (0*32+26) /* Streaming SIMD Extensions-2 */
# define X86_FEATURE_MMXEXT (1*32+22) /* AMD MMX extensions */
2005-04-17 02:20:36 +04:00
2007-03-01 07:11:25 +03:00
/* Should work well enough on modern CPUs for testing */
static inline int boot_cpu_has ( int flag )
2005-04-17 02:20:36 +04:00
{
2007-03-01 07:11:25 +03:00
u32 eax = ( flag > > 5 ) ? 0x80000001 : 1 ;
u32 edx ;
2005-04-17 02:20:36 +04:00
2007-03-01 07:11:25 +03:00
asm volatile ( " cpuid "
: " +a " ( eax ) , " =d " ( edx )
: : " ecx " , " ebx " ) ;
2005-04-17 02:20:36 +04:00
2007-03-01 07:11:25 +03:00
return ( edx > > ( flag & 31 ) ) & 1 ;
2005-04-17 02:20:36 +04:00
}
# endif /* ndef __KERNEL__ */
# endif
# endif