usr/src/grub/grub-0.97/stage2/smp-imps.h
author William Kucharski <William.Kucharski@Sun.COM>
Fri, 07 Nov 2008 21:36:41 -0700
changeset 8044 b3af80bbf173
parent 0 usr/src/grub/grub-0.95/stage2/smp-imps.h@68f95e015346
permissions -rw-r--r--
6731552 GRUB should have the ability to overlay a logo on the graphical splash screen 6762035 GRUB needs to understand new ext3 256 Byte inodes 6762243 GRUB should be updated to version 0.97
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 *  <Insert copyright here : it must be BSD-like so everyone can use it>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 *  Author:  Erich Boleyn  <[email protected]>   http://www.uruk.org/~erich/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
 *  Header file implementing Intel MultiProcessor Specification (MPS)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *  version 1.1 and 1.4 SMP hardware control for Intel Architecture CPUs,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 *  with hooks for running correctly on a standard PC without the hardware.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 *  This file was created from information in the Intel MPS version 1.4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 *  document, order number 242016-004, which can be ordered from the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *  Intel literature center.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
#ifndef _SMP_IMPS_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
#define _SMP_IMPS_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
/* make sure "apic.h" is included */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
#ifndef _APIC_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
#error		Must include "apic.h" before "smp-imps.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
#endif /* !_APIC_H */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 *  Defines used.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
#ifdef IMPS_DEBUG
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
#define IMPS_DEBUG_PRINT(x)  KERNEL_PRINT(x)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#else /* !IMPS_DEBUG */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
#define IMPS_DEBUG_PRINT(x)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#endif /* !IMPS_DEBUG */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#define IMPS_MAX_CPUS			APIC_BROADCAST_ID
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
 *  Defines representing limitations on values usable in different
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
 *  situations.  This mostly depends on whether the APICs are old
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
 *  (82489DX) or new (SIO or Pentium/Pentium Pro integrated APICs).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
 *  NOTE:  It appears that the APICs must either be all old or all new,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
 *    or broadcasts won't work right.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
 *  NOTE #2:  Given that, the maximum ID which can be sent to predictably
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
 *    is 14 for new APICs and 254 for old APICs.  So, this all implies that
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
 *    a maximum of 15 processors is supported with the new APICs, and a
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
 *    maximum of 255 processors with the old APICs.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
#define IMPS_APIC_ID(x)							\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
  ( imps_any_new_apics ? APIC_NEW_ID(x) : APIC_OLD_ID(x) )
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
 *  This is the value that must be in the "sig" member of the MP
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
 *  Floating Pointer Structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
#define IMPS_FPS_SIGNATURE	('_' | ('M'<<8) | ('P'<<16) | ('_'<<24))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
#define IMPS_FPS_IMCRP_BIT	0x80
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
#define IMPS_FPS_DEFAULT_MAX	7
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
 *  This is the value that must be in the "sig" member of the MP
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
 *  Configuration Table Header.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
#define IMPS_CTH_SIGNATURE	('P' | ('C'<<8) | ('M'<<16) | ('P'<<24))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
 *  These are the "type" values for Base MP Configuration Table entries.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
#define		IMPS_FLAG_ENABLED	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
#define IMPS_BCT_PROCESSOR		0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
#define		IMPS_CPUFLAG_BOOT	2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
#define IMPS_BCT_BUS			1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
#define IMPS_BCT_IOAPIC			2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
#define IMPS_BCT_IO_INTERRUPT		3
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
#define IMPS_BCT_LOCAL_INTERRUPT	4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
#define		IMPS_INT_INT		0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
#define		IMPS_INT_NMI		1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
#define		IMPS_INT_SMI		2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
#define		IMPS_INT_EXTINT		3
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
 *  Typedefs and data item definitions done here.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
typedef struct imps_fps imps_fps;	/* MP floating pointer structure */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
typedef struct imps_cth imps_cth;	/* MP configuration table header */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
typedef struct imps_processor imps_processor;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
typedef struct imps_bus imps_bus;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
typedef struct imps_ioapic imps_ioapic;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
typedef struct imps_interrupt imps_interrupt;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
 *  Data structures defined here
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
 *  MP Floating Pointer Structure (fps)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
 *  Look at page 4-3 of the MP spec for the starting definitions of
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
 *  this structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
struct imps_fps
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
  {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
    unsigned sig;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
    imps_cth *cth_ptr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
    unsigned char length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
    unsigned char spec_rev;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
    unsigned char checksum;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
    unsigned char feature_info[5];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
  };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
 *  MP Configuration Table Header  (cth)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
 *  Look at page 4-5 of the MP spec for the starting definitions of
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
 *  this structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
struct imps_cth
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
  {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
    unsigned sig;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
    unsigned short base_length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
    unsigned char spec_rev;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
    unsigned char checksum;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
    char oem_id[8];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
    char prod_id[12];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
    unsigned oem_table_ptr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
    unsigned short oem_table_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
    unsigned short entry_count;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
    unsigned lapic_addr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
    unsigned short extended_length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
    unsigned char extended_checksum;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
    char reserved[1];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
  };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
 *  Base MP Configuration Table Types.  They are sorted according to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
 *  type (i.e. all of type 0 come first, etc.).  Look on page 4-6 for
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
 *  the start of the descriptions.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
struct imps_processor
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
  {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
    unsigned char type;		/* must be 0 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
    unsigned char apic_id;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
    unsigned char apic_ver;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
    unsigned char flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
    unsigned signature;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
    unsigned features;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
    char reserved[8];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
  };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
struct imps_bus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
  {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
    unsigned char type;		/* must be 1 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
    unsigned char id;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
    char bus_type[6];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
  };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
struct imps_ioapic
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
  {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
    unsigned char type;		/* must be 2 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
    unsigned char id;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
    unsigned char ver;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
    unsigned char flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
    unsigned addr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
  };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
struct imps_interrupt
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
  {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
    unsigned char type;		/* must be 3 or 4 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
    unsigned char int_type;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
    unsigned short flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
    unsigned char source_bus_id;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
    unsigned char source_bus_irq;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
    unsigned char dest_apic_id;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
    unsigned char dest_apic_intin;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
  };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
 *  Exported globals here.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
 *  This is the primary function for probing for Intel MPS 1.1/1.4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
 *  compatible hardware and BIOS information.  While probing the CPUs
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
 *  information returned from the BIOS, this also starts up each CPU
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
 *  and gets it ready for use.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
 *  Call this during the early stages of OS startup, before memory can
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
 *  be messed up.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
 *  Returns 1 if IMPS information was found and is valid, else 0.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
int imps_probe (void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
 *  Defines that use variables
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
#define IMPS_LAPIC_READ(x)  (*((volatile unsigned *) (imps_lapic_addr+(x))))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
#define IMPS_LAPIC_WRITE(x, y)   \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
   (*((volatile unsigned *) (imps_lapic_addr+(x))) = (y))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
#endif /* !_SMP_IMPS_H */