33 #include "avrmalloc.h" 62 vdev_new (
char *name, VDevFP_Read rd, VDevFP_Write wr, VDevFP_Reset reset,
63 VDevFP_AddAddr add_addr)
83 avr_warning (
"Default AddAddr called [addr=0x%x; '%s']\n", addr, name);
90 VDevFP_Reset reset, VDevFP_AddAddr add_addr)
100 dev->add_addr = add_addr;
122 vdev_name_cmp (AvrClass *c1, AvrClass *c2)
124 return strcmp (((VDevice *)c1)->name, (
char *)c2);
142 vdev_addr_cmp (AvrClass *c1, AvrClass *c2)
144 VDevice *d1 = (VDevice *)c1;
145 int addr = *(
int *)c2;
148 return (addr - d1->base);
150 if (addr >= (d1->base + d1->size))
152 return (1 + addr - (d1->base + d1->size));
163 return dev->read (dev, addr);
170 dev->write (dev, addr, val);
184 dev->core = (AvrClass *)core;
195 vdev_add_addr (VDevice *dev,
int addr,
char *name,
int rel_addr,
void *data)
199 dev->add_addr (dev, addr, name, rel_addr, data);
203 avr_warning (
"attempt to add addr to vdev with no add_addr() method: " 204 "%s [0x%04x]\n", name, addr);
211 vdev_get_base (VDevice *dev)
221 vdev_get_size (VDevice *dev)
230 vdev_get_name (VDevice *dev)
void vdev_add_addr(VDevice *dev, int addr, char *name, int rel_addr, void *data)
Inform the vdevice that it needs to handle another address.
#define avr_new0(type, count)
Macro for allocating memory and initializing it to zero.
void vdev_def_AddAddr(VDevice *dev, int addr, char *name, int related_addr, void *data)
Default AddAddr method.
void vdev_destroy(void *dev)
Destructor for a VDevice.
AvrClass * vdev_get_core(VDevice *dev)
Get the core field.
void class_destroy(void *klass)
Releases resources allocated by class's <klass>_new() function.
#define avr_warning(fmt, args...)
Print a warning message to stderr.
void vdev_construct(VDevice *dev, VDevFP_Read rd, VDevFP_Write wr, VDevFP_Reset reset, VDevFP_AddAddr add_addr)
Constructor for a VDevice.
#define avr_error(fmt, args...)
Print an error message to stderr and terminate program.
VDevice * vdev_new(char *name, VDevFP_Read rd, VDevFP_Write wr, VDevFP_Reset reset, VDevFP_AddAddr add_addr)
Create a new VDevice.
uint8_t vdev_read(VDevice *dev, int addr)
Reads the device's value in the register at addr.
void class_overload_destroy(AvrClass *klass, AvrClassFP_Destroy destroy)
Overload the default destroy method.
void class_construct(AvrClass *klass)
Initializes the AvrClass data structure.
void vdev_set_core(VDevice *dev, AvrClass *core)
Set the core field.
void vdev_reset(VDevice *dev)
Resets a device.
void vdev_write(VDevice *dev, int addr, uint8_t val)
Writes an value to the register at addr.