/*
* os_freebsd.h
*
- * Home page of code is: http://smartmontools.sourceforge.net
+ * Home page of code is: http://www.smartmontools.org
*
- * Copyright (C) 2003-6 Eduard Martinescu <smartmontools-support@lists.sourceforge.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * You should have received a copy of the GNU General Public License
- * (for example COPYING); if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code was originally developed as a Senior Thesis by Michael Cornwell
- * at the Concurrent Systems Laboratory (now part of the Storage Systems
- * Research Center), Jack Baskin School of Engineering, University of
- * California, Santa Cruz. http://ssrc.soe.ucsc.edu/
+ * Copyright (C) 2003-8 Eduard Martinescu
*
+ * SPDX-License-Identifier: GPL-2.0-or-later
*/
/*-
#ifndef OS_FREEBSD_H_
#define OS_FREEBSD_H_
-#define OS_FREEBSD_H_CVSID "$Id: os_freebsd.h,v 1.21 2007/09/06 08:48:55 ballen4705 Exp $\n"
+#define OS_FREEBSD_H_CVSID "$Id: os_freebsd.h 4760 2018-08-19 18:45:53Z chrfranke $"
-struct freebsd_dev_channel {
- int channel; // the ATA channel to work with
- int device; // the device on the channel
- int atacommand; // the ATA Command file descriptor (/dev/ata)
- char* devname; // the SCSI device name
- int unitnum; // the SCSI unit number
- int scsicontrol; // the SCSI control interface
-};
-
-#define FREEBSD_MAXDEV 64
-#define FREEBSD_FDOFFSET 16;
#define MAX_NUM_DEV 26
#ifdef HAVE_SYS_TWEREG_H
#endif
+#define HPT_CTL_CODE(x) (x+0xFF00)
+#define HPT_IOCTL_GET_CHANNEL_INFO HPT_CTL_CODE(3)
+#define HPT_IOCTL_GET_CHANNEL_INFO_V2 HPT_CTL_CODE(53)
+#define HPT_IOCTL_IDE_PASS_THROUGH HPT_CTL_CODE(24)
+
+#define HPT_READ 1
+#define HPT_WRITE 2
+
+#define HPT_IOCTL_MAGIC 0xA1B2C3D4
+
+#define MAXDEV_PER_CHANNEL 2
+#define PMPORT_PER_CHANNEL 15 /* max devices connected to this channel via pmport */
+
+#pragma pack(1)
+typedef struct _HPT_CHANNEL_INFO {
+ unsigned int reserve1;
+ unsigned int reserve2;
+ unsigned int devices[MAXDEV_PER_CHANNEL];
+} HPT_CHANNEL_INFO, *PHPT_CHANNEL_INFO;
+
+typedef struct _HPT_CHANNEL_INFO_V2 {
+ unsigned int reserve1;
+ unsigned int reserve2;
+ unsigned int devices[PMPORT_PER_CHANNEL];
+} HPT_CHANNEL_INFO_V2, *PHPT_CHANNEL_INFO_V2;
+
+typedef struct _HPT_IOCTL_PARAM {
+ unsigned int magic; /* used to check if it's a valid ioctl packet */
+ unsigned int ctrl_code; /* operation control code */
+ void* in; /* input data buffer */
+ unsigned int in_size; /* size of input data buffer */
+ void* out; /* output data buffer */
+ unsigned int out_size; /* size of output data buffer */
+ void* returned_size; /* count of chars returned */
+} HPT_IOCTL_PARAM, *PHPT_IOCTL_PARAM;
+#define HPT_DO_IOCONTROL _IOW('H', 0, HPT_IOCTL_PARAM)
+
+typedef struct _HPT_PASS_THROUGH_HEADER {
+ unsigned int id; /* disk ID */
+ unsigned char feature;
+ unsigned char sectorcount;
+ unsigned char lbalow;
+ unsigned char lbamid;
+ unsigned char lbahigh;
+ unsigned char driverhead;
+ unsigned char command;
+ unsigned char sectors; /* data size in sectors, if the command has data transfer */
+ unsigned char protocol; /* HPT_(READ,WRITE) or zero for non-DATA */
+ unsigned char reserve[3];
+}
+HPT_PASS_THROUGH_HEADER, *PHPT_PASS_THROUGH_HEADER;
+#pragma pack()
#ifndef __unused
#define __unused __attribute__ ((__unused__))