Thu Jun 8 22:24:59 2017 UTC ()
do not expose kernel-internal structure definitions to userland.
needed for ZFS.


(chs)
diff -r1.70 -r1.71 src/sys/sys/disk.h

cvs diff -r1.70 -r1.71 src/sys/sys/disk.h (expand / switch to unified diff)

--- src/sys/sys/disk.h 2017/03/05 23:07:12 1.70
+++ src/sys/sys/disk.h 2017/06/08 22:24:59 1.71
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: disk.h,v 1.70 2017/03/05 23:07:12 mlelstv Exp $ */ 1/* $NetBSD: disk.h,v 1.71 2017/06/08 22:24:59 chs Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 1996, 1997, 2004 The NetBSD Foundation, Inc. 4 * Copyright (c) 1996, 1997, 2004 The NetBSD Foundation, Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to The NetBSD Foundation 7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 8 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
9 * NASA Ames Research Center. 9 * NASA Ames Research Center.
10 * 10 *
11 * Redistribution and use in source and binary forms, with or without 11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions 12 * modification, are permitted provided that the following conditions
13 * are met: 13 * are met:
14 * 1. Redistributions of source code must retain the above copyright 14 * 1. Redistributions of source code must retain the above copyright
@@ -69,43 +69,29 @@ @@ -69,43 +69,29 @@
69 * 69 *
70 * from: Header: disk.h,v 1.5 92/11/19 04:33:03 torek Exp (LBL) 70 * from: Header: disk.h,v 1.5 92/11/19 04:33:03 torek Exp (LBL)
71 * 71 *
72 * @(#)disk.h 8.2 (Berkeley) 1/9/95 72 * @(#)disk.h 8.2 (Berkeley) 1/9/95
73 */ 73 */
74 74
75#ifndef _SYS_DISK_H_ 75#ifndef _SYS_DISK_H_
76#define _SYS_DISK_H_ 76#define _SYS_DISK_H_
77 77
78/* 78/*
79 * Disk device structures. 79 * Disk device structures.
80 */ 80 */
81 81
82#ifdef _KERNEL 
83#include <sys/device.h> 
84#endif 
85#include <sys/dkio.h> 82#include <sys/dkio.h>
86#include <sys/time.h> 83#include <sys/time.h>
87#include <sys/queue.h> 84#include <sys/queue.h>
88#include <sys/mutex.h> 
89#include <sys/iostat.h> 
90 
91#include <prop/proplib.h> 
92 
93struct buf; 
94struct disk; 
95struct disklabel; 
96struct cpu_disklabel; 
97struct lwp; 
98struct vnode; 
99 85
100/* 86/*
101 * Disk information dictionary. 87 * Disk information dictionary.
102 * 88 *
103 * This contains general infomation for disk devices. 89 * This contains general infomation for disk devices.
104 * 90 *
105 * <dict> 91 * <dict>
106 * <key>type</key> 92 * <key>type</key>
107 * <string>...</string> 93 * <string>...</string>
108 * <key>geometry</key> 94 * <key>geometry</key>
109 * <dict> 95 * <dict>
110 * <!-- See below for disk geometry dictionary 96 * <!-- See below for disk geometry dictionary
111 * contents. --> 97 * contents. -->
@@ -178,51 +164,26 @@ struct dkwedge_info { @@ -178,51 +164,26 @@ struct dkwedge_info {
178 164
179/* 165/*
180 * dkwedge_list: 166 * dkwedge_list:
181 * 167 *
182 * Structure used to query a list of wedges. 168 * Structure used to query a list of wedges.
183 */ 169 */
184struct dkwedge_list { 170struct dkwedge_list {
185 void *dkwl_buf; /* storage for dkwedge_info array */ 171 void *dkwl_buf; /* storage for dkwedge_info array */
186 size_t dkwl_bufsize; /* size of that buffer */ 172 size_t dkwl_bufsize; /* size of that buffer */
187 u_int dkwl_nwedges; /* total number of wedges */ 173 u_int dkwl_nwedges; /* total number of wedges */
188 u_int dkwl_ncopied; /* number actually copied */ 174 u_int dkwl_ncopied; /* number actually copied */
189}; 175};
190 176
191#ifdef _KERNEL 
192/* 
193 * dkwedge_discovery_method: 
194 * 
195 * Structure used to describe partition map parsing schemes 
196 * used for wedge autodiscovery. 
197 */ 
198struct dkwedge_discovery_method { 
199 /* link in wedge driver's list */ 
200 LIST_ENTRY(dkwedge_discovery_method) ddm_list; 
201 const char *ddm_name; /* name of this method */ 
202 int ddm_priority; /* search priority */ 
203 int (*ddm_discover)(struct disk *, struct vnode *); 
204}; 
205 
206#define DKWEDGE_DISCOVERY_METHOD_DECL(name, prio, discover) \ 
207static struct dkwedge_discovery_method name ## _ddm = { \ 
208 { NULL, NULL }, \ 
209 #name, \ 
210 prio, \ 
211 discover \ 
212}; \ 
213__link_set_add_data(dkwedge_methods, name ## _ddm) 
214#endif /* _KERNEL */ 
215 
216/* Some common partition types */ 177/* Some common partition types */
217#define DKW_PTYPE_UNKNOWN "" 178#define DKW_PTYPE_UNKNOWN ""
218#define DKW_PTYPE_UNUSED "unused" 179#define DKW_PTYPE_UNUSED "unused"
219#define DKW_PTYPE_SWAP "swap" 180#define DKW_PTYPE_SWAP "swap"
220#define DKW_PTYPE_V6 "v6" 181#define DKW_PTYPE_V6 "v6"
221#define DKW_PTYPE_V7 "v7" 182#define DKW_PTYPE_V7 "v7"
222#define DKW_PTYPE_SYSV "sysv" 183#define DKW_PTYPE_SYSV "sysv"
223#define DKW_PTYPE_V71K "v71k" 184#define DKW_PTYPE_V71K "v71k"
224#define DKW_PTYPE_V8 "v8" 185#define DKW_PTYPE_V8 "v8"
225#define DKW_PTYPE_FFS "ffs" 186#define DKW_PTYPE_FFS "ffs"
226#define DKW_PTYPE_FAT "msdos" 187#define DKW_PTYPE_FAT "msdos"
227#define DKW_PTYPE_LFS "lfs" 188#define DKW_PTYPE_LFS "lfs"
228#define DKW_PTYPE_OTHER "other" 189#define DKW_PTYPE_OTHER "other"
@@ -301,26 +262,88 @@ struct disk_geom { @@ -301,26 +262,88 @@ struct disk_geom {
301 * be physical sectors which occupy space at the end of each 262 * be physical sectors which occupy space at the end of each
302 * track and/or cylinder. 263 * track and/or cylinder.
303 */ 264 */
304 uint32_t dg_sparespertrack; 265 uint32_t dg_sparespertrack;
305 uint32_t dg_sparespercyl; 266 uint32_t dg_sparespercyl;
306 /* 267 /*
307 * Alternative cylinders include maintenance, replacement, 268 * Alternative cylinders include maintenance, replacement,
308 * configuration description areas, etc. 269 * configuration description areas, etc.
309 */ 270 */
310 uint32_t dg_acylinders; 271 uint32_t dg_acylinders;
311}; 272};
312 273
313/* 274/*
 275 * Bad sector lists per fixed disk
 276 */
 277struct disk_badsectors {
 278 SLIST_ENTRY(disk_badsectors) dbs_next;
 279 daddr_t dbs_min; /* min. sector number */
 280 daddr_t dbs_max; /* max. sector number */
 281 struct timeval dbs_failedat; /* first failure at */
 282};
 283
 284struct disk_badsecinfo {
 285 uint32_t dbsi_bufsize; /* size of region pointed to */
 286 uint32_t dbsi_skip; /* how many to skip past */
 287 uint32_t dbsi_copied; /* how many got copied back */
 288 uint32_t dbsi_left; /* remaining to copy */
 289 void * dbsi_buffer; /* region to copy disk_badsectors to */
 290};
 291
 292#define DK_STRATEGYNAMELEN 32
 293struct disk_strategy {
 294 char dks_name[DK_STRATEGYNAMELEN]; /* name of strategy */
 295 char *dks_param; /* notyet; should be NULL */
 296 size_t dks_paramlen; /* notyet; should be 0 */
 297};
 298
 299#ifdef _KERNEL
 300#include <sys/device.h>
 301#include <sys/mutex.h>
 302#include <sys/iostat.h>
 303
 304#include <prop/proplib.h>
 305
 306struct buf;
 307struct disk;
 308struct disklabel;
 309struct cpu_disklabel;
 310struct lwp;
 311struct vnode;
 312
 313/*
 314 * dkwedge_discovery_method:
 315 *
 316 * Structure used to describe partition map parsing schemes
 317 * used for wedge autodiscovery.
 318 */
 319struct dkwedge_discovery_method {
 320 /* link in wedge driver's list */
 321 LIST_ENTRY(dkwedge_discovery_method) ddm_list;
 322 const char *ddm_name; /* name of this method */
 323 int ddm_priority; /* search priority */
 324 int (*ddm_discover)(struct disk *, struct vnode *);
 325};
 326
 327#define DKWEDGE_DISCOVERY_METHOD_DECL(name, prio, discover) \
 328static struct dkwedge_discovery_method name ## _ddm = { \
 329 { NULL, NULL }, \
 330 #name, \
 331 prio, \
 332 discover \
 333}; \
 334__link_set_add_data(dkwedge_methods, name ## _ddm)
 335
 336/*
314 * Disk partition dictionary. 337 * Disk partition dictionary.
315 * 338 *
316 * A partition is represented as a dictionary containing generic partition 339 * A partition is represented as a dictionary containing generic partition
317 * properties (such as starting block and block count), as well as information 340 * properties (such as starting block and block count), as well as information
318 * that is specific to individual partition map formats. 341 * that is specific to individual partition map formats.
319 * 342 *
320 * <dict> 343 * <dict>
321 * <key>start-block</key> 344 * <key>start-block</key>
322 * <integer>...</integer> 345 * <integer>...</integer>
323 * <key>block-count</key> 346 * <key>block-count</key>
324 * <integer>...</integer> 347 * <integer>...</integer>
325 * <!-- DKW_PTYPE strings ("" or missing if unknown) --> 348 * <!-- DKW_PTYPE strings ("" or missing if unknown) -->
326 * <key>type</type> 349 * <key>type</type>
@@ -460,81 +483,53 @@ struct disk { @@ -460,81 +483,53 @@ struct disk {
460 /* all wedges on this disk */ 483 /* all wedges on this disk */
461 LIST_HEAD(, dkwedge_softc) dk_wedges; 484 LIST_HEAD(, dkwedge_softc) dk_wedges;
462 485
463 /* 486 /*
464 * Disk label information. Storage for the in-core disk label 487 * Disk label information. Storage for the in-core disk label
465 * must be dynamically allocated, otherwise the size of this 488 * must be dynamically allocated, otherwise the size of this
466 * structure becomes machine-dependent. 489 * structure becomes machine-dependent.
467 */ 490 */
468 daddr_t dk_labelsector; /* sector containing label */ 491 daddr_t dk_labelsector; /* sector containing label */
469 struct disklabel *dk_label; /* label */ 492 struct disklabel *dk_label; /* label */
470 struct cpu_disklabel *dk_cpulabel; 493 struct cpu_disklabel *dk_cpulabel;
471}; 494};
472 495
473#ifdef _KERNEL 
474struct dkdriver { 496struct dkdriver {
475 void (*d_strategy)(struct buf *); 497 void (*d_strategy)(struct buf *);
476 void (*d_minphys)(struct buf *); 498 void (*d_minphys)(struct buf *);
477 int (*d_open)(dev_t, int, int, struct lwp *); 499 int (*d_open)(dev_t, int, int, struct lwp *);
478 int (*d_close)(dev_t, int, int, struct lwp *); 500 int (*d_close)(dev_t, int, int, struct lwp *);
479 int (*d_diskstart)(device_t, struct buf *); 501 int (*d_diskstart)(device_t, struct buf *);
480 void (*d_iosize)(device_t, int *); 502 void (*d_iosize)(device_t, int *);
481 int (*d_dumpblocks)(device_t, void *, daddr_t, int); 503 int (*d_dumpblocks)(device_t, void *, daddr_t, int);
482 int (*d_lastclose)(device_t); 504 int (*d_lastclose)(device_t);
483 int (*d_discard)(device_t, off_t, off_t); 505 int (*d_discard)(device_t, off_t, off_t);
484 int (*d_firstopen)(device_t, dev_t, int, int); 506 int (*d_firstopen)(device_t, dev_t, int, int);
485 void (*d_label)(device_t, struct disklabel *lp); 507 void (*d_label)(device_t, struct disklabel *lp);
486}; 508};
487#endif 
488 509
489/* states */ 510/* states */
490#define DK_CLOSED 0 /* drive is closed */ 511#define DK_CLOSED 0 /* drive is closed */
491#define DK_WANTOPEN 1 /* drive being opened */ 512#define DK_WANTOPEN 1 /* drive being opened */
492#define DK_WANTOPENRAW 2 /* drive being opened */ 513#define DK_WANTOPENRAW 2 /* drive being opened */
493#define DK_RDLABEL 3 /* label being read */ 514#define DK_RDLABEL 3 /* label being read */
494#define DK_OPEN 4 /* label read, drive open */ 515#define DK_OPEN 4 /* label read, drive open */
495#define DK_OPENRAW 5 /* open without label */ 516#define DK_OPENRAW 5 /* open without label */
496 517
497/* 
498 * Bad sector lists per fixed disk 
499 */ 
500struct disk_badsectors { 
501 SLIST_ENTRY(disk_badsectors) dbs_next; 
502 daddr_t dbs_min; /* min. sector number */ 
503 daddr_t dbs_max; /* max. sector number */ 
504 struct timeval dbs_failedat; /* first failure at */ 
505}; 
506 
507struct disk_badsecinfo { 
508 uint32_t dbsi_bufsize; /* size of region pointed to */ 
509 uint32_t dbsi_skip; /* how many to skip past */ 
510 uint32_t dbsi_copied; /* how many got copied back */ 
511 uint32_t dbsi_left; /* remaining to copy */ 
512 void * dbsi_buffer; /* region to copy disk_badsectors to */ 
513}; 
514 
515#define DK_STRATEGYNAMELEN 32 
516struct disk_strategy { 
517 char dks_name[DK_STRATEGYNAMELEN]; /* name of strategy */ 
518 char *dks_param; /* notyet; should be NULL */ 
519 size_t dks_paramlen; /* notyet; should be 0 */ 
520}; 
521 
522#define DK_BSIZE2BLKSHIFT(b) ((ffs((b) / DEV_BSIZE)) - 1) 518#define DK_BSIZE2BLKSHIFT(b) ((ffs((b) / DEV_BSIZE)) - 1)
523#define DK_BSIZE2BYTESHIFT(b) (ffs((b)) - 1) 519#define DK_BSIZE2BYTESHIFT(b) (ffs((b)) - 1)
524#define DK_DEV_BSIZE_OK(b) \ 520#define DK_DEV_BSIZE_OK(b) \
525 ((b) >= DEV_BSIZE && ((b) & ((b) - 1)) == 0 && (b) <= MAXPHYS) 521 ((b) >= DEV_BSIZE && ((b) & ((b) - 1)) == 0 && (b) <= MAXPHYS)
526 522
527#ifdef _KERNEL 
528extern int disk_count; /* number of disks in global disklist */ 523extern int disk_count; /* number of disks in global disklist */
529 524
530struct proc; 525struct proc;
531 526
532void disk_attach(struct disk *); 527void disk_attach(struct disk *);
533int disk_begindetach(struct disk *, int (*)(device_t), device_t, int); 528int disk_begindetach(struct disk *, int (*)(device_t), device_t, int);
534void disk_detach(struct disk *); 529void disk_detach(struct disk *);
535void disk_init(struct disk *, const char *, const struct dkdriver *); 530void disk_init(struct disk *, const char *, const struct dkdriver *);
536void disk_destroy(struct disk *); 531void disk_destroy(struct disk *);
537void disk_wait(struct disk *); 532void disk_wait(struct disk *);
538void disk_busy(struct disk *); 533void disk_busy(struct disk *);
539void disk_unbusy(struct disk *, long, int); 534void disk_unbusy(struct disk *, long, int);
540bool disk_isbusy(struct disk *); 535bool disk_isbusy(struct disk *);
@@ -545,16 +540,16 @@ void disk_set_info(device_t, struct disk @@ -545,16 +540,16 @@ void disk_set_info(device_t, struct disk
545void dkwedge_init(void); 540void dkwedge_init(void);
546int dkwedge_add(struct dkwedge_info *); 541int dkwedge_add(struct dkwedge_info *);
547int dkwedge_del(struct dkwedge_info *); 542int dkwedge_del(struct dkwedge_info *);
548void dkwedge_delall(struct disk *); 543void dkwedge_delall(struct disk *);
549int dkwedge_list(struct disk *, struct dkwedge_list *, struct lwp *); 544int dkwedge_list(struct disk *, struct dkwedge_list *, struct lwp *);
550void dkwedge_discover(struct disk *); 545void dkwedge_discover(struct disk *);
551int dkwedge_read(struct disk *, struct vnode *, daddr_t, void *, size_t); 546int dkwedge_read(struct disk *, struct vnode *, daddr_t, void *, size_t);
552device_t dkwedge_find_by_wname(const char *); 547device_t dkwedge_find_by_wname(const char *);
553device_t dkwedge_find_by_parent(const char *, size_t *); 548device_t dkwedge_find_by_parent(const char *, size_t *);
554const char *dkwedge_get_parent_name(dev_t); 549const char *dkwedge_get_parent_name(dev_t);
555void dkwedge_print_wnames(void); 550void dkwedge_print_wnames(void);
556device_t dkwedge_find_partition(device_t, daddr_t, uint64_t); 551device_t dkwedge_find_partition(device_t, daddr_t, uint64_t);
557 552
558#endif 553#endif /* _KERNEL */
559 554
560#endif /* _SYS_DISK_H_ */ 555#endif /* _SYS_DISK_H_ */