]> Zhao Yanbai Git Server - minix.git/commitdiff
custom message type for vm_map_phys
authorBen Gras <ben@minix3.org>
Sat, 26 Jul 2014 11:53:58 +0000 (13:53 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:06:22 +0000 (17:06 +0200)
include/minix/com.h
include/minix/ipc.h
lib/libsys/vm_map_phys.c
servers/vm/mmap.c

index e0edf54e8f427e8ce910ed7dc1e9f992a44a1863..d1c1ee3fc00a70004ebcdddcb7e3040476d30dc4 100644 (file)
 #      define VMGD_SIZEP               m2_l2
 
 #define VM_MAP_PHYS            (VM_RQ_BASE+15)
-#      define VMMP_EP                  m1_i1
-#      define VMMP_PHADDR              m1_p2
-#      define VMMP_LEN                 m1_i2
-#      define VMMP_VADDR_REPLY         m1_p3
 
 #define VM_UNMAP_PHYS          (VM_RQ_BASE+16)
 #      define VMUP_EP                  m1_i1
index c1fcc78e8db7a6fadf66f2c29a82b05c7d6eb232..15bc6203a2050bb022f29b2442b017aac0100e71 100644 (file)
@@ -1847,6 +1847,15 @@ typedef struct {
 } mess_lc_ipc_semop;
 _ASSERT_MSG_SIZE(mess_lc_ipc_semop);
 
+typedef struct {
+       endpoint_t      ep;
+       phys_bytes      phaddr;
+       size_t          len;
+       void            *reply;
+       uint8_t         padding[40];
+} mess_lsys_vm_map_phys;
+_ASSERT_MSG_SIZE(mess_lsys_vm_map_phys);
+
 typedef struct {
        endpoint_t m_source;            /* who sent the message */
        int m_type;                     /* what kind of message is it */
@@ -2083,6 +2092,7 @@ typedef struct {
                mess_lc_ipc_semctl      m_lc_ipc_semctl;
                mess_lc_ipc_semop       m_lc_ipc_semop;
                mess_lc_vm_brk          m_lc_vm_brk;
+               mess_lsys_vm_map_phys   m_lsys_vm_map_phys;
 
                mess_vfs_lchardriver_cancel     m_vfs_lchardriver_cancel;
                mess_vfs_lchardriver_openclose  m_vfs_lchardriver_openclose;
index 135608197d2675caf42800eee04f1800bd88a730..bd1e183e17f3ff0797a25bdac6e9190b4f021417 100644 (file)
@@ -12,15 +12,15 @@ vm_map_phys(endpoint_t who, void *phaddr, size_t len)
        int r;
 
        memset(&m, 0, sizeof(m));
-       m.VMMP_EP = who;
-       m.VMMP_PHADDR = phaddr;
-       m.VMMP_LEN = len;
+       m.m_lsys_vm_map_phys.ep = who;
+       m.m_lsys_vm_map_phys.phaddr = phaddr;
+       m.m_lsys_vm_map_phys.len = len;
 
        r = _taskcall(VM_PROC_NR, VM_MAP_PHYS, &m);
 
        if (r != OK) return MAP_FAILED;
 
-       return (void *) m.VMMP_VADDR_REPLY;
+       return m.m_lsys_vm_map_phys.reply;
 }
 
 int
index a60208bf0f3b140d4ca672a658450078475b078f..dcdbf44b27021f995af8f7e97ac6a7790c34de3c 100644 (file)
@@ -320,8 +320,8 @@ int do_map_phys(message *m)
        phys_bytes startaddr;
        size_t offset;
 
-       target = m->VMMP_EP;
-       len = m->VMMP_LEN;
+       target = m->m_lsys_vm_map_phys.ep;
+       len = m->m_lsys_vm_map_phys.len;
 
        if (len <= 0) return EINVAL;
 
@@ -331,7 +331,7 @@ int do_map_phys(message *m)
        if((r=vm_isokendpt(target, &n)) != OK)
                return EINVAL;
 
-       startaddr = (vir_bytes)m->VMMP_PHADDR;
+       startaddr = (vir_bytes)m->m_lsys_vm_map_phys.phaddr;
 
        /* First check permission, then round range down/up. Caller can't
         * help it if we can't map in lower than page granularity.
@@ -358,7 +358,7 @@ int do_map_phys(message *m)
 
        phys_setphys(vr, startaddr);
 
-       m->VMMP_VADDR_REPLY = (void *) (vr->vaddr + offset);
+       m->m_lsys_vm_map_phys.reply = (void *) (vr->vaddr + offset);
 
        return OK;
 }