The branch main has been updated by andrew:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=3113ac28cf846c685a4560db910bba8855abc430

commit 3113ac28cf846c685a4560db910bba8855abc430
Author:     Andrew Turner <and...@freebsd.org>
AuthorDate: 2025-06-23 10:14:51 +0000
Commit:     Andrew Turner <and...@freebsd.org>
CommitDate: 2025-06-23 10:18:19 +0000

    arm64: Add get_user_reg
    
    This is similar to get_kernel_reg such that it gives us a common view
    of the userspace ID register.
    
    This will be used to replace extract_user_id_field in a future change.
    
    Sponsored by:   Arm Ltd
    Differential Revision:  https://reviews.freebsd.org/D50902
---
 sys/arm64/arm64/identcpu.c | 18 ++++++++++++++++++
 sys/arm64/include/cpu.h    |  1 +
 2 files changed, 19 insertions(+)

diff --git a/sys/arm64/arm64/identcpu.c b/sys/arm64/arm64/identcpu.c
index 6dc9c447ee29..0f0e727f5b1f 100644
--- a/sys/arm64/arm64/identcpu.c
+++ b/sys/arm64/arm64/identcpu.c
@@ -2555,6 +2555,24 @@ get_kernel_reg_masked(u_int reg, uint64_t *valp, 
uint64_t mask)
        return (false);
 }
 
+bool
+get_user_reg(u_int reg, uint64_t *val, bool fbsd)
+{
+       int i;
+
+       for (i = 0; i < nitems(user_regs); i++) {
+               if (user_regs[i].reg == reg) {
+                       if (fbsd)
+                               *val = CPU_DESC_FIELD(user_cpu_desc, i);
+                       else
+                               *val = CPU_DESC_FIELD(l_user_cpu_desc, i);
+                       return (true);
+               }
+       }
+
+       return (false);
+}
+
 static uint64_t
 update_special_reg_field(uint64_t user_reg, u_int type, uint64_t value,
     u_int width, u_int shift, bool sign)
diff --git a/sys/arm64/include/cpu.h b/sys/arm64/include/cpu.h
index df38c69fdb30..6ac5d53f28fc 100644
--- a/sys/arm64/include/cpu.h
+++ b/sys/arm64/include/cpu.h
@@ -236,6 +236,7 @@ void        update_special_reg(u_int reg, uint64_t, 
uint64_t);
 bool   extract_user_id_field(u_int, u_int, uint8_t *);
 bool   get_kernel_reg(u_int, uint64_t *);
 bool   get_kernel_reg_masked(u_int, uint64_t *, uint64_t);
+bool   get_user_reg(u_int, uint64_t *, bool);
 
 void   cpu_desc_init(void);
 

Reply via email to