]> xenbits.xensource.com Git - qemu-xen-unstable.git/commitdiff
rtl8139: correctly check the opmode
authorJason Wang <jasowang@redhat.com>
Mon, 5 Mar 2012 03:08:59 +0000 (11:08 +0800)
committerMichael S. Tsirkin <mst@redhat.com>
Thu, 15 Mar 2012 23:04:51 +0000 (01:04 +0200)
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 <jasowang@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/rtl8139.c

index 5b608f53ec1ac85ebbe2b650f691bf060296a976..f3322ea167edaa54a88963ca53659cdf8a53a124 100644 (file)
@@ -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;
     }