OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [s390/] [cio/] [device.h] - Blame information for rev 81

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
#ifndef S390_DEVICE_H
2
#define S390_DEVICE_H
3
 
4
#include <asm/ccwdev.h>
5
#include <asm/atomic.h>
6
#include <linux/wait.h>
7
 
8
/*
9
 * states of the device statemachine
10
 */
11
enum dev_state {
12
        DEV_STATE_NOT_OPER,
13
        DEV_STATE_SENSE_PGID,
14
        DEV_STATE_SENSE_ID,
15
        DEV_STATE_OFFLINE,
16
        DEV_STATE_VERIFY,
17
        DEV_STATE_ONLINE,
18
        DEV_STATE_W4SENSE,
19
        DEV_STATE_DISBAND_PGID,
20
        DEV_STATE_BOXED,
21
        /* states to wait for i/o completion before doing something */
22
        DEV_STATE_CLEAR_VERIFY,
23
        DEV_STATE_TIMEOUT_KILL,
24
        DEV_STATE_QUIESCE,
25
        /* special states for devices gone not operational */
26
        DEV_STATE_DISCONNECTED,
27
        DEV_STATE_DISCONNECTED_SENSE_ID,
28
        DEV_STATE_CMFCHANGE,
29
        DEV_STATE_CMFUPDATE,
30
        /* last element! */
31
        NR_DEV_STATES
32
};
33
 
34
/*
35
 * asynchronous events of the device statemachine
36
 */
37
enum dev_event {
38
        DEV_EVENT_NOTOPER,
39
        DEV_EVENT_INTERRUPT,
40
        DEV_EVENT_TIMEOUT,
41
        DEV_EVENT_VERIFY,
42
        /* last element! */
43
        NR_DEV_EVENTS
44
};
45
 
46
struct ccw_device;
47
 
48
/*
49
 * action called through jumptable
50
 */
51
typedef void (fsm_func_t)(struct ccw_device *, enum dev_event);
52
extern fsm_func_t *dev_jumptable[NR_DEV_STATES][NR_DEV_EVENTS];
53
 
54
static inline void
55
dev_fsm_event(struct ccw_device *cdev, enum dev_event dev_event)
56
{
57
        dev_jumptable[cdev->private->state][dev_event](cdev, dev_event);
58
}
59
 
60
/*
61
 * Delivers 1 if the device state is final.
62
 */
63
static inline int
64
dev_fsm_final_state(struct ccw_device *cdev)
65
{
66
        return (cdev->private->state == DEV_STATE_NOT_OPER ||
67
                cdev->private->state == DEV_STATE_OFFLINE ||
68
                cdev->private->state == DEV_STATE_ONLINE ||
69
                cdev->private->state == DEV_STATE_BOXED);
70
}
71
 
72
extern struct workqueue_struct *ccw_device_work;
73
extern struct workqueue_struct *ccw_device_notify_work;
74
extern wait_queue_head_t ccw_device_init_wq;
75
extern atomic_t ccw_device_init_count;
76
 
77
void io_subchannel_irq (struct device *pdev);
78
void io_subchannel_recog_done(struct ccw_device *cdev);
79
 
80
int ccw_device_cancel_halt_clear(struct ccw_device *);
81
 
82
void ccw_device_do_unreg_rereg(struct work_struct *);
83
void ccw_device_move_to_orphanage(struct work_struct *);
84
int ccw_device_is_orphan(struct ccw_device *);
85
 
86
int ccw_device_recognition(struct ccw_device *);
87
int ccw_device_online(struct ccw_device *);
88
int ccw_device_offline(struct ccw_device *);
89
 
90
/* Function prototypes for device status and basic sense stuff. */
91
void ccw_device_accumulate_irb(struct ccw_device *, struct irb *);
92
void ccw_device_accumulate_basic_sense(struct ccw_device *, struct irb *);
93
int ccw_device_accumulate_and_sense(struct ccw_device *, struct irb *);
94
int ccw_device_do_sense(struct ccw_device *, struct irb *);
95
 
96
/* Function prototypes for sense id stuff. */
97
void ccw_device_sense_id_start(struct ccw_device *);
98
void ccw_device_sense_id_irq(struct ccw_device *, enum dev_event);
99
void ccw_device_sense_id_done(struct ccw_device *, int);
100
 
101
/* Function prototypes for path grouping stuff. */
102
void ccw_device_sense_pgid_start(struct ccw_device *);
103
void ccw_device_sense_pgid_irq(struct ccw_device *, enum dev_event);
104
void ccw_device_sense_pgid_done(struct ccw_device *, int);
105
 
106
void ccw_device_verify_start(struct ccw_device *);
107
void ccw_device_verify_irq(struct ccw_device *, enum dev_event);
108
void ccw_device_verify_done(struct ccw_device *, int);
109
 
110
void ccw_device_disband_start(struct ccw_device *);
111
void ccw_device_disband_irq(struct ccw_device *, enum dev_event);
112
void ccw_device_disband_done(struct ccw_device *, int);
113
 
114
int ccw_device_call_handler(struct ccw_device *);
115
 
116
int ccw_device_stlck(struct ccw_device *);
117
 
118
/* qdio needs this. */
119
void ccw_device_set_timeout(struct ccw_device *, int);
120
extern struct subchannel_id ccw_device_get_subchannel_id(struct ccw_device *);
121
extern struct bus_type ccw_bus_type;
122
 
123
/* Channel measurement facility related */
124
void retry_set_schib(struct ccw_device *cdev);
125
void cmf_retry_copy_block(struct ccw_device *);
126
int cmf_reenable(struct ccw_device *);
127
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.