Example #1
0
//virtual address to liner address
void* va2la(int pid,void *va)
{
    struct task_struct *p = &proc_table[pid];
    u32 seg_base = ldt_seg_linear(p,INDEX_LDT_D);	
    u32 la = seg_base + (u32)va;
    return (void *)la;
}
Example #2
0
PUBLIC void *va2la(int pid, void *va)
{
    PROCESS *p = &proc_table[pid];
    u32 seg_base = ldt_seg_linear(p, INDEX_LDT_RW);
    u32 la = seg_base + (u32)va;

    if (pid < NR_TASKS + NR_NATIVE_PROCS)
        assert(la == (u32)va);

    return (void *)la;
}
Example #3
0
/**
 * <Ring 0~1> Virtual addr --> Linear addr.
 * 
 * @param pid  PID of the proc whose address is to be calculated.
 * @param va   Virtual address.
 * 
 * @return The linear address for the given virtual address.
 *****************************************************************************/
PUBLIC void* va2la(int pid, void* va)
{
	struct proc* p = &proc_table[pid];

	u32 seg_base = ldt_seg_linear(p, INDEX_LDT_RW);
	u32 la = seg_base + (u32)va;

	if (pid < NR_TASKS + NR_PROCS) {
		assert(la == (u32)va);
	}

	return (void*)la;
}
Example #4
0
/**************************************************************************************************
 * 					va2la
 **************************************************************************************************
 * <Ring 0~1> Virtual addr -> linear addr
 * @param pid	Whose
 * @param va	Virtual addr(or logical addr?)
 *************************************************************************************************/
PUBLIC void* va2la(int pid, void* va){
	PROCESS* p	= &proc_table[pid];
	u32 seg_base	= ldt_seg_linear(p, INDEX_LDT_RW);
	u32 la		= seg_base + (u32)va;
	/**
	 * @attention
	 * Here is NR_NATIVE_PROCS
	 */
	if(pid < NR_TASKS + NR_NATIVE_PROCS){
		assert(la == (u32)va);
	}
	return (void*)la;
}