xref: /openbmc/qemu/include/hw/net/allwinner-sun8i-emac.h (revision ec11dc41eec5142b4776db1296972c6323ba5847)
129d08975SNiek Linnenbank /*
229d08975SNiek Linnenbank  * Allwinner Sun8i Ethernet MAC emulation
329d08975SNiek Linnenbank  *
429d08975SNiek Linnenbank  * Copyright (C) 2019 Niek Linnenbank <nieklinnenbank@gmail.com>
529d08975SNiek Linnenbank  *
629d08975SNiek Linnenbank  * This program is free software: you can redistribute it and/or modify
729d08975SNiek Linnenbank  * it under the terms of the GNU General Public License as published by
829d08975SNiek Linnenbank  * the Free Software Foundation, either version 2 of the License, or
929d08975SNiek Linnenbank  * (at your option) any later version.
1029d08975SNiek Linnenbank  *
1129d08975SNiek Linnenbank  * This program is distributed in the hope that it will be useful,
1229d08975SNiek Linnenbank  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1329d08975SNiek Linnenbank  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1429d08975SNiek Linnenbank  * GNU General Public License for more details.
1529d08975SNiek Linnenbank  *
1629d08975SNiek Linnenbank  * You should have received a copy of the GNU General Public License
1729d08975SNiek Linnenbank  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
1829d08975SNiek Linnenbank  */
1929d08975SNiek Linnenbank 
2029d08975SNiek Linnenbank #ifndef HW_NET_ALLWINNER_SUN8I_EMAC_H
2129d08975SNiek Linnenbank #define HW_NET_ALLWINNER_SUN8I_EMAC_H
2229d08975SNiek Linnenbank 
2329d08975SNiek Linnenbank #include "qom/object.h"
2429d08975SNiek Linnenbank #include "net/net.h"
2529d08975SNiek Linnenbank #include "hw/sysbus.h"
2629d08975SNiek Linnenbank 
2729d08975SNiek Linnenbank /**
2829d08975SNiek Linnenbank  * Object model
2929d08975SNiek Linnenbank  * @{
3029d08975SNiek Linnenbank  */
3129d08975SNiek Linnenbank 
3229d08975SNiek Linnenbank #define TYPE_AW_SUN8I_EMAC "allwinner-sun8i-emac"
338063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(AwSun8iEmacState, AW_SUN8I_EMAC)
3429d08975SNiek Linnenbank 
3529d08975SNiek Linnenbank /** @} */
3629d08975SNiek Linnenbank 
3729d08975SNiek Linnenbank /**
3829d08975SNiek Linnenbank  * Allwinner Sun8i EMAC object instance state
3929d08975SNiek Linnenbank  */
40db1015e9SEduardo Habkost struct AwSun8iEmacState {
4129d08975SNiek Linnenbank     /*< private >*/
4229d08975SNiek Linnenbank     SysBusDevice  parent_obj;
4329d08975SNiek Linnenbank     /*< public >*/
4429d08975SNiek Linnenbank 
4529d08975SNiek Linnenbank     /** Maps I/O registers in physical memory */
4629d08975SNiek Linnenbank     MemoryRegion iomem;
4729d08975SNiek Linnenbank 
4829d08975SNiek Linnenbank     /** Interrupt output signal to notify CPU */
4929d08975SNiek Linnenbank     qemu_irq     irq;
5029d08975SNiek Linnenbank 
514757cb85SPhilippe Mathieu-Daudé     /** Memory region where DMA transfers are done */
524757cb85SPhilippe Mathieu-Daudé     MemoryRegion *dma_mr;
534757cb85SPhilippe Mathieu-Daudé 
544757cb85SPhilippe Mathieu-Daudé     /** Address space used internally for DMA transfers */
554757cb85SPhilippe Mathieu-Daudé     AddressSpace dma_as;
564757cb85SPhilippe Mathieu-Daudé 
5729d08975SNiek Linnenbank     /** Generic Network Interface Controller (NIC) for networking API */
5829d08975SNiek Linnenbank     NICState     *nic;
5929d08975SNiek Linnenbank 
6029d08975SNiek Linnenbank     /** Generic Network Interface Controller (NIC) configuration */
6129d08975SNiek Linnenbank     NICConf      conf;
6229d08975SNiek Linnenbank 
6329d08975SNiek Linnenbank     /**
6429d08975SNiek Linnenbank      * @name Media Independent Interface (MII)
6529d08975SNiek Linnenbank      * @{
6629d08975SNiek Linnenbank      */
6729d08975SNiek Linnenbank 
6829d08975SNiek Linnenbank     uint8_t      mii_phy_addr;  /**< PHY address */
6929d08975SNiek Linnenbank     uint32_t     mii_cr;        /**< Control */
7029d08975SNiek Linnenbank     uint32_t     mii_st;        /**< Status */
7129d08975SNiek Linnenbank     uint32_t     mii_adv;       /**< Advertised Abilities */
7229d08975SNiek Linnenbank 
7329d08975SNiek Linnenbank     /** @} */
7429d08975SNiek Linnenbank 
7529d08975SNiek Linnenbank     /**
7629d08975SNiek Linnenbank      * @name Hardware Registers
7729d08975SNiek Linnenbank      * @{
7829d08975SNiek Linnenbank      */
7929d08975SNiek Linnenbank 
8029d08975SNiek Linnenbank     uint32_t     basic_ctl0;    /**< Basic Control 0 */
8129d08975SNiek Linnenbank     uint32_t     basic_ctl1;    /**< Basic Control 1 */
8229d08975SNiek Linnenbank     uint32_t     int_en;        /**< Interrupt Enable */
8329d08975SNiek Linnenbank     uint32_t     int_sta;       /**< Interrupt Status */
8429d08975SNiek Linnenbank     uint32_t     frm_flt;       /**< Receive Frame Filter */
8529d08975SNiek Linnenbank 
8629d08975SNiek Linnenbank     uint32_t     rx_ctl0;       /**< Receive Control 0 */
8729d08975SNiek Linnenbank     uint32_t     rx_ctl1;       /**< Receive Control 1 */
8829d08975SNiek Linnenbank     uint32_t     rx_desc_head;  /**< Receive Descriptor List Address */
8929d08975SNiek Linnenbank     uint32_t     rx_desc_curr;  /**< Current Receive Descriptor Address */
9029d08975SNiek Linnenbank 
9129d08975SNiek Linnenbank     uint32_t     tx_ctl0;       /**< Transmit Control 0 */
9229d08975SNiek Linnenbank     uint32_t     tx_ctl1;       /**< Transmit Control 1 */
9329d08975SNiek Linnenbank     uint32_t     tx_desc_head;  /**< Transmit Descriptor List Address */
9429d08975SNiek Linnenbank     uint32_t     tx_desc_curr;  /**< Current Transmit Descriptor Address */
9529d08975SNiek Linnenbank     uint32_t     tx_flowctl;    /**< Transmit Flow Control */
9629d08975SNiek Linnenbank 
9729d08975SNiek Linnenbank     uint32_t     mii_cmd;       /**< Management Interface Command */
9829d08975SNiek Linnenbank     uint32_t     mii_data;      /**< Management Interface Data */
9929d08975SNiek Linnenbank 
10029d08975SNiek Linnenbank     /** @} */
10129d08975SNiek Linnenbank 
102db1015e9SEduardo Habkost };
10329d08975SNiek Linnenbank 
104*ea9cea93SMarkus Armbruster #endif /* HW_NET_ALLWINNER_SUN8I_EMAC_H */
105