]> git.proxmox.com Git - mirror_smartmontools-debian.git/blame - dev_areca.h
Stop passing arguments to dh_installinit
[mirror_smartmontools-debian.git] / dev_areca.h
CommitLineData
ee38a438
GI
1/*
2 * dev_areca.h
3 *
6b80b4d2 4 * Home page of code is: http://www.smartmontools.org
ee38a438
GI
5 *
6 * Copyright (C) 2012 Hank Wu <hank@areca.com.tw>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2, or (at your option)
11 * any later version.
12 *
13 * You should have received a copy of the GNU General Public License
14 * (for example COPYING); If not, see <http://www.gnu.org/licenses/>.
15 *
16 */
17
18#ifndef DEV_ARECA_H
19#define DEV_ARECA_H
20
6b80b4d2 21#define DEV_ARECA_H_CVSID "$Id: dev_areca.h 4146 2015-10-17 12:12:49Z chrfranke $"
ee38a438
GI
22
23/////////////////////////////////////////////////////////////////////////////
24/// Areca RAID support
25
26/* GENERIC ARECA IO CONTROL CODE*/
27enum _GENERIC_ARCMSR_CMDS
28{
29ARCMSR_READ_RQBUFFER = 0,
30ARCMSR_WRITE_WQBUFFER,
31ARCMSR_CLEAR_RQBUFFER,
32ARCMSR_CLEAR_WQBUFFER,
33ARCMSR_RETURN_CODE_3F,
34ARCMSR_CMD_TOTAL
35};
36
37#define ARECA_SIG_STR "ARCMSR"
38
39#if defined(_WIN32) || defined(__CYGWIN__)
40#define ARCMSR_IOCTL_READ_RQBUFFER 0x90002004
41#define ARCMSR_IOCTL_WRITE_WQBUFFER 0x90002008
42#define ARCMSR_IOCTL_CLEAR_RQBUFFER 0x9000200C
43#define ARCMSR_IOCTL_CLEAR_WQBUFFER 0x90002010
44#define ARCMSR_IOCTL_RETURN_CODE_3F 0x90002018
45#elif defined(__linux__)
46/*DeviceType*/
47#define ARECA_SATA_RAID 0x90000000
48/*FunctionCode*/
49#define FUNCTION_READ_RQBUFFER 0x0801
50#define FUNCTION_WRITE_WQBUFFER 0x0802
51#define FUNCTION_CLEAR_RQBUFFER 0x0803
52#define FUNCTION_CLEAR_WQBUFFER 0x0804
53#define FUNCTION_RETURN_CODE_3F 0x0806
54
55/* ARECA IO CONTROL CODE*/
56#define ARCMSR_IOCTL_READ_RQBUFFER (ARECA_SATA_RAID | FUNCTION_READ_RQBUFFER)
57#define ARCMSR_IOCTL_WRITE_WQBUFFER (ARECA_SATA_RAID | FUNCTION_WRITE_WQBUFFER)
58#define ARCMSR_IOCTL_CLEAR_RQBUFFER (ARECA_SATA_RAID | FUNCTION_CLEAR_RQBUFFER)
59#define ARCMSR_IOCTL_CLEAR_WQBUFFER (ARECA_SATA_RAID | FUNCTION_CLEAR_WQBUFFER)
60#define ARCMSR_IOCTL_RETURN_CODE_3F (ARECA_SATA_RAID | FUNCTION_RETURN_CODE_3F)
d2e702cf 61#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
ee38a438
GI
62#include <sys/ioctl.h> // _IOWR
63
64/*FunctionCode*/
65#define FUNCTION_READ_RQBUFFER 0x0801
66#define FUNCTION_WRITE_WQBUFFER 0x0802
67#define FUNCTION_CLEAR_RQBUFFER 0x0803
68#define FUNCTION_CLEAR_WQBUFFER 0x0804
69#define FUNCTION_RETURN_CODE_3F 0x0806
70
71/* ARECA IO CONTROL CODE*/
72#define ARCMSR_IOCTL_READ_RQBUFFER _IOWR('F', FUNCTION_READ_RQBUFFER, sSRB_BUFFER)
73#define ARCMSR_IOCTL_WRITE_WQBUFFER _IOWR('F', FUNCTION_WRITE_WQBUFFER, sSRB_BUFFER)
74#define ARCMSR_IOCTL_CLEAR_RQBUFFER _IOWR('F', FUNCTION_CLEAR_RQBUFFER, sSRB_BUFFER)
75#define ARCMSR_IOCTL_CLEAR_WQBUFFER _IOWR('F', FUNCTION_CLEAR_WQBUFFER, sSRB_BUFFER)
76#define ARCMSR_IOCTL_RETURN_CODE_3F _IOWR('F', FUNCTION_RETURN_CODE_3F, sSRB_BUFFER)
77#endif
78
79
80// The SRB_IO_CONTROL & SRB_BUFFER structures are used to communicate(to/from) to areca driver
81typedef struct _ARCMSR_IO_HDR
82{
83 unsigned int HeaderLength;
84 unsigned char Signature[8];
85 unsigned int Timeout;
86 unsigned int ControlCode;
87 unsigned int ReturnCode;
88 unsigned int Length;
89} sARCMSR_IO_HDR;
90
91typedef struct _SRB_BUFFER
92{
93 sARCMSR_IO_HDR srbioctl;
94 unsigned char ioctldatabuffer[1032]; // the buffer to put the command data to/from firmware
95} sSRB_BUFFER;
96
97class generic_areca_device :
98virtual public smart_device
99{
100public:
101 generic_areca_device(smart_interface * intf, const char * dev_name, int disknum, int encnum = 1);
102 ~generic_areca_device() throw();
103
104 /////////////////////////////////////////////////////////////////////
105 // OS-dependent functions
106 virtual bool arcmsr_lock() = 0;
107 virtual bool arcmsr_unlock() = 0;
108 virtual int arcmsr_do_scsi_io(struct scsi_cmnd_io * iop) = 0;
109
110 /////////////////////////////////////////////////////////////////////
111 // OS-independent functions
112 virtual int arcmsr_command_handler(unsigned long arcmsr_cmd, unsigned char *data, int data_len);
113 virtual int arcmsr_ui_handler(unsigned char *areca_packet, int areca_packet_len, unsigned char *result);
114 virtual bool arcmsr_probe();
115 virtual int arcmsr_get_dev_type();
116 virtual int arcmsr_get_controller_type();
117 virtual bool arcmsr_scsi_pass_through(scsi_cmnd_io * iop);
118 virtual bool arcmsr_ata_pass_through(const ata_cmd_in & in, ata_cmd_out & out);
119
120protected:
6b80b4d2
JD
121 generic_areca_device()
122 : smart_device(never_called),
123 m_disknum(-1), m_encnum(-1)
124 { }
ee38a438
GI
125
126 void set_disknum(int disknum)
127 {m_disknum = disknum;}
128
129 void set_encnum(int encnum)
130 {m_encnum = encnum;}
131
132 int get_disknum()
133 {return m_disknum;}
134
135 int get_encnum()
136 {return m_encnum;}
137
138private:
139 int m_disknum; ///< Disk number.
140 int m_encnum; ///< Enclosure number.
141 };
142
143// SATA(ATA) device behind Areca RAID Controller
144class areca_ata_device
145: public ata_device,
146 public generic_areca_device
147{
148public:
149 areca_ata_device(smart_interface * intf, const char * dev_name, int disknum, int encnum = 1);
150 ~areca_ata_device() throw();
151 bool arcmsr_lock() { return true; }
152 bool arcmsr_unlock() { return true; }
153 int arcmsr_do_scsi_io(struct scsi_cmnd_io * /* iop */)
154 {
155 return -1;
156 }
157protected:
158 areca_ata_device(): smart_device(never_called)
159 {
160 }
161 virtual bool ata_pass_through(const ata_cmd_in & in, ata_cmd_out & out);
162};
163
164// SAS(SCSI) device behind Areca RAID Controller
165class areca_scsi_device
166: public scsi_device,
167 public generic_areca_device
168{
169public:
170 areca_scsi_device(smart_interface * intf, const char * dev_name, int disknum, int encnum = 1);
171 ~areca_scsi_device() throw();
172 bool arcmsr_lock() { return true; }
173 bool arcmsr_unlock() { return true; }
174 int arcmsr_do_scsi_io(struct scsi_cmnd_io * /* iop */)
175 {
176 return -1;
177 }
178protected:
179 areca_scsi_device(): smart_device(never_called)
180 {
181 }
182 virtual bool scsi_pass_through(scsi_cmnd_io * iop);
183};
184
185#endif