Revision b946a153 hw/mipsnet.c
b/hw/mipsnet.c | ||
---|---|---|
33 | 33 |
uint32_t intctl; |
34 | 34 |
uint8_t rx_buffer[MAX_ETH_FRAME_SIZE]; |
35 | 35 |
uint8_t tx_buffer[MAX_ETH_FRAME_SIZE]; |
36 |
int io_base; |
|
36 | 37 |
qemu_irq irq; |
37 | 38 |
VLANClientState *vc; |
38 | 39 |
} MIPSnetState; |
... | ... | |
231 | 232 |
return 0; |
232 | 233 |
} |
233 | 234 |
|
235 |
static void mipsnet_cleanup(VLANClientState *vc) |
|
236 |
{ |
|
237 |
MIPSnetState *s = vc->opaque; |
|
238 |
|
|
239 |
unregister_savevm("mipsnet", s); |
|
240 |
|
|
241 |
isa_unassign_ioport(s->io_base, 36); |
|
242 |
|
|
243 |
qemu_free(s); |
|
244 |
} |
|
245 |
|
|
234 | 246 |
void mipsnet_init (int base, qemu_irq irq, NICInfo *nd) |
235 | 247 |
{ |
236 | 248 |
MIPSnetState *s; |
... | ... | |
246 | 258 |
register_ioport_write(base, 36, 4, mipsnet_ioport_write, s); |
247 | 259 |
register_ioport_read(base, 36, 4, mipsnet_ioport_read, s); |
248 | 260 |
|
261 |
s->io_base = base; |
|
249 | 262 |
s->irq = irq; |
250 | 263 |
if (nd && nd->vlan) { |
251 | 264 |
s->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name, |
252 |
mipsnet_receive, mipsnet_can_receive, s); |
|
265 |
mipsnet_receive, mipsnet_can_receive, |
|
266 |
mipsnet_cleanup, s); |
|
253 | 267 |
} else { |
254 | 268 |
s->vc = NULL; |
255 | 269 |
} |
Also available in: Unified diff