bit操作

#define BIT(nr)                 (1UL << (nr))
#define BIT_MASK(nr)            (1UL << ((nr) % BITS_PER_LONG))
#define BIT_WORD(nr)            ((nr) / BITS_PER_LONG)
#define BITS_PER_BYTE           8
#define BITS_TO_LONGS(nr)       DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))

 

 

#define DECLARE_BITMAP(name,bits) /
 unsigned long name[BITS_TO_LONGS(bits)]

  

039 /**
040  * Bitmap of enabled clocks, excluding ACPU which is always
041  * enabled
042  */
043 static DECLARE_BITMAP(clock_map_enabled, NR_CLKS);
044 static DEFINE_SPINLOCK(clock_map_lock);

 

clock_map_enabled[BIT_WORD(clk->id)] &= ~BIT_MASK(clk->id);

 

        clock_map_enabled[BIT_WORD(clk->id)] |= BIT_MASK(clk->id);

 

int clk_enable(struct clk *clk)

076 {
077     unsigned long flags;
078     spin_lock_irqsave(&clocks_lock, flags);
079     clk->count++;
080     if (clk->count == 1) {
081         clk->ops->enable(clk->id);
082         spin_lock(&clock_map_lock);
083         clock_map_enabled[BIT_WORD(clk->id)] |= BIT_MASK(clk->id);
084         spin_unlock(&clock_map_lock);
085     }
086     spin_unlock_irqrestore(&clocks_lock, flags);
087     return 0;
088 }
089 EXPORT_SYMBOL(clk_enable);
090   
091 void clk_disable(struct clk *clk)
092 {
093     unsigned long flags;
094     spin_lock_irqsave(&clocks_lock, flags);
095     BUG_ON(clk->count == 0);
096     clk->count--;
097     if (clk->count == 0) {
098         clk->ops->disable(clk->id);
099         spin_lock(&clock_map_lock);
100         clock_map_enabled[BIT_WORD(clk->id)] &= ~BIT_MASK(clk->id);
101         spin_unlock(&clock_map_lock);
102     }
103     spin_unlock_irqrestore(&clocks_lock, flags);
104 }
105 EXPORT_SYMBOL(clk_disable);
void check_clk_is_enable(int clkid)
{
if(clock_map_enabled[BIT_WORD(clkid)] & BIT_MASK(clkid))
{
printk("clk->id %d is enable/n", clkid);
}
}

你可能感兴趣的:(struct,UP,div,byte)