mirror of
https://github.com/ipxe/ipxe
synced 2025-12-25 00:17:57 +03:00
Added a generalised ISA device-probing mechanism.
This commit is contained in:
@@ -2,27 +2,78 @@
|
||||
#define ISA_H
|
||||
|
||||
#include "isa_ids.h"
|
||||
#include "dev.h"
|
||||
|
||||
struct dev;
|
||||
|
||||
struct isa_driver
|
||||
{
|
||||
int type;
|
||||
const char *name;
|
||||
int (*probe)(struct dev *, unsigned short *);
|
||||
unsigned short *ioaddrs;
|
||||
/*
|
||||
* A physical ISA device
|
||||
*
|
||||
*/
|
||||
struct isa_device {
|
||||
char *magic; /* must be first */
|
||||
unsigned int probe_idx;
|
||||
uint16_t ioaddr;
|
||||
int already_tried;
|
||||
};
|
||||
|
||||
#ifndef __HYPERSTONE__
|
||||
#define __isa_driver __attribute__ ((used,__section__(".drivers.isa")))
|
||||
#else
|
||||
#define __isa_driver __attribute__ ((used,__section__(".drivisa")))
|
||||
#endif
|
||||
/*
|
||||
* An individual ISA device, identified by probe address
|
||||
*
|
||||
*/
|
||||
struct isa_probe_addr {
|
||||
uint16_t addr;
|
||||
} __attribute__ (( packed ));
|
||||
|
||||
extern const struct isa_driver isa_drivers[];
|
||||
extern const struct isa_driver isa_drivers_end[];
|
||||
/*
|
||||
* An ISA driver, with a probe address list and a probe_addr method.
|
||||
* probe_addr() should return 1 if a card is physically present,
|
||||
* leaving the other operations (read MAC address etc.) down to the
|
||||
* main probe() routine.
|
||||
*
|
||||
*/
|
||||
struct isa_driver {
|
||||
const char *name;
|
||||
struct isa_probe_addr *probe_addrs;
|
||||
unsigned int addr_count;
|
||||
int ( * probe_addr ) ( uint16_t addr );
|
||||
uint16_t mfg_id;
|
||||
uint16_t prod_id;
|
||||
};
|
||||
|
||||
#define ISA_ROM(IMAGE, DESCRIPTION)
|
||||
/*
|
||||
* Define an ISA driver
|
||||
*
|
||||
*/
|
||||
#define ISA_DRIVER( _name, _probe_addrs, _probe_addr, _mfg_id, _prod_id ) { \
|
||||
.name = _name, \
|
||||
.probe_addrs = _probe_addrs, \
|
||||
.addr_count = sizeof ( _probe_addrs ) / sizeof ( probe_addrs[0] ), \
|
||||
.probe_addr = _probe_addr, \
|
||||
.mfg_id = _mfg_id, \
|
||||
.prod_id = _prod_id, \
|
||||
}
|
||||
|
||||
/*
|
||||
* ISA_ROM is parsed by parserom.pl to generate Makefile rules and
|
||||
* files for rom-o-matic.
|
||||
*
|
||||
*/
|
||||
#define ISA_ROM( IMAGE, DESCRIPTION )
|
||||
|
||||
/*
|
||||
* Functions in isa.c
|
||||
*
|
||||
*/
|
||||
extern int find_isa_device ( struct isa_device *eisa,
|
||||
struct isa_driver *driver );
|
||||
extern int find_isa_boot_device ( struct dev *dev,
|
||||
struct isa_driver *driver );
|
||||
|
||||
/*
|
||||
* config.c defines isa_extra_probe_addrs and isa_extra_probe_addr_count.
|
||||
*
|
||||
*/
|
||||
extern struct isa_probe_addr isa_extra_probe_addrs[];
|
||||
extern unsigned int isa_extra_probe_addr_count;
|
||||
|
||||
#endif /* ISA_H */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user