| 
									
										
										
										
											2008-04-17 07:46:09 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * definition for store system information stsi | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright IBM Corp. 2001,2008 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU General Public License (version 2 only) | 
					
						
							|  |  |  |  * as published by the Free Software Foundation. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *    Author(s): Ulrich Weigand <weigand@de.ibm.com> | 
					
						
							|  |  |  |  *		 Christian Borntraeger <borntraeger@de.ibm.com> | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-30 13:38:35 +02:00
										 |  |  | #ifndef __ASM_S390_SYSINFO_H
 | 
					
						
							|  |  |  | #define __ASM_S390_SYSINFO_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-17 07:46:09 +02:00
										 |  |  | 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]; | 
					
						
							| 
									
										
										
										
											2008-04-17 07:46:10 +02:00
										 |  |  | 	char model_perm_cap[16]; | 
					
						
							|  |  |  | 	char model_temp_cap[16]; | 
					
						
							|  |  |  | 	char model_cap_rating[4]; | 
					
						
							|  |  |  | 	char model_perm_cap_rating[4]; | 
					
						
							|  |  |  | 	char model_temp_cap_rating[4]; | 
					
						
							| 
									
										
										
										
											2008-04-17 07:46:09 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2008-04-30 13:38:35 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /* __ASM_S390_SYSINFO_H */
 |