Ticket #3: os_freebsd.patch
File os_freebsd.patch, 2.3 KB (added by , 16 years ago) |
---|
-
os_freebsd.cpp
76 76 // part of static data. 77 77 struct freebsd_dev_channel *devicetable[FREEBSD_MAXDEV]; 78 78 79 // forward declaration80 // static int parse_ata_chan_dev(const char * dev_name, struct freebsd_dev_channel *ch);81 82 83 79 // Returns 1 if device not available/open/found else 0. Also shifts fd into valid range. 84 80 static int isnotopen(int *fd, struct freebsd_dev_channel** fdchan) { 85 81 // put valid "file descriptor" into range 0...FREEBSD_MAXDEV-1 … … 336 332 static const char * fbsd_dev_twa_ctrl = "twa"; 337 333 static const char * fbsd_dev_cciss = "ciss"; 338 334 339 int parse_ata_chan_dev(const char * dev_name, struct freebsd_dev_channel *chan ) {335 int parse_ata_chan_dev(const char * dev_name, struct freebsd_dev_channel *chan, const char * type) { 340 336 int len; 341 337 int dev_prefix_len = strlen(fbsd_dev_prefix); 342 338 339 340 // No Autodetection if device type was specified by user 341 if (*type){ 342 if(!strcmp(type,"ata")) return CONTROLLER_ATA; 343 if(!strcmp(type,"sat")) return CONTROLLER_SAT; 344 if(!strcmp(type,"scsi")) goto handlescsi; 345 if(hpt_hba(type)) return CONTROLLER_HPT; 346 return CONTROLLER_UNKNOWN; 347 // todo - add other types 348 } 349 343 350 // if dev_name null, or string length zero 344 351 if (!dev_name || !(len = strlen(dev_name))) 345 352 return CONTROLLER_UNKNOWN; … … 466 473 return false; 467 474 } 468 475 469 parse_ok = parse_ata_chan_dev(dev,fdchan );470 476 parse_ok = parse_ata_chan_dev(dev,fdchan,get_req_type()); 477 471 478 if (parse_ok == CONTROLLER_UNKNOWN) { 472 479 free(fdchan); 473 480 errno = ENOTTY; … … 2116 2123 2117 2124 smart_device * freebsd_smart_interface::autodetect_smart_device(const char * name) 2118 2125 { 2119 int guess = parse_ata_chan_dev(name,NULL );2126 int guess = parse_ata_chan_dev(name,NULL,""); 2120 2127 unsigned short vendor_id = 0, product_id = 0, version = 0; 2121 2128 2122 2129 switch (guess) { … … 2159 2166 set_err(EINVAL, "Option -d 3ware,N (N=%d) must have 0 <= N <= 15", disknum); 2160 2167 return 0; 2161 2168 } 2162 int contr = parse_ata_chan_dev(name,NULL );2169 int contr = parse_ata_chan_dev(name,NULL,""); 2163 2170 if (contr != CONTROLLER_3WARE_9000_CHAR && contr != CONTROLLER_3WARE_678K_CHAR) 2164 2171 contr = CONTROLLER_3WARE_678K; 2165 2172 return new freebsd_escalade_device(this, name, contr, disknum);