Makefile - libc++ and libm
[tpg/acess2.git] / UDI / include / udi_scsi.h
1 /**
2  * \file udi_scsi.h
3  * \brief UDI SCSI Bindings
4  */
5 #ifndef _UDI_SCSI_H_
6 #define _UDI_SCSI_H_
7
8 typedef struct {
9         udi_cb_t        gcb;
10         udi_ubit16_t    events;
11 } udi_scsi_bind_cb_t;
12
13 #define UDI_SCSI_BIND_CB_NUM    1
14
15 /* SCSI Events */
16 #define UDI_SCSI_EVENT_AEN      (1U<<0)
17 #define UDI_SCSI_EVENT_TGT_RESET        (1U<<1)
18 #define UDI_SCSI_EVENT_BUS_RESET        (1U<<2)
19 #define UDI_SCSI_EVENT_UNSOLICITED_RESELECT     (1U<<3)
20
21 typedef struct {
22         udi_cb_t        gcb;
23         udi_buf_t       *data_buf;
24         udi_ubit32_t    timeout;
25         udi_ubit16_t    flags;
26         udi_ubit8_t     attribute;
27         udi_ubit8_t     cdb_len;
28         udi_ubit8_t     *cdb_ptr;
29 } udi_scsi_io_cb_t;
30 /* Control Block Group Number */
31 #define UDI_SCSI_IO_CB_NUM 2
32 /* I/O Request Flags */
33 #define UDI_SCSI_DATA_IN (1U<<0)
34 #define UDI_SCSI_DATA_OUT (1U<<1)
35 #define UDI_SCSI_NO_DISCONNECT (1U<<2)
36 /* SCSI Task Attributes */
37 #define UDI_SCSI_SIMPLE_TASK 1
38 #define UDI_SCSI_ORDERED_TASK 2
39 #define UDI_SCSI_HEAD_OF_Q_TASK 3
40 #define UDI_SCSI_ACA_TASK 4
41 #define UDI_SCSI_UNTAGGED_TASK 5
42
43 typedef struct {
44         udi_status_t    req_status;
45         udi_ubit8_t     scsi_status;
46         udi_ubit8_t     sense_status;
47 } udi_scsi_status_t;
48
49 typedef struct {
50         udi_cb_t        gcb;
51         udi_ubit8_t     ctrl_func;
52         udi_ubit16_t    queue_depth;
53 } udi_scsi_ctl_cb_t;
54 /* Values for ctrl_func */
55 #define UDI_SCSI_CTL_ABORT_TASK_SET     1
56 #define UDI_SCSI_CTL_CLEAR_TASK_SET     2
57 #define UDI_SCSI_CTL_LUN_RESET          3
58 #define UDI_SCSI_CTL_TGT_RESET          4
59 #define UDI_SCSI_CTL_BUS_RESET          5
60 #define UDI_SCSI_CTL_CLEAR_ACA          6
61 #define UDI_SCSI_CTL_SET_QUEUE_DEPTH    7
62 /* Control Block Group Number */
63 #define UDI_SCSI_CTL_CB_NUM     3
64
65 typedef struct {
66         udi_cb_t        gcb;
67         udi_ubit8_t     event;
68         udi_buf_t       *aen_data_buf;
69 } udi_scsi_event_cb_t;
70 /* Control Block Group Number */
71 #define UDI_SCSI_EVENT_CB_NUM 4
72
73 typedef void udi_scsi_bind_ack_op_t(udi_scsi_bind_cb_t *cb, udi_ubit32_t hd_timeout_increase, udi_status_t status);
74 typedef void udi_scsi_unbind_ack_op_t(udi_scsi_bind_cb_t *cb);
75 typedef void udi_scsi_io_ack_op_t(udi_scsi_io_cb_t *cb);
76 typedef void udi_scsi_io_nak_op_t(udi_scsi_io_cb_t *cb);
77 typedef void udi_scsi_ctl_ack_op_t(udi_scsi_ctl_cb_t *cb, udi_status_t status);
78 typedef void udi_scsi_event_ind_op_t(udi_scsi_event_cb_t *cb);
79
80 typedef void udi_scsi_bind_req_op_t(udi_scsi_bind_cb_t *cb,
81         udi_ubit16_t bind_flags, udi_ubit16_t queue_depth,
82         udi_ubit16_t max_sense_len, udi_ubit16_t aen_buf_size);
83 typedef void udi_scsi_unbind_req_op_t(udi_scsi_bind_cb_t *cb);
84 typedef void udi_scsi_io_req_op_t(udi_scsi_io_cb_t *cb);
85 typedef void udi_scsi_ctl_req_op_t(udi_scsi_ctl_cb_t *cb);
86 typedef void udi_scsi_event_res_op_t(udi_scsi_event_cb_t *cb);
87
88 typedef const struct {
89         udi_channel_event_ind_op_t      *channel_event_ind_op;
90         udi_scsi_bind_ack_op_t  *bind_ack_op;
91         udi_scsi_unbind_ack_op_t        *unbind_ack_op;
92         udi_scsi_io_ack_op_t    *io_ack_op;
93         udi_scsi_io_nak_op_t    *io_nak_op;
94         udi_scsi_ctl_ack_op_t   *ctl_ack_op;
95         udi_scsi_event_ind_op_t *event_ind_op;
96 } udi_scsi_pd_ops_t;
97
98 #define UDI_SCSI_PD_OPS_NUM     1
99
100 typedef const struct {
101         udi_channel_event_ind_op_t      *channel_event_ind_op;
102         udi_scsi_bind_req_op_t  *bind_req_op;
103         udi_scsi_unbind_req_op_t        *unbind_req_op;
104         udi_scsi_io_req_op_t    *io_req_op;
105         udi_scsi_ctl_req_op_t   *ctl_req_op;
106         udi_scsi_event_res_op_t *event_res_op;
107 } udi_scsi_hd_ops_t;
108
109 #define UDI_SCSI_HD_OPS_NUM     2
110
111 /* Bind Flags */
112 #define UDI_SCSI_BIND_EXCLUSIVE (1U<<0)
113 #define UDI_SCSI_TEMP_BIND_EXCLUSIVE (1U<<1)
114
115 extern void udi_scsi_bind_req(udi_scsi_bind_cb_t *cb,
116         udi_ubit16_t bind_flags, udi_ubit16_t queue_depth,
117         udi_ubit16_t max_sense_len, udi_ubit16_t aen_buf_size);
118 extern void udi_scsi_bind_ack(udi_scsi_bind_cb_t *cb, udi_ubit32_t hd_timeout_increase, udi_status_t status);
119 extern void udi_scsi_unbind_req(udi_scsi_bind_cb_t *cb);
120 extern void udi_scsi_unbind_ack(udi_scsi_bind_cb_t *cb);
121
122 extern void udi_scsi_io_req(udi_scsi_io_cb_t *cb);
123 extern void udi_scsi_io_ack(udi_scsi_io_cb_t *cb);
124 extern void udi_scsi_io_nak(udi_scsi_io_cb_t *cb, udi_scsi_status_t status, udi_buf_t *sense_buf);
125 extern void udi_scsi_ctl_req(udi_scsi_ctl_cb_t *cb);
126 extern void udi_scsi_ctl_ack(udi_scsi_ctl_cb_t *cb, udi_status_t status);
127 extern void udi_scsi_event_ind(udi_scsi_event_cb_t *cb);
128 extern udi_scsi_event_ind_op_t  udi_scsi_event_ind_unused;
129 extern void udi_scsi_event_res(udi_scsi_event_cb_t *cb);
130 extern void udi_scsi_inquiry_to_string(const udi_ubit8_t *inquiry_data, udi_size_t inquiry_len, char *str);
131
132
133 #endif
134

UCC git Repository :: git.ucc.asn.au