- 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).
28 lines
856 B
C
28 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
|