80 lines
2.5 KiB
C
80 lines
2.5 KiB
C
|
/*
|
||
|
* ddi.h Define the structure for linking in I/O drivers into the
|
||
|
* operating system kernel. This method is currently only
|
||
|
* used by NET layer drivers, but it will be expanded into
|
||
|
* a link methos for ALL kernel-resident device drivers.
|
||
|
*
|
||
|
* Version: @(#)ddi.h 1.0.2 04/22/93
|
||
|
*
|
||
|
* Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
|
||
|
*/
|
||
|
#ifndef _LINUX_DDI_H
|
||
|
#define _LINUX_DDI_H
|
||
|
|
||
|
|
||
|
/* DDI control block flags. */
|
||
|
#define DDI_FREADY 0x10000000 /* device is initialized */
|
||
|
#define DDI_FPRESENT 0x20000000 /* device hardware is present */
|
||
|
#define DDI_FBLKDEV 0x00000001 /* device has a BLK spec. file */
|
||
|
#define DDI_FCHRDEV 0x00000002 /* device has a CHR spec. file */
|
||
|
|
||
|
/* Various constants. */
|
||
|
#define DDI_MAXNAME 16 /* length of a DDI ID string */
|
||
|
|
||
|
|
||
|
/* This structure is used to set up a DDI driver. */
|
||
|
struct ddconf {
|
||
|
int ioaddr; /* main I/O (port) address */
|
||
|
int ioaux; /* auxiliary I/O (HD, AST) */
|
||
|
int irq; /* IRQ channel */
|
||
|
int dma; /* DMA channel to use */
|
||
|
unsigned long memsize; /* size of onboard memory */
|
||
|
unsigned long memaddr; /* base address of memory */
|
||
|
};
|
||
|
|
||
|
|
||
|
/* The DDI device control block. */
|
||
|
struct ddi_device {
|
||
|
char *title; /* title of the driver */
|
||
|
char name[DDI_MAXNAME]; /* unit name of the I/O driver */
|
||
|
short int unit; /* unit number of this driver */
|
||
|
short int nunits; /* number of units in driver */
|
||
|
int (*init)(struct ddi_device *); /* initialization func */
|
||
|
int (*handler)(int, ...); /* command handler */
|
||
|
short int major; /* driver major dev number */
|
||
|
short int minor; /* driver minor dev number */
|
||
|
unsigned long flags; /* various flags */
|
||
|
struct ddconf config; /* driver HW setup */
|
||
|
};
|
||
|
|
||
|
|
||
|
/* This structure is used to set up networking protocols. */
|
||
|
struct ddi_proto {
|
||
|
char *name; /* protocol name */
|
||
|
void (*init)(struct ddi_proto *); /* initialization func */
|
||
|
};
|
||
|
|
||
|
|
||
|
/* This structure is used to link a STREAMS interface. */
|
||
|
struct iflink {
|
||
|
char id[DDI_MAXNAME]; /* DDI ID string */
|
||
|
char stream[DDI_MAXNAME]; /* STREAMS interface name */
|
||
|
int family; /* address (protocol) family */
|
||
|
unsigned int flags; /* any flags needed (unused) */
|
||
|
};
|
||
|
|
||
|
|
||
|
/* DDI control requests. */
|
||
|
#define DDIOCSDBG 0x9000 /* set DDI debug level */
|
||
|
#define DDIOCGNAME 0x9001 /* get DDI ID name */
|
||
|
#define DDIOCGCONF 0x9002 /* get DDI HW config */
|
||
|
#define DDIOCSCONF 0x9003 /* set DDI HW config */
|
||
|
|
||
|
|
||
|
/* DDI global functions. */
|
||
|
extern void ddi_init(void);
|
||
|
extern struct ddi_device *ddi_map(const char *id);
|
||
|
|
||
|
|
||
|
#endif /* _LINUX_DDI_H */
|