int onlp_fani_info_get(onlp_oid_t id, onlp_fan_info_t* rv) { *rv = fans__[ONLP_OID_ID_GET(id)]; rv->caps |= ONLP_FAN_CAPS_GET_RPM; int len; char direction[16] = {0}; int fid = ONLP_OID_ID_GET(id); /* Read the current airflow direction */ onlp_file_read((uint8_t*)direction, sizeof(direction), &len, SYS_HWMON_PREFIX "/fan_dir"); #define FAN_DIR_F2B "front-to-back" #define FAN_DIR_B2F "back-to-front" if(!strncmp(direction, FAN_DIR_F2B, strlen(FAN_DIR_F2B))) { rv->status |= ONLP_FAN_STATUS_F2B; rv->caps |= ONLP_FAN_CAPS_F2B; } else if(!strncmp(direction, FAN_DIR_B2F, strlen(FAN_DIR_B2F))) { rv->status |= ONLP_FAN_STATUS_B2F; rv->caps |= ONLP_FAN_CAPS_B2F; } else { AIM_LOG_WARN("Invalid fan direction: '%s'", direction); } switch(fid) { case FAN_ID_FAN1: case FAN_ID_FAN2: case FAN_ID_FAN3: case FAN_ID_FAN4: { if(rv->status & ONLP_FAN_STATUS_F2B) { return sys_fan_info_get__(rv, fid); } if(rv->status & ONLP_FAN_STATUS_B2F) { return sys_fan_info_get__(rv, fid+4); } return ONLP_STATUS_E_INTERNAL; } case FAN_ID_FAN5: case FAN_ID_FAN6: { return psu_fan_info_get__(rv, fid); } } return ONLP_STATUS_E_INVALID; }
int onlp_fani_info_get(onlp_oid_t id, onlp_fan_info_t* rv) { *rv = fans__[ONLP_OID_ID_GET(id)]; rv->caps |= ONLP_FAN_CAPS_GET_RPM; int direction = powerpc_quanta_lb9_system_airflow_get(); int fid = ONLP_OID_ID_GET(id); if(direction == 0) { rv->status |= ONLP_FAN_STATUS_F2B; rv->caps |= ONLP_FAN_CAPS_F2B; } else { rv->status |= ONLP_FAN_STATUS_B2F; rv->caps |= ONLP_FAN_CAPS_B2F; } switch(fid) { case FAN_ID_FAN1: case FAN_ID_FAN2: case FAN_ID_FAN3: case FAN_ID_FAN4: { return sys_fan_info_get__(rv, fid); } case FAN_ID_FAN5: case FAN_ID_FAN6: { return psu_fan_info_get__(rv, fid); } } return ONLP_STATUS_E_INVALID; }