Пример #1
0
static long smi_ioctl( struct file * pFile,
						 unsigned int cmd,
						 unsigned long param)
{
    int ret = 0;

//    unsigned long * pu4Cnt = (unsigned long *)pFile->private_data;

    switch (cmd)
    {
#ifdef __MAU_SPC_ENABLE__ 
        case MTK_CONFIG_MM_MAU:
        {
        	MTK_MAU_CONFIG b;
       		if(copy_from_user(&b, (void __user *)param, sizeof(b)))
        	{
            	SMIERR("copy_from_user failed!");
            	ret = -EFAULT;
        	} else {
                mau_config(&b);
			}
        	return ret;
    	}
        case MTK_IOC_SPC_CONFIG :
        {
            MTK_SPC_CONFIG cfg;
            ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SPC_CONFIG));
            if(ret)
            {
            	SMIMSG(" SPC_CONFIG, copy_from_user failed: %d\n", ret);
            	return -EFAULT;
            }  

            spc_config(&cfg);

        }
            break;

        case MTK_IOC_SPC_DUMP_REG :
            spc_dump_reg();
            break;


        case MTK_IOC_SPC_DUMP_STA :
            spc_status_check();    	
            break;

        case MTK_IOC_SPC_CMD :
            spc_test(param);
            break;
#endif

        case MTK_IOC_SMI_BWC_CONFIG:
            {
                MTK_SMI_BWC_CONFIG cfg;
                ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SMI_BWC_CONFIG));
                if(ret)
                {
                    SMIMSG(" SMI_BWC_CONFIG, copy_from_user failed: %d\n", ret);
                    return -EFAULT;
                }  

//                ret = smi_bwc_config( &cfg , pu4Cnt);
                ret = smi_bwc_config( &cfg , NULL);
            
            }
            break;
    // GMP start 
    case MTK_IOC_SMI_BWC_INFO_SET:
        {
            MTK_SMI_BWC_INFO_SET cfg;
            SMIMSG("Handle MTK_IOC_SMI_BWC_INFO_SET request... start");
            ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SMI_BWC_INFO_SET));
            if(ret)
            {
                SMIMSG(" MTK_IOC_SMI_BWC_INFO_SET, copy_to_user failed: %d\n", ret);
                return -EFAULT;
            }  
            // Set the address to the value assigned by user space program
            smi_bwc_mm_info_set(cfg.property, cfg.value1, cfg.value2);
            SMIMSG("Handle MTK_IOC_SMI_BWC_INFO_SET request... finish");
            break;  
        }
    case MTK_IOC_SMI_BWC_INFO_GET:
        {
            MTK_SMI_BWC_INFO_GET cfg;
            MTK_SMI_BWC_MM_INFO * return_address = NULL;
            
            SMIMSG("Handle MTK_IOC_SMI_BWC_INFO_GET request... start");
            ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SMI_BWC_INFO_GET));

            if(ret)
            {
                SMIMSG(" MTK_IOC_SMI_BWC_INFO_GET, copy_to_user failed: %d\n", ret);
                return -EFAULT;
            }  

            return_address = (MTK_SMI_BWC_MM_INFO *)cfg.return_address;
            if( return_address != NULL){
                ret = copy_to_user((void*) return_address, (void*)&g_smi_bwc_mm_info, sizeof(MTK_SMI_BWC_MM_INFO));

                if(ret)
                {
                    SMIMSG(" MTK_IOC_SMI_BWC_INFO_GET, copy_to_user failed: %d\n", ret);
                    return -EFAULT;
                }
            }
            SMIMSG("Handle MTK_IOC_SMI_BWC_INFO_GET request... finish");
            break;
        }
     // GMP end   
        
        default:
            return -1;
    }

	return ret;
}
Пример #2
0
static void process_dbg_opt(const char *opt)
{
    //m4u log
    if (0 == strncmp(opt, "m4u_log:", 8))
    {
        if (0 == strncmp(opt + 8, "on", 2)) 
            m4u_log_on();
        else if (0 == strncmp(opt + 8, "off", 3)) 
            m4u_log_off();
        else
            goto Error;
    }
    //m4u debug
    if (0 == strncmp(opt, "m4u_debug:", 10))
    {
        unsigned int command;
        char *p = (char *)opt + 10;
        command = (unsigned int) simple_strtoul(p, &p, 10);
        SMIMSG("m4u_debug_command, command=%d ", command);
        m4u_debug_command(command);
    }

    //mau dump
    if (0 == strncmp(opt, "mau_stat:", 9))
    {
		char *p = (char *)opt + 9;
        unsigned int larb=(unsigned int)simple_strtoul(p, &p, 16);
        if(larb>SMI_LARB_NR)
            SMIERR("debug error: larb=%d\n", larb);
        mau_dump_status(larb);
    }

    if (0 == strncmp(opt, "mau_config:", 11 ))
    {
        MTK_MAU_CONFIG MauConf;
		unsigned int larb,entry, rd, wt, vir, start, end, port_msk;
		char *p = (char *)opt + 11;
		larb = (unsigned int) simple_strtoul(p, &p, 16);
		p++;
		entry = (unsigned int) simple_strtoul(p, &p, 16);
		p++;
		rd = (unsigned int) simple_strtoul(p, &p, 16);
		p++;
		wt = (unsigned int) simple_strtoul(p, &p, 16);
		p++;
		vir = (unsigned int) simple_strtoul(p, &p, 16);
		p++;
		start = (unsigned int) simple_strtoul(p, &p, 16);
        p++;
		end = (unsigned int) simple_strtoul(p, &p, 16);
		p++;
		port_msk = (unsigned int) simple_strtoul(p, &p, 16);

		SMIMSG("larb=%d,entry=%d,rd=%d wt=%d vir=%d \n"
            "start=0x%x end=0x%x msk=0x%x \n",
            larb, entry, rd, wt, vir, start, end, port_msk);

        MauConf.larb = larb;
        MauConf.entry = entry;
        MauConf.monitor_read = rd;
        MauConf.monitor_write = wt;
        MauConf.virt = vir;
        MauConf.start = start;
        MauConf.end = end;
        MauConf.port_msk = port_msk;
        mau_config(&MauConf);

    }

    if (0 == strncmp(opt, "spc_config:", 11 ))
    {
        MTK_SPC_CONFIG pCfg;
		char *p = (char *)opt + 11;

        SMIMSG("%s", p);
        //0-no protect; 1-sec rw; 2-sec_rw nonsec_r; 3-no access
		pCfg.domain_0_prot = (unsigned int) simple_strtoul(p, &p, 16);

        SMIMSG("%d,%s", pCfg.domain_0_prot, p);
		p++;
		pCfg.domain_1_prot = (unsigned int) simple_strtoul(p, &p, 16);
		p++;
        SMIMSG("%d", pCfg.domain_1_prot);
		pCfg.domain_2_prot = (unsigned int) simple_strtoul(p, &p, 16);
		p++;
        SMIMSG("%d", pCfg.domain_2_prot);
		pCfg.domain_3_prot = (unsigned int) simple_strtoul(p, &p, 16);
		p++;
        SMIMSG("%d", pCfg.domain_3_prot);
		pCfg.start = (unsigned int) simple_strtoul(p, &p, 16);
		p++;
        SMIMSG("%d", pCfg.domain_0_prot);
		pCfg.end = (unsigned int) simple_strtoul(p, &p, 16);

		SMIMSG("prot=(%d,%d,%d,%d), start=0x%x, end=0x%x\n",
            pCfg.domain_0_prot,pCfg.domain_1_prot,
            pCfg.domain_2_prot,pCfg.domain_3_prot,
            pCfg.start,pCfg.end);

        spc_config(&pCfg);

    }

    if (0 == strncmp(opt, "spc_status", 10 ))
    {
        spc_status_check();
    }

    if (0 == strncmp(opt, "spc_dump_reg", 12 ))
    {
        spc_dump_reg();
    }

    if (0 == strncmp(opt, "touch_sysram", 10 ))
    {
        volatile unsigned int *va;
        unsigned int i;

        //va = ioremap_nocache(0x1200C000, 1024*80);
        va=(volatile unsigned int *)0xf2000000;

        for(i=0; i<1024*80/4; i++)
        {
            va[i] = i;
        }
        
        SMIMSG("cpu read sysram: 0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x",
            va[0],va[1],va[2],va[3],va[100],va[222],va[444]);
            
    }

    if (0 == strncmp(opt, "set_reg:", 8 ))
    {
        unsigned int addr, val;
		char *p = (char *)opt + 8;

		addr = (unsigned int) simple_strtoul(p, &p, 16);
		p++;
		val = (unsigned int) simple_strtoul(p, &p, 16);

		SMIMSG("set register: 0x%x = 0x%x\n", addr, val);

        COM_WriteReg32(addr, val);
    }
    if (0 == strncmp(opt, "get_reg:", 8 ))
    {
        unsigned int addr;
		char *p = (char *)opt + 8;

		addr = (unsigned int) simple_strtoul(p, &p, 16);

		SMIMSG("get register: 0x%x = 0x%x \n", addr, COM_ReadReg32(addr));
    }
    

    
    return;
Error:
    SMIERR("parse command error!\n");
    SMIMSG("%s", STR_HELP);
}
Пример #3
0
static long smi_ioctl( struct file * pFile,
						 unsigned int cmd,
						 unsigned long param)
{
    int ret = 0;

//    unsigned long * pu4Cnt = (unsigned long *)pFile->private_data;

    switch (cmd)
    {
#ifdef __MAU_SPC_ENABLE__ 
        case MTK_CONFIG_MM_MAU:
        {
        	MTK_MAU_CONFIG b;
       		if(copy_from_user(&b, (void __user *)param, sizeof(b)))
        	{
            	SMIERR("copy_from_user failed!");
            	ret = -EFAULT;
        	} else {
                mau_config(&b);
			}
        	return ret;
    	}
        case MTK_IOC_SPC_CONFIG :
        {
            MTK_SPC_CONFIG cfg;
            ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SPC_CONFIG));
            if(ret)
            {
            	SMIMSG(" SPC_CONFIG, copy_from_user failed: %d\n", ret);
            	return -EFAULT;
            }  

            spc_config(&cfg);

        }
            break;

        case MTK_IOC_SPC_DUMP_REG :
            spc_dump_reg();
            break;


        case MTK_IOC_SPC_DUMP_STA :
            spc_status_check();    	
            break;

        case MTK_IOC_SPC_CMD :
            spc_test(param);
            break;
#endif

        case MTK_IOC_SMI_BWC_CONFIG:
            {
                MTK_SMI_BWC_CONFIG cfg;
                ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SMI_BWC_CONFIG));
                if(ret)
                {
                    SMIMSG(" SMI_BWC_CONFIG, copy_from_user failed: %d\n", ret);
                    return -EFAULT;
                }  

//                ret = smi_bwc_config( &cfg , pu4Cnt);
                ret = smi_bwc_config( &cfg , NULL);
            
            }
            break;
        
        default:
            return -1;
    }

	return ret;
}