=================================================================== RCS file: /cvs/funnyos/sys/bus.h,v retrieving revision 1.1.1.1 retrieving revision 1.7 diff -u -r1.1.1.1 -r1.7 --- funnyos/sys/bus.h 2007/10/16 09:41:05 1.1.1.1 +++ funnyos/sys/bus.h 2007/10/25 20:58:47 1.7 @@ -1,26 +1,32 @@ /* - * $Id: bus.h,v 1.1.1.1 2007/10/16 08:41:05 init Exp $ + * $Id: bus.h,v 1.7 2007/10/25 19:58:47 init Exp $ */ #ifndef _SYS_BUS_H #define _SYS_BUS_H -#include +#include /* - * Bus operations. + * Each bus (bus driver instance) has its own bus_handle. + * Device drivers attached to bus aquire bus_handle to perform all bus i/o. */ -struct busops { - uint8_t (*bus_read_1)(struct device *devp, uint32_t addr); - uint16_t (*bus_read_2)(struct device *devp, uint32_t addr); - uint32_t (*bus_read_4)(struct device *devp, uint32_t addr); - int (*bus_write_1)(struct device *devp, uint32_t addr, uint8_t data); - int (*bus_write_2)(struct device *devp, uint32_t addr, uint16_t data); - int (*bus_write_4)(struct device *devp, uint32_t addr, uint32_t data); +struct bus_handle { + void *bh_ownerdd; /* devdata of device that owns this handler XXX kill that it is ugly */ + uint8_t (*bus_read_1)(void *ddp, uint32_t addr); + uint16_t (*bus_read_2)(void *ddp, uint32_t addr); + uint32_t (*bus_read_4)(void *ddp, uint32_t addr); + int (*bus_write_1)(void *ddp, uint32_t addr, uint8_t data); + int (*bus_write_2)(void *ddp, uint32_t addr, uint16_t data); + int (*bus_write_4)(void *ddp, uint32_t addr, uint32_t data); /* XXX DMA related stuff */ }; -#define bus_read_1(dev, addr) ((struct busops *)dev->dv_devdata)->bus_read_1(dev, addr) -#define bus_write_1(dev, addr, data) ((struct busops *)dev->dv_devdata)->bus_write_1(dev, addr, data) +uint8_t bus_read_1(struct bus_handle *bhp, uint32_t addr); +uint16_t bus_read_2(struct bus_handle *bhp, uint32_t addr); +uint32_t bus_read_4(struct bus_handle *bhp, uint32_t addr); +int bus_write_1(struct bus_handle *bhp, uint32_t addr, uint8_t data); +int bus_write_2(struct bus_handle *bhp, uint32_t addr, uint16_t data); +int bus_write_4(struct bus_handle *bhp, uint32_t addr, uint32_t data); #endif /* _SYS_BUS_H */