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/dev/malo/if_malohal.h

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  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
    3  *
    4  * Copyright (c) 2007 Marvell Semiconductor, Inc.
    5  * Copyright (c) 2007 Sam Leffler, Errno Consulting
    6  * Copyright (c) 2008 Weongyo Jeong <weongyo@freebsd.org>
    7  * All rights reserved.
    8  *
    9  * Redistribution and use in source and binary forms, with or without
   10  * modification, are permitted provided that the following conditions
   11  * are met:
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer,
   14  *    without modification.
   15  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
   16  *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
   17  *    redistribution must be conditioned upon including a substantially
   18  *    similar Disclaimer requirement for further binary redistribution.
   19  *
   20  * NO WARRANTY
   21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   22  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   23  * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
   24  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
   25  * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
   26  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
   29  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
   31  * THE POSSIBILITY OF SUCH DAMAGES.
   32  *
   33  * $FreeBSD: releng/12.0/sys/dev/malo/if_malohal.h 326255 2017-11-27 14:52:40Z pfg $
   34  */
   35 
   36 #ifndef _DEV_MALOHAL_H
   37 #define _DEV_MALOHAL_H
   38 
   39 #define MALO_NUM_TX_QUEUES                      1
   40 #define MALO_MAX_TXWCB_QUEUES                   MALO_NUM_TX_QUEUES
   41 
   42 /* size of f/w command buffer */
   43 #define MALO_CMDBUF_SIZE                        0x4000
   44 
   45 #define MALO_FW_CHECK_USECS                     (5 * 1000)      /* 5ms */
   46 #define MALO_FW_MAX_NUM_CHECKS                  200  
   47 
   48 /*
   49  * Calibration data builtin to the firmware.  The firmware image
   50  * has a single set of calibration tables that we retrieve right
   51  * after download.  This can be overriden by the driver (e.g. for
   52  * a different regdomain and/or tx power setup).
   53  */
   54 struct malo_hal_caldata {
   55         /* pt is short for `power target'.  */
   56 #define MALO_PWTAGETRATETABLE20M                (14 * 4)
   57         uint8_t pt_ratetable_20m[MALO_PWTAGETRATETABLE20M];
   58 };
   59 
   60 /*
   61  * Get Hardware/Firmware capabilities.
   62  */
   63 struct malo_hal_hwspec {
   64         uint8_t         hwversion;              /* version of the HW */
   65         uint8_t         hostinterface;  /* host interface */
   66         uint16_t        maxnum_wcb;             /* max # of WCB FW handles */
   67         /* max # of mcast addresses FW handles*/
   68         uint16_t        maxnum_mcaddr;
   69         uint16_t        maxnum_tx_wcb;  /* max # of tx descs per WCB */
   70         /* MAC address programmed in HW */
   71         uint8_t         macaddr[6];
   72         uint16_t        regioncode;             /* EEPROM region code */
   73         uint16_t        num_antenna;    /* Number of antenna used */
   74         uint32_t        fw_releasenum;  /* firmware release number */
   75         uint32_t        wcbbase0;
   76         uint32_t        rxdesc_read;
   77         uint32_t        rxdesc_write;
   78         uint32_t        ul_fw_awakecookie;
   79         uint32_t        wcbbase[4];
   80 };
   81 
   82 /*
   83  * Supply tx/rx dma-related settings to the firmware.
   84  */
   85 struct malo_hal_txrxdma {
   86         uint32_t        maxnum_wcb;             /* max # of WCB FW handles */
   87         uint32_t        maxnum_txwcb;           /* max # of tx descs per WCB */
   88         uint32_t        rxdesc_read;
   89         uint32_t        rxdesc_write;
   90         uint32_t        wcbbase[4];
   91 };
   92 
   93 /*
   94  * Get Hardware Statistics.
   95  *
   96  * Items marked with ! are deprecated and not ever updated.  In
   97  * some cases this is because work has been moved to the host (e.g.
   98  * rx defragmentation).
   99  *
  100  * XXX low/up cases.
  101  */
  102 struct malo_hal_hwstats {
  103         uint32_t        TxRetrySuccesses;       /* tx success w/ 1 retry */
  104         uint32_t        TxMultipleRetrySuccesses;/* tx success w/ >1 retry */
  105         uint32_t        TxFailures;             /* tx fail due to no ACK */
  106         uint32_t        RTSSuccesses;           /* CTS rx'd for RTS */
  107         uint32_t        RTSFailures;            /* CTS not rx'd for RTS */
  108         uint32_t        AckFailures;            /* same as TxFailures */
  109         uint32_t        RxDuplicateFrames;      /* rx discard for dup seqno */
  110         uint32_t        FCSErrorCount;          /* rx discard for bad FCS */
  111         uint32_t        TxWatchDogTimeouts;     /* MAC tx hang (f/w recovery) */
  112         uint32_t        RxOverflows;            /* no f/w buffer for rx data */
  113         uint32_t        RxFragErrors;           /* !rx fail due to defrag */
  114         uint32_t        RxMemErrors;            /* out of mem or desc corrupted
  115                                                    in some way */
  116         uint32_t        RxPointerErrors;        /* MAC internal ptr problem */
  117         uint32_t        TxUnderflows;           /* !tx underflow on dma */
  118         uint32_t        TxDone;                 /* MAC tx ops completed
  119                                                    (possibly w/ error) */
  120         uint32_t        TxDoneBufTryPut;        /* ! */
  121         uint32_t        TxDoneBufPut;           /* same as TxDone */
  122         uint32_t        Wait4TxBuf;             /* !no f/w buf avail when
  123                                                     supplied a tx descriptor */
  124         uint32_t        TxAttempts;             /* tx descriptors processed */
  125         uint32_t        TxSuccesses;            /* tx attempts successful */ 
  126         uint32_t        TxFragments;            /* tx with fragmentation */
  127         uint32_t        TxMulticasts;           /* tx multicast frames */
  128         uint32_t        RxNonCtlPkts;           /* rx non-control frames */
  129         uint32_t        RxMulticasts;           /* rx multicast frames */
  130         uint32_t        RxUndecryptableFrames;  /* rx failed due to crypto */
  131         uint32_t        RxICVErrors;            /* rx failed due to ICV check */
  132         uint32_t        RxExcludedFrames;       /* rx discarded, e.g. bssid */
  133 };
  134 
  135 /*
  136  * Set Antenna Configuration (legacy operation).
  137  *
  138  * The RX antenna can be selected using the bitmask
  139  * ant (bit 0 = antenna 1, bit 1 = antenna 2, etc.)
  140  * (diversity?XXX)
  141  */
  142 enum malo_hal_antenna {
  143         MHA_ANTENNATYPE_RX      = 1,
  144         MHA_ANTENNATYPE_TX      = 2,
  145 };
  146 
  147 /*
  148  * Set Radio Configuration.
  149  *
  150  * onoff != 0 turns radio on; otherwise off.
  151  * if radio is enabled, the preamble is set too.
  152  */
  153 enum malo_hal_preamble {
  154         MHP_LONG_PREAMBLE       = 1,
  155         MHP_SHORT_PREAMBLE      = 3,
  156         MHP_AUTO_PREAMBLE       = 5,
  157 };
  158 
  159 struct malo_hal_channel_flags {
  160         uint32_t                freqband : 6,
  161 #define MALO_FREQ_BAND_2DOT4GHZ 0x1 
  162                                 : 26;           /* reserved */
  163 };
  164 
  165 struct malo_hal_channel {
  166         uint32_t                channel;
  167         struct malo_hal_channel_flags flags;
  168 };
  169 
  170 struct malo_hal_txrate {
  171         uint8_t                 mcastrate;      /* rate for multicast frames */
  172         uint8_t                 mgtrate;        /* rate for management frames */
  173         struct {
  174                 uint8_t         trycount;       /* try this many times */
  175                 uint8_t         rate;           /* use this tx rate */
  176         } rateseries[4];                        /* rate series */
  177 };
  178 
  179 struct malo_hal {
  180         device_t                mh_dev;
  181 
  182         bus_space_handle_t      mh_ioh;         /* BAR 1 copied from softc */
  183         bus_space_tag_t         mh_iot;
  184         uint32_t                mh_imask;       /* interrupt mask */
  185         int                     mh_flags;
  186 #define MHF_CALDATA             0x0001          /* cal data retrieved */
  187 #define MHF_FWHANG              0x0002          /* fw appears hung */
  188 
  189         char                    mh_mtxname[12];
  190         struct mtx              mh_mtx;
  191         bus_dma_tag_t           mh_dmat;        /* bus DMA tag for cmd buffer */
  192         bus_dmamap_t            mh_dmamap;      /* DMA map for cmd buffer */
  193         uint16_t                *mh_cmdbuf;     /* f/w cmd buffer */
  194         bus_addr_t              mh_cmdaddr;     /* physaddr of cmd buffer */
  195 
  196         struct malo_hal_caldata mh_caldata;
  197 
  198         int                     mh_debug;
  199 #define MALO_HAL_DEBUG_SENDCMD  0x00000001
  200 #define MALO_HAL_DEBUG_CMDDONE  0x00000002
  201 #define MALO_HAL_DEBUG_IGNHANG  0X00000004
  202 };
  203 
  204 #define MALO_HAL_LOCK(mh)               mtx_lock(&mh->mh_mtx)
  205 #define MALO_HAL_LOCK_ASSERT(mh)        mtx_assert(&mh->mh_mtx, MA_OWNED)
  206 #define MALO_HAL_UNLOCK(mh)             mtx_unlock(&mh->mh_mtx)
  207 
  208 struct malo_hal *malo_hal_attach(device_t, uint16_t,
  209             bus_space_handle_t, bus_space_tag_t,
  210             bus_dma_tag_t);
  211 int     malo_hal_fwload(struct malo_hal *, char *, char *);
  212 int     malo_hal_gethwspecs(struct malo_hal *,
  213             struct malo_hal_hwspec *);
  214 void    malo_hal_detach(struct malo_hal *);
  215 void    malo_hal_intrset(struct malo_hal *, uint32_t);
  216 int     malo_hal_setantenna(struct malo_hal *,
  217             enum malo_hal_antenna, int);
  218 int     malo_hal_setradio(struct malo_hal *, int,
  219             enum malo_hal_preamble);
  220 int     malo_hal_setchannel(struct malo_hal *,
  221             const struct malo_hal_channel *);
  222 int     malo_hal_setmaxtxpwr(struct malo_hal *, uint16_t);
  223 int     malo_hal_settxpower(struct malo_hal *, const struct malo_hal_channel *);
  224 int     malo_hal_setpromisc(struct malo_hal *, int);
  225 int     malo_hal_setassocid(struct malo_hal *,
  226             const uint8_t[], uint16_t);
  227 void    malo_hal_txstart(struct malo_hal *, int);
  228 void    malo_hal_getisr(struct malo_hal *, uint32_t *);
  229 void    malo_hal_cmddone(struct malo_hal *);
  230 int     malo_hal_prescan(struct malo_hal *);
  231 int     malo_hal_postscan(struct malo_hal *, uint8_t *, uint8_t);
  232 int     malo_hal_set_slot(struct malo_hal *, int);
  233 int     malo_hal_set_rate(struct malo_hal *, uint16_t, uint8_t);
  234 int     malo_hal_setmcast(struct malo_hal *, int, const uint8_t[]);
  235 
  236 #endif

Cache object: 9101215763829b1f713f963fcee216d4


[ 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.