blob: 63027a5a48b06ea92ae71df475564083cdf5a35b [file] [log] [blame]
#ifndef ISA_H
#define ISA_H
FILE_LICENCE ( GPL2_OR_LATER );
#include <stdint.h>
#include <gpxe/isa_ids.h>
#include <gpxe/device.h>
#include <gpxe/tables.h>
/** An ISA device */
struct isa_device {
/** Generic device */
struct device dev;
/** I/O address */
uint16_t ioaddr;
/** Driver for this device */
struct isa_driver *driver;
/** Driver-private data
*
* Use isa_set_drvdata() and isa_get_drvdata() to access
* this field.
*/
void *priv;
/** Driver name */
const char *driver_name;
};
/*
* An individual ISA device, identified by probe address
*
*/
typedef uint16_t isa_probe_addr_t;
/** An ISA driver */
struct isa_driver {
/** Name */
const char *name;
/** Probe address list */
isa_probe_addr_t *probe_addrs;
/** Number of entries in probe address list */
unsigned int addr_count;
/** Manufacturer ID to be assumed for this device */
uint16_t vendor_id;
/** Product ID to be assumed for this device */
uint16_t prod_id;
/**
* Probe device
*
* @v isa ISA device
* @v id Matching entry in ID table
* @ret rc Return status code
*/
int ( * probe ) ( struct isa_device *isa );
/**
* Remove device
*
* @v isa ISA device
*/
void ( * remove ) ( struct isa_device *isa );
};
/** ISA driver table */
#define ISA_DRIVERS __table ( struct isa_driver, "isa_drivers" )
/** Declare an ISA driver */
#define __isa_driver __table_entry ( ISA_DRIVERS, 01 )
/**
* Set ISA driver-private data
*
* @v isa ISA device
* @v priv Private data
*/
static inline void isa_set_drvdata ( struct isa_device *isa, void *priv ) {
isa->priv = priv;
}
/**
* Get ISA driver-private data
*
* @v isa ISA device
* @ret priv Private data
*/
static inline void * isa_get_drvdata ( struct isa_device *isa ) {
return isa->priv;
}
/*
* ISA_ROM is parsed by parserom.pl to generate Makefile rules and
* files for rom-o-matic.
*
*/
#define ISA_ROM( IMAGE, DESCRIPTION )
#endif /* ISA_H */