mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 14:06:03 +00:00 
			
		
		
		
	 2fcc3db0cc
			
		
	
	
		2fcc3db0cc
		
	
	
	
	
		
			
			Maintenance patch: - Add missing __init calls - Do not zero initialize global variables - No need to typecast function call returns to void - Some formatting Signed-off-by: Jes Sorensen <jes@sgi.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
		
			
				
	
	
		
			108 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * This file is subject to the terms and conditions of the GNU General Public
 | |
|  * License.  See the file "COPYING" in the main directory of this archive
 | |
|  * for more details.
 | |
|  *
 | |
|  * Copyright (C) 1992 - 1997, 2000-2004 Silicon Graphics, Inc. All rights reserved.
 | |
|  */
 | |
| 
 | |
| #include <linux/types.h>
 | |
| #include <linux/ctype.h>
 | |
| #include <linux/string.h>
 | |
| #include <linux/kernel.h>
 | |
| #include <asm/sn/types.h>
 | |
| #include <asm/sn/module.h>
 | |
| #include <asm/sn/l1.h>
 | |
| 
 | |
| char brick_types[MAX_BRICK_TYPES + 1] = "cri.xdpn%#=vo^kjbf890123456789...";
 | |
| /*
 | |
|  * Format a module id for printing.
 | |
|  *
 | |
|  * There are three possible formats:
 | |
|  *
 | |
|  *   MODULE_FORMAT_BRIEF	is the brief 6-character format, including
 | |
|  *				the actual brick-type as recorded in the 
 | |
|  *				moduleid_t, eg. 002c15 for a C-brick, or
 | |
|  *				101#17 for a PX-brick.
 | |
|  *
 | |
|  *   MODULE_FORMAT_LONG		is the hwgraph format, eg. rack/002/bay/15
 | |
|  *				of rack/101/bay/17 (note that the brick
 | |
|  *				type does not appear in this format).
 | |
|  *
 | |
|  *   MODULE_FORMAT_LCD		is like MODULE_FORMAT_BRIEF, except that it
 | |
|  *				ensures that the module id provided appears
 | |
|  *				exactly as it would on the LCD display of
 | |
|  *				the corresponding brick, eg. still 002c15
 | |
|  *				for a C-brick, but 101p17 for a PX-brick.
 | |
|  *
 | |
|  * maule (9/13/04):  Removed top-level check for (fmt == MODULE_FORMAT_LCD)
 | |
|  * making MODULE_FORMAT_LCD equivalent to MODULE_FORMAT_BRIEF.  It was
 | |
|  * decided that all callers should assume the returned string should be what
 | |
|  * is displayed on the brick L1 LCD.
 | |
|  */
 | |
| void
 | |
| format_module_id(char *buffer, moduleid_t m, int fmt)
 | |
| {
 | |
| 	int rack, position;
 | |
| 	unsigned char brickchar;
 | |
| 
 | |
| 	rack = MODULE_GET_RACK(m);
 | |
| 	brickchar = MODULE_GET_BTCHAR(m);
 | |
| 
 | |
| 	/* Be sure we use the same brick type character as displayed
 | |
| 	 * on the brick's LCD
 | |
| 	 */
 | |
| 	switch (brickchar) 
 | |
| 	{
 | |
| 	case L1_BRICKTYPE_GA:
 | |
| 	case L1_BRICKTYPE_OPUS_TIO:
 | |
| 		brickchar = L1_BRICKTYPE_C;
 | |
| 		break;
 | |
| 
 | |
| 	case L1_BRICKTYPE_PX:
 | |
| 	case L1_BRICKTYPE_PE:
 | |
| 	case L1_BRICKTYPE_PA:
 | |
| 	case L1_BRICKTYPE_SA: /* we can move this to the "I's" later
 | |
| 			       * if that makes more sense
 | |
| 			       */
 | |
| 		brickchar = L1_BRICKTYPE_P;
 | |
| 		break;
 | |
| 
 | |
| 	case L1_BRICKTYPE_IX:
 | |
| 	case L1_BRICKTYPE_IA:
 | |
| 
 | |
| 		brickchar = L1_BRICKTYPE_I;
 | |
| 		break;
 | |
| 	}
 | |
| 
 | |
| 	position = MODULE_GET_BPOS(m);
 | |
| 
 | |
| 	if ((fmt == MODULE_FORMAT_BRIEF) || (fmt == MODULE_FORMAT_LCD)) {
 | |
| 		/* Brief module number format, eg. 002c15 */
 | |
| 
 | |
| 		/* Decompress the rack number */
 | |
| 		*buffer++ = '0' + RACK_GET_CLASS(rack);
 | |
| 		*buffer++ = '0' + RACK_GET_GROUP(rack);
 | |
| 		*buffer++ = '0' + RACK_GET_NUM(rack);
 | |
| 
 | |
| 		/* Add the brick type */
 | |
| 		*buffer++ = brickchar;
 | |
| 	}
 | |
| 	else if (fmt == MODULE_FORMAT_LONG) {
 | |
| 		/* Fuller hwgraph format, eg. rack/002/bay/15 */
 | |
| 
 | |
| 		strcpy(buffer, "rack" "/");  buffer += strlen(buffer);
 | |
| 
 | |
| 		*buffer++ = '0' + RACK_GET_CLASS(rack);
 | |
| 		*buffer++ = '0' + RACK_GET_GROUP(rack);
 | |
| 		*buffer++ = '0' + RACK_GET_NUM(rack);
 | |
| 
 | |
| 		strcpy(buffer, "/" "bay" "/");  buffer += strlen(buffer);
 | |
| 	}
 | |
| 
 | |
| 	/* Add the bay position, using at least two digits */
 | |
| 	if (position < 10)
 | |
| 		*buffer++ = '0';
 | |
| 	sprintf(buffer, "%d", position);
 | |
| }
 |