Implement suword16() for 32-bit and 64-bit PowerPC architecture.

This fixes compilation of usb(4) after 0ec590d24e .

MFC after:	1 week
Sponsored by:	NVIDIA Networking
This commit is contained in:
Hans Petter Selasky 2021-12-19 13:16:59 +01:00
parent e98efdd973
commit eb771bf6f4

View File

@ -99,6 +99,8 @@ int copyout_remap(const void *kaddr, void *udaddr, size_t len);
int copyout_direct(const void *kaddr, void *udaddr, size_t len);
int copyin_remap(const void *uaddr, void *kaddr, size_t len);
int copyin_direct(const void *uaddr, void *kaddr, size_t len);
int suword16_remap(volatile void *addr, int word);
int suword16_direct(volatile void *addr, int word);
int suword32_remap(volatile void *addr, int word);
int suword32_direct(volatile void *addr, int word);
int suword_remap(volatile void *addr, long word);
@ -139,6 +141,7 @@ DEFINE_COPY_FUNC(int, copyinstr, (const void *, void *, size_t, size_t *))
DEFINE_COPY_FUNC(int, copyin, (const void *, void *, size_t))
DEFINE_COPY_FUNC(int, copyout, (const void *, void *, size_t))
DEFINE_COPY_FUNC(int, suword, (volatile void *, long))
DEFINE_COPY_FUNC(int, suword16, (volatile void *, int))
DEFINE_COPY_FUNC(int, suword32, (volatile void *, int))
DEFINE_COPY_FUNC(int, suword64, (volatile void *, int64_t))
DEFINE_COPY_FUNC(int, fubyte, (volatile const void *))
@ -314,6 +317,34 @@ REMAP(subyte)(volatile void *addr, int byte)
return (0);
}
int
REMAP(suword16)(volatile void *addr, int word)
{
struct thread *td;
pmap_t pm;
jmp_buf env;
int16_t *p;
td = curthread;
pm = &td->td_proc->p_vmspace->vm_pmap;
td->td_pcb->pcb_onfault = &env;
if (setjmp(env)) {
td->td_pcb->pcb_onfault = NULL;
return (-1);
}
if (pmap_map_user_ptr(pm, addr, (void **)&p, sizeof(*p), NULL)) {
td->td_pcb->pcb_onfault = NULL;
return (-1);
}
*p = (int16_t)word;
td->td_pcb->pcb_onfault = NULL;
return (0);
}
#ifdef __powerpc64__
int
REMAP(suword32)(volatile void *addr, int word)