1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _LINUX_GENHD_H 2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _LINUX_GENHD_H 3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * genhd.h Copyright (C) 1992 Drew Eckhardt 6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Generic hard disk header file by 7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Drew Eckhardt 8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * <drew@colorado.edu> 10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/types.h> 13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruenum { 15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* These three have identical behaviour; use the second one if DOS FDISK gets 16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru confused about extended/logical partitions starting past cylinder 1023. */ 17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru DOS_EXTENDED_PARTITION = 5, 18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru LINUX_EXTENDED_PARTITION = 0x85, 19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru WIN98_EXTENDED_PARTITION = 0x0f, 20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru LINUX_SWAP_PARTITION = 0x82, 22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru LINUX_RAID_PARTITION = 0xfd, /* autodetect RAID partition */ 23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru SOLARIS_X86_PARTITION = LINUX_SWAP_PARTITION, 25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru NEW_SOLARIS_X86_PARTITION = 0xbf, 26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru DM6_AUX1PARTITION = 0x51, /* no DDO: use xlated geom */ 28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru DM6_AUX3PARTITION = 0x53, /* no DDO: use xlated geom */ 29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru DM6_PARTITION = 0x54, /* has DDO: use xlated geom & offset */ 30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru EZD_PARTITION = 0x55, /* EZ-DRIVE */ 31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru FREEBSD_PARTITION = 0xa5, /* FreeBSD Partition ID */ 33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru OPENBSD_PARTITION = 0xa6, /* OpenBSD Partition ID */ 34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru NETBSD_PARTITION = 0xa9, /* NetBSD Partition ID */ 35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru BSDI_PARTITION = 0xb7, /* BSDI Partition ID */ 36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru MINIX_PARTITION = 0x81, /* Minix Partition ID */ 37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru UNIXWARE_PARTITION = 0x63, /* Same as GNU_HURD and SCO Unix */ 38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef __KERNEL__ 41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct partition { 43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char boot_ind; /* 0x80 - active */ 44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char head; /* starting head */ 45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char sector; /* starting sector */ 46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char cyl; /* starting cylinder */ 47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char sys_ind; /* What partition type */ 48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char end_head; /* end head */ 49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char end_sector; /* end sector */ 50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char end_cyl; /* end cylinder */ 51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned int start_sect; /* starting sector counting from 0 */ 52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned int nr_sects; /* nr of sectors in partition */ 53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)); 54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef __KERNEL__ 58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/major.h> 59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/device.h> 60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/smp.h> 61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/string.h> 62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/fs.h> 63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct partition { 65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char boot_ind; /* 0x80 - active */ 66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char head; /* starting head */ 67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char sector; /* starting sector */ 68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char cyl; /* starting cylinder */ 69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char sys_ind; /* What partition type */ 70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char end_head; /* end head */ 71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char end_sector; /* end sector */ 72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned char end_cyl; /* end cylinder */ 73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 start_sect; /* starting sector counting from 0 */ 74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 nr_sects; /* nr of sectors in partition */ 75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)); 76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct hd_struct { 78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru sector_t start_sect; 79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru sector_t nr_sects; 80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct kobject kobj; 81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct kobject *holder_dir; 82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned ios[2], sectors[2]; /* READs and WRITEs */ 83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int policy, partno; 84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GENHD_FL_REMOVABLE 1 87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GENHD_FL_DRIVERFS 2 88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GENHD_FL_CD 8 89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GENHD_FL_UP 16 90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GENHD_FL_SUPPRESS_PARTITION_INFO 32 91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct disk_stats { 93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long sectors[2]; /* READs and WRITEs */ 94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long ios[2]; 95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long merges[2]; 96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long ticks[2]; 97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long io_ticks; 98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long time_in_queue; 99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct gendisk { 102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int major; /* major number of driver */ 103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int first_minor; 104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int minors; /* maximum number of minors, =1 for 105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * disks that can't be partitioned. */ 106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru char disk_name[32]; /* name of major driver */ 107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct hd_struct **part; /* [indexed by minor] */ 108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int part_uevent_suppress; 109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct block_device_operations *fops; 110c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct request_queue *queue; 111c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru void *private_data; 112c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru sector_t capacity; 113c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 114c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int flags; 115c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct device *driverfs_dev; 116c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct kobject kobj; 117c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct kobject *holder_dir; 118c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct kobject *slave_dir; 119c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 120c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct timer_rand_state *random; 121c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int policy; 122c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 123c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru atomic_t sync_io; /* RAID */ 124c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long stamp; 125c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int in_flight; 126c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_SMP 127c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct disk_stats *dkstats; 128c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else 129c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct disk_stats dkstats; 130c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 131c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 132c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 133c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Structure for sysfs attributes on block devices */ 134c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct disk_attribute { 135c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct attribute attr; 136c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru ssize_t (*show)(struct gendisk *, char *); 137c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru ssize_t (*store)(struct gendisk *, const char *, size_t); 138c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 139c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 140c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 141c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Macros to operate on percpu disk statistics: 142c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 143c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * The __ variants should only be called in critical sections. The full 144c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * variants disable/enable preemption. 145c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 146c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_SMP 147c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __disk_stat_add(gendiskp, field, addnd) \ 148c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru (per_cpu_ptr(gendiskp->dkstats, smp_processor_id())->field += addnd) 149c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 150c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define disk_stat_read(gendiskp, field) \ 151c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru({ \ 152c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru typeof(gendiskp->dkstats->field) res = 0; \ 153c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int i; \ 154c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru for_each_possible_cpu(i) \ 155c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru res += per_cpu_ptr(gendiskp->dkstats, i)->field; \ 156c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru res; \ 157c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}) 158c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 159c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void disk_stat_set_all(struct gendisk *gendiskp, int value) { 160c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int i; 161c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru for_each_possible_cpu(i) 162c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru memset(per_cpu_ptr(gendiskp->dkstats, i), value, 163c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru sizeof (struct disk_stats)); 164c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 165c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 166c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else 167c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __disk_stat_add(gendiskp, field, addnd) \ 168c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru (gendiskp->dkstats.field += addnd) 169c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define disk_stat_read(gendiskp, field) (gendiskp->dkstats.field) 170c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 171c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void disk_stat_set_all(struct gendisk *gendiskp, int value) { 172c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru memset(&gendiskp->dkstats, value, sizeof (struct disk_stats)); 173c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 174c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 175c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 176c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define disk_stat_add(gendiskp, field, addnd) \ 177c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru do { \ 178c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru preempt_disable(); \ 179c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __disk_stat_add(gendiskp, field, addnd); \ 180c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru preempt_enable(); \ 181c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru } while (0) 182c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 183c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __disk_stat_dec(gendiskp, field) __disk_stat_add(gendiskp, field, -1) 184c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define disk_stat_dec(gendiskp, field) disk_stat_add(gendiskp, field, -1) 185c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 186c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __disk_stat_inc(gendiskp, field) __disk_stat_add(gendiskp, field, 1) 187c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define disk_stat_inc(gendiskp, field) disk_stat_add(gendiskp, field, 1) 188c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 189c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __disk_stat_sub(gendiskp, field, subnd) \ 190c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __disk_stat_add(gendiskp, field, -subnd) 191c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define disk_stat_sub(gendiskp, field, subnd) \ 192c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru disk_stat_add(gendiskp, field, -subnd) 193c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 194c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 195c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Inlines to alloc and free disk stats in struct gendisk */ 196c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_SMP 197c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline int init_disk_stats(struct gendisk *disk) 198c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 199c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru disk->dkstats = alloc_percpu(struct disk_stats); 200c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru if (!disk->dkstats) 201c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return 0; 202c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return 1; 203c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 204c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 205c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void free_disk_stats(struct gendisk *disk) 206c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 207c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru free_percpu(disk->dkstats); 208c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 209c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else /* CONFIG_SMP */ 210c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline int init_disk_stats(struct gendisk *disk) 211c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 212c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return 1; 213c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 214c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 215c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void free_disk_stats(struct gendisk *disk) 216c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 217c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 218c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* CONFIG_SMP */ 219c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 220c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* drivers/block/ll_rw_blk.c */ 221c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void disk_round_stats(struct gendisk *disk); 222c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 223c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* drivers/block/genhd.c */ 224c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int get_blkdev_list(char *, int); 225c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void add_disk(struct gendisk *disk); 226c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void del_gendisk(struct gendisk *gp); 227c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void unlink_gendisk(struct gendisk *gp); 228c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct gendisk *get_gendisk(dev_t dev, int *part); 229c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 230c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void set_device_ro(struct block_device *bdev, int flag); 231c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void set_disk_ro(struct gendisk *disk, int flag); 232c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 233c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* drivers/char/random.c */ 234c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void add_disk_randomness(struct gendisk *disk); 235c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void rand_initialize_disk(struct gendisk *disk); 236c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 237c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline sector_t get_start_sect(struct block_device *bdev) 238c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 239c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return bdev->bd_contains == bdev ? 0 : bdev->bd_part->start_sect; 240c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 241c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline sector_t get_capacity(struct gendisk *disk) 242c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 243c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return disk->capacity; 244c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 245c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void set_capacity(struct gendisk *disk, sector_t size) 246c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 247c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru disk->capacity = size; 248c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 249c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 250c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* __KERNEL__ */ 251c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 252c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_SOLARIS_X86_PARTITION 253c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 254c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SOLARIS_X86_NUMSLICE 8 255c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SOLARIS_X86_VTOC_SANE (0x600DDEEEUL) 256c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 257c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct solaris_x86_slice { 258c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 s_tag; /* ID tag of partition */ 259c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 s_flag; /* permission flags */ 260c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 s_start; /* start sector no of partition */ 261c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 s_size; /* # of blocks in partition */ 262c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 263c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 264c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct solaris_x86_vtoc { 265c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned int v_bootinfo[3]; /* info needed by mboot (unsupported) */ 266c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 v_sanity; /* to verify vtoc sanity */ 267c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 v_version; /* layout version */ 268c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru char v_volume[8]; /* volume name */ 269c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 v_sectorsz; /* sector size in bytes */ 270c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 v_nparts; /* number of partitions */ 271c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned int v_reserved[10]; /* free space */ 272c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct solaris_x86_slice 273c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru v_slice[SOLARIS_X86_NUMSLICE]; /* slice headers */ 274c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned int timestamp[SOLARIS_X86_NUMSLICE]; /* timestamp (unsupported) */ 275c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru char v_asciilabel[128]; /* for compatibility */ 276c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 277c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 278c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* CONFIG_SOLARIS_X86_PARTITION */ 279c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 280c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_BSD_DISKLABEL 281c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 282c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * BSD disklabel support by Yossi Gottlieb <yogo@math.tau.ac.il> 283c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * updated by Marc Espie <Marc.Espie@openbsd.org> 284c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 285c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 286c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* check against BSD src/sys/sys/disklabel.h for consistency */ 287c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 288c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define BSD_DISKMAGIC (0x82564557UL) /* The disk magic number */ 289c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define BSD_MAXPARTITIONS 16 290c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define OPENBSD_MAXPARTITIONS 16 291c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define BSD_FS_UNUSED 0 /* disklabel unused partition entry ID */ 292c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct bsd_disklabel { 293c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_magic; /* the magic number */ 294c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __s16 d_type; /* drive type */ 295c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __s16 d_subtype; /* controller/d_type specific */ 296c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru char d_typename[16]; /* type name, e.g. "eagle" */ 297c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru char d_packname[16]; /* pack identifier */ 298c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_secsize; /* # of bytes per sector */ 299c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_nsectors; /* # of data sectors per track */ 300c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_ntracks; /* # of tracks per cylinder */ 301c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_ncylinders; /* # of data cylinders per unit */ 302c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_secpercyl; /* # of data sectors per cylinder */ 303c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_secperunit; /* # of data sectors per unit */ 304c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 d_sparespertrack; /* # of spare sectors per track */ 305c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 d_sparespercyl; /* # of spare sectors per cylinder */ 306c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_acylinders; /* # of alt. cylinders per unit */ 307c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 d_rpm; /* rotational speed */ 308c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 d_interleave; /* hardware sector interleave */ 309c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 d_trackskew; /* sector 0 skew, per track */ 310c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 d_cylskew; /* sector 0 skew, per cylinder */ 311c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_headswitch; /* head switch time, usec */ 312c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_trkseek; /* track-to-track seek, usec */ 313c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_flags; /* generic flags */ 314c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define NDDATA 5 315c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_drivedata[NDDATA]; /* drive-type specific information */ 316c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define NSPARE 5 317c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 d_spare[NSPARE]; /* reserved for future use */ 318c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_magic2; /* the magic number (again) */ 319c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 d_checksum; /* xor of data incl. partitions */ 320c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 321c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* filesystem and partition information: */ 322c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 d_npartitions; /* number of partitions in following */ 323c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_bbsize; /* size of boot area at sn0, bytes */ 324c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_sbsize; /* max size of fs superblock, bytes */ 325c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct bsd_partition { /* the partition table */ 326c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 p_size; /* number of sectors in partition */ 327c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 p_offset; /* starting sector */ 328c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 p_fsize; /* filesystem basic fragment size */ 329c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 p_fstype; /* filesystem type, see below */ 330c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 p_frag; /* filesystem fragments per block */ 331c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 p_cpg; /* filesystem cylinders per group */ 332c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru } d_partitions[BSD_MAXPARTITIONS]; /* actually may be more */ 333c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 334c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 335c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* CONFIG_BSD_DISKLABEL */ 336c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 337c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_UNIXWARE_DISKLABEL 338c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 339c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Unixware slices support by Andrzej Krzysztofowicz <ankry@mif.pg.gda.pl> 340c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * and Krzysztof G. Baranowski <kgb@knm.org.pl> 341c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 342c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 343c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define UNIXWARE_DISKMAGIC (0xCA5E600DUL) /* The disk magic number */ 344c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define UNIXWARE_DISKMAGIC2 (0x600DDEEEUL) /* The slice table magic nr */ 345c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define UNIXWARE_NUMSLICE 16 346c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define UNIXWARE_FS_UNUSED 0 /* Unused slice entry ID */ 347c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 348c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct unixware_slice { 349c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 s_label; /* label */ 350c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 s_flags; /* permission flags */ 351c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 start_sect; /* starting sector */ 352c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 nr_sects; /* number of sectors in slice */ 353c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 354c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 355c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct unixware_disklabel { 356c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_type; /* drive type */ 357c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_magic; /* the magic number */ 358c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_version; /* version number */ 359c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru char d_serial[12]; /* serial number of the device */ 360c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_ncylinders; /* # of data cylinders per device */ 361c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_ntracks; /* # of tracks per cylinder */ 362c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_nsectors; /* # of data sectors per track */ 363c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_secsize; /* # of bytes per sector */ 364c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_part_start; /* # of first sector of this partition */ 365c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_unknown1[12]; /* ? */ 366c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_alt_tbl; /* byte offset of alternate table */ 367c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_alt_len; /* byte length of alternate table */ 368c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_phys_cyl; /* # of physical cylinders per device */ 369c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_phys_trk; /* # of physical tracks per cylinder */ 370c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_phys_sec; /* # of physical sectors per track */ 371c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_phys_bytes; /* # of physical bytes per sector */ 372c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_unknown2; /* ? */ 373c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_unknown3; /* ? */ 374c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 d_pad[8]; /* pad */ 375c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 376c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct unixware_vtoc { 377c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 v_magic; /* the magic number */ 378c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 v_version; /* version number */ 379c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru char v_name[8]; /* volume name */ 380c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 v_nslices; /* # of slices */ 381c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 v_unknown1; /* ? */ 382c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le32 v_reserved[10]; /* reserved */ 383c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct unixware_slice 384c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru v_slice[UNIXWARE_NUMSLICE]; /* slice headers */ 385c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru } vtoc; 386c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 387c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; /* 408 */ 388c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 389c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* CONFIG_UNIXWARE_DISKLABEL */ 390c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 391c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_MINIX_SUBPARTITION 392c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define MINIX_NR_SUBPARTITIONS 4 393c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* CONFIG_MINIX_SUBPARTITION */ 394c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 395c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef __KERNEL__ 396c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 397c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruchar *disk_name (struct gendisk *hd, int part, char *buf); 398c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 399c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int rescan_partitions(struct gendisk *disk, struct block_device *bdev); 400c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void add_partition(struct gendisk *, int, sector_t, sector_t); 401c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void delete_partition(struct gendisk *, int); 402c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 403c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct gendisk *alloc_disk_node(int minors, int node_id); 404c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct gendisk *alloc_disk(int minors); 405c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct kobject *get_disk(struct gendisk *disk); 406c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void put_disk(struct gendisk *disk); 407c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 408c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void blk_register_region(dev_t dev, unsigned long range, 409c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct module *module, 410c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct kobject *(*probe)(dev_t, int *, void *), 411c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int (*lock)(dev_t, void *), 412c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru void *data); 413c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void blk_unregister_region(dev_t dev, unsigned long range); 414c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 415c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline struct block_device *bdget_disk(struct gendisk *disk, int index) 416c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 417c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return bdget(MKDEV(disk->major, disk->first_minor) + index); 418c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 419c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 420c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 421c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 422c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 423