USER_PANIC("Network polling not available without Arranet!\n");
}
+void poll_ahci(struct waitset_chanstate *) __attribute__((weak));
+void poll_ahci(struct waitset_chanstate *chan)
+{
+ errval_t err = waitset_chan_trigger(chan);
+ assert(err_is_ok(err)); // should not be able to fail
+}
+
/// Check polled channels
void poll_channels_disabled(dispatcher_handle_t handle) {
struct dispatcher_generic *dp = get_dispatcher_generic(handle);
case CHANTYPE_LWIP_SOCKET:
arranet_polling_loop_proxy();
break;
-
+ case CHANTYPE_AHCI:
+ poll_ahci(chan);
+ break;
default:
assert(!"invalid channel type to poll!");
}
}
chan->token = 0;
- if (chan->chantype == CHANTYPE_UMP_IN) {
+ if (chan->chantype == CHANTYPE_UMP_IN
+ || chan->chantype == CHANTYPE_LWIP_SOCKET
+ || chan->chantype == CHANTYPE_AHCI) {
enqueue(&ws->polled, chan);
enqueue_polled(&get_dispatcher_generic(handle)->polled_channels, chan);
chan->state = CHAN_POLLED;