in bridges/vme_fake.c [856:897]
static int fake_lm_set(struct vme_lm_resource *lm, unsigned long long lm_base,
u32 aspace, u32 cycle)
{
int i;
struct vme_bridge *fake_bridge;
struct fake_driver *bridge;
fake_bridge = lm->parent;
bridge = fake_bridge->driver_priv;
mutex_lock(&lm->mtx);
/* If we already have a callback attached, we can't move it! */
for (i = 0; i < lm->monitors; i++) {
if (bridge->lm_callback[i]) {
mutex_unlock(&lm->mtx);
pr_err("Location monitor callback attached, can't reset\n");
return -EBUSY;
}
}
switch (aspace) {
case VME_A16:
case VME_A24:
case VME_A32:
case VME_A64:
break;
default:
mutex_unlock(&lm->mtx);
pr_err("Invalid address space\n");
return -EINVAL;
}
bridge->lm_base = lm_base;
bridge->lm_aspace = aspace;
bridge->lm_cycle = cycle;
mutex_unlock(&lm->mtx);
return 0;
}