The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/net/ifdi_if.m

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #
    2 # Copyright (c) 2014-2018, Matthew Macy (mmacy@mattmacy.io)
    3 # All rights reserved.
    4 #
    5 # Redistribution and use in source and binary forms, with or without
    6 # modification, are permitted provided that the following conditions are met:
    7 #
    8 #  1. Redistributions of source code must retain the above copyright notice,
    9 #     this list of conditions and the following disclaimer.
   10 #
   11 #  2. Neither the name of Matthew Macy nor the names of its
   12 #     contributors may be used to endorse or promote products derived from
   13 #     this software without specific prior written permission.
   14 #
   15 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   16 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   17 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   18 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   19 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   25 # POSSIBILITY OF SUCH DAMAGE.
   26 #
   27 # $FreeBSD$
   28 #
   29 
   30 #include <sys/types.h>
   31 #include <sys/systm.h>
   32 #include <sys/socket.h>
   33 
   34 #include <machine/bus.h>
   35 #include <sys/bus.h>
   36 
   37 #include <net/ethernet.h>
   38 #include <net/if.h>
   39 #include <net/if_var.h>
   40 #include <net/if_media.h>
   41 #include <net/iflib.h>
   42 #include <net/if_clone.h>
   43 #include <net/if_dl.h>
   44 #include <net/if_types.h>
   45 
   46 INTERFACE ifdi;
   47 
   48 CODE {
   49 
   50         static void
   51         null_void_op(if_ctx_t _ctx __unused)
   52         {
   53         }
   54 
   55         static int
   56         null_knlist_add(if_ctx_t _ctx __unused, struct knote *_kn)
   57         {
   58             return (0);
   59         }
   60 
   61         static int
   62         null_knote_event(if_ctx_t _ctx __unused, struct knote *_kn, int _hint)
   63         {
   64             return (0);
   65         }
   66 
   67         static void
   68         null_timer_op(if_ctx_t _ctx __unused, uint16_t _qsidx __unused)
   69         {
   70         }
   71 
   72         static int
   73         null_int_op(if_ctx_t _ctx __unused)
   74         {
   75                 return (0);
   76         }
   77 
   78         static int
   79         null_int_int_op(if_ctx_t _ctx __unused, int arg0 __unused)
   80         {
   81                 return (ENOTSUP);
   82         }
   83 
   84         static int
   85         null_queue_intr_enable(if_ctx_t _ctx __unused, uint16_t _qid __unused)
   86         {
   87                 return (ENOTSUP);
   88         }
   89 
   90         static void
   91         null_led_func(if_ctx_t _ctx __unused, int _onoff __unused)
   92         {
   93         }
   94 
   95         static void
   96         null_vlan_register_op(if_ctx_t _ctx __unused, uint16_t vtag __unused)
   97         {
   98         }
   99 
  100         static int
  101         null_q_setup(if_ctx_t _ctx __unused, uint32_t _qid __unused)
  102         {
  103                 return (0);
  104         }
  105 
  106         static int
  107         null_i2c_req(if_ctx_t _sctx __unused, struct ifi2creq *_i2c __unused)
  108         {
  109                 return (ENOTSUP);
  110         }
  111 
  112         static int
  113         null_sysctl_int_delay(if_ctx_t _sctx __unused, if_int_delay_info_t _iidi __unused)
  114         {
  115                 return (0);
  116         }
  117 
  118         static int
  119         null_iov_init(if_ctx_t _ctx __unused, uint16_t num_vfs __unused, const nvlist_t *params __unused)
  120         {
  121                 return (ENOTSUP);
  122         }
  123 
  124         static int
  125         null_vf_add(if_ctx_t _ctx __unused, uint16_t num_vfs __unused, const nvlist_t *params __unused)
  126         {
  127                 return (ENOTSUP);
  128         }
  129 
  130         static int
  131         null_priv_ioctl(if_ctx_t _ctx __unused, u_long command, caddr_t *data __unused)
  132         {
  133                 return (ENOTSUP);
  134         }
  135 
  136         static void
  137         null_media_status(if_ctx_t ctx __unused, struct ifmediareq *ifmr)
  138         {
  139             ifmr->ifm_status = IFM_AVALID | IFM_ACTIVE;
  140             ifmr->ifm_active = IFM_ETHER | IFM_25G_ACC | IFM_FDX;
  141         }
  142 
  143         static int
  144         null_cloneattach(if_ctx_t ctx __unused, struct if_clone *ifc __unused,
  145                          const char *name __unused, caddr_t params __unused)
  146         {
  147             return (0);
  148         }
  149 
  150         static void
  151         null_rx_clset(if_ctx_t _ctx __unused, uint16_t _flid __unused,
  152                       uint16_t _qid __unused, caddr_t *_sdcl __unused)
  153         {
  154         }
  155         static void
  156         null_object_info_get(if_ctx_t ctx __unused, void *data __unused, int size __unused)
  157         {
  158         }
  159         static int
  160         default_mac_set(if_ctx_t ctx, const uint8_t *mac)
  161         {
  162             struct ifnet *ifp = iflib_get_ifp(ctx);
  163             struct sockaddr_dl *sdl;
  164 
  165             if (ifp && ifp->if_addr) {
  166                 sdl = (struct sockaddr_dl *)ifp->if_addr->ifa_addr;
  167                 MPASS(sdl->sdl_type == IFT_ETHER);
  168                 memcpy(LLADDR(sdl), mac, ETHER_ADDR_LEN);
  169             }
  170             return (0);
  171         }
  172 
  173         static bool
  174         null_needs_restart(if_ctx_t _ctx __unused, enum iflib_restart_event _event __unused)
  175         {
  176                 return (true);
  177         }
  178 };
  179 
  180 #
  181 # kevent interfaces
  182 #
  183 
  184 METHOD int knlist_add {
  185         if_ctx_t _ctx;
  186         struct knote *_kn;
  187 } DEFAULT null_knlist_add;
  188 
  189 METHOD int knote_event {
  190         if_ctx_t _ctx;
  191         struct knote *_kn;
  192         int hint;
  193 } DEFAULT null_knote_event;
  194 
  195 
  196 #
  197 # query
  198 #
  199 
  200 METHOD int object_info_get {
  201         if_ctx_t _ctx;
  202         void *data;
  203         int size;
  204 } DEFAULT null_object_info_get;
  205 
  206 #
  207 # bus interfaces
  208 #
  209 
  210 METHOD int attach_pre {
  211         if_ctx_t _ctx;
  212 } DEFAULT null_int_op;
  213 
  214 METHOD int attach_post {
  215         if_ctx_t _ctx;
  216 } DEFAULT null_int_op;
  217 
  218 METHOD int reinit_pre {
  219         if_ctx_t _ctx;
  220 } DEFAULT null_int_op;
  221 
  222 METHOD int reinit_post {
  223         if_ctx_t _ctx;
  224 } DEFAULT null_int_op;
  225 
  226 METHOD int cloneattach {
  227         if_ctx_t _ctx;
  228         struct if_clone *_ifc;
  229         const char *_name;
  230         caddr_t params;
  231 } DEFAULT null_cloneattach;
  232 
  233 METHOD int detach {
  234         if_ctx_t _ctx;
  235 };
  236 
  237 METHOD int suspend {
  238         if_ctx_t _ctx;
  239 } DEFAULT null_int_op;
  240 
  241 METHOD int shutdown {
  242         if_ctx_t _ctx;
  243 } DEFAULT null_int_op;
  244 
  245 METHOD int resume {
  246         if_ctx_t _ctx;
  247 } DEFAULT null_int_op;
  248 
  249 #
  250 # downcall to driver to allocate its
  251 # own queue state and tie it to the parent
  252 #
  253 
  254 METHOD int tx_queues_alloc {
  255         if_ctx_t _ctx;
  256         caddr_t *_vaddrs;
  257         uint64_t *_paddrs;
  258         int ntxqs;
  259         int ntxqsets;
  260 };
  261 
  262 METHOD int rx_queues_alloc {
  263         if_ctx_t _ctx;
  264         caddr_t *_vaddrs;
  265         uint64_t *_paddrs;
  266         int nrxqs;
  267         int nrxqsets;
  268 };
  269 
  270 METHOD void queues_free {
  271         if_ctx_t _ctx;
  272 } DEFAULT null_void_op;
  273 
  274 METHOD void rx_clset {
  275         if_ctx_t _ctx;
  276         uint16_t _fl;
  277         uint16_t _qsetid;
  278         caddr_t *_sdcl;
  279 } DEFAULT null_rx_clset;
  280 
  281 #
  282 # interface reset / stop
  283 #
  284 
  285 METHOD void init {
  286         if_ctx_t _ctx;
  287 };
  288 
  289 METHOD void stop {
  290         if_ctx_t _ctx;
  291 };
  292 
  293 #
  294 # interrupt setup and manipulation
  295 #
  296 
  297 METHOD int msix_intr_assign {
  298         if_ctx_t _sctx;
  299         int msix;
  300 } DEFAULT null_int_int_op;
  301 
  302 METHOD void intr_enable {
  303         if_ctx_t _ctx;
  304 };
  305 
  306 METHOD void intr_disable {
  307         if_ctx_t _ctx;
  308 };
  309 
  310 METHOD int rx_queue_intr_enable {
  311         if_ctx_t _ctx;
  312         uint16_t _qid;
  313 } DEFAULT null_queue_intr_enable;
  314 
  315 METHOD int tx_queue_intr_enable {
  316         if_ctx_t _ctx;
  317         uint16_t _qid;
  318 } DEFAULT null_queue_intr_enable;
  319 
  320 METHOD void link_intr_enable {
  321         if_ctx_t _ctx;
  322 } DEFAULT null_void_op;
  323 
  324 METHOD void admin_completion_handle {
  325         if_ctx_t _ctx;
  326 } DEFAULT null_void_op;
  327 
  328 #
  329 # interface configuration
  330 #
  331 
  332 METHOD void multi_set {
  333         if_ctx_t _ctx;
  334 };
  335 
  336 METHOD int mtu_set {
  337         if_ctx_t _ctx;
  338         uint32_t _mtu;
  339 };
  340 METHOD int mac_set {
  341         if_ctx_t _ctx;
  342         const uint8_t *_mac;
  343 } DEFAULT default_mac_set;
  344 
  345 METHOD void media_set{
  346         if_ctx_t _ctx;
  347 } DEFAULT null_void_op;
  348 
  349 METHOD int promisc_set {
  350         if_ctx_t _ctx;
  351         int _flags;
  352 };
  353 
  354 METHOD void crcstrip_set {
  355         if_ctx_t _ctx;
  356         int _onoff;
  357         int _strip;
  358 };
  359 
  360 #
  361 # IOV handling
  362 #
  363 
  364 METHOD void vflr_handle {
  365         if_ctx_t _ctx;
  366 } DEFAULT null_void_op;
  367 
  368 METHOD int iov_init {
  369         if_ctx_t _ctx;
  370         uint16_t num_vfs;
  371         const nvlist_t * params;
  372 } DEFAULT null_iov_init;
  373 
  374 METHOD void iov_uninit {
  375         if_ctx_t _ctx;
  376 } DEFAULT null_void_op;
  377 
  378 METHOD int iov_vf_add {
  379         if_ctx_t _ctx;
  380         uint16_t num_vfs;
  381         const nvlist_t * params;
  382 } DEFAULT null_vf_add;
  383 
  384 
  385 #
  386 # Device status
  387 #
  388 
  389 METHOD void update_admin_status {
  390         if_ctx_t _ctx;
  391 };
  392 
  393 METHOD void media_status {
  394         if_ctx_t _ctx;
  395         struct ifmediareq *_ifm;
  396 } DEFAULT null_media_status;
  397 
  398 METHOD int media_change {
  399         if_ctx_t _ctx;
  400 } DEFAULT null_int_op;
  401 
  402 METHOD uint64_t get_counter {
  403         if_ctx_t _ctx;
  404         ift_counter cnt;
  405 };
  406 
  407 METHOD int priv_ioctl {
  408         if_ctx_t _ctx;
  409         u_long   _cmd;
  410         caddr_t _data;
  411 } DEFAULT null_priv_ioctl;
  412 
  413 #
  414 # optional methods
  415 #
  416 
  417 METHOD int i2c_req {
  418         if_ctx_t _ctx;
  419         struct ifi2creq *_req;
  420 } DEFAULT null_i2c_req;
  421 
  422 METHOD int txq_setup {
  423         if_ctx_t _ctx;
  424         uint32_t _txqid;
  425 } DEFAULT null_q_setup;
  426 
  427 METHOD int rxq_setup {
  428         if_ctx_t _ctx;
  429         uint32_t _txqid;
  430 } DEFAULT null_q_setup;
  431 
  432 METHOD void timer {
  433         if_ctx_t _ctx;
  434         uint16_t _txqid;
  435 } DEFAULT null_timer_op;
  436 
  437 METHOD void watchdog_reset {
  438         if_ctx_t _ctx;
  439 } DEFAULT null_void_op;
  440 
  441 METHOD void watchdog_reset_queue {
  442         if_ctx_t _ctx;
  443         uint16_t _q;
  444 } DEFAULT null_timer_op;
  445 
  446 METHOD void led_func {
  447         if_ctx_t _ctx;
  448         int _onoff;
  449 } DEFAULT null_led_func;
  450 
  451 METHOD void vlan_register {
  452         if_ctx_t _ctx;
  453         uint16_t _vtag;
  454 } DEFAULT null_vlan_register_op;
  455 
  456 METHOD void vlan_unregister {
  457         if_ctx_t _ctx;
  458         uint16_t _vtag;
  459 } DEFAULT null_vlan_register_op;
  460 
  461 METHOD int sysctl_int_delay {
  462         if_ctx_t _sctx;
  463         if_int_delay_info_t _iidi;
  464 } DEFAULT null_sysctl_int_delay;
  465 
  466 METHOD void debug {
  467         if_ctx_t _ctx;
  468 } DEFAULT null_void_op;
  469 
  470 METHOD bool needs_restart {
  471         if_ctx_t _ctx;
  472         enum iflib_restart_event _event;
  473 } DEFAULT null_needs_restart;

Cache object: 8394ed8c9624e8b05360cd710f1962a1


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.