 aba392e630
			
		
	
	
		aba392e630
		
	
	
	
	
		
			
			- Remove redundant code. - Always wait for the initial reply from an asynchronous select request, even if the select has been satisfied on another file descriptor or was canceled due to a serious error. - Restart asynchronous selects if upon reply from the driver turns out that there are deferred operations (and do not forget we're still interested in the results of the deferred operations). - Do not hang a non-blocking select when another blocking select on the same filp is still blocking. - Split blocking operations in read, write, and exceptions (i.e., blocking on read does not imply the write will block as well). - Some loops would iterate over OPEN_MAX file descriptors instead of the "highest" file descriptor. - Use proper internal error return values. - A secondary reply from a synchronous driver is essentially the same as from an asynchronous driver (the only difference being how the answer is received). Merge. - Return proper error code after a driver failure. - Auto-detect whether a driver is synchronous or asynchronous. - Remove some code duplication. - Clean up code (coding style, add missing comments, put all select related code together).
		
			
				
	
	
		
			29 lines
		
	
	
		
			856 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			856 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef __VFS_DMAP_H__
 | |
| #define __VFS_DMAP_H__
 | |
| 
 | |
| /*
 | |
| dmap.h
 | |
| */
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *               	 Device <-> Driver Table  			     *
 | |
|  *===========================================================================*/
 | |
| 
 | |
| /* Device table.  This table is indexed by major device number.  It provides
 | |
|  * the link between major device numbers and the routines that process them.
 | |
|  * The table can be update dynamically. The field 'dmap_flags' describe an 
 | |
|  * entry's current status and determines what control options are possible. 
 | |
|  */
 | |
| 
 | |
| extern struct dmap {
 | |
|   int _PROTOTYPE ((*dmap_opcl), (int, dev_t, int, int) );
 | |
|   int _PROTOTYPE ((*dmap_io), (int, message *) );
 | |
|   endpoint_t dmap_driver;
 | |
|   char dmap_label[LABEL_MAX];
 | |
|   int dmap_flags;
 | |
|   int dmap_style;
 | |
|   struct filp *dmap_sel_filp;
 | |
| } dmap[];
 | |
| 
 | |
| #endif
 |