mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 12:54:27 +00:00
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:
parent
e98efdd973
commit
eb771bf6f4
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue