Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


edd.h
001: /*
002:  * linux/include/linux/edd.h
003:  *  Copyright (C) 2002, 2003, 2004 Dell Inc.
004:  *  by Matt Domsch <Matt_Domsch@dell.com>
005:  *
006:  * structures and definitions for the int 13h, ax={41,48}h
007:  * BIOS Enhanced Disk Drive Services
008:  * This is based on the T13 group document D1572 Revision 0 (August 14 2002)
009:  * available at http://www.t13.org/docs2002/d1572r0.pdf.  It is
010:  * very similar to D1484 Revision 3 http://www.t13.org/docs2002/d1484r3.pdf
011:  *
012:  * In a nutshell, arch/{i386,x86_64}/boot/setup.S populates a scratch
013:  * table in the boot_params that contains a list of BIOS-enumerated
014:  * boot devices.
015:  * In arch/{i386,x86_64}/kernel/setup.c, this information is
016:  * transferred into the edd structure, and in drivers/firmware/edd.c, that
017:  * information is used to identify BIOS boot disk.  The code in setup.S
018:  * is very sensitive to the size of these structures.
019:  *
020:  * This program is free software; you can redistribute it and/or modify
021:  * it under the terms of the GNU General Public License v2.0 as published by
022:  * the Free Software Foundation
023:  *
024:  * This program is distributed in the hope that it will be useful,
025:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
026:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
027:  * GNU General Public License for more details.
028:  *
029:  */
030: #ifndef _LINUX_EDD_H
031: #define _LINUX_EDD_H
032: 
033: #include <linux/types.h>
034: 
035: #define EDDNR 0x1e9             /* addr of number of edd_info structs at EDDBUF
036:                                    in boot_params - treat this as 1 byte  */
037: #define EDDBUF  0xd00           /* addr of edd_info structs in boot_params */
038: #define EDDMAXNR 6              /* number of edd_info structs starting at EDDBUF  */
039: #define EDDEXTSIZE 8            /* change these if you muck with the structures */
040: #define EDDPARMSIZE 74
041: #define CHECKEXTENSIONSPRESENT 0x41
042: #define GETDEVICEPARAMETERS 0x48
043: #define LEGACYGETDEVICEPARAMETERS 0x08
044: #define EDDMAGIC1 0x55AA
045: #define EDDMAGIC2 0xAA55
046: 
047: 
048: #define READ_SECTORS 0x02         /* int13 AH=0x02 is READ_SECTORS command */
049: #define EDD_MBR_SIG_OFFSET 0x1B8  /* offset of signature in the MBR */
050: #define EDD_MBR_SIG_BUF    0x290  /* addr in boot params */
051: #define EDD_MBR_SIG_MAX 16        /* max number of signatures to store */
052: #define EDD_MBR_SIG_NR_BUF 0x1ea  /* addr of number of MBR signtaures at EDD_MBR_SIG_BUF
053:                                      in boot_params - treat this as 1 byte  */
054: 
055: #ifndef __ASSEMBLY__
056: 
057: #define EDD_EXT_FIXED_DISK_ACCESS           (1 << 0)
058: #define EDD_EXT_DEVICE_LOCKING_AND_EJECTING (1 << 1)
059: #define EDD_EXT_ENHANCED_DISK_DRIVE_SUPPORT (1 << 2)
060: #define EDD_EXT_64BIT_EXTENSIONS            (1 << 3)
061: 
062: #define EDD_INFO_DMA_BOUNDARY_ERROR_TRANSPARENT (1 << 0)
063: #define EDD_INFO_GEOMETRY_VALID                (1 << 1)
064: #define EDD_INFO_REMOVABLE                     (1 << 2)
065: #define EDD_INFO_WRITE_VERIFY                  (1 << 3)
066: #define EDD_INFO_MEDIA_CHANGE_NOTIFICATION     (1 << 4)
067: #define EDD_INFO_LOCKABLE                      (1 << 5)
068: #define EDD_INFO_NO_MEDIA_PRESENT              (1 << 6)
069: #define EDD_INFO_USE_INT13_FN50                (1 << 7)
070: 
071: struct edd_device_params {
072:         __u16 length;
073:         __u16 info_flags;
074:         __u32 num_default_cylinders;
075:         __u32 num_default_heads;
076:         __u32 sectors_per_track;
077:         __u64 number_of_sectors;
078:         __u16 bytes_per_sector;
079:         __u32 dpte_ptr;         /* 0xFFFFFFFF for our purposes */
080:         __u16 key;              /* = 0xBEDD */
081:         __u8 device_path_info_length;   /* = 44 */
082:         __u8 reserved2;
083:         __u16 reserved3;
084:         __u8 host_bus_type[4];
085:         __u8 interface_type[8];
086:         union {
087:                 struct {
088:                         __u16 base_address;
089:                         __u16 reserved1;
090:                         __u32 reserved2;
091:                 } __attribute__ ((packed)) isa;
092:                 struct {
093:                         __u8 bus;
094:                         __u8 slot;
095:                         __u8 function;
096:                         __u8 channel;
097:                         __u32 reserved;
098:                 } __attribute__ ((packed)) pci;
099:                 /* pcix is same as pci */
100:                 struct {
101:                         __u64 reserved;
102:                 } __attribute__ ((packed)) ibnd;
103:                 struct {
104:                         __u64 reserved;
105:                 } __attribute__ ((packed)) xprs;
106:                 struct {
107:                         __u64 reserved;
108:                 } __attribute__ ((packed)) htpt;
109:                 struct {
110:                         __u64 reserved;
111:                 } __attribute__ ((packed)) unknown;
112:         } interface_path;
113:         union {
114:                 struct {
115:                         __u8 device;
116:                         __u8 reserved1;
117:                         __u16 reserved2;
118:                         __u32 reserved3;
119:                         __u64 reserved4;
120:                 } __attribute__ ((packed)) ata;
121:                 struct {
122:                         __u8 device;
123:                         __u8 lun;
124:                         __u8 reserved1;
125:                         __u8 reserved2;
126:                         __u32 reserved3;
127:                         __u64 reserved4;
128:                 } __attribute__ ((packed)) atapi;
129:                 struct {
130:                         __u16 id;
131:                         __u64 lun;
132:                         __u16 reserved1;
133:                         __u32 reserved2;
134:                 } __attribute__ ((packed)) scsi;
135:                 struct {
136:                         __u64 serial_number;
137:                         __u64 reserved;
138:                 } __attribute__ ((packed)) usb;
139:                 struct {
140:                         __u64 eui;
141:                         __u64 reserved;
142:                 } __attribute__ ((packed)) i1394;
143:                 struct {
144:                         __u64 wwid;
145:                         __u64 lun;
146:                 } __attribute__ ((packed)) fibre;
147:                 struct {
148:                         __u64 identity_tag;
149:                         __u64 reserved;
150:                 } __attribute__ ((packed)) i2o;
151:                 struct {
152:                         __u32 array_number;
153:                         __u32 reserved1;
154:                         __u64 reserved2;
155:                 } __attribute__ ((packed)) raid;
156:                 struct {
157:                         __u8 device;
158:                         __u8 reserved1;
159:                         __u16 reserved2;
160:                         __u32 reserved3;
161:                         __u64 reserved4;
162:                 } __attribute__ ((packed)) sata;
163:                 struct {
164:                         __u64 reserved1;
165:                         __u64 reserved2;
166:                 } __attribute__ ((packed)) unknown;
167:         } device_path;
168:         __u8 reserved4;
169:         __u8 checksum;
170: } __attribute__ ((packed));
171: 
172: struct edd_info {
173:         __u8 device;
174:         __u8 version;
175:         __u16 interface_support;
176:         __u16 legacy_max_cylinder;
177:         __u8 legacy_max_head;
178:         __u8 legacy_sectors_per_track;
179:         struct edd_device_params params;
180: } __attribute__ ((packed));
181: 
182: struct edd {
183:         unsigned int mbr_signature[EDD_MBR_SIG_MAX];
184:         struct edd_info edd_info[EDDMAXNR];
185:         unsigned char mbr_signature_nr;
186:         unsigned char edd_info_nr;
187: };
188: 
189: #endif                          /*!__ASSEMBLY__ */
190: 
191: #endif                          /* _LINUX_EDD_H */
192: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/