Exemple #1
0
/*
 * Memory Cache Control
 */
LOCAL INT _ControlCache( void *addr, INT len, UINT mode )
{
	ER	ercd;

	if ( len <= 0 ) {
		ercd = E_PAR;
		goto err_ret;
	}
	if ( mode == 0 ) {
		ercd = E_PAR;
		goto err_ret;
	}
	ercd = ChkSpaceR(addr, len);
	if ( ercd < E_OK ){
		goto err_ret;
	}

	ercd = ControlCacheM(addr, len, mode);
	if( ercd != E_OK ){
		goto err_ret;
	}

	return len;

err_ret:
#ifdef DEBUG
	TM_DEBUG_PRINT(("_ControlCache ercd = %d\n", ercd));
#endif
	return ercd;
}
Exemple #2
0
/*
 * Set system timezone
 */
EXPORT	ER	_dt_setsystz(const struct tzinfo* tz)
{
	ER	er;

	er = ChkSpaceR(tz, sizeof(*tz));
	if (er < E_OK) {
		return er;
	}

	systemTimeZone = *tz;
	return E_OK;
}
Exemple #3
0
/*
 * Get address space information
 */
LOCAL ER _GetSpaceInfo( VP addr, INT len, T_SPINFO *pk_spinfo )
{
	T_RSMB	rsmb;
	ER	ercd = E_OK;
	INT	cont, sz;
	VP	page, va, pa;

	if ( len <= 0 ) {
		ercd = E_PAR;
		goto err_ret;
	}
	ercd = ChkSpaceR(addr, len);
	if ( ercd < E_OK ){
		goto err_ret;
	}

	ercd = RefSysMemInfo(&rsmb);
	if ( ercd < E_OK ) {
		goto err_ret;
	}

	pk_spinfo->paddr   = toPhysicalAddress(addr);
	pk_spinfo->page    = (VP)((UW)(pk_spinfo->paddr) & ~(rsmb.blksz-1));
	pk_spinfo->pagesz  = rsmb.blksz;
	pk_spinfo->cachesz = GetCacheLineSize();

	cont = 0;
	page = pk_spinfo->page;
	va = addr;
	while ( cont < len ) {
		pa = toPhysicalAddress(va);
		if ( (pa < page) || ((page + rsmb.blksz) <= pa) ) {
			break;
		}
		sz = rsmb.blksz - (pa - page);
		cont += sz;
		page += rsmb.blksz;
		va += sz;
	}
	pk_spinfo->cont = ( cont <= len )? cont: len;

	return ercd;

err_ret:
	DEBUG_PRINT(("_GetSpaceInfo ercd = %d\n", ercd));
	return ercd;
}
Exemple #4
0
/*
 * Memory Cache Flush
 */
LOCAL ER _FlushMemCache( VP laddr, INT len, UINT mode )
{
	ER	ercd;

	if ( (mode & ~(TCM_ICACHE|TCM_DCACHE)) != 0 ) {
		ercd = E_PAR;
		goto err_ret;
	}
	ercd = ChkSpaceR(laddr, len);
	if ( ercd < E_OK ){
		goto err_ret;
	}

	FlushCacheM(laddr, len, mode);

	return E_OK;

err_ret:
	DEBUG_PRINT(("_FlushMemCache ercd = %d\n", ercd));
	return ercd;
}
Exemple #5
0
int
sys_sethostname(struct lwp *l,  const struct sys_sethostname_args *uap, register_t *retval)
{
	ER ercd;

	(void)l;

	ercd = ChkSpaceR(SCARG(uap, name), SCARG(uap, len));
	if ( ercd < E_OK ) {
		return EFAULT;
	}

	if ( SCARG(uap, len) > MAXHOSTNAMELEN ) {
		*retval = -1;
		return EINVAL;
	}

	strlcpy(sys_hostname, SCARG(uap, name), MAXHOSTNAMELEN);

	*retval = 0;
	return 0;
}
Exemple #6
0
/*
 * Get address space information
 */
LOCAL ER _GetSpaceInfo( CONST void *addr, INT len, T_SPINFO *pk_spinfo )
{
	T_RSMB	rsmb;
	ER	ercd = E_OK;

	if ( len <= 0 ) {
		ercd = E_PAR;
		goto err_ret;
	}
	ercd = ChkSpaceR(addr, len);
	if ( ercd < E_OK ){
		goto err_ret;
	}

	ercd = RefSysMemInfo(&rsmb);
	if ( ercd < E_OK ) {
		goto err_ret;
	}

	pk_spinfo->paddr   = toPhysicalAddress(addr);
	pk_spinfo->page	   = (void*)((UW)(pk_spinfo->paddr) & ~(rsmb.blksz-1));
	pk_spinfo->pagesz  = rsmb.blksz;
	pk_spinfo->cachesz = GetCacheLineSize();

	/* Assumes here that logical and physical addresses are mapped linear.
	   This assures that physical page addresses are also contiguous 
	   if logical page addresses are contiguous. */
	pk_spinfo->cont = len;

	return ercd;

err_ret:
#ifdef DEBUG
	TM_DEBUG_PRINT(("_GetSpaceInfo ercd = %d\n", ercd));
#endif
	return ercd;
}
Exemple #7
0
/*
 * Check address space 
 *	Checks to see that the memory area from address to the
 *	len byte is valid.
 */
EXPORT ER CheckSpaceR( VP address, W len )
{
	return ChkSpaceR(address, len);
}