mirror of https://gitlab.com/qemu-project/qemu
eepro100: Don't allow writing SCBStatus
SCBStatus is readonly, but most drivers which were derived from the old Linux eepro100.c do a word write to this address when they want to acknowledge interrupts. So we have to mask these writes here. The patch also removes old unused code for status read / write. Signed-off-by: Stefan Weil <weil@mail.berlios.de> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
f7e2aca834
commit
e74818f3cd
|
@ -237,10 +237,6 @@ typedef struct {
|
||||||
/* Statistical counters. Also used for wake-up packet (i82559). */
|
/* Statistical counters. Also used for wake-up packet (i82559). */
|
||||||
eepro100_stats_t statistics;
|
eepro100_stats_t statistics;
|
||||||
|
|
||||||
#if 0
|
|
||||||
uint16_t status;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Configuration bytes. */
|
/* Configuration bytes. */
|
||||||
uint8_t configuration[22];
|
uint8_t configuration[22];
|
||||||
|
|
||||||
|
@ -693,21 +689,6 @@ static char *regname(uint32_t addr)
|
||||||
}
|
}
|
||||||
#endif /* DEBUG_EEPRO100 */
|
#endif /* DEBUG_EEPRO100 */
|
||||||
|
|
||||||
#if 0
|
|
||||||
static uint16_t eepro100_read_status(EEPRO100State * s)
|
|
||||||
{
|
|
||||||
uint16_t val = s->status;
|
|
||||||
TRACE(OTHER, logout("val=0x%04x\n", val));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void eepro100_write_status(EEPRO100State * s, uint16_t val)
|
|
||||||
{
|
|
||||||
TRACE(OTHER, logout("val=0x%04x\n", val));
|
|
||||||
s->status = val;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
* Command emulation.
|
* Command emulation.
|
||||||
|
@ -1364,15 +1345,7 @@ static uint8_t eepro100_read1(EEPRO100State * s, uint32_t addr)
|
||||||
|
|
||||||
switch (addr) {
|
switch (addr) {
|
||||||
case SCBStatus:
|
case SCBStatus:
|
||||||
#if 0
|
|
||||||
val = eepro100_read_status(s);
|
|
||||||
#endif
|
|
||||||
TRACE(OTHER, logout("addr=%s val=0x%02x\n", regname(addr), val));
|
|
||||||
break;
|
|
||||||
case SCBAck:
|
case SCBAck:
|
||||||
#if 0
|
|
||||||
val = eepro100_read_status(s);
|
|
||||||
#endif
|
|
||||||
TRACE(OTHER, logout("addr=%s val=0x%02x\n", regname(addr), val));
|
TRACE(OTHER, logout("addr=%s val=0x%02x\n", regname(addr), val));
|
||||||
break;
|
break;
|
||||||
case SCBCmd:
|
case SCBCmd:
|
||||||
|
@ -1415,9 +1388,6 @@ static uint16_t eepro100_read2(EEPRO100State * s, uint32_t addr)
|
||||||
|
|
||||||
switch (addr) {
|
switch (addr) {
|
||||||
case SCBStatus:
|
case SCBStatus:
|
||||||
#if 0
|
|
||||||
val = eepro100_read_status(s);
|
|
||||||
#endif
|
|
||||||
case SCBCmd:
|
case SCBCmd:
|
||||||
TRACE(OTHER, logout("addr=%s val=0x%04x\n", regname(addr), val));
|
TRACE(OTHER, logout("addr=%s val=0x%04x\n", regname(addr), val));
|
||||||
break;
|
break;
|
||||||
|
@ -1441,9 +1411,6 @@ static uint32_t eepro100_read4(EEPRO100State * s, uint32_t addr)
|
||||||
|
|
||||||
switch (addr) {
|
switch (addr) {
|
||||||
case SCBStatus:
|
case SCBStatus:
|
||||||
#if 0
|
|
||||||
val = eepro100_read_status(s);
|
|
||||||
#endif
|
|
||||||
TRACE(OTHER, logout("addr=%s val=0x%08x\n", regname(addr), val));
|
TRACE(OTHER, logout("addr=%s val=0x%08x\n", regname(addr), val));
|
||||||
break;
|
break;
|
||||||
case SCBPointer:
|
case SCBPointer:
|
||||||
|
@ -1468,7 +1435,8 @@ static uint32_t eepro100_read4(EEPRO100State * s, uint32_t addr)
|
||||||
|
|
||||||
static void eepro100_write1(EEPRO100State * s, uint32_t addr, uint8_t val)
|
static void eepro100_write1(EEPRO100State * s, uint32_t addr, uint8_t val)
|
||||||
{
|
{
|
||||||
if (addr <= sizeof(s->mem) - sizeof(val)) {
|
/* SCBStatus is readonly. */
|
||||||
|
if (addr > SCBStatus && addr <= sizeof(s->mem) - sizeof(val)) {
|
||||||
memcpy(&s->mem[addr], &val, sizeof(val));
|
memcpy(&s->mem[addr], &val, sizeof(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1476,9 +1444,6 @@ static void eepro100_write1(EEPRO100State * s, uint32_t addr, uint8_t val)
|
||||||
|
|
||||||
switch (addr) {
|
switch (addr) {
|
||||||
case SCBStatus:
|
case SCBStatus:
|
||||||
#if 0
|
|
||||||
eepro100_write_status(s, val);
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case SCBAck:
|
case SCBAck:
|
||||||
eepro100_acknowledge(s);
|
eepro100_acknowledge(s);
|
||||||
|
@ -1510,7 +1475,8 @@ static void eepro100_write1(EEPRO100State * s, uint32_t addr, uint8_t val)
|
||||||
|
|
||||||
static void eepro100_write2(EEPRO100State * s, uint32_t addr, uint16_t val)
|
static void eepro100_write2(EEPRO100State * s, uint32_t addr, uint16_t val)
|
||||||
{
|
{
|
||||||
if (addr <= sizeof(s->mem) - sizeof(val)) {
|
/* SCBStatus is readonly. */
|
||||||
|
if (addr > SCBStatus && addr <= sizeof(s->mem) - sizeof(val)) {
|
||||||
memcpy(&s->mem[addr], &val, sizeof(val));
|
memcpy(&s->mem[addr], &val, sizeof(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1518,9 +1484,7 @@ static void eepro100_write2(EEPRO100State * s, uint32_t addr, uint16_t val)
|
||||||
|
|
||||||
switch (addr) {
|
switch (addr) {
|
||||||
case SCBStatus:
|
case SCBStatus:
|
||||||
#if 0
|
s->mem[SCBAck] = (val >> 8);
|
||||||
eepro100_write_status(s, val);
|
|
||||||
#endif
|
|
||||||
eepro100_acknowledge(s);
|
eepro100_acknowledge(s);
|
||||||
break;
|
break;
|
||||||
case SCBCmd:
|
case SCBCmd:
|
||||||
|
@ -1908,9 +1872,6 @@ static const VMStateDescription vmstate_eepro100 = {
|
||||||
VMSTATE_UINT32(statistics.fc_rcv_unsupported, EEPRO100State),
|
VMSTATE_UINT32(statistics.fc_rcv_unsupported, EEPRO100State),
|
||||||
VMSTATE_UINT16(statistics.xmt_tco_frames, EEPRO100State),
|
VMSTATE_UINT16(statistics.xmt_tco_frames, EEPRO100State),
|
||||||
VMSTATE_UINT16(statistics.rcv_tco_frames, EEPRO100State),
|
VMSTATE_UINT16(statistics.rcv_tco_frames, EEPRO100State),
|
||||||
#if 0
|
|
||||||
VMSTATE_UINT16(status, EEPRO100State),
|
|
||||||
#endif
|
|
||||||
/* Configuration bytes. */
|
/* Configuration bytes. */
|
||||||
VMSTATE_BUFFER(configuration, EEPRO100State),
|
VMSTATE_BUFFER(configuration, EEPRO100State),
|
||||||
VMSTATE_END_OF_LIST()
|
VMSTATE_END_OF_LIST()
|
||||||
|
|
Loading…
Reference in New Issue