root/sys/arch/mips/cavium/dev/if_cnmacvar.h
/*      $NetBSD: if_cnmacvar.h,v 1.5 2022/09/18 11:38:48 thorpej Exp $  */

#undef DEBUG
#ifdef DEBUG
#define dprintf printf
#else
#define dprintf(...)
#endif

#define IS_MAC_MULTICASTBIT(addr) \
        ((addr)[0] & 0x01)

#define SEND_QUEUE_SIZE         (32)
#define GATHER_QUEUE_SIZE       (1024)
#define FREE_QUEUE_SIZE         GATHER_QUEUE_SIZE
#define RECV_QUEUE_SIZE         (GATHER_QUEUE_SIZE * 2)

/* Number of mbufs per port to keep in the packet pool */
#define CNMAC_MBUFS_PER_PORT    256

/* XXX MUST BE REPLACED WITH BUS_DMA!!! */
paddr_t kvtophys(vaddr_t);
/* XXX MUST BE REPLACED WITH BUS_DMA!!! */

struct _send_queue_entry;
struct octsmi_softc;
struct octgmx_port_softc;
struct octipd_softc;
struct octpip_softc;
struct octpko_softc;
struct octpow_softc;

extern struct octpow_softc      octpow_softc;

struct cnmac_softc {
        device_t                sc_dev;
        bus_space_tag_t         sc_regt;
        bus_dma_tag_t           sc_dmat;

        void                    *sc_ih;

        struct octpip_softc     *sc_pip;
        struct octipd_softc     *sc_ipd;
        struct octpko_softc     *sc_pko;
        struct octsmi_softc     *sc_smi;
        struct octgmx_softc     *sc_gmx;
        struct octgmx_port_softc
                                *sc_gmx_port;
        struct octpow_softc     *sc_pow;

        struct ethercom         sc_ethercom;
        struct mii_data         sc_mii;

        void                    *sc_sdhook;

        struct callout          sc_tick_misc_ch;
        struct callout          sc_tick_free_ch;

        int64_t                 sc_soft_req_cnt;
        int64_t                 sc_soft_req_thresh;
        int64_t                 sc_hard_done_cnt;
        int                     sc_flush;
        int                     sc_prefetch;
        SIMPLEQ_HEAD(, _send_queue_entry)
                                sc_sendq;
        uint64_t                sc_ext_callback_cnt;
        bool                    sc_txbusy;

        uint32_t                sc_port;
        uint32_t                sc_port_type;
        uint32_t                sc_init_flag;
        int                     sc_powgroup;

        /*
         * Redirection - received (input) packets are redirected (directly sent)
         * to another port.  Only meant to test hardware + driver performance.
         *
         *  0   - disabled
         * >0   - redirected to ports that correspond to bits
         *              0b001 (0x1)     - Port 0
         *              0b010 (0x2)     - Port 1
         *              0b100 (0x4)     - Port 2
         */
        int                     sc_redir;

        struct octfau_desc      sc_fau_done;
        struct octpko_cmdptr_desc
                                sc_cmdptr;

        size_t                  sc_ip_offset;

        struct timeval          sc_rxerr_log_last;

        int                     sc_quirks;
};