]> Zhao Yanbai Git Server - minix.git/commitdiff
Message type for SYS_VDEVIO
authorLionel Sambuc <lionel@minix3.org>
Wed, 21 May 2014 08:45:19 +0000 (10:45 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:46 +0000 (17:05 +0200)
Change-Id: I62ceb5d487c5acd08cb100f340dd387e733180b4

include/minix/com.h
include/minix/ipc.h
kernel/system/do_vdevio.c
lib/libsys/arch/i386/sys_vinb.c
lib/libsys/arch/i386/sys_vinl.c
lib/libsys/arch/i386/sys_vinw.c
lib/libsys/arch/i386/sys_voutb.c
lib/libsys/arch/i386/sys_voutl.c
lib/libsys/arch/i386/sys_voutw.c

index 285ec1ba20b575ad4343a42088d323a9280700dd..5faacbec07e0847fa5adf5988374f3ea3395d4d9 100644 (file)
 #   define DIO_SAFE_OUTPUT_LONG     (_DIO_OUTPUT|_DIO_LONG|_DIO_SAFE)
 #define DIO_PORT       m2_l1   /* single port address */
 #define DIO_VALUE      m2_l2   /* single I/O value */
-#define DIO_VEC_ADDR   m2_p1   /* address of buffer or (p,v)-pairs */
-#define DIO_VEC_SIZE   m2_l2   /* number of elements in vector */
 
 /* Field names for SYS_SETALARM. */
 #define ALRM_EXP_TIME   m2_l1  /* expire time for the alarm call */
index 793901da38b6ad8bd6faf0824d9ce854c40531a6..dfae34d2c70eeacb4c6dc017e904048951544786 100644 (file)
@@ -712,6 +712,15 @@ typedef struct {
 } mess_lsys_krn_sys_sdevio;
 _ASSERT_MSG_SIZE(mess_lsys_krn_sys_sdevio);
 
+typedef struct {
+       int request;
+       int vec_size;
+       vir_bytes vec_addr;             /* pv{b,w,l}_pair_t * */
+
+       uint8_t padding[44];
+} mess_lsys_krn_sys_vdevio;
+_ASSERT_MSG_SIZE(mess_lsys_krn_sys_vdevio);
+
 typedef struct {
        phys_bytes base;
        phys_bytes count;
@@ -1447,6 +1456,7 @@ typedef struct {
                mess_lsys_krn_schedule  m_lsys_krn_schedule;
                mess_lsys_krn_sys_memset m_lsys_krn_sys_memset;
                mess_lsys_krn_sys_sdevio m_lsys_krn_sys_sdevio;
+               mess_lsys_krn_sys_vdevio m_lsys_krn_sys_vdevio;
 
                mess_lsys_pci_busc_get_bar m_lsys_pci_busc_get_bar;
 
index 94bc6d1b6193fa0d7f69ea08d8ed6e1d236684c3..d70fde65500352b561b7628a6d74fd50a2d3a6a5 100644 (file)
@@ -2,9 +2,9 @@
  *   m_type:   SYS_VDEVIO
  *
  * The parameters for this kernel call are:
- *    m2_i3:   DIO_REQUEST     (request input or output)       
- *    m2_p1:   DIO_VEC_ADDR    (pointer to port/ value pairs)  
- *    m2_i2:   DIO_VEC_SIZE    (number of ports to read or write) 
+ *    m_lsys_krn_sys_vdevio.request    (request input or output)
+ *    m_lsys_krn_sys_vdevio.vec_addr   (pointer to port/ value pairs)
+ *    m_lsys_krn_sys_vdevio.vec_size   (number of ports to read or write)
  */
 
 #include "kernel/system.h"
@@ -42,12 +42,12 @@ int do_vdevio(struct proc * caller, message * m_ptr)
   int r;
     
   /* Get the request, size of the request vector, and check the values. */
-  io_dir = m_ptr->DIO_REQUEST & _DIO_DIRMASK;
-  io_type = m_ptr->DIO_REQUEST & _DIO_TYPEMASK;
+  io_dir = m_ptr->m_lsys_krn_sys_vdevio.request & _DIO_DIRMASK;
+  io_type = m_ptr->m_lsys_krn_sys_vdevio.request & _DIO_TYPEMASK;
   if (io_dir == _DIO_INPUT) io_in = TRUE;
   else if (io_dir == _DIO_OUTPUT) io_in = FALSE;
   else return(EINVAL);
-  if ((vec_size = m_ptr->DIO_VEC_SIZE) <= 0) return(EINVAL);
+  if ((vec_size = m_ptr->m_lsys_krn_sys_vdevio.vec_size) <= 0) return(EINVAL);
   switch (io_type) {
       case _DIO_BYTE:
        bytes = vec_size * sizeof(pvb_pair_t);
@@ -66,7 +66,7 @@ int do_vdevio(struct proc * caller, message * m_ptr)
   if (bytes > sizeof(vdevio_buf))  return(E2BIG);
 
   /* Copy (port,value)-pairs from user. */
-  if((r=data_copy(caller->p_endpoint, (vir_bytes) m_ptr->DIO_VEC_ADDR,
+  if((r=data_copy(caller->p_endpoint, m_ptr->m_lsys_krn_sys_vdevio.vec_addr,
     KERNEL, (vir_bytes) vdevio_buf, bytes)) != OK)
        return r;
 
@@ -152,7 +152,7 @@ int do_vdevio(struct proc * caller, message * m_ptr)
   /* Almost done, copy back results for input requests. */
   if (io_in) 
        if((r=data_copy(KERNEL, (vir_bytes) vdevio_buf,
-         caller->p_endpoint, (vir_bytes) m_ptr->DIO_VEC_ADDR,
+         caller->p_endpoint, m_ptr->m_lsys_krn_sys_vdevio.vec_addr,
          (phys_bytes) bytes)) != OK)
                return r;
   return(OK);
index 3dcc040e15996431fb14331600b601a2c3aeefc0..3892b199dbc0357cfd9f6f4cbd3bc29cd32ea950 100644 (file)
@@ -9,9 +9,9 @@ int nr_ports;                           /* nr of pairs to be processed */
 {
     message m_io;
 
-    m_io.DIO_REQUEST = _DIO_INPUT | _DIO_BYTE;
-    m_io.DIO_VEC_ADDR = (char *) pvb_pairs;
-    m_io.DIO_VEC_SIZE = nr_ports;
+    m_io.m_lsys_krn_sys_vdevio.request = _DIO_INPUT | _DIO_BYTE;
+    m_io.m_lsys_krn_sys_vdevio.vec_addr = (vir_bytes) pvb_pairs;
+    m_io.m_lsys_krn_sys_vdevio.vec_size = nr_ports;
     return _kernel_call(SYS_VDEVIO, &m_io);
 }
 
index d3fe9d4f8288c4a01884e5853af4aeb4f5d37671..6cfaeef3a12440f2ff8286ec46bb64f5df90c472 100644 (file)
@@ -9,9 +9,9 @@ int nr_ports;                           /* nr of pairs to be processed */
 {
     message m_io;
 
-    m_io.DIO_REQUEST = _DIO_INPUT | _DIO_LONG;
-    m_io.DIO_VEC_ADDR = (char *) pvl_pairs;
-    m_io.DIO_VEC_SIZE = nr_ports;
+    m_io.m_lsys_krn_sys_vdevio.request = _DIO_INPUT | _DIO_LONG;
+    m_io.m_lsys_krn_sys_vdevio.vec_addr = (vir_bytes)pvl_pairs;
+    m_io.m_lsys_krn_sys_vdevio.vec_size = nr_ports;
     return _kernel_call(SYS_VDEVIO, &m_io);
 }
 
index 19c718dcc1c32a95162827d7518ab8c7819b5d20..6545ba12f7b2a15f90e7b3d1d8a074f6a2723d5b 100644 (file)
@@ -1,6 +1,5 @@
 #include "syslib.h"
 
-
 /*===========================================================================*
  *                                sys_vinw                                  *
  *===========================================================================*/
@@ -10,9 +9,9 @@ int nr_ports;                          /* nr of pairs to be processed */
 {
     message m_io;
 
-    m_io.DIO_REQUEST = _DIO_WORD | _DIO_INPUT;
-    m_io.DIO_VEC_ADDR = (char *) pvw_pairs;
-    m_io.DIO_VEC_SIZE = nr_ports;
+    m_io.m_lsys_krn_sys_vdevio.request = _DIO_WORD | _DIO_INPUT;
+    m_io.m_lsys_krn_sys_vdevio.vec_addr = (vir_bytes)pvw_pairs;
+    m_io.m_lsys_krn_sys_vdevio.vec_size = nr_ports;
     return _kernel_call(SYS_VDEVIO, &m_io);
 }
 
index 1e7fe12cfff0692fe832b2e65d6bec2bc6cf60fa..ff0233b6364894ceaef25d4c78dc6b77f8d226be 100644 (file)
@@ -8,9 +8,10 @@ pvb_pair_t *pvb_pairs;                 /* (port,byte-value)-pairs */
 int nr_ports;                          /* nr of pairs to be processed */
 {
     message m_io;
-    m_io.DIO_REQUEST = _DIO_OUTPUT | _DIO_BYTE;
-    m_io.DIO_VEC_ADDR = (char *) pvb_pairs;
-    m_io.DIO_VEC_SIZE = nr_ports;
+
+    m_io.m_lsys_krn_sys_vdevio.request = _DIO_OUTPUT | _DIO_BYTE;
+    m_io.m_lsys_krn_sys_vdevio.vec_addr = (vir_bytes)pvb_pairs;
+    m_io.m_lsys_krn_sys_vdevio.vec_size = nr_ports;
     return _kernel_call(SYS_VDEVIO, &m_io);
 }
 
index e56e6aec5debe80be5db3c793daa57472bc61600..c1298811d575a0eebc17027d60e0ab1c37174437 100644 (file)
@@ -9,9 +9,9 @@ int nr_ports;                           /* nr of pairs to be processed */
 {
     message m_io;
 
-    m_io.DIO_REQUEST = _DIO_OUTPUT | _DIO_LONG;
-    m_io.DIO_VEC_ADDR = (char *) pvl_pairs;
-    m_io.DIO_VEC_SIZE = nr_ports;
+    m_io.m_lsys_krn_sys_vdevio.request = _DIO_OUTPUT | _DIO_LONG;
+    m_io.m_lsys_krn_sys_vdevio.vec_addr = (vir_bytes)pvl_pairs;
+    m_io.m_lsys_krn_sys_vdevio.vec_size = nr_ports;
     return _kernel_call(SYS_VDEVIO, &m_io);
 }
 
index 6d252720df030c4a313d6e97d121e2cbf72bc273..08525c5979a314637e26dadc90a20e38d833ce2f 100644 (file)
@@ -1,6 +1,5 @@
 #include "syslib.h"
 
-
 /*===========================================================================*
  *                                sys_voutw                                 *
  *===========================================================================*/
@@ -10,9 +9,9 @@ int nr_ports;                          /* nr of pairs to be processed */
 {
     message m_io;
 
-    m_io.DIO_REQUEST = _DIO_OUTPUT | _DIO_WORD;
-    m_io.DIO_VEC_ADDR = (char *) pvw_pairs;
-    m_io.DIO_VEC_SIZE = nr_ports;
+    m_io.m_lsys_krn_sys_vdevio.request = _DIO_OUTPUT | _DIO_WORD;
+    m_io.m_lsys_krn_sys_vdevio.vec_addr = (vir_bytes)pvw_pairs;
+    m_io.m_lsys_krn_sys_vdevio.vec_size = nr_ports;
     return _kernel_call(SYS_VDEVIO, &m_io);
 }