1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*f80ad8b4SAndroid Build Coastguard Worker /* 3*f80ad8b4SAndroid Build Coastguard Worker * linux/include/linux/edd.h 4*f80ad8b4SAndroid Build Coastguard Worker * Copyright (C) 2002, 2003, 2004 Dell Inc. 5*f80ad8b4SAndroid Build Coastguard Worker * by Matt Domsch <[email protected]> 6*f80ad8b4SAndroid Build Coastguard Worker * 7*f80ad8b4SAndroid Build Coastguard Worker * structures and definitions for the int 13h, ax={41,48}h 8*f80ad8b4SAndroid Build Coastguard Worker * BIOS Enhanced Disk Drive Services 9*f80ad8b4SAndroid Build Coastguard Worker * This is based on the T13 group document D1572 Revision 0 (August 14 2002) 10*f80ad8b4SAndroid Build Coastguard Worker * available at http://www.t13.org/docs2002/d1572r0.pdf. It is 11*f80ad8b4SAndroid Build Coastguard Worker * very similar to D1484 Revision 3 http://www.t13.org/docs2002/d1484r3.pdf 12*f80ad8b4SAndroid Build Coastguard Worker * 13*f80ad8b4SAndroid Build Coastguard Worker * In a nutshell, arch/{i386,x86_64}/boot/setup.S populates a scratch 14*f80ad8b4SAndroid Build Coastguard Worker * table in the boot_params that contains a list of BIOS-enumerated 15*f80ad8b4SAndroid Build Coastguard Worker * boot devices. 16*f80ad8b4SAndroid Build Coastguard Worker * In arch/{i386,x86_64}/kernel/setup.c, this information is 17*f80ad8b4SAndroid Build Coastguard Worker * transferred into the edd structure, and in drivers/firmware/edd.c, that 18*f80ad8b4SAndroid Build Coastguard Worker * information is used to identify BIOS boot disk. The code in setup.S 19*f80ad8b4SAndroid Build Coastguard Worker * is very sensitive to the size of these structures. 20*f80ad8b4SAndroid Build Coastguard Worker * 21*f80ad8b4SAndroid Build Coastguard Worker * This program is free software; you can redistribute it and/or modify 22*f80ad8b4SAndroid Build Coastguard Worker * it under the terms of the GNU General Public License v2.0 as published by 23*f80ad8b4SAndroid Build Coastguard Worker * the Free Software Foundation 24*f80ad8b4SAndroid Build Coastguard Worker * 25*f80ad8b4SAndroid Build Coastguard Worker * This program is distributed in the hope that it will be useful, 26*f80ad8b4SAndroid Build Coastguard Worker * but WITHOUT ANY WARRANTY; without even the implied warranty of 27*f80ad8b4SAndroid Build Coastguard Worker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 28*f80ad8b4SAndroid Build Coastguard Worker * GNU General Public License for more details. 29*f80ad8b4SAndroid Build Coastguard Worker * 30*f80ad8b4SAndroid Build Coastguard Worker */ 31*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_EDD_H 32*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_LINUX_EDD_H 33*f80ad8b4SAndroid Build Coastguard Worker 34*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h> 35*f80ad8b4SAndroid Build Coastguard Worker 36*f80ad8b4SAndroid Build Coastguard Worker #define EDDNR 0x1e9 /* addr of number of edd_info structs at EDDBUF 37*f80ad8b4SAndroid Build Coastguard Worker in boot_params - treat this as 1 byte */ 38*f80ad8b4SAndroid Build Coastguard Worker #define EDDBUF 0xd00 /* addr of edd_info structs in boot_params */ 39*f80ad8b4SAndroid Build Coastguard Worker #define EDDMAXNR 6 /* number of edd_info structs starting at EDDBUF */ 40*f80ad8b4SAndroid Build Coastguard Worker #define EDDEXTSIZE 8 /* change these if you muck with the structures */ 41*f80ad8b4SAndroid Build Coastguard Worker #define EDDPARMSIZE 74 42*f80ad8b4SAndroid Build Coastguard Worker #define CHECKEXTENSIONSPRESENT 0x41 43*f80ad8b4SAndroid Build Coastguard Worker #define GETDEVICEPARAMETERS 0x48 44*f80ad8b4SAndroid Build Coastguard Worker #define LEGACYGETDEVICEPARAMETERS 0x08 45*f80ad8b4SAndroid Build Coastguard Worker #define EDDMAGIC1 0x55AA 46*f80ad8b4SAndroid Build Coastguard Worker #define EDDMAGIC2 0xAA55 47*f80ad8b4SAndroid Build Coastguard Worker 48*f80ad8b4SAndroid Build Coastguard Worker 49*f80ad8b4SAndroid Build Coastguard Worker #define READ_SECTORS 0x02 /* int13 AH=0x02 is READ_SECTORS command */ 50*f80ad8b4SAndroid Build Coastguard Worker #define EDD_MBR_SIG_OFFSET 0x1B8 /* offset of signature in the MBR */ 51*f80ad8b4SAndroid Build Coastguard Worker #define EDD_MBR_SIG_BUF 0x290 /* addr in boot params */ 52*f80ad8b4SAndroid Build Coastguard Worker #define EDD_MBR_SIG_MAX 16 /* max number of signatures to store */ 53*f80ad8b4SAndroid Build Coastguard Worker #define EDD_MBR_SIG_NR_BUF 0x1ea /* addr of number of MBR signtaures at EDD_MBR_SIG_BUF 54*f80ad8b4SAndroid Build Coastguard Worker in boot_params - treat this as 1 byte */ 55*f80ad8b4SAndroid Build Coastguard Worker 56*f80ad8b4SAndroid Build Coastguard Worker #ifndef __ASSEMBLY__ 57*f80ad8b4SAndroid Build Coastguard Worker 58*f80ad8b4SAndroid Build Coastguard Worker #define EDD_EXT_FIXED_DISK_ACCESS (1 << 0) 59*f80ad8b4SAndroid Build Coastguard Worker #define EDD_EXT_DEVICE_LOCKING_AND_EJECTING (1 << 1) 60*f80ad8b4SAndroid Build Coastguard Worker #define EDD_EXT_ENHANCED_DISK_DRIVE_SUPPORT (1 << 2) 61*f80ad8b4SAndroid Build Coastguard Worker #define EDD_EXT_64BIT_EXTENSIONS (1 << 3) 62*f80ad8b4SAndroid Build Coastguard Worker 63*f80ad8b4SAndroid Build Coastguard Worker #define EDD_INFO_DMA_BOUNDARY_ERROR_TRANSPARENT (1 << 0) 64*f80ad8b4SAndroid Build Coastguard Worker #define EDD_INFO_GEOMETRY_VALID (1 << 1) 65*f80ad8b4SAndroid Build Coastguard Worker #define EDD_INFO_REMOVABLE (1 << 2) 66*f80ad8b4SAndroid Build Coastguard Worker #define EDD_INFO_WRITE_VERIFY (1 << 3) 67*f80ad8b4SAndroid Build Coastguard Worker #define EDD_INFO_MEDIA_CHANGE_NOTIFICATION (1 << 4) 68*f80ad8b4SAndroid Build Coastguard Worker #define EDD_INFO_LOCKABLE (1 << 5) 69*f80ad8b4SAndroid Build Coastguard Worker #define EDD_INFO_NO_MEDIA_PRESENT (1 << 6) 70*f80ad8b4SAndroid Build Coastguard Worker #define EDD_INFO_USE_INT13_FN50 (1 << 7) 71*f80ad8b4SAndroid Build Coastguard Worker 72*f80ad8b4SAndroid Build Coastguard Worker struct edd_device_params { 73*f80ad8b4SAndroid Build Coastguard Worker __u16 length; 74*f80ad8b4SAndroid Build Coastguard Worker __u16 info_flags; 75*f80ad8b4SAndroid Build Coastguard Worker __u32 num_default_cylinders; 76*f80ad8b4SAndroid Build Coastguard Worker __u32 num_default_heads; 77*f80ad8b4SAndroid Build Coastguard Worker __u32 sectors_per_track; 78*f80ad8b4SAndroid Build Coastguard Worker __u64 number_of_sectors; 79*f80ad8b4SAndroid Build Coastguard Worker __u16 bytes_per_sector; 80*f80ad8b4SAndroid Build Coastguard Worker __u32 dpte_ptr; /* 0xFFFFFFFF for our purposes */ 81*f80ad8b4SAndroid Build Coastguard Worker __u16 key; /* = 0xBEDD */ 82*f80ad8b4SAndroid Build Coastguard Worker __u8 device_path_info_length; /* = 44 */ 83*f80ad8b4SAndroid Build Coastguard Worker __u8 reserved2; 84*f80ad8b4SAndroid Build Coastguard Worker __u16 reserved3; 85*f80ad8b4SAndroid Build Coastguard Worker __u8 host_bus_type[4]; 86*f80ad8b4SAndroid Build Coastguard Worker __u8 interface_type[8]; 87*f80ad8b4SAndroid Build Coastguard Worker union { 88*f80ad8b4SAndroid Build Coastguard Worker struct { 89*f80ad8b4SAndroid Build Coastguard Worker __u16 base_address; 90*f80ad8b4SAndroid Build Coastguard Worker __u16 reserved1; 91*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved2; 92*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) isa; 93*f80ad8b4SAndroid Build Coastguard Worker struct { 94*f80ad8b4SAndroid Build Coastguard Worker __u8 bus; 95*f80ad8b4SAndroid Build Coastguard Worker __u8 slot; 96*f80ad8b4SAndroid Build Coastguard Worker __u8 function; 97*f80ad8b4SAndroid Build Coastguard Worker __u8 channel; 98*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved; 99*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) pci; 100*f80ad8b4SAndroid Build Coastguard Worker /* pcix is same as pci */ 101*f80ad8b4SAndroid Build Coastguard Worker struct { 102*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved; 103*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) ibnd; 104*f80ad8b4SAndroid Build Coastguard Worker struct { 105*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved; 106*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) xprs; 107*f80ad8b4SAndroid Build Coastguard Worker struct { 108*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved; 109*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) htpt; 110*f80ad8b4SAndroid Build Coastguard Worker struct { 111*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved; 112*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) unknown; 113*f80ad8b4SAndroid Build Coastguard Worker } interface_path; 114*f80ad8b4SAndroid Build Coastguard Worker union { 115*f80ad8b4SAndroid Build Coastguard Worker struct { 116*f80ad8b4SAndroid Build Coastguard Worker __u8 device; 117*f80ad8b4SAndroid Build Coastguard Worker __u8 reserved1; 118*f80ad8b4SAndroid Build Coastguard Worker __u16 reserved2; 119*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved3; 120*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved4; 121*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) ata; 122*f80ad8b4SAndroid Build Coastguard Worker struct { 123*f80ad8b4SAndroid Build Coastguard Worker __u8 device; 124*f80ad8b4SAndroid Build Coastguard Worker __u8 lun; 125*f80ad8b4SAndroid Build Coastguard Worker __u8 reserved1; 126*f80ad8b4SAndroid Build Coastguard Worker __u8 reserved2; 127*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved3; 128*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved4; 129*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) atapi; 130*f80ad8b4SAndroid Build Coastguard Worker struct { 131*f80ad8b4SAndroid Build Coastguard Worker __u16 id; 132*f80ad8b4SAndroid Build Coastguard Worker __u64 lun; 133*f80ad8b4SAndroid Build Coastguard Worker __u16 reserved1; 134*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved2; 135*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) scsi; 136*f80ad8b4SAndroid Build Coastguard Worker struct { 137*f80ad8b4SAndroid Build Coastguard Worker __u64 serial_number; 138*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved; 139*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) usb; 140*f80ad8b4SAndroid Build Coastguard Worker struct { 141*f80ad8b4SAndroid Build Coastguard Worker __u64 eui; 142*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved; 143*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) i1394; 144*f80ad8b4SAndroid Build Coastguard Worker struct { 145*f80ad8b4SAndroid Build Coastguard Worker __u64 wwid; 146*f80ad8b4SAndroid Build Coastguard Worker __u64 lun; 147*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) fibre; 148*f80ad8b4SAndroid Build Coastguard Worker struct { 149*f80ad8b4SAndroid Build Coastguard Worker __u64 identity_tag; 150*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved; 151*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) i2o; 152*f80ad8b4SAndroid Build Coastguard Worker struct { 153*f80ad8b4SAndroid Build Coastguard Worker __u32 array_number; 154*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved1; 155*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved2; 156*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) raid; 157*f80ad8b4SAndroid Build Coastguard Worker struct { 158*f80ad8b4SAndroid Build Coastguard Worker __u8 device; 159*f80ad8b4SAndroid Build Coastguard Worker __u8 reserved1; 160*f80ad8b4SAndroid Build Coastguard Worker __u16 reserved2; 161*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved3; 162*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved4; 163*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) sata; 164*f80ad8b4SAndroid Build Coastguard Worker struct { 165*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved1; 166*f80ad8b4SAndroid Build Coastguard Worker __u64 reserved2; 167*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)) unknown; 168*f80ad8b4SAndroid Build Coastguard Worker } device_path; 169*f80ad8b4SAndroid Build Coastguard Worker __u8 reserved4; 170*f80ad8b4SAndroid Build Coastguard Worker __u8 checksum; 171*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)); 172*f80ad8b4SAndroid Build Coastguard Worker 173*f80ad8b4SAndroid Build Coastguard Worker struct edd_info { 174*f80ad8b4SAndroid Build Coastguard Worker __u8 device; 175*f80ad8b4SAndroid Build Coastguard Worker __u8 version; 176*f80ad8b4SAndroid Build Coastguard Worker __u16 interface_support; 177*f80ad8b4SAndroid Build Coastguard Worker __u16 legacy_max_cylinder; 178*f80ad8b4SAndroid Build Coastguard Worker __u8 legacy_max_head; 179*f80ad8b4SAndroid Build Coastguard Worker __u8 legacy_sectors_per_track; 180*f80ad8b4SAndroid Build Coastguard Worker struct edd_device_params params; 181*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((packed)); 182*f80ad8b4SAndroid Build Coastguard Worker 183*f80ad8b4SAndroid Build Coastguard Worker struct edd { 184*f80ad8b4SAndroid Build Coastguard Worker unsigned int mbr_signature[EDD_MBR_SIG_MAX]; 185*f80ad8b4SAndroid Build Coastguard Worker struct edd_info edd_info[EDDMAXNR]; 186*f80ad8b4SAndroid Build Coastguard Worker unsigned char mbr_signature_nr; 187*f80ad8b4SAndroid Build Coastguard Worker unsigned char edd_info_nr; 188*f80ad8b4SAndroid Build Coastguard Worker }; 189*f80ad8b4SAndroid Build Coastguard Worker 190*f80ad8b4SAndroid Build Coastguard Worker #endif /*!__ASSEMBLY__ */ 191*f80ad8b4SAndroid Build Coastguard Worker 192*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_LINUX_EDD_H */ 193