Ticket #730: intelliprop.h

File intelliprop.h, 5.1 KB (added by Casey Biemiller, 8 years ago)

The header of an IntelliProp specific file.

Line 
1///////////////////////////////////////////////////////////////////////////////
2//
3// FILENAME: intelliprop.h
4// PROJECT :
5// KEYWORDS:
6// LANGUAGE: C++
7// INTELLIPROP AUTHOR : caseyb
8// CREATED : 07/13/2016
9//
10// DESCRIPTION:
11//
12// TESTS USED/CREATED:
13//
14// REVISION HISTORY: Rev1.0
15// Date Person Description
16// -------- ----------- -------------------------------------------------------
17//
18// CURRENT ISSUES: none.
19//
20// REMAINING WORK:
21//
22//
23// This media contains an authorized copy or copies of material owned by
24// IntelliProp Inc. This ownership notice and any other notices included in
25// machine readable copies must be reproduced on all authorized copies.
26//
27// This is confidential and unpublished property of IntelliProp Inc.
28//
29// All rights reserved.
30// Copyright [$Year] [IntelliProp Inc.]
31//
32// Licensed under the IntelliProp Software Products License,
33// Version 1.0 (the \"License\");
34//
35// You may not use this file except in compliance with the IntelliProp
36// Software Products License Agreement.
37//
38// Unless required by applicable law or agreed to in writing, software
39// distributed under the License is distributed on an \"AS IS\" BASIS,
40// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
41//
42///////////////////////////////////////////////////////////////////////////////
43
44/*
45 * intelliprop.h
46 *
47 * Home page of code is: http://www.smartmontools.org
48 *
49 * Copyright (C) 2016 Casey Biemiller
50 * Copyright (C) 2002-11 Bruce Allen
51 * Copyright (C) 2008-15 Christian Franke
52 * Copyright (C) 1999-2000 Michael Cornwell <cornwell@acm.org>
53 *
54 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
56 * the Free Software Foundation; either version 2, or (at your option)
57 * any later version.
58 *
59 * You should have received a copy of the GNU General Public License
60 * (for example COPYING); If not, see <http://www.gnu.org/licenses/>.
61 *
62 * This code was originally developed as a Senior Thesis by Michael Cornwell
63 * at the Concurrent Systems Laboratory (now part of the Storage Systems
64 * Research Center), Jack Baskin School of Engineering, University of
65 * California, Santa Cruz. http://ssrc.soe.ucsc.edu/
66 *
67 */
68
69#ifndef INTELLIPROP_H_
70#define INTELLIPROP_H_
71
72
73#include "dev_interface.h" // ata_device
74#include "atacmds.h" //ATTR_PACKED and ASSERT_SIZEOF_STRUCT
75
76//Vendor Specific log addresses
77#define LOG_C0 0xC0
78#define PAGE_0 0
79
80//Return Codes
81#define IPRSUCCESS 0
82#define IPRDEVFAIL 1
83#define IPRCODEFAIL 2
84#define IPRCMDFAIL 3
85
86//This struct is used for the Vendor Specific log C0 on devices that support it.
87#pragma pack(1)
88struct iprop_internal_log
89{
90 uint32_t drive_select; // Bytes - [ 3: 0] of Log C0
91 uint32_t obsolete; // Bytes - [ 7: 4] of Log C0
92 uint8_t mode_control; // Byte - [ 8] of Log C0
93 uint8_t log_passthrough; // Byte - [ 9] of Log C0
94 uint16_t tier_id; // Bytes - [ 11: 10] of Log C0
95 uint32_t hw_version; // Bytes - [ 15: 12] of Log C0
96 uint32_t fw_version; // Bytes - [ 19: 16] of Log C0
97 uint8_t variant[8]; // Bytes - [ 27: 20] of Log C0
98 uint8_t reserved[228]; // Bytes - [255: 28] of Log C0
99 uint16_t port_0_settings[3]; // Bytes - [263:256] of Log C0
100 uint16_t port_0_reserved;
101 uint16_t port_1_settings[3]; // Bytes - [271:264] of Log C0
102 uint16_t port_1_reserved;
103 uint16_t port_2_settings[3]; // Bytes - [279:272] of Log C0
104 uint16_t port_2_reserved;
105 uint16_t port_3_settings[3]; // Bytes - [287:280] of Log C0
106 uint16_t port_3_reserved;
107 uint16_t port_4_settings[3]; // Bytes - [295:288] of Log C0
108 uint16_t port_4_reserved;
109 uint8_t reserved2[214]; // Bytes - [509:296] of Log C0
110 uint16_t crc; // Bytes - [511:510] of Log C0
111} ATTR_PACKED;
112#pragma pack()
113ASSERT_SIZEOF_STRUCT(iprop_internal_log, 512);
114
115
116// VS LOG MODE CONTROL BITS
117enum {
118 IPROP_VS_LOG_MODE_CTL_AUTO_SUPPORTED = (0 << 0), // NOTE: Not supported
119 IPROP_VS_LOG_MODE_CTL_MANUAL_SUPPORTED = (1 << 1),
120 IPROP_VS_LOG_MODE_CTL_AUTO_ENABLED = (0 << 2), // NOTE: Not supported
121 IPROP_VS_LOG_MODE_CTL_MANUAL_ENABLED = (1 << 3),
122};
123
124
125// VS LOG PORT SETTING BITS
126enum {
127 IPROP_VS_LOG_PORT_WRITE_ENABLE_MASK = 0xC000,
128 IPROP_VS_LOG_PORT_WRITE_ENABLE_VALID = 0x8000,
129 IPROP_VS_LOG_PORT_RX_DC_GAIN_MASK = 0x3000,
130 IPROP_VS_LOG_PORT_RX_DC_GAIN_SHIFT = 12,
131 IPROP_VS_LOG_PORT_RX_EQ_MASK = 0x0F00,
132 IPROP_VS_LOG_PORT_RX_EQ_SHIFT = 8,
133 IPROP_VS_LOG_PORT_TX_PREEMP_MASK = 0x00F8,
134 IPROP_VS_LOG_PORT_TX_PREEMP_SHIFT = 3,
135 IPROP_VS_LOG_PORT_TX_VOD_MASK = 0x0007,
136 IPROP_VS_LOG_PORT_TX_VOD_SHIFT = 0,
137};
138
139//Used to get options selected in smartctl.cpp to functions in intelliprop.cpp
140struct intelliprop_args
141{
142 bool issue_intelliprop_cmd;
143 bool is_routed_cmd;
144 int drive_select;
145};
146
147void iprop_dump_log_structure(struct iprop_internal_log const * const log);
148
149//The only function that should need to be called for ata devices.
150int iprop_main_ata(ata_device * device, intelliprop_args iprop_args);
151#endif /* INTELLIPROP_H_ */