-Move libdriver to lib/ -Install all boot image services on filesystem to aid restartability
		
			
				
	
	
		
			88 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Types and constants shared between the generic and device dependent
 | 
						|
 * device driver code.
 | 
						|
 */
 | 
						|
 | 
						|
#define _POSIX_SOURCE      1	/* tell headers to include POSIX stuff */
 | 
						|
#define _MINIX             1	/* tell headers to include MINIX stuff */
 | 
						|
#define _SYSTEM		   1	/* get negative error number in <errno.h> */
 | 
						|
 | 
						|
/* The following are so basic, all the *.c files get them automatically. */
 | 
						|
#include <minix/config.h>	/* MUST be first */
 | 
						|
#include <ansi.h>		/* MUST be second */
 | 
						|
#include <minix/type.h>
 | 
						|
#include <minix/ipc.h>
 | 
						|
#include <minix/com.h>
 | 
						|
#include <minix/callnr.h>
 | 
						|
#include <sys/types.h>
 | 
						|
#include <minix/const.h>
 | 
						|
#include <minix/syslib.h>
 | 
						|
#include <minix/sysutil.h>
 | 
						|
 | 
						|
#include <string.h>
 | 
						|
#include <limits.h>
 | 
						|
#include <stddef.h>
 | 
						|
#include <errno.h>
 | 
						|
 | 
						|
#include <minix/partition.h>
 | 
						|
#include <minix/u64.h>
 | 
						|
 | 
						|
/* Info about and entry points into the device dependent code. */
 | 
						|
struct driver {
 | 
						|
  _PROTOTYPE( char *(*dr_name), (void) );
 | 
						|
  _PROTOTYPE( int (*dr_open), (struct driver *dp, message *m_ptr) );
 | 
						|
  _PROTOTYPE( int (*dr_close), (struct driver *dp, message *m_ptr) );
 | 
						|
  _PROTOTYPE( int (*dr_ioctl), (struct driver *dp, message *m_ptr) );
 | 
						|
  _PROTOTYPE( struct device *(*dr_prepare), (int device) );
 | 
						|
  _PROTOTYPE( int (*dr_transfer), (int proc_nr, int opcode, u64_t position,
 | 
						|
					iovec_t *iov, unsigned nr_req) );
 | 
						|
  _PROTOTYPE( void (*dr_cleanup), (void) );
 | 
						|
  _PROTOTYPE( void (*dr_geometry), (struct partition *entry) );
 | 
						|
  _PROTOTYPE( void (*dr_alarm), (struct driver *dp, message *m_ptr) );
 | 
						|
  _PROTOTYPE( int (*dr_cancel), (struct driver *dp, message *m_ptr) );
 | 
						|
  _PROTOTYPE( int (*dr_select), (struct driver *dp, message *m_ptr) );
 | 
						|
  _PROTOTYPE( int (*dr_other), (struct driver *dp, message *m_ptr) );
 | 
						|
  _PROTOTYPE( int (*dr_hw_int), (struct driver *dp, message *m_ptr) );
 | 
						|
};
 | 
						|
 | 
						|
/* Base and size of a partition in bytes. */
 | 
						|
struct device {
 | 
						|
  u64_t dv_base;
 | 
						|
  u64_t dv_size;
 | 
						|
};
 | 
						|
 | 
						|
#define NIL_DEV		((struct device *) 0)
 | 
						|
 | 
						|
#define DRIVER_STD	0	/* Use the standard reply protocol */
 | 
						|
#define DRIVER_ASYN	1	/* Use the new asynchronous protocol */
 | 
						|
 | 
						|
/* Functions defined by driver.c: */
 | 
						|
_PROTOTYPE( void driver_task, (struct driver *dr, int type) );
 | 
						|
_PROTOTYPE( char *no_name, (void) );
 | 
						|
_PROTOTYPE( int do_nop, (struct driver *dp, message *m_ptr) );
 | 
						|
_PROTOTYPE( struct device *nop_prepare, (int device) );
 | 
						|
_PROTOTYPE( void nop_cleanup, (void) );
 | 
						|
_PROTOTYPE( void nop_task, (void) );
 | 
						|
_PROTOTYPE( void nop_alarm, (struct driver *dp, message *m_ptr) );
 | 
						|
_PROTOTYPE( int nop_cancel, (struct driver *dp, message *m_ptr) );
 | 
						|
_PROTOTYPE( int nop_select, (struct driver *dp, message *m_ptr) );
 | 
						|
_PROTOTYPE( int do_diocntl, (struct driver *dp, message *m_ptr) );
 | 
						|
_PROTOTYPE( int nop_ioctl, (struct driver *dp, message *m_ptr) );
 | 
						|
_PROTOTYPE( int mq_queue, (message *m_ptr) );
 | 
						|
_PROTOTYPE( void init_buffer, (void) );
 | 
						|
 | 
						|
/* Parameters for the disk drive. */
 | 
						|
#define SECTOR_SIZE      512	/* physical sector size in bytes */
 | 
						|
#define SECTOR_SHIFT       9	/* for division */
 | 
						|
#define SECTOR_MASK      511	/* and remainder */
 | 
						|
 | 
						|
/* Size of the DMA buffer buffer in bytes. */
 | 
						|
#define USE_EXTRA_DMA_BUF  0	/* usually not needed */
 | 
						|
#define DMA_BUF_SIZE	(DMA_SECTORS * SECTOR_SIZE)
 | 
						|
 | 
						|
#if (CHIP == INTEL)
 | 
						|
extern u8_t *tmp_buf;			/* the DMA buffer */
 | 
						|
#else
 | 
						|
extern u8_t tmp_buf[];			/* the DMA buffer */
 | 
						|
#endif
 | 
						|
extern phys_bytes tmp_phys;		/* phys address of DMA buffer */
 |