edd.h
001: 
002: 
003: 
004: <Matt_Domsch@dell.com>
005: 
006: 
007: 
008: 
009: http://www.t13.org/docs2002/d1572r0.pdf.
010: http://www.t13.org/docs2002/d1484r3.pdf
011: 
012: 
013: 
014: 
015: 
016: 
017: 
018: 
019: 
020: 
021: 
022: 
023: 
024: 
025: 
026: 
027: 
028: 
029: 
030: #ifndef _LINUX_EDD_H
031: #define _LINUX_EDD_H
032: 
033: #include <linux/types.h>
034: 
035: #define EDDNR 0x1e9             
036: 
037: #define EDDBUF  0xd00           
038: #define EDDMAXNR 6              
039: #define EDDEXTSIZE 8            
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         
049: #define EDD_MBR_SIG_OFFSET 0x1B8  
050: #define EDD_MBR_SIG_BUF    0x290  
051: #define EDD_MBR_SIG_MAX 16        
052: #define EDD_MBR_SIG_NR_BUF 0x1ea  
053: 
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;         
080:         __u16 key;              
081:         __u8 device_path_info_length;   
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:                 
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                          
190: 
191: #endif                          
192: 
      
      
      
      
   
      
      
         
            
            © Andrew Scott 2006 -
            2025, 
            All Rights Reserved