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