 640eb73ca2
			
		
	
	
		640eb73ca2
		
	
	
	
	
		
			
			Added some fields in the generic device table to support this driver using libdriver. Updated other drivers to fill these fields with nops and NULLs.
		
			
				
	
	
		
			91 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.3 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/com.h>
 | |
| #include <minix/callnr.h>
 | |
| #include <sys/types.h>
 | |
| #include <minix/const.h>
 | |
| #include <minix/syslib.h>
 | |
| #include <minix/utils.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, off_t position,
 | |
| 					iovec_t *iov, unsigned nr_req) );
 | |
|   _PROTOTYPE( void (*dr_cleanup), (void) );
 | |
|   _PROTOTYPE( void (*dr_geometry), (struct partition *entry) );
 | |
|   _PROTOTYPE( void (*dr_stop), (struct driver *dp) );
 | |
|   _PROTOTYPE( void (*dr_alarm), (struct driver *dp) );
 | |
|   _PROTOTYPE( void (*dr_fkey), (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) );
 | |
| };
 | |
| 
 | |
| #if (CHIP == INTEL)
 | |
| 
 | |
| /* Number of bytes you can DMA before hitting a 64K boundary: */
 | |
| #define dma_bytes_left(phys)    \
 | |
|    ((unsigned) (sizeof(int) == 2 ? 0 : 0x10000) - (unsigned) ((phys) & 0xFFFF))
 | |
| 
 | |
| #endif /* CHIP == INTEL */
 | |
| 
 | |
| /* Base and size of a partition in bytes. */
 | |
| struct device {
 | |
|   u64_t dv_base;
 | |
|   u64_t dv_size;
 | |
| };
 | |
| 
 | |
| #define NIL_DEV		((struct device *) 0)
 | |
| 
 | |
| /* Functions defined by driver.c: */
 | |
| _PROTOTYPE( void driver_task, (struct driver *dr) );
 | |
| _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_stop, (struct driver *dp) );
 | |
| _PROTOTYPE( void nop_alarm, (struct driver *dp) );
 | |
| _PROTOTYPE( void nop_fkey, (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) );
 | |
| 
 | |
| /* 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 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 */
 |