#include <OpenIPMI/ipmi_types.h>Go to the source code of this file.
|
|
Definition at line 114 of file ipmi_solparm.h. |
|
|
Definition at line 115 of file ipmi_solparm.h. |
|
|
Definition at line 113 of file ipmi_solparm.h. |
|
|
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(). |
|
|
Definition at line 117 of file ipmi_solparm.h. |
|
|
Definition at line 119 of file ipmi_solparm.h. |
|
|
Definition at line 120 of file ipmi_solparm.h. Referenced by got_parm(), and set_done(). |
|
|
Definition at line 116 of file ipmi_solparm.h. |
|
|
Definition at line 112 of file ipmi_solparm.h. |
|
|
Definition at line 118 of file ipmi_solparm.h. |
|
|
Definition at line 125 of file ipmi_solparm.h. |
|
|
Definition at line 132 of file ipmi_solparm.h. |
|
|
Definition at line 48 of file ipmi_solparm.h. |
|
|
Definition at line 91 of file ipmi_solparm.h. |
|
|
Definition at line 53 of file ipmi_solparm.h. |
|
|
Definition at line 44 of file ipmi_solparm.h. |
|
|
Definition at line 169 of file ipmi_solparm.h. 00169 { IPMI_SOLCONFIG_INT, IPMI_SOLCONFIG_BOOL, 00170 IPMI_SOLCONFIG_DATA, 00171 IPMI_SOLCONFIG_IP, IPMI_SOLCONFIG_MAC };
|
|
||||||||||||||||||||
|
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 }
|
|
|
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 }
|
|
||||||||||||||||
|
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 }
|
|
||||||||||||||||||||
|
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 }
|
|
|
Definition at line 1764 of file solparm.c. References ipmi_mem_free(). 01765 { 01766 ipmi_mem_free(data); 01767 }
|
|
||||||||||||||||
|
Definition at line 1623 of file solparm.c.
|
|
||||||||||||||||||||
|
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 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||
|
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 }
|
|
|
|
|
|
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 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
||||||||||||||||||||||||||||
|
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 }
|
|
||||||||||||
|
|
|
|
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 }
|
|
||||||||||||||||
|
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 { |