diff options
Diffstat (limited to 'sg_pt_freebsd.c')
-rw-r--r-- | sg_pt_freebsd.c | 99 |
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); |