/** * pm80xx_set_thermal_config - support the thermal configuration * @pm8001_ha: our hba card information. */ int pm80xx_set_thermal_config(struct pm8001_hba_info *pm8001_ha) { struct set_ctrl_cfg_req payload; struct inbound_queue_table *circularQ; int rc; u32 tag; u32 opc = OPC_INB_SET_CONTROLLER_CONFIG; memset(&payload, 0, sizeof(struct set_ctrl_cfg_req)); rc = pm8001_tag_alloc(pm8001_ha, &tag); if (rc) return -1; circularQ = &pm8001_ha->inbnd_q_tbl[0]; payload.tag = cpu_to_le32(tag); payload.cfg_pg[0] = (THERMAL_LOG_ENABLE << 9) | (THERMAL_ENABLE << 8) | THERMAL_OP_CODE; payload.cfg_pg[1] = (LTEMPHIL << 24) | (RTEMPHIL << 8); rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); if (rc) pm8001_tag_free(pm8001_ha, tag); return rc; }
/** * pm80xx_set_sas_protocol_timer_config - support the SAS Protocol * Timer configuration page * @pm8001_ha: our hba card information. */ static int pm80xx_set_sas_protocol_timer_config(struct pm8001_hba_info *pm8001_ha) { struct set_ctrl_cfg_req payload; struct inbound_queue_table *circularQ; SASProtocolTimerConfig_t SASConfigPage; int rc; u32 tag; u32 opc = OPC_INB_SET_CONTROLLER_CONFIG; memset(&payload, 0, sizeof(struct set_ctrl_cfg_req)); memset(&SASConfigPage, 0, sizeof(SASProtocolTimerConfig_t)); rc = pm8001_tag_alloc(pm8001_ha, &tag); if (rc) return -1; circularQ = &pm8001_ha->inbnd_q_tbl[0]; payload.tag = cpu_to_le32(tag); SASConfigPage.pageCode = SAS_PROTOCOL_TIMER_CONFIG_PAGE; SASConfigPage.MST_MSI = 3 << 15; SASConfigPage.STP_SSP_MCT_TMO = (STP_MCT_TMO << 16) | SSP_MCT_TMO; SASConfigPage.STP_FRM_TMO = (SAS_MAX_OPEN_TIME << 24) | (SMP_MAX_CONN_TIMER << 16) | STP_FRM_TIMER; SASConfigPage.STP_IDLE_TMO = STP_IDLE_TIME; if (SASConfigPage.STP_IDLE_TMO > 0x3FFFFFF) SASConfigPage.STP_IDLE_TMO = 0x3FFFFFF; SASConfigPage.OPNRJT_RTRY_INTVL = (SAS_MFD << 16) | SAS_OPNRJT_RTRY_INTVL; SASConfigPage.Data_Cmd_OPNRJT_RTRY_TMO = (SAS_DOPNRJT_RTRY_TMO << 16) | SAS_COPNRJT_RTRY_TMO; SASConfigPage.Data_Cmd_OPNRJT_RTRY_THR = (SAS_DOPNRJT_RTRY_THR << 16) | SAS_COPNRJT_RTRY_THR; SASConfigPage.MAX_AIP = SAS_MAX_AIP; PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.pageCode " "0x%08x\n", SASConfigPage.pageCode)); PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.MST_MSI " " 0x%08x\n", SASConfigPage.MST_MSI)); PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.STP_SSP_MCT_TMO " " 0x%08x\n", SASConfigPage.STP_SSP_MCT_TMO)); PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.STP_FRM_TMO " " 0x%08x\n", SASConfigPage.STP_FRM_TMO)); PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.STP_IDLE_TMO " " 0x%08x\n", SASConfigPage.STP_IDLE_TMO)); PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.OPNRJT_RTRY_INTVL " " 0x%08x\n", SASConfigPage.OPNRJT_RTRY_INTVL)); PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.Data_Cmd_OPNRJT_RTRY_TMO " " 0x%08x\n", SASConfigPage.Data_Cmd_OPNRJT_RTRY_TMO)); PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.Data_Cmd_OPNRJT_RTRY_THR " " 0x%08x\n", SASConfigPage.Data_Cmd_OPNRJT_RTRY_THR)); PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.MAX_AIP " " 0x%08x\n", SASConfigPage.MAX_AIP)); memcpy(&payload.cfg_pg, &SASConfigPage, sizeof(SASProtocolTimerConfig_t)); rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); if (rc) pm8001_tag_free(pm8001_ha, tag); return rc; }
void pm8001_tag_init(struct pm8001_hba_info *pm8001_ha) { int i; for (i = 0; i < pm8001_ha->tags_num; ++i) pm8001_tag_free(pm8001_ha, i); }