aic7xxx: remove aiclib.c
Subsystems (2)
PATCH 1/1 aic7xxx: remove aiclib.c
#include of C files and macro tricks to rename symbols are evil and just cause trouble. Let's doublicate the two functions as they're going to go away soon enough anyway.
drivers/scsi/aic7xxx/aic79xx_osm.c +84 -12
@@ -48,12 +48,6 @@static struct scsi_transport_template *ahd_linux_transport_template =NULL ; -/* -* Include aiclib.c as part of our -* "module dependencies are hard" work around. -*/ -#include "aiclib.c" -#include <linux/init.h> /* __setup */ #include <linux/mm.h> /* For fetching system memory size */ #include <linux/blkdev.h> /* For block_size() */
@@ -372,8 +366,6 @@ struct ahd_linux_device *, struct scsi_cmnd *);static void ahd_linux_setup_tag_info_global (char *p); -static aic_option_callback_t ahd_linux_setup_tag_info; -static aic_option_callback_t ahd_linux_setup_iocell_info;static int aic79xx_setup (char *c);static int ahd_linux_unit;
@@ -907,6 +899,86 @@ } } +static char * +ahd_parse_brace_option (char *opt_name,char *opt_arg,char *end,int depth, +void (*callback)(u_long ,int ,int ,int32_t ), +u_long callback_arg) +{ +char *tok_end; +char *tok_end2; +int i; +int instance; +int targ; +int done; +char tok_list[] = {'.' ,',' ,'{' ,'}' ,'\0' }; + +/* All options use a ':' name/arg separator */ +if (*opt_arg !=':' ) +return (opt_arg); + opt_arg++; + instance =-1 ; + targ =-1 ; + done = FALSE; +/* +* Restore separator that may be in +* the middle of our option argument. +*/ + tok_end =strchr (opt_arg,'\0' ); +if (tok_end < end) + *tok_end =',' ; +while (!done) { +switch (*opt_arg) { +case '{' : +if (instance ==-1 ) { + instance =0 ; + }else { +if (depth >1 ) { +if (targ ==-1 ) + targ =0 ; + }else { +printf ("Malformed Option %s\n" , + opt_name); + done = TRUE; + } + } + opt_arg++; +break ; +case '}' : +if (targ !=-1 ) + targ =-1 ; +else if (instance !=-1 ) + instance =-1 ; + opt_arg++; +break ; +case ',' : +case '.' : +if (instance ==-1 ) + done = TRUE; +else if (targ >=0 ) + targ++; +else if (instance >=0 ) + instance++; + opt_arg++; +break ; +case '\0' : + done = TRUE; +break ; +default : + tok_end = end; +for (i =0 ; tok_list[i]; i++) { + tok_end2 =strchr (opt_arg, tok_list[i]); +if ((tok_end2) && (tok_end2 < tok_end)) + tok_end = tok_end2; + } +callback (callback_arg, instance, targ, +simple_strtol (opt_arg,NULL ,0 )); + opt_arg = tok_end; +break ; + } + } +return (opt_arg); +} +/* * Handle Linux boot parameters. This routine allows for assigning a value * to a parameter with a ':' between the parameter and the value.
@@ -964,18 +1036,18 @@if (strncmp (p,"global_tag_depth" , n) ==0 ) {ahd_linux_setup_tag_info_global (p + n); }else if (strncmp (p,"tag_info" , n) ==0 ) { - s =aic_parse_brace_option ("tag_info" , p + n, end, + s =ahd_parse_brace_option ("tag_info" , p + n, end,2 , ahd_linux_setup_tag_info,0 ); }else if (strncmp (p,"slewrate" , n) ==0 ) { - s =aic_parse_brace_option ("slewrate" , + s =ahd_parse_brace_option ("slewrate" , p + n, end,1 , ahd_linux_setup_iocell_info,AIC79XX_SLEWRATE_INDEX ); }else if (strncmp (p,"precomp" , n) ==0 ) { - s =aic_parse_brace_option ("precomp" , + s =ahd_parse_brace_option ("precomp" , p + n, end,1 , ahd_linux_setup_iocell_info,AIC79XX_PRECOMP_INDEX ); }else if (strncmp (p,"amplitude" , n) ==0 ) { - s =aic_parse_brace_option ("amplitude" , + s =ahd_parse_brace_option ("amplitude" , p + n, end,1 , ahd_linux_setup_iocell_info,AIC79XX_AMPLITUDE_INDEX ); }else if (p[n] ==':' ) {
drivers/scsi/aic7xxx/aic79xx_proc.c +44 -1
57 lines not on this page · raw message
drivers/scsi/aic7xxx/aic7xxx_osm.c +81 -8
113 lines not on this page · raw message
drivers/scsi/aic7xxx/aic7xxx_proc.c +44 -1
57 lines not on this page · raw message
drivers/scsi/aic7xxx/aiclib.c +0 -121
124 lines not on this page · raw message
drivers/scsi/aic7xxx/aiclib.h +0 -22
@@ -141,28 +141,6 @@return (int )capacity; } -/**************************** Module Library Hack *****************************/ -/* -* What we'd like to do is have a single "scsi library" module that both the -* aic7xxx and aic79xx drivers could load and depend on. A cursory examination -* of implementing module dependencies in Linux (handling the install and -* initrd cases) does not look promissing. For now, we just duplicate this -* code in both drivers using a simple symbol renaming scheme that hides this -* hack from the drivers. -*/ -#define AIC_LIB_ENTRY_CONCAT (x, prefix) prefix ## x -#define AIC_LIB_ENTRY_EXPAND (x, prefix) AIC_LIB_ENTRY_CONCAT(x, prefix) -#define AIC_LIB_ENTRY (x) AIC_LIB_ENTRY_EXPAND(x, AIC_LIB_PREFIX) - -#define aic_calc_syncsrate AIC_LIB_ENTRY(_calc_syncrate) - -u_int aic_calc_syncsrate (u_int /*period_factor*/ ); - -typedef void aic_option_callback_t (u_long ,int ,int ,int32_t ); -char *aic_parse_brace_option (char *opt_name,char *opt_arg, -char *end,int depth, -aic_option_callback_t *,u_long ); -static __inlineuint32_t scsi_4btoul (uint8_t *bytes) {