blob: a136b2a84bbd71224d0ce5ec8f83038ae013d84f [file] [log] [blame]
/*
* 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 */