~ubuntu-branches/ubuntu/vivid/ipmitool/vivid-updates

« back to all changes in this revision

Viewing changes to lib/ipmi_kontronoem.c

  • Committer: Package Import Robot
  • Author(s): Luk Claes
  • Date: 2013-05-07 18:12:12 UTC
  • mfrom: (5.1.11 raring-proposed)
  • Revision ID: package-import@ubuntu.com-20130507181212-fitwelheknk3tqnq
Tags: 1.8.12-1
Merge new upstream from Ubuntu (Closes: #692292).

Show diffs side-by-side

added added

removed removed

Lines of Context:
69
69
static int ipmi_kontron_nextboot_set(struct ipmi_intf * intf,
70
70
                                     int argc, char **argv);
71
71
 
 
72
static int ipmi_kontronoem_send_set_large_buffer(struct ipmi_intf * intf,
 
73
                                                 unsigned char channel,
 
74
                                                 unsigned char size);
72
75
 
73
76
int
74
77
ipmi_kontronoem_main(struct ipmi_intf * intf, int argc, char ** argv)
151
154
   printf("Kontron Commands:  setsn setmfgdate nextboot\n");
152
155
}   
153
156
 
 
157
 
 
158
int ipmi_kontronoem_set_large_buffer(struct ipmi_intf * intf, unsigned char size)
 
159
{
 
160
   uint8_t error_occurs = 0;
 
161
   uint32_t prev_target_addr = intf->target_addr ;
 
162
 
 
163
   if ( intf->target_addr > 0  && (intf->target_addr != intf->my_addr) )
 
164
   {
 
165
      intf->target_addr = intf->my_addr;
 
166
 
 
167
       printf("Set local big buffer\n");
 
168
       if(ipmi_kontronoem_send_set_large_buffer( intf, 0x0e, size ) == 0)
 
169
       {
 
170
          printf("Set local big buffer:success\n");
 
171
       }
 
172
       else
 
173
       {
 
174
          error_occurs = 1;
 
175
       }
 
176
 
 
177
       if (error_occurs == 0)
 
178
       {
 
179
          if(ipmi_kontronoem_send_set_large_buffer( intf, 0x00, size ) == 0)
 
180
          {
 
181
             printf("IPMB was set\n");
 
182
          }
 
183
          else
 
184
          {
 
185
             /* Revert back the previous set large buffer */
 
186
             error_occurs = 1;
 
187
             ipmi_kontronoem_send_set_large_buffer( intf, 0x0e, 0 );
 
188
          }
 
189
       }
 
190
 
 
191
      /* Restore target address */
 
192
       intf->target_addr = prev_target_addr;
 
193
   }
 
194
 
 
195
   if (error_occurs == 0)
 
196
   {
 
197
      if(ipmi_kontronoem_send_set_large_buffer( intf, 0x0e, size ) == 0)
 
198
      {
 
199
         //printf("Set remote big buffer\n");
 
200
      }
 
201
      else
 
202
      {
 
203
         if ( intf->target_addr > 0  && (intf->target_addr != intf->my_addr) )
 
204
         {
 
205
            /* Error occurs revert back the previous set large buffer*/
 
206
            intf->target_addr = intf->my_addr;
 
207
 
 
208
            //ipmi_kontronoem_send_set_large_buffer( intf, 0x00, 0 );
 
209
            ipmi_kontronoem_send_set_large_buffer( intf, 0x0e, 0 );
 
210
 
 
211
            intf->target_addr = prev_target_addr;
 
212
         }
 
213
      }
 
214
   }
 
215
   return error_occurs;
 
216
}
 
217
 
 
218
 
 
219
int ipmi_kontronoem_send_set_large_buffer(struct ipmi_intf * intf, unsigned char channel,unsigned char size)
 
220
{
 
221
   struct ipmi_rs *rsp;
 
222
   struct ipmi_rq req;
 
223
   uint8_t msg_data[2];
 
224
   int i;
 
225
   
 
226
   memset(msg_data, 0, sizeof(msg_data));
 
227
   msg_data[0] = channel/*0x0e*/;   // Currently running interface
 
228
   msg_data[1] = size;
 
229
   
 
230
   memset(&req, 0, sizeof(req));
 
231
   req.msg.netfn = 0x3E; /* OEM NetFn */
 
232
   req.msg.cmd = 0x82;   /* Set Channel Buffer Length - OEM */
 
233
   req.msg.data = msg_data;
 
234
   req.msg.data_len = 2;
 
235
   
 
236
   req.msg.lun = 0x00;
 
237
      
 
238
   rsp = intf->sendrecv(intf, &req);
 
239
   if (rsp == NULL) 
 
240
   {
 
241
      printf("Cannot send large buffer command\n");
 
242
      return(-1);
 
243
   }
 
244
   if (rsp->ccode > 0) 
 
245
   {
 
246
      printf("Invalid length for the selected interface (%s) %d\n", 
 
247
               val2str(rsp->ccode, completion_code_vals), rsp->ccode);
 
248
      return(-1);
 
249
   }
 
250
   return 0;
 
251
}
 
252
 
 
253
 
154
254
/* ipmi_fru_set_serial_number -  Set the Serial Number in FRU
155
255
 *
156
256
 * @intf:               ipmi interface