modified devtime to print out raw data

--HG--
extra : convert_revision : 5ad673d6f684acaffeb61db794f7e2ac099ba99d
This commit is contained in:
Ali Saidi 2004-07-12 22:51:20 -04:00
parent ef16b46484
commit c2e5caf360

View file

@ -46,7 +46,6 @@
#define DRIVER_DESC "Interface to time uncacachable read and writes to device registers" #define DRIVER_DESC "Interface to time uncacachable read and writes to device registers"
#define DRIVER_VER "0.1" #define DRIVER_VER "0.1"
static unsigned long devCnt, devSum, devSsq;
static char *dataAddr = NULL; static char *dataAddr = NULL;
static int count = 0; static int count = 0;
@ -55,35 +54,43 @@ static inline uint32_t cycleCounter(uint32_t dep);
static int __init devtime_start(void) static int __init devtime_start(void)
{ {
uint64_t addr; uint64_t addr;
uint32_t t1, t2; uint32_t t1, t2;
uint32_t trash; uint32_t trash;
int x; int x;
uint32_t *times;
uint32_t num = 0;
struct net_device *dev; struct net_device *dev;
printk("Devtime Driver Version %s Loaded...\n", DRIVER_VER); printk("Devtime Driver Version %s Loaded...\n", DRIVER_VER);
if (dataAddr != 0 && count != 0) { if ((dataAddr != 0) && (count != 0))
{
addr = simple_strtoull(dataAddr, NULL, 0); addr = simple_strtoull(dataAddr, NULL, 0);
devSum = 0;
devCnt = count;
addr = ioremap(addr, PAGE_SIZE); addr = ioremap(addr, PAGE_SIZE);
/** /**
* Make sure that the remapping actually worked. On alpha we have * Make sure that the remapping actually worked. On alpha we have
* linear addressing, so its not a problem. But it can fail in x86 * linear addressing, so its not a problem. But it can fail in x86
* if physical memory is mapped to this address. * if physical memory is mapped to this address.
*/ */
if (addr) { times = kmalloc(sizeof(uint32_t) * count, GFP_USER);
if (!times)
{
printk("Could not allocate memory... Try again later.\n");
return -1;
}
if (addr)
{
printk("Preparing to read %#llx %d times.\n", addr, count); printk("Preparing to read %#llx %d times.\n", addr, count);
t1 = cycleCounter(trash); t1 = cycleCounter(trash);
for (x = 0; x < count; x++) { for (x=0; x < count; x++)
{
trash = readl(addr); trash = readl(addr);
t2 = cycleCounter(trash); t2 = cycleCounter(trash);
devSum += t2 - t1; times[num++] = t2 - t1;
t1 = t2; t1 = t2;
} }
@ -92,26 +99,37 @@ static int __init devtime_start(void)
*/ */
iounmap(addr); iounmap(addr);
printk("Read Address %#llx %ld times. Average latency %ld.\n", printk("Measurements:\n");
addr, devCnt, devSum/devCnt); for (x = 0; x < count; x++)
{
printk("%d ", times[x]);
if (((x+1) % 10) == 0)
printk("\n");
}
printk("\nDone.\n");
} }
else else
printk("Unable to remap address. Please try again later.\n"); printk("Unable to remap address. Please try again later.\n");
} else { } else {
dev = dev_get_by_name("eth0"); dev = dev_get_by_name("eth0");
if (dev) { if (dev)
printk("Eth0: MemStart: %#lx MemEnd: %#lx I/O Addr: %#lx\n", {
dev->mem_start, dev->mem_end, dev->base_addr); printk("Eth0: MemStart: %#lx MemEnd: %#lx I/O Addr: %#lx\n", dev->mem_start,
dev->mem_end, dev->base_addr);
dev_put(dev); dev_put(dev);
} }
dev = 0; dev = 0;
dev = dev_get_by_name("eth1"); dev = dev_get_by_name("eth1");
if (dev) { if (dev)
printk("Eth1: MemStart: %#lx MemEnd: %#lx I/O Addr: %#lx\n", {
dev->mem_start, dev->mem_end, dev->base_addr); printk("Eth1: MemStart: %#lx MemEnd: %#lx I/O Addr: %#lx\n", dev->mem_start,
dev->mem_end, dev->base_addr);
dev_put(dev); dev_put(dev);
} }
printk("Required information not supplied.\n"); printk("Required information not supplied.\n");
} }
@ -141,8 +159,7 @@ inline uint32_t cycleCounter(uint32_t dep)
#error Architecture NOT SUPPORTE #error Architecture NOT SUPPORTE
#endif #endif
static void __exit devtime_end(void) static void __exit devtime_end(void) {
{
printk("Devtime Driver Version %s Unloaded...\n", DRIVER_VER); printk("Devtime Driver Version %s Unloaded...\n", DRIVER_VER);
} }
@ -150,7 +167,7 @@ static void __exit devtime_end(void)
module_init(devtime_start); module_init(devtime_start);
module_exit(devtime_end); module_exit(devtime_end);
MODULE_LICENSE("BSD"); MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);
module_param(dataAddr, charp, 0); module_param(dataAddr, charp, 0);