/openbmc/linux/drivers/crypto/ccp/ |
H A D | psp-dev.c | 25 struct psp_device *psp; in psp_alloc_struct() local 27 psp = devm_kzalloc(dev, sizeof(*psp), GFP_KERNEL); in psp_alloc_struct() 28 if (!psp) in psp_alloc_struct() 31 psp->dev = dev; in psp_alloc_struct() 32 psp->sp = sp; in psp_alloc_struct() 34 snprintf(psp->name, sizeof(psp->name), "psp-%u", sp->ord); in psp_alloc_struct() 36 return psp; in psp_alloc_struct() 41 struct psp_device *psp = data; in psp_irq_handler() local 45 status = ioread32(psp->io_regs + psp->vdata->intsts_reg); in psp_irq_handler() 48 iowrite32(status, psp->io_regs + psp->vdata->intsts_reg); in psp_irq_handler() [all …]
|
H A D | platform-access.c | 47 struct psp_device *psp = psp_get_master_device(); in psp_check_platform_access_status() local 49 if (!psp || !psp->platform_access_data) in psp_check_platform_access_status() 59 struct psp_device *psp = psp_get_master_device(); in psp_send_platform_access_msg() local 66 if (!psp || !psp->platform_access_data) in psp_send_platform_access_msg() 69 pa_dev = psp->platform_access_data; in psp_send_platform_access_msg() 75 cmd = psp->io_regs + pa_dev->vdata->cmdresp_reg; in psp_send_platform_access_msg() 76 lo = psp->io_regs + pa_dev->vdata->cmdbuff_addr_lo_reg; in psp_send_platform_access_msg() 77 hi = psp->io_regs + pa_dev->vdata->cmdbuff_addr_hi_reg; in psp_send_platform_access_msg() 82 dev_dbg(psp->dev, "platform mailbox is in recovery\n"); in psp_send_platform_access_msg() 88 dev_dbg(psp->dev, "platform mailbox is not done processing command\n"); in psp_send_platform_access_msg() [all …]
|
H A D | tee-dev.c | 192 int tee_dev_init(struct psp_device *psp) in tee_dev_init() argument 194 struct device *dev = psp->dev; in tee_dev_init() 203 psp->tee_data = tee; in tee_dev_init() 206 tee->psp = psp; in tee_dev_init() 208 tee->io_regs = psp->io_regs; in tee_dev_init() 210 tee->vdata = (struct tee_vdata *)psp->vdata->tee; in tee_dev_init() 228 psp->tee_data = NULL; in tee_dev_init() 235 void tee_dev_destroy(struct psp_device *psp) in tee_dev_destroy() argument 237 struct psp_tee_device *tee = psp->tee_data; in tee_dev_destroy() 351 struct psp_device *psp = psp_get_master_device(); in psp_tee_process_cmd() local [all …]
|
H A D | dbc.c | 13 u32 psp; member 54 for (i = 0; error_codes[i].psp; i++) { in send_dbc_cmd() 55 if (dbc_dev->mbox->req.header.status == error_codes[i].psp) in send_dbc_cmd() 101 void dbc_dev_destroy(struct psp_device *psp) in dbc_dev_destroy() argument 103 struct psp_dbc_device *dbc_dev = psp->dbc_data; in dbc_dev_destroy() 110 psp->dbc_data = NULL; in dbc_dev_destroy() 194 int dbc_dev_init(struct psp_device *psp) in dbc_dev_init() argument 196 struct device *dev = psp->dev; in dbc_dev_init() 200 if (!PSP_FEATURE(psp, DBC)) in dbc_dev_init() 214 psp->dbc_data = dbc_dev; in dbc_dev_init() [all …]
|
H A D | sp-pci.c | 47 struct psp_device *psp = sp->psp_data; \ 49 return sysfs_emit(buf, "%d\n", (psp->capability & bit) > 0); \ 85 struct psp_device *psp = sp->psp_data; in psp_security_is_visible() local 87 if (psp && (psp->capability & PSP_CAPABILITY_PSP_SECURITY_REPORTING)) in psp_security_is_visible() 103 struct psp_device *psp = sp->psp_data; \ 104 unsigned int val = ioread32(psp->io_regs + _offset); \ 112 version_attribute_show(bootloader_version, psp->vdata->bootloader_info_reg) 114 version_attribute_show(tee_version, psp->vdata->tee->info_reg) 127 struct psp_device *psp = sp->psp_data; in psp_firmware_is_visible() local 130 if (!psp) in psp_firmware_is_visible() [all …]
|
/openbmc/linux/drivers/gpu/drm/amd/amdgpu/ |
H A D | amdgpu_psp.h | 111 int (*init_microcode)(struct psp_context *psp); 112 int (*wait_for_bootloader)(struct psp_context *psp); 113 int (*bootloader_load_kdb)(struct psp_context *psp); 114 int (*bootloader_load_spl)(struct psp_context *psp); 115 int (*bootloader_load_sysdrv)(struct psp_context *psp); 116 int (*bootloader_load_soc_drv)(struct psp_context *psp); 117 int (*bootloader_load_intf_drv)(struct psp_context *psp); 118 int (*bootloader_load_dbg_drv)(struct psp_context *psp); 119 int (*bootloader_load_ras_drv)(struct psp_context *psp); 120 int (*bootloader_load_sos)(struct psp_context *psp); [all …]
|
H A D | amdgpu_psp.c | 48 static int psp_load_smu_fw(struct psp_context *psp); 49 static int psp_rap_terminate(struct psp_context *psp); 50 static int psp_securedisplay_terminate(struct psp_context *psp); 52 static int psp_ring_init(struct psp_context *psp, in psp_ring_init() argument 57 struct amdgpu_device *adev = psp->adev; in psp_ring_init() 59 ring = &psp->km_ring; in psp_ring_init() 94 static void psp_check_pmfw_centralized_cstate_management(struct psp_context *psp) in psp_check_pmfw_centralized_cstate_management() argument 96 struct amdgpu_device *adev = psp->adev; in psp_check_pmfw_centralized_cstate_management() 99 psp->pmfw_centralized_cstate_management = false; in psp_check_pmfw_centralized_cstate_management() 115 psp->pmfw_centralized_cstate_management = true; in psp_check_pmfw_centralized_cstate_management() [all …]
|
H A D | psp_v13_0_4.c | 35 static int psp_v13_0_4_init_microcode(struct psp_context *psp) in psp_v13_0_4_init_microcode() argument 37 struct amdgpu_device *adev = psp->adev; in psp_v13_0_4_init_microcode() 45 err = psp_init_toc_microcode(psp, ucode_prefix); in psp_v13_0_4_init_microcode() 48 err = psp_init_ta_microcode(psp, ucode_prefix); in psp_v13_0_4_init_microcode() 59 static bool psp_v13_0_4_is_sos_alive(struct psp_context *psp) in psp_v13_0_4_is_sos_alive() argument 61 struct amdgpu_device *adev = psp->adev; in psp_v13_0_4_is_sos_alive() 69 static int psp_v13_0_4_wait_for_bootloader(struct psp_context *psp) in psp_v13_0_4_wait_for_bootloader() argument 71 struct amdgpu_device *adev = psp->adev; in psp_v13_0_4_wait_for_bootloader() 79 ret = psp_wait_for(psp, in psp_v13_0_4_wait_for_bootloader() 92 static int psp_v13_0_4_bootloader_load_component(struct psp_context *psp, in psp_v13_0_4_bootloader_load_component() argument [all …]
|
H A D | psp_v13_0.c | 77 static int psp_v13_0_init_microcode(struct psp_context *psp) in psp_v13_0_init_microcode() argument 79 struct amdgpu_device *adev = psp->adev; in psp_v13_0_init_microcode() 87 err = psp_init_sos_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode() 92 err = psp_init_ta_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode() 103 err = psp_init_toc_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode() 106 err = psp_init_ta_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode() 114 err = psp_init_sos_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode() 118 err = psp_init_ta_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode() 129 static bool psp_v13_0_is_sos_alive(struct psp_context *psp) in psp_v13_0_is_sos_alive() argument 131 struct amdgpu_device *adev = psp->adev; in psp_v13_0_is_sos_alive() [all …]
|
H A D | psp_v11_0.c | 88 static int psp_v11_0_init_microcode(struct psp_context *psp) in psp_v11_0_init_microcode() argument 90 struct amdgpu_device *adev = psp->adev; in psp_v11_0_init_microcode() 101 err = psp_init_sos_microcode(psp, ucode_prefix); in psp_v11_0_init_microcode() 104 err = psp_init_asd_microcode(psp, ucode_prefix); in psp_v11_0_init_microcode() 107 err = psp_init_ta_microcode(psp, ucode_prefix); in psp_v11_0_init_microcode() 108 adev->psp.securedisplay_context.context.bin_desc.size_bytes = 0; in psp_v11_0_init_microcode() 113 err = psp_init_sos_microcode(psp, ucode_prefix); in psp_v11_0_init_microcode() 116 err = psp_init_asd_microcode(psp, ucode_prefix); in psp_v11_0_init_microcode() 119 err = psp_init_ta_microcode(psp, ucode_prefix); in psp_v11_0_init_microcode() 120 adev->psp.securedisplay_context.context.bin_desc.size_bytes = 0; in psp_v11_0_init_microcode() [all …]
|
H A D | psp_v3_1.c | 54 static int psp_v3_1_ring_stop(struct psp_context *psp, 57 static int psp_v3_1_init_microcode(struct psp_context *psp) in psp_v3_1_init_microcode() argument 59 struct amdgpu_device *adev = psp->adev; in psp_v3_1_init_microcode() 67 err = psp_init_sos_microcode(psp, ucode_prefix); in psp_v3_1_init_microcode() 71 err = psp_init_asd_microcode(psp, ucode_prefix); in psp_v3_1_init_microcode() 78 static int psp_v3_1_bootloader_load_sysdrv(struct psp_context *psp) in psp_v3_1_bootloader_load_sysdrv() argument 82 struct amdgpu_device *adev = psp->adev; in psp_v3_1_bootloader_load_sysdrv() 93 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35), in psp_v3_1_bootloader_load_sysdrv() 99 psp_copy_fw(psp, psp->sys.start_addr, psp->sys.size_bytes); in psp_v3_1_bootloader_load_sysdrv() 103 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v3_1_bootloader_load_sysdrv() [all …]
|
H A D | psp_v12_0.c | 48 static int psp_v12_0_init_microcode(struct psp_context *psp) in psp_v12_0_init_microcode() argument 50 struct amdgpu_device *adev = psp->adev; in psp_v12_0_init_microcode() 57 err = psp_init_asd_microcode(psp, ucode_prefix); in psp_v12_0_init_microcode() 61 err = psp_init_ta_microcode(psp, ucode_prefix); in psp_v12_0_init_microcode() 67 adev->psp.securedisplay_context.context.bin_desc.size_bytes = 0; in psp_v12_0_init_microcode() 72 static int psp_v12_0_bootloader_load_sysdrv(struct psp_context *psp) in psp_v12_0_bootloader_load_sysdrv() argument 76 struct amdgpu_device *adev = psp->adev; in psp_v12_0_bootloader_load_sysdrv() 87 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35), in psp_v12_0_bootloader_load_sysdrv() 93 psp_copy_fw(psp, psp->sys.start_addr, psp->sys.size_bytes); in psp_v12_0_bootloader_load_sysdrv() 97 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v12_0_bootloader_load_sysdrv() [all …]
|
H A D | psp_v10_0.c | 47 static int psp_v10_0_init_microcode(struct psp_context *psp) in psp_v10_0_init_microcode() argument 49 struct amdgpu_device *adev = psp->adev; in psp_v10_0_init_microcode() 56 err = psp_init_asd_microcode(psp, ucode_prefix); in psp_v10_0_init_microcode() 60 err = psp_init_ta_microcode(psp, ucode_prefix); in psp_v10_0_init_microcode() 63 (psp->securedisplay_context.context.bin_desc.fw_version >= 0x27000008)) { in psp_v10_0_init_microcode() 64 adev->psp.securedisplay_context.context.bin_desc.size_bytes = 0; in psp_v10_0_init_microcode() 69 static int psp_v10_0_ring_create(struct psp_context *psp, in psp_v10_0_ring_create() argument 74 struct psp_ring *ring = &psp->km_ring; in psp_v10_0_ring_create() 75 struct amdgpu_device *adev = psp->adev; in psp_v10_0_ring_create() 95 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64), in psp_v10_0_ring_create() [all …]
|
H A D | amdgpu_securedisplay.c | 48 void psp_securedisplay_parse_resp_status(struct psp_context *psp, in psp_securedisplay_parse_resp_status() argument 55 dev_err(psp->adev->dev, "Secure display: Generic Failure."); in psp_securedisplay_parse_resp_status() 58 dev_err(psp->adev->dev, "Secure display: Invalid Parameter."); in psp_securedisplay_parse_resp_status() 61 dev_err(psp->adev->dev, "Secure display: Null Pointer."); in psp_securedisplay_parse_resp_status() 64 dev_err(psp->adev->dev, "Secure display: Failed to write to I2C."); in psp_securedisplay_parse_resp_status() 67 dev_err(psp->adev->dev, "Secure display: Failed to Read DIO Scratch Register."); in psp_securedisplay_parse_resp_status() 70 dev_err(psp->adev->dev, "Secure display: Failed to Read CRC"); in psp_securedisplay_parse_resp_status() 73 dev_err(psp->adev->dev, "Secure display: Failed to initialize I2C."); in psp_securedisplay_parse_resp_status() 76 dev_err(psp->adev->dev, "Secure display: Failed to parse status: %d\n", status); in psp_securedisplay_parse_resp_status() 80 void psp_prep_securedisplay_cmd_buf(struct psp_context *psp, struct ta_securedisplay_cmd **cmd, in psp_prep_securedisplay_cmd_buf() argument [all …]
|
H A D | psp_v11_0_8.c | 31 static int psp_v11_0_8_ring_stop(struct psp_context *psp, in psp_v11_0_8_ring_stop() argument 35 struct amdgpu_device *adev = psp->adev; in psp_v11_0_8_ring_stop() 44 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101), in psp_v11_0_8_ring_stop() 53 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64), in psp_v11_0_8_ring_stop() 60 static int psp_v11_0_8_ring_create(struct psp_context *psp, in psp_v11_0_8_ring_create() argument 65 struct psp_ring *ring = &psp->km_ring; in psp_v11_0_8_ring_create() 66 struct amdgpu_device *adev = psp->adev; in psp_v11_0_8_ring_create() 69 ret = psp_v11_0_8_ring_stop(psp, ring_type); in psp_v11_0_8_ring_create() 90 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101), in psp_v11_0_8_ring_create() 95 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64), in psp_v11_0_8_ring_create() [all …]
|
H A D | amdgpu_psp_ta.h | 28 #define psp_fn_ta_initialize(psp) ((psp)->ta_funcs->fn_ta_initialize((psp))) argument 29 #define psp_fn_ta_invoke(psp, ta_cmd_id) ((psp)->ta_funcs->fn_ta_invoke((psp), (ta_cmd_id))) argument 30 #define psp_fn_ta_terminate(psp) ((psp)->ta_funcs->fn_ta_terminate((psp))) argument
|
H A D | amdgpu_psp_ta.c | 72 static void set_ta_context_funcs(struct psp_context *psp, in set_ta_context_funcs() argument 78 *pcontext = &psp->ras_context.context; in set_ta_context_funcs() 79 psp->ta_funcs = &ras_ta_funcs; in set_ta_context_funcs() 153 struct psp_context *psp = &adev->psp; in ta_if_load_debugfs_write() local 183 set_ta_context_funcs(psp, ta_type, &context); in ta_if_load_debugfs_write() 185 if (!psp->ta_funcs || !psp->ta_funcs->fn_ta_terminate) { in ta_if_load_debugfs_write() 196 ret = psp_ta_init_shared_buf(psp, &context->mem_context); in ta_if_load_debugfs_write() 203 ret = psp_fn_ta_terminate(psp); in ta_if_load_debugfs_write() 219 if (!psp->ta_funcs->fn_ta_initialize) { in ta_if_load_debugfs_write() 225 ret = psp_fn_ta_initialize(psp); in ta_if_load_debugfs_write() [all …]
|
/openbmc/linux/drivers/gpu/drm/amd/display/modules/hdcp/ |
H A D | hdcp_psp.c | 51 struct psp_context *psp = hdcp->config.psp.handle; in remove_display_from_topology_v2() local 57 dtm_cmd = (struct ta_dtm_shared_memory *)psp->dtm_context.context.mem_context.shared_buf; in remove_display_from_topology_v2() 62 mutex_lock(&psp->dtm_context.mutex); in remove_display_from_topology_v2() 71 psp_dtm_invoke(psp, dtm_cmd->cmd_id); in remove_display_from_topology_v2() 80 mutex_unlock(&psp->dtm_context.mutex); in remove_display_from_topology_v2() 87 struct psp_context *psp = hdcp->config.psp.handle; in remove_display_from_topology_v3() local 93 dtm_cmd = (struct ta_dtm_shared_memory *)psp->dtm_context.context.mem_context.shared_buf; in remove_display_from_topology_v3() 98 mutex_lock(&psp->dtm_context.mutex); in remove_display_from_topology_v3() 107 psp_dtm_invoke(psp, dtm_cmd->cmd_id); in remove_display_from_topology_v3() 108 mutex_unlock(&psp->dtm_context.mutex); in remove_display_from_topology_v3() [all …]
|
/openbmc/linux/drivers/power/supply/ |
H A D | acer_a500_battery.c | 30 .psp = POWER_SUPPLY_PROP_ ## _psp, \ 35 enum power_supply_property psp; member 96 enum power_supply_property psp, in a500_battery_unit_adjustment() argument 102 switch (psp) { in a500_battery_unit_adjustment() 119 "%s: no need for unit conversion %d\n", __func__, psp); in a500_battery_unit_adjustment() 124 enum power_supply_property psp) in a500_battery_get_ec_data_index() argument 133 if (psp == POWER_SUPPLY_PROP_PRESENT) in a500_battery_get_ec_data_index() 134 psp = POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN; in a500_battery_get_ec_data_index() 137 if (psp == ec_data[i].psp) in a500_battery_get_ec_data_index() 140 dev_dbg(dev, "%s: invalid property %u\n", __func__, psp); in a500_battery_get_ec_data_index() [all …]
|
H A D | sbs-battery.c | 87 .psp = _psp, \ 94 enum power_supply_property psp; member 222 enum power_supply_property psp) in sbs_get_string_buf() argument 227 if (string_properties[i] == psp) in sbs_get_string_buf() 518 struct i2c_client *client, enum power_supply_property psp, in sbs_get_ti_battery_presence_and_health() argument 530 if (psp == POWER_SUPPLY_PROP_PRESENT) in sbs_get_ti_battery_presence_and_health() 537 if (psp == POWER_SUPPLY_PROP_PRESENT) in sbs_get_ti_battery_presence_and_health() 553 if (psp == POWER_SUPPLY_PROP_PRESENT) { in sbs_get_ti_battery_presence_and_health() 559 } else if (psp == POWER_SUPPLY_PROP_HEALTH) { in sbs_get_ti_battery_presence_and_health() 576 struct i2c_client *client, enum power_supply_property psp, in sbs_get_battery_presence_and_health() argument [all …]
|
H A D | ip5xxx_power.c | 313 enum power_supply_property psp, in ip5xxx_battery_get_property() argument 324 switch (psp) { in ip5xxx_battery_get_property() 431 enum power_supply_property psp, in ip5xxx_battery_set_property() argument 442 switch (psp) { in ip5xxx_battery_set_property() 481 enum power_supply_property psp) in ip5xxx_battery_property_is_writeable() argument 483 return psp == POWER_SUPPLY_PROP_STATUS || in ip5xxx_battery_property_is_writeable() 484 psp == POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN || in ip5xxx_battery_property_is_writeable() 485 psp == POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT || in ip5xxx_battery_property_is_writeable() 486 psp == POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE; in ip5xxx_battery_property_is_writeable() 505 enum power_supply_property psp, in ip5xxx_boost_get_property() argument [all …]
|
/openbmc/linux/arch/ia64/kernel/ |
H A D | mca_drv.c | 378 pal_processor_state_info_t *psp = in is_mca_global() local 403 if (psp->tc || psp->cc || psp->rc || psp->uc) in is_mca_global() 581 pal_processor_state_info_t *psp = in recover_from_platform_error() local 584 if (psp->bc && pbci->eb && pbci->bsi == 0) { in recover_from_platform_error() 606 } else if (psp->cc && !psp->bc) { /* Cache error */ in recover_from_platform_error() 657 pal_processor_state_info_t *psp = in recover_from_processor_error() local 668 if (psp->cm == 1) in recover_from_processor_error() 674 if (psp->us || psp->ci == 0) in recover_from_processor_error() 680 if (psp->tc && !(psp->cc || psp->bc || psp->rc || psp->uc)) in recover_from_processor_error() 691 if (psp->cc == 0 && (psp->bc == 0 || pbci == NULL)) in recover_from_processor_error()
|
/openbmc/linux/drivers/staging/greybus/ |
H A D | power_supply.c | 106 static int get_psp_from_gb_prop(int gb_prop, enum power_supply_property *psp) in get_psp_from_gb_prop() argument 305 *psp = (enum power_supply_property)prop; in get_psp_from_gb_prop() 316 enum power_supply_property psp) in get_psy_prop() argument 321 if (gbpsy->props[i].prop == psp) in get_psy_prop() 327 enum power_supply_property psp) in is_psy_prop_writeable() argument 331 prop = get_psy_prop(gbpsy, psp); in is_psy_prop_writeable() 337 static int is_prop_valint(enum power_supply_property psp) in is_prop_valint() argument 339 return ((psp < POWER_SUPPLY_PROP_MODEL_NAME) ? 1 : 0); in is_prop_valint() 513 enum power_supply_property psp; in gb_power_supply_prop_descriptors_get() local 539 ret = get_psp_from_gb_prop(resp->props[i].property, &psp); in gb_power_supply_prop_descriptors_get() [all …]
|
/openbmc/linux/include/linux/ |
H A D | power_supply.h | 257 enum power_supply_property psp, 260 enum power_supply_property psp, 268 enum power_supply_property psp); 802 enum power_supply_property psp); 804 enum power_supply_property psp, 825 enum power_supply_property psp, 860 enum power_supply_property psp, 864 enum power_supply_property psp, 868 enum power_supply_property psp, in power_supply_set_property() argument 873 enum power_supply_property psp); [all …]
|
/openbmc/linux/drivers/usb/misc/ |
H A D | apple-mfi-fastcharge.c | 92 enum power_supply_property psp, in apple_mfi_fc_get_property() argument 97 dev_dbg(&mfi->udev->dev, "prop: %d\n", psp); in apple_mfi_fc_get_property() 99 switch (psp) { in apple_mfi_fc_get_property() 114 enum power_supply_property psp, in apple_mfi_fc_set_property() argument 120 dev_dbg(&mfi->udev->dev, "prop: %d\n", psp); in apple_mfi_fc_set_property() 128 switch (psp) { in apple_mfi_fc_set_property() 143 enum power_supply_property psp) in apple_mfi_fc_property_is_writeable() argument 145 switch (psp) { in apple_mfi_fc_property_is_writeable()
|