dasd_int.h (ebf8889bd1fe3615991ff4494635d237280652a2) dasd_int.h (8e09f21574ea3028d5629e5de759e0b196c690c5)
1/*
2 * File...........: linux/drivers/s390/block/dasd_int.h
3 * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
4 * Horst Hummel <Horst.Hummel@de.ibm.com>
5 * Martin Schwidefsky <schwidefsky@de.ibm.com>
6 * Bugreports.to..: <Linux390@de.ibm.com>
7 * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
8 *

--- 50 unchanged lines hidden (view full) ---

59#include <asm/debug.h>
60#include <asm/dasd.h>
61#include <asm/idals.h>
62
63/*
64 * SECTION: Type definitions
65 */
66struct dasd_device;
1/*
2 * File...........: linux/drivers/s390/block/dasd_int.h
3 * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
4 * Horst Hummel <Horst.Hummel@de.ibm.com>
5 * Martin Schwidefsky <schwidefsky@de.ibm.com>
6 * Bugreports.to..: <Linux390@de.ibm.com>
7 * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
8 *

--- 50 unchanged lines hidden (view full) ---

59#include <asm/debug.h>
60#include <asm/dasd.h>
61#include <asm/idals.h>
62
63/*
64 * SECTION: Type definitions
65 */
66struct dasd_device;
67struct dasd_block;
67
68
68typedef enum {
69 dasd_era_fatal = -1, /* no chance to recover */
70 dasd_era_none = 0, /* don't recover, everything alright */
71 dasd_era_msg = 1, /* don't recover, just report... */
72 dasd_era_recover = 2 /* recovery action recommended */
73} dasd_era_t;
74
75/* BIT DEFINITIONS FOR SENSE DATA */
76#define DASD_SENSE_BIT_0 0x80
77#define DASD_SENSE_BIT_1 0x40
78#define DASD_SENSE_BIT_2 0x20
79#define DASD_SENSE_BIT_3 0x10
80
81/*
82 * SECTION: MACROs for klogd and s390 debug feature (dbf)

--- 63 unchanged lines hidden (view full) ---

146
147#define MESSAGE_LOG(d_loglevel,d_string,d_args...)\
148do { \
149 printk(d_loglevel PRINTK_HEADER " " d_string "\n", d_args); \
150} while(0)
151
152struct dasd_ccw_req {
153 unsigned int magic; /* Eye catcher */
69/* BIT DEFINITIONS FOR SENSE DATA */
70#define DASD_SENSE_BIT_0 0x80
71#define DASD_SENSE_BIT_1 0x40
72#define DASD_SENSE_BIT_2 0x20
73#define DASD_SENSE_BIT_3 0x10
74
75/*
76 * SECTION: MACROs for klogd and s390 debug feature (dbf)

--- 63 unchanged lines hidden (view full) ---

140
141#define MESSAGE_LOG(d_loglevel,d_string,d_args...)\
142do { \
143 printk(d_loglevel PRINTK_HEADER " " d_string "\n", d_args); \
144} while(0)
145
146struct dasd_ccw_req {
147 unsigned int magic; /* Eye catcher */
154 struct list_head list; /* list_head for request queueing. */
148 struct list_head devlist; /* for dasd_device request queue */
149 struct list_head blocklist; /* for dasd_block request queue */
155
156 /* Where to execute what... */
150
151 /* Where to execute what... */
157 struct dasd_device *device; /* device the request is for */
152 struct dasd_block *block; /* the originating block device */
153 struct dasd_device *memdev; /* the device used to allocate this */
154 struct dasd_device *startdev; /* device the request is started on */
158 struct ccw1 *cpaddr; /* address of channel program */
155 struct ccw1 *cpaddr; /* address of channel program */
159 char status; /* status of this request */
156 char status; /* status of this request */
160 short retries; /* A retry counter */
161 unsigned long flags; /* flags of this request */
162
163 /* ... and how */
164 unsigned long starttime; /* jiffies time of request start */
165 int expires; /* expiration period in jiffies */
157 short retries; /* A retry counter */
158 unsigned long flags; /* flags of this request */
159
160 /* ... and how */
161 unsigned long starttime; /* jiffies time of request start */
162 int expires; /* expiration period in jiffies */
166 char lpm; /* logical path mask */
163 char lpm; /* logical path mask */
167 void *data; /* pointer to data area */
168
169 /* these are important for recovering erroneous requests */
170 struct irb irb; /* device status in case of an error */
171 struct dasd_ccw_req *refers; /* ERP-chain queueing. */
172 void *function; /* originating ERP action */
173
174 /* these are for statistics only */
175 unsigned long long buildclk; /* TOD-clock of request generation */
176 unsigned long long startclk; /* TOD-clock of request start */
177 unsigned long long stopclk; /* TOD-clock of request interrupt */
178 unsigned long long endclk; /* TOD-clock of request termination */
179
180 /* Callback that is called after reaching final status. */
164 void *data; /* pointer to data area */
165
166 /* these are important for recovering erroneous requests */
167 struct irb irb; /* device status in case of an error */
168 struct dasd_ccw_req *refers; /* ERP-chain queueing. */
169 void *function; /* originating ERP action */
170
171 /* these are for statistics only */
172 unsigned long long buildclk; /* TOD-clock of request generation */
173 unsigned long long startclk; /* TOD-clock of request start */
174 unsigned long long stopclk; /* TOD-clock of request interrupt */
175 unsigned long long endclk; /* TOD-clock of request termination */
176
177 /* Callback that is called after reaching final status. */
181 void (*callback)(struct dasd_ccw_req *, void *data);
182 void *callback_data;
178 void (*callback)(struct dasd_ccw_req *, void *data);
179 void *callback_data;
183};
184
185/*
186 * dasd_ccw_req -> status can be:
187 */
180};
181
182/*
183 * dasd_ccw_req -> status can be:
184 */
188#define DASD_CQR_FILLED 0x00 /* request is ready to be processed */
189#define DASD_CQR_QUEUED 0x01 /* request is queued to be processed */
190#define DASD_CQR_IN_IO 0x02 /* request is currently in IO */
191#define DASD_CQR_DONE 0x03 /* request is completed successfully */
192#define DASD_CQR_ERROR 0x04 /* request is completed with error */
193#define DASD_CQR_FAILED 0x05 /* request is finally failed */
194#define DASD_CQR_CLEAR 0x06 /* request is clear pending */
185#define DASD_CQR_FILLED 0x00 /* request is ready to be processed */
186#define DASD_CQR_DONE 0x01 /* request is completed successfully */
187#define DASD_CQR_NEED_ERP 0x02 /* request needs recovery action */
188#define DASD_CQR_IN_ERP 0x03 /* request is in recovery */
189#define DASD_CQR_FAILED 0x04 /* request is finally failed */
190#define DASD_CQR_TERMINATED 0x05 /* request was stopped by driver */
195
191
192#define DASD_CQR_QUEUED 0x80 /* request is queued to be processed */
193#define DASD_CQR_IN_IO 0x81 /* request is currently in IO */
194#define DASD_CQR_ERROR 0x82 /* request is completed with error */
195#define DASD_CQR_CLEAR_PENDING 0x83 /* request is clear pending */
196#define DASD_CQR_CLEARED 0x84 /* request was cleared */
197#define DASD_CQR_SUCCESS 0x85 /* request was successfull */
198
199
196/* per dasd_ccw_req flags */
197#define DASD_CQR_FLAGS_USE_ERP 0 /* use ERP for this request */
198#define DASD_CQR_FLAGS_FAILFAST 1 /* FAILFAST */
199
200/* Signature for error recovery functions. */
201typedef struct dasd_ccw_req *(*dasd_erp_fn_t) (struct dasd_ccw_req *);
202
203/*

--- 5 unchanged lines hidden (view full) ---

209struct dasd_discipline {
210 struct module *owner;
211 char ebcname[8]; /* a name used for tagging and printks */
212 char name[8]; /* a name used for tagging and printks */
213 int max_blocks; /* maximum number of blocks to be chained */
214
215 struct list_head list; /* used for list of disciplines */
216
200/* per dasd_ccw_req flags */
201#define DASD_CQR_FLAGS_USE_ERP 0 /* use ERP for this request */
202#define DASD_CQR_FLAGS_FAILFAST 1 /* FAILFAST */
203
204/* Signature for error recovery functions. */
205typedef struct dasd_ccw_req *(*dasd_erp_fn_t) (struct dasd_ccw_req *);
206
207/*

--- 5 unchanged lines hidden (view full) ---

213struct dasd_discipline {
214 struct module *owner;
215 char ebcname[8]; /* a name used for tagging and printks */
216 char name[8]; /* a name used for tagging and printks */
217 int max_blocks; /* maximum number of blocks to be chained */
218
219 struct list_head list; /* used for list of disciplines */
220
217 /*
218 * Device recognition functions. check_device is used to verify
219 * the sense data and the information returned by read device
220 * characteristics. It returns 0 if the discipline can be used
221 * for the device in question.
222 * do_analysis is used in the step from device state "basic" to
223 * state "accept". It returns 0 if the device can be made ready,
224 * it returns -EMEDIUMTYPE if the device can't be made ready or
225 * -EAGAIN if do_analysis started a ccw that needs to complete
226 * before the analysis may be repeated.
227 */
228 int (*check_device)(struct dasd_device *);
229 int (*do_analysis) (struct dasd_device *);
221 /*
222 * Device recognition functions. check_device is used to verify
223 * the sense data and the information returned by read device
224 * characteristics. It returns 0 if the discipline can be used
225 * for the device in question. uncheck_device is called during
226 * device shutdown to deregister a device from its discipline.
227 */
228 int (*check_device) (struct dasd_device *);
229 void (*uncheck_device) (struct dasd_device *);
230
230
231 /*
232 * Device operation functions. build_cp creates a ccw chain for
233 * a block device request, start_io starts the request and
234 * term_IO cancels it (e.g. in case of a timeout). format_device
235 * returns a ccw chain to be used to format the device.
236 */
231 /*
232 * do_analysis is used in the step from device state "basic" to
233 * state "accept". It returns 0 if the device can be made ready,
234 * it returns -EMEDIUMTYPE if the device can't be made ready or
235 * -EAGAIN if do_analysis started a ccw that needs to complete
236 * before the analysis may be repeated.
237 */
238 int (*do_analysis) (struct dasd_block *);
239
240 /*
241 * Last things to do when a device is set online, and first things
242 * when it is set offline.
243 */
244 int (*ready_to_online) (struct dasd_device *);
245 int (*online_to_ready) (struct dasd_device *);
246
247 /*
248 * Device operation functions. build_cp creates a ccw chain for
249 * a block device request, start_io starts the request and
250 * term_IO cancels it (e.g. in case of a timeout). format_device
251 * returns a ccw chain to be used to format the device.
252 * handle_terminated_request allows to examine a cqr and prepare
253 * it for retry.
254 */
237 struct dasd_ccw_req *(*build_cp) (struct dasd_device *,
255 struct dasd_ccw_req *(*build_cp) (struct dasd_device *,
256 struct dasd_block *,
238 struct request *);
239 int (*start_IO) (struct dasd_ccw_req *);
240 int (*term_IO) (struct dasd_ccw_req *);
257 struct request *);
258 int (*start_IO) (struct dasd_ccw_req *);
259 int (*term_IO) (struct dasd_ccw_req *);
260 void (*handle_terminated_request) (struct dasd_ccw_req *);
241 struct dasd_ccw_req *(*format_device) (struct dasd_device *,
242 struct format_data_t *);
243 int (*free_cp) (struct dasd_ccw_req *, struct request *);
261 struct dasd_ccw_req *(*format_device) (struct dasd_device *,
262 struct format_data_t *);
263 int (*free_cp) (struct dasd_ccw_req *, struct request *);
244 /*
245 * Error recovery functions. examine_error() returns a value that
246 * indicates what to do for an error condition. If examine_error()
264
265 /*
266 * Error recovery functions. examine_error() returns a value that
267 * indicates what to do for an error condition. If examine_error()
247 * returns 'dasd_era_recover' erp_action() is called to create a
268 * returns 'dasd_era_recover' erp_action() is called to create a
248 * special error recovery ccw. erp_postaction() is called after
249 * an error recovery ccw has finished its execution. dump_sense
250 * is called for every error condition to print the sense data
251 * to the console.
252 */
253 dasd_era_t(*examine_error) (struct dasd_ccw_req *, struct irb *);
269 * special error recovery ccw. erp_postaction() is called after
270 * an error recovery ccw has finished its execution. dump_sense
271 * is called for every error condition to print the sense data
272 * to the console.
273 */
254 dasd_erp_fn_t(*erp_action) (struct dasd_ccw_req *);
255 dasd_erp_fn_t(*erp_postaction) (struct dasd_ccw_req *);
256 void (*dump_sense) (struct dasd_device *, struct dasd_ccw_req *,
257 struct irb *);
258
274 dasd_erp_fn_t(*erp_action) (struct dasd_ccw_req *);
275 dasd_erp_fn_t(*erp_postaction) (struct dasd_ccw_req *);
276 void (*dump_sense) (struct dasd_device *, struct dasd_ccw_req *,
277 struct irb *);
278
279 void (*handle_unsolicited_interrupt) (struct dasd_device *,
280 struct irb *);
281
259 /* i/o control functions. */
282 /* i/o control functions. */
260 int (*fill_geometry) (struct dasd_device *, struct hd_geometry *);
283 int (*fill_geometry) (struct dasd_block *, struct hd_geometry *);
261 int (*fill_info) (struct dasd_device *, struct dasd_information2_t *);
284 int (*fill_info) (struct dasd_device *, struct dasd_information2_t *);
262 int (*ioctl) (struct dasd_device *, unsigned int, void __user *);
285 int (*ioctl) (struct dasd_block *, unsigned int, void __user *);
263};
264
265extern struct dasd_discipline *dasd_diag_discipline_pointer;
266
267/*
268 * Unique identifier for dasd device.
269 */
286};
287
288extern struct dasd_discipline *dasd_diag_discipline_pointer;
289
290/*
291 * Unique identifier for dasd device.
292 */
293#define UA_NOT_CONFIGURED 0x00
294#define UA_BASE_DEVICE 0x01
295#define UA_BASE_PAV_ALIAS 0x02
296#define UA_HYPER_PAV_ALIAS 0x03
297
270struct dasd_uid {
298struct dasd_uid {
271 __u8 alias;
299 __u8 type;
272 char vendor[4];
273 char serial[15];
274 __u16 ssid;
300 char vendor[4];
301 char serial[15];
302 __u16 ssid;
275 __u8 unit_addr;
303 __u8 real_unit_addr;
304 __u8 base_unit_addr;
276};
277
278/*
279 * Notification numbers for extended error reporting notifications:
280 * The DASD_EER_DISABLE notification is sent before a dasd_device (and it's
281 * eer pointer) is freed. The error reporting module needs to do all necessary
282 * cleanup steps.
283 * The DASD_EER_TRIGGER notification sends the actual error reports (triggers).

--- 4 unchanged lines hidden (view full) ---

288/* Trigger IDs for extended error reporting DASD_EER_TRIGGER notification */
289#define DASD_EER_FATALERROR 1
290#define DASD_EER_NOPATH 2
291#define DASD_EER_STATECHANGE 3
292#define DASD_EER_PPRCSUSPEND 4
293
294struct dasd_device {
295 /* Block device stuff. */
305};
306
307/*
308 * Notification numbers for extended error reporting notifications:
309 * The DASD_EER_DISABLE notification is sent before a dasd_device (and it's
310 * eer pointer) is freed. The error reporting module needs to do all necessary
311 * cleanup steps.
312 * The DASD_EER_TRIGGER notification sends the actual error reports (triggers).

--- 4 unchanged lines hidden (view full) ---

317/* Trigger IDs for extended error reporting DASD_EER_TRIGGER notification */
318#define DASD_EER_FATALERROR 1
319#define DASD_EER_NOPATH 2
320#define DASD_EER_STATECHANGE 3
321#define DASD_EER_PPRCSUSPEND 4
322
323struct dasd_device {
324 /* Block device stuff. */
296 struct gendisk *gdp;
297 struct request_queue *request_queue;
298 spinlock_t request_queue_lock;
299 struct block_device *bdev;
325 struct dasd_block *block;
326
300 unsigned int devindex;
327 unsigned int devindex;
301 unsigned long blocks; /* size of volume in blocks */
302 unsigned int bp_block; /* bytes per block */
303 unsigned int s2b_shift; /* log2 (bp_block/512) */
304 unsigned long flags; /* per device flags */
305 unsigned short features; /* copy of devmap-features (read-only!) */
306
307 /* extended error reporting stuff (eer) */
308 struct dasd_ccw_req *eer_cqr;
309
310 /* Device discipline stuff. */
311 struct dasd_discipline *discipline;
312 struct dasd_discipline *base_discipline;
313 char *private;
314
315 /* Device state and target state. */
316 int state, target;
317 int stopped; /* device (ccw_device_start) was stopped */
318
328 unsigned long flags; /* per device flags */
329 unsigned short features; /* copy of devmap-features (read-only!) */
330
331 /* extended error reporting stuff (eer) */
332 struct dasd_ccw_req *eer_cqr;
333
334 /* Device discipline stuff. */
335 struct dasd_discipline *discipline;
336 struct dasd_discipline *base_discipline;
337 char *private;
338
339 /* Device state and target state. */
340 int state, target;
341 int stopped; /* device (ccw_device_start) was stopped */
342
319 /* Open and reference count. */
343 /* reference count. */
320 atomic_t ref_count;
344 atomic_t ref_count;
321 atomic_t open_count;
322
323 /* ccw queue and memory for static ccw/erp buffers. */
324 struct list_head ccw_queue;
325 spinlock_t mem_lock;
326 void *ccw_mem;
327 void *erp_mem;
328 struct list_head ccw_chunks;
329 struct list_head erp_chunks;
330
331 atomic_t tasklet_scheduled;
332 struct tasklet_struct tasklet;
333 struct work_struct kick_work;
334 struct timer_list timer;
335
336 debug_info_t *debug_area;
337
338 struct ccw_device *cdev;
339
345
346 /* ccw queue and memory for static ccw/erp buffers. */
347 struct list_head ccw_queue;
348 spinlock_t mem_lock;
349 void *ccw_mem;
350 void *erp_mem;
351 struct list_head ccw_chunks;
352 struct list_head erp_chunks;
353
354 atomic_t tasklet_scheduled;
355 struct tasklet_struct tasklet;
356 struct work_struct kick_work;
357 struct timer_list timer;
358
359 debug_info_t *debug_area;
360
361 struct ccw_device *cdev;
362
363 /* hook for alias management */
364 struct list_head alias_list;
365};
366
367struct dasd_block {
368 /* Block device stuff. */
369 struct gendisk *gdp;
370 struct request_queue *request_queue;
371 spinlock_t request_queue_lock;
372 struct block_device *bdev;
373 atomic_t open_count;
374
375 unsigned long blocks; /* size of volume in blocks */
376 unsigned int bp_block; /* bytes per block */
377 unsigned int s2b_shift; /* log2 (bp_block/512) */
378
379 struct dasd_device *base;
380 struct list_head ccw_queue;
381 spinlock_t queue_lock;
382
383 atomic_t tasklet_scheduled;
384 struct tasklet_struct tasklet;
385 struct timer_list timer;
386
340#ifdef CONFIG_DASD_PROFILE
341 struct dasd_profile_info_t profile;
342#endif
343};
344
387#ifdef CONFIG_DASD_PROFILE
388 struct dasd_profile_info_t profile;
389#endif
390};
391
392
393
345/* reasons why device (ccw_device_start) was stopped */
346#define DASD_STOPPED_NOT_ACC 1 /* not accessible */
347#define DASD_STOPPED_QUIESCE 2 /* Quiesced */
348#define DASD_STOPPED_PENDING 4 /* long busy */
349#define DASD_STOPPED_DC_WAIT 8 /* disconnected, wait */
394/* reasons why device (ccw_device_start) was stopped */
395#define DASD_STOPPED_NOT_ACC 1 /* not accessible */
396#define DASD_STOPPED_QUIESCE 2 /* Quiesced */
397#define DASD_STOPPED_PENDING 4 /* long busy */
398#define DASD_STOPPED_DC_WAIT 8 /* disconnected, wait */
350#define DASD_STOPPED_DC_EIO 16 /* disconnected, return -EIO */
399#define DASD_STOPPED_SU 16 /* summary unit check handling */
351
352/* per device flags */
400
401/* per device flags */
353#define DASD_FLAG_DSC_ERROR 2 /* return -EIO when disconnected */
354#define DASD_FLAG_OFFLINE 3 /* device is in offline processing */
355#define DASD_FLAG_EER_SNSS 4 /* A SNSS is required */
356#define DASD_FLAG_EER_IN_USE 5 /* A SNSS request is running */
357
358void dasd_put_device_wake(struct dasd_device *);
359
360/*
361 * Reference count inliners

--- 122 unchanged lines hidden (view full) ---

484dasd_kmalloc_set_cda(struct ccw1 *ccw, void *cda, struct dasd_device *device)
485{
486 return set_normalized_cda(ccw, cda);
487}
488
489struct dasd_device *dasd_alloc_device(void);
490void dasd_free_device(struct dasd_device *);
491
402#define DASD_FLAG_OFFLINE 3 /* device is in offline processing */
403#define DASD_FLAG_EER_SNSS 4 /* A SNSS is required */
404#define DASD_FLAG_EER_IN_USE 5 /* A SNSS request is running */
405
406void dasd_put_device_wake(struct dasd_device *);
407
408/*
409 * Reference count inliners

--- 122 unchanged lines hidden (view full) ---

532dasd_kmalloc_set_cda(struct ccw1 *ccw, void *cda, struct dasd_device *device)
533{
534 return set_normalized_cda(ccw, cda);
535}
536
537struct dasd_device *dasd_alloc_device(void);
538void dasd_free_device(struct dasd_device *);
539
540struct dasd_block *dasd_alloc_block(void);
541void dasd_free_block(struct dasd_block *);
542
492void dasd_enable_device(struct dasd_device *);
493void dasd_set_target_state(struct dasd_device *, int);
494void dasd_kick_device(struct dasd_device *);
495
496void dasd_add_request_head(struct dasd_ccw_req *);
497void dasd_add_request_tail(struct dasd_ccw_req *);
498int dasd_start_IO(struct dasd_ccw_req *);
499int dasd_term_IO(struct dasd_ccw_req *);
543void dasd_enable_device(struct dasd_device *);
544void dasd_set_target_state(struct dasd_device *, int);
545void dasd_kick_device(struct dasd_device *);
546
547void dasd_add_request_head(struct dasd_ccw_req *);
548void dasd_add_request_tail(struct dasd_ccw_req *);
549int dasd_start_IO(struct dasd_ccw_req *);
550int dasd_term_IO(struct dasd_ccw_req *);
500void dasd_schedule_bh(struct dasd_device *);
551void dasd_schedule_device_bh(struct dasd_device *);
552void dasd_schedule_block_bh(struct dasd_block *);
501int dasd_sleep_on(struct dasd_ccw_req *);
502int dasd_sleep_on_immediatly(struct dasd_ccw_req *);
503int dasd_sleep_on_interruptible(struct dasd_ccw_req *);
553int dasd_sleep_on(struct dasd_ccw_req *);
554int dasd_sleep_on_immediatly(struct dasd_ccw_req *);
555int dasd_sleep_on_interruptible(struct dasd_ccw_req *);
504void dasd_set_timer(struct dasd_device *, int);
505void dasd_clear_timer(struct dasd_device *);
556void dasd_device_set_timer(struct dasd_device *, int);
557void dasd_device_clear_timer(struct dasd_device *);
558void dasd_block_set_timer(struct dasd_block *, int);
559void dasd_block_clear_timer(struct dasd_block *);
506int dasd_cancel_req(struct dasd_ccw_req *);
560int dasd_cancel_req(struct dasd_ccw_req *);
561int dasd_flush_device_queue(struct dasd_device *);
507int dasd_generic_probe (struct ccw_device *, struct dasd_discipline *);
508void dasd_generic_remove (struct ccw_device *cdev);
509int dasd_generic_set_online(struct ccw_device *, struct dasd_discipline *);
510int dasd_generic_set_offline (struct ccw_device *cdev);
511int dasd_generic_notify(struct ccw_device *, int);
562int dasd_generic_probe (struct ccw_device *, struct dasd_discipline *);
563void dasd_generic_remove (struct ccw_device *cdev);
564int dasd_generic_set_online(struct ccw_device *, struct dasd_discipline *);
565int dasd_generic_set_offline (struct ccw_device *cdev);
566int dasd_generic_notify(struct ccw_device *, int);
567void dasd_generic_handle_state_change(struct dasd_device *);
512
513int dasd_generic_read_dev_chars(struct dasd_device *, char *, void **, int);
514
515/* externals in dasd_devmap.c */
516extern int dasd_max_devindex;
517extern int dasd_probeonly;
518extern int dasd_autodetect;
519extern int dasd_nopav;

--- 17 unchanged lines hidden (view full) ---

537struct dasd_device *dasd_device_from_devindex(int);
538
539int dasd_parse(void);
540int dasd_busid_known(char *);
541
542/* externals in dasd_gendisk.c */
543int dasd_gendisk_init(void);
544void dasd_gendisk_exit(void);
568
569int dasd_generic_read_dev_chars(struct dasd_device *, char *, void **, int);
570
571/* externals in dasd_devmap.c */
572extern int dasd_max_devindex;
573extern int dasd_probeonly;
574extern int dasd_autodetect;
575extern int dasd_nopav;

--- 17 unchanged lines hidden (view full) ---

593struct dasd_device *dasd_device_from_devindex(int);
594
595int dasd_parse(void);
596int dasd_busid_known(char *);
597
598/* externals in dasd_gendisk.c */
599int dasd_gendisk_init(void);
600void dasd_gendisk_exit(void);
545int dasd_gendisk_alloc(struct dasd_device *);
546void dasd_gendisk_free(struct dasd_device *);
547int dasd_scan_partitions(struct dasd_device *);
548void dasd_destroy_partitions(struct dasd_device *);
601int dasd_gendisk_alloc(struct dasd_block *);
602void dasd_gendisk_free(struct dasd_block *);
603int dasd_scan_partitions(struct dasd_block *);
604void dasd_destroy_partitions(struct dasd_block *);
549
550/* externals in dasd_ioctl.c */
551int dasd_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
552long dasd_compat_ioctl(struct file *, unsigned int, unsigned long);
553
554/* externals in dasd_proc.c */
555int dasd_proc_init(void);
556void dasd_proc_exit(void);
557
558/* externals in dasd_erp.c */
559struct dasd_ccw_req *dasd_default_erp_action(struct dasd_ccw_req *);
560struct dasd_ccw_req *dasd_default_erp_postaction(struct dasd_ccw_req *);
561struct dasd_ccw_req *dasd_alloc_erp_request(char *, int, int,
562 struct dasd_device *);
563void dasd_free_erp_request(struct dasd_ccw_req *, struct dasd_device *);
564void dasd_log_sense(struct dasd_ccw_req *, struct irb *);
565
605
606/* externals in dasd_ioctl.c */
607int dasd_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
608long dasd_compat_ioctl(struct file *, unsigned int, unsigned long);
609
610/* externals in dasd_proc.c */
611int dasd_proc_init(void);
612void dasd_proc_exit(void);
613
614/* externals in dasd_erp.c */
615struct dasd_ccw_req *dasd_default_erp_action(struct dasd_ccw_req *);
616struct dasd_ccw_req *dasd_default_erp_postaction(struct dasd_ccw_req *);
617struct dasd_ccw_req *dasd_alloc_erp_request(char *, int, int,
618 struct dasd_device *);
619void dasd_free_erp_request(struct dasd_ccw_req *, struct dasd_device *);
620void dasd_log_sense(struct dasd_ccw_req *, struct irb *);
621
566/* externals in dasd_3370_erp.c */
567dasd_era_t dasd_3370_erp_examine(struct dasd_ccw_req *, struct irb *);
568
569/* externals in dasd_3990_erp.c */
622/* externals in dasd_3990_erp.c */
570dasd_era_t dasd_3990_erp_examine(struct dasd_ccw_req *, struct irb *);
571struct dasd_ccw_req *dasd_3990_erp_action(struct dasd_ccw_req *);
572
623struct dasd_ccw_req *dasd_3990_erp_action(struct dasd_ccw_req *);
624
573/* externals in dasd_9336_erp.c */
574dasd_era_t dasd_9336_erp_examine(struct dasd_ccw_req *, struct irb *);
575
576/* externals in dasd_9336_erp.c */
577dasd_era_t dasd_9343_erp_examine(struct dasd_ccw_req *, struct irb *);
578struct dasd_ccw_req *dasd_9343_erp_action(struct dasd_ccw_req *);
579
580/* externals in dasd_eer.c */
581#ifdef CONFIG_DASD_EER
582int dasd_eer_init(void);
583void dasd_eer_exit(void);
584int dasd_eer_enable(struct dasd_device *);
585void dasd_eer_disable(struct dasd_device *);
586void dasd_eer_write(struct dasd_device *, struct dasd_ccw_req *cqr,
587 unsigned int id);

--- 19 unchanged lines hidden ---
625/* externals in dasd_eer.c */
626#ifdef CONFIG_DASD_EER
627int dasd_eer_init(void);
628void dasd_eer_exit(void);
629int dasd_eer_enable(struct dasd_device *);
630void dasd_eer_disable(struct dasd_device *);
631void dasd_eer_write(struct dasd_device *, struct dasd_ccw_req *cqr,
632 unsigned int id);

--- 19 unchanged lines hidden ---