- return copyio(COPYINSTR, user_addr, kernel_addr, nbytes, lencopied, 0);
+int
+copyin_atomic64(const user_addr_t user_addr, uint64_t *kernel_addr)
+{
+ /* Test alignment */
+ if (user_addr & 7) {
+ return EINVAL;
+ }
+ return copyio(COPYINATOMIC64, user_addr, (char *)(uintptr_t)kernel_addr, 8, NULL, 0);
+}
+
+int
+copyout_atomic32(uint32_t value, user_addr_t user_addr)
+{
+ /* Test alignment */
+ if (user_addr & 3) {
+ return EINVAL;
+ }
+ return copyio(COPYOUTATOMIC32, user_addr, (char *)&value, 4, NULL, 0);
+}
+
+int
+copyout_atomic64(uint64_t value, user_addr_t user_addr)
+{
+ /* Test alignment */
+ if (user_addr & 7) {
+ return EINVAL;
+ }
+ return copyio(COPYOUTATOMIC64, user_addr, (char *)&value, 8, NULL, 0);
+}
+
+int
+copyinstr(const user_addr_t user_addr, char *kernel_addr, vm_size_t nbytes, vm_size_t *lencopied)
+{
+ *lencopied = 0;
+
+ return copyio(COPYINSTR, user_addr, kernel_addr, nbytes, lencopied, 0);