xref: /qemu/include/hw/net/allwinner-sun8i-emac.h (revision db1015e92e04835c9eb50c29625fe566d1202dbd)
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"
33*db1015e9SEduardo Habkost typedef struct AwSun8iEmacState AwSun8iEmacState;
3429d08975SNiek Linnenbank #define AW_SUN8I_EMAC(obj) \
3529d08975SNiek Linnenbank     OBJECT_CHECK(AwSun8iEmacState, (obj), TYPE_AW_SUN8I_EMAC)
3629d08975SNiek Linnenbank 
3729d08975SNiek Linnenbank /** @} */
3829d08975SNiek Linnenbank 
3929d08975SNiek Linnenbank /**
4029d08975SNiek Linnenbank  * Allwinner Sun8i EMAC object instance state
4129d08975SNiek Linnenbank  */
42*db1015e9SEduardo Habkost struct AwSun8iEmacState {
4329d08975SNiek Linnenbank     /*< private >*/
4429d08975SNiek Linnenbank     SysBusDevice  parent_obj;
4529d08975SNiek Linnenbank     /*< public >*/
4629d08975SNiek Linnenbank 
4729d08975SNiek Linnenbank     /** Maps I/O registers in physical memory */
4829d08975SNiek Linnenbank     MemoryRegion iomem;
4929d08975SNiek Linnenbank 
5029d08975SNiek Linnenbank     /** Interrupt output signal to notify CPU */
5129d08975SNiek Linnenbank     qemu_irq     irq;
5229d08975SNiek Linnenbank 
534757cb85SPhilippe Mathieu-Daudé     /** Memory region where DMA transfers are done */
544757cb85SPhilippe Mathieu-Daudé     MemoryRegion *dma_mr;
554757cb85SPhilippe Mathieu-Daudé 
564757cb85SPhilippe Mathieu-Daudé     /** Address space used internally for DMA transfers */
574757cb85SPhilippe Mathieu-Daudé     AddressSpace dma_as;
584757cb85SPhilippe Mathieu-Daudé 
5929d08975SNiek Linnenbank     /** Generic Network Interface Controller (NIC) for networking API */
6029d08975SNiek Linnenbank     NICState     *nic;
6129d08975SNiek Linnenbank 
6229d08975SNiek Linnenbank     /** Generic Network Interface Controller (NIC) configuration */
6329d08975SNiek Linnenbank     NICConf      conf;
6429d08975SNiek Linnenbank 
6529d08975SNiek Linnenbank     /**
6629d08975SNiek Linnenbank      * @name Media Independent Interface (MII)
6729d08975SNiek Linnenbank      * @{
6829d08975SNiek Linnenbank      */
6929d08975SNiek Linnenbank 
7029d08975SNiek Linnenbank     uint8_t      mii_phy_addr;  /**< PHY address */
7129d08975SNiek Linnenbank     uint32_t     mii_cr;        /**< Control */
7229d08975SNiek Linnenbank     uint32_t     mii_st;        /**< Status */
7329d08975SNiek Linnenbank     uint32_t     mii_adv;       /**< Advertised Abilities */
7429d08975SNiek Linnenbank 
7529d08975SNiek Linnenbank     /** @} */
7629d08975SNiek Linnenbank 
7729d08975SNiek Linnenbank     /**
7829d08975SNiek Linnenbank      * @name Hardware Registers
7929d08975SNiek Linnenbank      * @{
8029d08975SNiek Linnenbank      */
8129d08975SNiek Linnenbank 
8229d08975SNiek Linnenbank     uint32_t     basic_ctl0;    /**< Basic Control 0 */
8329d08975SNiek Linnenbank     uint32_t     basic_ctl1;    /**< Basic Control 1 */
8429d08975SNiek Linnenbank     uint32_t     int_en;        /**< Interrupt Enable */
8529d08975SNiek Linnenbank     uint32_t     int_sta;       /**< Interrupt Status */
8629d08975SNiek Linnenbank     uint32_t     frm_flt;       /**< Receive Frame Filter */
8729d08975SNiek Linnenbank 
8829d08975SNiek Linnenbank     uint32_t     rx_ctl0;       /**< Receive Control 0 */
8929d08975SNiek Linnenbank     uint32_t     rx_ctl1;       /**< Receive Control 1 */
9029d08975SNiek Linnenbank     uint32_t     rx_desc_head;  /**< Receive Descriptor List Address */
9129d08975SNiek Linnenbank     uint32_t     rx_desc_curr;  /**< Current Receive Descriptor Address */
9229d08975SNiek Linnenbank 
9329d08975SNiek Linnenbank     uint32_t     tx_ctl0;       /**< Transmit Control 0 */
9429d08975SNiek Linnenbank     uint32_t     tx_ctl1;       /**< Transmit Control 1 */
9529d08975SNiek Linnenbank     uint32_t     tx_desc_head;  /**< Transmit Descriptor List Address */
9629d08975SNiek Linnenbank     uint32_t     tx_desc_curr;  /**< Current Transmit Descriptor Address */
9729d08975SNiek Linnenbank     uint32_t     tx_flowctl;    /**< Transmit Flow Control */
9829d08975SNiek Linnenbank 
9929d08975SNiek Linnenbank     uint32_t     mii_cmd;       /**< Management Interface Command */
10029d08975SNiek Linnenbank     uint32_t     mii_data;      /**< Management Interface Data */
10129d08975SNiek Linnenbank 
10229d08975SNiek Linnenbank     /** @} */
10329d08975SNiek Linnenbank 
104*db1015e9SEduardo Habkost };
10529d08975SNiek Linnenbank 
10629d08975SNiek Linnenbank #endif /* HW_NET_ALLWINNER_SUN8I_H */
107