Improvements large packet command code

This commit is contained in:
Marie-Josee Blais 2010-08-11 17:14:33 +00:00
parent 13bb060366
commit 94e47fb2c6

View File

@ -69,6 +69,9 @@ static void ipmi_kontron_nextboot_help(void);
static int ipmi_kontron_nextboot_set(struct ipmi_intf * intf, static int ipmi_kontron_nextboot_set(struct ipmi_intf * intf,
int argc, char **argv); int argc, char **argv);
static int ipmi_kontronoem_send_set_large_buffer(struct ipmi_intf * intf,
unsigned char channel,
unsigned char size);
int int
ipmi_kontronoem_main(struct ipmi_intf * intf, int argc, char ** argv) ipmi_kontronoem_main(struct ipmi_intf * intf, int argc, char ** argv)
@ -153,6 +156,67 @@ static void ipmi_kontron_help(void)
int ipmi_kontronoem_set_large_buffer(struct ipmi_intf * intf, unsigned char size) int ipmi_kontronoem_set_large_buffer(struct ipmi_intf * intf, unsigned char size)
{
uint8_t error_occurs = 0;
uint32_t prev_target_addr = intf->target_addr ;
if ( intf->target_addr > 0 && (intf->target_addr != intf->my_addr) )
{
intf->target_addr = intf->my_addr;
printf("Set local big buffer\r\n");
if(ipmi_kontronoem_send_set_large_buffer( intf, 0x0e, size ) == 0)
{
printf("Set local big buffer:success\r\n");
}
else
{
error_occurs = 1;
}
if (error_occurs == 0)
{
if(ipmi_kontronoem_send_set_large_buffer( intf, 0x00, size ) == 0)
{
printf("IPMB was set\r\n");
}
else
{
/* Revert back the previous set large buffer */
error_occurs = 1;
ipmi_kontronoem_send_set_large_buffer( intf, 0x0e, 0 );
}
}
/* Restore target address */
intf->target_addr = prev_target_addr;
}
if (error_occurs == 0)
{
if(ipmi_kontronoem_send_set_large_buffer( intf, 0x0e, size ) == 0)
{
printf("Set remote big buffer\r\n");
}
else
{
if ( intf->target_addr > 0 && (intf->target_addr != intf->my_addr) )
{
/* Error occurs revert back the previous set large buffer*/
intf->target_addr = intf->my_addr;
ipmi_kontronoem_send_set_large_buffer( intf, 0x00, 0 );
ipmi_kontronoem_send_set_large_buffer( intf, 0x0e, 0 );
intf->target_addr = prev_target_addr;
}
}
}
return error_occurs;
}
int ipmi_kontronoem_send_set_large_buffer(struct ipmi_intf * intf, unsigned char channel,unsigned char size)
{ {
struct ipmi_rs *rsp; struct ipmi_rs *rsp;
struct ipmi_rq req; struct ipmi_rq req;
@ -160,7 +224,7 @@ int ipmi_kontronoem_set_large_buffer(struct ipmi_intf * intf, unsigned char size
int i; int i;
memset(msg_data, 0, sizeof(msg_data)); memset(msg_data, 0, sizeof(msg_data));
msg_data[0] = 0x0e; // Currently running interface msg_data[0] = channel/*0x0e*/; // Currently running interface
msg_data[1] = size; msg_data[1] = size;
memset(&req, 0, sizeof(req)); memset(&req, 0, sizeof(req));