 48c6bb79f4
			
		
	
	
		48c6bb79f4
		
	
	
	
	
		
			
			SYSLIB CHANGES: - DS calls to publish / retrieve labels consider endpoints instead of u32_t. VFS CHANGES: - mapdriver() only adds an entry in the dmap table in VFS. - dev_up() is only executed upon reception of a driver up event. INET CHANGES: - INET no longer searches for existing drivers instances at startup. - A newtwork driver is (re)initialized upon reception of a driver up event. - Networking startup is now race-free by design. No need to waste 5 seconds at startup any more. DRIVER CHANGES: - Every driver publishes driver up events when starting for the first time or in case of restart when recovery actions must be taken in the upper layers. - Driver up events are published by drivers through DS. - For regular drivers, VFS is normally the only subscriber, but not necessarily. For instance, when the filter driver is in use, it must subscribe to driver up events to initiate recovery. - For network drivers, inet is the only subscriber for now. - Every VFS driver is statically linked with libdriver, every network driver is statically linked with libnetdriver. DRIVER LIBRARIES CHANGES: - Libdriver is extended to provide generic receive() and ds_publish() interfaces for VFS drivers. - driver_receive() is a wrapper for sef_receive() also used in driver_task() to discard spurious messages that were meant to be delivered to a previous version of the driver. - driver_receive_mq() is the same as driver_receive() but integrates support for queued messages. - driver_announce() publishes a driver up event for VFS drivers and marks the driver as initialized and expecting a DEV_OPEN message. - Libnetdriver is introduced to provide similar receive() and ds_publish() interfaces for network drivers (netdriver_announce() and netdriver_receive()). - Network drivers all support live update with no state transfer now. KERNEL CHANGES: - Added kernel call statectl for state management. Used by driver_announce() to unblock eventual callers sendrecing to the driver.
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Prototypes and definitions for DS interface. */
 | |
| 
 | |
| #ifndef _MINIX_DS_H
 | |
| #define _MINIX_DS_H
 | |
| 
 | |
| #include <minix/types.h>
 | |
| #include <minix/endpoint.h>
 | |
| 
 | |
| /* Flags. */
 | |
| #define DSF_IN_USE		0x001	/* entry is in use */
 | |
| #define DSF_PRIV_RETRIEVE	0x002	/* only owner can retrieve */
 | |
| #define DSF_PRIV_OVERWRITE	0x004	/* only owner can overwrite */
 | |
| #define DSF_PRIV_SNAPSHOT	0x004	/* only owner can take a snapshot */
 | |
| #define DSF_PRIV_SUBSCRIBE	0x008	/* only owner can subscribe */
 | |
| #define DSF_TYPE_U32		0x010	/* u32 data type */
 | |
| #define DSF_TYPE_STR		0x020	/* string data type */
 | |
| #define DSF_TYPE_MEM		0x040	/* memory range data type */
 | |
| #define DSF_TYPE_MAP		0x080	/* mapped memory range data type */
 | |
| #define DSF_TYPE_LABEL		0x100	/* label data type */
 | |
| 
 | |
| #define DSF_MASK_TYPE		0xFF0	/* mask for type flags. */
 | |
| #define DSF_MASK_INTERNAL	0xFFF	/* mask for internal flags. */
 | |
| 
 | |
| #define DSF_OVERWRITE		0x01000	/* overwrite if entry exists */
 | |
| #define DSF_INITIAL		0x02000	/* check subscriptions immediately */
 | |
| 
 | |
| #define DSMF_MAP_MAPPED		0x10000	/* map mapped memory range */
 | |
| #define DSMF_COPY_MAPPED	0x20000	/* copy mapped memory range */
 | |
| #define DSMF_COPY_SNAPSHOT	0x40000	/* copy snapshot */
 | |
| 
 | |
| /* DS constants. */
 | |
| #define DS_MAX_KEYLEN 80        /* Max length of a key, including '\0'. */
 | |
| 
 | |
| /* DS events. */
 | |
| #define DS_DRIVER_UP		1
 | |
| 
 | |
| /* ds.c */
 | |
| 
 | |
| /* U32 */
 | |
| _PROTOTYPE( int ds_publish_u32, (const char *name, u32_t val, int flags));
 | |
| _PROTOTYPE( int ds_retrieve_u32, (const char *name, u32_t *val));
 | |
| _PROTOTYPE( int ds_delete_u32, (const char *ds_name));
 | |
| 
 | |
| /* STRING */
 | |
| _PROTOTYPE( int ds_publish_str, (const char *name, char *val, int flags));
 | |
| _PROTOTYPE( int ds_retrieve_str, (const char *name, char *val, size_t len));
 | |
| _PROTOTYPE( int ds_delete_str, (const char *ds_name));
 | |
| 
 | |
| /* MEM */
 | |
| _PROTOTYPE( int ds_publish_mem, (const char *ds_name, void *vaddr,
 | |
| 		size_t length, int flags));
 | |
| _PROTOTYPE( int ds_retrieve_mem, (const char *ds_name, char *vaddr,
 | |
| 		size_t *length));
 | |
| _PROTOTYPE( int ds_delete_mem, (const char *ds_name));
 | |
| 
 | |
| /* MAP */
 | |
| _PROTOTYPE( int ds_publish_map, (const char *ds_name, void *vaddr,
 | |
| 		size_t length, int flags));
 | |
| _PROTOTYPE( int ds_snapshot_map, (const char *ds_name, int *nr_snapshot));
 | |
| _PROTOTYPE( int ds_retrieve_map, (const char *ds_name, char *vaddr,
 | |
| 		size_t *length, int nr_snapshot, int flags));
 | |
| _PROTOTYPE( int ds_delete_map, (const char *ds_name));
 | |
| 
 | |
| /* LABEL */
 | |
| _PROTOTYPE( int ds_publish_label, (const char *ds_name, endpoint_t endpoint,
 | |
| 		int flags));
 | |
| _PROTOTYPE( int ds_retrieve_label_name, (char *ds_name, endpoint_t endpoint));
 | |
| _PROTOTYPE( int ds_retrieve_label_endpt, (const char *ds_name,
 | |
| 		endpoint_t *endpoint));
 | |
| _PROTOTYPE( int ds_delete_label, (const char *ds_name));
 | |
| 
 | |
| /* Subscribe and check. */
 | |
| _PROTOTYPE( int ds_subscribe, (const char *regex, int flags));
 | |
| _PROTOTYPE( int ds_check, (char *ds_name, int *type, endpoint_t *owner_e));
 | |
| 
 | |
| #endif /* _MINIX_DS_H */
 | |
| 
 |