diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1999-10-09 00:00:47 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1999-10-09 00:00:47 +0000 |
commit | d6434e1042f3b0a6dfe1b1f615af369486f9b1fa (patch) | |
tree | e2be02f33984c48ec019c654051d27964e42c441 /drivers/i2o/i2o_proc.c | |
parent | 609d1e803baf519487233b765eb487f9ec227a18 (diff) |
Merge with 2.3.19.
Diffstat (limited to 'drivers/i2o/i2o_proc.c')
-rw-r--r-- | drivers/i2o/i2o_proc.c | 107 |
1 files changed, 19 insertions, 88 deletions
diff --git a/drivers/i2o/i2o_proc.c b/drivers/i2o/i2o_proc.c index 2bb9fcfc4..cbb29bc5b 100644 --- a/drivers/i2o/i2o_proc.c +++ b/drivers/i2o/i2o_proc.c @@ -1,9 +1,9 @@ /* * procfs handler for Linux I2O subsystem * - * Copyright (c) 1999 Intel Corporation + * Copyright (c) 1999 Deepak Saxena * - * Originally written by Deepak Saxena(deepak.saxena@intel.com) + * Originally written by Deepak Saxena(deepak@plexity.net) * * This program is free software. You can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -45,11 +45,11 @@ #include <linux/init.h> #include <linux/module.h> #include <linux/errno.h> +#include <linux/spinlock.h> #include <asm/io.h> #include <asm/uaccess.h> #include <asm/byteorder.h> -#include <asm/spinlock.h> #include "i2o_proc.h" @@ -143,7 +143,8 @@ static struct i2o_handler i2o_proc_handler = { (void *)i2o_proc_reply, "I2O procfs Layer", - 0 + 0, + 0xffffffff // All classes }; /* @@ -313,48 +314,17 @@ int i2o_proc_read_hrt(char *buf, char **start, off_t offset, int len, int *eof, void *data) { struct i2o_controller *c = (struct i2o_controller *)data; - pi2o_hrt hrt; - u32 msg[6]; - u32 *workspace; + pi2o_hrt hrt = (pi2o_hrt)c->hrt; u32 bus; int count; int i; - int token; spin_lock(&i2o_proc_lock); len = 0; - workspace = kmalloc(2048, GFP_KERNEL); - hrt = (pi2o_hrt)workspace; - if(workspace==NULL) - { - len += sprintf(buf, "No free memory for HRT buffer\n"); - spin_unlock(&i2o_proc_lock); - return len; - } - - memset(workspace, 0, 2048); - - msg[0]= SIX_WORD_MSG_SIZE| SGL_OFFSET_4; - msg[1]= I2O_CMD_HRT_GET<<24 | HOST_TID<<12 | ADAPTER_TID; - msg[2]= (u32)proc_context; - msg[3]= 0; - msg[4]= (0xD0000000 | 2048); - msg[5]= virt_to_phys(workspace); - - token = i2o_post_wait(c, ADAPTER_TID, msg, 6*4, &i2o_proc_token,2); - if(token == I2O_POST_WAIT_TIMEOUT) - { - kfree(workspace); - len += sprintf(buf, "Timeout waiting for HRT\n"); - spin_unlock(&i2o_proc_lock); - return len; - } - if(hrt->hrt_version) { - kfree(workspace); len += sprintf(buf+len, "HRT table for controller is too new a version.\n"); spin_unlock(&i2o_proc_lock); @@ -365,7 +335,6 @@ int i2o_proc_read_hrt(char *buf, char **start, off_t offset, int len, if((count * hrt->entry_len + 8) > 2048) { printk(KERN_WARNING "i2o_proc: HRT does not fit into buffer\n"); - kfree(workspace); len += sprintf(buf+len, "HRT table too big to fit in buffer.\n"); spin_unlock(&i2o_proc_lock); @@ -447,8 +416,6 @@ int i2o_proc_read_hrt(char *buf, char **start, off_t offset, int len, len += sprintf(buf+len, " Unknown Bus Type\n"); } - kfree(workspace); - spin_unlock(&i2o_proc_lock); return len; @@ -458,11 +425,8 @@ int i2o_proc_read_lct(char *buf, char **start, off_t offset, int len, int *eof, void *data) { struct i2o_controller *c = (struct i2o_controller*)data; - u32 msg[8]; - u32 *workspace; - pi2o_lct lct; /* = (pi2o_lct)c->lct; */ + pi2o_lct lct = (pi2o_lct)c->lct; int entries; - int token; int i; #define BUS_TABLE_SIZE 3 @@ -477,35 +441,6 @@ int i2o_proc_read_lct(char *buf, char **start, off_t offset, int len, len = 0; - workspace = kmalloc(8192, GFP_KERNEL); - lct = (pi2o_lct)workspace; - if(workspace==NULL) - { - len += sprintf(buf, "No free memory for LCT buffer\n"); - spin_unlock(&i2o_proc_lock); - return len; - } - - memset(workspace, 0, 8192); - - msg[0] = FOUR_WORD_MSG_SIZE|SGL_OFFSET_6; - msg[1] = I2O_CMD_LCT_NOTIFY<<24 | HOST_TID<<12 | ADAPTER_TID; - msg[2] = (u32)proc_context; - msg[3] = 0; - msg[4] = 0xFFFFFFFF; /* All devices */ - msg[5] = 0x00000000; /* Report now */ - msg[6] = 0xD0000000|8192; - msg[7] = virt_to_bus(workspace); - - token = i2o_post_wait(c, ADAPTER_TID, msg, 8*4, &i2o_proc_token,2); - if(token == I2O_POST_WAIT_TIMEOUT) - { - kfree(workspace); - len += sprintf(buf, "Timeout waiting for LCT\n"); - spin_unlock(&i2o_proc_lock); - return len; - } - entries = (lct->table_size - 3)/9; len += sprintf(buf, "LCT contains %d %s\n", entries, @@ -617,7 +552,6 @@ int i2o_proc_read_lct(char *buf, char **start, off_t offset, int len, lct->lct_entry[i].device_flags); } - kfree(workspace); spin_unlock(&i2o_proc_lock); return len; @@ -985,8 +919,8 @@ int i2o_proc_read_ddm_table(char *buf, char **start, off_t offset, int len, len += sprintf(buf+len, " "); } - len += sprintf(buf+len, "%-0#7x", ddm_table.i2o_vendor_id); - len += sprintf(buf+len, "%-0#7x", ddm_table.module_id); + len += sprintf(buf+len, "%0#7x", ddm_table.i2o_vendor_id); + len += sprintf(buf+len, "%0#7x", ddm_table.module_id); len += sprintf(buf+len, "%-25s", chtostr(ddm_table.module_name, 24)); len += sprintf(buf+len, "%-6s", chtostr(ddm_table.module_version,4)); len += sprintf(buf+len, "%8d ", ddm_table.data_size); @@ -1122,8 +1056,8 @@ int i2o_proc_read_dst(char *buf, char **start, off_t offset, int len, len += sprintf(buf+len, "%-d", dst.module_state); #endif - len += sprintf(buf+len, "%-0#7x", dst.i2o_vendor_id); - len += sprintf(buf+len, "%-0#8x", dst.module_id); + len += sprintf(buf+len, "%#7x", dst.i2o_vendor_id); + len += sprintf(buf+len, "%#8x", dst.module_id); len += sprintf(buf+len, "%-29s", chtostr(dst.module_name_version,28)); len += sprintf(buf+len, "%-9s", chtostr(dst.date,8)); len += sprintf(buf+len, "%8d ", dst.module_size); @@ -1197,7 +1131,7 @@ int i2o_proc_read_groups(char *buf, char **start, off_t offset, int len, { len += sprintf(buf+len, "%-3d", i); - len += sprintf(buf+len, "%-0#6x ", group[0]); + len += sprintf(buf+len, "%#6x ", group[0]); len += sprintf(buf+len, "%10d ", group[1]); len += sprintf(buf+len, "%8d ", group[2]); @@ -1927,8 +1861,8 @@ int i2o_proc_read_lan_dev_info(char *buf, char **start, off_t offset, int len, work8[16],work8[17],work8[18],work8[19], work8[20],work8[21],work8[22],work8[23]); - len += sprintf(buf+len, "Max Tx wire speed : %d bps\n", work64[3]); - len += sprintf(buf+len, "Max Rx wire speed : %d bps\n", work64[4]); + len += sprintf(buf+len, "Max Tx wire speed : %d bps\n", (int)work64[3]); + len += sprintf(buf+len, "Max Rx wire speed : %d bps\n", (int)work64[4]); len += sprintf(buf+len, "Min SDU packet size : 0x%08x\n", work32[10]); len += sprintf(buf+len, "Max SDU packet size : 0x%08x\n", work32[11]); @@ -2231,8 +2165,8 @@ int i2o_proc_read_lan_media_operation(char *buf, char **start, off_t offset, len += sprintf(buf+len, "Connection type : %s\n", i2o_get_connection_type(work32[1])); - len += sprintf(buf+len, "Current Tx wire speed : %d bps\n", work64[1]); - len += sprintf(buf+len, "Current Rx wire speed : %d bps\n", work64[2]); + len += sprintf(buf+len, "Current Tx wire speed : %d bps\n", (int)work64[1]); + len += sprintf(buf+len, "Current Rx wire speed : %d bps\n", (int)work64[2]); len += sprintf(buf+len, "Duplex mode : %s duplex\n", (work8[24]&1)?"Full":"Half"); @@ -3045,9 +2979,6 @@ static int destroy_i2o_procfs(void) struct i2o_controller *pctrl = NULL; int i; - if(!i2o_find_controller(0)) - return -1; - for(i = 0; i < MAX_I2O_CONTROLLERS; i++) { pctrl = i2o_find_controller(i); @@ -3056,7 +2987,7 @@ static int destroy_i2o_procfs(void) i2o_proc_remove_controller(pctrl, i2o_proc_dir_root); i2o_unlock_controller(pctrl); } - }; + } if(!i2o_proc_dir_root->count) remove_proc_entry("i2o", 0); @@ -3070,7 +3001,7 @@ static int destroy_i2o_procfs(void) #define i2o_proc_init init_module #endif -__init int i2o_proc_init(void) +int __init i2o_proc_init(void) { if(create_i2o_procfs()) return -EBUSY; @@ -3089,7 +3020,7 @@ __init int i2o_proc_init(void) #ifdef MODULE -MODULE_AUTHOR("Intel Corporation"); +MODULE_AUTHOR("Deepak Saxena"); MODULE_DESCRIPTION("I2O procfs Handler"); void cleanup_module(void) |