gonzui


Format: Advanced Search

tkernel_2/monitor/hwdepend/tef_em1d/src/hwinfo.cbare sourcepermlink (0.01 seconds)

Search this content:

    1: /*
    2:  *----------------------------------------------------------------------
    3:  *    T-Kernel 2.0 Software Package
    4:  *
    5:  *    Copyright 2011 by Ken Sakamura.
    6:  *    This software is distributed under the latest version of T-License 2.x.
    7:  *----------------------------------------------------------------------
    8:  *
    9:  *    Released by T-Engine Forum(http://www.t-engine.org/) at 2011/05/17.
   10:  *    Modified by TRON Forum(http://www.tron.org/) at 2015/06/01.
   11:  *
   12:  *----------------------------------------------------------------------
   13:  */
   14: 
   15: /*
   16:  *      hwinfo.c
   17:  *
   18:  *       hardware configuration information
   19:  */
   20: 
   21: #include "hwdepend.h"
   22: 
   23: /* ------------------------------------------------------------------------ */
   24: /*
   25:  *       memory region definition
   26:  */
   27: 
   28: /*
   29:  * obtaining memory region information
   30:  *       no = 1 - (and up)
   31:  *       'no'-th information in the region specified by the attr is returned.
   32:  *       if attr = 0, no matter what the attribute is, 'no'-th information is returned unconditionally.
   33:  *       If there was no such information, return NULL.
   34:  */
   35: EXPORT MEMSEG* MemArea( UW attr, W no )
   36: {
   37:         MEMSEG *mp;
   38:         W      i;
   39: 
   40:         if ( attr == 0 ) {
   41:                 i = no - 1;
   42:                 return ( i >= 0 && i < N_MemSeg )? &MemSeg[i]: NULL;
   43:         }
   44: 
   45:         for ( i = 0; i < N_MemSeg; ++i ) {
   46:                 mp = &MemSeg[i];
   47:                 if ( (mp->attr & attr) != 0 ) {
   48:                         if ( --no <= 0 ) return mp;
   49:                 }
   50:         }
   51: 
   52:         return NULL;
   53: }
   54: 
   55: /*
   56:  * obtaining memory region information (specify address)
   57:  *       within the region specified by `attr', return the information that surrounds the position specified by `addr'.
   58:  *
   59:  *       if no such information is found, return NULL.
   60:  */
   61: EXPORT MEMSEG* AddrMatchMemArea( UW addr, UW attr )
   62: {
   63:         MEMSEG *mp;
   64:         W      i;
   65: 
   66:         for ( i = 0; i < N_MemSeg; ++i ) {
   67:                 mp = &MemSeg[i];
   68:                 if ( (mp->attr & attr) == 0 ) continue;
   69: 
   70:                 if ( addr >= mp->top && addr <= mp->end-1 ) return mp;
   71:         }
   72: 
   73:         return NULL;
   74: }
   75: 
   76: /*
   77:  * Decide whether two memory regions are included in another.
   78:  *      if the region, from `top' to `end', is completely included in the region specified by `attr',
   79:  *      TRUE
   80:  *       the location of end is NOT included in the region (end - top) is the region size
   81:  *       end = 0x00000000, by the way, means 0x100000000.
   82:  */
   83: EXPORT BOOL inMemArea( UW top, UW end, UW attr )
   84: {
   85:         const MEMSEG *mp;
   86:         W      i;
   87: 
   88:         for ( i = 0; i < N_MemSeg; ++i ) {
   89:                 mp = &MemSeg[i];
   90:                 if ( (mp->attr & attr) == 0 ) continue;
   91: 
   92:                 if ( top >= mp->top && end-1 <= mp->end-1 ) return TRUE;
   93:         }
   94:         return FALSE;
   95: }
   96: 
   97: /*
   98:  * Decide whether two memory regions overlap with each other
   99:  *       if the area, from top to end, is included even partially in the region specified by `attr' - 'end',
  100:  *       it is TRUE
  101:  *       the location of end is NOT included in the region (end - top) is the region size
  102:  *       end = 0x00000000, by the way, means 0x100000000.
  103:  */
  104: EXPORT BOOL isOverlapMemArea( UW top, UW end, UW attr )
  105: {
  106:         const MEMSEG *mp;
  107:         W      i;
  108: 
  109:         for ( i = 0; i < N_MemSeg; ++i ) {
  110:                 mp = &MemSeg[i];
  111:                 if ( (mp->attr & attr) == 0 ) continue;
  112: 
  113:                 if ( top <= mp->end-1 && end-1 >= mp->top ) return TRUE;
  114:         }
  115:         return FALSE;
  116: }
  117: 
  118: /* ------------------------------------------------------------------------ */
  119: /*
  120:  * boot device following the standard boot order
  121:  *       return the device name that is the 'no'-th device in the standard boot order.
  122:  *
  123:  *       if no such device name exists (when 'no' is given as a value larger or equal to the last number), it is NULL.
  124:  */
  125: EXPORT const UB* bootDevice( W no )
  126: {
  127:         if ( no < 0 || no >= N_ConfigDisk ) return NULL;
  128: 
  129:         return ConfigDisk[no].name;
  130: }
  131: 
  132: /*
  133:  * list of disk drives
  134:  *       returns the disk drive device name, indicated by 'no' ( 0 - : a consecutive number )
  135:  *       if no such device name exists (when 'no' is given as a value larger or equal to the last number), it is NULL.
  136:  *       if attr is not NULL, disk driver attribute returns in `attr' )
  137:  */
  138: EXPORT const UB* diskList( W no, UW *attr )
  139: {
  140:         if ( no < 0 || no >= N_ConfigDisk ) return NULL;
  141: 
  142:         if ( attr != NULL ) *attr = ConfigDisk[no].attr;
  143: 
  144:         return ConfigDisk[no].name;
  145: }
  146: 
  147: /* ------------------------------------------------------------------------ */