aboutsummaryrefslogtreecommitdiff
path: root/hw/pcnet.c
diff options
context:
space:
mode:
authorblueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162>2007-05-27 19:38:20 +0000
committerblueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162>2007-05-27 19:38:20 +0000
commitdbe06e1841028ffa080ffe06273397fc583a7fcc (patch)
tree7623fe232285badb6d69a049a4e843810d7830a1 /hw/pcnet.c
parent833c7174ce5145397d2b3405f6857ca607fed1f1 (diff)
downloadqemu-dbe06e1841028ffa080ffe06273397fc583a7fcc.zip
qemu-dbe06e1841028ffa080ffe06273397fc583a7fcc.tar.gz
qemu-dbe06e1841028ffa080ffe06273397fc583a7fcc.tar.bz2
Handle unconnected vlan case in lance
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2878 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw/pcnet.c')
-rw-r--r--hw/pcnet.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/hw/pcnet.c b/hw/pcnet.c
index 9c4dd06..3fffd44 100644
--- a/hw/pcnet.c
+++ b/hw/pcnet.c
@@ -1267,7 +1267,8 @@ static void pcnet_transmit(PCNetState *s)
if (CSR_LOOP(s))
pcnet_receive(s, s->buffer, s->xmit_pos);
else
- qemu_send_packet(s->vc, s->buffer, s->xmit_pos);
+ if (s->vc)
+ qemu_send_packet(s->vc, s->buffer, s->xmit_pos);
s->csr[0] &= ~0x0008; /* clear TDMD */
s->csr[4] |= 0x0004; /* set TXSTRT */
@@ -1562,7 +1563,8 @@ static void pcnet_h_reset(void *opaque)
/* Initialize the PROM */
- memcpy(s->prom, s->nd->macaddr, 6);
+ if (s->nd)
+ memcpy(s->prom, s->nd->macaddr, 6);
s->prom[12] = s->prom[13] = 0x00;
s->prom[14] = s->prom[15] = 0x57;
@@ -1898,18 +1900,21 @@ static void pcnet_common_init(PCNetState *d, NICInfo *nd, const char *info_str)
d->nd = nd;
- d->vc = qemu_new_vlan_client(nd->vlan, pcnet_receive,
- pcnet_can_receive, d);
-
- snprintf(d->vc->info_str, sizeof(d->vc->info_str),
- "pcnet macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
- d->nd->macaddr[0],
- d->nd->macaddr[1],
- d->nd->macaddr[2],
- d->nd->macaddr[3],
- d->nd->macaddr[4],
- d->nd->macaddr[5]);
-
+ if (nd && nd->vlan) {
+ d->vc = qemu_new_vlan_client(nd->vlan, pcnet_receive,
+ pcnet_can_receive, d);
+
+ snprintf(d->vc->info_str, sizeof(d->vc->info_str),
+ "pcnet macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
+ d->nd->macaddr[0],
+ d->nd->macaddr[1],
+ d->nd->macaddr[2],
+ d->nd->macaddr[3],
+ d->nd->macaddr[4],
+ d->nd->macaddr[5]);
+ } else {
+ d->vc = NULL;
+ }
pcnet_h_reset(d);
register_savevm("pcnet", 0, 2, pcnet_save, pcnet_load, d);
}