85 lines
2.8 KiB
C
85 lines
2.8 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) );
|
||
|
};
|
||
|
|
||
|
#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( 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 */
|