Subversion Repositories HelenOS

Rev

Rev 3479 | Rev 3743 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3479 Rev 3664
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 <typedefs.h>
-
 
40
#include <arch/register.h>
-
 
41
#include <arch/asm.h>
-
 
42
 
-
 
43
#ifdef CONFIG_SMP
-
 
44
#include <arch/mm/cache.h>
-
 
45
#endif
-
 
46
 
-
 
47
#define MANUF_FUJITSU       0x04
38
#define MANUF_FUJITSU       0x04
48
#define MANUF_ULTRASPARC    0x17    /**< UltraSPARC I, UltraSPARC II */
39
#define MANUF_ULTRASPARC    0x17    /**< UltraSPARC I, UltraSPARC II */
49
#define MANUF_SUN       0x3e
40
#define MANUF_SUN       0x3e
50
 
41
 
51
#define IMPL_ULTRASPARCI    0x10
42
#define IMPL_ULTRASPARCI    0x10
Line 58... Line 49...
58
#define IMPL_ULTRASPARCIV   0x18
49
#define IMPL_ULTRASPARCIV   0x18
59
#define IMPL_ULTRASPARCIV_PLUS  0x19
50
#define IMPL_ULTRASPARCIV_PLUS  0x19
60
 
51
 
61
#define IMPL_SPARC64V       0x5
52
#define IMPL_SPARC64V       0x5
62
 
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
 
63
typedef struct {
66
typedef struct {
64
    uint32_t mid;           /**< Processor ID as read from
67
    uint32_t mid;           /**< Processor ID as read from
65
                         UPA_CONFIG/FIREPLANE_CONFIG. */
68
                         UPA_CONFIG/FIREPLANE_CONFIG. */
66
    ver_reg_t ver;
69
    ver_reg_t ver;
67
    uint32_t clock_frequency;   /**< Processor frequency in Hz. */
70
    uint32_t clock_frequency;   /**< Processor frequency in Hz. */
68
    uint64_t next_tick_cmpr;    /**< Next clock interrupt should be
71
    uint64_t next_tick_cmpr;    /**< Next clock interrupt should be
69
                         generated when the TICK register
72
                         generated when the TICK register
70
                         matches this value. */
73
                         matches this value. */
71
} 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)
72
   
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
 
73
#endif
96
#endif
74
 
97
 
75
/** @}
98
/** @}
76
 */
99
 */