Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*


 300         picsetup();
 301 
 302         /*
 303          * program timer 0
 304          */
 305         (void) uppc_clkinit(hz);
 306 
 307         return (PSM_SUCCESS);
 308 }
 309 
 310 /*ARGSUSED3*/
 311 static int
 312 uppc_addspl(int irqno, int ipl, int min_ipl, int max_ipl)
 313 {
 314         struct standard_pic *pp;
 315         int i;
 316         int startidx;
 317         uchar_t vectmask;
 318 
 319         if (irqno <= MAX_ISA_IRQ)
 320                 atomic_add_16(&uppc_irq_shared_table[irqno], 1);
 321 
 322         if (ipl != min_ipl)
 323                 return (0);
 324 
 325         if (irqno > 7) {
 326                 vectmask = 1 << (irqno - 8);
 327                 startidx = (ipl << 1);
 328         } else {
 329                 vectmask = 1 << irqno;
 330                 startidx = (ipl << 1) + 1;
 331         }
 332 
 333         /*
 334          * mask intr same or above ipl
 335          * level MAXIPL has all intr off as init. default
 336          */
 337         pp = &pics0;
 338         for (i = startidx; i < (MAXIPL << 1); i += 2) {
 339                 if (pp->c_iplmask[i] & vectmask)
 340                         break;


 343 
 344         /*
 345          * unmask intr below ipl
 346          */
 347         for (i = startidx-2; i >= 0; i -= 2) {
 348                 if (!(pp->c_iplmask[i] & vectmask))
 349                         break;
 350                 pp->c_iplmask[i] &= ~vectmask;
 351         }
 352         return (0);
 353 }
 354 
 355 static int
 356 uppc_delspl(int irqno, int ipl, int min_ipl, int max_ipl)
 357 {
 358         struct standard_pic *pp;
 359         int i;
 360         uchar_t vectmask;
 361 
 362         if (irqno <= MAX_ISA_IRQ)
 363                 atomic_add_16(&uppc_irq_shared_table[irqno], -1);
 364 
 365         /*
 366          * skip if we are not deleting the last handler
 367          * and the ipl is higher than minimum
 368          */
 369         if ((max_ipl != PSM_INVALID_IPL) && (ipl >= min_ipl))
 370                 return (0);
 371 
 372         if (irqno > 7) {
 373                 vectmask = 1 << (irqno - 8);
 374                 i = 0;
 375         } else {
 376                 vectmask = 1 << irqno;
 377                 i = 1;
 378         }
 379 
 380         pp = &pics0;
 381 
 382         /*
 383          * check any handlers left for this irqno




 300         picsetup();
 301 
 302         /*
 303          * program timer 0
 304          */
 305         (void) uppc_clkinit(hz);
 306 
 307         return (PSM_SUCCESS);
 308 }
 309 
 310 /*ARGSUSED3*/
 311 static int
 312 uppc_addspl(int irqno, int ipl, int min_ipl, int max_ipl)
 313 {
 314         struct standard_pic *pp;
 315         int i;
 316         int startidx;
 317         uchar_t vectmask;
 318 
 319         if (irqno <= MAX_ISA_IRQ)
 320                 atomic_inc_16(&uppc_irq_shared_table[irqno]);
 321 
 322         if (ipl != min_ipl)
 323                 return (0);
 324 
 325         if (irqno > 7) {
 326                 vectmask = 1 << (irqno - 8);
 327                 startidx = (ipl << 1);
 328         } else {
 329                 vectmask = 1 << irqno;
 330                 startidx = (ipl << 1) + 1;
 331         }
 332 
 333         /*
 334          * mask intr same or above ipl
 335          * level MAXIPL has all intr off as init. default
 336          */
 337         pp = &pics0;
 338         for (i = startidx; i < (MAXIPL << 1); i += 2) {
 339                 if (pp->c_iplmask[i] & vectmask)
 340                         break;


 343 
 344         /*
 345          * unmask intr below ipl
 346          */
 347         for (i = startidx-2; i >= 0; i -= 2) {
 348                 if (!(pp->c_iplmask[i] & vectmask))
 349                         break;
 350                 pp->c_iplmask[i] &= ~vectmask;
 351         }
 352         return (0);
 353 }
 354 
 355 static int
 356 uppc_delspl(int irqno, int ipl, int min_ipl, int max_ipl)
 357 {
 358         struct standard_pic *pp;
 359         int i;
 360         uchar_t vectmask;
 361 
 362         if (irqno <= MAX_ISA_IRQ)
 363                 atomic_dec_16(&uppc_irq_shared_table[irqno]);
 364 
 365         /*
 366          * skip if we are not deleting the last handler
 367          * and the ipl is higher than minimum
 368          */
 369         if ((max_ipl != PSM_INVALID_IPL) && (ipl >= min_ipl))
 370                 return (0);
 371 
 372         if (irqno > 7) {
 373                 vectmask = 1 << (irqno - 8);
 374                 i = 0;
 375         } else {
 376                 vectmask = 1 << irqno;
 377                 i = 1;
 378         }
 379 
 380         pp = &pics0;
 381 
 382         /*
 383          * check any handlers left for this irqno