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:
		
							parent
							
								
									4a0199d66d
								
							
						
					
					
						commit
						175d3e7eae
					
				| @ -1598,7 +1598,7 @@ static void w_intr_wait(void) | |||||||
| 					if (r != 0) | 					if (r != 0) | ||||||
| 						panic("sys_inb failed: %d", r); | 						panic("sys_inb failed: %d", r); | ||||||
| 					w_wn->w_status= w_status; | 					w_wn->w_status= w_status; | ||||||
| 					w_hw_int(m.NOTIFY_INTMASK); | 					w_hw_int(m.m_notify.interrupts); | ||||||
| 					break; | 					break; | ||||||
| 				default: | 				default: | ||||||
| 					/* 
 | 					/* 
 | ||||||
|  | |||||||
| @ -583,7 +583,7 @@ static int flt_receive(message *mess, int which) | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if(mess->m_source == CLOCK && is_ipc_notify(ipc_status)) { | 		if(mess->m_source == CLOCK && is_ipc_notify(ipc_status)) { | ||||||
| 			if (mess->NOTIFY_TIMESTAMP < flt_alarm((clock_t) -1)) { | 			if (mess->m_notify.timestamp < flt_alarm((clock_t) -1)) { | ||||||
| #if DEBUG | #if DEBUG | ||||||
| 				printf("Filter: SKIPPING old alarm " | 				printf("Filter: SKIPPING old alarm " | ||||||
| 					"notification\n"); | 					"notification\n"); | ||||||
|  | |||||||
| @ -769,7 +769,7 @@ static void start_motor(void) | |||||||
| 	if (is_ipc_notify(ipc_status)) { | 	if (is_ipc_notify(ipc_status)) { | ||||||
| 		switch (_ENDPOINT_P(mess.m_source)) { | 		switch (_ENDPOINT_P(mess.m_source)) { | ||||||
| 			case CLOCK: | 			case CLOCK: | ||||||
| 				f_expire_tmrs(mess.NOTIFY_TIMESTAMP); | 				f_expire_tmrs(mess.m_notify.timestamp); | ||||||
| 				break; | 				break; | ||||||
| 			default : | 			default : | ||||||
| 				f_busy = BSY_IDLE; | 				f_busy = BSY_IDLE; | ||||||
| @ -845,7 +845,7 @@ static int seek(void) | |||||||
| 		if (is_ipc_notify(ipc_status)) { | 		if (is_ipc_notify(ipc_status)) { | ||||||
| 			switch (_ENDPOINT_P(mess.m_source)) { | 			switch (_ENDPOINT_P(mess.m_source)) { | ||||||
| 				case CLOCK: | 				case CLOCK: | ||||||
| 					f_expire_tmrs(mess.NOTIFY_TIMESTAMP); | 					f_expire_tmrs(mess.m_notify.timestamp); | ||||||
| 					break; | 					break; | ||||||
| 				default : | 				default : | ||||||
| 					f_busy = BSY_IDLE; | 					f_busy = BSY_IDLE; | ||||||
| @ -1123,7 +1123,7 @@ static void f_reset(void) | |||||||
| 	if (is_ipc_notify(ipc_status)) { | 	if (is_ipc_notify(ipc_status)) { | ||||||
| 		switch (_ENDPOINT_P(mess.m_source)) { | 		switch (_ENDPOINT_P(mess.m_source)) { | ||||||
| 			case CLOCK: | 			case CLOCK: | ||||||
| 				f_expire_tmrs(mess.NOTIFY_TIMESTAMP); | 				f_expire_tmrs(mess.m_notify.timestamp); | ||||||
| 				break; | 				break; | ||||||
| 			default : | 			default : | ||||||
| 				f_busy = BSY_IDLE; | 				f_busy = BSY_IDLE; | ||||||
| @ -1174,7 +1174,7 @@ static int f_intr_wait(void) | |||||||
| 	if (is_ipc_notify(ipc_status)) { | 	if (is_ipc_notify(ipc_status)) { | ||||||
| 		switch (_ENDPOINT_P(mess.m_source)) { | 		switch (_ENDPOINT_P(mess.m_source)) { | ||||||
| 			case CLOCK: | 			case CLOCK: | ||||||
| 				f_expire_tmrs(mess.NOTIFY_TIMESTAMP); | 				f_expire_tmrs(mess.m_notify.timestamp); | ||||||
| 				break; | 				break; | ||||||
| 			default : | 			default : | ||||||
| 				f_busy = BSY_IDLE; | 				f_busy = BSY_IDLE; | ||||||
|  | |||||||
| @ -237,7 +237,7 @@ int main(int argc, char *argv[]) | |||||||
| 					handle_hw_intr(); | 					handle_hw_intr(); | ||||||
| 					break; | 					break; | ||||||
| 				case CLOCK: | 				case CLOCK: | ||||||
| 					expire_timers(m.NOTIFY_TIMESTAMP); | 					expire_timers(m.m_notify.timestamp); | ||||||
| 					break; | 					break; | ||||||
| 				default: | 				default: | ||||||
| 					panic(" illegal notify from: %d", m.m_source); | 					panic(" illegal notify from: %d", m.m_source); | ||||||
|  | |||||||
| @ -226,11 +226,11 @@ message *m; | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Re-enable Rx interrupt. */ | 	/* Re-enable Rx interrupt. */ | ||||||
| 	if(m->NOTIFY_INTMASK & (1 << RX_INT)) | 	if(m->m_notify.interrupts & (1 << RX_INT)) | ||||||
| 		lan8710a_enable_interrupt(RX_INT); | 		lan8710a_enable_interrupt(RX_INT); | ||||||
| 
 | 
 | ||||||
| 	/* Re-enable Tx interrupt. */ | 	/* Re-enable Tx interrupt. */ | ||||||
| 	if(m->NOTIFY_INTMASK & (1 << TX_INT)) | 	if(m->m_notify.interrupts & (1 << TX_INT)) | ||||||
| 		lan8710a_enable_interrupt(TX_INT); | 		lan8710a_enable_interrupt(TX_INT); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -589,7 +589,7 @@ rs_interrupt(message *m) | |||||||
| 	int line; | 	int line; | ||||||
| 	rs232_t *rs; | 	rs232_t *rs; | ||||||
| 
 | 
 | ||||||
| 	irq_set = m->NOTIFY_INTMASK; | 	irq_set = m->m_notify.interrupts; | ||||||
| 	for (line = 0, rs = rs_lines; line < NR_RS_LINES; line++, rs++) { | 	for (line = 0, rs = rs_lines; line < NR_RS_LINES; line++, rs++) { | ||||||
| 		if (irq_set & (1 << rs->irq_hook_id)) { | 		if (irq_set & (1 << rs->irq_hook_id)) { | ||||||
| 			rs232_handler(rs); | 			rs232_handler(rs); | ||||||
|  | |||||||
| @ -534,7 +534,7 @@ void rs_interrupt(message *m) | |||||||
| 	int i; | 	int i; | ||||||
| 	rs232_t *rs; | 	rs232_t *rs; | ||||||
| 
 | 
 | ||||||
| 	irq_set= m->NOTIFY_INTMASK; | 	irq_set= m->m_notify.interrupts; | ||||||
| 	for (i= 0, rs = rs_lines; i<NR_RS_LINES; i++, rs++) | 	for (i= 0, rs = rs_lines; i<NR_RS_LINES; i++, rs++) | ||||||
| 	{ | 	{ | ||||||
| 		if (irq_set & (1 << rs->irq)) | 		if (irq_set & (1 << rs->irq)) | ||||||
|  | |||||||
| @ -186,18 +186,18 @@ int main(void) | |||||||
| 		switch (_ENDPOINT_P(tty_mess.m_source)) { | 		switch (_ENDPOINT_P(tty_mess.m_source)) { | ||||||
| 			case CLOCK: | 			case CLOCK: | ||||||
| 				/* run watchdogs of expired timers */ | 				/* run watchdogs of expired timers */ | ||||||
| 				expire_timers(tty_mess.NOTIFY_TIMESTAMP); | 				expire_timers(tty_mess.m_notify.timestamp); | ||||||
| 				break; | 				break; | ||||||
| 			case HARDWARE:  | 			case HARDWARE:  | ||||||
| 				/* hardware interrupt notification */ | 				/* hardware interrupt notification */ | ||||||
| 
 | 
 | ||||||
| #if NR_RS_LINES > 0 | #if NR_RS_LINES > 0 | ||||||
| 				/* serial I/O */ | 				/* serial I/O */ | ||||||
| 				if (tty_mess.NOTIFY_INTMASK & rs_irq_set) | 				if (tty_mess.m_notify.interrupts & rs_irq_set) | ||||||
| 					rs_interrupt(&tty_mess); | 					rs_interrupt(&tty_mess); | ||||||
| #endif | #endif | ||||||
| 				/* run watchdogs of expired timers */ | 				/* run watchdogs of expired timers */ | ||||||
| 				expire_timers(tty_mess.NOTIFY_TIMESTAMP); | 				expire_timers(tty_mess.m_notify.timestamp); | ||||||
| 				break; | 				break; | ||||||
| 			default: | 			default: | ||||||
| 				/* do nothing */ | 				/* do nothing */ | ||||||
|  | |||||||
| @ -107,11 +107,6 @@ | |||||||
| #define is_ipc_asynch(ipc_status) \ | #define is_ipc_asynch(ipc_status) \ | ||||||
|     (is_ipc_notify(ipc_status) || IPC_STATUS_CALL(ipc_status) == SENDA) |     (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 			     * |  *                Messages for BUS controller drivers 			     * | ||||||
|  *===========================================================================*/ |  *===========================================================================*/ | ||||||
| @ -476,12 +471,12 @@ | |||||||
| #define SG_SIZE		m2_i2	/* no. of entries */ | #define SG_SIZE		m2_i2	/* no. of entries */ | ||||||
| 
 | 
 | ||||||
| /* Field names for SYS_GETKSIG, _ENDKSIG, _KILL, _SIGSEND, _SIGRETURN. */ | /* 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_ENDPT      m_sigcalls.ep     /* process number for inform */ | ||||||
| #define SYS_SIG_NUMBER     m_u.m_sigcalls.sig    /* signal number to send */ | #define SYS_SIG_NUMBER     m_sigcalls.sig    /* signal number to send */ | ||||||
| #define SYS_SIG_FLAGS      m_u.m_sigcalls.flags  /* signal flags field */ | #define SYS_SIG_FLAGS      m_sigcalls.flags  /* signal flags field */ | ||||||
| #define SYS_SIG_MAP        m_u.m_sigcalls.sigs   /* used to pass signal bit map */ | #define SYS_SIG_MAP        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_CTXT_PTR   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_HOW        m_sigcalls.how   /* used to pass signal bit map */ | ||||||
| 
 | 
 | ||||||
| /* Field names for SYS_FORK, _EXEC, _EXIT, GETMCONTEXT, SETMCONTEXT.*/ | /* Field names for SYS_FORK, _EXEC, _EXIT, GETMCONTEXT, SETMCONTEXT.*/ | ||||||
| #define PR_ENDPT        m1_i1	/* indicates a process */ | #define PR_ENDPT        m1_i1	/* indicates a process */ | ||||||
| @ -823,18 +818,18 @@ | |||||||
| 
 | 
 | ||||||
| /* General calls. */ | /* General calls. */ | ||||||
| #define VM_MMAP			(VM_RQ_BASE+10) | #define VM_MMAP			(VM_RQ_BASE+10) | ||||||
| #       define VMM_ADDR                 m_u.m_mmap.addr | #       define VMM_ADDR                 m_mmap.addr | ||||||
| #       define VMM_LEN                  m_u.m_mmap.len | #       define VMM_LEN                  m_mmap.len | ||||||
| #       define VMM_PROT                 m_u.m_mmap.prot | #       define VMM_PROT                 m_mmap.prot | ||||||
| #       define VMM_FLAGS                m_u.m_mmap.flags | #       define VMM_FLAGS                m_mmap.flags | ||||||
| #       define VMM_FD                   m_u.m_mmap.fd | #       define VMM_FD                   m_mmap.fd | ||||||
| #       define VMM_OFFSET               m_u.m_mmap.offset | #       define VMM_OFFSET               m_mmap.offset | ||||||
| #       define VMM_FORWHOM              m_u.m_mmap.forwhom | #       define VMM_FORWHOM              m_mmap.forwhom | ||||||
| #       define VMM_RETADDR              m_u.m_mmap.retaddr | #       define VMM_RETADDR              m_mmap.retaddr | ||||||
| 
 | 
 | ||||||
| #define VM_MUNMAP		(VM_RQ_BASE+17) | #define VM_MUNMAP		(VM_RQ_BASE+17) | ||||||
| #	define VMUM_ADDR		m_u.m_mmap.addr | #	define VMUM_ADDR		m_mmap.addr | ||||||
| #	define VMUM_LEN			m_u.m_mmap.len | #	define VMUM_LEN			m_mmap.len | ||||||
| 
 | 
 | ||||||
| /* to VM: inform VM about a region of memory that is used for
 | /* to VM: inform VM about a region of memory that is used for
 | ||||||
|  * bus-master DMA |  * bus-master DMA | ||||||
| @ -913,8 +908,8 @@ | |||||||
| #	define VMRE_FLAGS		m1_i3 | #	define VMRE_FLAGS		m1_i3 | ||||||
| 
 | 
 | ||||||
| #define VM_SHM_UNMAP		(VM_RQ_BASE+34) | #define VM_SHM_UNMAP		(VM_RQ_BASE+34) | ||||||
| #	define VMUN_ENDPT		m_u.m_mmap.forwhom | #	define VMUN_ENDPT		m_mmap.forwhom | ||||||
| #	define VMUN_ADDR		m_u.m_mmap.addr | #	define VMUN_ADDR		m_mmap.addr | ||||||
| 
 | 
 | ||||||
| #define VM_GETPHYS		(VM_RQ_BASE+35) | #define VM_GETPHYS		(VM_RQ_BASE+35) | ||||||
| #	define VMPHYS_ENDPT		m2_i1 | #	define VMPHYS_ENDPT		m2_i1 | ||||||
|  | |||||||
| @ -114,19 +114,6 @@ typedef struct { | |||||||
| } mess_11; | } mess_11; | ||||||
| _ASSERT_MSG_SIZE(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 { | typedef struct { | ||||||
| 	u64_t timestamp;	/* valid for every notify msg */ | 	u64_t timestamp;	/* valid for every notify msg */ | ||||||
| 	u64_t interrupts;	/* raised interrupts; valid if from HARDWARE */ | 	u64_t interrupts;	/* raised interrupts; valid if from HARDWARE */ | ||||||
| @ -162,6 +149,19 @@ typedef struct { | |||||||
| } mess_vm_vfs_mmap; | } mess_vm_vfs_mmap; | ||||||
| _ASSERT_MSG_SIZE(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 { | typedef struct { | ||||||
| 	void *addr; | 	void *addr; | ||||||
| 	u8_t flags; | 	u8_t flags; | ||||||
| @ -184,114 +184,114 @@ typedef struct { | |||||||
| 	mess_9 m_m9; | 	mess_9 m_m9; | ||||||
| 	mess_10 m_m10; | 	mess_10 m_m10; | ||||||
| 	mess_11 m_m11; | 	mess_11 m_m11; | ||||||
|  | 	mess_mmap m_mmap; | ||||||
| 	mess_vmmcp m_vmmcp; | 	mess_vmmcp m_vmmcp; | ||||||
| 	mess_vmmcp_reply m_vmmcp_reply; | 	mess_vmmcp_reply m_vmmcp_reply; | ||||||
| 	mess_mmap m_mmap; |  | ||||||
| 	mess_vm_vfs_mmap m_vm_vfs; | 	mess_vm_vfs_mmap m_vm_vfs; | ||||||
| 	mess_notify m_notify;	/* notify messages */ | 	mess_notify m_notify;	/* notify messages */ | ||||||
| 	mess_sigcalls m_sigcalls; /* SYS_{GETKSIG,ENDKSIG,KILL,SIGSEND,SIGRETURN} */ | 	mess_sigcalls m_sigcalls; /* SYS_{GETKSIG,ENDKSIG,KILL,SIGSEND,SIGRETURN} */ | ||||||
| 	u32_t size[14];		/* message payload may have 14 longs at most */ | 	u8_t size[56];		/* message payload may have 56 bytes at most */ | ||||||
|   } m_u; |   }; | ||||||
| } message __aligned(16); | } message __aligned(16); | ||||||
| 
 | 
 | ||||||
| /* Ensure the complete union respects the IPC assumptions. */ | /* 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. */ | /* The following defines provide names for useful members. */ | ||||||
| #define m1_i1  m_u.m_m1.m1i1 | #define m1_i1  m_m1.m1i1 | ||||||
| #define m1_i2  m_u.m_m1.m1i2 | #define m1_i2  m_m1.m1i2 | ||||||
| #define m1_i3  m_u.m_m1.m1i3 | #define m1_i3  m_m1.m1i3 | ||||||
| #define m1_p1  m_u.m_m1.m1p1 | #define m1_p1  m_m1.m1p1 | ||||||
| #define m1_p2  m_u.m_m1.m1p2 | #define m1_p2  m_m1.m1p2 | ||||||
| #define m1_p3  m_u.m_m1.m1p3 | #define m1_p3  m_m1.m1p3 | ||||||
| #define m1_p4  m_u.m_m1.m1p4 | #define m1_p4  m_m1.m1p4 | ||||||
| #define m1_ull1  m_u.m_m1.m1ull1 | #define m1_ull1  m_m1.m1ull1 | ||||||
| 
 | 
 | ||||||
| #define m2_ll1  m_u.m_m2.m2ll1 | #define m2_ll1  m_m2.m2ll1 | ||||||
| #define m2_i1  m_u.m_m2.m2i1 | #define m2_i1  m_m2.m2i1 | ||||||
| #define m2_i2  m_u.m_m2.m2i2 | #define m2_i2  m_m2.m2i2 | ||||||
| #define m2_i3  m_u.m_m2.m2i3 | #define m2_i3  m_m2.m2i3 | ||||||
| #define m2_l1  m_u.m_m2.m2l1 | #define m2_l1  m_m2.m2l1 | ||||||
| #define m2_l2  m_u.m_m2.m2l2 | #define m2_l2  m_m2.m2l2 | ||||||
| #define m2_p1  m_u.m_m2.m2p1 | #define m2_p1  m_m2.m2p1 | ||||||
| #define m2_sigset  m_u.m_m2.sigset | #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_i1  m_m3.m3i1 | ||||||
| #define m3_i2  m_u.m_m3.m3i2 | #define m3_i2  m_m3.m3i2 | ||||||
| #define m3_p1  m_u.m_m3.m3p1 | #define m3_p1  m_m3.m3p1 | ||||||
| #define m3_ca1 m_u.m_m3.m3ca1 | #define m3_ca1 m_m3.m3ca1 | ||||||
| 
 | 
 | ||||||
| #define m4_ll1  m_u.m_m4.m4ll1 | #define m4_ll1  m_m4.m4ll1 | ||||||
| #define m4_l1  m_u.m_m4.m4l1 | #define m4_l1  m_m4.m4l1 | ||||||
| #define m4_l2  m_u.m_m4.m4l2 | #define m4_l2  m_m4.m4l2 | ||||||
| #define m4_l3  m_u.m_m4.m4l3 | #define m4_l3  m_m4.m4l3 | ||||||
| #define m4_l4  m_u.m_m4.m4l4 | #define m4_l4  m_m4.m4l4 | ||||||
| #define m4_l5  m_u.m_m4.m4l5 | #define m4_l5  m_m4.m4l5 | ||||||
| 
 | 
 | ||||||
| #define m5_s1  m_u.m_m5.m5s1 | #define m5_s1  m_m5.m5s1 | ||||||
| #define m5_s2  m_u.m_m5.m5s2 | #define m5_s2  m_m5.m5s2 | ||||||
| #define m5_i1  m_u.m_m5.m5i1 | #define m5_i1  m_m5.m5i1 | ||||||
| #define m5_i2  m_u.m_m5.m5i2 | #define m5_i2  m_m5.m5i2 | ||||||
| #define m5_l1  m_u.m_m5.m5l1 | #define m5_l1  m_m5.m5l1 | ||||||
| #define m5_l2  m_u.m_m5.m5l2 | #define m5_l2  m_m5.m5l2 | ||||||
| #define m5_l3  m_u.m_m5.m5l3 | #define m5_l3  m_m5.m5l3 | ||||||
| 
 | 
 | ||||||
| #define m6_l1  m_u.m_m6.m6l1 | #define m6_l1  m_m6.m6l1 | ||||||
| #define m6_l2  m_u.m_m6.m6l2 | #define m6_l2  m_m6.m6l2 | ||||||
| #define m6_l3  m_u.m_m6.m6l3 | #define m6_l3  m_m6.m6l3 | ||||||
| #define m6_s1  m_u.m_m6.m6s1 | #define m6_s1  m_m6.m6s1 | ||||||
| #define m6_s2  m_u.m_m6.m6s2 | #define m6_s2  m_m6.m6s2 | ||||||
| #define m6_s3  m_u.m_m6.m6s3 | #define m6_s3  m_m6.m6s3 | ||||||
| #define m6_c1  m_u.m_m6.m6c1 | #define m6_c1  m_m6.m6c1 | ||||||
| #define m6_c2  m_u.m_m6.m6c2 | #define m6_c2  m_m6.m6c2 | ||||||
| #define m6_p1  m_u.m_m6.m6p1 | #define m6_p1  m_m6.m6p1 | ||||||
| #define m6_p2  m_u.m_m6.m6p2 | #define m6_p2  m_m6.m6p2 | ||||||
| 
 | 
 | ||||||
| #define m7_i1  m_u.m_m7.m7i1 | #define m7_i1  m_m7.m7i1 | ||||||
| #define m7_i2  m_u.m_m7.m7i2 | #define m7_i2  m_m7.m7i2 | ||||||
| #define m7_i3  m_u.m_m7.m7i3 | #define m7_i3  m_m7.m7i3 | ||||||
| #define m7_i4  m_u.m_m7.m7i4 | #define m7_i4  m_m7.m7i4 | ||||||
| #define m7_i5  m_u.m_m7.m7i5 | #define m7_i5  m_m7.m7i5 | ||||||
| #define m7_p1  m_u.m_m7.m7p1 | #define m7_p1  m_m7.m7p1 | ||||||
| #define m7_p2  m_u.m_m7.m7p2 | #define m7_p2  m_m7.m7p2 | ||||||
| 
 | 
 | ||||||
| #define m8_i1  m_u.m_m8.m8i1 | #define m8_i1  m_m8.m8i1 | ||||||
| #define m8_i2  m_u.m_m8.m8i2 | #define m8_i2  m_m8.m8i2 | ||||||
| #define m8_p1  m_u.m_m8.m8p1 | #define m8_p1  m_m8.m8p1 | ||||||
| #define m8_p2  m_u.m_m8.m8p2 | #define m8_p2  m_m8.m8p2 | ||||||
| #define m8_p3  m_u.m_m8.m8p3 | #define m8_p3  m_m8.m8p3 | ||||||
| #define m8_p4  m_u.m_m8.m8p4 | #define m8_p4  m_m8.m8p4 | ||||||
| 
 | 
 | ||||||
| #define m9_l1  m_u.m_m9.m9l1 | #define m9_l1  m_m9.m9l1 | ||||||
| #define m9_l2  m_u.m_m9.m9l2 | #define m9_l2  m_m9.m9l2 | ||||||
| #define m9_l3  m_u.m_m9.m9l3 | #define m9_l3  m_m9.m9l3 | ||||||
| #define m9_l4  m_u.m_m9.m9l4 | #define m9_l4  m_m9.m9l4 | ||||||
| #define m9_l5  m_u.m_m9.m9l5 | #define m9_l5  m_m9.m9l5 | ||||||
| #define m9_s1  m_u.m_m9.m9s1 | #define m9_s1  m_m9.m9s1 | ||||||
| #define m9_s2  m_u.m_m9.m9s2 | #define m9_s2  m_m9.m9s2 | ||||||
| #define m9_s3  m_u.m_m9.m9s3 | #define m9_s3  m_m9.m9s3 | ||||||
| #define m9_s4  m_u.m_m9.m9s4 | #define m9_s4  m_m9.m9s4 | ||||||
| #define m9_ull1  m_u.m_m9.m9ull1 | #define m9_ull1  m_m9.m9ull1 | ||||||
| 
 | 
 | ||||||
| #define m10_i1 m_u.m_m10.m10i1 | #define m10_i1 m_m10.m10i1 | ||||||
| #define m10_i2 m_u.m_m10.m10i2 | #define m10_i2 m_m10.m10i2 | ||||||
| #define m10_i3 m_u.m_m10.m10i3 | #define m10_i3 m_m10.m10i3 | ||||||
| #define m10_i4 m_u.m_m10.m10i4 | #define m10_i4 m_m10.m10i4 | ||||||
| #define m10_l1 m_u.m_m10.m10l1 | #define m10_l1 m_m10.m10l1 | ||||||
| #define m10_l2 m_u.m_m10.m10l2 | #define m10_l2 m_m10.m10l2 | ||||||
| #define m10_l3 m_u.m_m10.m10l3 | #define m10_l3 m_m10.m10l3 | ||||||
| 
 | 
 | ||||||
| #define m11_i1 m_u.m_m11.m11i1 | #define m11_i1 m_m11.m11i1 | ||||||
| #define m11_s1 m_u.m_m11.m11s1 | #define m11_s1 m_m11.m11s1 | ||||||
| #define m11_s2 m_u.m_m11.m11s2 | #define m11_s2 m_m11.m11s2 | ||||||
| #define m11_s3 m_u.m_m11.m11s3 | #define m11_s3 m_m11.m11s3 | ||||||
| #define m11_s4 m_u.m_m11.m11s4 | #define m11_s4 m_m11.m11s4 | ||||||
| #define m11_p1 m_u.m_m11.m11p1 | #define m11_p1 m_m11.m11p1 | ||||||
| #define m11_p2 m_u.m_m11.m11p2 | #define m11_p2 m_m11.m11p2 | ||||||
| #define m11_p3 m_u.m_m11.m11p3 | #define m11_p3 m_m11.m11p3 | ||||||
| #define m11_p4 m_u.m_m11.m11p4 | #define m11_p4 m_m11.m11p4 | ||||||
| 
 | 
 | ||||||
| /*==========================================================================* 
 | /*==========================================================================* 
 | ||||||
|  * Minix run-time system (IPC). 					    * |  * Minix run-time system (IPC). 					    * | ||||||
|  | |||||||
| @ -101,14 +101,15 @@ static void set_idle_name(char * name, int n) | |||||||
| #define BuildNotifyMessage(m_ptr, src, dst_ptr) \ | #define BuildNotifyMessage(m_ptr, src, dst_ptr) \ | ||||||
| 	memset((m_ptr), 0, sizeof(*(m_ptr)));				\ | 	memset((m_ptr), 0, sizeof(*(m_ptr)));				\ | ||||||
| 	(m_ptr)->m_type = NOTIFY_MESSAGE;				\ | 	(m_ptr)->m_type = NOTIFY_MESSAGE;				\ | ||||||
| 	(m_ptr)->NOTIFY_TIMESTAMP = get_monotonic();			\ | 	(m_ptr)->m_notify.timestamp = get_monotonic();		\ | ||||||
| 	switch (src) {							\ | 	switch (src) {							\ | ||||||
| 	case HARDWARE:							\ | 	case HARDWARE:							\ | ||||||
| 		(m_ptr)->NOTIFY_INTMASK = priv(dst_ptr)->s_int_pending; \ | 		(m_ptr)->m_notify.interrupts =			\ | ||||||
|  | 			priv(dst_ptr)->s_int_pending;			\ | ||||||
| 		priv(dst_ptr)->s_int_pending = 0;			\ | 		priv(dst_ptr)->s_int_pending = 0;			\ | ||||||
| 		break;							\ | 		break;							\ | ||||||
| 	case SYSTEM:							\ | 	case SYSTEM:							\ | ||||||
| 		memcpy(&(m_ptr)->NOTIFY_SIGSET,				\ | 		memcpy(&(m_ptr)->m_notify.sigset,			\ | ||||||
| 			&priv(dst_ptr)->s_sig_pending,			\ | 			&priv(dst_ptr)->s_sig_pending,			\ | ||||||
| 			sizeof(sigset_t));				\ | 			sizeof(sigset_t));				\ | ||||||
| 		sigemptyset(&priv(dst_ptr)->s_sig_pending);		\ | 		sigemptyset(&priv(dst_ptr)->s_sig_pending);		\ | ||||||
|  | |||||||
| @ -392,12 +392,12 @@ void blockdriver_process_on_thread(struct blockdriver *bdp, message *m_ptr, | |||||||
| 	switch (_ENDPOINT_P(m_ptr->m_source)) { | 	switch (_ENDPOINT_P(m_ptr->m_source)) { | ||||||
| 	case HARDWARE: | 	case HARDWARE: | ||||||
| 		if (bdp->bdr_intr) | 		if (bdp->bdr_intr) | ||||||
| 			(*bdp->bdr_intr)(m_ptr->NOTIFY_INTMASK); | 			(*bdp->bdr_intr)(m_ptr->m_notify.interrupts); | ||||||
| 		break; | 		break; | ||||||
| 
 | 
 | ||||||
| 	case CLOCK: | 	case CLOCK: | ||||||
| 		if (bdp->bdr_alarm) | 		if (bdp->bdr_alarm) | ||||||
| 			(*bdp->bdr_alarm)(m_ptr->NOTIFY_TIMESTAMP); | 			(*bdp->bdr_alarm)(m_ptr->m_notify.timestamp); | ||||||
| 		break; | 		break; | ||||||
| 
 | 
 | ||||||
| 	default: | 	default: | ||||||
|  | |||||||
| @ -58,15 +58,15 @@ int minix_vfs_mmap(endpoint_t who, off_t offset, size_t len, | |||||||
| 
 | 
 | ||||||
| 	memset(&m, 0, sizeof(message)); | 	memset(&m, 0, sizeof(message)); | ||||||
| 
 | 
 | ||||||
| 	m.m_u.m_vm_vfs.who = who; | 	m.m_vm_vfs.who = who; | ||||||
| 	m.m_u.m_vm_vfs.offset = offset; | 	m.m_vm_vfs.offset = offset; | ||||||
| 	m.m_u.m_vm_vfs.dev = dev; | 	m.m_vm_vfs.dev = dev; | ||||||
| 	m.m_u.m_vm_vfs.ino = ino; | 	m.m_vm_vfs.ino = ino; | ||||||
| 	m.m_u.m_vm_vfs.vaddr = vaddr; | 	m.m_vm_vfs.vaddr = vaddr; | ||||||
| 	m.m_u.m_vm_vfs.len = len; | 	m.m_vm_vfs.len = len; | ||||||
| 	m.m_u.m_vm_vfs.fd = fd; | 	m.m_vm_vfs.fd = fd; | ||||||
| 	m.m_u.m_vm_vfs.clearend = clearend; | 	m.m_vm_vfs.clearend = clearend; | ||||||
| 	m.m_u.m_vm_vfs.flags = flags; | 	m.m_vm_vfs.flags = flags; | ||||||
| 
 | 
 | ||||||
| 	return _syscall(VM_PROC_NR, VM_VFS_MMAP, &m); | 	return _syscall(VM_PROC_NR, VM_VFS_MMAP, &m); | ||||||
| } | } | ||||||
|  | |||||||
| @ -447,12 +447,12 @@ void chardriver_process(struct chardriver *cdp, message *m_ptr, int ipc_status) | |||||||
| 	switch (_ENDPOINT_P(m_ptr->m_source)) { | 	switch (_ENDPOINT_P(m_ptr->m_source)) { | ||||||
| 	case HARDWARE: | 	case HARDWARE: | ||||||
| 		if (cdp->cdr_intr) | 		if (cdp->cdr_intr) | ||||||
| 			cdp->cdr_intr(m_ptr->NOTIFY_INTMASK); | 			cdp->cdr_intr(m_ptr->m_notify.interrupts); | ||||||
| 		break; | 		break; | ||||||
| 
 | 
 | ||||||
| 	case CLOCK: | 	case CLOCK: | ||||||
| 		if (cdp->cdr_alarm) | 		if (cdp->cdr_alarm) | ||||||
| 			cdp->cdr_alarm(m_ptr->NOTIFY_TIMESTAMP); | 			cdp->cdr_alarm(m_ptr->m_notify.timestamp); | ||||||
| 		break; | 		break; | ||||||
| 
 | 
 | ||||||
| 	default: | 	default: | ||||||
|  | |||||||
| @ -64,7 +64,7 @@ static void dispatcher_thread(void *unused) { | |||||||
| 				case HARDWARE: | 				case HARDWARE: | ||||||
| 					for	(i =0 ; i < 32 ; i++) | 					for	(i =0 ; i < 32 ; i++) | ||||||
| 					{ | 					{ | ||||||
| 						if(m.NOTIFY_INTMASK & (1 << i))  | 						if(m.m_notify.interrupts & (1 << i)) | ||||||
| 						{ | 						{ | ||||||
| 							_ddekit_interrupt_trigger(i); | 							_ddekit_interrupt_trigger(i); | ||||||
| 						} | 						} | ||||||
|  | |||||||
| @ -349,8 +349,8 @@ omap_message_hook(message * m) | |||||||
| 	switch (_ENDPOINT_P(m->m_source)) { | 	switch (_ENDPOINT_P(m->m_source)) { | ||||||
| 	case HARDWARE: | 	case HARDWARE: | ||||||
| 		/* Hardware interrupt return a "set" if pending interrupts */ | 		/* Hardware interrupt return a "set" if pending interrupts */ | ||||||
| 		irq_set = m->NOTIFY_INTMASK; | 		irq_set = m->m_notify.interrupts; | ||||||
| 		log_debug(&log, "HW message 0X%08llx\n", m->NOTIFY_INTMASK); | 		log_debug(&log, "HW message 0X%08llx\n", m->m_notify.interrupts); | ||||||
| 		bank = &omap_gpio_banks[0]; | 		bank = &omap_gpio_banks[0]; | ||||||
| 		for (i = 0; omap_gpio_banks[i].name != NULL; i++) { | 		for (i = 0; omap_gpio_banks[i].name != NULL; i++) { | ||||||
| 			bank = &omap_gpio_banks[i]; | 			bank = &omap_gpio_banks[i]; | ||||||
|  | |||||||
| @ -146,12 +146,12 @@ inputdriver_process(struct inputdriver *idp, message *m_ptr, int ipc_status) | |||||||
| 		switch (_ENDPOINT_P(m_ptr->m_source)) { | 		switch (_ENDPOINT_P(m_ptr->m_source)) { | ||||||
| 		case HARDWARE: | 		case HARDWARE: | ||||||
| 			if (idp->idr_intr) | 			if (idp->idr_intr) | ||||||
| 				idp->idr_intr(m_ptr->NOTIFY_INTMASK); | 				idp->idr_intr(m_ptr->m_notify.interrupts); | ||||||
| 			break; | 			break; | ||||||
| 
 | 
 | ||||||
| 		case CLOCK: | 		case CLOCK: | ||||||
| 			if (idp->idr_alarm) | 			if (idp->idr_alarm) | ||||||
| 				idp->idr_alarm(m_ptr->NOTIFY_TIMESTAMP); | 				idp->idr_alarm(m_ptr->m_notify.timestamp); | ||||||
| 			break; | 			break; | ||||||
| 
 | 
 | ||||||
| 		default: | 		default: | ||||||
|  | |||||||
| @ -93,7 +93,7 @@ int do_sef_signal_request(message *m_ptr) | |||||||
| 
 | 
 | ||||||
|   if(m_ptr->m_source == SYSTEM) { |   if(m_ptr->m_source == SYSTEM) { | ||||||
|       /* Handle kernel signals. */ |       /* Handle kernel signals. */ | ||||||
|       sigset = m_ptr->NOTIFY_SIGSET; |       sigset = m_ptr->m_notify.sigset; | ||||||
|       for (signo = SIGK_FIRST; signo <= SIGK_LAST; signo++) { |       for (signo = SIGK_FIRST; signo <= SIGK_LAST; signo++) { | ||||||
|           int s = sigismember(&sigset, signo); |           int s = sigismember(&sigset, signo); | ||||||
|           assert(s >= 0); |           assert(s >= 0); | ||||||
|  | |||||||
| @ -28,14 +28,14 @@ int vm_cachecall(message *m, int call, void *addr, dev_t dev, off_t dev_offset, | |||||||
| 
 | 
 | ||||||
|     assert(dev != NO_DEV); |     assert(dev != NO_DEV); | ||||||
| 
 | 
 | ||||||
|     m->m_u.m_vmmcp.dev_offset = dev_offset; |     m->m_vmmcp.dev_offset = dev_offset; | ||||||
|     m->m_u.m_vmmcp.ino_offset = ino_offset; |     m->m_vmmcp.ino_offset = ino_offset; | ||||||
|     m->m_u.m_vmmcp.ino = ino; |     m->m_vmmcp.ino = ino; | ||||||
|     m->m_u.m_vmmcp.block = addr; |     m->m_vmmcp.block = addr; | ||||||
|     m->m_u.m_vmmcp.flags_ptr = flags; |     m->m_vmmcp.flags_ptr = flags; | ||||||
|     m->m_u.m_vmmcp.dev = dev; |     m->m_vmmcp.dev = dev; | ||||||
|     m->m_u.m_vmmcp.pages = blocksize / PAGE_SIZE; |     m->m_vmmcp.pages = blocksize / PAGE_SIZE; | ||||||
|     m->m_u.m_vmmcp.flags = 0; |     m->m_vmmcp.flags = 0; | ||||||
| 
 | 
 | ||||||
|     return _taskcall(VM_PROC_NR, call, m); |     return _taskcall(VM_PROC_NR, call, m); | ||||||
| } | } | ||||||
| @ -49,7 +49,7 @@ void *vm_map_cacheblock(dev_t dev, off_t dev_offset, | |||||||
| 		ino, ino_offset, flags, blocksize) != OK) | 		ino, ino_offset, flags, blocksize) != OK) | ||||||
| 		return MAP_FAILED; | 		return MAP_FAILED; | ||||||
| 
 | 
 | ||||||
| 	return m.m_u.m_vmmcp_reply.addr; | 	return m.m_vmmcp_reply.addr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int vm_set_cacheblock(void *block, dev_t dev, off_t dev_offset, | int vm_set_cacheblock(void *block, dev_t dev, off_t dev_offset, | ||||||
| @ -70,7 +70,7 @@ vm_clear_cache(dev_t dev) | |||||||
| 
 | 
 | ||||||
| 	memset(&m, 0, sizeof(m)); | 	memset(&m, 0, sizeof(m)); | ||||||
| 
 | 
 | ||||||
| 	m.m_u.m_vmmcp.dev = dev; | 	m.m_vmmcp.dev = dev; | ||||||
| 
 | 
 | ||||||
| 	return _taskcall(VM_PROC_NR, VM_CLEARCACHE, &m); | 	return _taskcall(VM_PROC_NR, VM_CLEARCACHE, &m); | ||||||
| } | } | ||||||
|  | |||||||
| @ -275,7 +275,7 @@ int main(__unused int argc, __unused char ** argv) | |||||||
| 		else if (is_ipc_notify(ipc_status)) { | 		else if (is_ipc_notify(ipc_status)) { | ||||||
| 			switch (m.m_source) { | 			switch (m.m_source) { | ||||||
| 			case CLOCK: | 			case CLOCK: | ||||||
| 				expire_timers(m.NOTIFY_TIMESTAMP); | 				expire_timers(m.m_notify.timestamp); | ||||||
| 				break; | 				break; | ||||||
| 			case DS_PROC_NR: | 			case DS_PROC_NR: | ||||||
| 				ds_event(); | 				ds_event(); | ||||||
|  | |||||||
| @ -65,7 +65,7 @@ int main() | |||||||
| 	/* Check for system notifications first. Special cases. */ | 	/* Check for system notifications first. Special cases. */ | ||||||
| 	if (is_ipc_notify(ipc_status)) { | 	if (is_ipc_notify(ipc_status)) { | ||||||
| 		if (_ENDPOINT_P(m_in.m_source) == CLOCK) | 		if (_ENDPOINT_P(m_in.m_source) == CLOCK) | ||||||
| 			expire_timers(m_in.NOTIFY_TIMESTAMP); | 			expire_timers(m_in.m_notify.timestamp); | ||||||
| 
 | 
 | ||||||
| 		/* done, continue */ | 		/* done, continue */ | ||||||
| 		continue; | 		continue; | ||||||
|  | |||||||
| @ -81,7 +81,7 @@ int main(void) | |||||||
| 	      continue; | 	      continue; | ||||||
| 	  default:				/* heartbeat notification */ | 	  default:				/* heartbeat notification */ | ||||||
| 	      if (rproc_ptr[who_p] != NULL) {	/* mark heartbeat time */  | 	      if (rproc_ptr[who_p] != NULL) {	/* mark heartbeat time */  | ||||||
| 		  rproc_ptr[who_p]->r_alive_tm = m.NOTIFY_TIMESTAMP; | 		  rproc_ptr[who_p]->r_alive_tm = m.m_notify.timestamp; | ||||||
| 	      } else { | 	      } else { | ||||||
| 		  printf("RS: warning: got unexpected notify message from %d\n", | 		  printf("RS: warning: got unexpected notify message from %d\n", | ||||||
| 		      m.m_source); | 		      m.m_source); | ||||||
|  | |||||||
| @ -237,7 +237,7 @@ int srv_update(endpoint_t src_e, endpoint_t dst_e) | |||||||
|  *===========================================================================*/ |  *===========================================================================*/ | ||||||
| void update_period(message *m_ptr) | void update_period(message *m_ptr) | ||||||
| { | { | ||||||
|   clock_t now = m_ptr->NOTIFY_TIMESTAMP; |   clock_t now = m_ptr->m_notify.timestamp; | ||||||
|   short has_update_timed_out; |   short has_update_timed_out; | ||||||
|   message m; |   message m; | ||||||
|   struct rprocpub *rpub; |   struct rprocpub *rpub; | ||||||
|  | |||||||
| @ -730,7 +730,7 @@ message *m_ptr; | |||||||
| { | { | ||||||
|   register struct rproc *rp; |   register struct rproc *rp; | ||||||
|   register struct rprocpub *rpub; |   register struct rprocpub *rpub; | ||||||
|   clock_t now = m_ptr->NOTIFY_TIMESTAMP; |   clock_t now = m_ptr->m_notify.timestamp; | ||||||
|   int s; |   int s; | ||||||
|   long period; |   long period; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -50,7 +50,7 @@ int main(void) | |||||||
| 		if (is_ipc_notify(ipc_status)) { | 		if (is_ipc_notify(ipc_status)) { | ||||||
| 			switch(who_e) { | 			switch(who_e) { | ||||||
| 				case CLOCK: | 				case CLOCK: | ||||||
| 					expire_timers(m_in.NOTIFY_TIMESTAMP); | 					expire_timers(m_in.m_notify.timestamp); | ||||||
| 					continue;	/* don't reply */ | 					continue;	/* don't reply */ | ||||||
| 				default : | 				default : | ||||||
| 					result = ENOSYS; | 					result = ENOSYS; | ||||||
|  | |||||||
| @ -109,7 +109,7 @@ int main(void) | |||||||
| 			break; | 			break; | ||||||
| 		case CLOCK: | 		case CLOCK: | ||||||
| 			/* Timer expired. Used only for select(). Check it. */ | 			/* Timer expired. Used only for select(). Check it. */ | ||||||
| 			expire_timers(m_in.NOTIFY_TIMESTAMP); | 			expire_timers(m_in.m_notify.timestamp); | ||||||
| 			break; | 			break; | ||||||
| 		default: | 		default: | ||||||
| 			printf("VFS: ignoring notification from %d\n", who_e); | 			printf("VFS: ignoring notification from %d\n", who_e); | ||||||
|  | |||||||
| @ -85,11 +85,11 @@ static int cache_resize(struct vmproc *vmp, struct vir_region *vr, vir_bytes l) | |||||||
| int | int | ||||||
| do_mapcache(message *msg) | do_mapcache(message *msg) | ||||||
| { | { | ||||||
| 	dev_t dev = msg->m_u.m_vmmcp.dev; | 	dev_t dev = msg->m_vmmcp.dev; | ||||||
| 	u64_t dev_off = msg->m_u.m_vmmcp.dev_offset; | 	off_t dev_off = msg->m_vmmcp.dev_offset; | ||||||
| 	u64_t ino_off = msg->m_u.m_vmmcp.ino_offset; | 	off_t ino_off = msg->m_vmmcp.ino_offset; | ||||||
| 	int n; | 	int n; | ||||||
| 	phys_bytes bytes = msg->m_u.m_vmmcp.pages * VM_PAGE_SIZE; | 	phys_bytes bytes = msg->m_vmmcp.pages * VM_PAGE_SIZE; | ||||||
| 	struct vir_region *vr; | 	struct vir_region *vr; | ||||||
| 	struct vmproc *caller; | 	struct vmproc *caller; | ||||||
| 	vir_bytes offset; | 	vir_bytes offset; | ||||||
| @ -120,7 +120,7 @@ do_mapcache(message *msg) | |||||||
| 		assert(offset < vr->length); | 		assert(offset < vr->length); | ||||||
| 
 | 
 | ||||||
| 		if(!(hb = find_cached_page_bydev(dev, dev_off + offset, | 		if(!(hb = find_cached_page_bydev(dev, dev_off + offset, | ||||||
| 			msg->m_u.m_vmmcp.ino, ino_off + offset, 1))) { | 			msg->m_vmmcp.ino, ino_off + offset, 1))) { | ||||||
| 			map_unmap_region(caller, vr, 0, bytes); | 			map_unmap_region(caller, vr, 0, bytes); | ||||||
| 			return ENOENT; | 			return ENOENT; | ||||||
| 		} | 		} | ||||||
| @ -141,7 +141,7 @@ do_mapcache(message *msg) | |||||||
| 
 | 
 | ||||||
| 	memset(msg, 0, sizeof(*msg)); | 	memset(msg, 0, sizeof(*msg)); | ||||||
| 
 | 
 | ||||||
| 	msg->m_u.m_vmmcp_reply.addr = (void *) vr->vaddr; | 	msg->m_vmmcp_reply.addr = (void *) vr->vaddr; | ||||||
|   |   | ||||||
|  	assert(vr); |  	assert(vr); | ||||||
| 
 | 
 | ||||||
| @ -170,13 +170,13 @@ int | |||||||
| do_setcache(message *msg) | do_setcache(message *msg) | ||||||
| { | { | ||||||
| 	int r; | 	int r; | ||||||
| 	dev_t dev = msg->m_u.m_vmmcp.dev; | 	dev_t dev = msg->m_vmmcp.dev; | ||||||
| 	u64_t dev_off = (u64_t) msg->m_u.m_vmmcp.dev_offset; | 	off_t dev_off = msg->m_vmmcp.dev_offset; | ||||||
| 	u64_t ino_off = (u64_t) msg->m_u.m_vmmcp.ino_offset; | 	off_t ino_off = msg->m_vmmcp.ino_offset; | ||||||
| 	int n; | 	int n; | ||||||
| 	struct vmproc *caller; | 	struct vmproc *caller; | ||||||
| 	phys_bytes offset; | 	phys_bytes offset; | ||||||
| 	phys_bytes bytes = msg->m_u.m_vmmcp.pages * VM_PAGE_SIZE; | 	phys_bytes bytes = msg->m_vmmcp.pages * VM_PAGE_SIZE; | ||||||
| 
 | 
 | ||||||
| 	if(bytes < VM_PAGE_SIZE) return EINVAL; | 	if(bytes < VM_PAGE_SIZE) return EINVAL; | ||||||
| 
 | 
 | ||||||
| @ -191,7 +191,7 @@ do_setcache(message *msg) | |||||||
| 	for(offset = 0; offset < bytes; offset += VM_PAGE_SIZE) { | 	for(offset = 0; offset < bytes; offset += VM_PAGE_SIZE) { | ||||||
| 		struct vir_region *region; | 		struct vir_region *region; | ||||||
| 		struct phys_region *phys_region = NULL; | 		struct phys_region *phys_region = NULL; | ||||||
| 		vir_bytes v = (vir_bytes) msg->m_u.m_vmmcp.block + offset; | 		vir_bytes v = (vir_bytes) msg->m_vmmcp.block + offset; | ||||||
|                 struct cached_page *hb; |                 struct cached_page *hb; | ||||||
| 
 | 
 | ||||||
| 		if(!(region = map_lookup(caller, v, &phys_region))) { | 		if(!(region = map_lookup(caller, v, &phys_region))) { | ||||||
| @ -205,7 +205,7 @@ do_setcache(message *msg) | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if((hb=find_cached_page_bydev(dev, dev_off + offset, | 		if((hb=find_cached_page_bydev(dev, dev_off + offset, | ||||||
| 			msg->m_u.m_vmmcp.ino, ino_off + offset, 1))) { | 			msg->m_vmmcp.ino, ino_off + offset, 1))) { | ||||||
| 			/* block inode info updated */ | 			/* block inode info updated */ | ||||||
| 			if(hb->page != phys_region->ph) { | 			if(hb->page != phys_region->ph) { | ||||||
| 				/* previous cache entry has become
 | 				/* previous cache entry has become
 | ||||||
| @ -235,7 +235,7 @@ do_setcache(message *msg) | |||||||
| 		phys_region->memtype = &mem_type_cache; | 		phys_region->memtype = &mem_type_cache; | ||||||
| 
 | 
 | ||||||
| 		if((r=addcache(dev, dev_off + offset, | 		if((r=addcache(dev, dev_off + offset, | ||||||
| 			msg->m_u.m_vmmcp.ino, ino_off + offset, phys_region->ph)) != OK) { | 			msg->m_vmmcp.ino, ino_off + offset, phys_region->ph)) != OK) { | ||||||
| 			printf("VM: addcache failed\n"); | 			printf("VM: addcache failed\n"); | ||||||
| 			return r; | 			return r; | ||||||
| 		} | 		} | ||||||
| @ -256,7 +256,7 @@ do_clearcache(message *msg) | |||||||
| { | { | ||||||
| 	dev_t dev; | 	dev_t dev; | ||||||
| 
 | 
 | ||||||
| 	dev = msg->m_u.m_vmmcp.dev; | 	dev = msg->m_vmmcp.dev; | ||||||
| 
 | 
 | ||||||
| 	clear_cache_bydev(dev); | 	clear_cache_bydev(dev); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -141,18 +141,18 @@ int do_vfs_mmap(message *m) | |||||||
| 	/* It might be disabled */ | 	/* It might be disabled */ | ||||||
| 	if(!enable_filemap) return ENXIO; | 	if(!enable_filemap) return ENXIO; | ||||||
| 
 | 
 | ||||||
| 	clearend = m->m_u.m_vm_vfs.clearend; | 	clearend = m->m_vm_vfs.clearend; | ||||||
| 	flags = m->m_u.m_vm_vfs.flags; | 	flags = m->m_vm_vfs.flags; | ||||||
| 
 | 
 | ||||||
| 	if((r=vm_isokendpt(m->m_u.m_vm_vfs.who, &n)) != OK) | 	if((r=vm_isokendpt(m->m_vm_vfs.who, &n)) != OK) | ||||||
| 		panic("bad ep %d from vfs", m->m_u.m_vm_vfs.who); | 		panic("bad ep %d from vfs", m->m_vm_vfs.who); | ||||||
| 	vmp = &vmproc[n]; | 	vmp = &vmproc[n]; | ||||||
| 
 | 
 | ||||||
| 	return mmap_file(vmp, m->m_u.m_vm_vfs.fd, m->m_u.m_vm_vfs.offset, | 	return mmap_file(vmp, m->m_vm_vfs.fd, m->m_vm_vfs.offset, | ||||||
| 		MAP_PRIVATE | MAP_FIXED, | 		MAP_PRIVATE | MAP_FIXED, | ||||||
| 		m->m_u.m_vm_vfs.ino, m->m_u.m_vm_vfs.dev, | 		m->m_vm_vfs.ino, m->m_vm_vfs.dev, | ||||||
| 		(u64_t) LONG_MAX * VM_PAGE_SIZE, | 		(u64_t) LONG_MAX * VM_PAGE_SIZE, | ||||||
| 		m->m_u.m_vm_vfs.vaddr, m->m_u.m_vm_vfs.len, &v, | 		m->m_vm_vfs.vaddr, m->m_vm_vfs.len, &v, | ||||||
| 		clearend, flags, 0); | 		clearend, flags, 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Lionel Sambuc
						Lionel Sambuc