|
@@ -11,111 +11,13 @@
|
|
#include <linux/init.h>
|
|
#include <linux/init.h>
|
|
#include <linux/delay.h>
|
|
#include <linux/delay.h>
|
|
#include <asm/ebcdic.h>
|
|
#include <asm/ebcdic.h>
|
|
|
|
+#include <asm/sysinfo.h>
|
|
|
|
|
|
/* Sigh, math-emu. Don't ask. */
|
|
/* Sigh, math-emu. Don't ask. */
|
|
#include <asm/sfp-util.h>
|
|
#include <asm/sfp-util.h>
|
|
#include <math-emu/soft-fp.h>
|
|
#include <math-emu/soft-fp.h>
|
|
#include <math-emu/single.h>
|
|
#include <math-emu/single.h>
|
|
|
|
|
|
-struct sysinfo_1_1_1 {
|
|
|
|
- char reserved_0[32];
|
|
|
|
- char manufacturer[16];
|
|
|
|
- char type[4];
|
|
|
|
- char reserved_1[12];
|
|
|
|
- char model_capacity[16];
|
|
|
|
- char sequence[16];
|
|
|
|
- char plant[4];
|
|
|
|
- char model[16];
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-struct sysinfo_1_2_1 {
|
|
|
|
- char reserved_0[80];
|
|
|
|
- char sequence[16];
|
|
|
|
- char plant[4];
|
|
|
|
- char reserved_1[2];
|
|
|
|
- unsigned short cpu_address;
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-struct sysinfo_1_2_2 {
|
|
|
|
- char format;
|
|
|
|
- char reserved_0[1];
|
|
|
|
- unsigned short acc_offset;
|
|
|
|
- char reserved_1[24];
|
|
|
|
- unsigned int secondary_capability;
|
|
|
|
- unsigned int capability;
|
|
|
|
- unsigned short cpus_total;
|
|
|
|
- unsigned short cpus_configured;
|
|
|
|
- unsigned short cpus_standby;
|
|
|
|
- unsigned short cpus_reserved;
|
|
|
|
- unsigned short adjustment[0];
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-struct sysinfo_1_2_2_extension {
|
|
|
|
- unsigned int alt_capability;
|
|
|
|
- unsigned short alt_adjustment[0];
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-struct sysinfo_2_2_1 {
|
|
|
|
- char reserved_0[80];
|
|
|
|
- char sequence[16];
|
|
|
|
- char plant[4];
|
|
|
|
- unsigned short cpu_id;
|
|
|
|
- unsigned short cpu_address;
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-struct sysinfo_2_2_2 {
|
|
|
|
- char reserved_0[32];
|
|
|
|
- unsigned short lpar_number;
|
|
|
|
- char reserved_1;
|
|
|
|
- unsigned char characteristics;
|
|
|
|
- unsigned short cpus_total;
|
|
|
|
- unsigned short cpus_configured;
|
|
|
|
- unsigned short cpus_standby;
|
|
|
|
- unsigned short cpus_reserved;
|
|
|
|
- char name[8];
|
|
|
|
- unsigned int caf;
|
|
|
|
- char reserved_2[16];
|
|
|
|
- unsigned short cpus_dedicated;
|
|
|
|
- unsigned short cpus_shared;
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-#define LPAR_CHAR_DEDICATED (1 << 7)
|
|
|
|
-#define LPAR_CHAR_SHARED (1 << 6)
|
|
|
|
-#define LPAR_CHAR_LIMITED (1 << 5)
|
|
|
|
-
|
|
|
|
-struct sysinfo_3_2_2 {
|
|
|
|
- char reserved_0[31];
|
|
|
|
- unsigned char count;
|
|
|
|
- struct {
|
|
|
|
- char reserved_0[4];
|
|
|
|
- unsigned short cpus_total;
|
|
|
|
- unsigned short cpus_configured;
|
|
|
|
- unsigned short cpus_standby;
|
|
|
|
- unsigned short cpus_reserved;
|
|
|
|
- char name[8];
|
|
|
|
- unsigned int caf;
|
|
|
|
- char cpi[16];
|
|
|
|
- char reserved_1[24];
|
|
|
|
-
|
|
|
|
- } vm[8];
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-static inline int stsi(void *sysinfo, int fc, int sel1, int sel2)
|
|
|
|
-{
|
|
|
|
- register int r0 asm("0") = (fc << 28) | sel1;
|
|
|
|
- register int r1 asm("1") = sel2;
|
|
|
|
-
|
|
|
|
- asm volatile(
|
|
|
|
- " stsi 0(%2)\n"
|
|
|
|
- "0: jz 2f\n"
|
|
|
|
- "1: lhi %0,%3\n"
|
|
|
|
- "2:\n"
|
|
|
|
- EX_TABLE(0b,1b)
|
|
|
|
- : "+d" (r0) : "d" (r1), "a" (sysinfo), "K" (-ENOSYS)
|
|
|
|
- : "cc", "memory" );
|
|
|
|
- return r0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static inline int stsi_0(void)
|
|
static inline int stsi_0(void)
|
|
{
|
|
{
|
|
int rc = stsi (NULL, 0, 0, 0);
|
|
int rc = stsi (NULL, 0, 0, 0);
|