Subversion Repositories HelenOS

Rev

Rev 3022 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3022 Rev 4055
Line 33... Line 33...
33
 */
33
 */
34
 
34
 
35
#ifndef KERN_sparc64_CPU_H_
35
#ifndef KERN_sparc64_CPU_H_
36
#define KERN_sparc64_CPU_H_
36
#define KERN_sparc64_CPU_H_
37
 
37
 
38
#include <arch/types.h>
-
 
39
#include <arch/register.h>
-
 
40
#include <arch/asm.h>
-
 
41
 
-
 
42
#ifdef CONFIG_SMP
-
 
43
#include <arch/mm/cache.h>
-
 
44
#endif
-
 
45
 
-
 
46
#define MANUF_FUJITSU       0x04
38
#define MANUF_FUJITSU       0x04
47
#define MANUF_ULTRASPARC    0x17    /**< UltraSPARC I, UltraSPARC II */
39
#define MANUF_ULTRASPARC    0x17    /**< UltraSPARC I, UltraSPARC II */
48
#define MANUF_SUN       0x3e
40
#define MANUF_SUN       0x3e
49
 
41
 
50
#define IMPL_ULTRASPARCI    0x10
42
#define IMPL_ULTRASPARCI    0x10
51
#define IMPL_ULTRASPARCII   0x11
43
#define IMPL_ULTRASPARCII   0x11
52
#define IMPL_ULTRASPARCII_I 0x12
44
#define IMPL_ULTRASPARCII_I 0x12
53
#define IMPL_ULTRASPARCII_E 0x13
45
#define IMPL_ULTRASPARCII_E 0x13
54
#define IMPL_ULTRASPARCIII  0x15
46
#define IMPL_ULTRASPARCIII  0x14
-
 
47
#define IMPL_ULTRASPARCIII_PLUS 0x15
-
 
48
#define IMPL_ULTRASPARCIII_I    0x16
-
 
49
#define IMPL_ULTRASPARCIV   0x18
55
#define IMPL_ULTRASPARCIV_PLUS  0x19
50
#define IMPL_ULTRASPARCIV_PLUS  0x19
56
 
51
 
57
#define IMPL_SPARC64V       0x5
52
#define IMPL_SPARC64V       0x5
58
 
53
 
-
 
54
#ifndef __ASM__
-
 
55
 
-
 
56
#include <arch/types.h>
-
 
57
#include <typedefs.h>
-
 
58
#include <arch/register.h>
-
 
59
#include <arch/regdef.h>
-
 
60
#include <arch/asm.h>
-
 
61
 
-
 
62
#ifdef CONFIG_SMP
-
 
63
#include <arch/mm/cache.h>
-
 
64
#endif
-
 
65
 
59
typedef struct {
66
typedef struct {
60
    uint32_t mid;           /**< Processor ID as read from
67
    uint32_t mid;           /**< Processor ID as read from
61
                         UPA_CONFIG. */
68
                         UPA_CONFIG/FIREPLANE_CONFIG. */
62
    ver_reg_t ver;
69
    ver_reg_t ver;
63
    uint32_t clock_frequency;   /**< Processor frequency in Hz. */
70
    uint32_t clock_frequency;   /**< Processor frequency in Hz. */
64
    uint64_t next_tick_cmpr;    /**< Next clock interrupt should be
71
    uint64_t next_tick_cmpr;    /**< Next clock interrupt should be
65
                         generated when the TICK register
72
                         generated when the TICK register
66
                         matches this value. */
73
                         matches this value. */
67
} cpu_arch_t;
74
} cpu_arch_t;
-
 
75
 
-
 
76
 
-
 
77
/**
-
 
78
 * Reads the module ID (agent ID/CPUID) of the current CPU.
-
 
79
 */
-
 
80
static inline uint32_t read_mid(void)
68
   
81
{
-
 
82
    uint64_t icbus_config = asi_u64_read(ASI_ICBUS_CONFIG, 0);
-
 
83
    icbus_config = icbus_config >> ICBUS_CONFIG_MID_SHIFT;
-
 
84
#if defined (US)
-
 
85
    return icbus_config & 0x1f;
-
 
86
#elif defined (US3)
-
 
87
    if (((ver_reg_t) ver_read()).impl == IMPL_ULTRASPARCIII_I)
-
 
88
        return icbus_config & 0x1f;
-
 
89
    else
-
 
90
        return icbus_config & 0x3ff;
-
 
91
#endif
-
 
92
}
-
 
93
 
-
 
94
#endif  
-
 
95
 
69
#endif
96
#endif
70
 
97
 
71
/** @}
98
/** @}
72
 */
99
 */