3 * \brief UDI SCSI Bindings
13 #define UDI_SCSI_BIND_CB_NUM 1
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)
26 udi_ubit8_t attribute;
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
44 udi_status_t req_status;
45 udi_ubit8_t scsi_status;
46 udi_ubit8_t sense_status;
51 udi_ubit8_t ctrl_func;
52 udi_ubit16_t queue_depth;
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
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
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);
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);
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;
98 #define UDI_SCSI_PD_OPS_NUM 1
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;
109 #define UDI_SCSI_HD_OPS_NUM 2
112 #define UDI_SCSI_BIND_EXCLUSIVE (1U<<0)
113 #define UDI_SCSI_TEMP_BIND_EXCLUSIVE (1U<<1)
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);
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);