cregit-Linux how code gets into the kernel

Release 4.11 arch/arm/mach-rpc/time.c

/*
 *  linux/arch/arm/common/time-acorn.c
 *
 *  Copyright (c) 1996-2000 Russell King.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 *  Changelog:
 *   24-Sep-1996        RMK     Created
 *   10-Oct-1996        RMK     Brought up to date with arch-sa110eval
 *   04-Dec-1997        RMK     Updated for new arch/arm/time.c
 *   13=Jun-2004        DS      Moved to arch/arm/common b/c shared w/CLPS7500
 */
#include <linux/timex.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/io.h>

#include <mach/hardware.h>
#include <asm/hardware/ioc.h>

#include <asm/mach/time.h>


#define RPC_CLOCK_FREQ 2000000

#define RPC_LATCH DIV_ROUND_CLOSEST(RPC_CLOCK_FREQ, HZ)


static u32 ioc_timer_gettimeoffset(void) { unsigned int count1, count2, status; long offset; ioc_writeb (0, IOC_T0LATCH); barrier (); count1 = ioc_readb(IOC_T0CNTL) | (ioc_readb(IOC_T0CNTH) << 8); barrier (); status = ioc_readb(IOC_IRQREQA); barrier (); ioc_writeb (0, IOC_T0LATCH); barrier (); count2 = ioc_readb(IOC_T0CNTL) | (ioc_readb(IOC_T0CNTH) << 8); offset = count2; if (count2 < count1) { /* * We have not had an interrupt between reading count1 * and count2. */ if (status & (1 << 5)) offset -= RPC_LATCH; } else if (count2 > count1) { /* * We have just had another interrupt between reading * count1 and count2. */ offset -= RPC_LATCH; } offset = (RPC_LATCH - offset) * (tick_nsec / 1000); return DIV_ROUND_CLOSEST(offset, RPC_LATCH) * 1000; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)11174.50%116.67%
Russell King1912.75%233.33%
Uwe Kleine-König85.37%116.67%
Linus Torvalds74.70%116.67%
Stephen Warren42.68%116.67%
Total149100.00%6100.00%


void __init ioctime_init(void) { ioc_writeb(RPC_LATCH & 255, IOC_T0LTCHL); ioc_writeb(RPC_LATCH >> 8, IOC_T0LTCHH); ioc_writeb(0, IOC_T0GO); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)2781.82%125.00%
Linus Torvalds39.09%125.00%
Uwe Kleine-König26.06%125.00%
Russell King13.03%125.00%
Total33100.00%4100.00%


static irqreturn_t ioc_timer_interrupt(int irq, void *dev_id) { timer_tick(); return IRQ_HANDLED; }

Contributors

PersonTokensPropCommitsCommitProp
Russell King1894.74%150.00%
Linus Torvalds15.26%150.00%
Total19100.00%2100.00%

static struct irqaction ioc_timer_irq = { .name = "timer", .handler = ioc_timer_interrupt }; /* * Set up timer interrupt. */
void __init ioc_timer_init(void) { arch_gettimeoffset = ioc_timer_gettimeoffset; ioctime_init(); setup_irq(IRQ_TIMER0, &ioc_timer_irq); }

Contributors

PersonTokensPropCommitsCommitProp
Russell King1773.91%250.00%
Stephen Warren417.39%125.00%
Linus Torvalds (pre-git)28.70%125.00%
Total23100.00%4100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)15355.64%215.38%
Russell King7828.36%538.46%
Uwe Kleine-König186.55%17.69%
Linus Torvalds114.00%215.38%
Stephen Warren82.91%17.69%
Deepak Saxena41.45%17.69%
Thomas Gleixner31.09%17.69%
Total275100.00%13100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.