RAC: AccessEnable() and AccessDisable() are mandatory.

This commit is contained in:
Adam Jackson 2008-10-03 12:39:49 -04:00
parent 9c5fc7762e
commit 51fcb58f45

View File

@ -60,7 +60,10 @@ int xf86NumEntities = 0;
static int xf86EntityPrivateCount = 0; static int xf86EntityPrivateCount = 0;
BusAccPtr xf86BusAccInfo = NULL; BusAccPtr xf86BusAccInfo = NULL;
xf86AccessRec AccessNULL = {NULL,NULL,NULL}; static void
noopEnableDisable(void *arg) { }
xf86AccessRec AccessNULL = { noopEnableDisable, noopEnableDisable, NULL };
xf86CurrentAccessRec xf86CurrentAccess = {NULL,NULL}; xf86CurrentAccessRec xf86CurrentAccess = {NULL,NULL};
@ -170,11 +173,9 @@ xf86EntityInit(void)
((BusAccPtr)xf86Entities[i]->access->busAcc)->set_f ((BusAccPtr)xf86Entities[i]->access->busAcc)->set_f
(xf86Entities[i]->access->busAcc); (xf86Entities[i]->access->busAcc);
pacc = xf86Entities[i]->access->fallback; pacc = xf86Entities[i]->access->fallback;
if (pacc->AccessEnable) pacc->AccessEnable(pacc->arg);
pacc->AccessEnable(pacc->arg);
xf86Entities[i]->entityInit(i,xf86Entities[i]->private); xf86Entities[i]->entityInit(i,xf86Entities[i]->private);
if (pacc->AccessDisable) pacc->AccessDisable(pacc->arg);
pacc->AccessDisable(pacc->arg);
/* remove init resources after init is processed */ /* remove init resources after init is processed */
pprev_next = &Acc; pprev_next = &Acc;
res = Acc; res = Acc;
@ -213,11 +214,9 @@ EntityEnter(void)
((BusAccPtr)xf86Entities[i]->access->busAcc)->set_f ((BusAccPtr)xf86Entities[i]->access->busAcc)->set_f
(xf86Entities[i]->access->busAcc); (xf86Entities[i]->access->busAcc);
pacc = xf86Entities[i]->access->fallback; pacc = xf86Entities[i]->access->fallback;
if (pacc->AccessEnable) pacc->AccessEnable(pacc->arg);
pacc->AccessEnable(pacc->arg);
xf86Entities[i]->entityEnter(i,xf86Entities[i]->private); xf86Entities[i]->entityEnter(i,xf86Entities[i]->private);
if (pacc->AccessDisable) pacc->AccessDisable(pacc->arg);
pacc->AccessDisable(pacc->arg);
} }
} }
@ -233,11 +232,9 @@ EntityLeave(void)
((BusAccPtr)xf86Entities[i]->access->busAcc)->set_f ((BusAccPtr)xf86Entities[i]->access->busAcc)->set_f
(xf86Entities[i]->access->busAcc); (xf86Entities[i]->access->busAcc);
pacc = xf86Entities[i]->access->fallback; pacc = xf86Entities[i]->access->fallback;
if (pacc->AccessEnable) pacc->AccessEnable(pacc->arg);
pacc->AccessEnable(pacc->arg);
xf86Entities[i]->entityLeave(i,xf86Entities[i]->private); xf86Entities[i]->entityLeave(i,xf86Entities[i]->private);
if (pacc->AccessDisable) pacc->AccessDisable(pacc->arg);
pacc->AccessDisable(pacc->arg);
} }
} }
@ -358,10 +355,10 @@ xf86RemoveEntityFromScreen(ScrnInfoPtr pScrn, int entityIndex)
peacc = xf86Entities[pScrn->entityList[i]]->access; peacc = xf86Entities[pScrn->entityList[i]]->access;
(*ptr) = peacc->next; (*ptr) = peacc->next;
/* disable entity: call disable func */ /* disable entity: call disable func */
if (peacc->pAccess && peacc->pAccess->AccessDisable) if (peacc->pAccess)
peacc->pAccess->AccessDisable(peacc->pAccess->arg); peacc->pAccess->AccessDisable(peacc->pAccess->arg);
/* also disable fallback - just in case */ /* also disable fallback - just in case */
if (peacc->fallback && peacc->fallback->AccessDisable) if (peacc->fallback)
peacc->fallback->AccessDisable(peacc->fallback->arg); peacc->fallback->AccessDisable(peacc->fallback->arg);
for (i++; i < pScrn->numEntities; i++) for (i++; i < pScrn->numEntities; i++)
pScrn->entityList[i-1] = pScrn->entityList[i]; pScrn->entityList[i-1] = pScrn->entityList[i];
@ -391,10 +388,10 @@ xf86ClearEntityListForScreen(int scrnIndex)
xf86Entities[entityIndex]->inUse = FALSE; xf86Entities[entityIndex]->inUse = FALSE;
/* disable resource: call the disable function */ /* disable resource: call the disable function */
peacc = xf86Entities[entityIndex]->access; peacc = xf86Entities[entityIndex]->access;
if (peacc->pAccess && peacc->pAccess->AccessDisable) if (peacc->pAccess)
peacc->pAccess->AccessDisable(peacc->pAccess->arg); peacc->pAccess->AccessDisable(peacc->pAccess->arg);
/* and the fallback function */ /* and the fallback function */
if (peacc->fallback && peacc->fallback->AccessDisable) if (peacc->fallback)
peacc->fallback->AccessDisable(peacc->fallback->arg); peacc->fallback->AccessDisable(peacc->fallback->arg);
/* shared resources are only needed when entity is active: remove */ /* shared resources are only needed when entity is active: remove */
xf86DeallocateResourcesForEntity(entityIndex, ResShared); xf86DeallocateResourcesForEntity(entityIndex, ResShared);
@ -525,14 +522,14 @@ disableAccess(void)
for (i = 0; i < xf86NumScreens; i++) { for (i = 0; i < xf86NumScreens; i++) {
peacc = xf86Screens[i]->CurrentAccess->pIoAccess; peacc = xf86Screens[i]->CurrentAccess->pIoAccess;
while (peacc) { while (peacc) {
if (peacc->pAccess && peacc->pAccess->AccessDisable) if (peacc->pAccess)
peacc->pAccess->AccessDisable(peacc->pAccess->arg); peacc->pAccess->AccessDisable(peacc->pAccess->arg);
peacc = peacc->next; peacc = peacc->next;
} }
xf86Screens[i]->CurrentAccess->pIoAccess = NULL; xf86Screens[i]->CurrentAccess->pIoAccess = NULL;
peacc = xf86Screens[i]->CurrentAccess->pMemAccess; peacc = xf86Screens[i]->CurrentAccess->pMemAccess;
while (peacc) { while (peacc) {
if (peacc->pAccess && peacc->pAccess->AccessDisable) if (peacc->pAccess)
peacc->pAccess->AccessDisable(peacc->pAccess->arg); peacc->pAccess->AccessDisable(peacc->pAccess->arg);
peacc = peacc->next; peacc = peacc->next;
} }
@ -541,8 +538,7 @@ disableAccess(void)
/* then call the generic entity disable funcs */ /* then call the generic entity disable funcs */
for (i = 0; i < xf86NumEntities; i++) { for (i = 0; i < xf86NumEntities; i++) {
pacc = xf86Entities[i]->access->fallback; pacc = xf86Entities[i]->access->fallback;
if (pacc->AccessDisable) pacc->AccessDisable(pacc->arg);
pacc->AccessDisable(pacc->arg);
} }
} }
@ -692,16 +688,16 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
pScrn->CurrentAccess->pMemAccess = NULL; pScrn->CurrentAccess->pMemAccess = NULL;
while (pceAcc) { while (pceAcc) {
pAcc = pceAcc->pAccess; pAcc = pceAcc->pAccess;
if ( pAcc && pAcc->AccessDisable) if (pAcc)
(*pAcc->AccessDisable)(pAcc->arg); pAcc->AccessDisable(pAcc->arg);
pceAcc = pceAcc->next; pceAcc = pceAcc->next;
} }
if (pScrn->busAccess) if (pScrn->busAccess)
((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess); ((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess);
while (peAcc) { while (peAcc) {
pAcc = peAcc->pAccess; pAcc = peAcc->pAccess;
if (pAcc && pAcc->AccessEnable) if (pAcc)
(*pAcc->AccessEnable)(pAcc->arg); pAcc->AccessEnable(pAcc->arg);
peAcc = peAcc->next; peAcc = peAcc->next;
} }
pScrn->CurrentAccess->pIoAccess = (EntityAccessPtr) pScrn->access; pScrn->CurrentAccess->pIoAccess = (EntityAccessPtr) pScrn->access;
@ -713,8 +709,8 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
tmp = pceAcc; tmp = pceAcc;
while (pceAcc) { while (pceAcc) {
pAcc = pceAcc->pAccess; pAcc = pceAcc->pAccess;
if (pAcc && pAcc->AccessDisable) if (pAcc)
(*pAcc->AccessDisable)(pAcc->arg); pAcc->AccessDisable(pAcc->arg);
pceAcc = pceAcc->next; pceAcc = pceAcc->next;
} }
pceAcc = pScrn->CurrentAccess->pMemAccess; pceAcc = pScrn->CurrentAccess->pMemAccess;
@ -722,8 +718,8 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
&& tmp !=pceAcc) { && tmp !=pceAcc) {
while (pceAcc) { while (pceAcc) {
pAcc = pceAcc->pAccess; pAcc = pceAcc->pAccess;
if (pAcc && pAcc->AccessDisable) if (pAcc)
(*pAcc->AccessDisable)(pAcc->arg); pAcc->AccessDisable(pAcc->arg);
pceAcc = pceAcc->next; pceAcc = pceAcc->next;
} }
} }
@ -734,8 +730,8 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
} }
while (pceAcc) { /* current Mem != pAccess */ while (pceAcc) { /* current Mem != pAccess */
pAcc = pceAcc->pAccess; pAcc = pceAcc->pAccess;
if (pAcc && pAcc->AccessDisable) if (pAcc)
(*pAcc->AccessDisable)(pAcc->arg); pAcc->AccessDisable(pAcc->arg);
pceAcc = pceAcc->next; pceAcc = pceAcc->next;
} }
} }
@ -743,8 +739,8 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess); ((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess);
while (peAcc) { while (peAcc) {
pAcc = peAcc->pAccess; pAcc = peAcc->pAccess;
if (pAcc && pAcc->AccessEnable) if (pAcc)
(*pAcc->AccessEnable)(pAcc->arg); pAcc->AccessEnable(pAcc->arg);
peAcc = peAcc->next; peAcc = peAcc->next;
} }
pScrn->CurrentAccess->pMemAccess = pScrn->CurrentAccess->pMemAccess =
@ -760,16 +756,16 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
pScrn->CurrentAccess->pIoAccess = NULL; pScrn->CurrentAccess->pIoAccess = NULL;
while (pceAcc) { while (pceAcc) {
pAcc = pceAcc->pAccess; pAcc = pceAcc->pAccess;
if ( pAcc && pAcc->AccessDisable) if (pAcc)
(*pAcc->AccessDisable)(pAcc->arg); pAcc->AccessDisable(pAcc->arg);
pceAcc = pceAcc->next; pceAcc = pceAcc->next;
} }
if (pScrn->busAccess) if (pScrn->busAccess)
((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess); ((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess);
while (peAcc) { while (peAcc) {
pAcc = peAcc->pAccess; pAcc = peAcc->pAccess;
if (pAcc && pAcc->AccessEnable) if (pAcc)
(*pAcc->AccessEnable)(pAcc->arg); pAcc->AccessEnable(pAcc->arg);
peAcc = peAcc->next; peAcc = peAcc->next;
} }
pScrn->CurrentAccess->pMemAccess = (EntityAccessPtr) pScrn->access; pScrn->CurrentAccess->pMemAccess = (EntityAccessPtr) pScrn->access;
@ -808,13 +804,11 @@ xf86SetCurrentAccess(Bool Enable, ScrnInfoPtr pScrn)
while (pceAcc) { while (pceAcc) {
pAcc = pceAcc->pAccess; pAcc = pceAcc->pAccess;
if ( pAcc) { if (pAcc) {
if (!Enable) { if (Enable) {
if (pAcc->AccessDisable) pAcc->AccessEnable(pAcc->arg);
(*pAcc->AccessDisable)(pAcc->arg);
} else { } else {
if (pAcc->AccessEnable) pAcc->AccessDisable(pAcc->arg);
(*pAcc->AccessEnable)(pAcc->arg);
} }
} }
pceAcc = pceAcc->next; pceAcc = pceAcc->next;
@ -1733,7 +1727,7 @@ setAccess(EntityPtr pEnt, xf86State state)
if (pEnt->rac->old) { if (pEnt->rac->old) {
/* give it to the driver, leave state disabled */ /* give it to the driver, leave state disabled */
pEnt->rac->old->io = org_io; pEnt->rac->old->io = org_io;
} else if (org_io->AccessEnable) { } else {
/* driver doesn't want it - enable generic access */ /* driver doesn't want it - enable generic access */
org_io->AccessEnable(org_io->arg); org_io->AccessEnable(org_io->arg);
} }
@ -1744,7 +1738,7 @@ setAccess(EntityPtr pEnt, xf86State state)
if (pEnt->rac->old) { if (pEnt->rac->old) {
/* give it to the driver, leave state disabled */ /* give it to the driver, leave state disabled */
pEnt->rac->old->io_mem = org_mem_io; pEnt->rac->old->io_mem = org_mem_io;
} else if (org_mem_io->AccessEnable) { } else {
/* driver doesn't want it - enable generic access */ /* driver doesn't want it - enable generic access */
org_mem_io->AccessEnable(org_mem_io->arg); org_mem_io->AccessEnable(org_mem_io->arg);
} }
@ -1755,7 +1749,7 @@ setAccess(EntityPtr pEnt, xf86State state)
if (pEnt->rac->old) { if (pEnt->rac->old) {
/* give it to the driver, leave state disabled */ /* give it to the driver, leave state disabled */
pEnt->rac->old->mem = org_mem; pEnt->rac->old->mem = org_mem;
} else if (org_mem->AccessEnable) { } else {
/* driver doesn't want it - enable generic access */ /* driver doesn't want it - enable generic access */
org_mem->AccessEnable(org_mem->arg); org_mem->AccessEnable(org_mem->arg);
} }
@ -1763,27 +1757,26 @@ setAccess(EntityPtr pEnt, xf86State state)
if (!(prop & NEED_MEM_SHARED)){ if (!(prop & NEED_MEM_SHARED)){
if (prop & NEED_MEM) { if (prop & NEED_MEM) {
if (acc_mem && acc_mem->AccessEnable) if (acc_mem)
acc_mem->AccessEnable(acc_mem->arg); acc_mem->AccessEnable(acc_mem->arg);
} else { } else {
if (acc_mem && acc_mem->AccessDisable) if (acc_mem)
acc_mem->AccessDisable(acc_mem->arg); acc_mem->AccessDisable(acc_mem->arg);
} }
} }
if (!(prop & NEED_IO_SHARED)) { if (!(prop & NEED_IO_SHARED)) {
if (prop & NEED_IO) { if (prop & NEED_IO) {
if (acc_io && acc_io->AccessEnable) if (acc_io)
acc_io->AccessEnable(acc_io->arg); acc_io->AccessEnable(acc_io->arg);
} else { } else {
if (acc_io && acc_io->AccessDisable) if (acc_io)
acc_io->AccessDisable(acc_io->arg); acc_io->AccessDisable(acc_io->arg);
} }
} }
/* disable shared resources */ /* disable shared resources */
if (pEnt->access->pAccess if (pEnt->access->pAccess)
&& pEnt->access->pAccess->AccessDisable)
pEnt->access->pAccess->AccessDisable(pEnt->access->pAccess->arg); pEnt->access->pAccess->AccessDisable(pEnt->access->pAccess->arg);
/* /*