m1cpu: support for getting brand name
diff --git a/cpu.go b/cpu.go
index 5a5d9b3..2e1bf2a 100644
--- a/cpu.go
+++ b/cpu.go
@@ -19,6 +19,7 @@
 // int global_eCoreL1DataCacheSize;
 // int global_pCoreL2CacheSize;
 // int global_eCoreL2CacheSize;
+// char global_brand[32];
 //
 // UInt64 getFrequency(CFTypeRef typeRef) {
 // CFDataRef cfData = typeRef;
@@ -43,6 +44,11 @@
 //  return value;
 // }
 //
+// void sysctl_string(const char * name, char * dest) {
+//   size_t size = 32;
+//   sysctlbyname(name, dest, &size, NULL, 0);
+// }
+//
 // void initialize() {
 //   global_pCoreCount = sysctl_int("hw.perflevel0.physicalcpu");
 //   global_eCoreCount = sysctl_int("hw.perflevel1.physicalcpu");
@@ -52,6 +58,7 @@
 //   global_eCoreL1DataCacheSize = sysctl_int("hw.perflevel1.l1dcachesize");
 //   global_pCoreL2CacheSize = sysctl_int("hw.perflevel0.l2cachesize");
 //   global_eCoreL2CacheSize = sysctl_int("hw.perflevel1.l2cachesize");
+//   sysctl_string("machdep.cpu.brand_string", global_brand);
 //
 //   CFMutableDictionaryRef matching = IOServiceMatching("AppleARMIODevice");
 //   io_iterator_t  iter;
@@ -125,6 +132,10 @@
 // int eCoreL2CacheSize() {
 //   return global_eCoreL2CacheSize;
 // }
+//
+// char * modelName() {
+//   return global_brand;
+// }
 import "C"
 
 func init() {
@@ -189,3 +200,7 @@
 		int(C.eCoreL1DataCacheSize()),
 		int(C.eCoreL2CacheSize())
 }
+
+func ModelName() string {
+	return C.GoString(C.modelName())
+}
diff --git a/cpu_test.go b/cpu_test.go
index 704d13a..ed38452 100644
--- a/cpu_test.go
+++ b/cpu_test.go
@@ -39,6 +39,7 @@
 }
 
 func Test_Show(t *testing.T) {
+	t.Log("model name", ModelName())
 	t.Log("pCore Hz", PCoreHz())
 	t.Log("eCore Hz", ECoreHz())
 	t.Log("pCore GHz", PCoreGHz())