Example #1
0
static void do_service(config_t *cpe, config_t *config, struct rs_config *rs_config)
{
	struct rs_start *rs_start = &rs_config->rs_start;
	config_t *cp;

	/* At this point we expect one sublist that contains the varios
	 * resource allocations
	 */
	if (!(cpe->flags & CFG_SUBLIST))
	{
		fatal("do_service: expected list at %s:%d",
			cpe->file, cpe->line);
	}
	if (cpe->next != NULL)
	{
		cpe= cpe->next;
		fatal("do_service: expected end of list at %s:%d",
			cpe->file, cpe->line);
	}
	cpe= cpe->list;

	/* Process the list */
	for (cp= cpe; cp; cp= cp->next)
	{
		if (!(cp->flags & CFG_SUBLIST))
		{
			fatal("do_service: expected list at %s:%d",
				cp->file, cp->line);
		}
		cpe= cp->list;
		if ((cpe->flags & CFG_STRING) || (cpe->flags & CFG_SUBLIST))
		{
			fatal("do_service: expected word at %s:%d",
				cpe->file, cpe->line);
		}

		if (strcmp(cpe->word, KW_CLASS) == 0)
		{
			do_class(cpe->next, config, rs_config);
			continue;
		}
		if (strcmp(cpe->word, KW_UID) == 0)
		{
			do_uid(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_SIGMGR) == 0)
		{
			do_sigmgr(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_TYPE) == 0)
		{
			do_type(cpe->next, rs_config);
			continue;
		}
		if (strcmp(cpe->word, KW_DESCR) == 0)
		{
			do_descr(cpe->next, rs_config);
			continue;
		}
		if (strcmp(cpe->word, KW_SCHEDULER) == 0)
		{
			do_scheduler(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_PRIORITY) == 0)
		{
			do_priority(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_QUANTUM) == 0)
		{
			do_quantum(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_CPU) == 0)
		{
			do_cpu(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_IRQ) == 0)
		{
			do_irq(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_IO) == 0)
		{
			do_io(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_PCI) == 0)
		{
			do_pci(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_SYSTEM) == 0)
		{
			do_system(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_IPC) == 0)
		{
			do_ipc(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_VM) == 0)
		{
			do_vm(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_CONTROL) == 0)
		{
			do_control(cpe->next, rs_start);
			continue;
		}
	}
}
Example #2
0
int do_diag(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
	char *orig_ethact, *orig_ipaddr, ca_ethact[20], ca_ipaddr[20];
	int i;

	switch (argc)
	{
	case 2:
		if (strncmp(argv[1],"cpu-bist", 8) == 0)
		{
			octeon_bist();
			return 0;
		}
		else if (strncmp(argv[1],"ddr", 3) == 0)
		{
			return do_mem_mtest(NULL, 0, 1, "mtest");

		}
		else if (strncmp(argv[1],"pci", 3) == 0)
		{
#define MAX_ADV_PCI_BUS 13
                        char *local_args[4], busno[4];
                        int pci_busno;

                        local_args[0] = "pci";
                        local_args[1] = busno;
			local_args[2] = "short";
                        local_args[3] = NULL;
                        for (pci_busno = 0; pci_busno < MAX_ADV_PCI_BUS; pci_busno++)
                        {
                        	sprintf (busno, "%x", pci_busno);
                                do_pci(NULL, 0, 3, local_args);
                        }
			return 0;
		}
		else if (strncmp(argv[1],"mmc-sensor", 10) == 0)
		{
#define MON_3VSB_ID	"0x02"
#define MON_12V_ID	"0x03"
#define VDD_3V3_ID	"0x06"
#define TMP421_CORE_ID	"0x0B"
#define TMP275_BOARD_ID	"0x0C"

#define MON_3VSB(x)	(0.016*x)
#define MON_12V(x)	((68*x-5)*0.001)
#define VDD_3V3(x)	(0.016*x)
#define TMP421_CORE(x)	(x)
#define TMP275_BOARD(x)	(1.01*x+0.14)

#define COMMAND_SUCCESS_OFFSET  6
#define VALUE_OFFSET		(COMMAND_SUCCESS_OFFSET + 1)
#define VALID_READ_OFFSET	(COMMAND_SUCCESS_OFFSET + 2)
#define INVALID_READ_MASK	0x20
			const uchar *ret_val;
			char *argv[]={"ipmi", "raw", "0x04", "0x2D", "0x00"};
			char *ids[]={MON_3VSB_ID, MON_12V_ID, VDD_3V3_ID, TMP421_CORE_ID, TMP275_BOARD_ID};
			char *ids_name[]={"3.3V standby", "12V", "3.3V", "Core temperature", "Board temperature"};
			int total_ids, argc, i, tmp;
			float fRet;

			total_ids = sizeof(ids) / sizeof(ids[0]);
			argc      = sizeof(argv) / sizeof(argv[0]);

			for (i = 0; i < total_ids; i++)
			{
				sprintf(argv[argc-1], ids[i]);	// replace the sensor ID to read
				ret_val   = mmc_raw_command_access(argc, argv);

				if (ret_val[COMMAND_SUCCESS_OFFSET]) // 0 = success
				{
					printf("!FAIL IPMI Get %s return code 0x%02x\n", ids_name[i], ret_val[6]);
					continue;
				}

				if (ret_val[VALID_READ_OFFSET] & INVALID_READ_MASK) // bit 5: when set, this read is invalid
				{
					printf("%s: %s\n", ids_name[i], "Read failed!");
				}
				else
				{
					switch (i) {
					case 0:
						fRet = MON_3VSB(ret_val[VALUE_OFFSET]);
						break;
					case 1:
						fRet = MON_12V(ret_val[VALUE_OFFSET]);
						break;
					case 2:
						fRet = VDD_3V3(ret_val[VALUE_OFFSET]);
						break;
					case 3:
						fRet = TMP421_CORE(ret_val[VALUE_OFFSET]);
						break;
					case 4:
						fRet = TMP275_BOARD(ret_val[VALUE_OFFSET]);
						break;
					default:
						printf("unkown to calculate\n");
						break;
					}

					/* float to string, only 3 digits after '.'; Note: printf does not support float */
					{
						tmp = fRet;
						printf("%s: %d.", ids_name[i], tmp);
						fRet -= tmp;
						fRet *= 1000;
						tmp = fRet;
						printf("%d\n", tmp);
					}
				}
			}

			return 0;
		}
		else if (strncmp(argv[1],"reset-type", 10) == 0)
		{
			uint8_t cause;

			mmc_get_hw_reset_reason(&cause);
			printf("reset-type: ");
			switch (cause) {
			case 0x1:
				printf("hard reset");
				break;
			case 0x2:
				printf("soft reset");
				break;
			case 0x4:
				printf("watchdog reset");
				break;
			default:
				printf("unknown 0x%02x",cause);
				break;
			}
			printf("\n");

			return 0;
		}
		else if (strncmp(argv[1],"i2c", 3) == 0)
		{
                        char cmd[255], *subcmd[]={"speed", "dev", "probe"};

                        for (i = 0; i < sizeof(subcmd)/sizeof(subcmd[0]); i++)
                        {
				sprintf(cmd, "i2c %s", subcmd[i]);
                                run_command(cmd, 0);
                        }

			return 0;
		}
		else if (strncmp(argv[1],"xaui", 4) == 0)
		{
#define XAUI_INTERFACES	2
#define TEST_IP		"192.168.4.1"
			int default_port[] = {2624, 3136};

			/* save original env vars */
			orig_ethact = getenv("ethact");
			sprintf(ca_ethact, orig_ethact); // save to safety place
			orig_ipaddr = getenv("ipaddr");
			sprintf(ca_ipaddr, orig_ipaddr);

			/* start to test */
			setenv("ipaddr", TEST_IP);
			NetPingIP = string_to_ip(TEST_IP); // ping our self
			for (i = 0; i < XAUI_INTERFACES; i++)
			{
				char *new_ethact = "octeth ";

				sprintf(new_ethact, "octeth%d", i);
				setenv("ethact", new_ethact);

				/* enabling internal loopback */
				if (cvmx_helper_configure_loopback(default_port[i], 1, 0))
				{
					printf("enable %s loopback failed!\n", new_ethact);
					continue;
				}

				if (NetLoop(PING) < 0)
				{
					printf("%s loopback transmission failed!\n", new_ethact);
				}
				else
				{
					printf("%s loopback transmission test pass.\n", new_ethact);
				}

				/* disable loopback */
				if (cvmx_helper_configure_loopback(default_port[i], 0, 0))
					printf("disable %s loopback failed!\n", new_ethact);
			}

			/* restore env vars */
			setenv("ethact", ca_ethact);
			setenv("ipaddr", orig_ipaddr ? ca_ipaddr : orig_ipaddr);

			return 0;
		}
		else if (strncmp(argv[1],"mii", 3) == 0)
		{
			int rc = 0;

			/* save original env vars */
			orig_ethact = getenv("ethact");
			sprintf(ca_ethact, orig_ethact);
			orig_ipaddr = getenv("ipaddr");
			sprintf(ca_ipaddr, orig_ipaddr);

			/* enabling internal loopback */
			run_command("mii write 0 0 6100", 0);

			/* start to test */
			setenv("ethact", "octmgmt0");
			setenv("ipaddr", TEST_IP);
			NetPingIP = string_to_ip(TEST_IP); // ping our self

			if (NetLoop(PING) < 0)
			{
				if (NetLoop(PING) < 0) // give another chance, the octmgmt0 may failed on first try
					rc = -1;
			}

			if (rc < 0)
			{
				printf("octmgmt0 loopback transmission failed!\n");
			}
			else
			{
				printf("octmgmt0 loopback transmission test pass.\n");
			}

			/* disable loopback */
			run_command("mii write 0 0 2100", 0);

			/* restore env vars */
			setenv("ethact", ca_ethact);
			setenv("ipaddr", orig_ipaddr ? ca_ipaddr : orig_ipaddr);

			return 0;
		}
		break;
	}
	return cmd_usage(cmdtp);
}