aboutsummaryrefslogtreecommitdiff
path: root/sg_pt_freebsd.c
diff options
context:
space:
mode:
Diffstat (limited to 'sg_pt_freebsd.c')
-rw-r--r--sg_pt_freebsd.c99
1 files changed, 50 insertions, 49 deletions
diff --git a/sg_pt_freebsd.c b/sg_pt_freebsd.c
index f8f59b90..4ed7c69b 100644
--- a/sg_pt_freebsd.c
+++ b/sg_pt_freebsd.c
@@ -27,7 +27,7 @@
*
*/
-/* version 1.05 2007/1/21 */
+/* version 1.07 2007/4/3 */
#include <stdio.h>
#include <stdlib.h>
@@ -85,6 +85,10 @@ struct sg_pt_freebsd_scsi {
int transport_err;
};
+struct sg_pt_base {
+ struct sg_pt_freebsd_scsi impl;
+};
+
/* Returns >= 0 if successful. If error in Unix returns negated errno. */
int scsi_pt_open_device(const char * device_name,
@@ -168,7 +172,7 @@ int scsi_pt_close_device(int device_fd)
return 0;
}
-void * construct_scsi_pt_obj()
+struct sg_pt_base * construct_scsi_pt_obj()
{
struct sg_pt_freebsd_scsi * ptp;
@@ -178,12 +182,12 @@ void * construct_scsi_pt_obj()
memset(ptp, 0, sizeof(struct sg_pt_freebsd_scsi));
ptp->dxfer_dir = CAM_DIR_NONE;
}
- return ptp;
+ return (struct sg_pt_base *)ptp;
}
-void destruct_scsi_pt_obj(void * vp)
+void destruct_scsi_pt_obj(struct sg_pt_base * vp)
{
- struct sg_pt_freebsd_scsi * ptp = (struct sg_pt_freebsd_scsi *)vp;
+ struct sg_pt_freebsd_scsi * ptp = &vp->impl;
if (ptp) {
if (ptp->ccb)
@@ -192,9 +196,10 @@ void destruct_scsi_pt_obj(void * vp)
}
}
-void set_scsi_pt_cdb(void * vp, const unsigned char * cdb, int cdb_len)
+void set_scsi_pt_cdb(struct sg_pt_base * vp, const unsigned char * cdb,
+ int cdb_len)
{
- struct sg_pt_freebsd_scsi * ptp = (struct sg_pt_freebsd_scsi *)vp;
+ struct sg_pt_freebsd_scsi * ptp = &vp->impl;
if (ptp->cdb)
++ptp->in_err;
@@ -202,10 +207,10 @@ void set_scsi_pt_cdb(void * vp, const unsigned char * cdb, int cdb_len)
ptp->cdb_len = cdb_len;
}
-void set_scsi_pt_sense(void * vp, unsigned char * sense,
+void set_scsi_pt_sense(struct sg_pt_base * vp, unsigned char * sense,
int max_sense_len)
{
- struct sg_pt_freebsd_scsi * ptp = (struct sg_pt_freebsd_scsi *)vp;
+ struct sg_pt_freebsd_scsi * ptp = &vp->impl;
if (ptp->sense)
++ptp->in_err;
@@ -214,10 +219,10 @@ void set_scsi_pt_sense(void * vp, unsigned char * sense,
ptp->sense_len = max_sense_len;
}
-void set_scsi_pt_data_in(void * vp, /* from device */
+void set_scsi_pt_data_in(struct sg_pt_base * vp, /* from device */
unsigned char * dxferp, int dxfer_len)
{
- struct sg_pt_freebsd_scsi * ptp = (struct sg_pt_freebsd_scsi *)vp;
+ struct sg_pt_freebsd_scsi * ptp = &vp->impl;
if (ptp->dxferp)
++ptp->in_err;
@@ -228,10 +233,10 @@ void set_scsi_pt_data_in(void * vp, /* from device */
}
}
-void set_scsi_pt_data_out(void * vp, /* to device */
+void set_scsi_pt_data_out(struct sg_pt_base * vp, /* to device */
const unsigned char * dxferp, int dxfer_len)
{
- struct sg_pt_freebsd_scsi * ptp = (struct sg_pt_freebsd_scsi *)vp;
+ struct sg_pt_freebsd_scsi * ptp = &vp->impl;
if (ptp->dxferp)
++ptp->in_err;
@@ -242,38 +247,41 @@ void set_scsi_pt_data_out(void * vp, /* to device */
}
}
-void set_scsi_pt_packet_id(void * vp __attribute__ ((unused)),
+void set_scsi_pt_packet_id(struct sg_pt_base * vp __attribute__ ((unused)),
int pack_id __attribute__ ((unused)))
{
}
-void set_scsi_pt_tag(void * vp, int tag __attribute__ ((unused)))
+void set_scsi_pt_tag(struct sg_pt_base * vp,
+ unsigned long long tag __attribute__ ((unused)))
{
- struct sg_pt_freebsd_scsi * ptp = (struct sg_pt_freebsd_scsi *)vp;
+ struct sg_pt_freebsd_scsi * ptp = &vp->impl;
++ptp->in_err;
}
-void set_scsi_pt_task_management(void * vp,
+void set_scsi_pt_task_management(struct sg_pt_base * vp,
int tmf_code __attribute__ ((unused)))
{
- struct sg_pt_freebsd_scsi * ptp = (struct sg_pt_freebsd_scsi *)vp;
+ struct sg_pt_freebsd_scsi * ptp = &vp->impl;
++ptp->in_err;
}
-void set_scsi_pt_task_attr(void * vp, int attrib __attribute__ ((unused)),
- int priority __attribute__ ((unused)))
+void set_scsi_pt_task_attr(struct sg_pt_base * vp,
+ int attrib __attribute__ ((unused)),
+ int priority __attribute__ ((unused)))
{
- struct sg_pt_freebsd_scsi * ptp = (struct sg_pt_freebsd_scsi *)vp;
+ struct sg_pt_freebsd_scsi * ptp = &vp->impl;
++ptp->in_err;
}
-int do_scsi_pt(void * vp, int device_fd, int time_secs, int verbose)
+int do_scsi_pt(struct sg_pt_base * vp, int device_fd, int time_secs,
+ int verbose)
{
int fd = device_fd - FREEBSD_FDOFFSET;
- struct sg_pt_freebsd_scsi * ptp = (struct sg_pt_freebsd_scsi *)vp;
+ struct sg_pt_freebsd_scsi * ptp = &vp->impl;
struct freebsd_dev_channel *fdchan;
union ccb *ccb;
int len, timout_ms;
@@ -368,10 +376,9 @@ int do_scsi_pt(void * vp, int device_fd, int time_secs, int verbose)
return 0;
}
-int get_scsi_pt_result_category(const void * vp)
+int get_scsi_pt_result_category(const struct sg_pt_base * vp)
{
- const struct sg_pt_freebsd_scsi * ptp =
- (const struct sg_pt_freebsd_scsi *)vp;
+ const struct sg_pt_freebsd_scsi * ptp = &vp->impl;
if (ptp->os_err)
return SCSI_PT_RESULT_OS_ERR;
@@ -386,60 +393,55 @@ int get_scsi_pt_result_category(const void * vp)
return SCSI_PT_RESULT_GOOD;
}
-int get_scsi_pt_resid(const void * vp)
+int get_scsi_pt_resid(const struct sg_pt_base * vp)
{
- const struct sg_pt_freebsd_scsi * ptp =
- (const struct sg_pt_freebsd_scsi *)vp;
+ const struct sg_pt_freebsd_scsi * ptp = &vp->impl;
return ptp->resid;
}
-int get_scsi_pt_status_response(const void * vp)
+int get_scsi_pt_status_response(const struct sg_pt_base * vp)
{
- const struct sg_pt_freebsd_scsi * ptp =
- (const struct sg_pt_freebsd_scsi *)vp;
+ const struct sg_pt_freebsd_scsi * ptp = &vp->impl;
return ptp->scsi_status;
}
-int get_scsi_pt_sense_len(const void * vp)
+int get_scsi_pt_sense_len(const struct sg_pt_base * vp)
{
- const struct sg_pt_freebsd_scsi * ptp =
- (const struct sg_pt_freebsd_scsi *)vp;
+ const struct sg_pt_freebsd_scsi * ptp = &vp->impl;
int len;
len = ptp->sense_len - ptp->sense_resid;
return (len > 0) ? len : 0;
}
-int get_scsi_pt_duration_ms(const void * vp __attribute__ ((unused)))
+int get_scsi_pt_duration_ms(const struct sg_pt_base * vp __attribute__ ((unused)))
{
- // const struct sg_pt_freebsd_scsi * ptp = vp;
+ // const struct sg_pt_freebsd_scsi * ptp = &vp->impl;
return -1;
}
-int get_scsi_pt_transport_err(const void * vp)
+int get_scsi_pt_transport_err(const struct sg_pt_base * vp)
{
- const struct sg_pt_freebsd_scsi * ptp =
- (const struct sg_pt_freebsd_scsi *)vp;
+ const struct sg_pt_freebsd_scsi * ptp = &vp->impl;
return ptp->transport_err;
}
-int get_scsi_pt_os_err(const void * vp)
+int get_scsi_pt_os_err(const struct sg_pt_base * vp)
{
- const struct sg_pt_freebsd_scsi * ptp =
- (const struct sg_pt_freebsd_scsi *)vp;
+ const struct sg_pt_freebsd_scsi * ptp = &vp->impl;
return ptp->os_err;
}
-char * get_scsi_pt_transport_err_str(const void * vp, int max_b_len, char * b)
+char * get_scsi_pt_transport_err_str(const struct sg_pt_base * vp,
+ int max_b_len, char * b)
{
- const struct sg_pt_freebsd_scsi * ptp =
- (const struct sg_pt_freebsd_scsi *)vp;
+ const struct sg_pt_freebsd_scsi * ptp = &vp->impl;
if (0 == ptp->transport_err) {
strncpy(b, "no transport error available", max_b_len);
@@ -461,11 +463,10 @@ char * get_scsi_pt_transport_err_str(const void * vp, int max_b_len, char * b)
return b;
}
-char * get_scsi_pt_os_err_str(const void * vp,
+char * get_scsi_pt_os_err_str(const struct sg_pt_base * vp,
int max_b_len, char * b)
{
- const struct sg_pt_freebsd_scsi * ptp =
- (const struct sg_pt_freebsd_scsi *)vp;
+ const struct sg_pt_freebsd_scsi * ptp = &vp->impl;
const char * cp;
cp = safe_strerror(ptp->os_err);