* Start event timer hardware. * first - delay before first tick. * period - period of subsequent periodic ticks. */
| 179 | * period - period of subsequent periodic ticks. |
| 180 | */ |
| 181 | int |
| 182 | et_start(struct eventtimer *et, sbintime_t first, sbintime_t period) |
| 183 | { |
| 184 | |
| 185 | if (!et->et_active) |
| 186 | return (ENXIO); |
| 187 | KASSERT(period >= 0, ("et_start: negative period")); |
| 188 | KASSERT((et->et_flags & ET_FLAGS_PERIODIC) || period == 0, |
| 189 | ("et_start: period specified for oneshot-only timer")); |
| 190 | KASSERT((et->et_flags & ET_FLAGS_ONESHOT) || period != 0, |
| 191 | ("et_start: period not specified for periodic-only timer")); |
| 192 | if (period != 0) { |
| 193 | if (period < et->et_min_period) |
| 194 | period = et->et_min_period; |
| 195 | else if (period > et->et_max_period) |
| 196 | period = et->et_max_period; |
| 197 | } |
| 198 | if (period == 0 || first != 0) { |
| 199 | if (first < et->et_min_period) |
| 200 | first = et->et_min_period; |
| 201 | else if (first > et->et_max_period) |
| 202 | first = et->et_max_period; |
| 203 | } |
| 204 | return (et->et_start(et, first, period)); |
| 205 | } |
| 206 | |
| 207 | /* Stop event timer hardware. */ |
| 208 | int |