153901Smckusick /* 2*63307Sbostic * Copyright (c) 1992, 1993 3*63307Sbostic * The Regents of the University of California. All rights reserved. 453901Smckusick * 553901Smckusick * This code is derived from software contributed to Berkeley by 653901Smckusick * Sony Corp. and Kazumasa Utashiro of Software Research Associates, Inc. 753901Smckusick * 853901Smckusick * %sccs.include.redist.c% 953901Smckusick * 1053901Smckusick * from: $Hdr: sdreg.h,v 4.300 91/06/09 06:38:28 root Rel41 $ SONY 1153901Smckusick * 12*63307Sbostic * @(#)sdreg.h 8.1 (Berkeley) 06/11/93 1353901Smckusick */ 1453901Smckusick 1553901Smckusick /* 1653901Smckusick * Copyright (c) 1989- by SONY Corporation. 1753901Smckusick */ 1853901Smckusick /* 1953901Smckusick * sdreg.h 2053901Smckusick */ 2153901Smckusick 2253901Smckusick #ifndef __SDREG__ 2353901Smckusick #define __SDREG__ 1 2453901Smckusick 2553901Smckusick #define MAXSLAVE 8 2653901Smckusick #define PNUM 8 2753901Smckusick #define RSEN_CNT 32 2853901Smckusick 2953901Smckusick /******************************************************/ 3053901Smckusick /* 3153901Smckusick * software control structure / controller 3253901Smckusick */ 3353901Smckusick struct sdc_softc { 3453901Smckusick /*00*/ int sdc_wticks; 3553901Smckusick /*04*/ int sdc_state; 3653901Smckusick #define SDCS_NORMAL 0x0 3753901Smckusick #define SDCS_RSENSE 0x1 3853901Smckusick #define SDCS_ECC 0x2 3953901Smckusick #define SDCS_RASREAD 0x4 4053901Smckusick #define SDCS_RASBLK 0x8 4153901Smckusick #define SDCS_RASWRITE 0x10 4253901Smckusick #define SDCS_RETRY 0x20 4353901Smckusick #define SDCS_PREVRMB 0x40 4453901Smckusick #define SDCS_LOSTDATA 0x1000 4553901Smckusick #define SDCS_ECC_HOLD 0x100000 4653901Smckusick #define SDCS_ECCOFF 0x200000 4753901Smckusick #define SDCS_REZERO 0x400000 4853901Smckusick #define SDCS_OPEN_WAIT 0x20000000 4953901Smckusick #define SDCS_SCUNLOCK 0x40000000 5053901Smckusick #define SDCS_IOCTL 0x80000000 5153901Smckusick /*08*/ int sdc_nhrderr; 5253901Smckusick /*0c*/ int sdc_retrycnt; 5353901Smckusick /*10*/ int sdc_softas; 5453901Smckusick /*14*/ int sdc_timeo; 5553901Smckusick /*18*/ int sdc_countcc; 5653901Smckusick /*1c*/ int sdc_firmware; 5753901Smckusick #define SDCFW_DEFMODE 0x1 5853901Smckusick #define SDCFW_CACHE 0x2 5953901Smckusick #define SDCFW_AWRE 0x4 6053901Smckusick #define SDCFW_ARRE 0x8 6153901Smckusick #define SDCFW_OLDWREN3 0x10 6253901Smckusick #define SDCFW_WANTED 0x20 6353901Smckusick #define SDCFW_BUSY 0x40 6453901Smckusick #define SDCFW_RMB 0x80 6553901Smckusick #define SDCFW_CDBUGS 0x100 6653901Smckusick #define SDCFW_CONTR 0x200 6753901Smckusick #define SDCFW_DEVMASK 0xf0000000 6853901Smckusick #define SDCFW_HD 0x10000000 6953901Smckusick #define SDCFW_MO 0x20000000 7053901Smckusick #define SDCFW_CD 0x40000000 7153901Smckusick /*20*/ 7253901Smckusick }; 7353901Smckusick 7453901Smckusick /* 7553901Smckusick * software control structure / drive 7653901Smckusick */ 7753901Smckusick struct sdd_softc { 7853901Smckusick /*00*/ int sdd_sectsize; 7953901Smckusick /*04*/ int sdd_nsect; 8053901Smckusick /*08*/ int sdd_badsect; 8153901Smckusick /*0c*/ int sdd_flags; 8253901Smckusick #define SDDF_DSKCHGD 0x0 8353901Smckusick #define SDDF_SAMEDSK 0x1 8453901Smckusick #define SDDF_WPROTECT 0x2 8553901Smckusick #define SDDF_XUSE 0x4 8653901Smckusick #define SDDF_NONFMT 0x8 8753901Smckusick #define SDDF_FMTDONE 0x10 8853901Smckusick #define SDDF_REQ_EJECT 0x20 8953901Smckusick #define SDDF_ERASEOFF 0x40 9053901Smckusick #define SDDF_VBADSECT 0x80 9153901Smckusick #define SDDF_SKIPCHECK 0x100 9253901Smckusick #define SDDF_SYNCTR 0x200 9353901Smckusick #define SDDF_INHRMV 0x400 9453901Smckusick #define SDDF_GETTMP 0x800 9553901Smckusick #define SDDF_AUDIO_START 0x80000000 9653901Smckusick /*10*/ int sdd_start; /* for removable disk */ 9753901Smckusick /*14*/ int sdd_stoptime; /* for removable disk */ 9853901Smckusick daddr_t sdd_lastblk; 9953901Smckusick }; 10053901Smckusick 10153901Smckusick struct sdst { 10253901Smckusick /*00*/ short nsect; /* # sectors / track */ 10353901Smckusick /*02*/ short ntrak; /* # tracks / cylinder */ 10453901Smckusick /*04*/ short nspc; /* # sectors / cylinder */ 10553901Smckusick /*06*/ short ncyl; /* # cylinders */ 10653901Smckusick /*08*/ short rps; /* # revolutions / second */ 10753901Smckusick /*0a*/ short xxxx; /* reserved */ 10853901Smckusick /*0c*/ struct size *sizes; /* partition table */ 10953901Smckusick /*10*/ 11053901Smckusick }; 11153901Smckusick 11253901Smckusick struct size { 11353901Smckusick /*00*/ daddr_t sd_nblocks; 11453901Smckusick /*04*/ daddr_t sd_blkoff; 11553901Smckusick /*08*/ 11653901Smckusick }; 11753901Smckusick 11853901Smckusick /* 11953901Smckusick * Device configuration table. 12053901Smckusick */ 12153901Smckusick struct sddevinfo { 12253901Smckusick /*00*/ int id_len; /* identify length */ 12353901Smckusick /*04*/ char *id_name; /* vendor & product ID */ 12453901Smckusick /*08*/ char *revs; /* revision */ 12553901Smckusick /*0c*/ int capacity; /* drive capacity */ 12653901Smckusick /*10*/ char *call_name; /* device nickname */ 12753901Smckusick /*14*/ int type; /* device type code */ 12853901Smckusick #define UNKNOWN_DISK 0 12953901Smckusick /**/ 13053901Smckusick #define WREN3_101 110 13153901Smckusick #define WREN3_182 111 13253901Smckusick #define WREN3_101_HH 112 13353901Smckusick #define WREN4_286 120 13453901Smckusick #define WREN5_170_HH 130 13553901Smckusick #define WREN6_415_HH 141 13653901Smckusick #define ST1480N 171 13753901Smckusick /**/ 13853901Smckusick #define DK515C_78 210 13953901Smckusick #define DK516C_16 211 14053901Smckusick #define DK312C_25 220 14153901Smckusick #define DK312C_20 221 14253901Smckusick /**/ 14353901Smckusick #define SRD_2040Z 310 14453901Smckusick #define SMO_S501 330 /* format mode 2 */ 14553901Smckusick #define SMO_S501_ISO 331 /* format mode 3 (spare band 1024) */ 14653901Smckusick #define SMO_S501_ISO2 332 /* format mode 3 (spare band 2048) */ 14753901Smckusick /**/ 14853901Smckusick #define XT_8760S 810 14953901Smckusick /**/ 15053901Smckusick /*18*/ int firm_flags; /* firmware spec */ 15153901Smckusick # define FIRM_CACHE_ON 0x01 15253901Smckusick # define FIRM_CACHE_OFF 0x02 15353901Smckusick # define FIRM_SYNCTR 0x04 15453901Smckusick # define FIRM_AWRE 0x08 15553901Smckusick # define FIRM_ARRE 0x10 15653901Smckusick /*1c*/ int tr_period; /* synchronous transfer period */ 15753901Smckusick /*20*/ int tr_offset; /* synchronous transfer offset */ 15853901Smckusick /*24*/ struct sc_ureq **setup_cmds; /* device setup commands */ 15953901Smckusick /*28*/ struct sdst *sdstp; /* device specifications */ 16053901Smckusick #define calc_disk_sizes NULL 16153901Smckusick /*2c*/ char *ERP_page; /* normal Error Recovery Parameters */ 16253901Smckusick /*30*/ char *max_ERP_page; /* max Error Recovery Parameters */ 16353901Smckusick /*34*/ char **other_pages; /* Other Parameters */ 16453901Smckusick /*38*/ int fmt_opts; /* Format options */ 16553901Smckusick # define FMT_DLFMT 0x07 /* Defect list format */ 16653901Smckusick # define FMT_DLF_BLK 0x00 /* block format */ 16753901Smckusick # define FMT_DLF_IDX 0x04 /* bytes from index format */ 16853901Smckusick # define FMT_DLF_PHYS 0x05 /* physical sector format */ 16953901Smckusick # define FMT_DCRT 0x20 /* Disable Certification */ 17053901Smckusick /*3c*/ 17153901Smckusick }; 17253901Smckusick 17353901Smckusick #ifdef news1800 17453901Smckusick # define SYNC_TR_OFS 4 17553901Smckusick #else 17653901Smckusick # define SYNC_TR_OFS 0 17753901Smckusick #endif 17853901Smckusick 17953901Smckusick /*********************************************************/ 18053901Smckusick 18153901Smckusick /* 18253901Smckusick * MODE SELECT/SENSE bit assign 18353901Smckusick */ 18453901Smckusick #define SDM_PG_NULL 0x00 /* product unique not used */ 18553901Smckusick #define SDM_PG_ERR 0x01 /* error recovery parameters */ 18653901Smckusick #define SDM_PG_CNCT 0x02 /* disconnect/reconnect control parameters */ 18753901Smckusick #define SDM_PG_FMT1 0x03 /* direct access device format parameters */ 18853901Smckusick #define SDM_PG_GEOM 0x04 /* rigid disk drive geometry parameters */ 18953901Smckusick 19053901Smckusick #define SDM_PG_CACHE1 0x08 /* cache control parameters */ 19153901Smckusick 19253901Smckusick #define SDM_PG_CACHE2 0x38 /* cache control parameters */ 19353901Smckusick 19453901Smckusick #define SDM_PG_FMT2 0x20 /* format parameters */ 19553901Smckusick 19653901Smckusick #define SDM_PG_MODIFY 0x20 /* modification parameters */ 19753901Smckusick 19853901Smckusick #define SDM_PAGE 0x00 /* page cache mode */ 19953901Smckusick #define SDM_RING 0x10 /* ring cache mode */ 20053901Smckusick #define SDM_RCD 0x01 /* Read Cache Disable */ 20153901Smckusick 20253901Smckusick #define SDM_STOD 0x08 /* SCSI Time Out Delay*/ 20353901Smckusick #define SDM_ESDT 0x04 /* enable SCSI data timeout */ 20453901Smckusick 20553901Smckusick #define SDM_PF 0x10 /* page format */ 20653901Smckusick 20753901Smckusick #define SDM_PC_CUR 0x00 /* page control field (current value) */ 20853901Smckusick #define SDM_PC_CHG 0x40 /* page control field (changeable value) */ 20953901Smckusick #define SDM_PC_DEF 0x80 /* page control field (default value) */ 21053901Smckusick #define SDM_PC_SAVE 0xc0 /* page control field (saved value) */ 21153901Smckusick 21253901Smckusick #define SDM_PCODE_ER SDM_PG_ERR 21353901Smckusick #define SDM_PCODE_CON SDM_PG_CNCT 21453901Smckusick #define SDM_PCODE_FMT SDM_PG_FMT2 21553901Smckusick #define SDM_PCODE_ALL 0x3f 21653901Smckusick 21753901Smckusick #define SDM_DCR 0x01 /* Disable Correction */ 21853901Smckusick #define SDM_DTE 0x02 /* Disable Transfer on Error */ 21953901Smckusick #define SDM_PER 0x04 /* Post Error */ 22053901Smckusick #define SDM_EEC 0x08 /* Enable Early Correction */ 22153901Smckusick #define SDM_RC 0x10 /* Read Continuous */ 22253901Smckusick #define SDM_TB 0x20 /* Transfer Block */ 22353901Smckusick #define SDM_ARRE 0x40 /* automatic read reallocate enable */ 22453901Smckusick #define SDM_AWRE 0x80 /* automatic write reallocate enable */ 22553901Smckusick 22653901Smckusick /* 22753901Smckusick * READ DEFECT LIST bit assign 22853901Smckusick */ 22953901Smckusick #define SDDL_PLIST 0x10 /* primary defect list */ 23053901Smckusick #define SDDL_GLIST 0x08 /* grown defect list */ 23153901Smckusick #define SDDL_PHYSFMT 0x05 /* physical sector format */ 23253901Smckusick 23353901Smckusick /* 23453901Smckusick * FORMAT UNIT bit assign 23553901Smckusick */ 23653901Smckusick #define SDF_FMTDAT 0x10 /* format data */ 23753901Smckusick #define SDF_CMPLST 0x08 /* complete list */ 23853901Smckusick 23953901Smckusick #define SDF_BLKFMT 0x10 /* block format */ 24053901Smckusick #define SDF_PHYSFMT 0x15 /* physical sector format */ 24153901Smckusick #define SDF_MKCDA 0x02 /* make controll data area */ 24253901Smckusick #define SDF_MKPLST 0x01 /* make P list */ 24353901Smckusick 24453901Smckusick /* 24553901Smckusick * PREVENT/ALLOW MEDIUM REMOVAL bit assign 24653901Smckusick */ 24753901Smckusick #define SDRMV_PREV 0x01 /* prevent medium removal */ 24853901Smckusick #define SDRMV_ALLOW 0x00 /* allow medium removal */ 24953901Smckusick 25053901Smckusick /* 25153901Smckusick * START/STOP UNIT bit assign 25253901Smckusick */ 25353901Smckusick #define SDSS_STOP 0x00 /* stop unit */ 25453901Smckusick #define SDSS_START 0x01 /* start unit */ 25553901Smckusick #define SDSS_EJECT 0x02 /* eject */ 25653901Smckusick 25753901Smckusick /*********************************************************/ 25853901Smckusick /* 25953901Smckusick * IOCTL DEFINES 26053901Smckusick */ 26153901Smckusick #define SDIOC_PRVRMV _IO('D', 0) /* prevent medium removal */ 26253901Smckusick #define SDIOC_ALWRMV _IO('D', 1) /* allow medium removal */ 26353901Smckusick #define SDIOC_FORMAT _IOWR('D', 2, struct fmt_data) /* format unit */ 26453901Smckusick struct fmt_data { 26553901Smckusick /*00*/ int noglist; /* ignore G-list flag */ 26653901Smckusick /*04*/ u_char *dlh; /* defect list header */ 26753901Smckusick /*08*/ 26853901Smckusick }; 26953901Smckusick 27053901Smckusick #define SDIOC_GSTOPT _IOR('D', 3, int) /* get stop time */ 27153901Smckusick #define SDIOC_SSTOPT _IOW('D', 4, int) /* set stop time */ 27253901Smckusick 27353901Smckusick #define SDIOC_SEJECT _IO('D', 5) /* set medium eject request */ 27453901Smckusick 27553901Smckusick #define SDIOC_SXUSE _IO('D', 6) /* set exclusive use */ 27653901Smckusick #define SDIOC_RXUSE _IO('D', 7) /* reset exclusive use */ 27753901Smckusick #define SDIOC_ERSOFF _IO('D', 8) /* no erase before write */ 27853901Smckusick #define SDIOC_ERSON _IO('D', 9) /* erase before write */ 27953901Smckusick 28053901Smckusick #define SDIOC_INQUIRY _IOR('D', 10, struct sc_inq) 28153901Smckusick #define SDIOC_RCAP _IOR('D', 11, int) 28253901Smckusick 28353901Smckusick #define SDIOC_ECODE _IOW('D', 14, int) /* extend ecode on/off */ 28453901Smckusick 28553901Smckusick #define SDIOC_GFLAGS _IOR('D', 15, int) /* get ii->ii_flags */ 28653901Smckusick #define SDIOC_SFLAGS _IOW('D', 16, int) /* set ii->ii_flags */ 28753901Smckusick 28853901Smckusick /* 28953901Smckusick * ii->ii_flags bits assign 29053901Smckusick */ 29153901Smckusick #define SD_F_ENW 0x01 /* enable write open */ 29253901Smckusick #define SD_F_ECODE 0x02 /* enable extend code */ 29353901Smckusick #define SD_F_WRTVRFY 0x04 /* execute write & verify */ 29453901Smckusick #define SD_F_IGNLABEL 0x08 /* ignore disklabel/diskinfo */ 29553901Smckusick #define SD_F_EOLBA 0x10 /* error if outside LBA */ 29653901Smckusick 29753901Smckusick #define SDIOC_RASBLK _IOW('D', 17, int) /* reassign block */ 29853901Smckusick #define SDIOC_GNICKNAME _IOW('D', 18, char *) /* get device nickname */ 29953901Smckusick #define SDIOC_GTYPINDEX _IOR('D', 19, int) /* get ii->ii_type */ 30053901Smckusick 30153901Smckusick #define SDIOC_SSYNCPARAM _IOW('D', 20, struct sync_param) 30253901Smckusick /* set sync tr param */ 30353901Smckusick #define SDIOC_GSYNCPARAM _IOR('D', 21, struct sync_param) 30453901Smckusick /* get sync tr param */ 30553901Smckusick struct sync_param { 30653901Smckusick int tr_period; 30753901Smckusick int tr_offset; 30853901Smckusick }; 30953901Smckusick 31053901Smckusick #define SDIOC_FORMAT2 _IOWR('D', 22, struct sc_ureq) /* format unit */ 31153901Smckusick 31253901Smckusick #endif /* !__SDREG__ */ 313