in bridges/vme_fake.c [251:333]
static int fake_master_set(struct vme_master_resource *image, int enabled,
unsigned long long vme_base, unsigned long long size,
u32 aspace, u32 cycle, u32 dwidth)
{
int retval = 0;
unsigned int i;
struct vme_bridge *fake_bridge;
struct fake_driver *bridge;
fake_bridge = image->parent;
bridge = fake_bridge->driver_priv;
/* Verify input data */
if (vme_base & 0xFFFF) {
pr_err("Invalid VME Window alignment\n");
retval = -EINVAL;
goto err_window;
}
if (size & 0xFFFF) {
pr_err("Invalid size alignment\n");
retval = -EINVAL;
goto err_window;
}
if ((size == 0) && (enabled != 0)) {
pr_err("Size must be non-zero for enabled windows\n");
retval = -EINVAL;
goto err_window;
}
/* Setup data width */
switch (dwidth) {
case VME_D8:
case VME_D16:
case VME_D32:
break;
default:
pr_err("Invalid data width\n");
retval = -EINVAL;
goto err_dwidth;
}
/* Setup address space */
switch (aspace) {
case VME_A16:
case VME_A24:
case VME_A32:
case VME_A64:
case VME_CRCSR:
case VME_USER1:
case VME_USER2:
case VME_USER3:
case VME_USER4:
break;
default:
pr_err("Invalid address space\n");
retval = -EINVAL;
goto err_aspace;
}
spin_lock(&image->lock);
i = image->number;
bridge->masters[i].enabled = enabled;
bridge->masters[i].vme_base = vme_base;
bridge->masters[i].size = size;
bridge->masters[i].aspace = aspace;
bridge->masters[i].cycle = cycle;
bridge->masters[i].dwidth = dwidth;
spin_unlock(&image->lock);
return 0;
err_aspace:
err_dwidth:
err_window:
return retval;
}