blob: 32eff28e4adc889f339ae7e75345c2aea42af5cf [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * Copyright (C) 2004 Red Hat, Inc. All rights reserved.
3 *
4 * This file is released under the GPL.
5 *
6 * Multipath hardware handler registration.
7 */
8
9#ifndef DM_HW_HANDLER_H
10#define DM_HW_HANDLER_H
11
12#include <linux/device-mapper.h>
13
14#include "dm-mpath.h"
15
16struct hw_handler_type;
17struct hw_handler {
18 struct hw_handler_type *type;
19 void *context;
20};
21
22/*
23 * Constructs a hardware handler object, takes custom arguments
24 */
25/* Information about a hardware handler type */
26struct hw_handler_type {
27 char *name;
28 struct module *module;
29
30 int (*create) (struct hw_handler *handler, unsigned int argc,
31 char **argv);
32 void (*destroy) (struct hw_handler *hwh);
33
34 void (*pg_init) (struct hw_handler *hwh, unsigned bypassed,
Josef "Jeff" Sipekc922d5f2006-12-08 02:36:33 -080035 struct dm_path *path);
Linus Torvalds1da177e2005-04-16 15:20:36 -070036 unsigned (*error) (struct hw_handler *hwh, struct bio *bio);
37 int (*status) (struct hw_handler *hwh, status_type_t type,
38 char *result, unsigned int maxlen);
39};
40
41/* Register a hardware handler */
42int dm_register_hw_handler(struct hw_handler_type *type);
43
44/* Unregister a hardware handler */
45int dm_unregister_hw_handler(struct hw_handler_type *type);
46
47/* Returns a registered hardware handler type */
48struct hw_handler_type *dm_get_hw_handler(const char *name);
49
50/* Releases a hardware handler */
51void dm_put_hw_handler(struct hw_handler_type *hwht);
52
53/* Default err function */
54unsigned dm_scsi_err_handler(struct hw_handler *hwh, struct bio *bio);
55
56/* Error flags for err and dm_pg_init_complete */
57#define MP_FAIL_PATH 1
58#define MP_BYPASS_PG 2
59#define MP_ERROR_IO 4 /* Don't retry this I/O */
60
61#endif