- added fru control

- added amcportstate set
- added clock commands
- improved led command support
This commit is contained in:
Jean-Michel Audet 2007-04-26 13:21:49 +00:00
parent b3d5150acd
commit f8bc5ae591

View File

@ -22,10 +22,12 @@
#define PICMG_EKEY_AMC_MAX_CHANNEL 16 #define PICMG_EKEY_AMC_MAX_CHANNEL 16
#define PICMG_EKEY_AMC_MAX_DEVICE 15 /* 4 bits */ #define PICMG_EKEY_AMC_MAX_DEVICE 15 /* 4 bits */
void void
ipmi_picmg_help (void) ipmi_picmg_help (void)
{ {
printf(" properties - get PICMG properties\n"); printf(" properties - get PICMG properties\n");
printf(" frucontrol - FRU control\n");
printf(" addrinfo - get address information\n"); printf(" addrinfo - get address information\n");
printf(" activate - activate a FRU\n"); printf(" activate - activate a FRU\n");
printf(" deactivate - deactivate a FRU\n"); printf(" deactivate - deactivate a FRU\n");
@ -37,31 +39,60 @@ ipmi_picmg_help (void)
printf(" portstate getall - get all port state description\n"); printf(" portstate getall - get all port state description\n");
printf(" portstate set - set port state \n"); printf(" portstate set - set port state \n");
printf(" amcportstate get - get port state \n"); printf(" amcportstate get - get port state \n");
printf(" amcportstate set - set port state \n");
printf(" led prop - get led properties\n"); printf(" led prop - get led properties\n");
printf(" led cap - get led color capabilities\n"); printf(" led cap - get led color capabilities\n");
printf(" led state get - get led state\n"); printf(" led get - get led state\n");
printf(" led state set - set led state\n"); printf(" led set - set led state\n");
printf(" power get - get power level info\n"); printf(" power get - get power level info\n");
printf(" power set - set power level\n"); printf(" power set - set power level\n");
printf(" clk get - get clk state\n");
printf(" clk set - set clk state\n");
} }
struct sAmcAddrMap {
unsigned char ipmbLAddr;
char* amcBayId;
unsigned char siteNum;
} amcAddrMap[] = {
{0xFF, "reserved", 0},
{0x72, "A1" , 1},
{0x74, "A2" , 2},
{0x76, "A3" , 3},
{0x78, "A4" , 4},
{0x7A, "B1" , 5},
{0x7C, "B2" , 6},
{0x7E, "B3" , 7},
{0x80, "B4" , 8},
{0x82, "reserved", 0},
{0x84, "reserved", 0},
{0x86, "reserved", 0},
{0x88, "reserved", 0},
};
int int
ipmi_picmg_getaddr(struct ipmi_intf * intf) ipmi_picmg_getaddr(struct ipmi_intf * intf, int argc, char ** argv)
{ {
struct ipmi_rs * rsp; struct ipmi_rs * rsp;
struct ipmi_rq req; struct ipmi_rq req;
unsigned char msg_data; unsigned char msg_data[5];
memset(&req, 0, sizeof(req)); memset(&req, 0, sizeof(req));
req.msg.netfn = IPMI_NETFN_PICMG; req.msg.netfn = IPMI_NETFN_PICMG;
req.msg.cmd = PICMG_GET_ADDRESS_INFO_CMD; req.msg.cmd = PICMG_GET_ADDRESS_INFO_CMD;
req.msg.data = &msg_data; req.msg.data = msg_data;
req.msg.data_len = 1; req.msg.data_len = 2;
msg_data = 0; msg_data[0] = 0; /* picmg identifier */
msg_data[1] = 0; /* default fru id */
if(argc > 0) {
msg_data[1] = strtoul(argv[0], NULL,0); /* FRU ID */
}
rsp = intf->sendrecv(intf, &req); rsp = intf->sendrecv(intf, &req);
if (!rsp || rsp->ccode) { if (!rsp || rsp->ccode) {
printf("Error getting address information\n"); printf("Error getting address information CC: 0x%02x\n", rsp->ccode);
return -1; return -1;
} }
@ -94,7 +125,8 @@ ipmi_picmg_getaddr(struct ipmi_intf * intf)
printf("Alarm module\n"); printf("Alarm module\n");
break; break;
case PICMG_AMC: case PICMG_AMC:
printf("AMC\n"); printf("AMC");
printf(" -> IPMB-L Address: 0x%02x\n", amcAddrMap[rsp->data[5]].ipmbLAddr);
break; break;
case PICMG_PMC: case PICMG_PMC:
printf("PMC\n"); printf("PMC\n");
@ -202,16 +234,49 @@ ipmi_picmg_fru_activation_policy_get(struct ipmi_intf * intf, int argc, char **
printf("no response\n"); printf("no response\n");
return -1; return -1;
} }
if (rsp->ccode) { if (rsp->ccode) {
printf("returned CC code 0x%02x\n", rsp->ccode); printf("returned CC code 0x%02x\n", rsp->ccode);
return -1; return -1;
} }
printf("Activation Policy for FRU %x: ", atoi(argv[0]) ); printf(" %s\n", ((rsp->data[1] & 0x01) == 0x01) ?
printf("%s, ", (rsp->data[1] & 0x01) ? "is locked" : "is not locked"); "activation locked" : "activation not locked");
printf("%s\n", (rsp->data[1] & 0x02) ? "deactivation locked" printf(" %s\n", ((rsp->data[1] & 0x02) == 0x02) ?
: "deactivation not locked"); "deactivation locked" : "deactivation not locked");
return 0;
}
int
ipmi_picmg_fru_activation_policy_set(struct ipmi_intf * intf, int argc, char ** argv)
{
struct ipmi_rs * rsp;
struct ipmi_rq req;
unsigned char msg_data[4];
memset(&req, 0, sizeof(req));
req.msg.netfn = IPMI_NETFN_PICMG;
req.msg.cmd = PICMG_SET_FRU_POLICY_CMD;
req.msg.data = msg_data;
req.msg.data_len = 4;
msg_data[0] = 0; /* PICMG identifier */
msg_data[1] = (unsigned char) atoi(argv[0]); /* FRU ID */
msg_data[2] = (unsigned char) atoi(argv[1])& 0x03; /* FRU act policy mask */
msg_data[3] = (unsigned char) atoi(argv[2])& 0x03; /* FRU act policy set bits */
rsp = intf->sendrecv(intf, &req);
if (!rsp) {
printf("no response\n");
return -1;
}
if (rsp->ccode) {
printf("returned CC code 0x%02x\n", rsp->ccode);
return -1;
}
return 0; return 0;
} }
@ -285,7 +350,7 @@ ipmi_picmg_portstate_get(struct ipmi_intf * intf, int interface,int channel,
{ {
printf(" Link Grouping ID: 0x%02x\n", d->grouping); printf(" Link Grouping ID: 0x%02x\n", d->grouping);
printf(" Link Type Extension: 0x%02x\n", d->ext); printf(" Link Type Extension: 0x%02x\n", d->ext);
printf(" Link Type: "); printf(" Link Type: 0x%02x ", d->type);
if (d->type == 0 || d->type == 0xff) if (d->type == 0 || d->type == 0xff)
{ {
printf("Reserved %d\n",d->type); printf("Reserved %d\n",d->type);
@ -316,14 +381,16 @@ ipmi_picmg_portstate_get(struct ipmi_intf * intf, int interface,int channel,
break; break;
case FRU_PICMGEXT_LINK_TYPE_PCIE: case FRU_PICMGEXT_LINK_TYPE_PCIE:
printf("PCI Express Fabric Interface\n"); printf("PCI Express Fabric Interface\n");
break;
default: default:
printf("Invalid\n"); printf("Invalid\n");
break;
} }
} }
printf(" Link Designator: 0x%03x\n", d->designator); printf(" Link Designator: \n");
printf(" Port Flag: 0x%02x\n", d->designator >> 8); printf(" Port Flag: 0x%02x\n", d->desig_port);
printf(" Interface: "); printf(" Interface: 0x%02x - ", d->desig_if);
switch ((d->designator & 0xff) >> 6) switch (d->desig_if)
{ {
case FRU_PICMGEXT_DESIGN_IF_BASE: case FRU_PICMGEXT_DESIGN_IF_BASE:
printf("Base Interface\n"); printf("Base Interface\n");
@ -336,10 +403,12 @@ ipmi_picmg_portstate_get(struct ipmi_intf * intf, int interface,int channel,
break; break;
case FRU_PICMGEXT_DESIGN_IF_RESERVED: case FRU_PICMGEXT_DESIGN_IF_RESERVED:
printf("Reserved\n"); printf("Reserved\n");
break;
default: default:
printf("Invalid"); printf("Invalid");
break;
} }
printf(" Channel Number: 0x%02x\n", d->designator & 0x1f); printf(" Channel Number: 0x%02x\n", d->desig_channel);
printf("\n"); printf("\n");
printf(" STATE: %s\n", rsp->data[5 +(index*5)] == 0x01?"enabled":"disabled"); printf(" STATE: %s\n", rsp->data[5 +(index*5)] == 0x01?"enabled":"disabled");
} }
@ -351,10 +420,10 @@ ipmi_picmg_portstate_get(struct ipmi_intf * intf, int interface,int channel,
lprintf(LOG_NOTICE,"Unexpected answer, can't print result"); lprintf(LOG_NOTICE,"Unexpected answer, can't print result");
} }
return 0; return 0;
} }
int int
ipmi_picmg_portstate_set(struct ipmi_intf * intf, int interface, int channel, ipmi_picmg_portstate_set(struct ipmi_intf * intf, int interface, int channel,
int port, int type, int typeext, int group, int enable) int port, int type, int typeext, int group, int enable)
@ -376,9 +445,9 @@ ipmi_picmg_portstate_set(struct ipmi_intf * intf, int interface, int channel,
d = (struct fru_picmgext_link_desc*) &(msg_data[1]); d = (struct fru_picmgext_link_desc*) &(msg_data[1]);
d->designator = (unsigned char) (channel & 0x1F); /* channel */ d->desig_channel = (unsigned char) (channel & 0x1F); /* channel */
d->designator = (unsigned char) ((interface & 0x03) << 6); /* interface */ d->desig_if = (unsigned char) ((interface & 0x03) << 6); /* interface */
d->designator = (unsigned char) ((port & 0x03) << 8); /* port */ d->desig_port = (unsigned char) ((port & 0x03) << 8); /* port */
d->type = (unsigned char) (type & 0xFF); /* link type */ d->type = (unsigned char) (type & 0xFF); /* link type */
d->ext = (unsigned char) (typeext & 0x03); /* type ext */ d->ext = (unsigned char) (typeext & 0x03); /* type ext */
@ -401,6 +470,8 @@ ipmi_picmg_portstate_set(struct ipmi_intf * intf, int interface, int channel,
return 0; return 0;
} }
/* AMC.0 commands */ /* AMC.0 commands */
#define PICMG_AMC_MAX_LINK_PER_CHANNEL 4 #define PICMG_AMC_MAX_LINK_PER_CHANNEL 4
@ -525,10 +596,56 @@ ipmi_picmg_amc_portstate_get(struct ipmi_intf * intf,int device,int channel,
"Unexpected answer, can't print result"); "Unexpected answer, can't print result");
} }
return 0;
}
int
ipmi_picmg_amc_portstate_set(struct ipmi_intf * intf, int channel, int port,
int type, int typeext, int group, int enable, int device)
{
struct ipmi_rs * rsp;
struct ipmi_rq req;
unsigned char msg_data[7];
memset(&req, 0, sizeof(req));
req.msg.netfn = IPMI_NETFN_PICMG;
req.msg.cmd = PICMG_AMC_SET_PORT_STATE_CMD;
req.msg.data = msg_data;
msg_data[0] = 0x00; /* PICMG identifier*/
msg_data[1] = channel; /* channel id */
msg_data[2] = port & 0xF; /* port flags */
msg_data[2] |= (type & 0x0F)<<4; /* type */
msg_data[3] = (type & 0xF0)>>4; /* type */
msg_data[3] |= (typeext & 0x0F)<<4; /* extension */
msg_data[4] = (group & 0xFF); /* group */
msg_data[5] = (enable & 0x01); /* state */
req.msg.data_len = 6;
/* device id - only for carrier needed */
if (device >= 0) {
msg_data[6] = device;
req.msg.data_len = 7;
}
rsp = intf->sendrecv(intf, &req);
if (!rsp) {
printf("no response\n");
return -1;
}
if (rsp->ccode) {
printf("returned CC code 0x%02x\n", rsp->ccode);
return -1;
}
return 0; return 0;
} }
int int
ipmi_picmg_get_led_properties(struct ipmi_intf * intf, int argc, char ** argv) ipmi_picmg_get_led_properties(struct ipmi_intf * intf, int argc, char ** argv)
{ {
@ -598,7 +715,7 @@ ipmi_picmg_get_led_capabilities(struct ipmi_intf * intf, int argc, char ** argv)
return -1; return -1;
} }
printf("LED Color Capabilities: "); printf("LED Color Capabilities: ", rsp->data[1] );
for ( i=0 ; i<8 ; i++ ) { for ( i=0 ; i<8 ; i++ ) {
if ( rsp->data[1] & (0x01 << i) ) { if ( rsp->data[1] & (0x01 << i) ) {
printf("%s, ", led_color_str[ i ]); printf("%s, ", led_color_str[ i ]);
@ -645,21 +762,50 @@ ipmi_picmg_get_led_state(struct ipmi_intf * intf, int argc, char ** argv)
return -1; return -1;
} }
printf("LED states: %x\n\r", rsp->data[1] ); printf("LED states: %x ", rsp->data[1] );
printf(" Local Control function: %x\n\r", rsp->data[2] ); if (rsp->data[1] == 0x1)
printf("[LOCAL CONTROL]\n\r");
else if (rsp->data[1] == 0x2)
printf("[OVERRIDE]\n\r");
else if (rsp->data[1] == 0x4)
printf("[LAMPTEST]\n\r");
else
printf("\n\r");
printf(" Local Control function: %x ", rsp->data[2] );
if (rsp->data[2] == 0x0)
printf("[OFF]\n\r");
else if (rsp->data[2] == 0xff)
printf("[ON]\n\r");
else
printf("[BLINKING]\n\r");
printf(" Local Control On-Duration: %x\n\r", rsp->data[3] ); printf(" Local Control On-Duration: %x\n\r", rsp->data[3] );
printf(" Local Control Color: %s\n\r", led_color_str[ rsp->data[4] ]); printf(" Local Control Color: %x [%s]\n\r", rsp->data[4], led_color_str[ rsp->data[4] ]);
/* override state or lamp test */ /* override state or lamp test */
if (rsp->data[1] == 0x01) { if (rsp->data[1] == 0x02) {
printf(" Override function: %x\n\r", rsp->data[5] ); printf(" Override function: %x ", rsp->data[5] );
printf(" Override On-Duration: %x\n\r", rsp->data[6] ); if (rsp->data[2] == 0x0)
printf(" Override Color: %s\n\r", led_color_str[ rsp->data[7] ]); printf("[OFF]\n\r");
else if (rsp->data[2] == 0xff)
printf("[ON]\n\r");
else
printf("[BLINKING]\n\r");
}else if (rsp->data[1] == 0x03) {
printf(" Override function: %x\n\r", rsp->data[5] );
printf(" Override On-Duration: %x\n\r", rsp->data[6] ); printf(" Override On-Duration: %x\n\r", rsp->data[6] );
printf(" Override Color: %s\n\r", led_color_str[ rsp->data[7] ]); printf(" Override Color: %x [%s]\n\r", rsp->data[7], led_color_str[ rsp->data[7] ]);
}else if (rsp->data[1] == 0x06) {
printf(" Override function: %x ", rsp->data[5] );
if (rsp->data[2] == 0x0)
printf("[OFF]\n\r");
else if (rsp->data[2] == 0xff)
printf("[ON]\n\r");
else
printf("[BLINKING]\n\r");
printf(" Override On-Duration: %x\n\r", rsp->data[6] );
printf(" Override Color: %x [%s]\n\r", rsp->data[7], led_color_str[ rsp->data[7] ]);
printf(" Lamp test duration: %x\n\r", rsp->data[8] ); printf(" Lamp test duration: %x\n\r", rsp->data[8] );
} }
@ -744,11 +890,208 @@ ipmi_picmg_get_power_level(struct ipmi_intf * intf, int argc, char ** argv)
for ( i = 1; i+3 < rsp->data_len ; i++ ) { for ( i = 1; i+3 < rsp->data_len ; i++ ) {
printf(" Power Draw %i: %i\n", i, rsp->data[i+3]); printf(" Power Draw %i: %i\n", i, (rsp->data[i+3]) * rsp->data[3] / 10);
} }
return 0; return 0;
} }
int
ipmi_picmg_set_power_level(struct ipmi_intf * intf, int argc, char ** argv)
{
int i;
struct ipmi_rs * rsp;
struct ipmi_rq req;
unsigned char msg_data[6];
memset(&req, 0, sizeof(req));
req.msg.netfn = IPMI_NETFN_PICMG;
req.msg.cmd = PICMG_SET_POWER_LEVEL_CMD;
req.msg.data = msg_data;
req.msg.data_len = 4;
msg_data[0] = 0x00; /* PICMG identifier */
msg_data[1] = atoi(argv[0]); /* FRU-ID */
msg_data[2] = atoi(argv[1]); /* power level */
msg_data[3] = atoi(argv[2]); /* present to desired */
rsp = intf->sendrecv(intf, &req);
if (!rsp) {
printf("no response\n");
return -1;
}
if (rsp->ccode) {
printf("returned CC code 0x%02x\n", rsp->ccode);
return -1;
}
return 0;
}
int
ipmi_picmg_fru_control(struct ipmi_intf * intf, int argc, char ** argv)
{
struct ipmi_rs * rsp;
struct ipmi_rq req;
unsigned char msg_data[6];
memset(&req, 0, sizeof(req));
req.msg.netfn = IPMI_NETFN_PICMG;
req.msg.cmd = PICMG_FRU_CONTROL_CMD;
req.msg.data = msg_data;
req.msg.data_len = 3;
msg_data[0] = 0x00; /* PICMG identifier */
msg_data[1] = atoi(argv[0]); /* FRU-ID */
msg_data[2] = atoi(argv[1]); /* control option */
printf("0: 0x%02x 1: 0x%02x\n\r", msg_data[1], msg_data[2]);
rsp = intf->sendrecv(intf, &req);
if (!rsp) {
printf("frucontrol: no response\n");
return -1;
}
if (rsp->ccode) {
printf("frucontrol: returned CC code 0x%02x\n", rsp->ccode);
return -1;
}
return 0;
}
int
ipmi_picmg_clk_get(struct ipmi_intf * intf, int argc, char ** argv)
{
int i;
struct ipmi_rs * rsp;
struct ipmi_rq req;
unsigned char enabled;
unsigned char direction;
unsigned char msg_data[6];
memset(&req, 0, sizeof(req));
req.msg.netfn = IPMI_NETFN_PICMG;
req.msg.cmd = PICMG_AMC_GET_CLK_STATE_CMD;
req.msg.data = msg_data;
req.msg.data_len = 2;
msg_data[0] = 0x00; /* PICMG identifier */
msg_data[1] = atoi(argv[0]); /* clk id */
if(argc>2){
msg_data[2] = atoi(argv[1]); /* resource id */
req.msg.data_len = 3;
}
rsp = intf->sendrecv(intf, &req);
if (!rsp) {
printf("no response\n");
return -1;
}
if (rsp->ccode) {
printf("returned CC code 0x%02x\n", rsp->ccode);
return -1;
}
enabled = (rsp->data[1]&0x8)!=0;
direction = (rsp->data[1]&0x4)!=0;
printf("CLK setting: 0x%02x\n", rsp->data[1]);
printf(" - state: %s\n", (enabled)?"enabled":"disabled");
printf(" - direction: %s\n", (direction)?"Source":"Receiver");
printf(" - PLL ctrl: 0x%x\n", rsp->data[1]&0x3);
if(enabled){
unsigned long freq = 0;
freq = ( rsp->data[5] << 0
| rsp->data[6] << 8
| rsp->data[7] << 16
| rsp->data[8] << 24 );
printf(" - Index: %d\n", rsp->data[2]);
printf(" - Family: %d\n", rsp->data[3]);
printf(" - AccLVL: %d\n", rsp->data[4]);
printf(" - Freq: %d\n", freq);
}
return 0;
}
int
ipmi_picmg_clk_set(struct ipmi_intf * intf, int argc, char ** argv)
{
int i;
struct ipmi_rs * rsp;
struct ipmi_rq req;
unsigned char msg_data[11];
unsigned long freq=0;
memset(&req, 0, sizeof(req));
req.msg.netfn = IPMI_NETFN_PICMG;
req.msg.cmd = PICMG_AMC_SET_CLK_STATE_CMD;
req.msg.data = msg_data;
req.msg.data_len = 11;
msg_data[0] = 0x00; /* PICMG identifier */
msg_data[1] = strtoul(argv[0], NULL,0); /* clk id */
msg_data[2] = strtoul(argv[1], NULL,0); /* clk index */
msg_data[3] = strtoul(argv[2], NULL,0); /* setting */
msg_data[4] = strtoul(argv[3], NULL,0); /* family */
msg_data[5] = strtoul(argv[4], NULL,0); /* acc */
freq = strtoul(argv[5], NULL,0);
msg_data[6] = (freq >> 0)& 0xFF; /* freq */
msg_data[7] = (freq >> 8)& 0xFF; /* freq */
msg_data[8] = (freq >>16)& 0xFF; /* freq */
msg_data[9] = (freq >>24)& 0xFF; /* freq */
msg_data[10] = strtoul(argv[6 ], NULL,0); /* resource id */
#if 1
printf("## ID: %d\n", msg_data[1]);
printf("## index: %d\n", msg_data[2]);
printf("## setting: 0x02x\n", msg_data[3]);
printf("## family: %d\n", msg_data[4]);
printf("## acc: %d\n", msg_data[5]);
printf("## freq: %d\n", freq );
printf("## res: %d\n", msg_data[10]);
#endif
rsp = intf->sendrecv(intf, &req);
if (!rsp) {
printf("no response\n");
return -1;
}
if (rsp->ccode) {
printf("returned CC code 0x%02x\n", rsp->ccode);
return -1;
}
return 0;
}
int int
ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv) ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
{ {
@ -761,7 +1104,7 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
/* address info command */ /* address info command */
else if (!strncmp(argv[0], "addrinfo", 8)) { else if (!strncmp(argv[0], "addrinfo", 8)) {
rc = ipmi_picmg_getaddr(intf); rc = ipmi_picmg_getaddr(intf, argc-1, &argv[1]);
} }
/* picmg properties command */ /* picmg properties command */
@ -769,6 +1112,27 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
rc = ipmi_picmg_properties(intf); rc = ipmi_picmg_properties(intf);
} }
/* fru control command */
else if (!strncmp(argv[0], "frucontrol", 10)) {
if (argc > 2) {
rc = ipmi_picmg_fru_control(intf, argc-1, &(argv[1]));
}
else {
printf("usage: frucontrol <FRU-ID><OPTION>\n");
printf(" OPTION:\n");
printf(" 0x00 - Cold Reset\n");
printf(" 0x01 - Warm Reset\n");
printf(" 0x02 - Graceful Reboot\n");
printf(" 0x03 - Issue Diagnostic Interrupt\n");
printf(" 0x04 - Quiesce [AMC only]\n");
printf(" 0x05-0xFF - Cold Reset\n");
return -1;
}
printf("frucontrol\n\r");
}
/* fru activation command */ /* fru activation command */
else if (!strncmp(argv[0], "activate", 8)) { else if (!strncmp(argv[0], "activate", 8)) {
if (argc > 1) { if (argc > 1) {
@ -792,30 +1156,41 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
/* activation policy command */ /* activation policy command */
else if (!strncmp(argv[0], "policy", 6)) { else if (!strncmp(argv[0], "policy", 6)) {
if (argc > 2) { if (argc > 1) {
if (!strncmp(argv[1], "get", 3)) { if (!strncmp(argv[1], "get", 3)) {
rc = ipmi_picmg_fru_activation_policy_get(intf, argc-2, &(argv[2])); if (argc > 2) {
rc = ipmi_picmg_fru_activation_policy_get(intf, argc-1, &(argv[2]));
} else {
printf("usage: get <fruid>\n");
}
} else if (!strncmp(argv[1], "set", 3)) {
if (argc > 4) {
rc = ipmi_picmg_fru_activation_policy_set(intf, argc-1, &(argv[2]));
} else {
printf("usage: set <fruid> <lockmask> <lock>\n");
printf(" lockmask: [1] affect the deactivation locked bit\n");
printf(" [0] affect the activation locked bit\n");
printf(" lock: [1] set/clear deactivation locked\n");
printf(" [0] set/clear locked \n");
} }
else if (!strncmp(argv[1], "set", 6)) {
printf("tbd\n");
return -1;
} }
else { else {
printf("specify fru\n"); printf("specify fru\n");
return -1; return -1;
} }
}else { } else {
printf("wrong parameters\n"); printf("wrong parameters\n");
return -1; return -1;
} }
} }
/* portstate command */ /* portstate command */
else if (!strncmp(argv[0], "portstate", 9)) { else if (!strncmp(argv[0], "portstate", 9)) {
lprintf(LOG_DEBUG,"PICMG: portstate API"); lprintf(LOG_DEBUG,"PICMG: portstate API");
if (argc > 1) { if (argc > 1) {
if (!strncmp(argv[1], "get", 3)){ if (!strncmp(argv[1], "get", 3)) {
int iface; int iface;
int channel ; int channel ;
@ -866,7 +1241,7 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
} }
} }
else if (!strncmp(argv[1], "set", 3)) { else if (!strncmp(argv[1], "set", 3)) {
if (argc > 5) { if (argc > 9) {
int interface= atoi(argv[2]); int interface= atoi(argv[2]);
int channel = atoi(argv[3]); int channel = atoi(argv[3]);
int port = atoi(argv[4]); int port = atoi(argv[4]);
@ -883,7 +1258,7 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
lprintf(LOG_DEBUG,"PICMG: group %d",group); lprintf(LOG_DEBUG,"PICMG: group %d",group);
lprintf(LOG_DEBUG,"PICMG: enable %d",enable); lprintf(LOG_DEBUG,"PICMG: enable %d",enable);
rc = ipmi_picmg_portstate_set(intf, interface, channel, port , rc = ipmi_picmg_portstate_set(intf, interface, channel, port,
type, typeext ,group ,enable); type, typeext ,group ,enable);
} }
else { else {
@ -904,7 +1279,7 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
if (argc > 1) { if (argc > 1) {
if (!strncmp(argv[1], "get", 3)){ if (!strncmp(argv[1], "get", 3)){
int channel ; int channel;
int device; int device;
lprintf(LOG_DEBUG,"PICMG: get"); lprintf(LOG_DEBUG,"PICMG: get");
@ -948,27 +1323,30 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
} }
else if (!strncmp(argv[1], "set", 3)) { else if (!strncmp(argv[1], "set", 3)) {
if (argc > 5) { if (argc > 5) {
int interface= atoi(argv[2]); int channel = atoi(argv[2]);
int channel = atoi(argv[3]); int port = atoi(argv[3]);
int port = atoi(argv[4]); int type = atoi(argv[4]);
int type = atoi(argv[5]); int typeext = atoi(argv[5]);
int typeext = atoi(argv[6]); int group = atoi(argv[6]);
int group = atoi(argv[7]); int enable = atoi(argv[7]);
int enable = atoi(argv[8]); int device = -1;
if(argc > 6){
device = atoi(argv[8]);
}
lprintf(LOG_DEBUG,"PICMG: interface %d",interface);
lprintf(LOG_DEBUG,"PICMG: channel %d",channel); lprintf(LOG_DEBUG,"PICMG: channel %d",channel);
lprintf(LOG_DEBUG,"PICMG: port %d",port); lprintf(LOG_DEBUG,"PICMG: port %d",port);
lprintf(LOG_DEBUG,"PICMG: type %d",type); lprintf(LOG_DEBUG,"PICMG: type %d",type);
lprintf(LOG_DEBUG,"PICMG: typeext %d",typeext); lprintf(LOG_DEBUG,"PICMG: typeext %d",typeext);
lprintf(LOG_DEBUG,"PICMG: group %d",group); lprintf(LOG_DEBUG,"PICMG: group %d",group);
lprintf(LOG_DEBUG,"PICMG: enable %d",enable); lprintf(LOG_DEBUG,"PICMG: enable %d",enable);
lprintf(LOG_DEBUG,"PICMG: device %d",device);
rc = ipmi_picmg_portstate_set(intf, interface, channel, port , rc = ipmi_picmg_amc_portstate_set(intf, channel, port, type,
type, typeext ,group ,enable); typeext, group, enable, device);
} }
else { else {
printf("<intf> <chn> <port> <type> <ext> <group> <1|0>\n"); printf("<chn> <port> <type> <ext> <group> <1|0> [<device>]\n");
return -1; return -1;
} }
} }
@ -978,7 +1356,6 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
return -1; return -1;
} }
} }
/* ATCA led commands */ /* ATCA led commands */
else if (!strncmp(argv[0], "led", 3)) { else if (!strncmp(argv[0], "led", 3)) {
if (argc > 1) { if (argc > 1) {
@ -1013,14 +1390,28 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
else { else {
printf("led set <FRU-ID> <LED-ID> <function> <duration> <color>\n"); printf("led set <FRU-ID> <LED-ID> <function> <duration> <color>\n");
printf(" <FRU-ID>\n"); printf(" <FRU-ID>\n");
printf(" <LED-ID>\n"); printf(" <LED-ID> 0: Blue LED\n");
printf(" 1: LED 1\n");
printf(" 2: LED 2\n");
printf(" 3: LED 3\n");
printf(" 0x04-0xFE: OEM defined\n");
printf(" 0xFF: All LEDs under management control\n");
printf(" <function> 0: LED OFF override\n"); printf(" <function> 0: LED OFF override\n");
printf(" 1 - 250: LED blinking override (off duration)\n"); printf(" 1 - 250: LED blinking override (off duration)\n");
printf(" 251: LED Lamp Test\n"); printf(" 251: LED Lamp Test\n");
printf(" 252: LED restore to local control\n"); printf(" 252: LED restore to local control\n");
printf(" 255: LED ON override\n"); printf(" 255: LED ON override\n");
printf(" <duration> 1 - 127: LED Lamp Test / on duration\n"); printf(" <duration> 1 - 127: LED Lamp Test / on duration\n");
printf(" <color> \n"); printf(" <color> 0: reserved\n");
printf(" 1: BLUE\n");
printf(" 2: RED\n");
printf(" 3: GREEN\n");
printf(" 4: AMBER\n");
printf(" 5: ORANGE\n");
printf(" 6: WHITE\n");
printf(" 7: reserved\n");
printf(" 0xE: do not change\n");
printf(" 0xF: use default color\n");
} }
} }
else { else {
@ -1036,7 +1427,7 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
rc = ipmi_picmg_get_power_level(intf, argc-1, &(argv[2])); rc = ipmi_picmg_get_power_level(intf, argc-1, &(argv[2]));
} }
else { else {
printf("power get <FRI-ID> <type>\n"); printf("power get <FRU-ID> <type>\n");
printf(" <type> 0 : steady state powert draw levels\n"); printf(" <type> 0 : steady state powert draw levels\n");
printf(" 1 : desired steady state draw levels\n"); printf(" 1 : desired steady state draw levels\n");
printf(" 2 : early power draw levels\n"); printf(" 2 : early power draw levels\n");
@ -1046,10 +1437,53 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
} }
} }
else if (!strncmp(argv[1], "set", 3)) { else if (!strncmp(argv[1], "set", 3)) {
if (argc > 5) { if (argc > 4) {
printf("not implemented yet\n"); rc = ipmi_picmg_set_power_level(intf, argc-1, &(argv[2]));
} }
else { else {
printf("power set <FRU-ID> <level> <present-desired>\n");
printf(" <level> 0 : Power Off\n");
printf(" 0x1-0x14 : Power level\n");
printf(" 0xFF : do not change\n");
printf("\n");
printf(" <present-desired> 0: do not change present levelsßn");
printf(" 1: copy desired to present level\n");
return -1;
}
}
else {
printf("<set>|<get>\n");
return -1;
}
}
else {
printf("<set>|<get>\n");
return -1;
}
}/* clk commands*/
else if (!strncmp(argv[0], "clk", 3)) {
if (argc > 1) {
if (!strncmp(argv[1], "get", 3)) {
if (argc > 2) {
unsigned char clk_id;
unsigned char clk_res;
rc = ipmi_picmg_clk_get(intf, argc-1, &(argv[2]));
}
else {
printf("clk get <CLK-ID> [<DEV-ID>]\n");
return -1;
}
}
else if (!strncmp(argv[1], "set", 3)) {
if (argc > 7) {
rc = ipmi_picmg_clk_set(intf, argc-1, &(argv[2]));
}
else {
printf("clk set <CLK-ID> <index> <setting> <family> <acc-lvl> <freq> [<DEV-ID>] \n");
return -1; return -1;
} }
} }
@ -1071,5 +1505,4 @@ ipmi_picmg_main (struct ipmi_intf * intf, int argc, char ** argv)
} }
return rc; return rc;
} }