/*
* $Id: device.h,v 1.1 2007/10/16 08:41:05 init Exp $
*/
#ifndef _SYS_DEVICE_H
#define _SYS_DEVICE_H
#include <sys/types.h>
#define DVNAMELEN 8
struct device {
// char dv_name[DVNAMELEN]; /* device name up to 7 chars */
char *dv_name;
uint8_t dv_minor; /* instance number starting from 0 */
int dv_active; /* is this device active? */
void *dv_devdata; /* device data in driver */
void *dv_aux; /* varios data exposed by device */
struct device *dv_parent; /* parent device; set in attach time */
};
struct driver {
uint32_t dr_ddsize; /* size of xxx_dd (devdata) */
int (*dr_attach)(struct device *self, uint32_t loc, uint8_t flags); /* attach subroutine */
int (*dr_detach)(struct device *self); /* detach subroutine */
// void (*dr_interrupt)(struct device *self); /* intr handler */
};
struct driverinfo {
/*
* Associate actual driver with device name.
*/
char di_dname[DVNAMELEN]; /* device name */
struct driver *di_driverp; /* pointer to driver */
int8_t di_ninstances; /* number of already created devices; for dv_minor */
};
struct attachinfo {
/*
* Attach hint. Describes where to attach particular device.
* "child" at "parent" 0 loc 0x16000000 flags 0x00
*/
char ai_cname[DVNAMELEN]; /* child device name */
char ai_pname[DVNAMELEN]; /* parent device name */
uint8_t ai_pminor; /* parent minor */
uint32_t ai_locator; /* location on parent (0 - default) */
// uint8_t ai_intrno; /* interrupt line */
uint8_t ai_flags; /* flags passed to dr_attach() */
};
#define ATTACH(x) devlist[x].dv_parent
#define AT =
#define PARENT(y) &devlist[y]
#endif /* _SYS_DEVICE_H */