void set_module_apc(unsigned int module, E_MASK_DOM domain_num , APC_ATTR permission_control) { volatile unsigned int* base = 0; unsigned int clr_bit = 0x3 << ((module % MOD_NO_IN_1_DEVAPC) * 2); unsigned int set_bit = permission_control << ((module % MOD_NO_IN_1_DEVAPC) * 2); clear_vio_status(module); unmask_module_irq(module); if(domain_num == E_DOMAIN_0) { base = (unsigned int*) ((size_t)DEVAPC_D0_APC_0 + (module/16) *4); } else if(domain_num == E_DOMAIN_1) { base = (unsigned int*) ((size_t)DEVAPC_D1_APC_0 + (module/16) *4); } else if(domain_num == E_DOMAIN_2) { base = (unsigned int*) ((size_t)DEVAPC_D2_APC_0 + (module/16) *4); } else if(domain_num == E_DOMAIN_3) { base = (unsigned int*) ((size_t)DEVAPC_D3_APC_0 + (module/16) *4); } writel(readl(base) & ~clr_bit, base); writel(readl(base) | set_bit, base); }
/* * start_devapc: start device apc for MD */ static int start_devapc(void) { int i = 0; init_devpac(); for (i = 0; i < (sizeof(devapc_devices) / sizeof(devapc_devices[0])); i++) { if (TRUE == devapc_devices[i].forbidden) { clear_vio_status(i); unmask_module_irq(i); set_module_apc(i, E_DOMAIN_1, E_L3); } } return 0; }