Annotation of qemu/roms/ipxe/src/drivers/net/rtl818x/rtl818x.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Definitions for RTL818x hardware
        !             3:  *
        !             4:  * Copyright 2007 Michael Wu <[email protected]>
        !             5:  * Copyright 2007 Andrea Merello <[email protected]>
        !             6:  *
        !             7:  * Modified for iPXE, June 2009, by Joshua Oreman <[email protected]>
        !             8:  *
        !             9:  * Based on the r8187 driver, which is:
        !            10:  * Copyright 2005 Andrea Merello <[email protected]>, et al.
        !            11:  *
        !            12:  * This program is free software; you can redistribute it and/or modify
        !            13:  * it under the terms of the GNU General Public License version 2 as
        !            14:  * published by the Free Software Foundation.
        !            15:  */
        !            16: 
        !            17: #ifndef RTL818X_H
        !            18: #define RTL818X_H
        !            19: 
        !            20: #include <ipxe/spi_bit.h>
        !            21: #include <ipxe/tables.h>
        !            22: 
        !            23: FILE_LICENCE(GPL2_ONLY);
        !            24: 
        !            25: struct rtl818x_csr {
        !            26:        u8      MAC[6];
        !            27:        u8      reserved_0[2];
        !            28:        u32     MAR[2];
        !            29:        u8      RX_FIFO_COUNT;
        !            30:        u8      reserved_1;
        !            31:        u8      TX_FIFO_COUNT;
        !            32:        u8      BQREQ;
        !            33:        u8      reserved_2[4];
        !            34:        u32     TSFT[2];
        !            35:        u32     TLPDA;
        !            36:        u32     TNPDA;
        !            37:        u32     THPDA;
        !            38:        u16     BRSR;
        !            39:        u8      BSSID[6];
        !            40:        u8      RESP_RATE;
        !            41:        u8      EIFS;
        !            42:        u8      reserved_3[1];
        !            43:        u8      CMD;
        !            44: #define RTL818X_CMD_TX_ENABLE          (1 << 2)
        !            45: #define RTL818X_CMD_RX_ENABLE          (1 << 3)
        !            46: #define RTL818X_CMD_RESET              (1 << 4)
        !            47:        u8      reserved_4[4];
        !            48:        u16     INT_MASK;
        !            49:        u16     INT_STATUS;
        !            50: #define RTL818X_INT_RX_OK              (1 <<  0)
        !            51: #define RTL818X_INT_RX_ERR             (1 <<  1)
        !            52: #define RTL818X_INT_TXL_OK             (1 <<  2)
        !            53: #define RTL818X_INT_TXL_ERR            (1 <<  3)
        !            54: #define RTL818X_INT_RX_DU              (1 <<  4)
        !            55: #define RTL818X_INT_RX_FO              (1 <<  5)
        !            56: #define RTL818X_INT_TXN_OK             (1 <<  6)
        !            57: #define RTL818X_INT_TXN_ERR            (1 <<  7)
        !            58: #define RTL818X_INT_TXH_OK             (1 <<  8)
        !            59: #define RTL818X_INT_TXH_ERR            (1 <<  9)
        !            60: #define RTL818X_INT_TXB_OK             (1 << 10)
        !            61: #define RTL818X_INT_TXB_ERR            (1 << 11)
        !            62: #define RTL818X_INT_ATIM               (1 << 12)
        !            63: #define RTL818X_INT_BEACON             (1 << 13)
        !            64: #define RTL818X_INT_TIME_OUT           (1 << 14)
        !            65: #define RTL818X_INT_TX_FO              (1 << 15)
        !            66:        u32     TX_CONF;
        !            67: #define RTL818X_TX_CONF_LOOPBACK_MAC   (1 << 17)
        !            68: #define RTL818X_TX_CONF_LOOPBACK_CONT  (3 << 17)
        !            69: #define RTL818X_TX_CONF_NO_ICV         (1 << 19)
        !            70: #define RTL818X_TX_CONF_DISCW          (1 << 20)
        !            71: #define RTL818X_TX_CONF_SAT_HWPLCP     (1 << 24)
        !            72: #define RTL818X_TX_CONF_R8180_ABCD     (2 << 25)
        !            73: #define RTL818X_TX_CONF_R8180_F                (3 << 25)
        !            74: #define RTL818X_TX_CONF_R8185_ABC      (4 << 25)
        !            75: #define RTL818X_TX_CONF_R8185_D                (5 << 25)
        !            76: #define RTL818X_TX_CONF_R8187vD                (5 << 25)
        !            77: #define RTL818X_TX_CONF_R8187vD_B      (6 << 25)
        !            78: #define RTL818X_TX_CONF_HWVER_MASK     (7 << 25)
        !            79: #define RTL818X_TX_CONF_DISREQQSIZE    (1 << 28)
        !            80: #define RTL818X_TX_CONF_PROBE_DTS      (1 << 29)
        !            81: #define RTL818X_TX_CONF_HW_SEQNUM      (1 << 30)
        !            82: #define RTL818X_TX_CONF_CW_MIN         (1 << 31)
        !            83:        u32     RX_CONF;
        !            84: #define RTL818X_RX_CONF_MONITOR                (1 <<  0)
        !            85: #define RTL818X_RX_CONF_NICMAC         (1 <<  1)
        !            86: #define RTL818X_RX_CONF_MULTICAST      (1 <<  2)
        !            87: #define RTL818X_RX_CONF_BROADCAST      (1 <<  3)
        !            88: #define RTL818X_RX_CONF_FCS            (1 <<  5)
        !            89: #define RTL818X_RX_CONF_DATA           (1 << 18)
        !            90: #define RTL818X_RX_CONF_CTRL           (1 << 19)
        !            91: #define RTL818X_RX_CONF_MGMT           (1 << 20)
        !            92: #define RTL818X_RX_CONF_ADDR3          (1 << 21)
        !            93: #define RTL818X_RX_CONF_PM             (1 << 22)
        !            94: #define RTL818X_RX_CONF_BSSID          (1 << 23)
        !            95: #define RTL818X_RX_CONF_RX_AUTORESETPHY        (1 << 28)
        !            96: #define RTL818X_RX_CONF_CSDM1          (1 << 29)
        !            97: #define RTL818X_RX_CONF_CSDM2          (1 << 30)
        !            98: #define RTL818X_RX_CONF_ONLYERLPKT     (1 << 31)
        !            99:        u32     INT_TIMEOUT;
        !           100:        u32     TBDA;
        !           101:        u8      EEPROM_CMD;
        !           102: #define RTL818X_EEPROM_CMD_READ                (1 << 0)
        !           103: #define RTL818X_EEPROM_CMD_WRITE       (1 << 1)
        !           104: #define RTL818X_EEPROM_CMD_CK          (1 << 2)
        !           105: #define RTL818X_EEPROM_CMD_CS          (1 << 3)
        !           106: #define RTL818X_EEPROM_CMD_NORMAL      (0 << 6)
        !           107: #define RTL818X_EEPROM_CMD_LOAD                (1 << 6)
        !           108: #define RTL818X_EEPROM_CMD_PROGRAM     (2 << 6)
        !           109: #define RTL818X_EEPROM_CMD_CONFIG      (3 << 6)
        !           110:        u8      CONFIG0;
        !           111:        u8      CONFIG1;
        !           112:        u8      CONFIG2;
        !           113: #define RTL818X_CONFIG2_ANTENNA_DIV    (1 << 6)
        !           114:        u32     ANAPARAM;
        !           115:        u8      MSR;
        !           116: #define RTL818X_MSR_NO_LINK            (0 << 2)
        !           117: #define RTL818X_MSR_ADHOC              (1 << 2)
        !           118: #define RTL818X_MSR_INFRA              (2 << 2)
        !           119: #define RTL818X_MSR_MASTER             (3 << 2)
        !           120: #define RTL818X_MSR_ENEDCA             (4 << 2)
        !           121:        u8      CONFIG3;
        !           122: #define RTL818X_CONFIG3_ANAPARAM_WRITE (1 << 6)
        !           123: #define RTL818X_CONFIG3_GNT_SELECT     (1 << 7)
        !           124:        u8      CONFIG4;
        !           125: #define RTL818X_CONFIG4_POWEROFF       (1 << 6)
        !           126: #define RTL818X_CONFIG4_VCOOFF         (1 << 7)
        !           127:        u8      TESTR;
        !           128:        u8      reserved_9[2];
        !           129:        u8      PGSELECT;
        !           130:        u8      SECURITY;
        !           131:        u32     ANAPARAM2;
        !           132:        u8      reserved_10[12];
        !           133:        u16     BEACON_INTERVAL;
        !           134:        u16     ATIM_WND;
        !           135:        u16     BEACON_INTERVAL_TIME;
        !           136:        u16     ATIMTR_INTERVAL;
        !           137:        u8      PHY_DELAY;
        !           138:        u8      CARRIER_SENSE_COUNTER;
        !           139:        u8      reserved_11[2];
        !           140:        u8      PHY[4];
        !           141:        u16     RFPinsOutput;
        !           142:        u16     RFPinsEnable;
        !           143:        u16     RFPinsSelect;
        !           144:        u16     RFPinsInput;
        !           145:        u32     RF_PARA;
        !           146:        u32     RF_TIMING;
        !           147:        u8      GP_ENABLE;
        !           148:        u8      GPIO;
        !           149:        u8      reserved_12[2];
        !           150:        u32     HSSI_PARA;
        !           151:        u8      reserved_13[4];
        !           152:        u8      TX_AGC_CTL;
        !           153: #define RTL818X_TX_AGC_CTL_PERPACKET_GAIN_SHIFT                (1 << 0)
        !           154: #define RTL818X_TX_AGC_CTL_PERPACKET_ANTSEL_SHIFT      (1 << 1)
        !           155: #define RTL818X_TX_AGC_CTL_FEEDBACK_ANT                        (1 << 2)
        !           156:        u8      TX_GAIN_CCK;
        !           157:        u8      TX_GAIN_OFDM;
        !           158:        u8      TX_ANTENNA;
        !           159:        u8      reserved_14[16];
        !           160:        u8      WPA_CONF;
        !           161:        u8      reserved_15[3];
        !           162:        u8      SIFS;
        !           163:        u8      DIFS;
        !           164:        u8      SLOT;
        !           165:        u8      reserved_16[5];
        !           166:        u8      CW_CONF;
        !           167: #define RTL818X_CW_CONF_PERPACKET_CW_SHIFT     (1 << 0)
        !           168: #define RTL818X_CW_CONF_PERPACKET_RETRY_SHIFT  (1 << 1)
        !           169:        u8      CW_VAL;
        !           170:        u8      RATE_FALLBACK;
        !           171: #define RTL818X_RATE_FALLBACK_ENABLE   (1 << 7)
        !           172:        u8      ACM_CONTROL;
        !           173:        u8      reserved_17[24];
        !           174:        u8      CONFIG5;
        !           175:        u8      TX_DMA_POLLING;
        !           176:        u8      reserved_18[2];
        !           177:        u16     CWR;
        !           178:        u8      RETRY_CTR;
        !           179:        u8      reserved_19[3];
        !           180:        u16     INT_MIG;
        !           181: /* RTL818X_R8187B_*: magic numbers from ioregisters */
        !           182: #define RTL818X_R8187B_B       0
        !           183: #define RTL818X_R8187B_D       1
        !           184: #define RTL818X_R8187B_E       2
        !           185:        u32     RDSAR;
        !           186:        u16     TID_AC_MAP;
        !           187:        u8      reserved_20[4];
        !           188:        u8      ANAPARAM3;
        !           189:        u8      reserved_21[5];
        !           190:        u16     FEMR;
        !           191:        u8      reserved_22[4];
        !           192:        u16     TALLY_CNT;
        !           193:        u8      TALLY_SEL;
        !           194: } __attribute__((packed));
        !           195: 
        !           196: #define MAX_RX_SIZE IEEE80211_MAX_FRAME_LEN
        !           197: 
        !           198: #define RF_PARAM_ANALOGPHY     (1 << 0)
        !           199: #define RF_PARAM_ANTBDEFAULT   (1 << 1)
        !           200: #define RF_PARAM_CARRIERSENSE1 (1 << 2)
        !           201: #define RF_PARAM_CARRIERSENSE2 (1 << 3)
        !           202: 
        !           203: #define BB_ANTATTEN_CHAN14     0x0C
        !           204: #define BB_ANTENNA_B           0x40
        !           205: 
        !           206: #define BB_HOST_BANG           (1 << 30)
        !           207: #define BB_HOST_BANG_EN        (1 << 2)
        !           208: #define BB_HOST_BANG_CLK       (1 << 1)
        !           209: #define BB_HOST_BANG_DATA      1
        !           210: 
        !           211: #define ANAPARAM_TXDACOFF_SHIFT        27
        !           212: #define ANAPARAM_PWR0_SHIFT    28
        !           213: #define ANAPARAM_PWR0_MASK     (0x07 << ANAPARAM_PWR0_SHIFT)
        !           214: #define ANAPARAM_PWR1_SHIFT    20
        !           215: #define ANAPARAM_PWR1_MASK     (0x7F << ANAPARAM_PWR1_SHIFT)
        !           216: 
        !           217: #define RTL818X_RX_RING_SIZE   8 /* doesn't have to be a power of 2 */
        !           218: #define RTL818X_TX_RING_SIZE   8 /* nor this [but 2^n is very slightly faster] */
        !           219: #define RTL818X_RING_ALIGN     256
        !           220: 
        !           221: #define RTL818X_MAX_RETRIES     4
        !           222: 
        !           223: enum rtl818x_tx_desc_flags {
        !           224:        RTL818X_TX_DESC_FLAG_NO_ENC     = (1 << 15),
        !           225:        RTL818X_TX_DESC_FLAG_TX_OK      = (1 << 15),
        !           226:        RTL818X_TX_DESC_FLAG_SPLCP      = (1 << 16),
        !           227:        RTL818X_TX_DESC_FLAG_RX_UNDER   = (1 << 16),
        !           228:        RTL818X_TX_DESC_FLAG_MOREFRAG   = (1 << 17),
        !           229:        RTL818X_TX_DESC_FLAG_CTS        = (1 << 18),
        !           230:        RTL818X_TX_DESC_FLAG_RTS        = (1 << 23),
        !           231:        RTL818X_TX_DESC_FLAG_LS         = (1 << 28),
        !           232:        RTL818X_TX_DESC_FLAG_FS         = (1 << 29),
        !           233:        RTL818X_TX_DESC_FLAG_DMA        = (1 << 30),
        !           234:        RTL818X_TX_DESC_FLAG_OWN        = (1 << 31)
        !           235: };
        !           236: 
        !           237: struct rtl818x_tx_desc {
        !           238:        u32 flags;
        !           239:        u16 rts_duration;
        !           240:        u16 plcp_len;
        !           241:        u32 tx_buf;
        !           242:        u32 frame_len;
        !           243:        u32 next_tx_desc;
        !           244:        u8 cw;
        !           245:        u8 retry_limit;
        !           246:        u8 agc;
        !           247:        u8 flags2;
        !           248:        u32 reserved[2];
        !           249: } __attribute__ ((packed));
        !           250: 
        !           251: enum rtl818x_rx_desc_flags {
        !           252:        RTL818X_RX_DESC_FLAG_ICV_ERR    = (1 << 12),
        !           253:        RTL818X_RX_DESC_FLAG_CRC32_ERR  = (1 << 13),
        !           254:        RTL818X_RX_DESC_FLAG_PM         = (1 << 14),
        !           255:        RTL818X_RX_DESC_FLAG_RX_ERR     = (1 << 15),
        !           256:        RTL818X_RX_DESC_FLAG_BCAST      = (1 << 16),
        !           257:        RTL818X_RX_DESC_FLAG_PAM        = (1 << 17),
        !           258:        RTL818X_RX_DESC_FLAG_MCAST      = (1 << 18),
        !           259:        RTL818X_RX_DESC_FLAG_QOS        = (1 << 19), /* RTL8187(B) only */
        !           260:        RTL818X_RX_DESC_FLAG_TRSW       = (1 << 24), /* RTL8187(B) only */
        !           261:        RTL818X_RX_DESC_FLAG_SPLCP      = (1 << 25),
        !           262:        RTL818X_RX_DESC_FLAG_FOF        = (1 << 26),
        !           263:        RTL818X_RX_DESC_FLAG_DMA_FAIL   = (1 << 27),
        !           264:        RTL818X_RX_DESC_FLAG_LS         = (1 << 28),
        !           265:        RTL818X_RX_DESC_FLAG_FS         = (1 << 29),
        !           266:        RTL818X_RX_DESC_FLAG_EOR        = (1 << 30),
        !           267:        RTL818X_RX_DESC_FLAG_OWN        = (1 << 31)
        !           268: };
        !           269: 
        !           270: struct rtl818x_rx_desc {
        !           271:        u32 flags;
        !           272:        u32 flags2;
        !           273:        union {
        !           274:                u32 rx_buf;
        !           275:                u64 tsft;
        !           276:        };
        !           277: } __attribute__ ((packed));
        !           278: 
        !           279: struct rtl818x_priv {
        !           280:        struct rtl818x_csr *map;
        !           281:        const struct rtl818x_rf_ops *rf;
        !           282:        int rf_flag; /* whatever RF driver wishes to use it for */
        !           283:        int hw_rate;
        !           284:        int hw_rtscts_rate;
        !           285: 
        !           286:        struct spi_bit_basher spibit;
        !           287:        struct spi_device eeprom;
        !           288: 
        !           289:        struct rtl818x_rx_desc *rx_ring;
        !           290:        u32 rx_ring_dma;
        !           291:        unsigned int rx_idx;    /* next desc to be filled by card */
        !           292:        struct io_buffer *rx_buf[RTL818X_RX_RING_SIZE];
        !           293: 
        !           294:        struct rtl818x_tx_desc *tx_ring;
        !           295:        u32 tx_ring_dma;
        !           296:        unsigned int tx_cons;   /* next desc to be filled by card */
        !           297:        unsigned int tx_prod;   /* next desc to be filled by driver */
        !           298:        struct io_buffer *tx_buf[RTL818X_TX_RING_SIZE];
        !           299: 
        !           300:        struct pci_device *pdev;
        !           301:        u32 rx_conf;
        !           302: 
        !           303:        u16 txpower[14];
        !           304: 
        !           305:        int r8185;
        !           306:        u32 anaparam;
        !           307:        u16 rfparam;
        !           308:        u8 csthreshold;
        !           309: };
        !           310: 
        !           311: void rtl818x_write_phy(struct net80211_device *dev, u8 addr, u32 data);
        !           312: void rtl818x_set_anaparam(struct rtl818x_priv *priv, u32 anaparam);
        !           313: 
        !           314: static inline u8 rtl818x_ioread8(struct rtl818x_priv *priv __unused, u8 *addr)
        !           315: {
        !           316:        return inb(addr);
        !           317: }
        !           318: 
        !           319: static inline u16 rtl818x_ioread16(struct rtl818x_priv *priv __unused, u16 *addr)
        !           320: {
        !           321:        return inw(addr);
        !           322: }
        !           323: 
        !           324: static inline u32 rtl818x_ioread32(struct rtl818x_priv *priv __unused, u32 *addr)
        !           325: {
        !           326:        return inl(addr);
        !           327: }
        !           328: 
        !           329: static inline void rtl818x_iowrite8(struct rtl818x_priv *priv __unused,
        !           330:                                    u8 *addr, u8 val)
        !           331: {
        !           332:        outb(val, addr);
        !           333: }
        !           334: 
        !           335: static inline void rtl818x_iowrite16(struct rtl818x_priv *priv __unused,
        !           336:                                     u16 *addr, u16 val)
        !           337: {
        !           338:        outw(val, addr);
        !           339: }
        !           340: 
        !           341: static inline void rtl818x_iowrite32(struct rtl818x_priv *priv __unused,
        !           342:                                     u32 *addr, u32 val)
        !           343: {
        !           344:        outl(val, addr);
        !           345: }
        !           346: 
        !           347: #define RTL818X_RF_DRIVERS __table(struct rtl818x_rf_ops, "rtl818x_rf_drivers")
        !           348: #define __rtl818x_rf_driver __table_entry(RTL818X_RF_DRIVERS, 01)
        !           349: 
        !           350: struct rtl818x_rf_ops {
        !           351:        char *name;
        !           352:        u8 id;                  /* as identified in EEPROM */
        !           353:        void (*init)(struct net80211_device *dev);
        !           354:        void (*stop)(struct net80211_device *dev);
        !           355:        void (*set_chan)(struct net80211_device *dev, struct net80211_channel *chan);
        !           356:        void (*conf_erp)(struct net80211_device *dev); /* set based on dev->erp_flags */
        !           357: };
        !           358: 
        !           359: #endif /* RTL818X_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.