Changing the message union to anonymous.

This allows us to write things like this:
  message m;
  m.m_notify.interrupts = new_value;

or
  message *mp;
  mp->m_notify.interrupts = new_value;

The shorthands macro have been adapted for the new scheme, and will be
kept as long as we have generic messages being used.

Change-Id: Icfd02b5f126892b1d5d2cebe8c8fb02b180000f7
This commit is contained in:
2013-11-28 18:17:38 +01:00
parent 4a0199d66d
commit 175d3e7eae
28 changed files with 193 additions and 197 deletions

View File

@@ -107,11 +107,6 @@
#define is_ipc_asynch(ipc_status) \
(is_ipc_notify(ipc_status) || IPC_STATUS_CALL(ipc_status) == SENDA)
/* Shorthands for message parameters passed with notifications. */
#define NOTIFY_TIMESTAMP m_u.m_notify.timestamp
#define NOTIFY_INTMASK m_u.m_notify.interrupts
#define NOTIFY_SIGSET m_u.m_notify.sigset
/*===========================================================================*
* Messages for BUS controller drivers *
*===========================================================================*/
@@ -476,12 +471,12 @@
#define SG_SIZE m2_i2 /* no. of entries */
/* Field names for SYS_GETKSIG, _ENDKSIG, _KILL, _SIGSEND, _SIGRETURN. */
#define SYS_SIG_ENDPT m_u.m_sigcalls.ep /* process number for inform */
#define SYS_SIG_NUMBER m_u.m_sigcalls.sig /* signal number to send */
#define SYS_SIG_FLAGS m_u.m_sigcalls.flags /* signal flags field */
#define SYS_SIG_MAP m_u.m_sigcalls.sigs /* used to pass signal bit map */
#define SYS_SIG_CTXT_PTR m_u.m_sigcalls.sigctx /* pointer to signal context */
#define SYS_SIG_HOW m_u.m_sigcalls.how /* used to pass signal bit map */
#define SYS_SIG_ENDPT m_sigcalls.ep /* process number for inform */
#define SYS_SIG_NUMBER m_sigcalls.sig /* signal number to send */
#define SYS_SIG_FLAGS m_sigcalls.flags /* signal flags field */
#define SYS_SIG_MAP m_sigcalls.sigs /* used to pass signal bit map */
#define SYS_SIG_CTXT_PTR m_sigcalls.sigctx /* pointer to signal context */
#define SYS_SIG_HOW m_sigcalls.how /* used to pass signal bit map */
/* Field names for SYS_FORK, _EXEC, _EXIT, GETMCONTEXT, SETMCONTEXT.*/
#define PR_ENDPT m1_i1 /* indicates a process */
@@ -823,18 +818,18 @@
/* General calls. */
#define VM_MMAP (VM_RQ_BASE+10)
# define VMM_ADDR m_u.m_mmap.addr
# define VMM_LEN m_u.m_mmap.len
# define VMM_PROT m_u.m_mmap.prot
# define VMM_FLAGS m_u.m_mmap.flags
# define VMM_FD m_u.m_mmap.fd
# define VMM_OFFSET m_u.m_mmap.offset
# define VMM_FORWHOM m_u.m_mmap.forwhom
# define VMM_RETADDR m_u.m_mmap.retaddr
# define VMM_ADDR m_mmap.addr
# define VMM_LEN m_mmap.len
# define VMM_PROT m_mmap.prot
# define VMM_FLAGS m_mmap.flags
# define VMM_FD m_mmap.fd
# define VMM_OFFSET m_mmap.offset
# define VMM_FORWHOM m_mmap.forwhom
# define VMM_RETADDR m_mmap.retaddr
#define VM_MUNMAP (VM_RQ_BASE+17)
# define VMUM_ADDR m_u.m_mmap.addr
# define VMUM_LEN m_u.m_mmap.len
# define VMUM_ADDR m_mmap.addr
# define VMUM_LEN m_mmap.len
/* to VM: inform VM about a region of memory that is used for
* bus-master DMA
@@ -913,8 +908,8 @@
# define VMRE_FLAGS m1_i3
#define VM_SHM_UNMAP (VM_RQ_BASE+34)
# define VMUN_ENDPT m_u.m_mmap.forwhom
# define VMUN_ADDR m_u.m_mmap.addr
# define VMUN_ENDPT m_mmap.forwhom
# define VMUN_ADDR m_mmap.addr
#define VM_GETPHYS (VM_RQ_BASE+35)
# define VMPHYS_ENDPT m2_i1

View File

@@ -114,19 +114,6 @@ typedef struct {
} mess_11;
_ASSERT_MSG_SIZE(mess_11);
typedef struct {
dev_t dev; /* 64bits long. */
off_t dev_offset;
off_t ino_offset;
ino_t ino;
u32_t *flags_ptr;
void *block;
u8_t pages;
u8_t flags;
uint8_t padding[12];
} mess_vmmcp;
_ASSERT_MSG_SIZE(mess_vmmcp);
typedef struct {
u64_t timestamp; /* valid for every notify msg */
u64_t interrupts; /* raised interrupts; valid if from HARDWARE */
@@ -162,6 +149,19 @@ typedef struct {
} mess_vm_vfs_mmap;
_ASSERT_MSG_SIZE(mess_vm_vfs_mmap);
typedef struct {
dev_t dev; /* 64bits long. */
off_t dev_offset;
off_t ino_offset;
ino_t ino;
void *block;
u32_t *flags_ptr;
u8_t pages;
u8_t flags;
uint8_t padding[12];
} mess_vmmcp;
_ASSERT_MSG_SIZE(mess_vmmcp);
typedef struct {
void *addr;
u8_t flags;
@@ -184,114 +184,114 @@ typedef struct {
mess_9 m_m9;
mess_10 m_m10;
mess_11 m_m11;
mess_mmap m_mmap;
mess_vmmcp m_vmmcp;
mess_vmmcp_reply m_vmmcp_reply;
mess_mmap m_mmap;
mess_vm_vfs_mmap m_vm_vfs;
mess_notify m_notify; /* notify messages */
mess_sigcalls m_sigcalls; /* SYS_{GETKSIG,ENDKSIG,KILL,SIGSEND,SIGRETURN} */
u32_t size[14]; /* message payload may have 14 longs at most */
} m_u;
u8_t size[56]; /* message payload may have 56 bytes at most */
};
} message __aligned(16);
/* Ensure the complete union respects the IPC assumptions. */
typedef int _ASSERT_message[/* CONSTCOND */sizeof(message) == 64 ?1 : -1];
typedef int _ASSERT_message[/* CONSTCOND */sizeof(message) == 64 ? 1 : -1];
/* The following defines provide names for useful members. */
#define m1_i1 m_u.m_m1.m1i1
#define m1_i2 m_u.m_m1.m1i2
#define m1_i3 m_u.m_m1.m1i3
#define m1_p1 m_u.m_m1.m1p1
#define m1_p2 m_u.m_m1.m1p2
#define m1_p3 m_u.m_m1.m1p3
#define m1_p4 m_u.m_m1.m1p4
#define m1_ull1 m_u.m_m1.m1ull1
#define m1_i1 m_m1.m1i1
#define m1_i2 m_m1.m1i2
#define m1_i3 m_m1.m1i3
#define m1_p1 m_m1.m1p1
#define m1_p2 m_m1.m1p2
#define m1_p3 m_m1.m1p3
#define m1_p4 m_m1.m1p4
#define m1_ull1 m_m1.m1ull1
#define m2_ll1 m_u.m_m2.m2ll1
#define m2_i1 m_u.m_m2.m2i1
#define m2_i2 m_u.m_m2.m2i2
#define m2_i3 m_u.m_m2.m2i3
#define m2_l1 m_u.m_m2.m2l1
#define m2_l2 m_u.m_m2.m2l2
#define m2_p1 m_u.m_m2.m2p1
#define m2_sigset m_u.m_m2.sigset
#define m2_ll1 m_m2.m2ll1
#define m2_i1 m_m2.m2i1
#define m2_i2 m_m2.m2i2
#define m2_i3 m_m2.m2i3
#define m2_l1 m_m2.m2l1
#define m2_l2 m_m2.m2l2
#define m2_p1 m_m2.m2p1
#define m2_sigset m_m2.sigset
#define m2_s1 m_u.m_m2.m2s1
#define m2_s1 m_m2.m2s1
#define m3_i1 m_u.m_m3.m3i1
#define m3_i2 m_u.m_m3.m3i2
#define m3_p1 m_u.m_m3.m3p1
#define m3_ca1 m_u.m_m3.m3ca1
#define m3_i1 m_m3.m3i1
#define m3_i2 m_m3.m3i2
#define m3_p1 m_m3.m3p1
#define m3_ca1 m_m3.m3ca1
#define m4_ll1 m_u.m_m4.m4ll1
#define m4_l1 m_u.m_m4.m4l1
#define m4_l2 m_u.m_m4.m4l2
#define m4_l3 m_u.m_m4.m4l3
#define m4_l4 m_u.m_m4.m4l4
#define m4_l5 m_u.m_m4.m4l5
#define m4_ll1 m_m4.m4ll1
#define m4_l1 m_m4.m4l1
#define m4_l2 m_m4.m4l2
#define m4_l3 m_m4.m4l3
#define m4_l4 m_m4.m4l4
#define m4_l5 m_m4.m4l5
#define m5_s1 m_u.m_m5.m5s1
#define m5_s2 m_u.m_m5.m5s2
#define m5_i1 m_u.m_m5.m5i1
#define m5_i2 m_u.m_m5.m5i2
#define m5_l1 m_u.m_m5.m5l1
#define m5_l2 m_u.m_m5.m5l2
#define m5_l3 m_u.m_m5.m5l3
#define m5_s1 m_m5.m5s1
#define m5_s2 m_m5.m5s2
#define m5_i1 m_m5.m5i1
#define m5_i2 m_m5.m5i2
#define m5_l1 m_m5.m5l1
#define m5_l2 m_m5.m5l2
#define m5_l3 m_m5.m5l3
#define m6_l1 m_u.m_m6.m6l1
#define m6_l2 m_u.m_m6.m6l2
#define m6_l3 m_u.m_m6.m6l3
#define m6_s1 m_u.m_m6.m6s1
#define m6_s2 m_u.m_m6.m6s2
#define m6_s3 m_u.m_m6.m6s3
#define m6_c1 m_u.m_m6.m6c1
#define m6_c2 m_u.m_m6.m6c2
#define m6_p1 m_u.m_m6.m6p1
#define m6_p2 m_u.m_m6.m6p2
#define m6_l1 m_m6.m6l1
#define m6_l2 m_m6.m6l2
#define m6_l3 m_m6.m6l3
#define m6_s1 m_m6.m6s1
#define m6_s2 m_m6.m6s2
#define m6_s3 m_m6.m6s3
#define m6_c1 m_m6.m6c1
#define m6_c2 m_m6.m6c2
#define m6_p1 m_m6.m6p1
#define m6_p2 m_m6.m6p2
#define m7_i1 m_u.m_m7.m7i1
#define m7_i2 m_u.m_m7.m7i2
#define m7_i3 m_u.m_m7.m7i3
#define m7_i4 m_u.m_m7.m7i4
#define m7_i5 m_u.m_m7.m7i5
#define m7_p1 m_u.m_m7.m7p1
#define m7_p2 m_u.m_m7.m7p2
#define m7_i1 m_m7.m7i1
#define m7_i2 m_m7.m7i2
#define m7_i3 m_m7.m7i3
#define m7_i4 m_m7.m7i4
#define m7_i5 m_m7.m7i5
#define m7_p1 m_m7.m7p1
#define m7_p2 m_m7.m7p2
#define m8_i1 m_u.m_m8.m8i1
#define m8_i2 m_u.m_m8.m8i2
#define m8_p1 m_u.m_m8.m8p1
#define m8_p2 m_u.m_m8.m8p2
#define m8_p3 m_u.m_m8.m8p3
#define m8_p4 m_u.m_m8.m8p4
#define m8_i1 m_m8.m8i1
#define m8_i2 m_m8.m8i2
#define m8_p1 m_m8.m8p1
#define m8_p2 m_m8.m8p2
#define m8_p3 m_m8.m8p3
#define m8_p4 m_m8.m8p4
#define m9_l1 m_u.m_m9.m9l1
#define m9_l2 m_u.m_m9.m9l2
#define m9_l3 m_u.m_m9.m9l3
#define m9_l4 m_u.m_m9.m9l4
#define m9_l5 m_u.m_m9.m9l5
#define m9_s1 m_u.m_m9.m9s1
#define m9_s2 m_u.m_m9.m9s2
#define m9_s3 m_u.m_m9.m9s3
#define m9_s4 m_u.m_m9.m9s4
#define m9_ull1 m_u.m_m9.m9ull1
#define m9_l1 m_m9.m9l1
#define m9_l2 m_m9.m9l2
#define m9_l3 m_m9.m9l3
#define m9_l4 m_m9.m9l4
#define m9_l5 m_m9.m9l5
#define m9_s1 m_m9.m9s1
#define m9_s2 m_m9.m9s2
#define m9_s3 m_m9.m9s3
#define m9_s4 m_m9.m9s4
#define m9_ull1 m_m9.m9ull1
#define m10_i1 m_u.m_m10.m10i1
#define m10_i2 m_u.m_m10.m10i2
#define m10_i3 m_u.m_m10.m10i3
#define m10_i4 m_u.m_m10.m10i4
#define m10_l1 m_u.m_m10.m10l1
#define m10_l2 m_u.m_m10.m10l2
#define m10_l3 m_u.m_m10.m10l3
#define m10_i1 m_m10.m10i1
#define m10_i2 m_m10.m10i2
#define m10_i3 m_m10.m10i3
#define m10_i4 m_m10.m10i4
#define m10_l1 m_m10.m10l1
#define m10_l2 m_m10.m10l2
#define m10_l3 m_m10.m10l3
#define m11_i1 m_u.m_m11.m11i1
#define m11_s1 m_u.m_m11.m11s1
#define m11_s2 m_u.m_m11.m11s2
#define m11_s3 m_u.m_m11.m11s3
#define m11_s4 m_u.m_m11.m11s4
#define m11_p1 m_u.m_m11.m11p1
#define m11_p2 m_u.m_m11.m11p2
#define m11_p3 m_u.m_m11.m11p3
#define m11_p4 m_u.m_m11.m11p4
#define m11_i1 m_m11.m11i1
#define m11_s1 m_m11.m11s1
#define m11_s2 m_m11.m11s2
#define m11_s3 m_m11.m11s3
#define m11_s4 m_m11.m11s4
#define m11_p1 m_m11.m11p1
#define m11_p2 m_m11.m11p2
#define m11_p3 m_m11.m11p3
#define m11_p4 m_m11.m11p4
/*==========================================================================*
* Minix run-time system (IPC). *