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