From eb46c5eda7d8b38c1407dd55f67cf4a6aa3b7b23 Mon Sep 17 00:00:00 2001 From: Jason Wang Date: Mon, 5 Mar 2012 11:08:59 +0800 Subject: [PATCH] rtl8139: correctly check the opmode According to the spec, only when opmode is "Config. Register Write Enable" could driver write to CONFIG0,1,3,4 and bits 13,12,8 of BMCR. Currently, we allow modifying to those registers also when 8139 is in "Auto-load" mode and "93C46 (93C56) Programming" mode. This patch fixes this. Signed-off-by: Jason Wang Signed-off-by: Michael S. Tsirkin --- hw/rtl8139.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hw/rtl8139.c b/hw/rtl8139.c index 5b608f53ec..f3322ea167 100644 --- a/hw/rtl8139.c +++ b/hw/rtl8139.c @@ -332,8 +332,10 @@ enum CSCRBits { }; enum Cfg9346Bits { - Cfg9346_Lock = 0x00, - Cfg9346_Unlock = 0xC0, + Cfg9346_Normal = 0x00, + Cfg9346_Autoload = 0x40, + Cfg9346_Programming = 0x80, + Cfg9346_ConfigWrite = 0xC0, }; typedef enum { @@ -1451,7 +1453,7 @@ static uint32_t rtl8139_IntrMitigate_read(RTL8139State *s) static int rtl8139_config_writable(RTL8139State *s) { - if (s->Cfg9346 & Cfg9346_Unlock) + if ((s->Cfg9346 & Chip9346_op_mask) == Cfg9346_ConfigWrite) { return 1; }