1/**
2 * \file
3 * \brief Address-space support for Mackerel CPUID device definitions
4 */
5
6/*
7 * Copyright (c) 2007, 2008, 2010, ETH Zurich.
8 * All rights reserved.
9 *
10 * This file is distributed under the terms in the attached LICENSE file.
11 * If you do not find this file, copies can be found by writing to:
12 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
13 */
14
15#ifndef CPUID_SPACES_H
16#define CPUID_SPACES_H
17
18#define CPUID(offset, reg) \
19    __asm volatile("cpuid" : reg : "a" (offset))
20
21static inline uint32_t cpuid_eax_read_32(cpuid_t *dev, size_t offset)
22{
23    uint32_t eax;
24    CPUID(offset, "=a" (eax));
25    return eax;
26}
27
28static inline uint32_t cpuid_ebx_read_32(cpuid_t *dev, size_t offset)
29{
30    uint32_t ebx;
31    CPUID(offset, "=b" (ebx));
32    return ebx;
33}
34
35static inline uint32_t cpuid_ecx_read_32(cpuid_t *dev, size_t offset)
36{
37    uint32_t ecx;
38    CPUID(offset, "=c" (ecx));
39    return ecx;
40}
41
42static inline uint32_t cpuid_edx_read_32(cpuid_t *dev, size_t offset)
43{
44    uint32_t edx;
45    CPUID(offset, "=d" (edx));
46    return edx;
47}
48
49static inline uint32_t cpuid_dcpa_read_32(cpuid_t *dev, size_t offset)
50{
51    // Unimplemented
52    return 0;
53}
54
55static inline uint32_t cpuid_dcpb_read_32(cpuid_t *dev, size_t offset)
56{
57    return 0;
58}
59
60static inline uint32_t cpuid_dcpc_read_32(cpuid_t *dev, size_t offset)
61{
62    return 0;
63}
64
65// Writing is not possible, but has to be here anyway
66
67static inline void cpuid_eax_write_32(cpuid_t *dev, size_t offset,
68                                      uint32_t value)
69{
70}
71
72static inline void cpuid_ebx_write_32(cpuid_t *dev, size_t offset,
73                                      uint32_t value)
74{
75}
76
77static inline void cpuid_ecx_write_32(cpuid_t *dev, size_t offset,
78                                      uint32_t value)
79{
80}
81
82static inline void cpuid_edx_write_32(cpuid_t *dev, size_t offset,
83                                      uint32_t value)
84{
85}
86
87static inline void cpuid_dcpa_write_32(cpuid_t *dev, size_t offset,
88                                       uint32_t value)
89{
90}
91
92static inline void cpuid_dcpb_write_32(cpuid_t *dev, size_t offset,
93                                       uint32_t value)
94{
95}
96
97static inline void cpuid_dcpc_write_32(cpuid_t *dev, size_t offset,
98                                       uint32_t value)
99{
100}
101
102#undef CPUID
103
104#endif // CPUID_SPACES_H
105