diff options
author | ade <ade@FreeBSD.org> | 2000-09-17 02:12:06 +0800 |
---|---|---|
committer | ade <ade@FreeBSD.org> | 2000-09-17 02:12:06 +0800 |
commit | 1bda467d86b43e7c35c14876c0a527414593bb03 (patch) | |
tree | ae58a94a1a07c0d7095b18446b2b78e7ca99e40e /graphics/sane-backends/files | |
parent | d7a5577f1427987aa2e367e7c287a895f5f667dd (diff) | |
download | freebsd-ports-gnome-1bda467d86b43e7c35c14876c0a527414593bb03.tar.gz freebsd-ports-gnome-1bda467d86b43e7c35c14876c0a527414593bb03.tar.zst freebsd-ports-gnome-1bda467d86b43e7c35c14876c0a527414593bb03.zip |
Update to 1.0.3
PR: 21207
Submitted by: Ports Fury
Diffstat (limited to 'graphics/sane-backends/files')
-rw-r--r-- | graphics/sane-backends/files/patch-ae | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/graphics/sane-backends/files/patch-ae b/graphics/sane-backends/files/patch-ae new file mode 100644 index 000000000000..c880e73f2c0c --- /dev/null +++ b/graphics/sane-backends/files/patch-ae @@ -0,0 +1,180 @@ +--- sanei/sanei_scsi.c.orig Sat Aug 12 23:54:15 2000 ++++ sanei/sanei_scsi.c Fri Sep 8 22:38:49 2000 +@@ -2424,6 +2424,169 @@ + cam_freeccb(ccb); + return SANE_STATUS_GOOD; + } ++ ++#define WE_HAVE_FIND_DEVICES ++ ++int ++cam_compare_inquiry(int fd, path_id_t path_id, ++ target_id_t target_id, lun_id_t target_lun, ++ const char *vendor, const char *product, const char *type) ++{ ++ struct ccb_dev_match cdm; ++ struct device_match_pattern *pattern; ++ struct scsi_inquiry_data *inq; ++ int retval = 0; ++ ++ /* build ccb for device match */ ++ bzero(&cdm, sizeof(cdm)); ++ cdm.ccb_h.func_code = XPT_DEV_MATCH; ++ ++ /* result buffer */ ++ cdm.match_buf_len = sizeof(struct dev_match_result); ++ cdm.matches = (struct dev_match_result *)malloc(cdm.match_buf_len); ++ cdm.num_matches = 0; ++ ++ /* pattern buffer */ ++ cdm.num_patterns = 1; ++ cdm.pattern_buf_len = sizeof(struct dev_match_pattern); ++ cdm.patterns = (struct dev_match_pattern *)malloc(cdm.pattern_buf_len); ++ ++ /* assemble conditions */ ++ cdm.patterns[0].type = DEV_MATCH_DEVICE; ++ pattern = &cdm.patterns[0].pattern.device_pattern; ++ pattern->flags = DEV_MATCH_PATH | DEV_MATCH_TARGET | DEV_MATCH_LUN; ++ pattern->path_id = path_id; ++ pattern->target_id = target_id; ++ pattern->target_lun = target_lun; ++ ++ if (ioctl(fd, CAMIOCOMMAND, &cdm) == -1) { ++ DBG (1, "error sending CAMIOCOMMAND ioctl"); ++ retval = -1; ++ goto ret; ++ } ++ ++ if ((cdm.ccb_h.status != CAM_REQ_CMP) ++ || ((cdm.status != CAM_DEV_MATCH_LAST) ++ && (cdm.status != CAM_DEV_MATCH_MORE))) { ++ DBG (1, "got CAM error %#x, CDM error %d\n", ++ cdm.ccb_h.status, cdm.status); ++ retval = -1; ++ goto ret; ++ } ++ ++ if (cdm.num_matches == 0) { ++ DBG (1, "not found\n"); ++ retval = -1; ++ goto ret; ++ } ++ ++ if (cdm.matches[0].type != DEV_MATCH_DEVICE) { ++ DBG (1, "no device match\n"); ++ retval = -1; ++ goto ret; ++ } ++ ++ inq = &cdm.matches[0].result.device_result.inq_data; ++ if ((vendor && cam_strmatch(inq->vendor, vendor, SID_VENDOR_SIZE)) || ++ (product && cam_strmatch(inq->product, product, SID_PRODUCT_SIZE))) ++ retval = 1; ++ ++ ret: ++ free(cdm.patterns); ++ free(cdm.matches); ++ return(retval); ++} ++ ++void ++sanei_scsi_find_devices (const char *findvendor, const char *findmodel, ++ const char *findtype, ++ int findbus, int findchannel, int findid, int findlun, ++ SANE_Status (*attach) (const char *dev)) ++{ ++ int fd; ++ struct ccb_dev_match cdm; ++ struct periph_match_pattern *pattern; ++ struct periph_match_result *result; ++ int i; ++ char devname[16]; ++ ++ DBG_INIT(); ++ ++ if ((fd = open(XPT_DEVICE, O_RDWR)) == -1) { ++ DBG (1, "could not open %s\n", XPT_DEVICE); ++ return; ++ } ++ ++ /* build ccb for device match */ ++ bzero(&cdm, sizeof(cdm)); ++ cdm.ccb_h.func_code = XPT_DEV_MATCH; ++ ++ /* result buffer */ ++ cdm.match_buf_len = sizeof(struct dev_match_result) * 100; ++ cdm.matches = (struct dev_match_result *)malloc(cdm.match_buf_len); ++ cdm.num_matches = 0; ++ ++ /* pattern buffer */ ++ cdm.num_patterns = 1; ++ cdm.pattern_buf_len = sizeof(struct dev_match_pattern); ++ cdm.patterns = (struct dev_match_pattern *)malloc(cdm.pattern_buf_len); ++ ++ /* assemble conditions ... findchannel is ignored */ ++ cdm.patterns[0].type = DEV_MATCH_PERIPH; ++ pattern = &cdm.patterns[0].pattern.periph_pattern; ++ pattern->flags = PERIPH_MATCH_NAME; ++ strcpy(pattern->periph_name, "pass"); ++ if (findbus != -1) { ++ pattern->path_id = findbus; ++ pattern->flags |= PERIPH_MATCH_PATH; ++ } ++ if (findid != -1) { ++ pattern->target_id = findid; ++ pattern->flags |= PERIPH_MATCH_TARGET; ++ } ++ if (findlun != -1) { ++ pattern->target_lun = findlun; ++ pattern->flags |= PERIPH_MATCH_LUN; ++ } ++ ++ /* result loop */ ++ do { ++ if (ioctl(fd, CAMIOCOMMAND, &cdm) == -1) { ++ DBG (1, "error sending CAMIOCOMMAND ioctl"); ++ break; ++ } ++ ++ if ((cdm.ccb_h.status != CAM_REQ_CMP) ++ || ((cdm.status != CAM_DEV_MATCH_LAST) ++ && (cdm.status != CAM_DEV_MATCH_MORE))) { ++ DBG (1, "got CAM error %#x, CDM error %d\n", ++ cdm.ccb_h.status, cdm.status); ++ break; ++ } ++ ++ for (i = 0; i < cdm.num_matches; i++) { ++ if (cdm.matches[i].type != DEV_MATCH_PERIPH) ++ continue; ++ result = &cdm.matches[i].result.periph_result; ++ DBG (4, "%s%d on scbus%d %d:%d\n", ++ result->periph_name, result->unit_number, ++ result->path_id, result->target_id, result->target_lun); ++ if (cam_compare_inquiry(fd, result->path_id, ++ result->target_id, result->target_lun, ++ findvendor, findmodel, findtype) == 0) { ++ sprintf(devname, "/dev/%s%d", result->periph_name, result->unit_number); ++ (*attach) (devname); ++ } ++ } ++ } while ((cdm.ccb_h.status == CAM_REQ_CMP) ++ && (cdm.status == CAM_DEV_MATCH_MORE)); ++ ++ free(cdm.patterns); ++ free(cdm.matches); ++ close(fd); ++ return; ++} ++ + #endif + + +@@ -3722,6 +3885,7 @@ + int findbus, int findchannel, int findid, int findlun, + SANE_Status (*attach) (const char *dev)) + { ++ DBG_INIT(); + DBG (1, "sanei_scsi_find_devices: not implemented for this platform\n"); + } + |