]> git.ozlabs.org Git - ccan/blobdiff - ccan/cpuid/cpuid.c
cpuid: avoid unions in parsing data
[ccan] / ccan / cpuid / cpuid.c
index 35e0b7ae8d779b8f371f4707d621db270146e304..5c3aa34815b21a7c8140a52820d529f6bc99a5c6 100644 (file)
@@ -298,13 +298,16 @@ void cpuid(cpuid_t info, uint32_t *buf)
                        buf[3] = edx;
                        break;
                case CPU_EXTENDED_L2_CACHE_FEATURES:
-                       *buf = ecx;
+                       buf[0] = ecx & 0xFF;            /* Line size.  */
+                       buf[1] = (ecx >> 12) & 0xFF;    /* Associativity.  */
+                       buf[2] = ecx >> 16;             /* Cache size.  */
                        break;
                case CPU_ADV_POWER_MGT_INFO:
                        *buf = edx;
                        break;
                case CPU_VIRT_PHYS_ADDR_SIZES:
-                       *buf = eax;
+                       buf[0] = eax & 0xFF;            /* physical.  */
+                       buf[1] = (eax >> 8) & 0xFF;     /* virtual.  */
                        break;
                default:
                        *buf = 0xbaadf00d;