1 /*- 2 * Copyright (c) 2011 Hudson River Trading LLC 3 * Written by: John H. Baldwin <jhb@FreeBSD.org> 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * 27 * $FreeBSD$ 28 */ 29 30 #ifndef _EDD_H_ 31 #define _EDD_H_ 32 33 /* Supported interfaces for "Check Extensions Present". */ 34 #define EDD_INTERFACE_FIXED_DISK 0x01 35 #define EDD_INTERFACE_EJECT 0x02 36 #define EDD_INTERFACE_EDD 0x04 37 38 struct edd_packet { 39 uint16_t len; 40 uint16_t count; 41 uint16_t off; 42 uint16_t seg; 43 uint64_t lba; 44 }; 45 46 struct edd_packet_v3 { 47 uint16_t len; 48 uint16_t count; 49 uint16_t off; 50 uint16_t seg; 51 uint64_t lba; 52 uint64_t phys_addr; 53 }; 54 55 struct edd_params { 56 uint16_t len; 57 uint16_t flags; 58 uint32_t cylinders; 59 uint32_t heads; 60 uint32_t sectors_per_track; 61 uint64_t sectors; 62 uint16_t sector_size; 63 uint16_t edd_params_seg; 64 uint16_t edd_params_off; 65 } __packed; 66 67 struct edd_device_path_v3 { 68 uint16_t key; 69 uint8_t len; 70 uint8_t reserved[3]; 71 char host_bus[4]; 72 char interface[8]; 73 uint64_t interface_path; 74 uint64_t device_path; 75 uint8_t reserved2[1]; 76 uint8_t checksum; 77 } __packed; 78 79 struct edd_params_v3 { 80 struct edd_params params; 81 struct edd_device_path_v3 device_path; 82 } __packed; 83 84 struct edd_device_path_v4 { 85 uint16_t key; 86 uint8_t len; 87 uint8_t reserved[3]; 88 char host_bus[4]; 89 char interface[8]; 90 uint64_t interface_path; 91 uint64_t device_path[2]; 92 uint8_t reserved2[1]; 93 uint8_t checksum; 94 } __packed; 95 96 struct edd_params_v4 { 97 struct edd_params params; 98 struct edd_device_path_v4 device_path; 99 } __packed; 100 101 #define EDD_FLAGS_DMA_BOUNDARY_HANDLING 0x0001 102 #define EDD_FLAGS_REMOVABLE_MEDIA 0x0002 103 #define EDD_FLAGS_WRITE_VERIFY 0x0004 104 #define EDD_FLAGS_MEDIA_CHANGE_NOTIFICATION 0x0008 105 #define EDD_FLAGS_LOCKABLE_MEDIA 0x0010 106 #define EDD_FLAGS_NO_MEDIA_PRESENT 0x0020 107 108 #define EDD_DEVICE_PATH_KEY 0xbedd 109 110 #endif /* !_EDD_H_ */ 111