git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
UDI/buf - buf_copy/buf_free/fixes
[tpg/acess2.git]
/
KernelLand
/
Modules
/
Interfaces
/
UDI
/
management_agent.c
diff --git
a/KernelLand/Modules/Interfaces/UDI/management_agent.c
b/KernelLand/Modules/Interfaces/UDI/management_agent.c
index
512fda3
..
5ac91a4
100644
(file)
--- a/
KernelLand/Modules/Interfaces/UDI/management_agent.c
+++ b/
KernelLand/Modules/Interfaces/UDI/management_agent.c
@@
-26,6
+26,7
@@
tUDI_DriverInstance *UDI_MA_CreateInstance(tUDI_DriverModule *DriverModule,
udi_primary_init_t *pri_init = DriverModule->InitInfo->primary_init_info;
inst->Module = DriverModule;
inst->Regions[0] = UDI_MA_InitRegion(inst, 0, 0, pri_init->rdata_size);
udi_primary_init_t *pri_init = DriverModule->InitInfo->primary_init_info;
inst->Module = DriverModule;
inst->Regions[0] = UDI_MA_InitRegion(inst, 0, 0, pri_init->rdata_size);
+ if( !inst->Regions[0] ) goto _error;
udi_secondary_init_t *sec_init = DriverModule->InitInfo->secondary_init_list;
if( sec_init )
{
udi_secondary_init_t *sec_init = DriverModule->InitInfo->secondary_init_list;
if( sec_init )
{
@@
-33,6
+34,7
@@
tUDI_DriverInstance *UDI_MA_CreateInstance(tUDI_DriverModule *DriverModule,
{
inst->Regions[1+i] = UDI_MA_InitRegion(inst, i,
sec_init[i].region_idx, sec_init[i].rdata_size);
{
inst->Regions[1+i] = UDI_MA_InitRegion(inst, i,
sec_init[i].region_idx, sec_init[i].rdata_size);
+ if( !inst->Regions[1+i] ) goto _error;
}
}
}
}
@@
-49,9
+51,11
@@
tUDI_DriverInstance *UDI_MA_CreateInstance(tUDI_DriverModule *DriverModule,
// UDI_BindChannel_Raw(inst->ManagementChannel, false,
// NULL, 1, inst, &cUDI_MgmtOpsList); // TODO: ops list for management agent?
// UDI_BindChannel_Raw(inst->ManagementChannel, false,
// NULL, 1, inst, &cUDI_MgmtOpsList); // TODO: ops list for management agent?
-
for( int i = 0; i < DriverModule->nRegions; i ++ )
-
Log("Rgn %i: %p", i, inst->Regions[i]);
+
//
for( int i = 0; i < DriverModule->nRegions; i ++ )
+
//
Log("Rgn %i: %p", i, inst->Regions[i]);
+ LOG("Inst %s %p MA state =%i",
+ inst->Module->ModuleName, inst, UDI_MASTATE_USAGEIND);
inst->CurState = UDI_MASTATE_USAGEIND;
// Next State: _SECBIND
inst->CurState = UDI_MASTATE_USAGEIND;
// Next State: _SECBIND
@@
-68,6
+72,11
@@
tUDI_DriverInstance *UDI_MA_CreateInstance(tUDI_DriverModule *DriverModule,
// udi_usage_res causes next state transition
return inst;
// udi_usage_res causes next state transition
return inst;
+_error:
+ for( int i = 0; i < DriverModule->nRegions; i++ )
+ free(inst->Regions[i]);
+ free(inst);
+ return NULL;
}
tUDI_DriverRegion *UDI_MA_InitRegion(tUDI_DriverInstance *Inst,
}
tUDI_DriverRegion *UDI_MA_InitRegion(tUDI_DriverInstance *Inst,
@@
-174,7
+183,7
@@
void UDI_MA_AddChild(udi_enumerate_cb_t *cb, udi_index_t ops_idx)
}
}
if( !child->BindOps ) {
}
}
if( !child->BindOps ) {
- Log_Error("UDI", "Driver '%s' doesn't have a 'child_bind_ops' for %i",
+ Log_Error("UDI", "Driver '%s' doesn't have a 'child_bind_ops' for
ops_idx
%i",
inst->Module->ModuleName, ops_idx);
free(child);
return ;
inst->Module->ModuleName, ops_idx);
free(child);
return ;
@@
-184,14
+193,17
@@
void UDI_MA_AddChild(udi_enumerate_cb_t *cb, udi_index_t ops_idx)
inst->FirstChild = child;
// and search for a handler
inst->FirstChild = child;
// and search for a handler
-
tUDI_MetaLang *metalang = UDI_int_GetMetaLang(inst
, child->Ops->meta_idx);
+
child->Metalang = UDI_int_GetMetaLang(inst->Module
, child->Ops->meta_idx);
int best_level = 0;
tUDI_DriverModule *best_module = NULL;
for( tUDI_DriverModule *module = gpUDI_LoadedModules; module; module = module->Next )
{
for( int i = 0; i < module->nDevices; i ++ )
{
int best_level = 0;
tUDI_DriverModule *best_module = NULL;
for( tUDI_DriverModule *module = gpUDI_LoadedModules; module; module = module->Next )
{
for( int i = 0; i < module->nDevices; i ++ )
{
- if( module->Devices[i]->Metalang != metalang )
+ //LOG("%s:%i %p ?== %p",
+ // module->ModuleName, i,
+ // module->Devices[i]->Metalang, metalang);
+ if( module->Devices[i]->Metalang != child->Metalang )
continue ;
int level = UDI_MA_CheckDeviceMatch(
continue ;
int level = UDI_MA_CheckDeviceMatch(
@@
-223,6
+235,8
@@
void UDI_MA_BindParents(tUDI_DriverModule *Module)
{
if( child->BoundInstance )
continue ;
{
if( child->BoundInstance )
continue ;
+ if( Module->Devices[i]->Metalang != child->Metalang )
+ continue ;
// Check for match
int level = UDI_MA_CheckDeviceMatch(
Module->Devices[i]->nAttribs, Module->Devices[i]->Attribs,
// Check for match
int level = UDI_MA_CheckDeviceMatch(
Module->Devices[i]->nAttribs, Module->Devices[i]->Attribs,
@@
-244,6
+258,9
@@
void UDI_MA_TransitionState(tUDI_DriverInstance *Inst, enum eUDI_MAState Src, en
if( Inst->CurState != Src )
return ;
if( Inst->CurState != Src )
return ;
+ LOG("Inst %s %p MA state %i->%i",
+ Inst->Module->ModuleName, Inst, Src, Dst);
+
switch(Dst)
{
case UDI_MASTATE_USAGEIND:
switch(Dst)
{
case UDI_MASTATE_USAGEIND:
@@
-270,7
+287,7
@@
void UDI_MA_TransitionState(tUDI_DriverInstance *Inst, enum eUDI_MAState Src, en
// Bind to parent
tUDI_BindOps *parent = &Module->Parents[0];
// Bind to parent
tUDI_BindOps *parent = &Module->Parents[0];
- udi_channel_t channel = UDI_CreateChannel_Blank(UDI_int_GetMetaLang(Inst, parent->meta_idx));
+ udi_channel_t channel = UDI_CreateChannel_Blank(UDI_int_GetMetaLang(Inst
->Module
, parent->meta_idx));
UDI_BindChannel(channel,true, Inst, parent->ops_idx, parent->region_idx, NULL,false,0);
UDI_BindChannel(channel,false,
UDI_BindChannel(channel,true, Inst, parent->ops_idx, parent->region_idx, NULL,false,0);
UDI_BindChannel(channel,false,
UCC
git Repository :: git.ucc.asn.au