ata_da.c (220886) | ata_da.c (221071) |
---|---|
1/*- 2 * Copyright (c) 2009 Alexander Motin <mav@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2009 Alexander Motin <mav@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sys/cam/ata/ata_da.c 220886 2011-04-20 13:27:50Z mav $"); | 28__FBSDID("$FreeBSD: head/sys/cam/ata/ata_da.c 221071 2011-04-26 17:01:49Z mav $"); |
29 30#include "opt_ada.h" | 29 30#include "opt_ada.h" |
31#include "opt_ata.h" |
|
31 32#include <sys/param.h> 33 34#ifdef _KERNEL 35#include <sys/systm.h> 36#include <sys/kernel.h> 37#include <sys/bio.h> 38#include <sys/sysctl.h> --- 139 unchanged lines hidden (view full) --- 178 u_int32_t sense_flags); 179static void adagetparams(struct cam_periph *periph, 180 struct ccb_getdev *cgd); 181static timeout_t adasendorderedtag; 182static void adashutdown(void *arg, int howto); 183static void adasuspend(void *arg); 184static void adaresume(void *arg); 185 | 32 33#include <sys/param.h> 34 35#ifdef _KERNEL 36#include <sys/systm.h> 37#include <sys/kernel.h> 38#include <sys/bio.h> 39#include <sys/sysctl.h> --- 139 unchanged lines hidden (view full) --- 179 u_int32_t sense_flags); 180static void adagetparams(struct cam_periph *periph, 181 struct ccb_getdev *cgd); 182static timeout_t adasendorderedtag; 183static void adashutdown(void *arg, int howto); 184static void adasuspend(void *arg); 185static void adaresume(void *arg); 186 |
187#ifndef ADA_DEFAULT_LEGACY_ALIASES 188#ifdef ATA_CAM 189#define ADA_DEFAULT_LEGACY_ALIASES 1 190#else 191#define ADA_DEFAULT_LEGACY_ALIASES 0 192#endif 193#endif 194 |
|
186#ifndef ADA_DEFAULT_TIMEOUT 187#define ADA_DEFAULT_TIMEOUT 30 /* Timeout in seconds */ 188#endif 189 190#ifndef ADA_DEFAULT_RETRY 191#define ADA_DEFAULT_RETRY 4 192#endif 193 --- 16 unchanged lines hidden (view full) --- 210/* 211 * Most platforms map firmware geometry to actual, but some don't. If 212 * not overridden, default to nothing. 213 */ 214#ifndef ata_disk_firmware_geom_adjust 215#define ata_disk_firmware_geom_adjust(disk) 216#endif 217 | 195#ifndef ADA_DEFAULT_TIMEOUT 196#define ADA_DEFAULT_TIMEOUT 30 /* Timeout in seconds */ 197#endif 198 199#ifndef ADA_DEFAULT_RETRY 200#define ADA_DEFAULT_RETRY 4 201#endif 202 --- 16 unchanged lines hidden (view full) --- 219/* 220 * Most platforms map firmware geometry to actual, but some don't. If 221 * not overridden, default to nothing. 222 */ 223#ifndef ata_disk_firmware_geom_adjust 224#define ata_disk_firmware_geom_adjust(disk) 225#endif 226 |
227static int ada_legacy_aliases = ADA_DEFAULT_LEGACY_ALIASES; |
|
218static int ada_retry_count = ADA_DEFAULT_RETRY; 219static int ada_default_timeout = ADA_DEFAULT_TIMEOUT; 220static int ada_send_ordered = ADA_DEFAULT_SEND_ORDERED; 221static int ada_spindown_shutdown = ADA_DEFAULT_SPINDOWN_SHUTDOWN; 222static int ada_spindown_suspend = ADA_DEFAULT_SPINDOWN_SUSPEND; 223static int ada_write_cache = ADA_DEFAULT_WRITE_CACHE; 224 225SYSCTL_NODE(_kern_cam, OID_AUTO, ada, CTLFLAG_RD, 0, 226 "CAM Direct Access Disk driver"); | 228static int ada_retry_count = ADA_DEFAULT_RETRY; 229static int ada_default_timeout = ADA_DEFAULT_TIMEOUT; 230static int ada_send_ordered = ADA_DEFAULT_SEND_ORDERED; 231static int ada_spindown_shutdown = ADA_DEFAULT_SPINDOWN_SHUTDOWN; 232static int ada_spindown_suspend = ADA_DEFAULT_SPINDOWN_SUSPEND; 233static int ada_write_cache = ADA_DEFAULT_WRITE_CACHE; 234 235SYSCTL_NODE(_kern_cam, OID_AUTO, ada, CTLFLAG_RD, 0, 236 "CAM Direct Access Disk driver"); |
237SYSCTL_INT(_kern_cam_ada, OID_AUTO, legacy_aliases, CTLFLAG_RW, 238 &ada_legacy_aliases, 0, "Create legacy-like device aliases"); 239TUNABLE_INT("kern.cam.ada.legacy_aliases", &ada_legacy_aliases); |
|
227SYSCTL_INT(_kern_cam_ada, OID_AUTO, retry_count, CTLFLAG_RW, 228 &ada_retry_count, 0, "Normal I/O retry count"); 229TUNABLE_INT("kern.cam.ada.retry_count", &ada_retry_count); 230SYSCTL_INT(_kern_cam_ada, OID_AUTO, default_timeout, CTLFLAG_RW, 231 &ada_default_timeout, 0, "Normal I/O timeout (in seconds)"); 232TUNABLE_INT("kern.cam.ada.default_timeout", &ada_default_timeout); 233SYSCTL_INT(_kern_cam_ada, OID_AUTO, ada_send_ordered, CTLFLAG_RW, 234 &ada_send_ordered, 0, "Send Ordered Tags"); --- 483 unchanged lines hidden (view full) --- 718} 719 720static cam_status 721adaregister(struct cam_periph *periph, void *arg) 722{ 723 struct ada_softc *softc; 724 struct ccb_pathinq cpi; 725 struct ccb_getdev *cgd; | 240SYSCTL_INT(_kern_cam_ada, OID_AUTO, retry_count, CTLFLAG_RW, 241 &ada_retry_count, 0, "Normal I/O retry count"); 242TUNABLE_INT("kern.cam.ada.retry_count", &ada_retry_count); 243SYSCTL_INT(_kern_cam_ada, OID_AUTO, default_timeout, CTLFLAG_RW, 244 &ada_default_timeout, 0, "Normal I/O timeout (in seconds)"); 245TUNABLE_INT("kern.cam.ada.default_timeout", &ada_default_timeout); 246SYSCTL_INT(_kern_cam_ada, OID_AUTO, ada_send_ordered, CTLFLAG_RW, 247 &ada_send_ordered, 0, "Send Ordered Tags"); --- 483 unchanged lines hidden (view full) --- 731} 732 733static cam_status 734adaregister(struct cam_periph *periph, void *arg) 735{ 736 struct ada_softc *softc; 737 struct ccb_pathinq cpi; 738 struct ccb_getdev *cgd; |
726 char announce_buf[80]; | 739 char announce_buf[80], buf1[32]; |
727 struct disk_params *dp; 728 caddr_t match; 729 u_int maxio; | 740 struct disk_params *dp; 741 caddr_t match; 742 u_int maxio; |
743 int legacy_id; |
|
730 731 cgd = (struct ccb_getdev *)arg; 732 if (periph == NULL) { 733 printf("adaregister: periph was NULL!!\n"); 734 return(CAM_REQ_CMP_ERR); 735 } 736 737 if (cgd == NULL) { --- 118 unchanged lines hidden (view full) --- 856 softc->disk->d_stripeoffset = (softc->disk->d_stripesize - 857 ata_logical_sector_offset(&cgd->ident_data)) % 858 softc->disk->d_stripesize; 859 } 860 softc->disk->d_fwsectors = softc->params.secs_per_track; 861 softc->disk->d_fwheads = softc->params.heads; 862 ata_disk_firmware_geom_adjust(softc->disk); 863 | 744 745 cgd = (struct ccb_getdev *)arg; 746 if (periph == NULL) { 747 printf("adaregister: periph was NULL!!\n"); 748 return(CAM_REQ_CMP_ERR); 749 } 750 751 if (cgd == NULL) { --- 118 unchanged lines hidden (view full) --- 870 softc->disk->d_stripeoffset = (softc->disk->d_stripesize - 871 ata_logical_sector_offset(&cgd->ident_data)) % 872 softc->disk->d_stripesize; 873 } 874 softc->disk->d_fwsectors = softc->params.secs_per_track; 875 softc->disk->d_fwheads = softc->params.heads; 876 ata_disk_firmware_geom_adjust(softc->disk); 877 |
878 if (ada_legacy_aliases) { 879#ifdef ATA_STATIC_ID 880 legacy_id = xpt_path_legacy_ata_id(periph->path); 881#else 882 legacy_id = softc->disk->d_unit; 883#endif 884 if (legacy_id >= 0) { 885 snprintf(announce_buf, sizeof(announce_buf), 886 "kern.devalias.%s%d", 887 softc->disk->d_name, softc->disk->d_unit); 888 snprintf(buf1, sizeof(buf1), 889 "ad%d", legacy_id); 890 setenv(announce_buf, buf1); 891 } 892 } else 893 legacy_id = -1; |
|
864 disk_create(softc->disk, DISK_VERSION); 865 mtx_lock(periph->sim->mtx); 866 cam_periph_unhold(periph); 867 868 dp = &softc->params; 869 snprintf(announce_buf, sizeof(announce_buf), 870 "%juMB (%ju %u byte sectors: %dH %dS/T %dC)", 871 (uintmax_t)(((uintmax_t)dp->secsize * 872 dp->sectors) / (1024*1024)), 873 (uintmax_t)dp->sectors, 874 dp->secsize, dp->heads, 875 dp->secs_per_track, dp->cylinders); 876 xpt_announce_periph(periph, announce_buf); | 894 disk_create(softc->disk, DISK_VERSION); 895 mtx_lock(periph->sim->mtx); 896 cam_periph_unhold(periph); 897 898 dp = &softc->params; 899 snprintf(announce_buf, sizeof(announce_buf), 900 "%juMB (%ju %u byte sectors: %dH %dS/T %dC)", 901 (uintmax_t)(((uintmax_t)dp->secsize * 902 dp->sectors) / (1024*1024)), 903 (uintmax_t)dp->sectors, 904 dp->secsize, dp->heads, 905 dp->secs_per_track, dp->cylinders); 906 xpt_announce_periph(periph, announce_buf); |
907 if (legacy_id >= 0) 908 printf("%s%d: Previously was known as ad%d\n", 909 periph->periph_name, periph->unit_number, legacy_id); |
|
877 878 /* 879 * Create our sysctl variables, now that we know 880 * we have successfully attached. 881 */ 882 cam_periph_acquire(periph); 883 taskqueue_enqueue(taskqueue_thread, &softc->sysctl_task); 884 --- 664 unchanged lines hidden --- | 910 911 /* 912 * Create our sysctl variables, now that we know 913 * we have successfully attached. 914 */ 915 cam_periph_acquire(periph); 916 taskqueue_enqueue(taskqueue_thread, &softc->sysctl_task); 917 --- 664 unchanged lines hidden --- |