FreeBSDのカーネル内で定期的に処理をしたい場合はcalloutを使うようです。
まず初期化をします。
callout_init(&sc->callout_tick, 0);
第一引数は初期化するインスタンスで、第二引数はマルチプロセッサー対応かどうかで0は対応していないということのようです。
実際の関数を登録します。
callout_reset(&sc->callout_tick, hz, ip17x_tick, sc);
hz tick後にip17x_tick関数を実行し引数をscを渡します。ip17x_tickの関数の中でcallout_resetを呼び出す事によって繰り返しip17x_tickが実行される事になります。
止める時は
callout_drain(&sc->callout_tick);
とします。