| 1029 | } |
| 1030 | |
| 1031 | static int |
| 1032 | cpufreq_settings_sysctl(SYSCTL_HANDLER_ARGS) |
| 1033 | { |
| 1034 | device_t dev; |
| 1035 | struct cf_setting *sets; |
| 1036 | struct sbuf sb; |
| 1037 | int error, i, set_count; |
| 1038 | |
| 1039 | dev = oidp->oid_arg1; |
| 1040 | sbuf_new(&sb, NULL, 128, SBUF_AUTOEXTEND); |
| 1041 | |
| 1042 | /* Get settings from the device and generate the output string. */ |
| 1043 | set_count = MAX_SETTINGS; |
| 1044 | sets = malloc(set_count * sizeof(*sets), M_TEMP, M_NOWAIT); |
| 1045 | if (sets == NULL) { |
| 1046 | sbuf_delete(&sb); |
| 1047 | return (ENOMEM); |
| 1048 | } |
| 1049 | error = CPUFREQ_DRV_SETTINGS(dev, sets, &set_count); |
| 1050 | if (error) |
| 1051 | goto out; |
| 1052 | if (set_count) { |
| 1053 | for (i = 0; i < set_count; i++) |
| 1054 | sbuf_printf(&sb, "%d/%d ", sets[i].freq, sets[i].power); |
| 1055 | } else |
| 1056 | sbuf_cpy(&sb, "0"); |
| 1057 | sbuf_trim(&sb); |
| 1058 | sbuf_finish(&sb); |
| 1059 | error = sysctl_handle_string(oidp, sbuf_data(&sb), sbuf_len(&sb), req); |
| 1060 | |
| 1061 | out: |
| 1062 | free(sets, M_TEMP); |
| 1063 | sbuf_delete(&sb); |
| 1064 | return (error); |
| 1065 | } |
| 1066 | |
| 1067 | static void |
| 1068 | cpufreq_add_freq_driver_sysctl(device_t cf_dev) |
nothing calls this directly
no test coverage detected