Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
lib
raid6
x86.h
Go to the documentation of this file.
1
/* ----------------------------------------------------------------------- *
2
*
3
* Copyright 2002-2004 H. Peter Anvin - All Rights Reserved
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, Inc., 53 Temple Place Ste 330,
8
* Boston MA 02111-1307, USA; either version 2 of the License, or
9
* (at your option) any later version; incorporated herein by reference.
10
*
11
* ----------------------------------------------------------------------- */
12
13
/*
14
* raid6/x86.h
15
*
16
* Definitions common to x86 and x86-64 RAID-6 code only
17
*/
18
19
#ifndef LINUX_RAID_RAID6X86_H
20
#define LINUX_RAID_RAID6X86_H
21
22
#if (defined(__i386__) || defined(__x86_64__)) && !defined(__arch_um__)
23
24
#ifdef __KERNEL__
/* Real code */
25
26
#include <
asm/i387.h
>
27
28
#else
/* Dummy code for user space testing */
29
30
static
inline
void
kernel_fpu_begin(
void
)
31
{
32
}
33
34
static
inline
void
kernel_fpu_end
(
void
)
35
{
36
}
37
38
#define __aligned(x) __attribute__((aligned(x)))
39
40
#define X86_FEATURE_MMX (0*32+23)
/* Multimedia Extensions */
41
#define X86_FEATURE_FXSR (0*32+24)
/* FXSAVE and FXRSTOR instructions
42
* (fast save and restore) */
43
#define X86_FEATURE_XMM (0*32+25)
/* Streaming SIMD Extensions */
44
#define X86_FEATURE_XMM2 (0*32+26)
/* Streaming SIMD Extensions-2 */
45
#define X86_FEATURE_XMM3 (4*32+ 0)
/* "pni" SSE-3 */
46
#define X86_FEATURE_SSSE3 (4*32+ 9)
/* Supplemental SSE-3 */
47
#define X86_FEATURE_AVX (4*32+28)
/* Advanced Vector Extensions */
48
#define X86_FEATURE_MMXEXT (1*32+22)
/* AMD MMX extensions */
49
50
/* Should work well enough on modern CPUs for testing */
51
static
inline
int
boot_cpu_has(
int
flag
)
52
{
53
u32
eax = (flag & 0x20) ? 0x80000001 : 1;
54
u32
ecx
, edx;
55
56
asm
volatile
(
"cpuid"
57
:
"+a"
(eax),
"=d"
(edx),
"=c"
(
ecx
)
58
: :
"ebx"
);
59
60
return
((flag & 0x80 ? ecx : edx) >> (flag & 31)) & 1;
61
}
62
63
#endif
/* ndef __KERNEL__ */
64
65
#endif
66
#endif
Generated on Thu Jan 10 2013 13:21:21 for Linux Kernel by
1.8.2