diff options
Diffstat (limited to 'rtemsbsd/local/ifdi_if.c')
-rw-r--r-- | rtemsbsd/local/ifdi_if.c | 106 |
1 files changed, 100 insertions, 6 deletions
diff --git a/rtemsbsd/local/ifdi_if.c b/rtemsbsd/local/ifdi_if.c index e5a81946..e9337b8d 100644 --- a/rtemsbsd/local/ifdi_if.c +++ b/rtemsbsd/local/ifdi_if.c @@ -26,6 +26,9 @@ #include <net/if_var.h> #include <net/if_media.h> #include <net/iflib.h> +#include <net/if_clone.h> +#include <net/if_dl.h> +#include <net/if_types.h> #include <rtems/bsd/local/ifdi_if.h> @@ -35,6 +38,18 @@ { } + static int + null_knlist_add(if_ctx_t _ctx __unused, struct knote *_kn) + { + return (0); + } + + static int + null_knote_event(if_ctx_t _ctx __unused, struct knote *_kn, int _hint) + { + return (0); + } + static void null_timer_op(if_ctx_t _ctx __unused, uint16_t _qsidx __unused) { @@ -47,6 +62,12 @@ } static int + null_int_int_op(if_ctx_t _ctx __unused, int arg0 __unused) + { + return (ENOTSUP); + } + + static int null_queue_intr_enable(if_ctx_t _ctx __unused, uint16_t _qid __unused) { return (ENOTSUP); @@ -98,12 +119,73 @@ return (ENOTSUP); } + static void + null_media_status(if_ctx_t ctx __unused, struct ifmediareq *ifmr) + { + ifmr->ifm_status = IFM_AVALID | IFM_ACTIVE; + ifmr->ifm_active = IFM_ETHER | IFM_25G_ACC | IFM_FDX; + } + + static int + null_cloneattach(if_ctx_t ctx __unused, struct if_clone *ifc __unused, + const char *name __unused, caddr_t params __unused) + { + return (0); + } + + static void + null_rx_clset(if_ctx_t _ctx __unused, uint16_t _flid __unused, + uint16_t _qid __unused, caddr_t *_sdcl __unused) + { + } + static void + null_object_info_get(if_ctx_t ctx __unused, void *data __unused, int size __unused) + { + } + static int + default_mac_set(if_ctx_t ctx, const uint8_t *mac) + { + struct ifnet *ifp = iflib_get_ifp(ctx); + struct sockaddr_dl *sdl; + + if (ifp && ifp->if_addr) { + sdl = (struct sockaddr_dl *)ifp->if_addr->ifa_addr; + MPASS(sdl->sdl_type == IFT_ETHER); + memcpy(LLADDR(sdl), mac, ETHER_ADDR_LEN); + } + return (0); + } + +struct kobjop_desc ifdi_knlist_add_desc = { + 0, { &ifdi_knlist_add_desc, (kobjop_t)null_knlist_add } +}; + +struct kobjop_desc ifdi_knote_event_desc = { + 0, { &ifdi_knote_event_desc, (kobjop_t)null_knote_event } +}; + +struct kobjop_desc ifdi_object_info_get_desc = { + 0, { &ifdi_object_info_get_desc, (kobjop_t)null_object_info_get } +}; + struct kobjop_desc ifdi_attach_pre_desc = { - 0, { &ifdi_attach_pre_desc, (kobjop_t)kobj_error_method } + 0, { &ifdi_attach_pre_desc, (kobjop_t)null_int_op } }; struct kobjop_desc ifdi_attach_post_desc = { - 0, { &ifdi_attach_post_desc, (kobjop_t)kobj_error_method } + 0, { &ifdi_attach_post_desc, (kobjop_t)null_int_op } +}; + +struct kobjop_desc ifdi_reinit_pre_desc = { + 0, { &ifdi_reinit_pre_desc, (kobjop_t)null_int_op } +}; + +struct kobjop_desc ifdi_reinit_post_desc = { + 0, { &ifdi_reinit_post_desc, (kobjop_t)null_int_op } +}; + +struct kobjop_desc ifdi_cloneattach_desc = { + 0, { &ifdi_cloneattach_desc, (kobjop_t)null_cloneattach } }; struct kobjop_desc ifdi_detach_desc = { @@ -131,7 +213,11 @@ struct kobjop_desc ifdi_rx_queues_alloc_desc = { }; struct kobjop_desc ifdi_queues_free_desc = { - 0, { &ifdi_queues_free_desc, (kobjop_t)kobj_error_method } + 0, { &ifdi_queues_free_desc, (kobjop_t)null_void_op } +}; + +struct kobjop_desc ifdi_rx_clset_desc = { + 0, { &ifdi_rx_clset_desc, (kobjop_t)null_rx_clset } }; struct kobjop_desc ifdi_init_desc = { @@ -143,7 +229,7 @@ struct kobjop_desc ifdi_stop_desc = { }; struct kobjop_desc ifdi_msix_intr_assign_desc = { - 0, { &ifdi_msix_intr_assign_desc, (kobjop_t)kobj_error_method } + 0, { &ifdi_msix_intr_assign_desc, (kobjop_t)null_int_int_op } }; struct kobjop_desc ifdi_intr_enable_desc = { @@ -174,6 +260,10 @@ struct kobjop_desc ifdi_mtu_set_desc = { 0, { &ifdi_mtu_set_desc, (kobjop_t)kobj_error_method } }; +struct kobjop_desc ifdi_mac_set_desc = { + 0, { &ifdi_mac_set_desc, (kobjop_t)default_mac_set } +}; + struct kobjop_desc ifdi_media_set_desc = { 0, { &ifdi_media_set_desc, (kobjop_t)null_void_op } }; @@ -207,11 +297,11 @@ struct kobjop_desc ifdi_update_admin_status_desc = { }; struct kobjop_desc ifdi_media_status_desc = { - 0, { &ifdi_media_status_desc, (kobjop_t)kobj_error_method } + 0, { &ifdi_media_status_desc, (kobjop_t)null_media_status } }; struct kobjop_desc ifdi_media_change_desc = { - 0, { &ifdi_media_change_desc, (kobjop_t)kobj_error_method } + 0, { &ifdi_media_change_desc, (kobjop_t)null_int_op } }; struct kobjop_desc ifdi_get_counter_desc = { @@ -242,6 +332,10 @@ struct kobjop_desc ifdi_watchdog_reset_desc = { 0, { &ifdi_watchdog_reset_desc, (kobjop_t)null_void_op } }; +struct kobjop_desc ifdi_watchdog_reset_queue_desc = { + 0, { &ifdi_watchdog_reset_queue_desc, (kobjop_t)null_timer_op } +}; + struct kobjop_desc ifdi_led_func_desc = { 0, { &ifdi_led_func_desc, (kobjop_t)null_led_func } }; |