1226748Sjhb/*-
2283927Sjhb * Copyright (c) 2011 Hudson River Trading LLC
3226748Sjhb * Written by: John H. Baldwin <jhb@FreeBSD.org>
4226748Sjhb * All rights reserved.
5226748Sjhb *
6226748Sjhb * Redistribution and use in source and binary forms, with or without
7226748Sjhb * modification, are permitted provided that the following conditions
8226748Sjhb * are met:
9226748Sjhb * 1. Redistributions of source code must retain the above copyright
10226748Sjhb *    notice, this list of conditions and the following disclaimer.
11226748Sjhb * 2. Redistributions in binary form must reproduce the above copyright
12226748Sjhb *    notice, this list of conditions and the following disclaimer in the
13226748Sjhb *    documentation and/or other materials provided with the distribution.
14226748Sjhb *
15226748Sjhb * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16226748Sjhb * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17226748Sjhb * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18226748Sjhb * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19226748Sjhb * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20226748Sjhb * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21226748Sjhb * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22226748Sjhb * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23226748Sjhb * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24226748Sjhb * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25226748Sjhb * SUCH DAMAGE.
26226748Sjhb *
27226748Sjhb * $FreeBSD$
28226748Sjhb */
29226748Sjhb
30226748Sjhb#ifndef	_EDD_H_
31226748Sjhb#define	_EDD_H_
32226748Sjhb
33226748Sjhb/* Supported interfaces for "Check Extensions Present". */
34226748Sjhb#define	EDD_INTERFACE_FIXED_DISK	0x01
35226748Sjhb#define	EDD_INTERFACE_EJECT		0x02
36226748Sjhb#define	EDD_INTERFACE_EDD		0x04
37226748Sjhb
38226748Sjhbstruct edd_packet {
39226748Sjhb	uint16_t	len;
40226748Sjhb	uint16_t	count;
41226748Sjhb	uint16_t	off;
42226748Sjhb	uint16_t	seg;
43226748Sjhb	uint64_t	lba;
44226748Sjhb};
45226748Sjhb
46226748Sjhbstruct edd_packet_v3 {
47226748Sjhb	uint16_t	len;
48226748Sjhb	uint16_t	count;
49226748Sjhb	uint16_t	off;
50226748Sjhb	uint16_t	seg;
51226748Sjhb	uint64_t	lba;
52226748Sjhb	uint64_t	phys_addr;
53226748Sjhb};
54226748Sjhb
55226748Sjhbstruct edd_params {
56226748Sjhb	uint16_t	len;
57226748Sjhb	uint16_t	flags;
58226748Sjhb	uint32_t	cylinders;
59226748Sjhb	uint32_t	heads;
60226748Sjhb	uint32_t	sectors_per_track;
61226748Sjhb	uint64_t	sectors;
62226748Sjhb	uint16_t	sector_size;
63226748Sjhb	uint16_t	edd_params_seg;
64226748Sjhb	uint16_t	edd_params_off;
65243025Savg} __packed;
66226748Sjhb
67226748Sjhbstruct edd_device_path_v3 {
68226748Sjhb	uint16_t	key;
69226748Sjhb	uint8_t		len;
70226748Sjhb	uint8_t		reserved[3];
71226748Sjhb	char		host_bus[4];
72226748Sjhb	char		interface[8];
73226748Sjhb	uint64_t	interface_path;
74226748Sjhb	uint64_t	device_path;
75226748Sjhb	uint8_t		reserved2[1];
76226748Sjhb	uint8_t		checksum;
77243025Savg} __packed;
78226748Sjhb
79226748Sjhbstruct edd_params_v3 {
80226748Sjhb	struct edd_params params;
81226748Sjhb	struct edd_device_path_v3 device_path;
82243025Savg} __packed;
83226748Sjhb
84226748Sjhbstruct edd_device_path_v4 {
85226748Sjhb	uint16_t	key;
86226748Sjhb	uint8_t		len;
87226748Sjhb	uint8_t		reserved[3];
88226748Sjhb	char		host_bus[4];
89226748Sjhb	char		interface[8];
90226748Sjhb	uint64_t	interface_path;
91226748Sjhb	uint64_t	device_path[2];
92226748Sjhb	uint8_t		reserved2[1];
93226748Sjhb	uint8_t		checksum;
94243025Savg} __packed;
95226748Sjhb
96226748Sjhbstruct edd_params_v4 {
97226748Sjhb	struct edd_params params;
98226748Sjhb	struct edd_device_path_v4 device_path;
99243025Savg} __packed;
100226748Sjhb
101226748Sjhb#define	EDD_FLAGS_DMA_BOUNDARY_HANDLING		0x0001
102226748Sjhb#define	EDD_FLAGS_REMOVABLE_MEDIA		0x0002
103226748Sjhb#define	EDD_FLAGS_WRITE_VERIFY			0x0004
104226748Sjhb#define	EDD_FLAGS_MEDIA_CHANGE_NOTIFICATION	0x0008
105226748Sjhb#define	EDD_FLAGS_LOCKABLE_MEDIA		0x0010
106226748Sjhb#define	EDD_FLAGS_NO_MEDIA_PRESENT		0x0020
107226748Sjhb
108226748Sjhb#define	EDD_DEVICE_PATH_KEY	0xbedd
109226748Sjhb
110226748Sjhb#endif /* !_EDD_H_ */
111