From 89376b7141edb6f927fb940c27391cda6e67c785 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 19 Feb 2009 19:55:40 +0000 Subject: Initial import. --- bsd_eth_drivers/libbsdport/devicet.h | 125 +++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 bsd_eth_drivers/libbsdport/devicet.h (limited to 'bsd_eth_drivers/libbsdport/devicet.h') diff --git a/bsd_eth_drivers/libbsdport/devicet.h b/bsd_eth_drivers/libbsdport/devicet.h new file mode 100644 index 0000000..bbb4e71 --- /dev/null +++ b/bsd_eth_drivers/libbsdport/devicet.h @@ -0,0 +1,125 @@ +#ifndef RTEMS_NETDEV_T_DECL_H +#define RTEMS_NETDEV_T_DECL_H + +#include +#include +#include +#include + +#include + +#if RTEMS_REV_AT_LEAST(4,8,99) +#include +#else +#include +#endif + +#include + +/* se we can generate a non-inlined version somewhere */ +#ifndef DEVICET_EXTERN_INLINE +#define DEVICET_EXTERN_INLINE extern inline +#endif + +/* unused for now: */ +typedef int devclass_t; + +typedef struct device *device_t; + +typedef struct _pcidev_t { + unsigned short bus; + unsigned char dev; + unsigned char fun; +} pcidev_t; + +#define DEV_TYPE_PCI 1 + +typedef int device_probe_t (device_t); +typedef int device_attach_t (device_t); +typedef int device_detach_t (device_t); +typedef int device_resume_t (device_t); +typedef int device_suspend_t (device_t); + +typedef struct device_methods { + int (*probe ) (device_t); + int (*attach) (device_t); + void (*shutdown) (device_t); + int (*detach) (device_t); + int (*irq_check_dis) (device_t); + void (*irq_en) (device_t); +} device_method_t; + +struct driver { + const char *name; + device_method_t *methods; + int type; + int softc_size; +}; + +#define DEVICE_SOFTC_ALIGNMENT 16 + +struct device { + union { + pcidev_t pci; + } bushdr; + int type; + STAILQ_ENTRY(device) list; + const char *name; + char nameunit[16]; /* NEVER use knowledge about the size of this -- we may change it */ + int unit; + char *desc; + driver_t *drv; + int attached; + void *rawmem; /* back pointer */ + struct rtems_bsdnet_ifconfig *ifconfig; + char softc[] __attribute__ ((aligned(DEVICE_SOFTC_ALIGNMENT), may_alias)); + /* a pointer to back to the device is installed past the 'softc' */ +}; + +static inline device_t +rtems_softc2dev(void *softc) +{ +uintptr_t diff = (uintptr_t)&((device_t)(0))->softc - (uintptr_t)(device_t)(0); + return (device_t)((uintptr_t)softc - diff); +} + +#define device_set_desc_copy(dev, nm) \ + do { real_libc_free((dev)->desc); (dev)->desc = strdup((nm)); } while (0) + +#define device_set_desc(dev, nm) device_set_desc_copy(dev, nm) + +static inline const char * +device_get_nameunit(device_t dev) +{ + return dev->nameunit; +} + +static inline const char * +device_get_name(device_t dev) +{ + return dev->name; +} + +static inline int +device_get_unit(device_t dev) +{ + return dev->unit; +} + +DEVICET_EXTERN_INLINE void * +device_get_softc(device_t dev) +{ + return dev->softc; +} + +#define device_delete_child(dev,bus) do {} while (0) + +static inline int +device_is_attached(device_t dev) +{ + return dev->attached; +} + +int device_printf(device_t dev, const char *fmt, ...); + +#endif -- cgit v1.2.3