ó ¹µiVc@s£dZddlZddlmZmZddlmZmZmZddl m Z ddlm Z ddl m Z mZmZde fd „ƒYZd „ZdS( s3 OpenBoot Firmware firmware backend for pybootmgmt iÿÿÿÿN(ttesting_getpropttesting_setprop(tBootmgmtPropertyReadErrortBootmgmtPropertyWriteErrort!BootmgmtUnsupportedOperationError(tSystemFirmware(tpysol(tdi_find_prom_prop_boolt(di_prom_disklist_to_devfs_logical_tuplestdi_find_prom_prop_stringt OBPFirmwarecBsGeZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(c Cs^t|ƒ\}}|r|S|tjkrdytddƒSWqdtk r`}td|ƒ‚qdXn|tjkrÍy2t|dƒ}|d kr t dƒ‚n|SWqÇtk rÉ}td|ƒ‚qÇXnú|tj krÇyt|dƒ}Wntk r}tdƒ‚nX|j d||fƒ|d krBtdƒ‚n|j dƒ}yt |ƒ}Wntk r‚}tdƒ‚nX|j d||fƒg|D]} | d d ^q } dj| ƒS|tjkrìtt|ƒj|ƒSy-tj|ƒ} | d krd S| jjSWn,tk rG}td ||jfƒ‚nXtt|ƒj|ƒS(s<Returns values from /options, plus some properties. tgpts/packages/disk-labelsError accessing PROM propertiess/chosensProperty not supporteds%s from fw is `%s't sphyslog %s is `%s'iits"Couldn't read PROM option `%s': %sN(RRtPROP_GPT_SUPPORTEDRtIOErrorRtPROP_BOOT_RECOVERY_LISTR tNoneRtPROP_BOOT_POOL_LISTt_debugtsplitRtjointPROP_BOOT_DEVICEtsuperR tgetpropRtprom_getoptiontopio_utbtstrerror( tselftpropnametrettvaltioerrtpropvaltbp_proptbp_propstphyslog_tuplestelemtbplisttpromio((s'../../common/bootmgmt/backend/fw/obp.pyR)s^   !  cCsct||ƒ}|rdSytj||ƒWn/tk r^}td|||jfƒ‚nXdS(Ns0Couldn't write PROM option `%s' (value `%s'): %s(RRtprom_setoptionRRR(RRtvalueRR!((s'../../common/bootmgmt/backend/fw/obp.pytsetpropnscCsdS(N((RR((s'../../common/bootmgmt/backend/fw/obp.pytdelprop|scCsGytj||ƒWn,tk rB}td||jfƒ‚nXdS(Ns)Couldn't read secure PROM option `%s': %s(Rtprom_wankey_setRRR(RRt propvalueR!((s'../../common/bootmgmt/backend/fw/obp.pytset_secure_prop€s cCsPytj|ƒWn8tk rK}|jtjkrLtd|ƒ‚qLnXdS(NsiCouldn't delete secure PROM option `%s': Either there isn't enough space or the option could not be found(Rtprom_wankey_deleteRterrnotENOSPCR(RRR!((s'../../common/bootmgmt/backend/fw/obp.pytdelete_secure_propˆscCs+d}xtjƒD]}|d7}qW|S(s)Default is to return length == 0 ii(Rtprom_nextoption(Rtcountertx((s'../../common/bootmgmt/backend/fw/obp.pyt__len__’scCs tjƒS(s#Iterate on the empty list. (RR4(R((s'../../common/bootmgmt/backend/fw/obp.pyt__iter__šs( t__name__t __module__RR+R,R/R3R7R8(((s'../../common/bootmgmt/backend/fw/obp.pyR (s E    cCstS(N(R (((s'../../common/bootmgmt/backend/fw/obp.pytfirmware_backend s(t__doc__R1tbootmgmt.backend.fwRRtbootmgmtRRRtbootmgmt.bootinfoRRtbootmgmt.pysolRRR R R;(((s'../../common/bootmgmt/backend/fw/obp.pyts x