source: branches/minix3-book/drivers/libdriver/driver.h@ 9

Last change on this file since 9 was 4, checked in by Mattia Monga, 14 years ago

Importazione sorgenti libro

File size: 3.3 KB
Line 
1/* Types and constants shared between the generic and device dependent
2 * device driver code.
3 */
4
5#define _POSIX_SOURCE 1 /* tell headers to include POSIX stuff */
6#define _MINIX 1 /* tell headers to include MINIX stuff */
7#define _SYSTEM 1 /* get negative error number in <errno.h> */
8
9/* The following are so basic, all the *.c files get them automatically. */
10#include <minix/config.h> /* MUST be first */
11#include <ansi.h> /* MUST be second */
12#include <minix/type.h>
13#include <minix/ipc.h>
14#include <minix/com.h>
15#include <minix/callnr.h>
16#include <sys/types.h>
17#include <minix/const.h>
18#include <minix/syslib.h>
19#include <minix/sysutil.h>
20
21#include <string.h>
22#include <limits.h>
23#include <stddef.h>
24#include <errno.h>
25
26#include <minix/partition.h>
27#include <minix/u64.h>
28
29/* Info about and entry points into the device dependent code. */
30struct driver {
31 _PROTOTYPE( char *(*dr_name), (void) );
32 _PROTOTYPE( int (*dr_open), (struct driver *dp, message *m_ptr) );
33 _PROTOTYPE( int (*dr_close), (struct driver *dp, message *m_ptr) );
34 _PROTOTYPE( int (*dr_ioctl), (struct driver *dp, message *m_ptr) );
35 _PROTOTYPE( struct device *(*dr_prepare), (int device) );
36 _PROTOTYPE( int (*dr_transfer), (int proc_nr, int opcode, off_t position,
37 iovec_t *iov, unsigned nr_req) );
38 _PROTOTYPE( void (*dr_cleanup), (void) );
39 _PROTOTYPE( void (*dr_geometry), (struct partition *entry) );
40 _PROTOTYPE( void (*dr_signal), (struct driver *dp, message *m_ptr) );
41 _PROTOTYPE( void (*dr_alarm), (struct driver *dp, message *m_ptr) );
42 _PROTOTYPE( int (*dr_cancel), (struct driver *dp, message *m_ptr) );
43 _PROTOTYPE( int (*dr_select), (struct driver *dp, message *m_ptr) );
44 _PROTOTYPE( int (*dr_other), (struct driver *dp, message *m_ptr) );
45 _PROTOTYPE( int (*dr_hw_int), (struct driver *dp, message *m_ptr) );
46};
47
48#if (CHIP == INTEL)
49
50/* Number of bytes you can DMA before hitting a 64K boundary: */
51#define dma_bytes_left(phys) \
52 ((unsigned) (sizeof(int) == 2 ? 0 : 0x10000) - (unsigned) ((phys) & 0xFFFF))
53
54#endif /* CHIP == INTEL */
55
56/* Base and size of a partition in bytes. */
57struct device {
58 u64_t dv_base;
59 u64_t dv_size;
60};
61
62#define NIL_DEV ((struct device *) 0)
63
64/* Functions defined by driver.c: */
65_PROTOTYPE( void driver_task, (struct driver *dr) );
66_PROTOTYPE( char *no_name, (void) );
67_PROTOTYPE( int do_nop, (struct driver *dp, message *m_ptr) );
68_PROTOTYPE( struct device *nop_prepare, (int device) );
69_PROTOTYPE( void nop_cleanup, (void) );
70_PROTOTYPE( void nop_task, (void) );
71_PROTOTYPE( void nop_signal, (struct driver *dp, message *m_ptr) );
72_PROTOTYPE( void nop_alarm, (struct driver *dp, message *m_ptr) );
73_PROTOTYPE( int nop_cancel, (struct driver *dp, message *m_ptr) );
74_PROTOTYPE( int nop_select, (struct driver *dp, message *m_ptr) );
75_PROTOTYPE( int do_diocntl, (struct driver *dp, message *m_ptr) );
76
77/* Parameters for the disk drive. */
78#define SECTOR_SIZE 512 /* physical sector size in bytes */
79#define SECTOR_SHIFT 9 /* for division */
80#define SECTOR_MASK 511 /* and remainder */
81
82/* Size of the DMA buffer buffer in bytes. */
83#define USE_EXTRA_DMA_BUF 0 /* usually not needed */
84#define DMA_BUF_SIZE (DMA_SECTORS * SECTOR_SIZE)
85
86#if (CHIP == INTEL)
87extern u8_t *tmp_buf; /* the DMA buffer */
88#else
89extern u8_t tmp_buf[]; /* the DMA buffer */
90#endif
91extern phys_bytes tmp_phys; /* phys address of DMA buffer */
Note: See TracBrowser for help on using the repository browser.