79 typedef struct bd_drive bd_drive_t;
80 typedef struct bd_media bd_media_t;
81 typedef struct bd_ops bd_ops_t;
82
83
84 struct bd_xfer {
85 /*
86 * NB: If using DMA the br_ndmac will be non-zero. Otherwise
87 * the br_kaddr will be non-NULL.
88 */
89 diskaddr_t x_blkno;
90 size_t x_nblks;
91 ddi_dma_handle_t x_dmah;
92 ddi_dma_cookie_t x_dmac;
93 unsigned x_ndmac;
94 caddr_t x_kaddr;
95 unsigned x_flags;
96 };
97
98 #define BD_XFER_POLL (1U << 0) /* no interrupts (dump) */
99
100 struct bd_drive {
101 uint32_t d_qsize;
102 uint32_t d_maxxfer;
103 boolean_t d_removable;
104 boolean_t d_hotpluggable;
105 int d_target;
106 int d_lun;
107 size_t d_vendor_len;
108 char *d_vendor;
109 size_t d_product_len;
110 char *d_product;
111 size_t d_model_len;
112 char *d_model;
113 size_t d_serial_len;
114 char *d_serial;
115 size_t d_revision_len;
116 char *d_revision;
117 uint8_t d_eui64[8];
118 };
133 */
134 uint64_t m_nblks;
135 uint32_t m_blksize;
136 boolean_t m_readonly;
137 boolean_t m_solidstate;
138 uint32_t m_pblksize;
139 };
140
141 #define BD_INFO_FLAG_REMOVABLE (1U << 0)
142 #define BD_INFO_FLAG_HOTPLUGGABLE (1U << 1)
143 #define BD_INFO_FLAG_READ_ONLY (1U << 2)
144
145 struct bd_ops {
146 int o_version;
147 void (*o_drive_info)(void *, bd_drive_t *);
148 int (*o_media_info)(void *, bd_media_t *);
149 int (*o_devid_init)(void *, dev_info_t *, ddi_devid_t *);
150 int (*o_sync_cache)(void *, bd_xfer_t *);
151 int (*o_read)(void *, bd_xfer_t *);
152 int (*o_write)(void *, bd_xfer_t *);
153 };
154
155 #define BD_OPS_VERSION_0 0
156
157 struct bd_errstats {
158 /* these are managed by blkdev itself */
159 kstat_named_t bd_softerrs;
160 kstat_named_t bd_harderrs;
161 kstat_named_t bd_transerrs;
162 kstat_named_t bd_model;
163 kstat_named_t bd_vid;
164 kstat_named_t bd_pid;
165 kstat_named_t bd_revision;
166 kstat_named_t bd_serial;
167 kstat_named_t bd_capacity;
168
169 /* the following are updated on behalf of the HW driver */
170 kstat_named_t bd_rq_media_err;
171 kstat_named_t bd_rq_ntrdy_err;
172 kstat_named_t bd_rq_nodev_err;
|
79 typedef struct bd_drive bd_drive_t;
80 typedef struct bd_media bd_media_t;
81 typedef struct bd_ops bd_ops_t;
82
83
84 struct bd_xfer {
85 /*
86 * NB: If using DMA the br_ndmac will be non-zero. Otherwise
87 * the br_kaddr will be non-NULL.
88 */
89 diskaddr_t x_blkno;
90 size_t x_nblks;
91 ddi_dma_handle_t x_dmah;
92 ddi_dma_cookie_t x_dmac;
93 unsigned x_ndmac;
94 caddr_t x_kaddr;
95 unsigned x_flags;
96 };
97
98 #define BD_XFER_POLL (1U << 0) /* no interrupts (dump) */
99 #define BD_XFER_MHD_TKOWN (1U << 1)
100 #define BD_XFER_MHD_RELEASE (1U << 2)
101 #define BD_XFER_MHD_STATUS (1U << 3)
102 #define BD_XFER_MHD_QRESERVE (1U << 4)
103 #define BD_XFER_MHD_ENFAILFAST (1U << 5)
104
105 struct bd_drive {
106 uint32_t d_qsize;
107 uint32_t d_maxxfer;
108 boolean_t d_removable;
109 boolean_t d_hotpluggable;
110 int d_target;
111 int d_lun;
112 size_t d_vendor_len;
113 char *d_vendor;
114 size_t d_product_len;
115 char *d_product;
116 size_t d_model_len;
117 char *d_model;
118 size_t d_serial_len;
119 char *d_serial;
120 size_t d_revision_len;
121 char *d_revision;
122 uint8_t d_eui64[8];
123 };
138 */
139 uint64_t m_nblks;
140 uint32_t m_blksize;
141 boolean_t m_readonly;
142 boolean_t m_solidstate;
143 uint32_t m_pblksize;
144 };
145
146 #define BD_INFO_FLAG_REMOVABLE (1U << 0)
147 #define BD_INFO_FLAG_HOTPLUGGABLE (1U << 1)
148 #define BD_INFO_FLAG_READ_ONLY (1U << 2)
149
150 struct bd_ops {
151 int o_version;
152 void (*o_drive_info)(void *, bd_drive_t *);
153 int (*o_media_info)(void *, bd_media_t *);
154 int (*o_devid_init)(void *, dev_info_t *, ddi_devid_t *);
155 int (*o_sync_cache)(void *, bd_xfer_t *);
156 int (*o_read)(void *, bd_xfer_t *);
157 int (*o_write)(void *, bd_xfer_t *);
158 int (*o_reserve)(void *, bd_xfer_t *);
159 };
160
161 #define BD_OPS_VERSION_0 0
162
163 struct bd_errstats {
164 /* these are managed by blkdev itself */
165 kstat_named_t bd_softerrs;
166 kstat_named_t bd_harderrs;
167 kstat_named_t bd_transerrs;
168 kstat_named_t bd_model;
169 kstat_named_t bd_vid;
170 kstat_named_t bd_pid;
171 kstat_named_t bd_revision;
172 kstat_named_t bd_serial;
173 kstat_named_t bd_capacity;
174
175 /* the following are updated on behalf of the HW driver */
176 kstat_named_t bd_rq_media_err;
177 kstat_named_t bd_rq_ntrdy_err;
178 kstat_named_t bd_rq_nodev_err;
|