Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

advansys: switch to ->show_info()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro b59fb6fd 63fd57cb

+320 -830
+320 -830
drivers/scsi/advansys.c
··· 2178 2178 2179 2179 #define ASC_INFO_SIZE 128 /* advansys_info() line size */ 2180 2180 2181 - #ifdef CONFIG_PROC_FS 2182 - /* /proc/scsi/advansys/[0...] related definitions */ 2183 - #define ASC_PRTBUF_SIZE 2048 2184 - #define ASC_PRTLINE_SIZE 160 2185 - 2186 - #define ASC_PRT_NEXT() \ 2187 - if (cp) { \ 2188 - totlen += len; \ 2189 - leftlen -= len; \ 2190 - if (leftlen == 0) { \ 2191 - return totlen; \ 2192 - } \ 2193 - cp += len; \ 2194 - } 2195 - #endif /* CONFIG_PROC_FS */ 2196 - 2197 2181 /* Asc Library return codes */ 2198 2182 #define ASC_TRUE 1 2199 2183 #define ASC_FALSE 0 ··· 2368 2384 } eep_config; 2369 2385 ulong last_reset; /* Saved last reset time */ 2370 2386 /* /proc/scsi/advansys/[0...] */ 2371 - char *prtbuf; /* /proc print buffer */ 2372 2387 #ifdef ADVANSYS_STATS 2373 2388 struct asc_stats asc_stats; /* Board statistics */ 2374 2389 #endif /* ADVANSYS_STATS */ ··· 2858 2875 } 2859 2876 2860 2877 #ifdef CONFIG_PROC_FS 2861 - /* 2862 - * asc_prt_line() 2863 - * 2864 - * If 'cp' is NULL print to the console, otherwise print to a buffer. 2865 - * 2866 - * Return 0 if printing to the console, otherwise return the number of 2867 - * bytes written to the buffer. 2868 - * 2869 - * Note: If any single line is greater than ASC_PRTLINE_SIZE bytes the stack 2870 - * will be corrupted. 's[]' is defined to be ASC_PRTLINE_SIZE bytes. 2871 - */ 2872 - static int asc_prt_line(char *buf, int buflen, char *fmt, ...) 2873 - { 2874 - va_list args; 2875 - int ret; 2876 - char s[ASC_PRTLINE_SIZE]; 2877 - 2878 - va_start(args, fmt); 2879 - ret = vsprintf(s, fmt, args); 2880 - BUG_ON(ret >= ASC_PRTLINE_SIZE); 2881 - if (buf == NULL) { 2882 - (void)printk(s); 2883 - ret = 0; 2884 - } else { 2885 - ret = min(buflen, ret); 2886 - memcpy(buf, s, ret); 2887 - } 2888 - va_end(args); 2889 - return ret; 2890 - } 2891 2878 2892 2879 /* 2893 2880 * asc_prt_board_devices() 2894 2881 * 2895 2882 * Print driver information for devices attached to the board. 2896 - * 2897 - * Note: no single line should be greater than ASC_PRTLINE_SIZE, 2898 - * cf. asc_prt_line(). 2899 - * 2900 - * Return the number of characters copied into 'cp'. No more than 2901 - * 'cplen' characters will be copied to 'cp'. 2902 2883 */ 2903 - static int asc_prt_board_devices(struct Scsi_Host *shost, char *cp, int cplen) 2884 + static void asc_prt_board_devices(struct seq_file *m, struct Scsi_Host *shost) 2904 2885 { 2905 2886 struct asc_board *boardp = shost_priv(shost); 2906 - int leftlen; 2907 - int totlen; 2908 - int len; 2909 2887 int chip_scsi_id; 2910 2888 int i; 2911 2889 2912 - leftlen = cplen; 2913 - totlen = len = 0; 2914 - 2915 - len = asc_prt_line(cp, leftlen, 2916 - "\nDevice Information for AdvanSys SCSI Host %d:\n", 2917 - shost->host_no); 2918 - ASC_PRT_NEXT(); 2890 + seq_printf(m, 2891 + "\nDevice Information for AdvanSys SCSI Host %d:\n", 2892 + shost->host_no); 2919 2893 2920 2894 if (ASC_NARROW_BOARD(boardp)) { 2921 2895 chip_scsi_id = boardp->dvc_cfg.asc_dvc_cfg.chip_scsi_id; ··· 2880 2940 chip_scsi_id = boardp->dvc_var.adv_dvc_var.chip_scsi_id; 2881 2941 } 2882 2942 2883 - len = asc_prt_line(cp, leftlen, "Target IDs Detected:"); 2884 - ASC_PRT_NEXT(); 2943 + seq_printf(m, "Target IDs Detected:"); 2885 2944 for (i = 0; i <= ADV_MAX_TID; i++) { 2886 - if (boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) { 2887 - len = asc_prt_line(cp, leftlen, " %X,", i); 2888 - ASC_PRT_NEXT(); 2889 - } 2945 + if (boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) 2946 + seq_printf(m, " %X,", i); 2890 2947 } 2891 - len = asc_prt_line(cp, leftlen, " (%X=Host Adapter)\n", chip_scsi_id); 2892 - ASC_PRT_NEXT(); 2893 - 2894 - return totlen; 2948 + seq_printf(m, " (%X=Host Adapter)\n", chip_scsi_id); 2895 2949 } 2896 2950 2897 2951 /* 2898 2952 * Display Wide Board BIOS Information. 2899 2953 */ 2900 - static int asc_prt_adv_bios(struct Scsi_Host *shost, char *cp, int cplen) 2954 + static void asc_prt_adv_bios(struct seq_file *m, struct Scsi_Host *shost) 2901 2955 { 2902 2956 struct asc_board *boardp = shost_priv(shost); 2903 - int leftlen; 2904 - int totlen; 2905 - int len; 2906 2957 ushort major, minor, letter; 2907 2958 2908 - leftlen = cplen; 2909 - totlen = len = 0; 2910 - 2911 - len = asc_prt_line(cp, leftlen, "\nROM BIOS Version: "); 2912 - ASC_PRT_NEXT(); 2959 + seq_printf(m, "\nROM BIOS Version: "); 2913 2960 2914 2961 /* 2915 2962 * If the BIOS saved a valid signature, then fill in 2916 2963 * the BIOS code segment base address. 2917 2964 */ 2918 2965 if (boardp->bios_signature != 0x55AA) { 2919 - len = asc_prt_line(cp, leftlen, "Disabled or Pre-3.1\n"); 2920 - ASC_PRT_NEXT(); 2921 - len = asc_prt_line(cp, leftlen, 2922 - "BIOS either disabled or Pre-3.1. If it is pre-3.1, then a newer version\n"); 2923 - ASC_PRT_NEXT(); 2924 - len = asc_prt_line(cp, leftlen, 2925 - "can be found at the ConnectCom FTP site: ftp://ftp.connectcom.net/pub\n"); 2926 - ASC_PRT_NEXT(); 2966 + seq_printf(m, "Disabled or Pre-3.1\n"); 2967 + seq_printf(m, 2968 + "BIOS either disabled or Pre-3.1. If it is pre-3.1, then a newer version\n"); 2969 + seq_printf(m, 2970 + "can be found at the ConnectCom FTP site: ftp://ftp.connectcom.net/pub\n"); 2927 2971 } else { 2928 2972 major = (boardp->bios_version >> 12) & 0xF; 2929 2973 minor = (boardp->bios_version >> 8) & 0xF; 2930 2974 letter = (boardp->bios_version & 0xFF); 2931 2975 2932 - len = asc_prt_line(cp, leftlen, "%d.%d%c\n", 2976 + seq_printf(m, "%d.%d%c\n", 2933 2977 major, minor, 2934 2978 letter >= 26 ? '?' : letter + 'A'); 2935 - ASC_PRT_NEXT(); 2936 - 2937 2979 /* 2938 2980 * Current available ROM BIOS release is 3.1I for UW 2939 2981 * and 3.2I for U2W. This code doesn't differentiate ··· 2923 3001 */ 2924 3002 if (major < 3 || (major <= 3 && minor < 1) || 2925 3003 (major <= 3 && minor <= 1 && letter < ('I' - 'A'))) { 2926 - len = asc_prt_line(cp, leftlen, 2927 - "Newer version of ROM BIOS is available at the ConnectCom FTP site:\n"); 2928 - ASC_PRT_NEXT(); 2929 - len = asc_prt_line(cp, leftlen, 2930 - "ftp://ftp.connectcom.net/pub\n"); 2931 - ASC_PRT_NEXT(); 3004 + seq_printf(m, 3005 + "Newer version of ROM BIOS is available at the ConnectCom FTP site:\n"); 3006 + seq_printf(m, 3007 + "ftp://ftp.connectcom.net/pub\n"); 2932 3008 } 2933 3009 } 2934 - 2935 - return totlen; 2936 3010 } 2937 3011 2938 3012 /* ··· 3033 3115 * asc_prt_asc_board_eeprom() 3034 3116 * 3035 3117 * Print board EEPROM configuration. 3036 - * 3037 - * Note: no single line should be greater than ASC_PRTLINE_SIZE, 3038 - * cf. asc_prt_line(). 3039 - * 3040 - * Return the number of characters copied into 'cp'. No more than 3041 - * 'cplen' characters will be copied to 'cp'. 3042 3118 */ 3043 - static int asc_prt_asc_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen) 3119 + static void asc_prt_asc_board_eeprom(struct seq_file *m, struct Scsi_Host *shost) 3044 3120 { 3045 3121 struct asc_board *boardp = shost_priv(shost); 3046 3122 ASC_DVC_VAR *asc_dvc_varp; 3047 - int leftlen; 3048 - int totlen; 3049 - int len; 3050 3123 ASCEEP_CONFIG *ep; 3051 3124 int i; 3052 3125 #ifdef CONFIG_ISA ··· 3048 3139 asc_dvc_varp = &boardp->dvc_var.asc_dvc_var; 3049 3140 ep = &boardp->eep_config.asc_eep; 3050 3141 3051 - leftlen = cplen; 3052 - totlen = len = 0; 3053 - 3054 - len = asc_prt_line(cp, leftlen, 3055 - "\nEEPROM Settings for AdvanSys SCSI Host %d:\n", 3056 - shost->host_no); 3057 - ASC_PRT_NEXT(); 3142 + seq_printf(m, 3143 + "\nEEPROM Settings for AdvanSys SCSI Host %d:\n", 3144 + shost->host_no); 3058 3145 3059 3146 if (asc_get_eeprom_string((ushort *)&ep->adapter_info[0], serialstr) 3060 - == ASC_TRUE) { 3061 - len = 3062 - asc_prt_line(cp, leftlen, " Serial Number: %s\n", 3063 - serialstr); 3064 - ASC_PRT_NEXT(); 3065 - } else { 3066 - if (ep->adapter_info[5] == 0xBB) { 3067 - len = asc_prt_line(cp, leftlen, 3068 - " Default Settings Used for EEPROM-less Adapter.\n"); 3069 - ASC_PRT_NEXT(); 3070 - } else { 3071 - len = asc_prt_line(cp, leftlen, 3072 - " Serial Number Signature Not Present.\n"); 3073 - ASC_PRT_NEXT(); 3074 - } 3075 - } 3147 + == ASC_TRUE) 3148 + seq_printf(m, " Serial Number: %s\n", serialstr); 3149 + else if (ep->adapter_info[5] == 0xBB) 3150 + seq_printf(m, 3151 + " Default Settings Used for EEPROM-less Adapter.\n"); 3152 + else 3153 + seq_printf(m, 3154 + " Serial Number Signature Not Present.\n"); 3076 3155 3077 - len = asc_prt_line(cp, leftlen, 3078 - " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n", 3079 - ASC_EEP_GET_CHIP_ID(ep), ep->max_total_qng, 3080 - ep->max_tag_qng); 3081 - ASC_PRT_NEXT(); 3156 + seq_printf(m, 3157 + " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n", 3158 + ASC_EEP_GET_CHIP_ID(ep), ep->max_total_qng, 3159 + ep->max_tag_qng); 3082 3160 3083 - len = asc_prt_line(cp, leftlen, 3084 - " cntl 0x%x, no_scam 0x%x\n", ep->cntl, ep->no_scam); 3085 - ASC_PRT_NEXT(); 3161 + seq_printf(m, 3162 + " cntl 0x%x, no_scam 0x%x\n", ep->cntl, ep->no_scam); 3086 3163 3087 - len = asc_prt_line(cp, leftlen, " Target ID: "); 3088 - ASC_PRT_NEXT(); 3089 - for (i = 0; i <= ASC_MAX_TID; i++) { 3090 - len = asc_prt_line(cp, leftlen, " %d", i); 3091 - ASC_PRT_NEXT(); 3092 - } 3093 - len = asc_prt_line(cp, leftlen, "\n"); 3094 - ASC_PRT_NEXT(); 3164 + seq_printf(m, " Target ID: "); 3165 + for (i = 0; i <= ASC_MAX_TID; i++) 3166 + seq_printf(m, " %d", i); 3167 + seq_printf(m, "\n"); 3095 3168 3096 - len = asc_prt_line(cp, leftlen, " Disconnects: "); 3097 - ASC_PRT_NEXT(); 3098 - for (i = 0; i <= ASC_MAX_TID; i++) { 3099 - len = asc_prt_line(cp, leftlen, " %c", 3100 - (ep-> 3101 - disc_enable & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 3102 - 'N'); 3103 - ASC_PRT_NEXT(); 3104 - } 3105 - len = asc_prt_line(cp, leftlen, "\n"); 3106 - ASC_PRT_NEXT(); 3169 + seq_printf(m, " Disconnects: "); 3170 + for (i = 0; i <= ASC_MAX_TID; i++) 3171 + seq_printf(m, " %c", 3172 + (ep->disc_enable & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3173 + seq_printf(m, "\n"); 3107 3174 3108 - len = asc_prt_line(cp, leftlen, " Command Queuing: "); 3109 - ASC_PRT_NEXT(); 3110 - for (i = 0; i <= ASC_MAX_TID; i++) { 3111 - len = asc_prt_line(cp, leftlen, " %c", 3112 - (ep-> 3113 - use_cmd_qng & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 3114 - 'N'); 3115 - ASC_PRT_NEXT(); 3116 - } 3117 - len = asc_prt_line(cp, leftlen, "\n"); 3118 - ASC_PRT_NEXT(); 3175 + seq_printf(m, " Command Queuing: "); 3176 + for (i = 0; i <= ASC_MAX_TID; i++) 3177 + seq_printf(m, " %c", 3178 + (ep->use_cmd_qng & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3179 + seq_printf(m, "\n"); 3119 3180 3120 - len = asc_prt_line(cp, leftlen, " Start Motor: "); 3121 - ASC_PRT_NEXT(); 3122 - for (i = 0; i <= ASC_MAX_TID; i++) { 3123 - len = asc_prt_line(cp, leftlen, " %c", 3124 - (ep-> 3125 - start_motor & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 3126 - 'N'); 3127 - ASC_PRT_NEXT(); 3128 - } 3129 - len = asc_prt_line(cp, leftlen, "\n"); 3130 - ASC_PRT_NEXT(); 3181 + seq_printf(m, " Start Motor: "); 3182 + for (i = 0; i <= ASC_MAX_TID; i++) 3183 + seq_printf(m, " %c", 3184 + (ep->start_motor & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3185 + seq_printf(m, "\n"); 3131 3186 3132 - len = asc_prt_line(cp, leftlen, " Synchronous Transfer:"); 3133 - ASC_PRT_NEXT(); 3134 - for (i = 0; i <= ASC_MAX_TID; i++) { 3135 - len = asc_prt_line(cp, leftlen, " %c", 3136 - (ep-> 3137 - init_sdtr & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 3138 - 'N'); 3139 - ASC_PRT_NEXT(); 3140 - } 3141 - len = asc_prt_line(cp, leftlen, "\n"); 3142 - ASC_PRT_NEXT(); 3187 + seq_printf(m, " Synchronous Transfer:"); 3188 + for (i = 0; i <= ASC_MAX_TID; i++) 3189 + seq_printf(m, " %c", 3190 + (ep->init_sdtr & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3191 + seq_printf(m, "\n"); 3143 3192 3144 3193 #ifdef CONFIG_ISA 3145 3194 if (asc_dvc_varp->bus_type & ASC_IS_ISA) { 3146 - len = asc_prt_line(cp, leftlen, 3147 - " Host ISA DMA speed: %d MB/S\n", 3148 - isa_dma_speed[ASC_EEP_GET_DMA_SPD(ep)]); 3149 - ASC_PRT_NEXT(); 3195 + seq_printf(m, 3196 + " Host ISA DMA speed: %d MB/S\n", 3197 + isa_dma_speed[ASC_EEP_GET_DMA_SPD(ep)]); 3150 3198 } 3151 3199 #endif /* CONFIG_ISA */ 3152 - 3153 - return totlen; 3154 3200 } 3155 3201 3156 3202 /* 3157 3203 * asc_prt_adv_board_eeprom() 3158 3204 * 3159 3205 * Print board EEPROM configuration. 3160 - * 3161 - * Note: no single line should be greater than ASC_PRTLINE_SIZE, 3162 - * cf. asc_prt_line(). 3163 - * 3164 - * Return the number of characters copied into 'cp'. No more than 3165 - * 'cplen' characters will be copied to 'cp'. 3166 3206 */ 3167 - static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen) 3207 + static void asc_prt_adv_board_eeprom(struct seq_file *m, struct Scsi_Host *shost) 3168 3208 { 3169 3209 struct asc_board *boardp = shost_priv(shost); 3170 3210 ADV_DVC_VAR *adv_dvc_varp; 3171 - int leftlen; 3172 - int totlen; 3173 - int len; 3174 3211 int i; 3175 3212 char *termstr; 3176 3213 uchar serialstr[13]; ··· 3136 3281 ep_38C1600 = &boardp->eep_config.adv_38C1600_eep; 3137 3282 } 3138 3283 3139 - leftlen = cplen; 3140 - totlen = len = 0; 3141 - 3142 - len = asc_prt_line(cp, leftlen, 3143 - "\nEEPROM Settings for AdvanSys SCSI Host %d:\n", 3144 - shost->host_no); 3145 - ASC_PRT_NEXT(); 3284 + seq_printf(m, 3285 + "\nEEPROM Settings for AdvanSys SCSI Host %d:\n", 3286 + shost->host_no); 3146 3287 3147 3288 if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) { 3148 3289 wordp = &ep_3550->serial_number_word1; ··· 3148 3297 wordp = &ep_38C1600->serial_number_word1; 3149 3298 } 3150 3299 3151 - if (asc_get_eeprom_string(wordp, serialstr) == ASC_TRUE) { 3152 - len = 3153 - asc_prt_line(cp, leftlen, " Serial Number: %s\n", 3154 - serialstr); 3155 - ASC_PRT_NEXT(); 3156 - } else { 3157 - len = asc_prt_line(cp, leftlen, 3158 - " Serial Number Signature Not Present.\n"); 3159 - ASC_PRT_NEXT(); 3160 - } 3300 + if (asc_get_eeprom_string(wordp, serialstr) == ASC_TRUE) 3301 + seq_printf(m, " Serial Number: %s\n", serialstr); 3302 + else 3303 + seq_printf(m, " Serial Number Signature Not Present.\n"); 3161 3304 3162 - if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) { 3163 - len = asc_prt_line(cp, leftlen, 3164 - " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n", 3165 - ep_3550->adapter_scsi_id, 3166 - ep_3550->max_host_qng, ep_3550->max_dvc_qng); 3167 - ASC_PRT_NEXT(); 3168 - } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800) { 3169 - len = asc_prt_line(cp, leftlen, 3170 - " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n", 3171 - ep_38C0800->adapter_scsi_id, 3172 - ep_38C0800->max_host_qng, 3173 - ep_38C0800->max_dvc_qng); 3174 - ASC_PRT_NEXT(); 3175 - } else { 3176 - len = asc_prt_line(cp, leftlen, 3177 - " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n", 3178 - ep_38C1600->adapter_scsi_id, 3179 - ep_38C1600->max_host_qng, 3180 - ep_38C1600->max_dvc_qng); 3181 - ASC_PRT_NEXT(); 3182 - } 3305 + if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) 3306 + seq_printf(m, 3307 + " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n", 3308 + ep_3550->adapter_scsi_id, 3309 + ep_3550->max_host_qng, ep_3550->max_dvc_qng); 3310 + else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800) 3311 + seq_printf(m, 3312 + " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n", 3313 + ep_38C0800->adapter_scsi_id, 3314 + ep_38C0800->max_host_qng, 3315 + ep_38C0800->max_dvc_qng); 3316 + else 3317 + seq_printf(m, 3318 + " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n", 3319 + ep_38C1600->adapter_scsi_id, 3320 + ep_38C1600->max_host_qng, 3321 + ep_38C1600->max_dvc_qng); 3183 3322 if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) { 3184 3323 word = ep_3550->termination; 3185 3324 } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800) { ··· 3193 3352 break; 3194 3353 } 3195 3354 3196 - if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) { 3197 - len = asc_prt_line(cp, leftlen, 3198 - " termination: %u (%s), bios_ctrl: 0x%x\n", 3199 - ep_3550->termination, termstr, 3200 - ep_3550->bios_ctrl); 3201 - ASC_PRT_NEXT(); 3202 - } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800) { 3203 - len = asc_prt_line(cp, leftlen, 3204 - " termination: %u (%s), bios_ctrl: 0x%x\n", 3205 - ep_38C0800->termination_lvd, termstr, 3206 - ep_38C0800->bios_ctrl); 3207 - ASC_PRT_NEXT(); 3208 - } else { 3209 - len = asc_prt_line(cp, leftlen, 3210 - " termination: %u (%s), bios_ctrl: 0x%x\n", 3211 - ep_38C1600->termination_lvd, termstr, 3212 - ep_38C1600->bios_ctrl); 3213 - ASC_PRT_NEXT(); 3214 - } 3355 + if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) 3356 + seq_printf(m, 3357 + " termination: %u (%s), bios_ctrl: 0x%x\n", 3358 + ep_3550->termination, termstr, 3359 + ep_3550->bios_ctrl); 3360 + else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800) 3361 + seq_printf(m, 3362 + " termination: %u (%s), bios_ctrl: 0x%x\n", 3363 + ep_38C0800->termination_lvd, termstr, 3364 + ep_38C0800->bios_ctrl); 3365 + else 3366 + seq_printf(m, 3367 + " termination: %u (%s), bios_ctrl: 0x%x\n", 3368 + ep_38C1600->termination_lvd, termstr, 3369 + ep_38C1600->bios_ctrl); 3215 3370 3216 - len = asc_prt_line(cp, leftlen, " Target ID: "); 3217 - ASC_PRT_NEXT(); 3218 - for (i = 0; i <= ADV_MAX_TID; i++) { 3219 - len = asc_prt_line(cp, leftlen, " %X", i); 3220 - ASC_PRT_NEXT(); 3221 - } 3222 - len = asc_prt_line(cp, leftlen, "\n"); 3223 - ASC_PRT_NEXT(); 3371 + seq_printf(m, " Target ID: "); 3372 + for (i = 0; i <= ADV_MAX_TID; i++) 3373 + seq_printf(m, " %X", i); 3374 + seq_printf(m, "\n"); 3224 3375 3225 3376 if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) { 3226 3377 word = ep_3550->disc_enable; ··· 3221 3388 } else { 3222 3389 word = ep_38C1600->disc_enable; 3223 3390 } 3224 - len = asc_prt_line(cp, leftlen, " Disconnects: "); 3225 - ASC_PRT_NEXT(); 3226 - for (i = 0; i <= ADV_MAX_TID; i++) { 3227 - len = asc_prt_line(cp, leftlen, " %c", 3228 - (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3229 - ASC_PRT_NEXT(); 3230 - } 3231 - len = asc_prt_line(cp, leftlen, "\n"); 3232 - ASC_PRT_NEXT(); 3391 + seq_printf(m, " Disconnects: "); 3392 + for (i = 0; i <= ADV_MAX_TID; i++) 3393 + seq_printf(m, " %c", 3394 + (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3395 + seq_printf(m, "\n"); 3233 3396 3234 3397 if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) { 3235 3398 word = ep_3550->tagqng_able; ··· 3234 3405 } else { 3235 3406 word = ep_38C1600->tagqng_able; 3236 3407 } 3237 - len = asc_prt_line(cp, leftlen, " Command Queuing: "); 3238 - ASC_PRT_NEXT(); 3239 - for (i = 0; i <= ADV_MAX_TID; i++) { 3240 - len = asc_prt_line(cp, leftlen, " %c", 3241 - (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3242 - ASC_PRT_NEXT(); 3243 - } 3244 - len = asc_prt_line(cp, leftlen, "\n"); 3245 - ASC_PRT_NEXT(); 3408 + seq_printf(m, " Command Queuing: "); 3409 + for (i = 0; i <= ADV_MAX_TID; i++) 3410 + seq_printf(m, " %c", 3411 + (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3412 + seq_printf(m, "\n"); 3246 3413 3247 3414 if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) { 3248 3415 word = ep_3550->start_motor; ··· 3247 3422 } else { 3248 3423 word = ep_38C1600->start_motor; 3249 3424 } 3250 - len = asc_prt_line(cp, leftlen, " Start Motor: "); 3251 - ASC_PRT_NEXT(); 3252 - for (i = 0; i <= ADV_MAX_TID; i++) { 3253 - len = asc_prt_line(cp, leftlen, " %c", 3254 - (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3255 - ASC_PRT_NEXT(); 3256 - } 3257 - len = asc_prt_line(cp, leftlen, "\n"); 3258 - ASC_PRT_NEXT(); 3425 + seq_printf(m, " Start Motor: "); 3426 + for (i = 0; i <= ADV_MAX_TID; i++) 3427 + seq_printf(m, " %c", 3428 + (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3429 + seq_printf(m, "\n"); 3259 3430 3260 3431 if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) { 3261 - len = asc_prt_line(cp, leftlen, " Synchronous Transfer:"); 3262 - ASC_PRT_NEXT(); 3263 - for (i = 0; i <= ADV_MAX_TID; i++) { 3264 - len = asc_prt_line(cp, leftlen, " %c", 3265 - (ep_3550-> 3266 - sdtr_able & ADV_TID_TO_TIDMASK(i)) ? 3267 - 'Y' : 'N'); 3268 - ASC_PRT_NEXT(); 3269 - } 3270 - len = asc_prt_line(cp, leftlen, "\n"); 3271 - ASC_PRT_NEXT(); 3432 + seq_printf(m, " Synchronous Transfer:"); 3433 + for (i = 0; i <= ADV_MAX_TID; i++) 3434 + seq_printf(m, " %c", 3435 + (ep_3550->sdtr_able & ADV_TID_TO_TIDMASK(i)) ? 3436 + 'Y' : 'N'); 3437 + seq_printf(m, "\n"); 3272 3438 } 3273 3439 3274 3440 if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) { 3275 - len = asc_prt_line(cp, leftlen, " Ultra Transfer: "); 3276 - ASC_PRT_NEXT(); 3277 - for (i = 0; i <= ADV_MAX_TID; i++) { 3278 - len = asc_prt_line(cp, leftlen, " %c", 3279 - (ep_3550-> 3280 - ultra_able & ADV_TID_TO_TIDMASK(i)) 3281 - ? 'Y' : 'N'); 3282 - ASC_PRT_NEXT(); 3283 - } 3284 - len = asc_prt_line(cp, leftlen, "\n"); 3285 - ASC_PRT_NEXT(); 3441 + seq_printf(m, " Ultra Transfer: "); 3442 + for (i = 0; i <= ADV_MAX_TID; i++) 3443 + seq_printf(m, " %c", 3444 + (ep_3550->ultra_able & ADV_TID_TO_TIDMASK(i)) 3445 + ? 'Y' : 'N'); 3446 + seq_printf(m, "\n"); 3286 3447 } 3287 3448 3288 3449 if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) { ··· 3278 3467 } else { 3279 3468 word = ep_38C1600->wdtr_able; 3280 3469 } 3281 - len = asc_prt_line(cp, leftlen, " Wide Transfer: "); 3282 - ASC_PRT_NEXT(); 3283 - for (i = 0; i <= ADV_MAX_TID; i++) { 3284 - len = asc_prt_line(cp, leftlen, " %c", 3285 - (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3286 - ASC_PRT_NEXT(); 3287 - } 3288 - len = asc_prt_line(cp, leftlen, "\n"); 3289 - ASC_PRT_NEXT(); 3470 + seq_printf(m, " Wide Transfer: "); 3471 + for (i = 0; i <= ADV_MAX_TID; i++) 3472 + seq_printf(m, " %c", 3473 + (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3474 + seq_printf(m, "\n"); 3290 3475 3291 3476 if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800 || 3292 3477 adv_dvc_varp->chip_type == ADV_CHIP_ASC38C1600) { 3293 - len = asc_prt_line(cp, leftlen, 3294 - " Synchronous Transfer Speed (Mhz):\n "); 3295 - ASC_PRT_NEXT(); 3478 + seq_printf(m, 3479 + " Synchronous Transfer Speed (Mhz):\n "); 3296 3480 for (i = 0; i <= ADV_MAX_TID; i++) { 3297 3481 char *speed_str; 3298 3482 ··· 3323 3517 speed_str = "Unk"; 3324 3518 break; 3325 3519 } 3326 - len = asc_prt_line(cp, leftlen, "%X:%s ", i, speed_str); 3327 - ASC_PRT_NEXT(); 3328 - if (i == 7) { 3329 - len = asc_prt_line(cp, leftlen, "\n "); 3330 - ASC_PRT_NEXT(); 3331 - } 3520 + seq_printf(m, "%X:%s ", i, speed_str); 3521 + if (i == 7) 3522 + seq_printf(m, "\n "); 3332 3523 sdtr_speed >>= 4; 3333 3524 } 3334 - len = asc_prt_line(cp, leftlen, "\n"); 3335 - ASC_PRT_NEXT(); 3525 + seq_printf(m, "\n"); 3336 3526 } 3337 - 3338 - return totlen; 3339 3527 } 3340 3528 3341 3529 /* 3342 3530 * asc_prt_driver_conf() 3343 - * 3344 - * Note: no single line should be greater than ASC_PRTLINE_SIZE, 3345 - * cf. asc_prt_line(). 3346 - * 3347 - * Return the number of characters copied into 'cp'. No more than 3348 - * 'cplen' characters will be copied to 'cp'. 3349 3531 */ 3350 - static int asc_prt_driver_conf(struct Scsi_Host *shost, char *cp, int cplen) 3532 + static void asc_prt_driver_conf(struct seq_file *m, struct Scsi_Host *shost) 3351 3533 { 3352 3534 struct asc_board *boardp = shost_priv(shost); 3353 - int leftlen; 3354 - int totlen; 3355 - int len; 3356 3535 int chip_scsi_id; 3357 3536 3358 - leftlen = cplen; 3359 - totlen = len = 0; 3537 + seq_printf(m, 3538 + "\nLinux Driver Configuration and Information for AdvanSys SCSI Host %d:\n", 3539 + shost->host_no); 3360 3540 3361 - len = asc_prt_line(cp, leftlen, 3362 - "\nLinux Driver Configuration and Information for AdvanSys SCSI Host %d:\n", 3363 - shost->host_no); 3364 - ASC_PRT_NEXT(); 3541 + seq_printf(m, 3542 + " host_busy %u, last_reset %u, max_id %u, max_lun %u, max_channel %u\n", 3543 + shost->host_busy, shost->last_reset, shost->max_id, 3544 + shost->max_lun, shost->max_channel); 3365 3545 3366 - len = asc_prt_line(cp, leftlen, 3367 - " host_busy %u, last_reset %u, max_id %u, max_lun %u, max_channel %u\n", 3368 - shost->host_busy, shost->last_reset, shost->max_id, 3369 - shost->max_lun, shost->max_channel); 3370 - ASC_PRT_NEXT(); 3546 + seq_printf(m, 3547 + " unique_id %d, can_queue %d, this_id %d, sg_tablesize %u, cmd_per_lun %u\n", 3548 + shost->unique_id, shost->can_queue, shost->this_id, 3549 + shost->sg_tablesize, shost->cmd_per_lun); 3371 3550 3372 - len = asc_prt_line(cp, leftlen, 3373 - " unique_id %d, can_queue %d, this_id %d, sg_tablesize %u, cmd_per_lun %u\n", 3374 - shost->unique_id, shost->can_queue, shost->this_id, 3375 - shost->sg_tablesize, shost->cmd_per_lun); 3376 - ASC_PRT_NEXT(); 3551 + seq_printf(m, 3552 + " unchecked_isa_dma %d, use_clustering %d\n", 3553 + shost->unchecked_isa_dma, shost->use_clustering); 3377 3554 3378 - len = asc_prt_line(cp, leftlen, 3379 - " unchecked_isa_dma %d, use_clustering %d\n", 3380 - shost->unchecked_isa_dma, shost->use_clustering); 3381 - ASC_PRT_NEXT(); 3555 + seq_printf(m, 3556 + " flags 0x%x, last_reset 0x%x, jiffies 0x%x, asc_n_io_port 0x%x\n", 3557 + boardp->flags, boardp->last_reset, jiffies, 3558 + boardp->asc_n_io_port); 3382 3559 3383 - len = asc_prt_line(cp, leftlen, 3384 - " flags 0x%x, last_reset 0x%x, jiffies 0x%x, asc_n_io_port 0x%x\n", 3385 - boardp->flags, boardp->last_reset, jiffies, 3386 - boardp->asc_n_io_port); 3387 - ASC_PRT_NEXT(); 3388 - 3389 - len = asc_prt_line(cp, leftlen, " io_port 0x%x\n", shost->io_port); 3390 - ASC_PRT_NEXT(); 3560 + seq_printf(m, " io_port 0x%x\n", shost->io_port); 3391 3561 3392 3562 if (ASC_NARROW_BOARD(boardp)) { 3393 3563 chip_scsi_id = boardp->dvc_cfg.asc_dvc_cfg.chip_scsi_id; 3394 3564 } else { 3395 3565 chip_scsi_id = boardp->dvc_var.adv_dvc_var.chip_scsi_id; 3396 3566 } 3397 - 3398 - return totlen; 3399 3567 } 3400 3568 3401 3569 /* 3402 3570 * asc_prt_asc_board_info() 3403 3571 * 3404 3572 * Print dynamic board configuration information. 3405 - * 3406 - * Note: no single line should be greater than ASC_PRTLINE_SIZE, 3407 - * cf. asc_prt_line(). 3408 - * 3409 - * Return the number of characters copied into 'cp'. No more than 3410 - * 'cplen' characters will be copied to 'cp'. 3411 3573 */ 3412 - static int asc_prt_asc_board_info(struct Scsi_Host *shost, char *cp, int cplen) 3574 + static void asc_prt_asc_board_info(struct seq_file *m, struct Scsi_Host *shost) 3413 3575 { 3414 3576 struct asc_board *boardp = shost_priv(shost); 3415 3577 int chip_scsi_id; 3416 - int leftlen; 3417 - int totlen; 3418 - int len; 3419 3578 ASC_DVC_VAR *v; 3420 3579 ASC_DVC_CFG *c; 3421 3580 int i; ··· 3390 3619 c = &boardp->dvc_cfg.asc_dvc_cfg; 3391 3620 chip_scsi_id = c->chip_scsi_id; 3392 3621 3393 - leftlen = cplen; 3394 - totlen = len = 0; 3622 + seq_printf(m, 3623 + "\nAsc Library Configuration and Statistics for AdvanSys SCSI Host %d:\n", 3624 + shost->host_no); 3395 3625 3396 - len = asc_prt_line(cp, leftlen, 3397 - "\nAsc Library Configuration and Statistics for AdvanSys SCSI Host %d:\n", 3398 - shost->host_no); 3399 - ASC_PRT_NEXT(); 3400 - 3401 - len = asc_prt_line(cp, leftlen, " chip_version %u, mcode_date 0x%x, " 3402 - "mcode_version 0x%x, err_code %u\n", 3403 - c->chip_version, c->mcode_date, c->mcode_version, 3404 - v->err_code); 3405 - ASC_PRT_NEXT(); 3626 + seq_printf(m, " chip_version %u, mcode_date 0x%x, " 3627 + "mcode_version 0x%x, err_code %u\n", 3628 + c->chip_version, c->mcode_date, c->mcode_version, 3629 + v->err_code); 3406 3630 3407 3631 /* Current number of commands waiting for the host. */ 3408 - len = asc_prt_line(cp, leftlen, 3409 - " Total Command Pending: %d\n", v->cur_total_qng); 3410 - ASC_PRT_NEXT(); 3632 + seq_printf(m, 3633 + " Total Command Pending: %d\n", v->cur_total_qng); 3411 3634 3412 - len = asc_prt_line(cp, leftlen, " Command Queuing:"); 3413 - ASC_PRT_NEXT(); 3635 + seq_printf(m, " Command Queuing:"); 3414 3636 for (i = 0; i <= ASC_MAX_TID; i++) { 3415 3637 if ((chip_scsi_id == i) || 3416 3638 ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) { 3417 3639 continue; 3418 3640 } 3419 - len = asc_prt_line(cp, leftlen, " %X:%c", 3420 - i, 3421 - (v-> 3422 - use_tagged_qng & ADV_TID_TO_TIDMASK(i)) ? 3423 - 'Y' : 'N'); 3424 - ASC_PRT_NEXT(); 3641 + seq_printf(m, " %X:%c", 3642 + i, 3643 + (v->use_tagged_qng & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3425 3644 } 3426 - len = asc_prt_line(cp, leftlen, "\n"); 3427 - ASC_PRT_NEXT(); 3645 + seq_printf(m, "\n"); 3428 3646 3429 3647 /* Current number of commands waiting for a device. */ 3430 - len = asc_prt_line(cp, leftlen, " Command Queue Pending:"); 3431 - ASC_PRT_NEXT(); 3648 + seq_printf(m, " Command Queue Pending:"); 3432 3649 for (i = 0; i <= ASC_MAX_TID; i++) { 3433 3650 if ((chip_scsi_id == i) || 3434 3651 ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) { 3435 3652 continue; 3436 3653 } 3437 - len = asc_prt_line(cp, leftlen, " %X:%u", i, v->cur_dvc_qng[i]); 3438 - ASC_PRT_NEXT(); 3654 + seq_printf(m, " %X:%u", i, v->cur_dvc_qng[i]); 3439 3655 } 3440 - len = asc_prt_line(cp, leftlen, "\n"); 3441 - ASC_PRT_NEXT(); 3656 + seq_printf(m, "\n"); 3442 3657 3443 3658 /* Current limit on number of commands that can be sent to a device. */ 3444 - len = asc_prt_line(cp, leftlen, " Command Queue Limit:"); 3445 - ASC_PRT_NEXT(); 3659 + seq_printf(m, " Command Queue Limit:"); 3446 3660 for (i = 0; i <= ASC_MAX_TID; i++) { 3447 3661 if ((chip_scsi_id == i) || 3448 3662 ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) { 3449 3663 continue; 3450 3664 } 3451 - len = asc_prt_line(cp, leftlen, " %X:%u", i, v->max_dvc_qng[i]); 3452 - ASC_PRT_NEXT(); 3665 + seq_printf(m, " %X:%u", i, v->max_dvc_qng[i]); 3453 3666 } 3454 - len = asc_prt_line(cp, leftlen, "\n"); 3455 - ASC_PRT_NEXT(); 3667 + seq_printf(m, "\n"); 3456 3668 3457 3669 /* Indicate whether the device has returned queue full status. */ 3458 - len = asc_prt_line(cp, leftlen, " Command Queue Full:"); 3459 - ASC_PRT_NEXT(); 3670 + seq_printf(m, " Command Queue Full:"); 3460 3671 for (i = 0; i <= ASC_MAX_TID; i++) { 3461 3672 if ((chip_scsi_id == i) || 3462 3673 ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) { 3463 3674 continue; 3464 3675 } 3465 - if (boardp->queue_full & ADV_TID_TO_TIDMASK(i)) { 3466 - len = asc_prt_line(cp, leftlen, " %X:Y-%d", 3467 - i, boardp->queue_full_cnt[i]); 3468 - } else { 3469 - len = asc_prt_line(cp, leftlen, " %X:N", i); 3470 - } 3471 - ASC_PRT_NEXT(); 3676 + if (boardp->queue_full & ADV_TID_TO_TIDMASK(i)) 3677 + seq_printf(m, " %X:Y-%d", 3678 + i, boardp->queue_full_cnt[i]); 3679 + else 3680 + seq_printf(m, " %X:N", i); 3472 3681 } 3473 - len = asc_prt_line(cp, leftlen, "\n"); 3474 - ASC_PRT_NEXT(); 3682 + seq_printf(m, "\n"); 3475 3683 3476 - len = asc_prt_line(cp, leftlen, " Synchronous Transfer:"); 3477 - ASC_PRT_NEXT(); 3684 + seq_printf(m, " Synchronous Transfer:"); 3478 3685 for (i = 0; i <= ASC_MAX_TID; i++) { 3479 3686 if ((chip_scsi_id == i) || 3480 3687 ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) { 3481 3688 continue; 3482 3689 } 3483 - len = asc_prt_line(cp, leftlen, " %X:%c", 3484 - i, 3485 - (v-> 3486 - sdtr_done & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 3487 - 'N'); 3488 - ASC_PRT_NEXT(); 3690 + seq_printf(m, " %X:%c", 3691 + i, 3692 + (v->sdtr_done & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3489 3693 } 3490 - len = asc_prt_line(cp, leftlen, "\n"); 3491 - ASC_PRT_NEXT(); 3694 + seq_printf(m, "\n"); 3492 3695 3493 3696 for (i = 0; i <= ASC_MAX_TID; i++) { 3494 3697 uchar syn_period_ix; ··· 3473 3728 continue; 3474 3729 } 3475 3730 3476 - len = asc_prt_line(cp, leftlen, " %X:", i); 3477 - ASC_PRT_NEXT(); 3731 + seq_printf(m, " %X:", i); 3478 3732 3479 3733 if ((boardp->sdtr_data[i] & ASC_SYN_MAX_OFFSET) == 0) { 3480 - len = asc_prt_line(cp, leftlen, " Asynchronous"); 3481 - ASC_PRT_NEXT(); 3734 + seq_printf(m, " Asynchronous"); 3482 3735 } else { 3483 3736 syn_period_ix = 3484 3737 (boardp->sdtr_data[i] >> 4) & (v->max_sdtr_index - 3485 3738 1); 3486 3739 3487 - len = asc_prt_line(cp, leftlen, 3488 - " Transfer Period Factor: %d (%d.%d Mhz),", 3489 - v->sdtr_period_tbl[syn_period_ix], 3490 - 250 / 3491 - v->sdtr_period_tbl[syn_period_ix], 3492 - ASC_TENTHS(250, 3493 - v-> 3494 - sdtr_period_tbl 3495 - [syn_period_ix])); 3496 - ASC_PRT_NEXT(); 3740 + seq_printf(m, 3741 + " Transfer Period Factor: %d (%d.%d Mhz),", 3742 + v->sdtr_period_tbl[syn_period_ix], 3743 + 250 / v->sdtr_period_tbl[syn_period_ix], 3744 + ASC_TENTHS(250, 3745 + v->sdtr_period_tbl[syn_period_ix])); 3497 3746 3498 - len = asc_prt_line(cp, leftlen, " REQ/ACK Offset: %d", 3499 - boardp-> 3500 - sdtr_data[i] & ASC_SYN_MAX_OFFSET); 3501 - ASC_PRT_NEXT(); 3747 + seq_printf(m, " REQ/ACK Offset: %d", 3748 + boardp->sdtr_data[i] & ASC_SYN_MAX_OFFSET); 3502 3749 } 3503 3750 3504 3751 if ((v->sdtr_done & ADV_TID_TO_TIDMASK(i)) == 0) { 3505 - len = asc_prt_line(cp, leftlen, "*\n"); 3752 + seq_printf(m, "*\n"); 3506 3753 renegotiate = 1; 3507 3754 } else { 3508 - len = asc_prt_line(cp, leftlen, "\n"); 3755 + seq_printf(m, "\n"); 3509 3756 } 3510 - ASC_PRT_NEXT(); 3511 3757 } 3512 3758 3513 3759 if (renegotiate) { 3514 - len = asc_prt_line(cp, leftlen, 3515 - " * = Re-negotiation pending before next command.\n"); 3516 - ASC_PRT_NEXT(); 3760 + seq_printf(m, 3761 + " * = Re-negotiation pending before next command.\n"); 3517 3762 } 3518 - 3519 - return totlen; 3520 3763 } 3521 3764 3522 3765 /* 3523 3766 * asc_prt_adv_board_info() 3524 3767 * 3525 3768 * Print dynamic board configuration information. 3526 - * 3527 - * Note: no single line should be greater than ASC_PRTLINE_SIZE, 3528 - * cf. asc_prt_line(). 3529 - * 3530 - * Return the number of characters copied into 'cp'. No more than 3531 - * 'cplen' characters will be copied to 'cp'. 3532 3769 */ 3533 - static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen) 3770 + static void asc_prt_adv_board_info(struct seq_file *m, struct Scsi_Host *shost) 3534 3771 { 3535 3772 struct asc_board *boardp = shost_priv(shost); 3536 - int leftlen; 3537 - int totlen; 3538 - int len; 3539 3773 int i; 3540 3774 ADV_DVC_VAR *v; 3541 3775 ADV_DVC_CFG *c; ··· 3533 3809 iop_base = v->iop_base; 3534 3810 chip_scsi_id = v->chip_scsi_id; 3535 3811 3536 - leftlen = cplen; 3537 - totlen = len = 0; 3812 + seq_printf(m, 3813 + "\nAdv Library Configuration and Statistics for AdvanSys SCSI Host %d:\n", 3814 + shost->host_no); 3538 3815 3539 - len = asc_prt_line(cp, leftlen, 3540 - "\nAdv Library Configuration and Statistics for AdvanSys SCSI Host %d:\n", 3541 - shost->host_no); 3542 - ASC_PRT_NEXT(); 3816 + seq_printf(m, 3817 + " iop_base 0x%lx, cable_detect: %X, err_code %u\n", 3818 + v->iop_base, 3819 + AdvReadWordRegister(iop_base,IOPW_SCSI_CFG1) & CABLE_DETECT, 3820 + v->err_code); 3543 3821 3544 - len = asc_prt_line(cp, leftlen, 3545 - " iop_base 0x%lx, cable_detect: %X, err_code %u\n", 3546 - v->iop_base, 3547 - AdvReadWordRegister(iop_base, 3548 - IOPW_SCSI_CFG1) & CABLE_DETECT, 3549 - v->err_code); 3550 - ASC_PRT_NEXT(); 3551 - 3552 - len = asc_prt_line(cp, leftlen, " chip_version %u, mcode_date 0x%x, " 3553 - "mcode_version 0x%x\n", c->chip_version, 3554 - c->mcode_date, c->mcode_version); 3555 - ASC_PRT_NEXT(); 3822 + seq_printf(m, " chip_version %u, mcode_date 0x%x, " 3823 + "mcode_version 0x%x\n", c->chip_version, 3824 + c->mcode_date, c->mcode_version); 3556 3825 3557 3826 AdvReadWordLram(iop_base, ASC_MC_TAGQNG_ABLE, tagqng_able); 3558 - len = asc_prt_line(cp, leftlen, " Queuing Enabled:"); 3559 - ASC_PRT_NEXT(); 3827 + seq_printf(m, " Queuing Enabled:"); 3560 3828 for (i = 0; i <= ADV_MAX_TID; i++) { 3561 3829 if ((chip_scsi_id == i) || 3562 3830 ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) { 3563 3831 continue; 3564 3832 } 3565 3833 3566 - len = asc_prt_line(cp, leftlen, " %X:%c", 3567 - i, 3568 - (tagqng_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 3569 - 'N'); 3570 - ASC_PRT_NEXT(); 3834 + seq_printf(m, " %X:%c", 3835 + i, 3836 + (tagqng_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3571 3837 } 3572 - len = asc_prt_line(cp, leftlen, "\n"); 3573 - ASC_PRT_NEXT(); 3838 + seq_printf(m, "\n"); 3574 3839 3575 - len = asc_prt_line(cp, leftlen, " Queue Limit:"); 3576 - ASC_PRT_NEXT(); 3840 + seq_printf(m, " Queue Limit:"); 3577 3841 for (i = 0; i <= ADV_MAX_TID; i++) { 3578 3842 if ((chip_scsi_id == i) || 3579 3843 ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) { ··· 3571 3859 AdvReadByteLram(iop_base, ASC_MC_NUMBER_OF_MAX_CMD + i, 3572 3860 lrambyte); 3573 3861 3574 - len = asc_prt_line(cp, leftlen, " %X:%d", i, lrambyte); 3575 - ASC_PRT_NEXT(); 3862 + seq_printf(m, " %X:%d", i, lrambyte); 3576 3863 } 3577 - len = asc_prt_line(cp, leftlen, "\n"); 3578 - ASC_PRT_NEXT(); 3864 + seq_printf(m, "\n"); 3579 3865 3580 - len = asc_prt_line(cp, leftlen, " Command Pending:"); 3581 - ASC_PRT_NEXT(); 3866 + seq_printf(m, " Command Pending:"); 3582 3867 for (i = 0; i <= ADV_MAX_TID; i++) { 3583 3868 if ((chip_scsi_id == i) || 3584 3869 ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) { ··· 3585 3876 AdvReadByteLram(iop_base, ASC_MC_NUMBER_OF_QUEUED_CMD + i, 3586 3877 lrambyte); 3587 3878 3588 - len = asc_prt_line(cp, leftlen, " %X:%d", i, lrambyte); 3589 - ASC_PRT_NEXT(); 3879 + seq_printf(m, " %X:%d", i, lrambyte); 3590 3880 } 3591 - len = asc_prt_line(cp, leftlen, "\n"); 3592 - ASC_PRT_NEXT(); 3881 + seq_printf(m, "\n"); 3593 3882 3594 3883 AdvReadWordLram(iop_base, ASC_MC_WDTR_ABLE, wdtr_able); 3595 - len = asc_prt_line(cp, leftlen, " Wide Enabled:"); 3596 - ASC_PRT_NEXT(); 3884 + seq_printf(m, " Wide Enabled:"); 3597 3885 for (i = 0; i <= ADV_MAX_TID; i++) { 3598 3886 if ((chip_scsi_id == i) || 3599 3887 ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) { 3600 3888 continue; 3601 3889 } 3602 3890 3603 - len = asc_prt_line(cp, leftlen, " %X:%c", 3604 - i, 3605 - (wdtr_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 3606 - 'N'); 3607 - ASC_PRT_NEXT(); 3891 + seq_printf(m, " %X:%c", 3892 + i, 3893 + (wdtr_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3608 3894 } 3609 - len = asc_prt_line(cp, leftlen, "\n"); 3610 - ASC_PRT_NEXT(); 3895 + seq_printf(m, "\n"); 3611 3896 3612 3897 AdvReadWordLram(iop_base, ASC_MC_WDTR_DONE, wdtr_done); 3613 - len = asc_prt_line(cp, leftlen, " Transfer Bit Width:"); 3614 - ASC_PRT_NEXT(); 3898 + seq_printf(m, " Transfer Bit Width:"); 3615 3899 for (i = 0; i <= ADV_MAX_TID; i++) { 3616 3900 if ((chip_scsi_id == i) || 3617 3901 ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) { ··· 3615 3913 ASC_MC_DEVICE_HSHK_CFG_TABLE + (2 * i), 3616 3914 lramword); 3617 3915 3618 - len = asc_prt_line(cp, leftlen, " %X:%d", 3619 - i, (lramword & 0x8000) ? 16 : 8); 3620 - ASC_PRT_NEXT(); 3916 + seq_printf(m, " %X:%d", 3917 + i, (lramword & 0x8000) ? 16 : 8); 3621 3918 3622 3919 if ((wdtr_able & ADV_TID_TO_TIDMASK(i)) && 3623 3920 (wdtr_done & ADV_TID_TO_TIDMASK(i)) == 0) { 3624 - len = asc_prt_line(cp, leftlen, "*"); 3625 - ASC_PRT_NEXT(); 3921 + seq_printf(m, "*"); 3626 3922 renegotiate = 1; 3627 3923 } 3628 3924 } 3629 - len = asc_prt_line(cp, leftlen, "\n"); 3630 - ASC_PRT_NEXT(); 3925 + seq_printf(m, "\n"); 3631 3926 3632 3927 AdvReadWordLram(iop_base, ASC_MC_SDTR_ABLE, sdtr_able); 3633 - len = asc_prt_line(cp, leftlen, " Synchronous Enabled:"); 3634 - ASC_PRT_NEXT(); 3928 + seq_printf(m, " Synchronous Enabled:"); 3635 3929 for (i = 0; i <= ADV_MAX_TID; i++) { 3636 3930 if ((chip_scsi_id == i) || 3637 3931 ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) { 3638 3932 continue; 3639 3933 } 3640 3934 3641 - len = asc_prt_line(cp, leftlen, " %X:%c", 3642 - i, 3643 - (sdtr_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 3644 - 'N'); 3645 - ASC_PRT_NEXT(); 3935 + seq_printf(m, " %X:%c", 3936 + i, 3937 + (sdtr_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N'); 3646 3938 } 3647 - len = asc_prt_line(cp, leftlen, "\n"); 3648 - ASC_PRT_NEXT(); 3939 + seq_printf(m, "\n"); 3649 3940 3650 3941 AdvReadWordLram(iop_base, ASC_MC_SDTR_DONE, sdtr_done); 3651 3942 for (i = 0; i <= ADV_MAX_TID; i++) { ··· 3654 3959 continue; 3655 3960 } 3656 3961 3657 - len = asc_prt_line(cp, leftlen, " %X:", i); 3658 - ASC_PRT_NEXT(); 3962 + seq_printf(m, " %X:", i); 3659 3963 3660 3964 if ((lramword & 0x1F) == 0) { /* Check for REQ/ACK Offset 0. */ 3661 - len = asc_prt_line(cp, leftlen, " Asynchronous"); 3662 - ASC_PRT_NEXT(); 3965 + seq_printf(m, " Asynchronous"); 3663 3966 } else { 3664 - len = 3665 - asc_prt_line(cp, leftlen, 3666 - " Transfer Period Factor: "); 3667 - ASC_PRT_NEXT(); 3967 + seq_printf(m, " Transfer Period Factor: "); 3668 3968 3669 3969 if ((lramword & 0x1F00) == 0x1100) { /* 80 Mhz */ 3670 - len = 3671 - asc_prt_line(cp, leftlen, "9 (80.0 Mhz),"); 3672 - ASC_PRT_NEXT(); 3970 + seq_printf(m, "9 (80.0 Mhz),"); 3673 3971 } else if ((lramword & 0x1F00) == 0x1000) { /* 40 Mhz */ 3674 - len = 3675 - asc_prt_line(cp, leftlen, "10 (40.0 Mhz),"); 3676 - ASC_PRT_NEXT(); 3972 + seq_printf(m, "10 (40.0 Mhz),"); 3677 3973 } else { /* 20 Mhz or below. */ 3678 3974 3679 3975 period = (((lramword >> 8) * 25) + 50) / 4; 3680 3976 3681 3977 if (period == 0) { /* Should never happen. */ 3682 - len = 3683 - asc_prt_line(cp, leftlen, 3684 - "%d (? Mhz), "); 3685 - ASC_PRT_NEXT(); 3978 + seq_printf(m, "%d (? Mhz), "); 3686 3979 } else { 3687 - len = asc_prt_line(cp, leftlen, 3688 - "%d (%d.%d Mhz),", 3689 - period, 250 / period, 3690 - ASC_TENTHS(250, 3691 - period)); 3692 - ASC_PRT_NEXT(); 3980 + seq_printf(m, 3981 + "%d (%d.%d Mhz),", 3982 + period, 250 / period, 3983 + ASC_TENTHS(250, period)); 3693 3984 } 3694 3985 } 3695 3986 3696 - len = asc_prt_line(cp, leftlen, " REQ/ACK Offset: %d", 3697 - lramword & 0x1F); 3698 - ASC_PRT_NEXT(); 3987 + seq_printf(m, " REQ/ACK Offset: %d", 3988 + lramword & 0x1F); 3699 3989 } 3700 3990 3701 3991 if ((sdtr_done & ADV_TID_TO_TIDMASK(i)) == 0) { 3702 - len = asc_prt_line(cp, leftlen, "*\n"); 3992 + seq_printf(m, "*\n"); 3703 3993 renegotiate = 1; 3704 3994 } else { 3705 - len = asc_prt_line(cp, leftlen, "\n"); 3995 + seq_printf(m, "\n"); 3706 3996 } 3707 - ASC_PRT_NEXT(); 3708 3997 } 3709 3998 3710 3999 if (renegotiate) { 3711 - len = asc_prt_line(cp, leftlen, 3712 - " * = Re-negotiation pending before next command.\n"); 3713 - ASC_PRT_NEXT(); 4000 + seq_printf(m, 4001 + " * = Re-negotiation pending before next command.\n"); 3714 4002 } 3715 - 3716 - return totlen; 3717 - } 3718 - 3719 - /* 3720 - * asc_proc_copy() 3721 - * 3722 - * Copy proc information to a read buffer taking into account the current 3723 - * read offset in the file and the remaining space in the read buffer. 3724 - */ 3725 - static int 3726 - asc_proc_copy(off_t advoffset, off_t offset, char *curbuf, int leftlen, 3727 - char *cp, int cplen) 3728 - { 3729 - int cnt = 0; 3730 - 3731 - ASC_DBG(2, "offset %d, advoffset %d, cplen %d\n", 3732 - (unsigned)offset, (unsigned)advoffset, cplen); 3733 - if (offset <= advoffset) { 3734 - /* Read offset below current offset, copy everything. */ 3735 - cnt = min(cplen, leftlen); 3736 - ASC_DBG(2, "curbuf 0x%lx, cp 0x%lx, cnt %d\n", 3737 - (ulong)curbuf, (ulong)cp, cnt); 3738 - memcpy(curbuf, cp, cnt); 3739 - } else if (offset < advoffset + cplen) { 3740 - /* Read offset within current range, partial copy. */ 3741 - cnt = (advoffset + cplen) - offset; 3742 - cp = (cp + cplen) - cnt; 3743 - cnt = min(cnt, leftlen); 3744 - ASC_DBG(2, "curbuf 0x%lx, cp 0x%lx, cnt %d\n", 3745 - (ulong)curbuf, (ulong)cp, cnt); 3746 - memcpy(curbuf, cp, cnt); 3747 - } 3748 - return cnt; 3749 4003 } 3750 4004 3751 4005 #ifdef ADVANSYS_STATS 3752 4006 /* 3753 4007 * asc_prt_board_stats() 3754 - * 3755 - * Note: no single line should be greater than ASC_PRTLINE_SIZE, 3756 - * cf. asc_prt_line(). 3757 - * 3758 - * Return the number of characters copied into 'cp'. No more than 3759 - * 'cplen' characters will be copied to 'cp'. 3760 4008 */ 3761 - static int asc_prt_board_stats(struct Scsi_Host *shost, char *cp, int cplen) 4009 + static void asc_prt_board_stats(struct seq_file *m, struct Scsi_Host *shost) 3762 4010 { 3763 4011 struct asc_board *boardp = shost_priv(shost); 3764 4012 struct asc_stats *s = &boardp->asc_stats; 3765 4013 3766 - int leftlen = cplen; 3767 - int len, totlen = 0; 4014 + seq_printf(m, 4015 + "\nLinux Driver Statistics for AdvanSys SCSI Host %d:\n", 4016 + shost->host_no); 3768 4017 3769 - len = asc_prt_line(cp, leftlen, 3770 - "\nLinux Driver Statistics for AdvanSys SCSI Host %d:\n", 3771 - shost->host_no); 3772 - ASC_PRT_NEXT(); 4018 + seq_printf(m, 4019 + " queuecommand %lu, reset %lu, biosparam %lu, interrupt %lu\n", 4020 + s->queuecommand, s->reset, s->biosparam, 4021 + s->interrupt); 3773 4022 3774 - len = asc_prt_line(cp, leftlen, 3775 - " queuecommand %lu, reset %lu, biosparam %lu, interrupt %lu\n", 3776 - s->queuecommand, s->reset, s->biosparam, 3777 - s->interrupt); 3778 - ASC_PRT_NEXT(); 4023 + seq_printf(m, 4024 + " callback %lu, done %lu, build_error %lu, build_noreq %lu, build_nosg %lu\n", 4025 + s->callback, s->done, s->build_error, 4026 + s->adv_build_noreq, s->adv_build_nosg); 3779 4027 3780 - len = asc_prt_line(cp, leftlen, 3781 - " callback %lu, done %lu, build_error %lu, build_noreq %lu, build_nosg %lu\n", 3782 - s->callback, s->done, s->build_error, 3783 - s->adv_build_noreq, s->adv_build_nosg); 3784 - ASC_PRT_NEXT(); 3785 - 3786 - len = asc_prt_line(cp, leftlen, 3787 - " exe_noerror %lu, exe_busy %lu, exe_error %lu, exe_unknown %lu\n", 3788 - s->exe_noerror, s->exe_busy, s->exe_error, 3789 - s->exe_unknown); 3790 - ASC_PRT_NEXT(); 4028 + seq_printf(m, 4029 + " exe_noerror %lu, exe_busy %lu, exe_error %lu, exe_unknown %lu\n", 4030 + s->exe_noerror, s->exe_busy, s->exe_error, 4031 + s->exe_unknown); 3791 4032 3792 4033 /* 3793 4034 * Display data transfer statistics. 3794 4035 */ 3795 4036 if (s->xfer_cnt > 0) { 3796 - len = asc_prt_line(cp, leftlen, " xfer_cnt %lu, xfer_elem %lu, ", 3797 - s->xfer_cnt, s->xfer_elem); 3798 - ASC_PRT_NEXT(); 4037 + seq_printf(m, " xfer_cnt %lu, xfer_elem %lu, ", 4038 + s->xfer_cnt, s->xfer_elem); 3799 4039 3800 - len = asc_prt_line(cp, leftlen, "xfer_bytes %lu.%01lu kb\n", 3801 - s->xfer_sect / 2, ASC_TENTHS(s->xfer_sect, 2)); 3802 - ASC_PRT_NEXT(); 4040 + seq_printf(m, "xfer_bytes %lu.%01lu kb\n", 4041 + s->xfer_sect / 2, ASC_TENTHS(s->xfer_sect, 2)); 3803 4042 3804 4043 /* Scatter gather transfer statistics */ 3805 - len = asc_prt_line(cp, leftlen, " avg_num_elem %lu.%01lu, ", 3806 - s->xfer_elem / s->xfer_cnt, 3807 - ASC_TENTHS(s->xfer_elem, s->xfer_cnt)); 3808 - ASC_PRT_NEXT(); 4044 + seq_printf(m, " avg_num_elem %lu.%01lu, ", 4045 + s->xfer_elem / s->xfer_cnt, 4046 + ASC_TENTHS(s->xfer_elem, s->xfer_cnt)); 3809 4047 3810 - len = asc_prt_line(cp, leftlen, "avg_elem_size %lu.%01lu kb, ", 3811 - (s->xfer_sect / 2) / s->xfer_elem, 3812 - ASC_TENTHS((s->xfer_sect / 2), s->xfer_elem)); 3813 - ASC_PRT_NEXT(); 4048 + seq_printf(m, "avg_elem_size %lu.%01lu kb, ", 4049 + (s->xfer_sect / 2) / s->xfer_elem, 4050 + ASC_TENTHS((s->xfer_sect / 2), s->xfer_elem)); 3814 4051 3815 - len = asc_prt_line(cp, leftlen, "avg_xfer_size %lu.%01lu kb\n", 3816 - (s->xfer_sect / 2) / s->xfer_cnt, 3817 - ASC_TENTHS((s->xfer_sect / 2), s->xfer_cnt)); 3818 - ASC_PRT_NEXT(); 4052 + seq_printf(m, "avg_xfer_size %lu.%01lu kb\n", 4053 + (s->xfer_sect / 2) / s->xfer_cnt, 4054 + ASC_TENTHS((s->xfer_sect / 2), s->xfer_cnt)); 3819 4055 } 3820 - 3821 - return totlen; 3822 4056 } 3823 4057 #endif /* ADVANSYS_STATS */ 3824 4058 3825 4059 /* 3826 - * advansys_proc_info() - /proc/scsi/advansys/{0,1,2,3,...} 4060 + * advansys_show_info() - /proc/scsi/advansys/{0,1,2,3,...} 3827 4061 * 3828 - * *buffer: I/O buffer 3829 - * **start: if inout == FALSE pointer into buffer where user read should start 3830 - * offset: current offset into a /proc/scsi/advansys/[0...] file 3831 - * length: length of buffer 3832 - * hostno: Scsi_Host host_no 3833 - * inout: TRUE - user is writing; FALSE - user is reading 4062 + * m: seq_file to print into 4063 + * shost: Scsi_Host 3834 4064 * 3835 4065 * Return the number of bytes read from or written to a 3836 4066 * /proc/scsi/advansys/[0...] file. 3837 - * 3838 - * Note: This function uses the per board buffer 'prtbuf' which is 3839 - * allocated when the board is initialized in advansys_detect(). The 3840 - * buffer is ASC_PRTBUF_SIZE bytes. The function asc_proc_copy() is 3841 - * used to write to the buffer. The way asc_proc_copy() is written 3842 - * if 'prtbuf' is too small it will not be overwritten. Instead the 3843 - * user just won't get all the available statistics. 3844 4067 */ 3845 4068 static int 3846 - advansys_proc_info(struct Scsi_Host *shost, char *buffer, char **start, 3847 - off_t offset, int length, int inout) 4069 + advansys_show_info(struct seq_file *m, struct Scsi_Host *shost) 3848 4070 { 3849 4071 struct asc_board *boardp = shost_priv(shost); 3850 - char *cp; 3851 - int cplen; 3852 - int cnt; 3853 - int totcnt; 3854 - int leftlen; 3855 - char *curbuf; 3856 - off_t advoffset; 3857 4072 3858 4073 ASC_DBG(1, "begin\n"); 3859 4074 3860 4075 /* 3861 - * User write not supported. 3862 - */ 3863 - if (inout == TRUE) 3864 - return -ENOSYS; 3865 - 3866 - /* 3867 4076 * User read of /proc/scsi/advansys/[0...] file. 3868 4077 */ 3869 - 3870 - /* Copy read data starting at the beginning of the buffer. */ 3871 - *start = buffer; 3872 - curbuf = buffer; 3873 - advoffset = 0; 3874 - totcnt = 0; 3875 - leftlen = length; 3876 4078 3877 4079 /* 3878 4080 * Get board configuration information. 3879 4081 * 3880 4082 * advansys_info() returns the board string from its own static buffer. 3881 4083 */ 3882 - cp = (char *)advansys_info(shost); 3883 - strcat(cp, "\n"); 3884 - cplen = strlen(cp); 3885 4084 /* Copy board information. */ 3886 - cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen); 3887 - totcnt += cnt; 3888 - leftlen -= cnt; 3889 - if (leftlen == 0) { 3890 - ASC_DBG(1, "totcnt %d\n", totcnt); 3891 - return totcnt; 3892 - } 3893 - advoffset += cplen; 3894 - curbuf += cnt; 3895 - 4085 + seq_printf(m, "%s\n", (char *)advansys_info(shost)); 3896 4086 /* 3897 4087 * Display Wide Board BIOS Information. 3898 4088 */ 3899 - if (!ASC_NARROW_BOARD(boardp)) { 3900 - cp = boardp->prtbuf; 3901 - cplen = asc_prt_adv_bios(shost, cp, ASC_PRTBUF_SIZE); 3902 - BUG_ON(cplen >= ASC_PRTBUF_SIZE); 3903 - cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, 3904 - cplen); 3905 - totcnt += cnt; 3906 - leftlen -= cnt; 3907 - if (leftlen == 0) { 3908 - ASC_DBG(1, "totcnt %d\n", totcnt); 3909 - return totcnt; 3910 - } 3911 - advoffset += cplen; 3912 - curbuf += cnt; 3913 - } 4089 + if (!ASC_NARROW_BOARD(boardp)) 4090 + asc_prt_adv_bios(m, shost); 3914 4091 3915 4092 /* 3916 4093 * Display driver information for each device attached to the board. 3917 4094 */ 3918 - cp = boardp->prtbuf; 3919 - cplen = asc_prt_board_devices(shost, cp, ASC_PRTBUF_SIZE); 3920 - BUG_ON(cplen >= ASC_PRTBUF_SIZE); 3921 - cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen); 3922 - totcnt += cnt; 3923 - leftlen -= cnt; 3924 - if (leftlen == 0) { 3925 - ASC_DBG(1, "totcnt %d\n", totcnt); 3926 - return totcnt; 3927 - } 3928 - advoffset += cplen; 3929 - curbuf += cnt; 4095 + asc_prt_board_devices(m, shost); 3930 4096 3931 4097 /* 3932 4098 * Display EEPROM configuration for the board. 3933 4099 */ 3934 - cp = boardp->prtbuf; 3935 - if (ASC_NARROW_BOARD(boardp)) { 3936 - cplen = asc_prt_asc_board_eeprom(shost, cp, ASC_PRTBUF_SIZE); 3937 - } else { 3938 - cplen = asc_prt_adv_board_eeprom(shost, cp, ASC_PRTBUF_SIZE); 3939 - } 3940 - BUG_ON(cplen >= ASC_PRTBUF_SIZE); 3941 - cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen); 3942 - totcnt += cnt; 3943 - leftlen -= cnt; 3944 - if (leftlen == 0) { 3945 - ASC_DBG(1, "totcnt %d\n", totcnt); 3946 - return totcnt; 3947 - } 3948 - advoffset += cplen; 3949 - curbuf += cnt; 4100 + if (ASC_NARROW_BOARD(boardp)) 4101 + asc_prt_asc_board_eeprom(m, shost); 4102 + else 4103 + asc_prt_adv_board_eeprom(m, shost); 3950 4104 3951 4105 /* 3952 4106 * Display driver configuration and information for the board. 3953 4107 */ 3954 - cp = boardp->prtbuf; 3955 - cplen = asc_prt_driver_conf(shost, cp, ASC_PRTBUF_SIZE); 3956 - BUG_ON(cplen >= ASC_PRTBUF_SIZE); 3957 - cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen); 3958 - totcnt += cnt; 3959 - leftlen -= cnt; 3960 - if (leftlen == 0) { 3961 - ASC_DBG(1, "totcnt %d\n", totcnt); 3962 - return totcnt; 3963 - } 3964 - advoffset += cplen; 3965 - curbuf += cnt; 4108 + asc_prt_driver_conf(m, shost); 3966 4109 3967 4110 #ifdef ADVANSYS_STATS 3968 4111 /* 3969 4112 * Display driver statistics for the board. 3970 4113 */ 3971 - cp = boardp->prtbuf; 3972 - cplen = asc_prt_board_stats(shost, cp, ASC_PRTBUF_SIZE); 3973 - BUG_ON(cplen >= ASC_PRTBUF_SIZE); 3974 - cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen); 3975 - totcnt += cnt; 3976 - leftlen -= cnt; 3977 - if (leftlen == 0) { 3978 - ASC_DBG(1, "totcnt %d\n", totcnt); 3979 - return totcnt; 3980 - } 3981 - advoffset += cplen; 3982 - curbuf += cnt; 4114 + asc_prt_board_stats(m, shost); 3983 4115 #endif /* ADVANSYS_STATS */ 3984 4116 3985 4117 /* 3986 4118 * Display Asc Library dynamic configuration information 3987 4119 * for the board. 3988 4120 */ 3989 - cp = boardp->prtbuf; 3990 - if (ASC_NARROW_BOARD(boardp)) { 3991 - cplen = asc_prt_asc_board_info(shost, cp, ASC_PRTBUF_SIZE); 3992 - } else { 3993 - cplen = asc_prt_adv_board_info(shost, cp, ASC_PRTBUF_SIZE); 3994 - } 3995 - BUG_ON(cplen >= ASC_PRTBUF_SIZE); 3996 - cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen); 3997 - totcnt += cnt; 3998 - leftlen -= cnt; 3999 - if (leftlen == 0) { 4000 - ASC_DBG(1, "totcnt %d\n", totcnt); 4001 - return totcnt; 4002 - } 4003 - advoffset += cplen; 4004 - curbuf += cnt; 4005 - 4006 - ASC_DBG(1, "totcnt %d\n", totcnt); 4007 - 4008 - return totcnt; 4121 + if (ASC_NARROW_BOARD(boardp)) 4122 + asc_prt_asc_board_info(m, shost); 4123 + else 4124 + asc_prt_adv_board_info(m, shost); 4125 + return 0; 4009 4126 } 4010 4127 #endif /* CONFIG_PROC_FS */ 4011 4128 ··· 11250 11743 static struct scsi_host_template advansys_template = { 11251 11744 .proc_name = DRV_NAME, 11252 11745 #ifdef CONFIG_PROC_FS 11253 - .proc_info = advansys_proc_info, 11746 + .show_info = advansys_show_info, 11254 11747 #endif 11255 11748 .name = DRV_NAME, 11256 11749 .info = advansys_info, ··· 11446 11939 #endif /* CONFIG_PCI */ 11447 11940 } 11448 11941 11449 - #ifdef CONFIG_PROC_FS 11450 - /* 11451 - * Allocate buffer for printing information from 11452 - * /proc/scsi/advansys/[0...]. 11453 - */ 11454 - boardp->prtbuf = kmalloc(ASC_PRTBUF_SIZE, GFP_KERNEL); 11455 - if (!boardp->prtbuf) { 11456 - shost_printk(KERN_ERR, shost, "kmalloc(%d) returned NULL\n", 11457 - ASC_PRTBUF_SIZE); 11458 - ret = -ENOMEM; 11459 - goto err_unmap; 11460 - } 11461 - #endif /* CONFIG_PROC_FS */ 11462 - 11463 11942 if (ASC_NARROW_BOARD(boardp)) { 11464 11943 /* 11465 11944 * Set the board bus type and PCI IRQ before ··· 11503 12010 } 11504 12011 11505 12012 if (ret) 11506 - goto err_free_proc; 12013 + goto err_unmap; 11507 12014 11508 12015 /* 11509 12016 * Save the EEPROM configuration so that it can be displayed ··· 11548 12055 ASC_DBG(2, "AscInitSetConfig()\n"); 11549 12056 ret = AscInitSetConfig(pdev, shost) ? -ENODEV : 0; 11550 12057 if (ret) 11551 - goto err_free_proc; 12058 + goto err_unmap; 11552 12059 } else { 11553 12060 ADVEEP_3550_CONFIG *ep_3550; 11554 12061 ADVEEP_38C0800_CONFIG *ep_38C0800; ··· 11783 12290 shost_printk(KERN_ERR, shost, "request_dma() " 11784 12291 "%d failed %d\n", 11785 12292 shost->dma_channel, ret); 11786 - goto err_free_proc; 12293 + goto err_unmap; 11787 12294 } 11788 12295 AscEnableIsaDma(shost->dma_channel); 11789 12296 } ··· 11864 12371 if (shost->dma_channel != NO_ISA_DMA) 11865 12372 free_dma(shost->dma_channel); 11866 12373 #endif 11867 - err_free_proc: 11868 - kfree(boardp->prtbuf); 11869 12374 err_unmap: 11870 12375 if (boardp->ioremap_addr) 11871 12376 iounmap(boardp->ioremap_addr); ··· 11897 12406 iounmap(board->ioremap_addr); 11898 12407 advansys_wide_free_mem(board); 11899 12408 } 11900 - kfree(board->prtbuf); 11901 12409 scsi_host_put(shost); 11902 12410 ASC_DBG(1, "end\n"); 11903 12411 return 0;