Main Page | Class List | Directories | File List | Class Members | File Members

ipmi_solparm.h File Reference

#include <OpenIPMI/ipmi_types.h>

Go to the source code of this file.

Defines

#define IPMI_SOLPARM_NAME_LEN   64
#define IPMI_SOLPARM_SET_IN_PROGRESS   0
#define IPMI_SOLPARM_ENABLE   1
#define IPMI_SOLPARM_AUTHENTICATION   2
#define IPMI_SOLPARM_CHAR_SETTINGS   3
#define IPMI_SOLPARM_RETRY   4
#define IPMI_SOLPARM_NONVOLATILE_BITRATE   5
#define IPMI_SOLPARM_VOLATILE_BITRATE   6
#define IPMI_SOLPARM_PAYLOAD_CHANNEL   7
#define IPMI_SOLPARM_PAYLOAD_PORT_NUMBER   8

Typedefs

typedef ipmi_solparm_s ipmi_solparm_t
typedef void(* ipmi_solparm_done_cb )(ipmi_solparm_t *solparm, int err, void *cb_data)
typedef void(* ipmi_solparm_ptr_cb )(ipmi_solparm_t *solparm, void *cb_data)
typedef void(* ipmi_solparm_get_cb )(ipmi_solparm_t *solparm, int err, unsigned char *data, unsigned int data_len, void *cb_data)
typedef ipmi_sol_config_s ipmi_sol_config_t
typedef void(* ipmi_sol_get_config_cb )(ipmi_solparm_t *solparm, int err, ipmi_sol_config_t *config, void *cb_data)

Enumerations

enum  ipmi_solconf_val_type_e {
  IPMI_SOLCONFIG_INT, IPMI_SOLCONFIG_BOOL, IPMI_SOLCONFIG_DATA, IPMI_SOLCONFIG_IP,
  IPMI_SOLCONFIG_MAC
}

Functions

int ipmi_solparm_alloc (ipmi_mc_t *mc, unsigned int channel, ipmi_solparm_t **new_solparm)
int ipmi_solparm_destroy (ipmi_solparm_t *solparm, ipmi_solparm_done_cb handler, void *cb_data)
void ipmi_solparm_ref (ipmi_solparm_t *solparm)
void ipmi_solparm_deref (ipmi_solparm_t *solparm)
void ipmi_solparm_iterate_solparms (ipmi_domain_t *domain, ipmi_solparm_ptr_cb handler, void *cb_data)
ipmi_mcid_t ipmi_solparm_get_mc_id (ipmi_solparm_t *solparm)
unsigned int ipmi_solparm_get_channel (ipmi_solparm_t *solparm)
int ipmi_solparm_get_name (ipmi_solparm_t *solparm, char *name, int length)
int ipmi_solparm_get_parm (ipmi_solparm_t *solparm, unsigned int parm, unsigned int set, unsigned int block, ipmi_solparm_get_cb done, void *cb_data)
int ipmi_solparm_set_parm (ipmi_solparm_t *solparm, unsigned int parm, unsigned char *data, unsigned int data_len, ipmi_solparm_done_cb done, void *cb_data)
int ipmi_sol_get_config (ipmi_solparm_t *solparm, ipmi_sol_get_config_cb done, void *cb_data)
int ipmi_sol_set_config (ipmi_solparm_t *solparm, ipmi_sol_config_t *config, ipmi_solparm_done_cb done, void *cb_data)
int ipmi_sol_clear_lock (ipmi_solparm_t *solparm, ipmi_sol_config_t *solc, ipmi_solparm_done_cb done, void *cb_data)
void ipmi_sol_free_config (ipmi_sol_config_t *config)
int ipmi_solconfig_get_val (ipmi_sol_config_t *solc, unsigned int parm, const char **name, int *index, enum ipmi_solconf_val_type_e *valtype, unsigned int *ival, unsigned char **dval, unsigned int *dval_len)
int ipmi_solconfig_set_val (ipmi_sol_config_t *solc, unsigned int parm, int index, unsigned int ival, unsigned char *dval, unsigned int dval_len)
int ipmi_solconfig_enum_val (unsigned int parm, int val, int *nval, const char **sval)
int ipmi_solconfig_enum_idx (unsigned int parm, int idx, const char **sval)
void ipmi_solconfig_data_free (void *data)
unsigned int ipmi_solconfig_str_to_parm (char *name)
const char * ipmi_solconfig_parm_to_str (unsigned int parm)
int ipmi_solconfig_parm_to_type (unsigned int parm, enum ipmi_solconf_val_type_e *valtype)
unsigned int ipmi_solconfig_get_enable (ipmi_sol_config_t *solc)
int ipmi_solconfig_set_enable (ipmi_sol_config_t *solc, unsigned int val)
unsigned int ipmi_solconfig_get_force_payload_encryption (ipmi_sol_config_t *solc)
int ipmi_solconfig_set_force_payload_encryption (ipmi_sol_config_t *solc, unsigned int val)
unsigned int ipmi_solconfig_get_force_payload_authentication (ipmi_sol_config_t *solc)
int ipmi_solconfig_set_force_payload_authentication (ipmi_sol_config_t *solc, unsigned int val)
unsigned int ipmi_solconfig_get_privilege_level (ipmi_sol_config_t *solc)
int ipmi_solconfig_set_privilege_level (ipmi_sol_config_t *solc, unsigned int val)
unsigned int ipmi_solconfig_get_char_accumulation_interval (ipmi_sol_config_t *solc)
int ipmi_solconfig_set_char_accumulation_interval (ipmi_sol_config_t *solc, unsigned int val)
unsigned int ipmi_solconfig_get_char_send_threshold (ipmi_sol_config_t *solc)
int ipmi_solconfig_set_char_send_threshold (ipmi_sol_config_t *solc, unsigned int val)
unsigned int ipmi_solconfig_get_retry_count (ipmi_sol_config_t *solc)
int ipmi_solconfig_set_retry_count (ipmi_sol_config_t *solc, unsigned int val)
unsigned int ipmi_solconfig_get_retry_interval (ipmi_sol_config_t *solc)
int ipmi_solconfig_set_retry_interval (ipmi_sol_config_t *solc, unsigned int val)
unsigned int ipmi_solconfig_get_non_volatile_bitrate (ipmi_sol_config_t *solc)
int ipmi_solconfig_set_non_volatile_bitrate (ipmi_sol_config_t *solc, unsigned int val)
unsigned int ipmi_solconfig_get_volatile_bitrate (ipmi_sol_config_t *solc)
int ipmi_solconfig_set_volatile_bitrate (ipmi_sol_config_t *solc, unsigned int val)
int ipmi_solconfig_get_port_number (ipmi_sol_config_t *solc, unsigned int *data)
int ipmi_solconfig_set_port_number (ipmi_sol_config_t *solc, unsigned int val)
int ipmi_solconfig_get_payload_channel (ipmi_sol_config_t *solc, unsigned int *data)


Define Documentation

#define IPMI_SOLPARM_AUTHENTICATION   2
 

Definition at line 114 of file ipmi_solparm.h.

#define IPMI_SOLPARM_CHAR_SETTINGS   3
 

Definition at line 115 of file ipmi_solparm.h.

#define IPMI_SOLPARM_ENABLE   1
 

Definition at line 113 of file ipmi_solparm.h.

#define IPMI_SOLPARM_NAME_LEN   64
 

Definition at line 81 of file ipmi_solparm.h.

Referenced by for_each_solparm_handler(), solparm_config_get_done(), solparm_info(), solparm_list_handler(), and solparm_new().

#define IPMI_SOLPARM_NONVOLATILE_BITRATE   5
 

Definition at line 117 of file ipmi_solparm.h.

#define IPMI_SOLPARM_PAYLOAD_CHANNEL   7
 

Definition at line 119 of file ipmi_solparm.h.

#define IPMI_SOLPARM_PAYLOAD_PORT_NUMBER   8
 

Definition at line 120 of file ipmi_solparm.h.

Referenced by got_parm(), and set_done().

#define IPMI_SOLPARM_RETRY   4
 

Definition at line 116 of file ipmi_solparm.h.

#define IPMI_SOLPARM_SET_IN_PROGRESS   0
 

Definition at line 112 of file ipmi_solparm.h.

#define IPMI_SOLPARM_VOLATILE_BITRATE   6
 

Definition at line 118 of file ipmi_solparm.h.


Typedef Documentation

typedef struct ipmi_sol_config_s ipmi_sol_config_t
 

Definition at line 125 of file ipmi_solparm.h.

typedef void(* ipmi_sol_get_config_cb)(ipmi_solparm_t *solparm, int err, ipmi_sol_config_t *config, void *cb_data)
 

Definition at line 132 of file ipmi_solparm.h.

typedef void(* ipmi_solparm_done_cb)(ipmi_solparm_t *solparm, int err, void *cb_data)
 

Definition at line 48 of file ipmi_solparm.h.

typedef void(* ipmi_solparm_get_cb)(ipmi_solparm_t *solparm, int err, unsigned char *data, unsigned int data_len, void *cb_data)
 

Definition at line 91 of file ipmi_solparm.h.

typedef void(* ipmi_solparm_ptr_cb)(ipmi_solparm_t *solparm, void *cb_data)
 

Definition at line 53 of file ipmi_solparm.h.

typedef struct ipmi_solparm_s ipmi_solparm_t
 

Definition at line 44 of file ipmi_solparm.h.


Enumeration Type Documentation

enum ipmi_solconf_val_type_e
 

Enumerator:
IPMI_SOLCONFIG_INT 
IPMI_SOLCONFIG_BOOL 
IPMI_SOLCONFIG_DATA 
IPMI_SOLCONFIG_IP 
IPMI_SOLCONFIG_MAC 

Definition at line 169 of file ipmi_solparm.h.


Function Documentation

int ipmi_sol_clear_lock ipmi_solparm_t solparm,
ipmi_sol_config_t solc,
ipmi_solparm_done_cb  done,
void *  cb_data
 

Definition at line 1382 of file solparm.c.

References ipmi_mem_alloc(), ipmi_mem_free(), ipmi_solparm_set_parm(), lock_cleared(), ipmi_sol_config_s::my_sol, ipmi_sol_config_s::sol_locked, and solparm_get().

Referenced by solparm_config_unlock(), and solparm_unlock_mc().

01386 {
01387     unsigned char data[1];
01388     int           rv;
01389     clear_lock_t  *cl;
01390 
01391     if (solc) {
01392         if (solc->my_sol != solparm)
01393             return EINVAL;
01394 
01395         if (!solc->sol_locked)
01396             return EINVAL;
01397     }
01398 
01399     cl = ipmi_mem_alloc(sizeof(*cl));
01400     if (!cl)
01401         return ENOMEM;
01402     cl->done = done;
01403     cl->cb_data = cb_data;
01404 
01405     data[0] = 0; /* Clear the lock. */
01406     rv = ipmi_solparm_set_parm(solparm, 0, data, 1, lock_cleared, cl);
01407     if (rv) {
01408         ipmi_mem_free(cl);
01409     } else {
01410         if (solc)
01411             solc->sol_locked = 0;
01412         solparm_get(solparm);
01413     }
01414 
01415     return rv;
01416 }

void ipmi_sol_free_config ipmi_sol_config_t config  ) 
 

Definition at line 1419 of file solparm.c.

References ipmi_mem_free().

Referenced by config_destroy_handler(), err_lock_cleared(), got_parm(), ipmi_sol_get_config(), ipmi_sol_set_config(), lock_done(), set_clear(), solparm_config_close(), and solparm_config_get_done().

01420 {
01421     ipmi_mem_free(solc);
01422 }

int ipmi_sol_get_config ipmi_solparm_t solparm,
ipmi_sol_get_config_cb  done,
void *  cb_data
 

Definition at line 1167 of file solparm.c.

References ipmi_mem_alloc(), ipmi_sol_free_config(), ipmi_solparm_set_parm(), lock_done(), solparm_get(), and solparm_put().

Referenced by solparm_config_get().

01170 {
01171     ipmi_sol_config_t *solc;
01172     int               rv;
01173     unsigned char     data[1];
01174 
01175     solc = ipmi_mem_alloc(sizeof(*solc));
01176     if (!solc)
01177         return ENOMEM;
01178     memset(solc, 0, sizeof(*solc));
01179 
01180     solc->curr_parm = 1;
01181     solc->curr_sel = 0;
01182     solc->done = done;
01183     solc->cb_data = cb_data;
01184     solc->my_sol = solparm;
01185     solc->lock_supported = 1; /* Assume it works */
01186 
01187     solparm_get(solparm);
01188 
01189     /* First grab the lock */
01190     data[0] = 1; /* Set in progress. */
01191     rv = ipmi_solparm_set_parm(solparm, 0, data, 1, lock_done, solc);
01192     if (rv) {
01193         ipmi_sol_free_config(solc);
01194         solparm_put(solparm);
01195     }
01196 
01197     return rv;
01198 }

int ipmi_sol_set_config ipmi_solparm_t solparm,
ipmi_sol_config_t config,
ipmi_solparm_done_cb  done,
void *  cb_data
 

Definition at line 1314 of file solparm.c.

References ipmi_sol_config_s::err, ipmi_mem_alloc(), ipmi_sol_free_config(), ipmi_solparm_set_parm(), solparms_s::length, MAX_IPMI_DATA_SIZE, ipmi_sol_config_s::my_sol, set_done(), solparms_s::set_handler, ipmi_sol_config_s::sol_locked, and solparm_get().

Referenced by solparm_config_set().

01318 {
01319     ipmi_sol_config_t *solc;
01320     unsigned char     data[MAX_IPMI_DATA_SIZE];
01321     solparms_t        *lp;
01322     int               rv;
01323 
01324     if (osolc->my_sol != solparm)
01325         return EINVAL;
01326 
01327     if (!osolc->sol_locked)
01328         return EINVAL;
01329 
01330     solc = ipmi_mem_alloc(sizeof(*solc));
01331     if (!solc)
01332         return ENOMEM;
01333 
01334     *solc = *osolc;
01335     solc->err = 0;
01336     solc->sol_locked = 0; /* Set this here, since we will unlock it,
01337                              but we don't want the free operation to
01338                              attempt an unlock */
01339 
01340     solc->curr_parm = 1;
01341     solc->curr_sel = 0;
01342     solc->set_done = done;
01343     solc->cb_data = cb_data;
01344 
01345     /* Parm 1 is known good for writing. */
01346     lp = &(solparms[solc->curr_parm]);
01347     lp->set_handler(solc, lp, data);
01348     rv = ipmi_solparm_set_parm(solparm, solc->curr_parm,
01349                                data, lp->length, set_done, solc);
01350     if (rv) {
01351         ipmi_sol_free_config(solc);
01352     } else {
01353         /* The old config no longer holds the lock. */
01354         osolc->sol_locked = 0;
01355         solparm_get(solparm);
01356     }
01357     return rv;
01358 }

void ipmi_solconfig_data_free void *  data  ) 
 

Definition at line 1764 of file solparm.c.

References ipmi_mem_free().

01765 {
01766     ipmi_mem_free(data);
01767 }

int ipmi_solconfig_enum_idx unsigned int  parm,
int  idx,
const char **  sval
 

Definition at line 1623 of file solparm.c.

01624 {
01625     return ENOSYS;
01626 }

int ipmi_solconfig_enum_val unsigned int  parm,
int  val,
int *  nval,
const char **  sval
 

Definition at line 1537 of file solparm.c.

01539 {
01540     char *rval;
01541     int  rnval;
01542 
01543     switch (parm) {
01544     case 3: /* privilege level */
01545         if (val < 2) {
01546             if (nval)
01547                 *nval = 2;
01548             return EINVAL;
01549         }
01550 
01551         switch (val) {
01552         case 2:
01553             rval = "user";
01554             rnval = 3;
01555             break;
01556         case 3:
01557             rval = "operator";
01558             rnval = 4;
01559             break;
01560         case 4:
01561             rval = "admin";
01562             rnval = 5;
01563             break;
01564         case 5:
01565             rval = "oem";
01566             rnval = -1;
01567             break;
01568         default:
01569             if (*nval)
01570                 *nval = -1;
01571             return EINVAL;
01572         }
01573         break;
01574 
01575     case 8: case 9:
01576         if (val < 6) {
01577             if (nval)
01578                 *nval = 6;
01579             return EINVAL;
01580         }
01581 
01582         switch (val) {
01583         case 6:
01584             rval = "9600";
01585             rnval = 7;
01586             break;
01587         case 7:
01588             rval = "19.2K";
01589             rnval = 8;
01590             break;
01591         case 8:
01592             rval = "38.4K";
01593             rnval = 9;
01594             break;
01595         case 9:
01596             rval = "57.6K";
01597             rnval = 10;
01598             break;
01599         case 10:
01600             rval = "115.2K";
01601             rnval = -1;
01602             break;
01603         default:
01604             if (*nval)
01605                 *nval = -1;
01606             return EINVAL;
01607         }
01608         break;
01609 
01610     default:
01611         return ENOSYS;
01612     }
01613 
01614 
01615     if (sval)
01616         *sval = rval;
01617     if (nval)
01618         *nval = rnval;
01619     return 0;
01620 }

unsigned int ipmi_solconfig_get_char_accumulation_interval ipmi_sol_config_t solc  ) 
 

unsigned int ipmi_solconfig_get_char_send_threshold ipmi_sol_config_t solc  ) 
 

unsigned int ipmi_solconfig_get_enable ipmi_sol_config_t solc  ) 
 

unsigned int ipmi_solconfig_get_force_payload_authentication ipmi_sol_config_t solc  ) 
 

unsigned int ipmi_solconfig_get_force_payload_encryption ipmi_sol_config_t solc  ) 
 

unsigned int ipmi_solconfig_get_non_volatile_bitrate ipmi_sol_config_t solc  ) 
 

int ipmi_solconfig_get_payload_channel ipmi_sol_config_t solc,
unsigned int *  data
 

int ipmi_solconfig_get_port_number ipmi_sol_config_t solc,
unsigned int *  data
 

unsigned int ipmi_solconfig_get_privilege_level ipmi_sol_config_t solc  ) 
 

unsigned int ipmi_solconfig_get_retry_count ipmi_sol_config_t solc  ) 
 

unsigned int ipmi_solconfig_get_retry_interval ipmi_sol_config_t solc  ) 
 

int ipmi_solconfig_get_val ipmi_sol_config_t solc,
unsigned int  parm,
const char **  name,
int *  index,
enum ipmi_solconf_val_type_e valtype,
unsigned int *  ival,
unsigned char **  dval,
unsigned int *  dval_len
 

Definition at line 1629 of file solparm.c.

References solparm_gendata_s::datatype, solparm_gendata_s::dval, solparm_gendata_s::fname, ipmi_mem_alloc(), ipmi_mem_free(), IPMI_SOLCONFIG_BOOL, IPMI_SOLCONFIG_DATA, IPMI_SOLCONFIG_INT, IPMI_SOLCONFIG_IP, IPMI_SOLCONFIG_MAC, solparm_gendata_s::iv_cnt, solparm_gendata_s::ival, NUM_GDATA_ENTRIES, and solparm_gendata_s::u.

01637 {
01638     unsigned int  curr = *index;
01639     unsigned int  count;
01640     int           rv = 0;
01641     unsigned char *data;
01642     unsigned int  data_len;
01643 
01644     if (parm >= NUM_GDATA_ENTRIES)
01645         return EINVAL;
01646     if (valtype)
01647         *valtype = gdata[parm].datatype;
01648     if (name)
01649         *name = gdata[parm].fname;
01650 
01651     if (gdata[parm].iv_cnt) {
01652         count = gdata[parm].iv_cnt(solc);
01653         if (curr >= count) {
01654             *index = -1;
01655             return E2BIG;
01656         }
01657 
01658         if (curr+1 == count)
01659             *index = -1;
01660         else
01661             *index = curr+1;
01662     }
01663 
01664     switch (gdata[parm].datatype) {
01665     case IPMI_SOLCONFIG_INT:
01666     case IPMI_SOLCONFIG_BOOL:
01667         if (!ival)
01668             break;
01669         if (gdata[parm].u.ival.gval)
01670             *ival = gdata[parm].u.ival.gval(solc);
01671         else if (gdata[parm].u.ival.gval_v)
01672             rv = gdata[parm].u.ival.gval_v(solc, ival);
01673         else if (gdata[parm].u.ival.gval_iv)
01674             rv = gdata[parm].u.ival.gval_iv(solc, curr, ival);
01675         else
01676             rv = ENOSYS;
01677         break;
01678 
01679     case IPMI_SOLCONFIG_DATA:
01680     case IPMI_SOLCONFIG_IP:
01681     case IPMI_SOLCONFIG_MAC:
01682         data_len = 0;
01683         if (gdata[parm].u.dval.gval_v)
01684             rv = gdata[parm].u.dval.gval_v(solc, NULL, &data_len);
01685         else if (gdata[parm].u.dval.gval_iv)
01686             rv = gdata[parm].u.dval.gval_iv(solc, curr, NULL, &data_len);
01687         else
01688             rv = ENOSYS;
01689         if (rv && (rv != EBADF))
01690             break;
01691         if (data_len == 0)
01692             data = ipmi_mem_alloc(1);
01693         else
01694             data = ipmi_mem_alloc(data_len);
01695         if (gdata[parm].u.dval.gval_v)
01696             rv = gdata[parm].u.dval.gval_v(solc, data, &data_len);
01697         else if (gdata[parm].u.dval.gval_iv)
01698             rv = gdata[parm].u.dval.gval_iv(solc, curr, data, &data_len);
01699         if (rv) {
01700             ipmi_mem_free(data);
01701             break;
01702         }
01703         if (dval)
01704             *dval = data;
01705         if (dval_len)
01706             *dval_len = data_len;
01707         break;
01708     }
01709 
01710     return rv;
01711 }

unsigned int ipmi_solconfig_get_volatile_bitrate ipmi_sol_config_t solc  ) 
 

const char* ipmi_solconfig_parm_to_str unsigned int  parm  ) 
 

Definition at line 1781 of file solparm.c.

References solparm_gendata_s::fname, and NUM_GDATA_ENTRIES.

01782 {
01783     if (parm >= NUM_GDATA_ENTRIES)
01784         return NULL;
01785     return gdata[parm].fname;
01786 }

int ipmi_solconfig_parm_to_type unsigned int  parm,
enum ipmi_solconf_val_type_e valtype
 

Definition at line 1789 of file solparm.c.

References solparm_gendata_s::datatype, and NUM_GDATA_ENTRIES.

01791 {
01792     if (parm >= NUM_GDATA_ENTRIES)
01793         return EINVAL;
01794     *valtype = gdata[parm].datatype;
01795     return 0;
01796 }

int ipmi_solconfig_set_char_accumulation_interval ipmi_sol_config_t solc,
unsigned int  val
 

int ipmi_solconfig_set_char_send_threshold ipmi_sol_config_t solc,
unsigned int  val
 

int ipmi_solconfig_set_enable ipmi_sol_config_t solc,
unsigned int  val
 

int ipmi_solconfig_set_force_payload_authentication ipmi_sol_config_t solc,
unsigned int  val
 

int ipmi_solconfig_set_force_payload_encryption ipmi_sol_config_t solc,
unsigned int  val
 

int ipmi_solconfig_set_non_volatile_bitrate ipmi_sol_config_t solc,
unsigned int  val
 

int ipmi_solconfig_set_port_number ipmi_sol_config_t solc,
unsigned int  val
 

int ipmi_solconfig_set_privilege_level ipmi_sol_config_t solc,
unsigned int  val
 

int ipmi_solconfig_set_retry_count ipmi_sol_config_t solc,
unsigned int  val
 

int ipmi_solconfig_set_retry_interval ipmi_sol_config_t solc,
unsigned int  val
 

int ipmi_solconfig_set_val ipmi_sol_config_t solc,
unsigned int  parm,
int  index,
unsigned int  ival,
unsigned char *  dval,
unsigned int  dval_len
 

Definition at line 1714 of file solparm.c.

References solparm_gendata_s::dval, IPMI_SOLCONFIG_BOOL, IPMI_SOLCONFIG_DATA, IPMI_SOLCONFIG_INT, IPMI_SOLCONFIG_IP, IPMI_SOLCONFIG_MAC, solparm_gendata_s::iv_cnt, solparm_gendata_s::ival, NUM_GDATA_ENTRIES, and solparm_gendata_s::u.

01720 {
01721     unsigned int  count;
01722     int           rv = 0;
01723 
01724     if (parm >= NUM_GDATA_ENTRIES)
01725         return EINVAL;
01726 
01727     if (gdata[parm].iv_cnt) {
01728         count = gdata[parm].iv_cnt(solc);
01729         if (index >= count)
01730             return E2BIG;
01731     }
01732 
01733     switch (gdata[parm].datatype) {
01734     case IPMI_SOLCONFIG_INT:
01735     case IPMI_SOLCONFIG_BOOL:
01736         if (gdata[parm].u.ival.sval)
01737 
01738             rv = gdata[parm].u.ival.sval(solc, ival);
01739         else if (gdata[parm].u.ival.sval_v)
01740             rv = gdata[parm].u.ival.sval_v(solc, ival);
01741         else if (gdata[parm].u.ival.sval_iv)
01742             rv = gdata[parm].u.ival.sval_iv(solc, index, ival);
01743         else
01744             rv = ENOSYS;
01745         break;
01746 
01747     case IPMI_SOLCONFIG_DATA:
01748     case IPMI_SOLCONFIG_IP:
01749     case IPMI_SOLCONFIG_MAC:
01750         if (gdata[parm].u.dval.sval_v)
01751             rv = gdata[parm].u.dval.sval_v(solc, dval, dval_len);
01752         else if (gdata[parm].u.dval.sval_iv)
01753             rv = gdata[parm].u.dval.sval_iv(solc, index, dval, dval_len);
01754         else
01755             rv = ENOSYS;
01756         break;
01757     }
01758 
01759     return rv;
01760 }

int ipmi_solconfig_set_volatile_bitrate ipmi_sol_config_t solc,
unsigned int  val
 

unsigned int ipmi_solconfig_str_to_parm char *  name  ) 
 

Definition at line 1770 of file solparm.c.

References i, and NUM_GDATA_ENTRIES.

01771 {
01772     int i;
01773     for (i=0; i<NUM_GDATA_ENTRIES; i++) {
01774         if (strcmp(name, gdata[i].fname) == 0)
01775             return i;
01776     }
01777     return -1;
01778 }

int ipmi_solparm_alloc ipmi_mc_t mc,
unsigned int  channel,
ipmi_solparm_t **  new_solparm
 

Definition at line 291 of file solparm.c.

References CHECK_MC_LOCK, ipmi_domain_attr_get_data(), ipmi_domain_attr_put(), ipmi_domain_convert_to_id(), ipmi_domain_get_name(), ipmi_domain_get_os_hnd(), ipmi_domain_get_unique_num(), ipmi_domain_register_attribute(), ipmi_mc_convert_to_id(), ipmi_mc_get_domain(), ipmi_mem_alloc(), ipmi_mem_free(), IPMI_SOLPARM_ATTR_NAME, locked_list_add(), ipmi_domain_s::name, opq_alloc(), opq_destroy(), p, solparm_attr_destroy(), and solparm_attr_init().

Referenced by solparm_new(), and solparm_unlock_mc().

00294 {
00295     ipmi_solparm_t     *solparm = NULL;
00296     int                rv = 0;
00297     ipmi_domain_t      *domain = ipmi_mc_get_domain(mc);
00298     int                p, len;
00299     locked_list_t      *solparml;
00300     ipmi_domain_attr_t *attr;
00301 
00302     CHECK_MC_LOCK(mc);
00303 
00304     rv = ipmi_domain_register_attribute(domain, IPMI_SOLPARM_ATTR_NAME,
00305                                         solparm_attr_init,
00306                                         solparm_attr_destroy,
00307                                         NULL,
00308                                         &attr);
00309     if (rv)
00310         return rv;
00311     solparml = ipmi_domain_attr_get_data(attr);
00312 
00313     solparm = ipmi_mem_alloc(sizeof(*solparm));
00314     if (!solparm) {
00315         rv = ENOMEM;
00316         goto out;
00317     }
00318     memset(solparm, 0, sizeof(*solparm));
00319 
00320     solparm->refcount = 1;
00321     solparm->in_list = 1;
00322     solparm->mc = ipmi_mc_convert_to_id(mc);
00323     solparm->domain = ipmi_domain_convert_to_id(domain);
00324     len = sizeof(solparm->name);
00325     p = ipmi_domain_get_name(domain, solparm->name, len);
00326     len -= p;
00327     snprintf(solparm->name+p, len, ".%d", ipmi_domain_get_unique_num(domain));
00328     solparm->os_hnd = ipmi_domain_get_os_hnd(domain);
00329     solparm->solparm_lock = NULL;
00330     solparm->channel = channel & 0xf;
00331 
00332     solparm->opq = opq_alloc(solparm->os_hnd);
00333     if (!solparm->opq) {
00334         rv = ENOMEM;
00335         goto out;
00336     }
00337 
00338     if (solparm->os_hnd->create_lock) {
00339         rv = solparm->os_hnd->create_lock(solparm->os_hnd,
00340                                           &solparm->solparm_lock);
00341         if (rv)
00342             goto out;
00343     }
00344 
00345     if (! locked_list_add(solparml, solparm, NULL)) {
00346         rv = ENOMEM;
00347         goto out;
00348     }
00349 
00350  out:
00351     if (rv) {
00352         if (solparm) {
00353             if (solparm->opq)
00354                 opq_destroy(solparm->opq);
00355             if (solparm->solparm_lock)
00356                 solparm->os_hnd->destroy_lock(solparm->os_hnd,
00357                                               solparm->solparm_lock);
00358             ipmi_mem_free(solparm);
00359         }
00360     } else {