diff --git a/include/minix/com.h b/include/minix/com.h index c2823b693..be76f37b0 100644 --- a/include/minix/com.h +++ b/include/minix/com.h @@ -312,16 +312,6 @@ #define CP_FLAG_TRY 0x01 /* do not transparently map */ -/* Field names for SYS_VUMAP. */ -#define VUMAP_ENDPT m10_i1 /* grant owner, or SELF for local addresses */ -#define VUMAP_VADDR m10_l1 /* address of virtual (input) vector */ -#define VUMAP_VCOUNT m10_i2 /* number of elements in virtual vector */ -#define VUMAP_OFFSET m10_l2 /* offset into first entry of input vector */ -#define VUMAP_ACCESS m10_i3 /* access requested for input (VUA_ flags) */ -#define VUMAP_PADDR m10_l3 /* address of physical (output) vector */ -#define VUMAP_PMAX m10_i4 /* max number of physical vector elements */ -#define VUMAP_PCOUNT m10_i1 /* upon return: number of elements filled */ - /* Field names for SYS_GETINFO. */ #define I_REQUEST m7_i3 /* what info to get */ # define GET_KINFO 0 /* get kernel information structure */ diff --git a/include/minix/ipc.h b/include/minix/ipc.h index edaa36bd1..affeab133 100644 --- a/include/minix/ipc.h +++ b/include/minix/ipc.h @@ -791,6 +791,26 @@ typedef struct { } mess_lsys_krn_sys_vdevio; _ASSERT_MSG_SIZE(mess_lsys_krn_sys_vdevio); +typedef struct { + endpoint_t endpt; + vir_bytes vaddr; /* struct vumap_vir * */ + int vcount; + vir_bytes paddr; /* struct vumap_phys * */ + int pmax; + int access; + size_t offset; + + uint8_t padding[28]; +} mess_lsys_krn_sys_vumap; +_ASSERT_MSG_SIZE(mess_lsys_krn_sys_vumap); + +typedef struct { + int pcount; + + uint8_t padding[52]; +} mess_krn_lsys_sys_vumap; +_ASSERT_MSG_SIZE(mess_krn_lsys_sys_vumap); + typedef struct { phys_bytes base; phys_bytes count; @@ -1450,6 +1470,7 @@ typedef struct { mess_krn_lsys_schedule m_krn_lsys_schedule; mess_krn_lsys_sys_irqctl m_krn_lsys_sys_irqctl; mess_krn_lsys_sys_umap m_krn_lsys_sys_umap; + mess_krn_lsys_sys_vumap m_krn_lsys_sys_vumap; mess_fs_vfs_breadwrite m_fs_vfs_breadwrite; mess_fs_vfs_chmod m_fs_vfs_chmod; @@ -1535,6 +1556,7 @@ typedef struct { mess_lsys_krn_sys_setalarm m_lsys_krn_sys_setalarm; mess_lsys_krn_sys_umap m_lsys_krn_sys_umap; mess_lsys_krn_sys_vdevio m_lsys_krn_sys_vdevio; + mess_lsys_krn_sys_vumap m_lsys_krn_sys_vumap; mess_lsys_pci_busc_get_bar m_lsys_pci_busc_get_bar; diff --git a/kernel/system/do_vumap.c b/kernel/system/do_vumap.c index e3fc3152b..47bc35edb 100644 --- a/kernel/system/do_vumap.c +++ b/kernel/system/do_vumap.c @@ -2,14 +2,14 @@ * m_type: SYS_VUMAP * * The parameters for this kernel call are: - * m10_i1: VUMAP_ENDPT (grant owner, or SELF for local addresses) - * m10_l1: VUMAP_VADDR (address of virtual (input) vector) - * m10_i2: VUMAP_VCOUNT (number of elements in virtual vector) - * m10_l2: VUMAP_OFFSET (offset into first entry of input vector) - * m10_i3: VUMAP_ACCESS (safecopy access requested for input) - * m10_l3: VUMAP_PADDR (address of physical (output) vector) - * m10_i4: VUMAP_PMAX (maximum number of physical vector elements) - * m10_i1: VUMAP_PCOUNT (upon return: number of elements filled) + * m_lsys_krn_sys_vumap.endpt (grant owner, or SELF for local addresses) + * m_lsys_krn_sys_vumap.vaddr (address of virtual (input) vector) + * m_lsys_krn_sys_vumap.vcount (number of elements in virtual vector) + * m_lsys_krn_sys_vumap.offset (offset into first entry of input vector) + * m_lsys_krn_sys_vumap.access (safecopy access requested for input) + * m_lsys_krn_sys_vumap.paddr (address of physical (output) vector) + * m_lsys_krn_sys_vumap.pmax (maximum number of physical vector elements) + * m_krn_lsys_sys_vumap.pcount (upon return: number of elements filled) */ #include "kernel/system.h" @@ -37,13 +37,13 @@ int do_vumap(struct proc *caller, message *m_ptr) endpt = caller->p_endpoint; /* Retrieve and check input parameters. */ - source = m_ptr->VUMAP_ENDPT; - vaddr = (vir_bytes) m_ptr->VUMAP_VADDR; - vcount = m_ptr->VUMAP_VCOUNT; - offset = m_ptr->VUMAP_OFFSET; - access = m_ptr->VUMAP_ACCESS; - paddr = (vir_bytes) m_ptr->VUMAP_PADDR; - pmax = m_ptr->VUMAP_PMAX; + source = m_ptr->m_lsys_krn_sys_vumap.endpt; + vaddr = m_ptr->m_lsys_krn_sys_vumap.vaddr; + vcount = m_ptr->m_lsys_krn_sys_vumap.vcount; + offset = m_ptr->m_lsys_krn_sys_vumap.offset; + access = m_ptr->m_lsys_krn_sys_vumap.access; + paddr = m_ptr->m_lsys_krn_sys_vumap.paddr; + pmax = m_ptr->m_lsys_krn_sys_vumap.pmax; if (vcount <= 0 || pmax <= 0) return EINVAL; @@ -125,7 +125,7 @@ int do_vumap(struct proc *caller, message *m_ptr) r = data_copy_vmcheck(caller, KERNEL, (vir_bytes) pvec, endpt, paddr, size); if (r == OK) - m_ptr->VUMAP_PCOUNT = pcount; + m_ptr->m_krn_lsys_sys_vumap.pcount = pcount; return r; } diff --git a/lib/libsys/sys_vumap.c b/lib/libsys/sys_vumap.c index a84555180..b1b56b449 100644 --- a/lib/libsys/sys_vumap.c +++ b/lib/libsys/sys_vumap.c @@ -16,19 +16,19 @@ int sys_vumap( message m; int r; - m.VUMAP_ENDPT = endpt; - m.VUMAP_VADDR = (vir_bytes) vvec; - m.VUMAP_VCOUNT = vcount; - m.VUMAP_OFFSET = offset; - m.VUMAP_ACCESS = access; - m.VUMAP_PADDR = (vir_bytes) pvec; - m.VUMAP_PMAX = *pcount; + m.m_lsys_krn_sys_vumap.endpt = endpt; + m.m_lsys_krn_sys_vumap.vaddr = (vir_bytes) vvec; + m.m_lsys_krn_sys_vumap.vcount = vcount; + m.m_lsys_krn_sys_vumap.offset = offset; + m.m_lsys_krn_sys_vumap.access = access; + m.m_lsys_krn_sys_vumap.paddr = (vir_bytes) pvec; + m.m_lsys_krn_sys_vumap.pmax = *pcount; r = _kernel_call(SYS_VUMAP, &m); if (r != OK) return r; - *pcount = m.VUMAP_PCOUNT; + *pcount = m.m_krn_lsys_sys_vumap.pcount; return OK; }