linux-headers (unknown)

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