[Tinyos-beta-commits] CVS: tinyos-1.x/beta/platform/pxa27x PXA27XInterruptM.nc, 1.1, 1.2

Josh jsherbach at users.sourceforge.net
Wed Aug 24 14:17:32 PDT 2005


Update of /cvsroot/tinyos/tinyos-1.x/beta/platform/pxa27x
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7857

Modified Files:
	PXA27XInterruptM.nc 
Log Message:
resolved issues with using the TOSH_IRP_TABLE

Index: PXA27XInterruptM.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/beta/platform/pxa27x/PXA27XInterruptM.nc,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** PXA27XInterruptM.nc	13 Nov 2004 01:12:40 -0000	1.1
--- PXA27XInterruptM.nc	24 Aug 2005 21:17:27 -0000	1.2
***************
*** 91,94 ****
--- 91,95 ----
    } 
  
+   static uint8_t usedPriorities = 0;
  
    /* Helper functions */
***************
*** 100,113 ****
      result_t result = FAIL;
  
!     atomic {
!       if ((id < 34) && (priority < 32)) {
! 	if (!(IPR(priority) & IPR_VALID)) {
  	  IPR(priority) = (IPR_VALID | (id));
  	  tmp = IPR(priority);
- 	  if (level) {
- 	    _ICLR(id) |= _PPID_Bit(id);
- 	    tmp = _ICLR(id);
- 	  } 
  	}
  	result = SUCCESS;
        }
--- 101,161 ----
      result_t result = FAIL;
  
!     atomic{
!       uint8_t i;
!       if(usedPriorities == 0){//assumed that the table will have some entries
! 	uint8_t PriorityTable[40], DuplicateTable[40];
! 	for(i = 0; i < 40; i++){
! 	  DuplicateTable[i] = PriorityTable[i] = 0xFF;
! 	}
! 	
! 	for(i = 0; i < 40; i++)
! 	  if(TOSH_IRP_TABLE[i] != 0xff){
! 	    if(PriorityTable[TOSH_IRP_TABLE[i]] != 0xFF)/*duplicate priorities
! 							  in the table, mark 
! 							  for later fixing*/
! 	      DuplicateTable[i] = PriorityTable[TOSH_IRP_TABLE[i]];
! 	    else
! 	      PriorityTable[TOSH_IRP_TABLE[i]] = i;
! 	  }
! 	
! 	//compress table
! 	for(i = 0; i < 40; i++){
! 	  if(PriorityTable[i] != 0xff){
! 	    PriorityTable[usedPriorities] = PriorityTable[i];
! 	    if(i != usedPriorities)
! 	      PriorityTable[i] = 0xFF;
! 	    usedPriorities++;
! 	  }
! 	}
! 
! 	for(i = 0; i < 40; i++)
! 	  if(DuplicateTable[i] != 0xFF){
! 	    uint8_t j, ExtraTable[40];
! 	    for(j = 0; DuplicateTable[i] != PriorityTable[j]; j++);
! 	    memcpy(ExtraTable + j + 1, PriorityTable + j, usedPriorities - j);
! 	    memcpy(PriorityTable + j + 1, ExtraTable + j + 1, 
! 		   usedPriorities - j);
! 	    PriorityTable[j] = i;
! 	    usedPriorities++;
! 	  }
! 
! 	for(i = 0; i < usedPriorities; i++){
! 	  IPR(i) = (IPR_VALID | PriorityTable[i]);
! 	  tmp = IPR(i);
! 	}
!       }
! 
!       if (id < 34){
! 	if(priority == 0xff){
! 	  priority = usedPriorities;
! 	  usedPriorities++;
  	  IPR(priority) = (IPR_VALID | (id));
  	  tmp = IPR(priority);
  	}
+ 	if (level) {
+ 	  _ICLR(id) |= _PPID_Bit(id);
+ 	  tmp = _ICLR(id);
+ 	} 
+ 	
  	result = SUCCESS;
        }
***************
*** 115,119 ****
      return result;
    }
! 
    void enable(uint8_t id)
    {
--- 163,167 ----
      return result;
    }
!   
    void enable(uint8_t id)
    {



More information about the Tinyos-beta-commits mailing list