int socket_srv;
int socket_tmp;
- int port;
+ uint32_t port;
int addr;
/* The real voltage which is on inputs od A/D convertors.
int instance = 0; // Global variable shared between multiple mf624 devices
-int16_t volts_to_adinternal(double volt)
+static int16_t volts_to_adinternal(double volt)
{
if (volt > 9.99) {
volt = 9.99;
return ((int16_t) ((volt*0x8000)/10))>>2;
}
-double dacinternal_to_volts(int16_t dacinternal)
+static double dacinternal_to_volts(int16_t dacinternal)
{
return ((((double)dacinternal)/0x4000)*20.0 - 10.0);
}
//-----------------------------------------------------------------------------
/* Initialize register values due to MF624 manual */
-void mf624_init_registers(mf624_state_t* s)
+static void mf624_init_registers(mf624_state_t* s)
{
#define INTCSR_default_value 0x000300
#define GPIOC_default_value 0x006C0 | (0x10 << 21) | (2 << 25)
}
/* After some widget's value is changed, new value is send via socket to Qemu */
-void socket_write(mf624_state_t *s, const char* reg, double val)
+static void socket_write(mf624_state_t *s, const char* reg, double val)
{
int status;
char write_buffer[256];
}
#define STRING_BUFF_SIZE 256
-void socket_read(mf624_state_t* dev)
+static void socket_read(mf624_state_t* dev)
{
// For parsing read instructions
char reg[STRING_BUFF_SIZE+1];
dev->real_world_AD7 = volts_to_adinternal(val);
}
else {
- printf("reg = %s; val = %d\n", reg, val);
+ printf("reg = %s; val = %f\n", reg, val);
}
}
}
}
-void* init_socket(void* ptr)
+static void* init_socket(void* ptr)
{
struct sockaddr_in addr_client;
struct sockaddr_in addr_srv;
//-----------------------------------------------------------------------------
-void mf624_BAR0_write32(void *opaque, target_phys_addr_t addr, uint32_t value)
+static void mf624_BAR0_write32(void *opaque, target_phys_addr_t addr, uint32_t value)
{
mf624_state_t *s = opaque;
}
-uint32_t mf624_BAR0_read32(void *opaque, target_phys_addr_t addr)
+static uint32_t mf624_BAR0_read32(void *opaque, target_phys_addr_t addr)
{
mf624_state_t *s = opaque;
}
-uint32_t mf624_BAR2_read16(void *opaque, target_phys_addr_t addr)
+static uint32_t mf624_BAR2_read16(void *opaque, target_phys_addr_t addr)
{
int i;
int ADDATA_val = 0xFFFF;
}
-void mf624_BAR2_write16(void *opaque, target_phys_addr_t addr, uint32_t value)
+static void mf624_BAR2_write16(void *opaque, target_phys_addr_t addr, uint32_t value)
{
mf624_state_t *s = opaque;
}
-void mf624_BAR4_write32(void *opaque, target_phys_addr_t addr, uint32_t value)
+static void mf624_BAR4_write32(void *opaque, target_phys_addr_t addr, uint32_t value)
{
printf("mf624_BAR4_write32(): addr = %d; value = %d\n", addr, value);
}
-uint32_t mf624_BAR4_read32(void *opaque, target_phys_addr_t addr)
+static uint32_t mf624_BAR4_read32(void *opaque, target_phys_addr_t addr)
{
printf("mf624_BAR4_read32(): addr = %d\n", addr);
return 0x0;
}
+#define DEFAULT_PORT 55555
static int pci_mf624_init(PCIDevice *pci_dev)
{
mf624_state_t *s = DO_UPCAST(mf624_state_t, dev, pci_dev); //alocation of mf624_state_t
printf("MF624 Loaded.\n");
- s->port = 55555 + instance; // Default port
- instance ++;
+ if (s->port == DEFAULT_PORT) {
+ s->port += instance; // Each instance of the same device should have another port number
+ instance ++;
+ }
//Set all internal registers to default values
mf624_init_registers(s);
return 0;
}
+
static PCIDeviceInfo mf624_info = {
.qdev.name = "mf624",
.qdev.size = sizeof(mf624_state_t),
.init = pci_mf624_init,
- .exit = pci_mf624_exit
+ .exit = pci_mf624_exit,
+ .qdev.props = (Property[]) {
+ DEFINE_PROP_UINT32("port", mf624_state_t, port, DEFAULT_PORT),
+ DEFINE_PROP_END_OF_LIST(),
+ }
};
static void mf624_register_device(void)