xref: /openbmc/qemu/include/hw/net/dp8393x.h (revision b455ce4c2f300c8ba47cba7232dd03261368a4cb)
1*2db48d03SMark Cave-Ayland /*
2*2db48d03SMark Cave-Ayland  * QEMU NS SONIC DP8393x netcard
3*2db48d03SMark Cave-Ayland  *
4*2db48d03SMark Cave-Ayland  * Copyright (c) 2008-2009 Herve Poussineau
5*2db48d03SMark Cave-Ayland  *
6*2db48d03SMark Cave-Ayland  * This program is free software; you can redistribute it and/or
7*2db48d03SMark Cave-Ayland  * modify it under the terms of the GNU General Public License as
8*2db48d03SMark Cave-Ayland  * published by the Free Software Foundation; either version 2 of
9*2db48d03SMark Cave-Ayland  * the License, or (at your option) any later version.
10*2db48d03SMark Cave-Ayland  *
11*2db48d03SMark Cave-Ayland  * This program is distributed in the hope that it will be useful,
12*2db48d03SMark Cave-Ayland  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13*2db48d03SMark Cave-Ayland  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*2db48d03SMark Cave-Ayland  * GNU General Public License for more details.
15*2db48d03SMark Cave-Ayland  *
16*2db48d03SMark Cave-Ayland  * You should have received a copy of the GNU General Public License along
17*2db48d03SMark Cave-Ayland  * with this program; if not, see <http://www.gnu.org/licenses/>.
18*2db48d03SMark Cave-Ayland  */
19*2db48d03SMark Cave-Ayland 
20*2db48d03SMark Cave-Ayland #ifndef HW_NET_DP8393X_H
21*2db48d03SMark Cave-Ayland #define HW_NET_DP8393X_H
22*2db48d03SMark Cave-Ayland 
23*2db48d03SMark Cave-Ayland #include "hw/sysbus.h"
24*2db48d03SMark Cave-Ayland #include "net/net.h"
25*2db48d03SMark Cave-Ayland #include "exec/memory.h"
26*2db48d03SMark Cave-Ayland 
27*2db48d03SMark Cave-Ayland #define SONIC_REG_COUNT  0x40
28*2db48d03SMark Cave-Ayland 
29*2db48d03SMark Cave-Ayland #define TYPE_DP8393X "dp8393x"
30*2db48d03SMark Cave-Ayland OBJECT_DECLARE_SIMPLE_TYPE(dp8393xState, DP8393X)
31*2db48d03SMark Cave-Ayland 
32*2db48d03SMark Cave-Ayland struct dp8393xState {
33*2db48d03SMark Cave-Ayland     SysBusDevice parent_obj;
34*2db48d03SMark Cave-Ayland 
35*2db48d03SMark Cave-Ayland     /* Hardware */
36*2db48d03SMark Cave-Ayland     uint8_t it_shift;
37*2db48d03SMark Cave-Ayland     bool big_endian;
38*2db48d03SMark Cave-Ayland     bool last_rba_is_full;
39*2db48d03SMark Cave-Ayland     qemu_irq irq;
40*2db48d03SMark Cave-Ayland     int irq_level;
41*2db48d03SMark Cave-Ayland     QEMUTimer *watchdog;
42*2db48d03SMark Cave-Ayland     int64_t wt_last_update;
43*2db48d03SMark Cave-Ayland     NICConf conf;
44*2db48d03SMark Cave-Ayland     NICState *nic;
45*2db48d03SMark Cave-Ayland     MemoryRegion mmio;
46*2db48d03SMark Cave-Ayland 
47*2db48d03SMark Cave-Ayland     /* Registers */
48*2db48d03SMark Cave-Ayland     uint16_t cam[16][3];
49*2db48d03SMark Cave-Ayland     uint16_t regs[SONIC_REG_COUNT];
50*2db48d03SMark Cave-Ayland 
51*2db48d03SMark Cave-Ayland     /* Temporaries */
52*2db48d03SMark Cave-Ayland     uint8_t tx_buffer[0x10000];
53*2db48d03SMark Cave-Ayland     int loopback_packet;
54*2db48d03SMark Cave-Ayland 
55*2db48d03SMark Cave-Ayland     /* Memory access */
56*2db48d03SMark Cave-Ayland     MemoryRegion *dma_mr;
57*2db48d03SMark Cave-Ayland     AddressSpace as;
58*2db48d03SMark Cave-Ayland };
59*2db48d03SMark Cave-Ayland 
60*2db48d03SMark Cave-Ayland #endif
61