srcimp
struct srcimp *srcimp = NULL;
srcimp = atc->srcimps[i];
srcimp->ops->unmap(srcimp);
(struct srcimp **)&atc->srcimps[i]);
struct src **srcs, struct srcimp **srcimps)
struct srcimp *srcimp;
srcimp = srcimps[i];
srcimp->ops->map(srcimp, src, rscs[i]);
(struct srcimp **)&atc->srcimps[2]);
(struct srcimp **)&atc->srcimps[4]);
(struct srcimp **)&atc->srcimps[0]);
struct srcimp *srcimp;
srcimp = apcm->srcimps[i];
srcimp->ops->unmap(srcimp);
srcimp_mgr->put_srcimp(srcimp_mgr, srcimp);
struct srcimp *srcimp;
err = srcimp_mgr->get_srcimp(srcimp_mgr, &srcimp_dsc, &srcimp);
apcm->srcimps[i] = srcimp;
struct srcimp *srcimp;
srcimp = apcm->srcimps[imp_base+i];
srcimp->ops->map(srcimp, src, out_ports[i%multi]);
srcimp = apcm->srcimps[apcm->n_srcc+j*multi+i];
srcimp->ops->map(srcimp, apcm->src,
srcimp = apcm->srcimps[apcm->n_srcc+i];
srcimp->ops->map(srcimp, apcm->src, out_ports[i]);
rsc->idx = container_of(rsc, struct srcimp, rsc)->idx[0];
return container_of(rsc, struct srcimp, rsc)->idx[rsc->conj];
static int srcimp_map(struct srcimp *srcimp, struct src *src, struct rsc *input)
srcimp->rsc.ops->master(&srcimp->rsc);
for (i = 0; i < srcimp->rsc.msr; i++) {
entry = &srcimp->imappers[i];
entry->addr = srcimp->rsc.ops->index(&srcimp->rsc);
srcimp->mgr->imap_add(srcimp->mgr, entry);
srcimp->mapped |= (0x1 << i);
srcimp->rsc.ops->next_conj(&srcimp->rsc);
srcimp->rsc.ops->master(&srcimp->rsc);
static int srcimp_unmap(struct srcimp *srcimp)
for (i = 0; i < srcimp->rsc.msr; i++) {
if (srcimp->mapped & (0x1 << i)) {
srcimp->mgr->imap_delete(srcimp->mgr,
&srcimp->imappers[i]);
srcimp->mapped &= ~(0x1 << i);
static int srcimp_rsc_init(struct srcimp *srcimp,
err = rsc_init(&srcimp->rsc, srcimp->idx[0],
srcimp->imappers = kzalloc_objs(struct imapper, desc->msr);
if (!srcimp->imappers) {
srcimp->rsc.ops = &srcimp_basic_rsc_ops;
srcimp->ops = &srcimp_ops;
srcimp->mgr = mgr;
srcimp->rsc.ops->master(&srcimp->rsc);
rsc_uninit(&srcimp->rsc);
static int srcimp_rsc_uninit(struct srcimp *srcimp)
kfree(srcimp->imappers);
srcimp->imappers = NULL;
srcimp->ops = NULL;
srcimp->mgr = NULL;
rsc_uninit(&srcimp->rsc);
struct srcimp **rsrcimp)
struct srcimp *srcimp;
srcimp = kzalloc(sizeof(*srcimp), GFP_KERNEL);
if (!srcimp)
srcimp->idx[i] = idx;
err = srcimp_rsc_init(srcimp, desc, mgr);
*rsrcimp = srcimp;
mgr_put_resource(&mgr->mgr, 1, srcimp->idx[i]);
kfree(srcimp);
static int put_srcimp_rsc(struct srcimp_mgr *mgr, struct srcimp *srcimp)
for (i = 0; i < srcimp->rsc.msr; i++)
mgr_put_resource(&mgr->mgr, 1, srcimp->idx[i]);
srcimp_rsc_uninit(srcimp);
kfree(srcimp);
int (*map)(struct srcimp *srcimp, struct src *user, struct rsc *input);
int (*unmap)(struct srcimp *srcimp);
struct srcimp **rsrcimp);
int (*put_srcimp)(struct srcimp_mgr *mgr, struct srcimp *srcimp);