#ifndef H_DEVICES
#define H_DEVICES

enum driverTypes { DRIVER_SCSI = 0, DRIVER_NET = 1, DRIVER_CDROM = 2,
                  DRIVER_PCMCIA = 3, DRIVER_FS = 4,
                  DRIVER_PREREQ = 4, DRIVER_OTHER = 1000};
enum driverMinor { DRIVER_MINOR_NONE = 0, DRIVER_MINOR_ETHERNET,
                  DRIVER_MINOR_PLIP, DRIVER_MINOR_TR };

struct driver;

#define PERSIST_ALIAS   (1 << 0)
#define PERSIST_OPTIONS (1 << 1)

struct driversLoaded {
   struct driversLoaded * next;
   char ** argv;
   int argc;
   char * module;
   enum driverTypes type;
   enum driverMinor minor;
   int persistFlags;
} ;

typedef int (*driverOkayFn)(struct driver * dev);

int devMakeInode(char * name, char * path);
void devRemoveInode(char * path);
int loadDeviceDriver(enum driverTypes type, struct driversLoaded ** drlist);
int removeDeviceDriver(enum driverTypes type, struct driversLoaded ** drlist);
int writeModuleConf(char * prefix, struct driversLoaded * dl, int append);
int readModuleConf(char * prefix, struct driversLoaded ** drlist);
int readModuleConfPersist(char * prefix, struct driversLoaded * drlist);
int loadModule(char * modName, enum driverTypes type, enum driverMinor minor,
              struct driversLoaded ** drlist);
int removeModule(char * module);
int setupCDdevice(char ** cddev, struct driversLoaded ** dl);
int removeCDmodule(struct driversLoaded ** dl);

/* hack -- plip is broken */
char * getPlipDeviceName(void);

#ifndef __sparc__
int findAtapi(char ** cddev);
#endif
int findSCSIcdrom(char ** cddev);

#endif