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